Example #1
0
def settle_move(character_id: int):
    """
    结算角色移动行为
    Keyword arguments:
    character_id -- 角色id
    """
    character_data = cache_contorl.character_data[character_id]
    if (character_data.behavior["MoveTarget"]
            == cache_contorl.character_data[0].position
            or character_data.position
            == cache_contorl.character_data[0].position):
        talk_cache.tg = character_data
        talk_cache.me = cache_contorl.character_data[0]
        scene_path_str = map_handle.get_map_system_path_str_for_list(
            character_data.behavior["MoveTarget"])
        scene_data = cache_contorl.scene_data[scene_path_str]
        talk_cache.scene = scene_data["SceneName"]
        talk_cache.scene_tag = scene_data["SceneTag"]
        talk.handle_talk(constant.Behavior.MOVE)
    map_handle.character_move_scene(
        character_data.position,
        character_data.behavior["MoveTarget"],
        character_id,
    )
    character_data.status["BodyFeeling"]["Hunger"] += (
        character_data.behavior["Duration"] * 0.02)
    character_data.status["BodyFeeling"]["Thirsty"] += (
        character_data.behavior["Duration"] * 0.02)
Example #2
0
def settle_eat(character_id: int):
    """
    结算角色进食行为
    Keyword arguments:
    character_id -- 角色id
    """
    character_data = cache_contorl.character_data[character_id]
    if character_data.behavior["EatFood"] != None:
        food: game_type.Food = character_data.behavior["EatFood"]
        for feel in food.feel:
            if feel in character_data.status["BodyFeeling"]:
                if feel in ("Hunger", "Thirsty"):
                    character_data.status["BodyFeeling"][feel] -= food.feel[
                        feel]
                else:
                    character_data.status["BodyFeeling"][feel] += food.feel[
                        feel]
            elif feel in character_data.status["SexFeel"]:
                character_data.status["SexFeel"][feel] += food.feel[feel]
            elif feel in character_data.status["PsychologicalFeeling"]:
                character_data.status["PsychologicalFeeling"][
                    feel] += food.feel[feel]
        if character_id == cache_contorl.character_data[0].target_character_id:
            talk_cache.tg = character_data
            talk_cache.me = cache_contorl.character_data[0]
            scene_path_str = map_handle.get_map_system_path_str_for_list(
                character_data.behavior["MoveTarget"])
            scene_data = cache_contorl.scene_data[scene_path_str]
            talk_cache.scene = scene_data["SceneName"]
            talk_cache.scene_tag = scene_data["SceneTag"]
            talk.handle_talk(constant.Behavior.EAT)
        del character_data.food_bag[food.id]
Example #3
0
def settle_rest(character_id: int):
    """
    结算角色休息行为
    Keyword arguments:
    character_id -- 角色id
    """
    character_data = cache_contorl.character_data[character_id]
    start_time = game_time.game_time_to_datetime(
        character_data.behavior["StartTime"])
    now_time = game_time.game_time_to_datetime(cache_contorl.game_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
    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
    character_data.status["BodyFeeling"]["Hunger"] += add_time * 0.02
    character_data.status["BodyFeeling"]["Thirsty"] += add_time * 0.02
    cache_contorl.status_up_text.setdefault(character_id, {})
    cache_contorl.status_up_text[character_id]["HitPoint"] = add_hit_point
    cache_contorl.status_up_text[character_id]["ManaPoint"] = add_mana_point
    if (character_id == cache_contorl.character_data[0].target_character_id
            and character_id):
        talk_cache.tg = character_data
        talk_cache.me = cache_contorl.character_data[0]
        talk.handle_talk(constant.Behavior.REST)
Example #4
0
def judge_character_status(character_id: int, now_time: datetime.datetime) -> int:
    """
    校验并结算角色状态
    Keyword arguments:
    character_id -- 角色id
    Return arguments:
    bool -- 本次update时间切片内活动是否已完成
    """
    character_data: game_type.Character = cache.character_data[character_id]
    scene_path_str = map_handle.get_map_system_path_str_for_list(character_data.position)
    scene_data: game_type.Scene = cache.scene_data[scene_path_str]
    start_time = character_data.behavior.start_time
    end_time = game_time.get_sub_date(minute=character_data.behavior.duration, old_date=start_time)
    if (
        character_data.target_character_id != character_id
        and character_data.target_character_id not in scene_data.character_list
    ):
        end_time = now_time
    time_judge = game_time.judge_date_big_or_small(now_time, end_time)
    add_time = (end_time.timestamp() - start_time.timestamp()) / 60
    if not add_time:
        character_data.behavior = game_type.Behavior()
        character_data.behavior.start_time = end_time
        character_data.state = constant.CharacterStatus.STATUS_ARDER
        return 1
    last_hunger_time = start_time
    if character_data.last_hunger_time is not None:
        last_hunger_time = character_data.last_hunger_time
    hunger_time = int((now_time - last_hunger_time).seconds / 60)
    character_data.status.setdefault(27, 0)
    character_data.status.setdefault(28, 0)
    character_data.status[27] += hunger_time * 0.02
    character_data.status[28] += hunger_time * 0.02
    character_data.last_hunger_time = now_time
    if time_judge:
        settle_behavior.handle_settle_behavior(character_id, end_time)
        talk.handle_talk(character_id)
        character_data.behavior = game_type.Behavior()
        character_data.state = constant.CharacterStatus.STATUS_ARDER
    if time_judge == 1:
        character_data.behavior.start_time = end_time
        return 0
    elif time_judge == 2:
        character.init_character_behavior_start_time(character_id, now_time)
        return 0
    return 1