Beispiel #1
0
def award(context):
    """领取排名奖励

    Args:
        index 排名奖励索引

    Returns:
        mc
    """
    ki_user = context.user

    index = context.get_parameter("index")
    award_cfg = game_config.arena_awards_cfg.get(index, {})
    if not award_cfg:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    if award_cfg["need_rank"] < ki_user.arena.max_rank:
        context.result['mc'] = MsgCode['ArenaRankTooLow']
        return

    awarded = ki_user.arena.awarded_index
    if index in awarded:
        context.result['mc'] = MsgCode['ArenaAwarded']
        return

    pack_logic.add_items(ki_user, award_cfg["awards"])
    ki_user.arena.award(index)

    context.result["mc"] = MsgCode['ArenaGetAwardSucc']
Beispiel #2
0
def buy(context):
    """购买特权礼包

    Args:
        index 与vip相对应

    Returns:
        mc
    """
    ki_user = context.user

    index = context.get_parameter("index")
    if index > ki_user.game_info.vip_level:
        context.result['mc'] = MsgCode['UserVipTooLow']
        return

    # 只能买一次
    if utils.bit_test(ki_user.vip.bought_gifts, index):
        context.result['mc'] = MsgCode['VipGiftAlreadyBought']
        return

    cfg = game_config.vip_priv_cfg.get(index, {})
    if not cfg:
        context.result['mc'] = MsgCode['VipGiftNotExist']
        return

    if not user_logic.check_game_values1(ki_user, diamond=cfg["priv_gift_price"]):
        context.result['mc'] = MsgCode['DiamondNotEnough']
        return

    ki_user.vip.buy(index)
    pack_logic.add_items(ki_user, cfg["priv_gift"])
    user_logic.consume_game_values1(ki_user, diamond=cfg["priv_gift_price"])

    context.result['mc'] = MsgCode['VipGiftBuySuccess']
Beispiel #3
0
def award(context):
    """领取排名奖励

    Args:
        index 排名奖励索引

    Returns:
        mc
    """
    ki_user = context.user

    index = context.get_parameter("index")
    award_cfg = game_config.arena_awards_cfg.get(index, {})
    if not award_cfg:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    if award_cfg["need_rank"] < ki_user.arena.max_rank:
        context.result['mc'] = MsgCode['ArenaRankTooLow']
        return

    awarded = ki_user.arena.awarded_index
    if index in awarded:
        context.result['mc'] = MsgCode['ArenaAwarded']
        return

    pack_logic.add_items(ki_user, award_cfg["awards"])
    ki_user.arena.award(index)

    context.result["mc"] = MsgCode['ArenaGetAwardSucc']
Beispiel #4
0
def award(context):
    """领取累计奖励

    Args:
        index 累计奖励项ID

    Returns:

    """
    ki_user = context.user

    index = context.get_parameter("index")
    award_cfg = game_config.sign_award_cfg.get(index, {})

    if not award_cfg:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    if index <= ki_user.sign.last_award_index:
        context.result['mc'] = MsgCode['SignAlreadyAwarded']
        return

    if award_cfg["need_sign_days"] > ki_user.sign.total_sign_days:
        context.result['mc'] = MsgCode['SignDaysNotEnough']
        return

    ki_user.sign.award(index)
    pack_logic.add_items(ki_user, award_cfg["award"])  # 加物品

    context.result['mc'] = MsgCode['SignAwardSucc']
Beispiel #5
0
def cdkey(context):
    """激活码兑换奖品

    Args:

    Returns:

    """
    ki_user = context.user
    code = context.get_parameter("code")

    if len(code) != 10:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    # 大小写不敏感
    code = code.upper()
    key_tag = code[:4]
    tag_cfg = game_config.gift_key_config.get(key_tag, {})
    # 检测是否存在
    if not tag_cfg:
        context.result['mc'] = MsgCode['CDKeyNotExist']
        return

    # 检测是否生效,过期
    if not _check_key_effective(tag_cfg["date_start"], tag_cfg["date_end"]):
        context.result['mc'] = MsgCode['CDKeyNotEffective']
        return

    # 检测是否存在
    if not cdkey_service.check_code_exist(code):
        context.result['mc'] = MsgCode['CDKeyNotExist']
        return

    # 同类型是否在重复使用
    if tag_cfg["type"] in [CDKEY_TYPE_1, CDKEY_TYPE_2
                           ] and key_tag in ki_user.used_cdkey_tags:
        context.result['mc'] = MsgCode['CDKeyCantRepeat']
        return

    # 兑换码是否被其他玩家使用
    if tag_cfg["type"] in [CDKEY_TYPE_2, CDKEY_TYPE_3
                           ] and cdkey_service.check_code_used_by_other(code):
        context.result['mc'] = MsgCode['CDKeyAlreadyUsedByOther']
        return

    import apps.logics.package as pack_logic
    pack_logic.add_items(ki_user, tag_cfg["award"])

    if tag_cfg["type"] in [CDKEY_TYPE_1, CDKEY_TYPE_2]:
        ki_user.used_cdkey_tags.append(key_tag)
        ki_user.put()

    if tag_cfg["type"] in [CDKEY_TYPE_2, CDKEY_TYPE_3]:
        cdkey_service.update_cdkey_info(code, ki_user.uid)

    data = {}
    data["award"] = tag_cfg["award"]

    context.result["data"] = data
Beispiel #6
0
def award(context):
    """领取积分奖励

    Args:
        index 奖励编号

    Returns:

    """
    ki_user = context.user

    index = context.get_parameter("index")

    award_cfg = game_config.trial_awards_cfg.get(index, {})
    if not award_cfg:
        context.result['mc'] = MsgCode['TrialGetAwardWrong']
        return

    scores = ki_user.trial.history_scores * 0.08 + ki_user.trial.daily_scores
    if scores < award_cfg["scores"]:
        context.result['mc'] = MsgCode['TrialScoresTooLow']
        return

    if index in ki_user.trial.awarded_index:
        context.result['mc'] = MsgCode['TrialAwarded']
        return

    pack_logic.add_items(ki_user, award_cfg["awards"])
    ki_user.trial.award(index)

    context.result["mc"] = MsgCode['TrialGetAwardSucc']
Beispiel #7
0
def daily_award(context):
    """领取竞技场每日积分奖励

    Args:
        index 排名奖励索引
    Returns:
        mc
    """
    ki_user = context.user

    index = context.get_parameter("index")
    award_cfg = game_config.arena_daily_awards_cfg.get(index, {})
    if not award_cfg:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    if award_cfg["need_score"] > ki_user.arena.daily_scores:
        context.result['mc'] = MsgCode['ArenaScoreNotEnough']
        return

    awarded = ki_user.arena.daily_awarded_index
    if index in awarded:
        context.result['mc'] = MsgCode['ArenaAwarded']
        return

    pack_logic.add_items(ki_user, award_cfg["awards"])
    ki_user.arena.daily_award(index)

    context.result["mc"] = MsgCode['ArenaGetAwardSucc']
Beispiel #8
0
def award(context):
    """领取累计奖励

    Args:
        index 累计奖励项ID

    Returns:

    """
    ki_user = context.user

    index = context.get_parameter("index")
    award_cfg = game_config.sign_award_cfg.get(index, {})

    if not award_cfg:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    if index <= ki_user.sign.last_award_index:
        context.result['mc'] = MsgCode['SignAlreadyAwarded']
        return

    if award_cfg["need_sign_days"] > ki_user.sign.total_sign_days:
        context.result['mc'] = MsgCode['SignDaysNotEnough']
        return

    ki_user.sign.award(index)
    pack_logic.add_items(ki_user, award_cfg["award"]) # 加物品

    context.result['mc'] = MsgCode['SignAwardSucc']
Beispiel #9
0
def daily_award(context):
    """领取竞技场每日积分奖励

    Args:
        index 排名奖励索引
    Returns:
        mc
    """
    ki_user = context.user

    index = context.get_parameter("index")
    award_cfg = game_config.arena_daily_awards_cfg.get(index, {})
    if not award_cfg:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    if award_cfg["need_score"] > ki_user.arena.daily_scores:
        context.result['mc'] = MsgCode['ArenaScoreNotEnough']
        return

    awarded = ki_user.arena.daily_awarded_index
    if index in awarded:
        context.result['mc'] = MsgCode['ArenaAwarded']
        return

    pack_logic.add_items(ki_user, award_cfg["awards"])
    ki_user.arena.daily_award(index)

    context.result["mc"] = MsgCode['ArenaGetAwardSucc']
Beispiel #10
0
def past(context):
    """副本结算

    Args:
        mission_id  副本ID
        star  获得星星数量
    """
    ki_user = context.user
    mission_id = context.get_parameter("mission_id")
    star = context.get_parameter("star")

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

    if star < 0 or star > 3:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    extra = ki_user.mission.extra_data
    if extra["last_mission"] != mission_id:
        context.result['mc'] = MsgCode['MissionNotIn']
        return

    # =========  检测完毕  ============
    # 获得物品
    cfg = game_config.mission_base_cfg.get(mission_id)
    # 随机获得物品数量
    awards_num = common_helper.weight_random(cfg["awards_num"])
    awards_pack_list = mission_helper.random_mission_award(cfg["awards_lib"], awards_num)
    awards = [game_config.item_pack_cfg.get(pack_id) for pack_id in awards_pack_list]

    # 扣除其余体力
    energy_role_exp = cfg["energy"] / 3 * 2

    # 增加玩家经验
    user_logic.consume_game_values1(ki_user, energy=energy_role_exp)
    user_logic.add_game_values(ki_user, {4: energy_role_exp, 1: cfg["gold"]})

    heros = [hero_id for hero_id in ki_user.array.mission if hero_id]
    hero_logic.hero_add_exp(ki_user, heros, cfg["hero_exp"])

    is_first_pass = mission_id not in ki_user.mission.missions
    # 第一次通关送机甲碎片和钻石
    if is_first_pass:
        awards.append(cfg["chips"])
        awards.append(cfg["diamonds"])

    pack_logic.add_items(ki_user, common_helper.handle_pack_items(awards))

    # 【日志统计】玩家副本通关进度
    try:
        if is_first_pass:
            stat_service.mission(ki_user, mission_id, cfg["type"])
    except Exception,e:
        logging.error(e)
Beispiel #11
0
def anti_weak(context):
    """降星 - 升星的逆操作

    Args:
        hero_id
        position  装备部位
    """
    ki_user = context.user

    hero_id = context.get_parameter("hero_id")
    position = context.get_parameter("position")

    if not _check_module_open(position, ki_user.game_info.role_level):
        context.result['mc'] = MsgCode['UserModuleNotOpen']
        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

    # 0星你降个鸡毛啊
    if equip_data["star"] == 0:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    cfg_key = "%s-%s" % (equip_data["equip_id"], equip_data["star"])
    cfg = game_config.equip_weak_cfg.get(cfg_key)
    if not cfg:
        context.result['mc'] = MsgCode['GameConfigNotExist']
        return

    # 检查消耗是否足够
    need_diamond = 30
    if not user_logic.check_game_values1(ki_user, diamond=need_diamond):
        context.result['mc'] = MsgCode['DiamondNotEnough']
        return

    # 返还材料
    pack_logic.add_items(ki_user, cfg["material"])
    ki_user.equip.anti_weak(hero_id, position)
    user_logic.consume_game_values1(ki_user, diamond=need_diamond)

    # 武器第一次觉醒时,更新该机甲的必杀技能, 如果1星降到0星,必杀技能被替换掉
    if position == EQUIP_POSITION_WEAPON and equip_data["star"] == 0:
        from apps.logics import skill as skill_logic
        skill_logic.replace_bs_skill(ki_user, hero_id, False)

    context.result['mc'] = MsgCode['EquipAntiWeakSucc']
Beispiel #12
0
def anti_weak(context):
    """降星 - 升星的逆操作

    Args:
        hero_id
        position  装备部位
    """
    ki_user = context.user

    hero_id = context.get_parameter("hero_id")
    position = context.get_parameter("position")

    if not _check_module_open(position, ki_user.game_info.role_level):
        context.result['mc'] = MsgCode['UserModuleNotOpen']
        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

    # 0星你降个鸡毛啊
    if equip_data["star"] == 0:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    cfg_key = "%s-%s" % (equip_data["equip_id"], equip_data["star"])
    cfg = game_config.equip_weak_cfg.get(cfg_key)
    if not cfg:
        context.result['mc'] = MsgCode['GameConfigNotExist']
        return

    # 检查消耗是否足够
    need_diamond = 30
    if not user_logic.check_game_values1(ki_user, diamond=need_diamond):
        context.result['mc'] = MsgCode['DiamondNotEnough']
        return

    # 返还材料
    pack_logic.add_items(ki_user, cfg["material"])
    ki_user.equip.anti_weak(hero_id, position)
    user_logic.consume_game_values1(ki_user, diamond=need_diamond)

    # 武器第一次觉醒时,更新该机甲的必杀技能, 如果1星降到0星,必杀技能被替换掉
    if position == EQUIP_POSITION_WEAPON and equip_data["star"] == 0:
        from apps.logics import skill as skill_logic
        skill_logic.replace_bs_skill(ki_user, hero_id, False)

    context.result['mc'] = MsgCode['EquipAntiWeakSucc']
Beispiel #13
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']
Beispiel #14
0
def exchange_chip(context):
    """转换万能碎片,万能碎片 -》 机甲碎片

    规则:
        将万能碎片转换成普通碎片,只能用于升级星等
        转换类型分为转换1个和10个
        如果选择转换10个,若当前数量小于等于10个,则全部转换

    Args:
        target_chip_id 目标碎片道具ID int
        exchange_type 转换类型 (转换一个或者转换十个)

    Raises:
        MsgCode['ParamIllegal']
        MsgCode['HeroNotExist']
        MsgCode['PackageItemNotExist']

    """
    ki_user = context.user

    target_chip_id = context.get_parameter("target_chip_id")
    exchange_type = context.get_parameter("exchange_type")

    if exchange_type not in [CHIP_EXCHANGE_ONE, CHIP_EXCHANGE_TEN]:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    chip_cfg = game_config.item_cfg.get(target_chip_id, {})
    if not chip_cfg:
        context.result['mc'] = MsgCode['GameConfigNotExist']
        return

    # 判断是否有这个碎片对应的机甲
    if chip_cfg["chip_hero_id"] not in ki_user.hero.heros:
        context.result['mc'] = MsgCode['HeroNotExist']
        return

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

    num = 1
    if exchange_type == CHIP_EXCHANGE_TEN:
        had_num = ki_user.package.get_item_num_by_id(SPECIAL_CHIP_ID)
        num = 10 if had_num >= 10 else had_num

    pack_logic.add_items(ki_user, {target_chip_id: num})
    pack_logic.remove_items(ki_user, {SPECIAL_CHIP_ID: num})

    context.result['mc'] = MsgCode['HeroExchangeChipSucc']
Beispiel #15
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']
Beispiel #16
0
def hangup(context):
    """冰封和烈焰副本可以扫荡

    Args:
        act_mission_type :活动副本类型 经验 / 金币

    Returns:

    """
    ki_user = context.user

    mission_id = context.get_parameter("mission_id")
    htimes = context.get_parameter("htimes")

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

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

    if cfg["type"] not in [MISSION_ACT_TYPE_FIRE, MISSION_ACT_TYPE_ICE]:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    main_cfg = game_config.mission_act_main_cfg.get(cfg["type"])
    if htimes > main_cfg["max_times"] or htimes <= 0:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    star = ki_user.mission.act_missions.get(mission_id, 0)
    if star != 3:
        context.result['mc'] = MsgCode['MissionStarNotEnough']
        return

    daily_data = ki_user.daily_info.act_missions.get(cfg["type"], {})
    if daily_data and daily_data["past_times"] + htimes > main_cfg["max_times"]:
        context.result['mc'] = MsgCode['MissionTimesError']
        return

    awards = [cfg["awards"]] * htimes
    final_awards = common_helper.handle_pack_items(awards)

    pack_logic.add_items(ki_user, final_awards)
    ki_user.daily_info.act_mission_enter(cfg["type"], htimes)

    context.result['mc'] = MsgCode['MissionHangupSucc']
Beispiel #17
0
def hangup(context):
    """冰封和烈焰副本可以扫荡

    Args:
        act_mission_type :活动副本类型 经验 / 金币

    Returns:

    """
    ki_user = context.user

    mission_id = context.get_parameter("mission_id")
    htimes = context.get_parameter("htimes")

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

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

    if cfg["type"] not in [MISSION_ACT_TYPE_FIRE, MISSION_ACT_TYPE_ICE]:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    main_cfg = game_config.mission_act_main_cfg.get(cfg["type"])
    if htimes > main_cfg["max_times"] or htimes <= 0:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    star = ki_user.mission.act_missions.get(mission_id, 0)
    if star != 3:
        context.result['mc'] = MsgCode['MissionStarNotEnough']
        return

    daily_data = ki_user.daily_info.act_missions.get(cfg["type"], {})
    if daily_data and daily_data["past_times"] + htimes > main_cfg["max_times"]:
        context.result['mc'] = MsgCode['MissionTimesError']
        return

    awards = [cfg["awards"]] * htimes
    final_awards = common_helper.handle_pack_items(awards)

    pack_logic.add_items(ki_user, final_awards)
    ki_user.daily_info.act_mission_enter(cfg["type"], htimes)

    context.result['mc'] = MsgCode['MissionHangupSucc']
Beispiel #18
0
def daily_submit(context):
    """提交日常任务

    Args:
        task_id 任务ID

    Returns:
        mc
    """
    ki_user = context.user

    task_id = context.get_parameter("task_id")

    task = ki_user.task.daily_tasks.get(task_id, {})
    if not task:
        context.result['mc'] = MsgCode['TaskNotExist']
        return

    if task["state"] == static_const.TASK_STATE_SUBMITED:
        context.result['mc'] = MsgCode['TaskCantSubmit']
        return

    task_cfg = game_config.task_daily_cfg.get(task_id)
    # 40类型特殊  每日都可以领一次
    if task_cfg["type"] in static_const.TASK_DAILY_GET_ITEMS_TYPE:
        award_time = static_const.TASK_TIME_TO_AWARD_MAP[task_cfg["type"]]
        if not common_helper.time_to_award(award_time):
            context.result['mc'] = MsgCode['TaskCantSubmit']
            return

    elif task_cfg["type"] == static_const.TASK_DAILY_VIP_GET_DIAMOND_TYPE:
        ki_user.vip.update_card_when_request()
        if ki_user.vip.card_data["state"] < task_cfg["target"]:
            context.result['mc'] = MsgCode['TaskCantSubmit']
            return

    else:
        if task["state"] != static_const.TASK_STATE_COMPLETED:
            context.result['mc'] = MsgCode['TaskCantSubmit']
            return

    # 增加任务奖励
    ki_user.task.complete_daily_task(task_id)
    pack_logic.add_items(ki_user, task_cfg["awards"])

    context.result["mc"] = MsgCode["TaskSubmitSucc"]
Beispiel #19
0
def mission_award(context):
    """领取副本首通就奖励和三星奖励

    Args:
        mission_id 副本ID
        award_type 奖励类型 1-首通礼包 2-三星礼包
    """
    ki_user = context.user
    mission_id = context.get_parameter("mission_id")
    award_type = context.get_parameter("award_type")

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

    cfg = game_config.mission_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

    ms_data = ki_user.mission.get_mission_by_id(mission_id)
    if not ms_data:
        context.result['mc'] = MsgCode['MissionNoPass']
        return

    if award_type == 1:
        if ms_data["first_award"]:
            context.result['mc'] = MsgCode['MissionFirstAwarded']
            return
        else:
            pack_logic.add_items(ki_user, cfg["first_award"])
            ki_user.mission.get_mission_award(mission_id, award_type)
    else:
        if ms_data["best_award"]:
            context.result['mc'] = MsgCode['MissionBestAwarded']
            return
        else:
            pack_logic.add_items(ki_user, cfg["best_award"])
            ki_user.mission.get_mission_award(mission_id, award_type)

    context.result['mc'] = MsgCode['MissionAwardSucc']
Beispiel #20
0
    def admin_fix_gamer(cls, params):
        sid = params.get("sid")
        uids = params.get("uids")
        items = params.get("items")

        if str(uids) == "@all":
            receivers = rank_service.get_all_players(int(sid))
        else:
            receivers = str(uids).split("/")

        from apps.models.user import User
        from apps.logics import package as pack_logic
        for uid in receivers:
            user = User.get(uid)
            if isinstance(user, User):
                pack_logic.add_items(user, eval(items))
                _handle_daily_task_after_vitual_pay(user)

        return {"mc": 900002}
Beispiel #21
0
def chapter_award(context):
    """领取章节星星奖品箱子

    Args:
        chapter_type 章节类型
        chapter_id 章节ID
        star 几星奖品
    """
    ki_user = context.user

    chapter_type = context.get_parameter("chapter_type")
    chapter_id = context.get_parameter("chapter_id")
    star = context.get_parameter("star")

    key = "%s-%s" % (chapter_type, chapter_id)
    cfg = game_config.mission_main_cfg.get(key, {})
    if (not cfg) or (not cfg["awards"].get(star, {})):
        context.result['mc'] = MsgCode['ParamIllegal']
        return

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

    data = ki_user.mission.get_chapter_by_type_id(chapter_type, chapter_id)
    if not data:
        context.result['mc'] = MsgCode['MissionChapterNull']
        return

    if star > data["star"]:
        context.result['mc'] = MsgCode['MissionStarNotEnough']
        return

    if star in data["got_award"]:
        context.result['mc'] = MsgCode['MissionChapterAwarded']
        return

    awards = game_config.item_pack_cfg.get(cfg["awards"][star])
    pack_logic.add_items(ki_user, awards)
    ki_user.mission.get_chapter_awards(key, star)

    context.result['mc'] = MsgCode['MissionAwardSucc']
Beispiel #22
0
def open_box(context):
    """宝箱层,免费领取箱子里的道具

    Args:

    Returns:

    """
    ki_user = context.user

    process = ki_user.trial.daily_current_process
    _cfg = game_config.trial_cfg.get(process)
    if _cfg["type"] != PROCESS_BOX:
        context.result['mc'] = MsgCode['TrialWrongType']
        return

    # 首次开箱子免费,奖品取现成的
    loop_index = ki_user.trial.tmp_box_counter + 1

    cfg = game_config.user_buy_refresh_cfg.get(loop_index)
    if not cfg:
        last = max(game_config.user_buy_refresh_cfg.keys())
        cfg = game_config.user_buy_refresh_cfg.get(last)

    if not user_logic.check_game_values1(ki_user, diamond=cfg["trial_openbox_diamond"]):
        context.result['mc'] = MsgCode['DiamondNotEnough']
        return

    if loop_index == 1:
        awards = ki_user.trial.daily_awards.get(process)
        act_helper.update_after_trial_process(ki_user, process) # 更新活动【通关试炼指定层数】
    else:
        awards = random_awards(process, loop_index, ki_user.game_info.role_level)

    user_logic.consume_game_values1(ki_user, diamond=cfg["trial_openbox_diamond"])
    pack_logic.add_items(ki_user, awards) # 加物品

    # 更新这一层领取物品计数器
    ki_user.trial.incr_award_counter()

    context.result["data"] = {}
    context.result["data"]["awards"] = awards
Beispiel #23
0
def online_awards(context):
    """在线礼包
    """
    ki_user = context.user

    daily = ki_user.daily_info.online_awards
    award_cfg = game_config.act_online_awards_cfg.get(daily["index"] + 1, {})
    if not award_cfg:
        context.result['mc'] = MsgCode['ActAlreadyFinish']
        return

    current_timestamp = int(time.time())
    if current_timestamp - daily["last"] < award_cfg["interval"]:
        context.result['mc'] = MsgCode['ActAwardNotSatisfied']
        return

    ki_user.daily_info.update_online_awards(current_timestamp)
    pack_logic.add_items(ki_user, award_cfg["awards"])

    context.result["mc"] = MsgCode['ActAwardSucc']
Beispiel #24
0
def sign(context):
    """签到

    Args:

    Returns:

    """
    ki_user = context.user

    this_date = utils.today()
    if this_date == ki_user.sign.last_sign:
        context.result['mc'] = MsgCode['SignAlreadyToday']
        return

    this_date1 = utils.split_date(this_date)
    cfg_key = "%s-%s-%s" % (this_date1[0], this_date1[1],
                            ki_user.sign.month_sign_days + 1)
    sign_cfg = game_config.sign_cfg.get(cfg_key, {})

    if not sign_cfg:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    ki_user.sign.sign(this_date)
    if ki_user.game_info.vip_level >= sign_cfg["double_vip"]:
        ki_user.daily_info.resign_tag = 1
        ki_user.daily_info.put()

    # 达到vip等级 双倍物品
    awards = {}
    if sign_cfg["double_vip"] and sign_cfg[
            "double_vip"] <= ki_user.game_info.vip_level:
        for item, value in sign_cfg["award"].items():
            awards[item] = value * 2
    else:
        awards = sign_cfg["award"]

    pack_logic.add_items(ki_user, awards)  # 加物品

    context.result['mc'] = MsgCode['SignSucc']
Beispiel #25
0
def resign(context):
    """vip等级足够  补签

    Args:

    Returns:

    """
    ki_user = context.user

    this_date = utils.today()
    # 今日还没签  不能补签
    if this_date != ki_user.sign.last_sign:
        context.result['mc'] = MsgCode['SignNotToday']
        return

    # 已经补签过了
    if ki_user.daily_info.resign_tag == 1:
        context.result['mc'] = MsgCode['SignAlreadyToday']
        return

    this_date1 = utils.split_date(this_date)
    cfg_key = "%s-%s-%s" % (this_date1[0], this_date1[1],
                            ki_user.sign.month_sign_days)
    sign_cfg = game_config.sign_cfg.get(cfg_key)

    if sign_cfg["double_vip"] == 0:
        context.result['mc'] = MsgCode['SignCantResignToday']
        return

    if sign_cfg["double_vip"] > ki_user.game_info.vip_level:
        context.result['mc'] = MsgCode['UserVipTooLow']
        return

    # 更新补签标记
    ki_user.daily_info.resign_tag = 1
    ki_user.daily_info.put()

    pack_logic.add_items(ki_user, sign_cfg["award"])  # 加物品

    context.result['mc'] = MsgCode['SignSucc']
Beispiel #26
0
def admire(context):
    """膜拜某个前十对手

    Args:
        fighter_id 膜拜对象的UID

    Returns:
    """
    ki_user = context.user

    fighter_id = context.get_parameter("fighter_id")

    if fighter_id in ki_user.arena.daily_admire_list:
        context.result['mc'] = MsgCode['ArenaAlreadyAdmired']
        return

    ArenaService.admire(ki_user.sid, fighter_id)
    ki_user.arena.admire(fighter_id)
    pack_logic.add_items(ki_user, {1: 2000})

    context.result["mc"] = MsgCode['ArenaAdmireSucc']
Beispiel #27
0
def admire(context):
    """膜拜某个前十对手

    Args:
        fighter_id 膜拜对象的UID

    Returns:
    """
    ki_user = context.user

    fighter_id = context.get_parameter("fighter_id")

    if fighter_id in ki_user.arena.daily_admire_list:
        context.result['mc'] = MsgCode['ArenaAlreadyAdmired']
        return

    ArenaService.admire(ki_user.sid, fighter_id)
    ki_user.arena.admire(fighter_id)
    pack_logic.add_items(ki_user, {1:2000})

    context.result["mc"] = MsgCode['ArenaAdmireSucc']
Beispiel #28
0
def resign(context):
    """vip等级足够  补签

    Args:

    Returns:

    """
    ki_user = context.user

    this_date = utils.today()
    # 今日还没签  不能补签
    if this_date != ki_user.sign.last_sign:
        context.result['mc'] = MsgCode['SignNotToday']
        return

    # 已经补签过了
    if ki_user.daily_info.resign_tag == 1:
        context.result['mc'] = MsgCode['SignAlreadyToday']
        return

    this_date1 = utils.split_date(this_date)
    cfg_key = "%s-%s-%s" % (this_date1[0], this_date1[1], ki_user.sign.month_sign_days)
    sign_cfg = game_config.sign_cfg.get(cfg_key)

    if sign_cfg["double_vip"] == 0:
        context.result['mc'] = MsgCode['SignCantResignToday']
        return

    if sign_cfg["double_vip"] > ki_user.game_info.vip_level:
        context.result['mc'] = MsgCode['UserVipTooLow']
        return

    # 更新补签标记
    ki_user.daily_info.resign_tag = 1
    ki_user.daily_info.put()

    pack_logic.add_items(ki_user, sign_cfg["award"]) # 加物品

    context.result['mc'] = MsgCode['SignSucc']
Beispiel #29
0
def get_attachments(context):
    """收取附件

    Args:
        mail_ids 收取附件的邮件ID列表 []

    Returns:
        mc
    """
    ki_user = context.user

    mail_ids = context.get_parameter("mail_ids", "[]")
    try:
        mail_ids = eval(mail_ids)
        if (not isinstance(mail_ids, list)) or (len(mail_ids) <= 0):
            raise

        mail_ids = [int(mid) for mid in mail_ids]
    except:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    items = []
    for mail_id in mail_ids:
        state = MailService.check_mail_state(ki_user.uid, mail_id)
        if state is None:
            context.result['mc'] = MsgCode['MailNotExist']
            return
        elif state == MAIL_STATE_GOT:
            context.result['mc'] = MsgCode['MailAlreadyGot']
            return
        else:
            items.append(MailService.get_attachments(ki_user.uid, mail_id))

    pack_logic.add_items(ki_user, common_helper.handle_pack_items(items))
    for mail_id in mail_ids:
        MailService.update_mail_state(ki_user.uid, mail_id, MAIL_STATE_GOT)

    context.result["mc"] = MsgCode["MailGetAttachmentsSucc"]
Beispiel #30
0
def submit(context):
    """提交任务

    Args:
        task_id 任务ID

    Returns:
        mc
    """
    ki_user = context.user

    task_id = context.get_parameter("task_id")

    cfg = game_config.task_main_cfg.get(task_id, None)
    if cfg is None:
        context.result['mc'] = MsgCode['TaskNotExist']
        return

    if task_id in ki_user.task.main_completed_tasks:
        context.result['mc'] = MsgCode['TaskAlreadySubmit']
        return

    func = getattr(task_helper, 'task_checker_%s' % cfg["type"])
    state = func(ki_user, cfg)
    if state != static_const.TASK_STATE_COMPLETED:
        context.result['mc'] = MsgCode['TaskCantSubmit']
        return

    # 增加任务奖励
    pack_logic.add_items(ki_user, cfg["awards"])
    # 更新任务状态,
    ki_user.task.submit(task_id)
    # 检测是否有后续任务等待操作
    if cfg["next"]:
        # next_task_state = task_helper.trigger_next_task(ki_user, cfg["next"])
        # ki_user.task.fetch_next_task(cfg["next"], next_task_state)
        ki_user.task.fetch_next_task(cfg["next"])

    context.result["mc"] = MsgCode["TaskSubmitSucc"]
Beispiel #31
0
def get_attachments(context):
    """收取附件

    Args:
        mail_ids 收取附件的邮件ID列表 []

    Returns:
        mc
    """
    ki_user = context.user

    mail_ids = context.get_parameter("mail_ids", "[]")
    try:
        mail_ids = eval(mail_ids)
        if (not isinstance(mail_ids, list)) or (len(mail_ids) <= 0):
            raise

        mail_ids = [int(mid) for mid in mail_ids]
    except:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    items = []
    for mail_id in mail_ids:
        state = MailService.check_mail_state(ki_user.uid, mail_id)
        if state is None:
            context.result['mc'] = MsgCode['MailNotExist']
            return
        elif state == MAIL_STATE_GOT:
            context.result['mc'] = MsgCode['MailAlreadyGot']
            return
        else:
            items.append(MailService.get_attachments(ki_user.uid, mail_id))

    pack_logic.add_items(ki_user, common_helper.handle_pack_items(items))
    for mail_id in mail_ids:
        MailService.update_mail_state(ki_user.uid, mail_id, MAIL_STATE_GOT)

    context.result["mc"] = MsgCode["MailGetAttachmentsSucc"]
Beispiel #32
0
def sign(context):
    """签到

    Args:

    Returns:

    """
    ki_user = context.user

    this_date = utils.today()
    if this_date == ki_user.sign.last_sign:
        context.result['mc'] = MsgCode['SignAlreadyToday']
        return

    this_date1 = utils.split_date(this_date)
    cfg_key = "%s-%s-%s" % (this_date1[0], this_date1[1], ki_user.sign.month_sign_days + 1)
    sign_cfg = game_config.sign_cfg.get(cfg_key, {})

    if not sign_cfg:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    ki_user.sign.sign(this_date)
    if ki_user.game_info.vip_level >= sign_cfg["double_vip"]:
        ki_user.daily_info.resign_tag = 1
        ki_user.daily_info.put()

    # 达到vip等级 双倍物品
    awards = {}
    if sign_cfg["double_vip"] and sign_cfg["double_vip"] <= ki_user.game_info.vip_level:
        for item, value in sign_cfg["award"].items():
            awards[item] = value * 2
    else:
        awards = sign_cfg["award"]

    pack_logic.add_items(ki_user, awards) # 加物品

    context.result['mc'] = MsgCode['SignSucc']
Beispiel #33
0
def debug(context):
    """api调试工具
    """
    # 测试副本获得星星,更新临时排行榜中数据

    ki_user = context.user
    action = context.get_parameter("action")

    if action == "clean_sign_data":
        ki_user.sign.last_sign = 0
        ki_user.sign.put()

    if action == "send_mails":
        from apps.services.mail import MailService
        # send(ids, mtype, title, fromwho, msg, attachments)
        for i in range(10):
            if i % 2 == 0:
                MailService.send_system(["110000004"], "test_%s" % i, "军需官",
                                        "我要一个打五个!!", {1: 10000 + i})
            else:
                MailService.send_system(["110000004"], "test_%s" % i, "军需官",
                                        "我要一个打五个!!", {})

    if action == "add_items":
        items = context.get_parameter("items", "{}")
        try:
            items = eval(items)
            if not isinstance(items, dict):
                raise 1
        except:
            context.result['mc'] = MsgCode['ParamIllegal']
            return

        import apps.logics.package as pack_logic
        pack_logic.add_items(ki_user, items)

    context.result["mc"] = 100
Beispiel #34
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()
Beispiel #35
0
def buy(context):
    """购买特权礼包

    Args:
        index 与vip相对应

    Returns:
        mc
    """
    ki_user = context.user

    index = context.get_parameter("index")
    if index > ki_user.game_info.vip_level:
        context.result['mc'] = MsgCode['UserVipTooLow']
        return

    # 只能买一次
    if utils.bit_test(ki_user.vip.bought_gifts, index):
        context.result['mc'] = MsgCode['VipGiftAlreadyBought']
        return

    cfg = game_config.vip_priv_cfg.get(index, {})
    if not cfg:
        context.result['mc'] = MsgCode['VipGiftNotExist']
        return

    if not user_logic.check_game_values1(ki_user,
                                         diamond=cfg["priv_gift_price"]):
        context.result['mc'] = MsgCode['DiamondNotEnough']
        return

    ki_user.vip.buy(index)
    pack_logic.add_items(ki_user, cfg["priv_gift"])
    user_logic.consume_game_values1(ki_user, diamond=cfg["priv_gift_price"])

    context.result['mc'] = MsgCode['VipGiftBuySuccess']
Beispiel #36
0
def pick(context):
    """商店抽奖 - 装备觉醒石头

    Args:
        ptype 抽奖类型  1-单次 2-十连抽

    Returns:

    Raises:

    """
    ki_user = context.user

    ptype = context.get_parameter("ptype")

    if ptype not in [PICK_TYPE_1, PICK_TYPE_2]:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    cur_package_len = len(ki_user.package.items)
    if cur_package_len >= pack_logic.PACKAGE_MAX_SLOTS:
        context.result['mc'] = MsgCode['PackageIsFull']
        return

    free = _is_pick_free(ki_user.daily_info.mall_pick_cd, ptype)

    final_type = _fix_pick_type(free, ptype, ki_user.game_info.box_key)

    if not final_type:
        context.result['mc'] = MsgCode['ServerInternalError']
        return

    cfg = game_config.mall_pick_cfg[final_type]
    if not pack_logic.check_items_enough(ki_user, cfg["consume"]):
        context.result['mc'] = MsgCode['DiamondNotEnough']
        return

    # 十连抽 or 单次
    loop_index = 0 if ptype == 1 else 9
    picked_items = []
    broadcast_list = []

    while loop_index >= 0:
        broadcast, lib = _get_pick_rand_lib(_pick_lib_type(final_type, loop_index))
        target = random.choice(lib)
        picked_items.append(target)
        if broadcast:
            broadcast_list += target.keys()

        loop_index -= 1

    picked_items_c2s = copy.copy(picked_items)
    picked_items.append(cfg["items"])
    final_items = common_helper.handle_pack_items(picked_items)

    # 加物品&扣除消耗品
    if not free:
        pack_logic.remove_items(ki_user, cfg["consume"])

    pack_logic.add_items(ki_user, final_items)   # 加抽到的物品

    # 更新数据
    if final_type == 5:
        ki_user.daily_info.mall_pick_cd = 1
        ki_user.daily_info.put()

    act_helper.update_after_mall_pick(ki_user, 1 if ptype == 1 else 10)

    # 炫耀
    try:
        for item_id in broadcast_list:
            trigger = {'uid': ki_user.uid, 'name': ki_user.name}
            NoticeService.broadcast(ki_user.sid, 14, trigger, item_id)
    except:
        logging.error("【商店获得物品】炫耀广播发生错误。")

    context.result["data"] = {}
    context.result["data"]["picked_items"] = picked_items_c2s
Beispiel #37
0
def hangup(context):
    """挂机扫荡

    Args:
        mission_id   扫荡目标副本ID
        htimes   扫荡次数
    """
    ki_user = context.user

    mission_id = context.get_parameter("mission_id")
    htimes = context.get_parameter("htimes")

    cfg = game_config.mission_base_cfg.get(mission_id)
    if (not cfg) or (cfg["type"] not in [MISSION_TYPE_PT, MISSION_TYPE_JY]) or \
       (htimes > 10) or (htimes <= 0):
        context.result['mc'] = MsgCode['ParamIllegal']
        return

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

    vip_cfg = game_config.vip_priv_cfg.get(ki_user.game_info.vip_level)
    if htimes > 1 and not vip_cfg["open_ten_hangup"]:
        context.result['mc'] = MsgCode['UserVipTooLow']
        return

    need_energy = cfg["energy"] * htimes
    if not user_logic.check_game_values1(ki_user, energy=need_energy):
        context.result['mc'] = MsgCode['MissionEnergyNotEnough']
        return

    mdata = ki_user.mission.get_mission_by_id(mission_id)
    if not mdata or mdata["star"] != 3:
        context.result['mc'] = MsgCode['MissionStarNotEnough']
        return

    if cfg["type"] in [MISSION_TYPE_JY]:
        mission_daily_data = ki_user.daily_info.mission_info
        daily = mission_daily_data.get(mission_id, {})
        used_times = 0 if not daily else daily["past_times"]
        if used_times + htimes > cfg["daily_limit"]:
            context.result['mc'] = MsgCode['MissionTimesError']
            return

    # 计算收获
    total_awards = {}
    _total_awards = []
    show_mystery_shop = 0
    for i in xrange(htimes):
        # 副本正常掉落
        _awards_num = common_helper.weight_random(cfg["awards_num"])
        _awards1 = mission_helper.random_mission_award(cfg["awards_lib"], _awards_num)

        # 副本扫荡额外掉落
        _awards2 = []
        for award in cfg["hangup_awards_lib"]:
            rate = cfg["hangup_awards_lib"][award]
            if random.random() <= rate:
                _awards2.append(award)

        for pack in _awards1 + _awards2:
            _total_awards.append(game_config.item_pack_cfg.get(pack))

        if not show_mystery_shop:
            show_mystery_shop = random_mystery_shop(ki_user.mall.mystery)

        total_awards[i+1] = {}
        total_awards[i+1]["normal"] = _awards1
        total_awards[i+1]["extra"] = _awards2

    user_logic.consume_game_values1(ki_user, energy=need_energy)    # 扣除体力
    pack_logic.add_items(ki_user, common_helper.handle_pack_items(_total_awards))   #  增加物品
    user_logic.add_game_values(ki_user, {4: need_energy, 1: htimes * cfg["gold"]})   # 加经验,金币

    # 更新运维活动数据
    act_helper.update_after_hangup_mission(ki_user, mission_id, htimes)

    # 精英和噩梦副本进入每日数据统计
    if cfg["type"] in [MISSION_TYPE_JY]:
        handle_daily_data(ki_user, mission_id, htimes)

    # 刷新随机商店物品
    if show_mystery_shop:
        show_mystery_time = mall_logic.refresh_mission_mystery_shop(ki_user)
    else:
        show_mystery_time = 0

    context.result["data"] = {}
    context.result["data"]["mystery_shop"] = {"show": show_mystery_shop, "time": show_mystery_time}
    context.result["data"]["goods"] = total_awards
Beispiel #38
0
def award(context):
    """活动领奖

    Args:
        act_id 活动ID
        index 奖项编号

    Returns:
        mc

    """
    ki_user = context.user

    act_id = context.get_parameter("act_id")
    index = context.get_parameter("index")

    if index <= 0:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    act_data = ki_user.activity.get_act_data(act_id)
    if not act_data:
        context.result['mc'] = MsgCode['ActNotExist']
        return

    server_acts = act_helper.get_active_acts(ki_user.sid, ki_user.game_info.role_level)
    if act_id not in server_acts:
        context.result['mc'] = MsgCode['ActAlreadyFinish']
        return

    if act_helper.check_award_repeat(act_id, act_data, index):
        context.result['mc'] = MsgCode['ActAlreadyAwarded']
        return

    cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
    main_cfg = game_config.activity_cfg.get(act_id)

    if (not main_cfg) or (not cfg):
        context.result['mc'] = MsgCode['ActAwardFail']
        return

    if main_cfg["type"] in act_helper.SPECIAL_ACTS1:
        func = getattr(act_helper, 'act_checker_%s' % main_cfg["type"])
        # 等级基金未激活
        if main_cfg["type"] in act_helper.LEVEL_FUND_ACT and act_data["data"] != LEVEL_FUND_STATE_ACTIVE:
            context.result['mc'] = MsgCode['ActAwardNotSatisfied']
            return

        if not func(ki_user, cfg):
            context.result['mc'] = MsgCode['ActAwardNotSatisfied']
            return
    else:
        if not act_helper.check_award_can_get(act_id, act_data, index):
            context.result['mc'] = MsgCode['ActAwardNotSatisfied']
            return

        if main_cfg["type"] in act_helper.PRIVATE_SALE_ACT:
            # 每周特卖活动,检测 物品存量是否足够 元宝是否足够
            saled_num = act_service.get_private_sale_num(ki_user.sid, act_id, index)
            if saled_num >= cfg["cond_c"]:
                context.result['mc'] = MsgCode['ActAwardEmpty']
                return

            if not user_logic.check_game_values1(ki_user, diamond=cfg["cond_e"]):
                context.result['mc'] = MsgCode['DiamondNotEnough']
                return

            if ki_user.game_info.vip_level < cfg["cond_b"]:
                context.result['mc'] = MsgCode['UserVipTooLow']
                return

            act_service.update_private_sale_num(ki_user.sid, act_id, index)
            user_logic.consume_game_values1(ki_user, diamond=cfg["cond_e"]) # 扣款

    pack_logic.add_items(ki_user, cfg["awards"])
    old_data = copy.deepcopy(act_data)
    new_data = act_helper.update_after_award(act_id, old_data, index)
    ki_user.activity.update_after_award(act_id, new_data)

    # 处理相关任务
    if main_cfg["union"]:
        act_helper.update_union_acts(ki_user, main_cfg["union"], 1)

    context.result['mc'] = MsgCode['ActAwardSucc']
Beispiel #39
0
def buy(context):
    """购买某个商店的某个物品

    Args:
        mtype 商品类别  1-杂货 2-荣誉 3-试炼 4-社团 5-碎片兑换

    Returns:

    Raises:

    """
    ki_user = context.user

    mtype = context.get_parameter("mtype")
    item_tag = context.get_parameter("item_tag")

    if mtype not in [MALL_MISC, MALL_HONOR, MALL_TRIAL, MALL_GROUP, MALL_CHIP, MALL_MYSTERY]:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    info = None
    if mtype == MALL_MISC:
        info = ki_user.mall.misc
    elif mtype == MALL_HONOR:
        info = ki_user.mall.honor
    elif mtype == MALL_TRIAL:
        info = ki_user.mall.trial
    elif mtype == MALL_GROUP:
        info = ki_user.mall.group
    elif mtype == MALL_MYSTERY:
        info = ki_user.mall.mystery
        # 神秘商店只能存在一个小时
        if int(time.time()) - info["last_refresh"] >= 3600:
            context.result['mc'] = MsgCode['MallMysteryExpired']
            return
    else:
        pass

    cfg = None
    if mtype in range(1,6):
        if item_tag not in info["items"]:
            context.result['mc'] = MsgCode['ParamIllegal']
            return

        if item_tag in info["bought"]:
            context.result['mc'] = MsgCode['MallItemSaleOut']
            return

        cfg = game_config.mall_tmp_cfg.get(item_tag, {})
    else:
        cfg = game_config.mall_shop_cfg.get(item_tag, {})

    if not cfg:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    if not pack_logic.check_items_enough(ki_user, cfg["consume"]):
        consume_type = cfg["consume"].keys()[0]
        if consume_type == 2:
            context.result['mc'] = MsgCode['DiamondNotEnough']
        else:
            context.result['mc'] = MsgCode['GoldNotEnough']

        return

    pack_logic.remove_items(ki_user, cfg["consume"])
    pack_logic.add_items(ki_user, cfg["item"])   # 加抽到的物品

    if mtype in range(1,6):
        info["bought"].append(item_tag)
        ki_user.mall.put()

    context.result["mc"] = MsgCode["MallBuySucc"]
Beispiel #40
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']
Beispiel #41
0
def game_tiger(context):
    """【公会游戏之老虎机】

    Args:
        type 操作类型 1-投掷 2-改投 3-领取

    Returns:

    """
    ki_user = context.user

    action_type = context.get_parameter("type")

    if action_type not in [1,2,3]:
        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(1, ki_user.group.donate["tiger_exp1"])
        if group_daily_data["tiger_time1"] >= max_times:
            context.result['mc'] = MsgCode['GroupGameTigerTimesUseUp']
            return

        # 如果之前的还没领取,不能直接参与
        if ki_user.group.game_data["tiger_points"] != -1:
            context.result['mc'] = MsgCode['GroupGameTigerAlreayIn']
            return

        point = random_tiger_point(0)
        ki_user.group.tiger_update(point, 0)

        data["point"] = point

    elif action_type == 2:
        # 都还没投掷,改个毛线
        if ki_user.group.game_data["tiger_points"] == -1:
            context.result['mc'] = MsgCode['GroupGameTigerNotIn']
            return

        # 都已经满了 改个毛线
        if ki_user.group.game_data["tiger_points"] == 5:
            context.result['mc'] = MsgCode['GroupGameTigerFull']
            return

        max_free_times = get_game_max_times(2, ki_user.group.donate["tiger_exp2"])
        # 免费的已经用完,可以花钻石改投
        need_diamond = 0
        if group_daily_data["tiger_time2"] >= max_free_times:
            # 检测花费
            not_free_times = ki_user.group.game_data["tiger_change_times"]+1
            need_diamond = game_config.user_buy_refresh_cfg[not_free_times]["group_game_tiger_refresh"]
            if not user_logic.check_game_values1(ki_user, diamond=need_diamond):
                context.result['mc'] = MsgCode['DiamondNotEnough']
                return

        point = random_tiger_point(ki_user.group.game_data["tiger_points"])
        if need_diamond:
            user_logic.consume_game_values1(ki_user, diamond=need_diamond)
            ki_user.group.tiger_update(point, ki_user.group.game_data["tiger_change_times"]+1)  # 花了钱的
        else:
            ki_user.group.tiger_update(point, ki_user.group.game_data["tiger_change_times"])
            ki_user.daily_info.group_update("tiger_time2")

        data["point"] = point

    elif action_type == 3:
        point = ki_user.group.game_data["tiger_points"]
        if point == -1:
            context.result['mc'] = MsgCode['GroupGameTigerNotIn']
            return

        awards = game_config.group_game_tiger_awards_cfg[point]
        pack_logic.add_items(ki_user, awards)
        ki_user.group.tiger_update(-1, 0)
        ki_user.daily_info.group_update("tiger_time1")

        # 进入排行榜
        GroupService.update_game_tiger_rank(ki_user.sid, ki_user.uid, ki_user.group.group_id, point)

        if point == 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['GroupGameTigerSucc']
    context.result['data'] = data
Beispiel #42
0
def debug_handle_add_items(user, items):
    """
    """
    items = eval(items.replace(' ', ''))
    package_logic.add_items(user, items)
Beispiel #43
0
                    trigger = {'uid': user.uid, 'name': user.name}
                    data = {'hero_id': hid, 'star': star, 'quality': 0}
                    NoticeService.broadcast(user.sid, 11, trigger, data)
                except Exception,e:
                    raise e
                    logging.error("获得炫耀时发生错误")

        user.hero.put()
        user.equip.put()
        user.skill.put()

        # 更新机甲拥有数量排行
        rank_service.update_rank(user.sid, rank_service.RANK_HERO_COUNT, user.uid, len(user.hero.heros))

    if _add_chips:
        pack_logic.add_items(user, _add_chips)

def hero_add_exp(user, heros, exp):
    """机甲通过副本获得经验调用方法

    Args:
        heros  机甲ID列表
        exp  获得经验值
    """
    for hero_id in heros:
        hero = user.hero.get_by_hero_id(hero_id)

        after_exp = hero["exp"] + exp
        after_level = common_helper.get_level_by_exp(game_config.hero_exp_level_cfg, after_exp)

        user.hero.update_exp_level(hero_id, after_exp, min(user.game_info.role_level, after_level), False)
Beispiel #44
0
def feed(context):
    """喂食增加好感度

    Args:
        hero_id 姬甲ID
        items 物品列表 {item_id: item_num, }
    """
    ki_user = context.user

    hero_id = context.get_parameter("hero_id")
    items = context.get_parameter("items", "{}")

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

        for v in items.values():
            if v <= 0:
                raise e
    except:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    hero = ki_user.hero.get_by_hero_id(hero_id)
    if not hero:
        context.result['mc'] = MsgCode['HeroNotExist']
        return

    hero_cfg = game_config.hero_base_cfg.get(hero_id)
    fav_cfg = game_config.favor_cfg.get(hero_cfg["favor_type"])

    for item_id in items:
        if item_id not in fav_cfg["items"]:
            context.result['mc'] = MsgCode['HeroFoodTypeError']
            return

    total_favor = 0
    for item_id, num in items.items():
        item_cfg = game_config.item_cfg.get(item_id)
        if not item_cfg["effect_value"]:
            context.result['mc'] = MsgCode['ParamIllegal']
            return
        else:
            total_favor += item_cfg["effect_value"] * num

    after_favor = hero["favor"] + total_favor
    if after_favor > max(game_config.favor_level_cfg.iterkeys()):
        context.result['mc'] = MsgCode['HeroFavorAlreadyMax']
        return

    if not total_favor:
        context.result['mc'] = MsgCode['InvalidOperation']
        return

    cfg_key = max([exp for exp in game_config.favor_level_cfg if exp <= hero["favor"]])
    pre_favor_title = game_config.favor_level_cfg[cfg_key].get("title_id")

    cfg_key1 = max([exp for exp in game_config.favor_level_cfg if exp <= after_favor])
    post_favor_title = game_config.favor_level_cfg[cfg_key1].get("title_id")

    if post_favor_title > pre_favor_title:
        add_awards = game_config.favor_title_cfg[post_favor_title]["awards"]
        pack_logic.add_items(ki_user, add_awards)

    pack_logic.remove_items(ki_user, items) # 扣除物品
    ki_user.hero.add_favor(hero_id, total_favor) # 添加好感度

    context.result['mc'] = MsgCode['HeroFeedSucc']
Beispiel #45
0
def pick(context):
    """玩家抽卡

    背包是否已满 -》今日免费抽取次数是否用完 -》cd是否冷却 -》
    钱够不够 -》 抽卡 -》 抽到的卡片是否已拥有 -》加物品 -》 扣除消耗 -》 更新数据
    -》 返回抽到的物品

    Args:
        ptype 抽奖类型  1-金币单次 2-金币连抽 3-钻石单次 4-钻石连抽

    Returns:
        {"heros":[hero_id, ], "items": {item_id: item_num, }}  获得物品

    Raises:
        MsgCode['ParamIllegal']
        MsgCode['PackageIsFull']
        MsgCode['GoldNotEnough']
        MsgCode['DiamondNotEnough']
    """
    ki_user = context.user

    ptype = context.get_parameter("ptype")
    if ptype not in [1,2,3,4]:
        context.result['mc'] = MsgCode['ParamIllegal']
        return

    cur_package_len = len(ki_user.package.items)
    if cur_package_len >= pack_logic.PACKAGE_MAX_SLOTS:
        context.result['mc'] = MsgCode['PackageIsFull']
        return

    hero_daily_info = ki_user.daily_info.hero_pick_info
    pick_info = ki_user.hero.pick_info

    cfg = game_config.hero_pick_cfg[ptype]

    now = int(time.time())
    is_free = False

    if ptype == GOLD_ONE and \
       hero_daily_info["gold"] < cfg["limit_times"] and \
       now > pick_info["gold_cd"] + cfg["cd"]:
       is_free = True

    # if ptype == DIAMOND_ONE and \
    #    hero_daily_info["diamond"] < cfg["limit_times"] and \
    #    now > pick_info["diamond_cd"] + cfg["cd"]:
    if ptype == DIAMOND_ONE and hero_daily_info["diamond"]:
       is_free = True

    if not is_free and not pack_logic.check_items_enough(ki_user, cfg["consume"]):
        context.result['mc'] = MsgCode['GoldNotEnough'] if ptype in [GOLD_ONE, GOLD_TEN] else MsgCode['DiamondNotEnough']
        return

    # 十连抽 or 单次
    loop_index = 0 if ptype in [GOLD_ONE, DIAMOND_ONE] else 9

    picked_items = {}
    picked_items["heros"] = []
    picked_items["items"] = []

    while loop_index >= 0:
        rand_type = hero_helper.get_rand_type(is_free, ptype, pick_info, loop_index)
        rand_lib = hero_helper.get_pick_rand_lib(rand_type)

        # 随机出获得的物品
        target = random.choice(rand_lib["lib"])
        target_type = rand_lib["lib_type"]

        if target_type == PICK_ITEM_HERO:
            picked_items["heros"].append(target)
        else:
            picked_items["items"].append(target)

        loop_index -= 1

    # 加物品&扣除消耗品
    if not is_free:
        pack_logic.remove_items(ki_user, cfg["consume"])

    add_heros(ki_user, picked_items["heros"])  # 加抽到的机甲卡牌

    srv_add_items = copy.copy(picked_items["items"])
    srv_add_items.append(cfg["goods"])
    pack_logic.add_items(ki_user, common_helper.handle_pack_items(srv_add_items))   # 加抽到的物品

    # 更新数据
    if is_free and ptype == GOLD_ONE:
        ki_user.daily_info.hero_pick_info["gold"] += 1
        ki_user.daily_info.put()

        ki_user.hero.pick_info["gold_cd"] = now
        ki_user.hero.put()

    elif is_free and ptype == DIAMOND_ONE:
        ki_user.daily_info.hero_pick_info["diamond"] = 0
        ki_user.daily_info.put()

        ki_user.hero.pick_info["diamond_pick_times"] += 1
        ki_user.hero.put()

    elif not is_free and ptype == DIAMOND_ONE:
        ki_user.hero.pick_info["diamond_pick_times"] += 1
        ki_user.hero.put()

    elif ptype == DIAMOND_TEN:
        ki_user.hero.pick_info["diamond_ten_times"] += 1
        ki_user.hero.put()

    else:
        pass

    # 整理抽奖所得物品
    # picked_items["items"] = common_helper.handle_pack_items(picked_items["items"])

    # 更新运维活动数据
    try:
        if ptype == DIAMOND_ONE:
            act_helper.update_after_diamond_pick_hero(ki_user, 1)
        elif ptype == DIAMOND_TEN:
            act_helper.update_after_diamond_pick_hero(ki_user, 10)
        else:
            pass
    except:
        logging.error("【钻石抽取姬甲达到指定数量】活动更新失败")

    context.result["data"] = picked_items
Beispiel #46
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