예제 #1
0
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
                )
예제 #2
0
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
예제 #3
0
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
            )
예제 #4
0
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