def from_resource_to_reward(self, resource): """ 将resource 封装成 reward """ from rewards.models import CommonReward rewards = [] try: rewardGold = CommonReward(type=50000, count=resource["gold"], level=0) rewardWood = CommonReward(type=60000, count=resource["wood"], level=0) rewards.append(rewardGold) rewards.append(rewardWood) except: return rewards return rewards
def instanceBoxOpen(request, response): ''' 打开章节宝箱 ''' rewards = [] player = request.player instance_id = getattr(request.logic_request, "instanceId", 0) chestLevel = getattr(request.logic_request, "level", 0) category = getattr(request.logic_request, "category", 0) if category == 2: isElite = True star_data = Static.ELITE_STAR_CHEST_OPEN_COUNTS else: isElite = False star_data = Static.STAR_CHEST_OPEN_COUNTS playerinstance_star = get_all_player_star_by_instance_id(player, instance_id, isElite) if playerinstance_star < star_data[chestLevel]: AlertHandler(player, response, AlertID.ALERT_INSTANCE_CHEST_CAN_NOT_OPEN, u"instanceBoxOpen:instatnce(%s) playerinstance_star(%s) chestlevel(%s)" % (instance_id, playerinstance_star, star_data[chestLevel])) return response if not player.chestWithDrawn(instance_id, chestLevel, isElite): AlertHandler(player, response, AlertID.ALERT_INSTANCE_CHEST_ALREADY_OPEN, u"instanceBoxOpen:instatnce(%s) chest is opened" % (instance_id)) return response rewards = get_chest_rewards(player, instance_id, chestLevel, isElite) for reward in rewards: rewardTemp = CommonReward(reward["type"], reward["count"], 0) reward_send(player, rewardTemp, info=u"打开章节宝箱:%s" % instance_id) response.common_response.player.set("starBox", {"history" : player.starChest}) response.common_response.player.set("eliteStarBox", {"history" : player.eliteStarChest}) response.logic_response.set("rewards", rewards) return response
def offlineRewardGet(request, response): player = request.player if not player.offlinebonus: return response rewards = player.offlinebonus view_rewards = [] info = u"离线奖励" for reward in rewards: tmp_reward = CommonReward(reward["type"], reward["count"], 0) reward_send(player, tmp_reward, info=info) view_rewards.append(tmp_reward.to_dict()) player.offlinebonus = [] player.set_update("offlinebonus") response.logic_response.set("rewards", view_rewards) response.common_response.player.set("offlinebonus", player.offlinebonus) return response
def fight(self, star, isWin): """ 战斗结算 """ # 普通副本 data = {"star": 0} rewards = [] hero_levelup_ids = [] if isWin: data["star"] = star # 这都是继承自父类的方法 golds = int(self.instancelevel.golds[0]) woods = int(self.instancelevel.woods[0]) hero_exp = int(self.instancelevel.heroExp[0]) exp = self.instancelevel.playerExp # 随机的奖励在这里操作 # 这个rewards 是具体要发到玩家身上的奖励 rewards = self.make_rewards() if golds: rewards.append({"type": Static.GOLD_ID, "count": golds}) if exp: rewards.append({"type": Static.XP_ID, "count": exp}) if woods: rewards.append({"type": Static.WOOD_ID, "count": woods}) # 根据上面的数据直接拿到奖励,然后发放 for rewardDict in rewards: rewardTemp = CommonReward(rewardDict["type"], rewardDict["count"], 0) reward_send(self.player, rewardTemp, info=u"副本结算:%s" % self.level_id) for i in range(0, len(self.player.heroLayout)): playerhero = self.player.heroes.get(self.player.heroLayout[i]) if playerhero.add_xp(hero_exp, self.player): hero_levelup_ids.append(playerhero.id) self.player.update_hero(playerhero, True) self.add_count() self.success(star) data["rewards"] = rewards data["heroLevelUp"] = hero_levelup_ids return data
def get_commonreward(rewardIdStr): pattern = re.compile(r"t(\d+)v?(\d*)c?(\d*)") match = pattern.match(rewardIdStr) category = 0 level = 0 count = 0 if match: category, level, count = match.groups() category = int(category) if category else 0 level = int(level) if level else 0 count = int(count) if count else 1 reward = CommonReward(category, count, level) return reward
def fight(self, star, isWin): """ 战斗结算 """ # 精英副本 data = {} rewards = [] hero_levelup_ids = [] data["star"] = 0 if isWin: self.add_count() self.success(star) golds = self.eliteInstancelevel.eliteGold woods = self.eliteInstancelevel.elitewoods[0] hero_exp = self.eliteInstancelevel.eliteHeroExp exp = self.eliteInstancelevel.elitePlayerExp rewards = self.make_rewards() if golds: rewards.append({"type": Static.GOLD_ID, "count": golds}) if woods: rewards.append({"type": Static.WOOD_ID, "count": woods}) if exp: rewards.append({"type": Static.XP_ID, "count": exp}) for rewardDict in rewards: rewardTemp = CommonReward(rewardDict["type"], rewardDict["count"], 0) reward_send(self.player, rewardTemp, info=u"精英副本结算:%s" % self.level_id) for i in range(0, len(self.player.heroLayout)): playerhero = self.player.heroes.get(self.player.heroLayout[i]) if playerhero.add_xp(hero_exp, self.player): hero_levelup_ids.append(playerhero.id) self.player.update_hero(playerhero, True) data["rewards"] = rewards data["heroLevelUp"] = hero_levelup_ids return data
def guild_siegebattle_reward(playerId, rewards): """ 公会团战个人奖励 """ from module.player.api import get_player player = get_player(playerId) config = get_guildsiegeconfiginfo_by_playerid(playerId) if not player or not config: return [] #个人战斗力 power = config.allPower #总战斗力 powerRank = get_guildsiege_allpower(player.guildId) personal_reward = [] for reward in rewards: count = round( power/float(powerRank),2) * reward.count _reward = CommonReward(reward.type, count, reward.level) personal_reward.append(_reward) return personal_reward
def mailRewardsGet(request, response): """ 邮件领取奖励 """ player = request.player mail_id = getattr(request.logic_request, "mailId", 0) status = 2 #0领取成功 1已经领取过,不能重复领取 2无法领取 mail = get_mail(mail_id) if mail and mail.is_system: if not mail.is_accept: # status = 1 #else: for reward in mail.attachments: tmp_reward = CommonReward(reward["type"], reward["count"], 0) reward_send(player, tmp_reward, info=mail.title) status = 0 player.delete_mail(mail.pk) mail.delete() response.logic_response.set("status", status) return response
def raceInstanceStart(request, response): """ 活动副本结算 """ player = request.player raidinstance_id = getattr(request.logic_request, "raidId", 0) level_id = getattr(request.logic_request, "instanceId", 0) waveCount = getattr(request.logic_request, "waveCount", 0) star = getattr(request.logic_request, "star", 0) isWin = getattr(request.logic_request, "isWin", False) heroLayoutData = getattr(request.logic_request, "heroLayoutData", []) percentage = getattr(request.logic_request, "percentage", 0.0) summary = getattr(request.logic_request, "summary", {}) if percentage > 1: percentage = 0 # 活动副本章节 raidinstance = get_raidinstance(raidinstance_id) if not raidinstance: raise ErrorException(player, u"raceInstanceStart:raid instance id error (%s)" % raidinstance_id) if level_id not in raidinstance.raidLevel_ids: raise ErrorException(player, u"raceInstanceStart:raid instance level id error (%s)" % level_id) raidlevel = get_raidlevel(level_id) if raidlevel.minUserLevel > player.level: AlertHandler(player, response, AlertID.ALERT_LEVEL_SHORTAGE, u"raceInstanceStart:instance(%s) openlevel(%s) playerlevel(%s)" % (level_id, raidlevel.minUserLevel, player.level)) return response #次数check _, playerraidinstance = player.raidinstances.get_or_create(raidinstance_id) vip = get_vip(player.vip_level) # 爬塔没有次数限制 if playerraidinstance.succeedCount >= vip.titanCount and not raidinstance.category == 6: AlertHandler(player, response, AlertID.ALERT_INSTANCE_FIGHT_COUNT_EXCEED_MAX, u"raceInstanceStart:instance(%s) level_id(%s) fight number(%s) exceed maxCount(%s)" % (raidinstance.id, level_id, playerraidinstance.succeedCount, vip.titanCount)) return response player.update_hero_layout(heroLayoutData) data = playerraidinstance.fight(raidlevel, isWin, percentage) player.update_raidinstance(playerraidinstance, True) if isWin: # raidinstance.powerCost 消耗的体力 现改为消耗耐力 player.sub_stamina(raidinstance.powerCost) #if raidinstance.category == 6: # if level_id > player.lastRaidId: # # 记录最新的塔id # player.lastRaidId = level_id # player.set_update("lastRaidId") # # 记录当前的波数 # player.dailyWaveCount = waveCount # player.set_update("dailyWaveCount") # # 副本完成状态 # # 记录当前一共有的星星的数 # player.towerStar += star # player.set_update("towerStar") # # 顺序记录副本的通关星星状态 # # todo 这里没想好怎么做。暂时先屏蔽了 # # player.towerSweep.append(level_id) # # player.towerSweep.append(star) # player.set_update("towerSweep") # # -1 继续进副本战斗 0去开箱领奖 1-5领了几层箱子 # if waveCount % 3 == 0: # # 记录当前一层完成状态更改 # player.towerStatus = 0 # player.set_update("towerStatus") # player.choiceBuffs() # response.logic_response.set("buffs", player.buyBuffsList) # player.seven_days_task_going(Static.SEVEN_TASK_CATEGORY_RACE_INSTANCE, number=player.dailyWaveCount, is_incr=False, with_top=True, is_series=True) #else: player.dailytask_going(Static.DAILYTASK_CATEGORY_RACE_INSTANCE, number=1, is_incr=True, is_series=True) #if raidinstance.category == 6: # player.dailytask_going(Static.DAILYTASK_CATEGORY_EXPEDITION_SUCCESS, number=1, is_incr=True, is_series=True) rewards = data["rewards"] heroLevelUp = [] heroLevelUp = data["heroLevelUp"] number = data["number"] for rewardDict in rewards: rewardTemp = CommonReward(rewardDict["type"], rewardDict["count"], 0) rewardDict["count"] *= number reward_send(player, rewardTemp, info=u"活动副本结算:%s:%s" % (raidinstance_id,level_id), number=number) response.logic_response.set("rewards", rewards) response.logic_response.set("heroLeveleUp",heroLevelUp) response.logic_response.set("summary",summary) #response.common_response.player.set("towerStar", player.towerStar) #response.common_response.player.set("towerStatus", player.towerStatus) #response.common_response.player.set("buyBuffsList", player.buyBuffsList) response.common_response.player.set("soldiers", player.armies.to_dict()) response.common_response.player.set("populationCost", player.populationCost) response.common_response.player.set("raidInstance", {"instances":get_player_open_raidinstance(player)}) return response
def instanceSweep(request, response): ''' 扫荡 ''' level_id = getattr(request.logic_request, "instanceId", 0) count = getattr(request.logic_request, "count", 0) category = getattr(request.logic_request, "category", 0) player = request.player if category == 2: isElite = True instancelevel = get_eliteinstancelevel(level_id) playerinstancelevel = player.eliteinstancelevels.get(level_id) else: isElite = False instancelevel = get_instancelevel(level_id) playerinstancelevel = player.instancelevels.get(level_id) #副本没有开启 if not playerinstancelevel: AlertHandler(player, response, AlertID.ALERT_INSTANCE_NOT_OPEN, u"instanceSweep:instance(%s) is not open" % level_id) return response if not playerinstancelevel.can_sweep(): AlertHandler(player, response, AlertID.ALERT_INSTANCE_CAN_NOT_SWEEP, u"instanceSweep:instance(%s) can not sweep" % level_id) return response # todo 10级以前不可以扫荡 if player.level < Static.SWEEP_OPEN_LEVEL: return response #扫荡卷判断 #Static.ITEM_TYPE_SWEEP 扫荡卷id item_sweep = player.items.get(Static.ITEM_SWEEP_ID) if item_sweep and item_sweep.count > 0: use_diamond = False else: use_diamond = True if player.vip_level < Static.SWEEP_VIP_LEVEL and use_diamond: AlertHandler(player, response, AlertID.ALERT_INSTANCE_SWEEP_VIP_ERROR, u"instanceSweep:vip(%s) error" % player.vip_level) return response #次数判断 if isElite: maxCount = instancelevel.eliteMaxPlayCount powerCost = instancelevel.elitePowerCost else: maxCount = instancelevel.maxPlayCount powerCost = instancelevel.powerCost if count > maxCount - playerinstancelevel.succeedCount: count = maxCount - playerinstancelevel.succeedCount if count == 0: AlertHandler(player, response, AlertID.ALERT_INSTANCE_FIGHT_COUNT_EXCEED_MAX, u"instanceSweep:instance(%s) fight number(%s) exceed maxCount(%s)" % (level_id, count, maxCount)) return response #体力判断 if count > player.power/powerCost: count = player.power/powerCost if count == 0: AlertHandler(player, response, AlertID.ALERT_POWER_NOT_ENOUGH, u"instanceSweep:instance(%s) power is not enough" % level_id) return response if not use_diamond and not item_sweep.can_sub(count): AlertHandler(player, response, AlertID.ALERT_INSTANCE_ITEM_SWEEP_NOT_ENOUGH, u"instanceSweep:item sweep number (%s) not enough" % (item_sweep.count)) return response if use_diamond: if player.yuanbo < Static.SWEEP_INSTANCE_COST*count: AlertHandler(player, response, AlertID.ALERT_DIAMOND_NOT_ENOUGH, u"instanceSweep:playerDiamond(%s) costDiamond(%s)" % (player.yuanbo, Static.SWEEP_INSTANCE_COST*count)) return response player.sub_yuanbo(Static.SWEEP_INSTANCE_COST*count, info=u"扫荡") else: item_sweep.sub(count , info=u"扫荡:%s:%s" % (level_id, isElite)) rewards_list = playerinstancelevel.sweep(count) for rewards in rewards_list: for rewardDict in rewards: rewardTemp = CommonReward(rewardDict["type"], rewardDict["count"], 0) reward_send(player, rewardTemp, info=u"副本扫荡结算:%s" % level_id) if not isElite: player.sub_power(instancelevel.powerCost * count) player.task_going(Static.TASK_CATEGORY_INSTANCE, number=count, c1=instancelevel.id, is_incr=False, is_series=False) else: player.sub_power(instancelevel.elitePowerCost * count) player.task_going(Static.TASK_CATEGORY_ELIT_INSTANCE, number=count, c1=instancelevel.pk, is_incr=False, is_series=False) player.dailytask_going(Static.DAILYTASK_CATEGORY_ELIT_INSTANCE, number=count, is_incr=True, is_series=True) player.dailytask_going(Static.DAILYTASK_CATEGORY_INSTANCE, number=count, is_incr=True, is_series=True) if isElite: player.update_eliteinstancelevel(playerinstancelevel, True) else: player.update_instancelevel(playerinstancelevel, True) response.logic_response.set("rewards", rewards_list) return response