创建新工程
This commit is contained in:
661
scripts/RelationshipNetwork.gd
Normal file
661
scripts/RelationshipNetwork.gd
Normal file
@@ -0,0 +1,661 @@
|
||||
extends Node
|
||||
class_name RelationshipNetwork
|
||||
## 角色关系网络
|
||||
## 管理角色之间的复杂关系和社交网络
|
||||
|
||||
# 关系类型枚举
|
||||
enum RelationshipType {
|
||||
FRIEND, # 好友
|
||||
CLOSE_FRIEND, # 密友
|
||||
ACQUAINTANCE, # 熟人
|
||||
COLLEAGUE, # 同事
|
||||
MENTOR, # 导师
|
||||
STUDENT, # 学生
|
||||
RIVAL, # 竞争对手
|
||||
NEUTRAL, # 中性
|
||||
DISLIKE # 不喜欢
|
||||
}
|
||||
|
||||
# 关系数据结构
|
||||
class Relationship:
|
||||
var from_character: String
|
||||
var to_character: String
|
||||
var relationship_type: RelationshipType
|
||||
var strength: float = 0.0 # 关系强度 -100 到 100
|
||||
var trust_level: float = 0.0 # 信任度 0 到 100
|
||||
var interaction_history: Array[Dictionary] = []
|
||||
var shared_experiences: Array[String] = []
|
||||
var created_at: float
|
||||
var last_updated: float
|
||||
var tags: Array[String] = [] # 关系标签
|
||||
|
||||
func _init(from_char: String, to_char: String, rel_type: RelationshipType = RelationshipType.NEUTRAL):
|
||||
from_character = from_char
|
||||
to_character = to_char
|
||||
relationship_type = rel_type
|
||||
created_at = Time.get_unix_time_from_system()
|
||||
last_updated = created_at
|
||||
strength = _get_default_strength(rel_type)
|
||||
trust_level = _get_default_trust(rel_type)
|
||||
|
||||
func _get_default_strength(rel_type: RelationshipType) -> float:
|
||||
match rel_type:
|
||||
RelationshipType.FRIEND: return 30.0
|
||||
RelationshipType.CLOSE_FRIEND: return 60.0
|
||||
RelationshipType.ACQUAINTANCE: return 10.0
|
||||
RelationshipType.COLLEAGUE: return 20.0
|
||||
RelationshipType.MENTOR: return 40.0
|
||||
RelationshipType.STUDENT: return 25.0
|
||||
RelationshipType.RIVAL: return -20.0
|
||||
RelationshipType.DISLIKE: return -40.0
|
||||
_: return 0.0
|
||||
|
||||
func _get_default_trust(rel_type: RelationshipType) -> float:
|
||||
match rel_type:
|
||||
RelationshipType.FRIEND: return 50.0
|
||||
RelationshipType.CLOSE_FRIEND: return 80.0
|
||||
RelationshipType.ACQUAINTANCE: return 20.0
|
||||
RelationshipType.COLLEAGUE: return 40.0
|
||||
RelationshipType.MENTOR: return 70.0
|
||||
RelationshipType.STUDENT: return 30.0
|
||||
RelationshipType.RIVAL: return 10.0
|
||||
RelationshipType.DISLIKE: return 5.0
|
||||
_: return 25.0
|
||||
|
||||
# 网络数据存储
|
||||
var relationships: Dictionary = {} # "from_id:to_id" -> Relationship
|
||||
var character_connections: Dictionary = {} # character_id -> Array[character_id]
|
||||
var relationship_groups: Dictionary = {} # group_name -> Array[character_id]
|
||||
var influence_scores: Dictionary = {} # character_id -> float
|
||||
|
||||
# 数据持久化
|
||||
var network_file_path: String = "user://relationship_network.json"
|
||||
|
||||
# 信号
|
||||
signal relationship_created(from_character: String, to_character: String, relationship_type: RelationshipType)
|
||||
signal relationship_updated(from_character: String, to_character: String, old_strength: float, new_strength: float)
|
||||
signal relationship_type_changed(from_character: String, to_character: String, old_type: RelationshipType, new_type: RelationshipType)
|
||||
signal influence_score_changed(character_id: String, old_score: float, new_score: float)
|
||||
signal group_formed(group_name: String, members: Array[String])
|
||||
signal group_disbanded(group_name: String)
|
||||
|
||||
func _ready():
|
||||
"""初始化关系网络"""
|
||||
load_network_data()
|
||||
print("RelationshipNetwork initialized")
|
||||
|
||||
## 创建或更新关系
|
||||
func create_relationship(from_character: String, to_character: String, rel_type: RelationshipType = RelationshipType.NEUTRAL) -> bool:
|
||||
"""
|
||||
创建或更新角色之间的关系
|
||||
@param from_character: 源角色ID
|
||||
@param to_character: 目标角色ID
|
||||
@param rel_type: 关系类型
|
||||
@return: 是否成功创建/更新
|
||||
"""
|
||||
if from_character == to_character:
|
||||
print("Cannot create relationship with self")
|
||||
return false
|
||||
|
||||
var relationship_key = _get_relationship_key(from_character, to_character)
|
||||
var existing_relationship = relationships.get(relationship_key)
|
||||
|
||||
if existing_relationship:
|
||||
# 更新现有关系
|
||||
var old_type = existing_relationship.relationship_type
|
||||
existing_relationship.relationship_type = rel_type
|
||||
existing_relationship.strength = existing_relationship._get_default_strength(rel_type)
|
||||
existing_relationship.trust_level = existing_relationship._get_default_trust(rel_type)
|
||||
existing_relationship.last_updated = Time.get_unix_time_from_system()
|
||||
|
||||
relationship_type_changed.emit(from_character, to_character, old_type, rel_type)
|
||||
print("Relationship updated: ", from_character, " -> ", to_character, " (", RelationshipType.keys()[rel_type], ")")
|
||||
else:
|
||||
# 创建新关系
|
||||
var relationship = Relationship.new(from_character, to_character, rel_type)
|
||||
relationships[relationship_key] = relationship
|
||||
|
||||
# 更新连接索引
|
||||
_add_connection(from_character, to_character)
|
||||
|
||||
relationship_created.emit(from_character, to_character, rel_type)
|
||||
print("Relationship created: ", from_character, " -> ", to_character, " (", RelationshipType.keys()[rel_type], ")")
|
||||
|
||||
# 重新计算影响力分数
|
||||
_recalculate_influence_scores()
|
||||
|
||||
# 保存数据
|
||||
save_network_data()
|
||||
|
||||
return true
|
||||
|
||||
## 记录互动
|
||||
func record_interaction(from_character: String, to_character: String, interaction_type: String, data: Dictionary = {}) -> void:
|
||||
"""
|
||||
记录角色之间的互动
|
||||
@param from_character: 源角色ID
|
||||
@param to_character: 目标角色ID
|
||||
@param interaction_type: 互动类型
|
||||
@param data: 互动数据
|
||||
"""
|
||||
var relationship_key = _get_relationship_key(from_character, to_character)
|
||||
var relationship = relationships.get(relationship_key)
|
||||
|
||||
if not relationship:
|
||||
# 如果关系不存在,创建一个中性关系
|
||||
create_relationship(from_character, to_character, RelationshipType.NEUTRAL)
|
||||
relationship = relationships[relationship_key]
|
||||
|
||||
# 记录互动
|
||||
var interaction_record = {
|
||||
"type": interaction_type,
|
||||
"timestamp": Time.get_unix_time_from_system(),
|
||||
"data": data
|
||||
}
|
||||
|
||||
relationship.interaction_history.append(interaction_record)
|
||||
relationship.last_updated = interaction_record.timestamp
|
||||
|
||||
# 限制历史记录长度
|
||||
if relationship.interaction_history.size() > 100:
|
||||
relationship.interaction_history.pop_front()
|
||||
|
||||
# 根据互动类型调整关系强度
|
||||
_adjust_relationship_strength(relationship, interaction_type, data)
|
||||
|
||||
# 保存数据
|
||||
save_network_data()
|
||||
|
||||
## 调整关系强度
|
||||
func _adjust_relationship_strength(relationship: Relationship, interaction_type: String, _data: Dictionary) -> void:
|
||||
"""
|
||||
根据互动类型调整关系强度
|
||||
@param relationship: 关系对象
|
||||
@param interaction_type: 互动类型
|
||||
@param _data: 互动数据 (暂未使用)
|
||||
"""
|
||||
var old_strength = relationship.strength
|
||||
var strength_change = 0.0
|
||||
var trust_change = 0.0
|
||||
|
||||
match interaction_type:
|
||||
"chat":
|
||||
strength_change = 1.0
|
||||
trust_change = 0.5
|
||||
"private_chat":
|
||||
strength_change = 2.0
|
||||
trust_change = 1.0
|
||||
"group_activity":
|
||||
strength_change = 1.5
|
||||
trust_change = 0.8
|
||||
"help_given":
|
||||
strength_change = 5.0
|
||||
trust_change = 3.0
|
||||
"help_received":
|
||||
strength_change = 3.0
|
||||
trust_change = 2.0
|
||||
"conflict":
|
||||
strength_change = -3.0
|
||||
trust_change = -2.0
|
||||
"collaboration":
|
||||
strength_change = 4.0
|
||||
trust_change = 2.5
|
||||
"gift_given":
|
||||
strength_change = 3.0
|
||||
trust_change = 1.5
|
||||
"shared_achievement":
|
||||
strength_change = 6.0
|
||||
trust_change = 3.0
|
||||
_:
|
||||
strength_change = 0.5
|
||||
|
||||
# 应用变化
|
||||
relationship.strength = clamp(relationship.strength + strength_change, -100.0, 100.0)
|
||||
relationship.trust_level = clamp(relationship.trust_level + trust_change, 0.0, 100.0)
|
||||
|
||||
# 检查关系类型是否需要更新
|
||||
_check_relationship_type_change(relationship)
|
||||
|
||||
# 发射信号
|
||||
if abs(relationship.strength - old_strength) > 0.1:
|
||||
relationship_updated.emit(relationship.from_character, relationship.to_character, old_strength, relationship.strength)
|
||||
|
||||
## 检查关系类型变化
|
||||
func _check_relationship_type_change(relationship: Relationship) -> void:
|
||||
"""
|
||||
根据关系强度检查是否需要改变关系类型
|
||||
@param relationship: 关系对象
|
||||
"""
|
||||
var old_type = relationship.relationship_type
|
||||
var new_type = old_type
|
||||
|
||||
# 根据强度和信任度确定新的关系类型
|
||||
if relationship.strength >= 70 and relationship.trust_level >= 70:
|
||||
new_type = RelationshipType.CLOSE_FRIEND
|
||||
elif relationship.strength >= 40 and relationship.trust_level >= 50:
|
||||
new_type = RelationshipType.FRIEND
|
||||
elif relationship.strength >= 15:
|
||||
new_type = RelationshipType.ACQUAINTANCE
|
||||
elif relationship.strength <= -30:
|
||||
new_type = RelationshipType.DISLIKE
|
||||
elif relationship.strength <= -10:
|
||||
new_type = RelationshipType.RIVAL
|
||||
else:
|
||||
new_type = RelationshipType.NEUTRAL
|
||||
|
||||
# 如果类型发生变化,更新并发射信号
|
||||
if new_type != old_type:
|
||||
relationship.relationship_type = new_type
|
||||
relationship_type_changed.emit(relationship.from_character, relationship.to_character, old_type, new_type)
|
||||
print("Relationship type changed: ", relationship.from_character, " -> ", relationship.to_character,
|
||||
" (", RelationshipType.keys()[old_type], " -> ", RelationshipType.keys()[new_type], ")")
|
||||
|
||||
## 获取关系信息
|
||||
func get_relationship(from_character: String, to_character: String) -> Dictionary:
|
||||
"""
|
||||
获取两个角色之间的关系信息
|
||||
@param from_character: 源角色ID
|
||||
@param to_character: 目标角色ID
|
||||
@return: 关系信息字典
|
||||
"""
|
||||
var relationship_key = _get_relationship_key(from_character, to_character)
|
||||
var relationship = relationships.get(relationship_key)
|
||||
|
||||
if not relationship:
|
||||
return {}
|
||||
|
||||
return {
|
||||
"from_character": relationship.from_character,
|
||||
"to_character": relationship.to_character,
|
||||
"type": relationship.relationship_type,
|
||||
"type_name": RelationshipType.keys()[relationship.relationship_type],
|
||||
"strength": relationship.strength,
|
||||
"trust_level": relationship.trust_level,
|
||||
"interaction_count": relationship.interaction_history.size(),
|
||||
"shared_experiences": relationship.shared_experiences.duplicate(),
|
||||
"created_at": relationship.created_at,
|
||||
"last_updated": relationship.last_updated,
|
||||
"tags": relationship.tags.duplicate()
|
||||
}
|
||||
|
||||
## 获取角色的所有关系
|
||||
func get_character_relationships(character_id: String) -> Array[Dictionary]:
|
||||
"""
|
||||
获取指定角色的所有关系
|
||||
@param character_id: 角色ID
|
||||
@return: 关系信息数组
|
||||
"""
|
||||
var character_relationships = []
|
||||
|
||||
for relationship_key in relationships:
|
||||
var relationship = relationships[relationship_key]
|
||||
if relationship.from_character == character_id:
|
||||
character_relationships.append(get_relationship(relationship.from_character, relationship.to_character))
|
||||
|
||||
# 按关系强度排序
|
||||
character_relationships.sort_custom(func(a, b): return a.strength > b.strength)
|
||||
|
||||
return character_relationships
|
||||
|
||||
## 获取最强关系
|
||||
func get_strongest_relationships(character_id: String, limit: int = 5) -> Array[Dictionary]:
|
||||
"""
|
||||
获取指定角色的最强关系
|
||||
@param character_id: 角色ID
|
||||
@param limit: 限制返回数量
|
||||
@return: 关系信息数组
|
||||
"""
|
||||
var all_relationships = get_character_relationships(character_id)
|
||||
|
||||
if limit <= 0 or limit >= all_relationships.size():
|
||||
return all_relationships
|
||||
|
||||
return all_relationships.slice(0, limit)
|
||||
|
||||
## 查找共同好友
|
||||
func find_mutual_connections(character1: String, character2: String) -> Array[String]:
|
||||
"""
|
||||
查找两个角色的共同好友
|
||||
@param character1: 角色1 ID
|
||||
@param character2: 角色2 ID
|
||||
@return: 共同好友ID数组
|
||||
"""
|
||||
var connections1 = character_connections.get(character1, [])
|
||||
var connections2 = character_connections.get(character2, [])
|
||||
var mutual = []
|
||||
|
||||
for connection in connections1:
|
||||
if connection in connections2:
|
||||
mutual.append(connection)
|
||||
|
||||
return mutual
|
||||
|
||||
## 计算关系路径
|
||||
func find_relationship_path(from_character: String, to_character: String, max_depth: int = 3) -> Array[String]:
|
||||
"""
|
||||
查找两个角色之间的关系路径
|
||||
@param from_character: 源角色ID
|
||||
@param to_character: 目标角色ID
|
||||
@param max_depth: 最大搜索深度
|
||||
@return: 关系路径(角色ID数组)
|
||||
"""
|
||||
if from_character == to_character:
|
||||
return [from_character]
|
||||
|
||||
# 使用广度优先搜索
|
||||
var queue = [[from_character]]
|
||||
var visited = {from_character: true}
|
||||
|
||||
while queue.size() > 0:
|
||||
var path = queue.pop_front()
|
||||
var current = path[-1]
|
||||
|
||||
if path.size() > max_depth:
|
||||
continue
|
||||
|
||||
var connections = character_connections.get(current, [])
|
||||
for connection in connections:
|
||||
if connection == to_character:
|
||||
path.append(connection)
|
||||
return path
|
||||
|
||||
if not visited.has(connection):
|
||||
visited[connection] = true
|
||||
var new_path = path.duplicate()
|
||||
new_path.append(connection)
|
||||
queue.append(new_path)
|
||||
|
||||
return [] # 没有找到路径
|
||||
|
||||
## 创建关系群组
|
||||
func create_relationship_group(group_name: String, members: Array[String]) -> bool:
|
||||
"""
|
||||
创建关系群组
|
||||
@param group_name: 群组名称
|
||||
@param members: 成员ID数组
|
||||
@return: 是否成功创建
|
||||
"""
|
||||
if relationship_groups.has(group_name):
|
||||
print("Group already exists: ", group_name)
|
||||
return false
|
||||
|
||||
if members.size() < 2:
|
||||
print("Group must have at least 2 members")
|
||||
return false
|
||||
|
||||
relationship_groups[group_name] = members.duplicate()
|
||||
|
||||
# 为群组成员之间创建或加强关系
|
||||
for i in range(members.size()):
|
||||
for j in range(i + 1, members.size()):
|
||||
var member1 = members[i]
|
||||
var member2 = members[j]
|
||||
|
||||
# 记录群组活动互动
|
||||
record_interaction(member1, member2, "group_activity", {"group": group_name})
|
||||
record_interaction(member2, member1, "group_activity", {"group": group_name})
|
||||
|
||||
# 保存数据
|
||||
save_network_data()
|
||||
|
||||
# 发射信号
|
||||
group_formed.emit(group_name, members)
|
||||
|
||||
print("Relationship group created: ", group_name, " with ", members.size(), " members")
|
||||
return true
|
||||
|
||||
## 解散关系群组
|
||||
func disband_relationship_group(group_name: String) -> bool:
|
||||
"""
|
||||
解散关系群组
|
||||
@param group_name: 群组名称
|
||||
@return: 是否成功解散
|
||||
"""
|
||||
if not relationship_groups.has(group_name):
|
||||
print("Group not found: ", group_name)
|
||||
return false
|
||||
|
||||
relationship_groups.erase(group_name)
|
||||
|
||||
# 保存数据
|
||||
save_network_data()
|
||||
|
||||
# 发射信号
|
||||
group_disbanded.emit(group_name)
|
||||
|
||||
print("Relationship group disbanded: ", group_name)
|
||||
return true
|
||||
|
||||
## 计算影响力分数
|
||||
func _recalculate_influence_scores() -> void:
|
||||
"""重新计算所有角色的影响力分数"""
|
||||
var new_scores = {}
|
||||
|
||||
# 为每个角色计算影响力分数
|
||||
for character_id in character_connections:
|
||||
var score = _calculate_influence_score(character_id)
|
||||
var old_score = influence_scores.get(character_id, 0.0)
|
||||
|
||||
new_scores[character_id] = score
|
||||
|
||||
if abs(score - old_score) > 0.1:
|
||||
influence_score_changed.emit(character_id, old_score, score)
|
||||
|
||||
influence_scores = new_scores
|
||||
|
||||
## 计算单个角色的影响力分数
|
||||
func _calculate_influence_score(character_id: String) -> float:
|
||||
"""
|
||||
计算角色的影响力分数
|
||||
@param character_id: 角色ID
|
||||
@return: 影响力分数
|
||||
"""
|
||||
var score = 0.0
|
||||
var connections = character_connections.get(character_id, [])
|
||||
|
||||
# 基础分数:连接数量
|
||||
score += connections.size() * 10.0
|
||||
|
||||
# 关系质量加成
|
||||
for connection in connections:
|
||||
var relationship_key = _get_relationship_key(character_id, connection)
|
||||
var relationship = relationships.get(relationship_key)
|
||||
|
||||
if relationship:
|
||||
# 根据关系强度和类型加分
|
||||
score += relationship.strength * 0.5
|
||||
|
||||
match relationship.relationship_type:
|
||||
RelationshipType.CLOSE_FRIEND:
|
||||
score += 20.0
|
||||
RelationshipType.FRIEND:
|
||||
score += 15.0
|
||||
RelationshipType.MENTOR:
|
||||
score += 25.0
|
||||
RelationshipType.COLLEAGUE:
|
||||
score += 10.0
|
||||
|
||||
# 群组参与加成
|
||||
for group_name in relationship_groups:
|
||||
var members = relationship_groups[group_name]
|
||||
if character_id in members:
|
||||
score += members.size() * 5.0
|
||||
|
||||
return score
|
||||
|
||||
## 获取影响力排行
|
||||
func get_influence_ranking(limit: int = 10) -> Array[Dictionary]:
|
||||
"""
|
||||
获取影响力排行榜
|
||||
@param limit: 限制返回数量
|
||||
@return: 排行信息数组
|
||||
"""
|
||||
var ranking = []
|
||||
|
||||
for character_id in influence_scores:
|
||||
ranking.append({
|
||||
"character_id": character_id,
|
||||
"influence_score": influence_scores[character_id]
|
||||
})
|
||||
|
||||
# 按影响力分数排序
|
||||
ranking.sort_custom(func(a, b): return a.influence_score > b.influence_score)
|
||||
|
||||
if limit > 0 and limit < ranking.size():
|
||||
ranking = ranking.slice(0, limit)
|
||||
|
||||
return ranking
|
||||
|
||||
## 添加连接
|
||||
func _add_connection(from_character: String, to_character: String) -> void:
|
||||
"""
|
||||
添加角色连接到索引
|
||||
@param from_character: 源角色ID
|
||||
@param to_character: 目标角色ID
|
||||
"""
|
||||
if not character_connections.has(from_character):
|
||||
character_connections[from_character] = []
|
||||
|
||||
var connections = character_connections[from_character]
|
||||
if not to_character in connections:
|
||||
connections.append(to_character)
|
||||
|
||||
## 获取关系键
|
||||
func _get_relationship_key(from_character: String, to_character: String) -> String:
|
||||
"""
|
||||
生成关系键(确保一致性)
|
||||
@param from_character: 源角色ID
|
||||
@param to_character: 目标角色ID
|
||||
@return: 关系键
|
||||
"""
|
||||
return from_character + ":" + to_character
|
||||
|
||||
## 保存网络数据
|
||||
func save_network_data() -> void:
|
||||
"""保存关系网络数据到本地文件"""
|
||||
var data = {
|
||||
"relationships": {},
|
||||
"character_connections": character_connections,
|
||||
"relationship_groups": relationship_groups,
|
||||
"influence_scores": influence_scores
|
||||
}
|
||||
|
||||
# 序列化关系数据
|
||||
for relationship_key in relationships:
|
||||
var relationship = relationships[relationship_key]
|
||||
data.relationships[relationship_key] = {
|
||||
"from_character": relationship.from_character,
|
||||
"to_character": relationship.to_character,
|
||||
"relationship_type": relationship.relationship_type,
|
||||
"strength": relationship.strength,
|
||||
"trust_level": relationship.trust_level,
|
||||
"interaction_history": relationship.interaction_history,
|
||||
"shared_experiences": relationship.shared_experiences,
|
||||
"created_at": relationship.created_at,
|
||||
"last_updated": relationship.last_updated,
|
||||
"tags": relationship.tags
|
||||
}
|
||||
|
||||
var file = FileAccess.open(network_file_path, FileAccess.WRITE)
|
||||
if file:
|
||||
var json_string = JSON.stringify(data)
|
||||
file.store_string(json_string)
|
||||
file.close()
|
||||
print("Relationship network data saved")
|
||||
else:
|
||||
print("Failed to save relationship network data")
|
||||
|
||||
## 加载网络数据
|
||||
func load_network_data() -> void:
|
||||
"""从本地文件加载关系网络数据"""
|
||||
if not FileAccess.file_exists(network_file_path):
|
||||
print("No relationship network data file found, starting fresh")
|
||||
return
|
||||
|
||||
var file = FileAccess.open(network_file_path, FileAccess.READ)
|
||||
if file:
|
||||
var json_string = file.get_as_text()
|
||||
file.close()
|
||||
|
||||
var json = JSON.new()
|
||||
var parse_result = json.parse(json_string)
|
||||
|
||||
if parse_result == OK:
|
||||
var data = json.data
|
||||
|
||||
# 加载关系数据
|
||||
if data.has("relationships"):
|
||||
for relationship_key in data.relationships:
|
||||
var rel_data = data.relationships[relationship_key]
|
||||
var relationship = Relationship.new(
|
||||
rel_data.get("from_character", ""),
|
||||
rel_data.get("to_character", ""),
|
||||
rel_data.get("relationship_type", RelationshipType.NEUTRAL)
|
||||
)
|
||||
relationship.strength = rel_data.get("strength", 0.0)
|
||||
relationship.trust_level = rel_data.get("trust_level", 0.0)
|
||||
|
||||
# 正确处理类型化数组的赋值
|
||||
var history_data = rel_data.get("interaction_history", [])
|
||||
relationship.interaction_history.clear()
|
||||
for item in history_data:
|
||||
if item is Dictionary:
|
||||
relationship.interaction_history.append(item)
|
||||
|
||||
var experiences_data = rel_data.get("shared_experiences", [])
|
||||
relationship.shared_experiences.clear()
|
||||
for item in experiences_data:
|
||||
if item is String:
|
||||
relationship.shared_experiences.append(item)
|
||||
|
||||
var tags_data = rel_data.get("tags", [])
|
||||
relationship.tags.clear()
|
||||
for item in tags_data:
|
||||
if item is String:
|
||||
relationship.tags.append(item)
|
||||
|
||||
relationship.created_at = rel_data.get("created_at", Time.get_unix_time_from_system())
|
||||
relationship.last_updated = rel_data.get("last_updated", relationship.created_at)
|
||||
relationships[relationship_key] = relationship
|
||||
|
||||
# 加载连接索引
|
||||
if data.has("character_connections"):
|
||||
character_connections = data.character_connections
|
||||
|
||||
# 加载群组数据
|
||||
if data.has("relationship_groups"):
|
||||
relationship_groups = data.relationship_groups
|
||||
|
||||
# 加载影响力分数
|
||||
if data.has("influence_scores"):
|
||||
influence_scores = data.influence_scores
|
||||
|
||||
print("Relationship network data loaded: ", relationships.size(), " relationships, ", relationship_groups.size(), " groups")
|
||||
else:
|
||||
print("Failed to parse relationship network data JSON")
|
||||
else:
|
||||
print("Failed to open relationship network data file")
|
||||
|
||||
## 获取统计信息
|
||||
func get_statistics() -> Dictionary:
|
||||
"""
|
||||
获取关系网络统计信息
|
||||
@return: 统计信息字典
|
||||
"""
|
||||
var type_counts = {}
|
||||
var total_interactions = 0
|
||||
|
||||
for relationship_key in relationships:
|
||||
var relationship = relationships[relationship_key]
|
||||
var type_name = RelationshipType.keys()[relationship.relationship_type]
|
||||
type_counts[type_name] = type_counts.get(type_name, 0) + 1
|
||||
total_interactions += relationship.interaction_history.size()
|
||||
|
||||
return {
|
||||
"total_relationships": relationships.size(),
|
||||
"total_characters": character_connections.size(),
|
||||
"total_groups": relationship_groups.size(),
|
||||
"total_interactions": total_interactions,
|
||||
"relationship_types": type_counts,
|
||||
"average_connections": float(relationships.size()) / max(character_connections.size(), 1)
|
||||
}
|
||||
Reference in New Issue
Block a user