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']
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']
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']
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']
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
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']
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']
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']
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']
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)
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']
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']
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']
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']
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']
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']
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']
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"]
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']
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}
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']
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
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']
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']
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']
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']
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']
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']
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"]
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"]
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"]
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']
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
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()
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']
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
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
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']
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"]
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']
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
def debug_handle_add_items(user, items): """ """ items = eval(items.replace(' ', '')) package_logic.add_items(user, items)
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)
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']
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
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