Example #1
0
def random_tiger_point(point):
    """随机老虎机里威震天个数

    Args:
        point 当前威震天个数

    """
    cfgs = [{c["id"]: c["weight"]} for c in game_config.group_game_tiger_cfg.values() if c["cur_num"] == point]
    target = common_helper.weight_random(pack_logic.amend_goods(cfgs))

    return game_config.group_game_tiger_cfg[target]["final_num"]
Example #2
0
def award(context):
    """金币副本和经验副本领取累计伤害奖励

    Args:
        act_mission_type :活动副本类型 经验 / 金币
        award_ids  :累计奖品索引列表 【支持一键领取】

    Returns:

    """
    ki_user = context.user

    mtype = context.get_parameter("mtype")
    award_ids = context.get_parameter("award_ids", "[]")

    try:
        award_ids = eval(award_ids)
        if not isinstance(award_ids, list):
            raise 1
    except:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    daily_data = ki_user.daily_info.act_missions.get(mtype, {})
    if not daily_data:
        context.result['mc'] = MsgCode['MissionAwardNotSatisfied']
        return

    total_awards = []
    for index in award_ids:
        cfg_key = "%s-%s" % (mtype, index)
        cfg = game_config.mission_act_awards_cfg.get(cfg_key, {})
        if not cfg:
            context.result['mc'] = MsgCode['MissionAwardNotExist']
            return

        if cfg["need_scores"] > daily_data["score"]:
            context.result['mc'] = MsgCode['MissionAwardNotSatisfied']
            return

        if index in daily_data["award_index"]:
            context.result['mc'] = MsgCode['MissionAlreadyAwarded']
            return

        total_awards.append(cfg["awards"])

    pack_logic.add_items(ki_user, pack_logic.amend_goods(total_awards))
    ki_user.daily_info.act_mission_award(mtype, award_ids)

    context.result['mc'] = MsgCode['MissionAwardSucc']
Example #3
0
def random_tiger_point(point):
    """随机老虎机里威震天个数

    Args:
        point 当前威震天个数

    """
    cfgs = [{
        c["id"]: c["weight"]
    } for c in game_config.group_game_tiger_cfg.values()
            if c["cur_num"] == point]
    target = common_helper.weight_random(pack_logic.amend_goods(cfgs))

    return game_config.group_game_tiger_cfg[target]["final_num"]
Example #4
0
def award(context):
    """金币副本和经验副本领取累计伤害奖励

    Args:
        act_mission_type :活动副本类型 经验 / 金币
        award_ids  :累计奖品索引列表 【支持一键领取】

    Returns:

    """
    ki_user = context.user

    mtype = context.get_parameter("mtype")
    award_ids = context.get_parameter("award_ids", "[]")

    try:
        award_ids = eval(award_ids)
        if not isinstance(award_ids, list):
            raise 1
    except:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    daily_data = ki_user.daily_info.act_missions.get(mtype, {})
    if not daily_data:
        context.result['mc'] = MsgCode['MissionAwardNotSatisfied']
        return

    total_awards = []
    for index in award_ids:
        cfg_key = "%s-%s" % (mtype, index)
        cfg = game_config.mission_act_awards_cfg.get(cfg_key, {})
        if not cfg:
            context.result['mc'] = MsgCode['MissionAwardNotExist']
            return

        if cfg["need_scores"] > daily_data["score"]:
            context.result['mc'] = MsgCode['MissionAwardNotSatisfied']
            return

        if index in daily_data["award_index"]:
            context.result['mc'] = MsgCode['MissionAlreadyAwarded']
            return

        total_awards.append(cfg["awards"])

    pack_logic.add_items(ki_user, pack_logic.amend_goods(total_awards))
    ki_user.daily_info.act_mission_award(mtype, award_ids)

    context.result['mc'] = MsgCode['MissionAwardSucc']
Example #5
0
def intensify(context):
    """战舰升级

    战舰等级受战队等级和品质限制

    Args:
        ship_id 战舰ID
        to_level 到达的等级

    Returns:
        code 成功 | 失败
    """
    ki_user = context.user

    ship_id = context.get_parameter("ship_id")
    to_level = context.get_parameter("to_level")

    ship = ki_user.warship.get_warship_by_id(ship_id)
    if not ship:
        context.result['mc'] = MsgCode['WarshipNotExist']
        return

    if to_level <= ship["level"] or to_level > game_config.warship_max_level:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    quality_key = "%s-%s" % (ship_id, ship["quality"])
    quality_cfg = game_config.warship_upgrade_cfg[quality_key]
    if to_level > quality_cfg["max_level"]:
        context.result['mc'] = MsgCode['WarshipLevelOverLimit']
        return

    need_items = [
        game_config.warship_intensify_cfg[level]
        for level in range(ship["level"] + 1, to_level + 1)
    ]
    need_items1 = pack_logic.amend_goods(need_items)

    # 检查升级材料是否足够
    if not pack_logic.check_items_enough(ki_user, need_items1):
        import logging
        logging.error("%s -> %s need: %s need2: %s" %
                      (ship["level"], to_level, need_items, need_items1))
        context.result['mc'] = MsgCode['PackageItemNotEnough']
        return

    ki_user.warship.intensify(ship_id, to_level)
    pack_logic.remove_items(ki_user, need_items1)

    context.result['mc'] = MsgCode['WarshipIntensifySucc']
Example #6
0
def _handle_refresh_action(cfg, role_level):
    """刷新操作

    """
    new_random_list = []
    for i in range(1, len(cfg)+1):
        slot_cfg = cfg[i]
        libs = [{item["id"]: item["weight"]} for item in slot_cfg if item["level_limit"]["min"] <= role_level <= item["level_limit"]["max"]]
        rand_libs = []
        for a in libs:
            rand_libs.append(a)

        target = common_helper.weight_random(pack_logic.amend_goods(rand_libs))
        new_random_list.append(target)

    return new_random_list
Example #7
0
def _handle_refresh_action(cfg, role_level):
    """刷新操作

    """
    new_random_list = []
    for i in range(1, len(cfg) + 1):
        slot_cfg = cfg[i]
        libs = [{
            item["id"]: item["weight"]
        } for item in slot_cfg if item["level_limit"]["min"] <= role_level <=
                item["level_limit"]["max"]]
        rand_libs = []
        for a in libs:
            rand_libs.append(a)

        target = common_helper.weight_random(pack_logic.amend_goods(rand_libs))
        new_random_list.append(target)

    return new_random_list
Example #8
0
def add_game_values(user, items):
    """游戏数值增长接口

    金币,钻石,体力,经验,vip经验...

    Args:
        user  用户对象
        items  参数字典  eg: {1:1000, 2:1000}

    Returns:

    """
    for key, value in items.iteritems():
        if key == static_const.ROLE_EXP:
            add_items = user.game_info.add_role_exp(value)
            # 升级给物品。为了引导而搞
            if add_items:
                from apps.logics import package as pack_logic
                pack_logic.add_items(user, pack_logic.amend_goods(add_items))

        elif key == static_const.VIP_EXP:
            user.game_info.add_vip_exp(value)

        elif key == static_const.ENERGY:
            user.game_info.update_energy(value)

        else:
            # 等级和vip等级不能直接修改数值,只能通过经验来更变
            if key in [5, 7]:
                return

            value_tag = static_const.SPECIAL_ITEMS_MAPPING.get(key, None)
            if value_tag:
                exec("user.game_info.%s += %s" % (value_tag, value))

    user.game_info.put()
Example #9
0
def intensify2(context):
    """两特殊装备加经验

    Args:
        hero_id
        position  装备部位
        items 经验道具 []

    Raises:
    """
    ki_user = context.user

    hero_id = context.get_parameter("hero_id")
    position = context.get_parameter("position")
    items = context.get_parameter("items", [])

    try:
        items = eval(items)
        if not isinstance(items, list):
            raise 1

        if position < 5:
            context.result['mc'] = MsgCode['ParamIllegal']
            return
    except:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    if hero_id not in ki_user.hero.heros:
        context.result['mc'] = MsgCode['HeroNotExist']
        return

    equip_data = ki_user.equip.get_by_hero_position(hero_id, position)
    if not equip_data:
        context.result['mc'] = MsgCode['EquipNotExist']
        return

    equip_quality_cfg_key = "%s-%s" % (position, equip_data["quality"])
    equip_quality_cfg = game_config.equip_upgrade_cfg.get(equip_quality_cfg_key)
    if equip_data["level"] > equip_quality_cfg["equip_max_level"]:
        context.result['mc'] = MsgCode['EquipLvOverLimit']
        return

    add_exp = 0
    exp_item_type = SPECIAL_EQUIP_EXP_ITEM_1 if position == 5 else SPECIAL_EQUIP_EXP_ITEM_2

    # 检查材料是否足够
    items = pack_logic.amend_goods([{item_id: 1} for item_id in items if item_id])

    if not pack_logic.check_items_enough(ki_user, items):
        context.result['mc'] = MsgCode['PackageItemNotEnough']
        return

    for item_id,num in items.items():
        item_cfg = game_config.item_cfg.get(item_id)
        if not item_cfg:
            context.result['mc'] = MsgCode['GameConfigNotExist']
            return

        if item_cfg["type"] != exp_item_type:
            context.result['mc'] = MsgCode['ParamIllegal']
            return

        add_exp += item_cfg["effect_value"] * num

    total_exp = equip_data["exp"] + add_exp
    if not user_logic.check_game_values1(ki_user, gold=add_exp*50):
        context.result['mc'] = MsgCode['GoldNotEnough']
        return

    level = level_checker(position, equip_data["quality"], total_exp)
    ki_user.equip.intensify(hero_id, position, level, total_exp)

    if items:
        pack_logic.remove_items(ki_user, items)
        user_logic.consume_game_values1(ki_user, gold=add_exp*50)

    context.result['mc'] = MsgCode['EquipIntensifySucc']
Example #10
0
def past(context):
    """活动副本结算

    Args:
        mission_id :关卡ID
        hurt :伤害值

    Returns:

    """
    ki_user = context.user

    mission_id = context.get_parameter("mission_id")
    hurt_percent = context.get_parameter("hurt_percent")
    hurt = context.get_parameter("hurt")
    star = context.get_parameter("star")

    if star not in range(0, 4) or not hurt_percent:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    cfg = game_config.mission_act_base_cfg.get(mission_id, {})
    if not cfg:
        context.result['mc'] = MsgCode['MissionNotExist']
        return

    if not _check_module_open(mission_id, ki_user.game_info.role_level):
        context.result['mc'] = MsgCode['UserModuleNotOpen']
        return

    extra = ki_user.mission.extra_data
    if extra.get("last_act_mission", 0) != mission_id:
        context.result['mc'] = MsgCode['MissionNotIn']
        return

    # ====================== 计算奖励 金币经验 和 烈焰冰封幻想 不同=========================
    data = {}
    add_awards = []

    if cfg["type"] in [
            MISSION_ACT_TYPE_GOLD, MISSION_ACT_TYPE_EXP,
            MISSION_ACT_TYPE_PHANTOM
    ]:
        award_pack_list = [
            pack for t, pack in cfg["awards"].items()
            if t <= float(hurt_percent)
        ]
        awards = [game_config.item_pack_cfg.get(id) for id in award_pack_list]
        base_awards = common_helper.handle_pack_items(awards)
        add_awards.append(base_awards)

        data["base"] = copy.copy(base_awards)
        # 金币副本,最终奖励和上阵机甲的总星级挂钩
        hero_stars = _get_fight_hero_stars(ki_user, cfg["type"])
        star_cfg = game_config.mission_act_star_award_cfg.get(hero_stars)
        data["extra"] = star_cfg[cfg["type"]]
        add_awards.append(star_cfg[cfg["type"]])
    else:
        # 随机获得物品数量
        # 输了不得奖励
        if star not in range(1, 4):
            add_awards = {}
        else:
            awards_num = common_helper.weight_random(cfg["awards_num"])
            awards_lib = [{
                item_pack_id: weight
            } for item_pack_id, weight in cfg["awards"].items()]
            awards_pack_list = mission_helper.random_mission_award(
                awards_lib, awards_num)
            base_awards = [
                game_config.item_pack_cfg.get(pack_id)
                for pack_id in awards_pack_list
            ]
            base_awards = common_helper.handle_pack_items(base_awards)
            add_awards.append(base_awards)
            data["base"] = base_awards

    if star in range(1, 4):
        ki_user.mission.act_past(cfg["type"], mission_id, star)

    ki_user.daily_info.act_mission_past(cfg["type"], hurt, 1)

    # 增加最终物品
    pack_logic.add_items(ki_user, pack_logic.amend_goods(add_awards))

    # 更新排行榜数据
    if cfg["type"] in [MISSION_ACT_TYPE_GOLD, MISSION_ACT_TYPE_EXP]:
        rank_service.update_act_mission_rank(ki_user.sid, cfg["type"],
                                             ki_user.uid, hurt)
    else:
        if star in range(1, 4):
            rank_service.update_act_mission_rank(ki_user.sid, cfg["type"],
                                                 ki_user.uid, int(time.time()))

    context.result["data"] = data
Example #11
0
def game_bird(context):
    """【公会游戏之小鸟快飞】

    Args:
        type 游戏操作类型 1-开始 2-结算
        process 进度

    Returns:

    """
    ki_user = context.user

    action_type = context.get_parameter("type")
    process = context.get_parameter("process")

    if action_type not in [1,2]:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    group_id = ki_user.group.group_id
    if not group_id:
        context.result['mc'] = MsgCode['GroupHaveNoGroup']
        return

    data = {}
    group_daily_data = ki_user.daily_info.group_info
    if action_type == 1:
        max_times = get_game_max_times(3, ki_user.group.donate["bird_exp1"])
        if group_daily_data["bird_times"] >= max_times:
            context.result['mc'] = MsgCode['GroupGameBirdTimesUseUp']
            return

        ki_user.daily_info.group_update("bird_times")

    elif action_type == 2:
        awards = [v for k,v in game_config.group_game_bird_awards_cfg.items() if k <= process]  # [{1:2000}, {2:3}, {120001:1}]
        if not awards:
            context.result['mc'] = MsgCode['ParamIllegal']
            return

        daily_awards = group_daily_data["bird_awards"]
        awards1 = pack_logic.amend_goods(awards) # {1:2000, 2:3, 120001:1}
        gold_limit = get_game_max_times(4, ki_user.group.donate["bird_exp2"])
        history, add_awards = count_add_awards(awards1, daily_awards, gold_limit)

        # 背包增加物品
        pack_logic.add_items(ki_user, add_awards)

        if process > ki_user.group.game_data["bird_best_score"]:
            ki_user.group.bird_update(process)

        if process > group_daily_data["bird_daily_best"]:
            group_daily_data["bird_daily_best"] = process
            GroupService.update_game_bird_rank(ki_user.sid, ki_user.uid, ki_user.group.group_id, process) # 进入排行榜

        ki_user.daily_info.group_game_bird_update("bird_awards", history)

        # if process == 5:
        #     GroupService.create_group_log(ki_user.sid, group_id, GROUP_LOG_TYPE_GAME_TIGER, ki_user.uid, ki_user.name, int(time.time()), point)
    else:
        pass

    context.result['mc'] = MsgCode['GroupGameBirdSucc']
Example #12
0
def intensify2(context):
    """两特殊装备加经验

    Args:
        hero_id
        position  装备部位
        items 经验道具 []

    Raises:
    """
    ki_user = context.user

    hero_id = context.get_parameter("hero_id")
    position = context.get_parameter("position")
    items = context.get_parameter("items", [])

    try:
        items = eval(items)
        if not isinstance(items, list):
            raise 1

        if position < 5:
            context.result['mc'] = MsgCode['ParamIllegal']
            return
    except:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    if hero_id not in ki_user.hero.heros:
        context.result['mc'] = MsgCode['HeroNotExist']
        return

    equip_data = ki_user.equip.get_by_hero_position(hero_id, position)
    if not equip_data:
        context.result['mc'] = MsgCode['EquipNotExist']
        return

    equip_quality_cfg_key = "%s-%s" % (position, equip_data["quality"])
    equip_quality_cfg = game_config.equip_upgrade_cfg.get(
        equip_quality_cfg_key)
    if equip_data["level"] > equip_quality_cfg["equip_max_level"]:
        context.result['mc'] = MsgCode['EquipLvOverLimit']
        return

    add_exp = 0
    exp_item_type = SPECIAL_EQUIP_EXP_ITEM_1 if position == 5 else SPECIAL_EQUIP_EXP_ITEM_2

    # 检查材料是否足够
    items = pack_logic.amend_goods([{
        item_id: 1
    } for item_id in items if item_id])

    if not pack_logic.check_items_enough(ki_user, items):
        context.result['mc'] = MsgCode['PackageItemNotEnough']
        return

    for item_id, num in items.items():
        item_cfg = game_config.item_cfg.get(item_id)
        if not item_cfg:
            context.result['mc'] = MsgCode['GameConfigNotExist']
            return

        if item_cfg["type"] != exp_item_type:
            context.result['mc'] = MsgCode['ParamIllegal']
            return

        add_exp += item_cfg["effect_value"] * num

    total_exp = equip_data["exp"] + add_exp
    if not user_logic.check_game_values1(ki_user, gold=add_exp * 50):
        context.result['mc'] = MsgCode['GoldNotEnough']
        return

    level = level_checker(position, equip_data["quality"], total_exp)
    ki_user.equip.intensify(hero_id, position, level, total_exp)

    if items:
        pack_logic.remove_items(ki_user, items)
        user_logic.consume_game_values1(ki_user, gold=add_exp * 50)

    context.result['mc'] = MsgCode['EquipIntensifySucc']
Example #13
0
def game_bird(context):
    """【公会游戏之小鸟快飞】

    Args:
        type 游戏操作类型 1-开始 2-结算
        process 进度

    Returns:

    """
    ki_user = context.user

    action_type = context.get_parameter("type")
    process = context.get_parameter("process")

    if action_type not in [1, 2]:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    group_id = ki_user.group.group_id
    if not group_id:
        context.result['mc'] = MsgCode['GroupHaveNoGroup']
        return

    data = {}
    group_daily_data = ki_user.daily_info.group_info
    if action_type == 1:
        max_times = get_game_max_times(3, ki_user.group.donate["bird_exp1"])
        if group_daily_data["bird_times"] >= max_times:
            context.result['mc'] = MsgCode['GroupGameBirdTimesUseUp']
            return

        ki_user.daily_info.group_update("bird_times")

    elif action_type == 2:
        awards = [
            v for k, v in game_config.group_game_bird_awards_cfg.items()
            if k <= process
        ]  # [{1:2000}, {2:3}, {120001:1}]
        if not awards:
            context.result['mc'] = MsgCode['ParamIllegal']
            return

        daily_awards = group_daily_data["bird_awards"]
        awards1 = pack_logic.amend_goods(awards)  # {1:2000, 2:3, 120001:1}
        gold_limit = get_game_max_times(4, ki_user.group.donate["bird_exp2"])
        history, add_awards = count_add_awards(awards1, daily_awards,
                                               gold_limit)

        # 背包增加物品
        pack_logic.add_items(ki_user, add_awards)

        if process > ki_user.group.game_data["bird_best_score"]:
            ki_user.group.bird_update(process)

        if process > group_daily_data["bird_daily_best"]:
            group_daily_data["bird_daily_best"] = process
            GroupService.update_game_bird_rank(ki_user.sid, ki_user.uid,
                                               ki_user.group.group_id,
                                               process)  # 进入排行榜

        ki_user.daily_info.group_game_bird_update("bird_awards", history)

        # if process == 5:
        #     GroupService.create_group_log(ki_user.sid, group_id, GROUP_LOG_TYPE_GAME_TIGER, ki_user.uid, ki_user.name, int(time.time()), point)
    else:
        pass

    context.result['mc'] = MsgCode['GroupGameBirdSucc']
Example #14
0
def past(context):
    """活动副本结算

    Args:
        mission_id :关卡ID
        hurt :伤害值

    Returns:

    """
    ki_user = context.user

    mission_id = context.get_parameter("mission_id")
    hurt_percent = context.get_parameter("hurt_percent")
    hurt = context.get_parameter("hurt")
    star = context.get_parameter("star")

    if star not in range(0,4) or not hurt_percent:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    cfg = game_config.mission_act_base_cfg.get(mission_id, {})
    if not cfg:
        context.result['mc'] = MsgCode['MissionNotExist']
        return

    if not _check_module_open(mission_id, ki_user.game_info.role_level):
        context.result['mc'] = MsgCode['UserModuleNotOpen']
        return

    extra = ki_user.mission.extra_data
    if extra.get("last_act_mission", 0) != mission_id:
        context.result['mc'] = MsgCode['MissionNotIn']
        return

    # ====================== 计算奖励 金币经验 和 烈焰冰封幻想 不同=========================
    data = {}
    add_awards = []

    if cfg["type"] in [MISSION_ACT_TYPE_GOLD, MISSION_ACT_TYPE_EXP, MISSION_ACT_TYPE_PHANTOM]:
        award_pack_list = [pack for t, pack in cfg["awards"].items() if t <= float(hurt_percent)]
        awards = [game_config.item_pack_cfg.get(id) for id in award_pack_list]
        base_awards = common_helper.handle_pack_items(awards)
        add_awards.append(base_awards)

        data["base"] = copy.copy(base_awards)
        # 金币副本,最终奖励和上阵机甲的总星级挂钩
        hero_stars = _get_fight_hero_stars(ki_user, cfg["type"])
        star_cfg = game_config.mission_act_star_award_cfg.get(hero_stars)
        data["extra"] = star_cfg[cfg["type"]]
        add_awards.append(star_cfg[cfg["type"]])
    else:
        # 随机获得物品数量
        # 输了不得奖励
        if star not in range(1,4):
            add_awards = {}
        else:
            awards_num = common_helper.weight_random(cfg["awards_num"])
            awards_lib = [{item_pack_id: weight} for item_pack_id, weight in cfg["awards"].items()]
            awards_pack_list = mission_helper.random_mission_award(awards_lib, awards_num)
            base_awards = [game_config.item_pack_cfg.get(pack_id) for pack_id in awards_pack_list]
            base_awards = common_helper.handle_pack_items(base_awards)
            add_awards.append(base_awards)
            data["base"] = base_awards

    if star in range(1,4):
        ki_user.mission.act_past(cfg["type"], mission_id, star)

    ki_user.daily_info.act_mission_past(cfg["type"], hurt, 1)

    # 增加最终物品
    pack_logic.add_items(ki_user, pack_logic.amend_goods(add_awards))

    # 更新排行榜数据
    if cfg["type"] in [MISSION_ACT_TYPE_GOLD, MISSION_ACT_TYPE_EXP]:
        rank_service.update_act_mission_rank(ki_user.sid, cfg["type"], ki_user.uid, hurt)
    else:
        if star in range(1,4):
            rank_service.update_act_mission_rank(ki_user.sid, cfg["type"], ki_user.uid, int(time.time()))

    context.result["data"] = data