def handle_add_social_favorability( character_id: int, add_time: int, change_data: game_type.CharacterStatusChange ): """ 增加社交关系好感 Keyword arguments: character_id -- 角色id add_time -- 结算时间 change_data -- 状态变更信息记录对象 """ if not add_time: return character_data: game_type.Character = cache.character_data[character_id] if character_data.target_character_id != character_id: target_data: game_type.Character = cache.character_data[character_data.target_character_id] if target_data.dead: return if ( character_id in target_data.social_contact_data and target_data.social_contact_data[character_id] ): change_data.target_change.setdefault(target_data.cid, game_type.TargetChange()) target_change = change_data.target_change[target_data.cid] add_favorability = character.calculation_favorability(character_id, target_data.cid, add_time) add_favorability *= target_data.social_contact_data[character_id] if add_favorability: character_handle.add_favorability( character_id, target_data.cid, add_favorability, target_change )
def settle_chat( character_id: int, now_time: datetime.datetime) -> game_type.CharacterStatusChange: """ 结算角色闲聊行为 Keyword arguments: character_id -- 角色id now_time -- 结算时间 Return arguments: game_type.CharacterStatusChange -- 行为改变的角色状态 """ character_data: game_type.Character = cache.character_data[character_id] now_change_data = game_type.CharacterStatusChange() if character_data.target_character_id != character_id: start_time = character_data.behavior.start_time add_time = int((now_time - start_time).seconds / 60) add_favorability = character.calculation_favorability( character_id, character_data.target_character_id, add_time * 1.5) target_data: game_type.Character = cache.character_data[ character_data.target_character_id] target_data.favorability.setdefault(character_id, 0) target_data.favorability[character_id] += add_favorability now_change_data.favorability[ character_data.target_character_id] = add_favorability return now_change_data
def handle_add_intimate_favorability( character_id: int, add_time: int, change_data: game_type.CharacterStatusChange ): """ 增加私密行为好感 Keyword arguments: character_id -- 角色id add_time -- 结算时间 change_data -- 状态变更信息记录对象 """ if not add_time: return character_data: game_type.Character = cache.character_data[character_id] if character_data.target_character_id != character_id: target_data: game_type.Character = cache.character_data[character_data.target_character_id] if target_data.dead: return add_favorability = character.calculation_favorability( character_id, character_data.target_character_id, add_time * 2 ) add_favorability_coefficient = add_favorability / (add_time * 2) social = 0 if character_id in target_data.social_contact_data: social = target_data.social_contact_data[character_id] change_data.target_change.setdefault(character_data.target_character_id, game_type.TargetChange()) target_change: game_type.TargetChange = change_data.target_change[target_data.cid] target_data: game_type.Character = cache.character_data[character_data.target_character_id] if social >= 3: add_favorability += add_favorability_coefficient * social character_handle.add_favorability( character_id, target_data.cid, add_favorability, target_change ) else: add_favorability -= add_favorability_coefficient * social cal_social = social if not cal_social: cal_social = 1 add_disgust = (1000 - add_favorability) / cal_social target_data.status.setdefault(12, 0) target_data.status[12] += add_disgust target_change.status.setdefault(12, 0) target_change.status[12] += add_disgust character_handle.add_favorability( character_id, target_data.cid, add_favorability, target_change )
def settle_rest( character_id: int, now_time: datetime.datetime) -> game_type.CharacterStatusChange: """ 结算角色休息行为 Keyword arguments: character_id -- 角色id now_time -- 结算时间 Return arguments: game_type.CharacterStatusChange -- 行为改变的角色状态 """ character_data: game_type.Character = cache.character_data[character_id] start_time = character_data.behavior.start_time add_time = int((now_time - start_time).seconds / 60) add_hit_point = add_time * 5 add_mana_point = add_time * 10 character_data.hit_point += add_hit_point character_data.mana_point += add_mana_point now_change_data = game_type.CharacterStatusChange() if character_data.hit_point > character_data.hit_point_max: add_hit_point -= character_data.hit_point - character_data.hit_point_max character_data.hit_point = character_data.hit_point_max if character_data.mana_point > character_data.mana_point_max: add_mana_point -= character_data.mana_point - character_data.mana_point_max character_data.mana_point = character_data.mana_point_max now_change_data.hit_point = add_hit_point now_change_data.mana_point = add_mana_point if character_data.target_character_id != character_id: add_favorability = character.calculation_favorability( character_id, character_data.target_character_id, add_time) target_data: game_type.Character = cache.character_data[ character_data.target_character_id] target_data.favorability.setdefault(character_id, 0) target_data.favorability[character_id] += add_favorability now_change_data.favorability[target_data.cid] = add_favorability cache.status_up_text.setdefault(character_id, {}) cache.status_up_text[character_id]["HitPoint"] = add_hit_point cache.status_up_text[character_id]["ManaPoint"] = add_mana_point return now_change_data