def get_player_entity(player, entity_type, player_entity_id): func = get_player_entity_get_func_tbl(entity_type) data = func(player.pk, player_entity_id) if data is None: entity = None # ブラウザバック等の対策 elif entity_type == ENTITY_TYPE_ITEM: entity = get_item(data.item_id) elif entity_type == ENTITY_TYPE_CARD: entity = get_card(data.card_id) elif entity_type == ENTITY_TYPE_TREASURE: entity = get_treasure(data.treasure_id) else: entity = None return data, entity
def equipDecompose(request, response): """ 装备分解 """ playerequip_ids = getattr(request.logic_request, "playerEquipIds", []) player = request.player rewards = [] refine_item_id = Static.ITEM_REFINE_ID for playerequip_id in playerequip_ids: playerequip = player.equips.get(playerequip_id) if not playerequip: raise ErrorException( player, u"equipDecompose:playerequip_id(%s) is not existed" % playerequip_id) if not playerequip.can_decompose: player.update_equip(playerequip) AlertHandler( player, response, AlertID.ALERT_EQUIP_CAN_NOT_DECOMPOSE, u"equipDecompose: playerequip_id(%s) can not decompose" % (playerequip_id)) return response refinexp = playerequip.equip.decomposeRefinePoint for i in range(0, playerequip.refineLevel): equiprefine = get_equiprefine(playerequip.equip.quality, i) refinexp += equiprefine.refineXp info = u"装备分解:%s:%s" % (playerequip_id, playerequip.equip_id) refinepoint = get_item(refine_item_id).number number = refinexp / refinepoint if number > 0: acquire_item(player, refine_item_id, number=number, info=info) rewards.append({"type": refine_item_id, "count": number}) player.delete_equip(playerequip_id, True) ActionLogWriter.equip_delete(player, playerequip.pk, playerequip.equip_id, info) response.logic_response.set("rewards", rewards) return response
def item(self): return get_item(self.item_id)
def artifactMelt(request, response): """ 圣物回炉 """ playerartifact_id = getattr(request.logic_request, "artifactId", 0) player = request.player playerartifact = player.artifacts.get(playerartifact_id) if not playerartifact: raise ErrorException( player, u"artifactMelt:playerartifact_id(%s) is not existed" % playerartifact_id) if not playerartifact.can_melt: AlertHandler( player, response, AlertID.ALERT_ARTIFACT_CAN_NOT_MELT, u"artifactMelt:playerartifact_id(%s) can not melt" % (playerartifact_id)) return response #计算消耗钻石的总量 diamond = playerartifact.artifact.quality * ( playerartifact.level - 1 + playerartifact.refineLevel * 4) if player.yuanbo < diamond: AlertHandler( player, response, AlertID.ALERT_DIAMOND_NOT_ENOUGH, u"arrifactMelt:playerartifact_id(%s) melt costDiamond(%s) > playerYuanbo(%s)" % (playerartifact_id, diamond, player.yuanbo)) return response materialcore = 0 for i in range(0, playerartifact.refineLevel): artifactrefine = get_artifactrefine(playerartifact.artifact.quality, i) materialcore += artifactrefine.refineCost info = u"圣物回炉:%s" % playerartifact.pk rewards = [] item_id = Static.ARTIFACRT_REFINE_LIST[0] item = get_item(item_id) number = materialcore / item.number #精炼石奖励 if number > 0: acquire_item(player, item_id, number=number, info=info) rewards.append({"type": item_id, "count": number}) #板砖奖励 artifacts = Static.ARTIFACT_FRAGMENG_GRAB_LIST[:] artifacts.reverse() # 从最大经验的板砖开始 total_xp = playerartifact.xp for i in range(1, playerartifact.level): total_xp += get_artifactenhance(playerartifact.artifact.quality, i).xp for artifact_id in artifacts: artifact = get_artifact(artifact_id) reward_count, left_xp = divmod(total_xp, artifact.upgradeXp) left_xp = total_xp % artifact.upgradeXp if reward_count > 0: acquire_artifact(player, artifact_id, info=info) rewards.append({"type": artifact_id, "count": reward_count}) if left_xp == 0: break total_xp = left_xp player.sub_yuanbo(diamond, info) playerartifact.melt() ActionLogWriter.artifact_melt(player, playerartifact, info) #装备精炼大师&强化大师检查 if playerartifact.playerhero_id > 0: playerhero = player.heroes.get(playerartifact.playerhero_id) # 之所以不用or将两个表达式相连是因为每个表达式里面有对应的操作,如果满足了第一个条件那么第二个就不会执行。 is_refine = playerhero.check_artifact_refinemaster() is_enhance = playerhero.check_artifact_enhancemaster() if is_refine or is_enhance: player.update_hero(playerhero, True) player.update_artifact(playerartifact, True) response.logic_response.set("rewards", rewards) return response
def item(self): from module.item.api import get_item return get_item(self.type)
def equipMelt(request, response): """ 装备回炉 """ playerequip_id = getattr(request.logic_request, "playerEquipId", 0) player = request.player playerequip = player.equips.get(playerequip_id) if not playerequip: raise ErrorException( player, u"equipMelt:playerequip_id(%s) is not existed" % playerequip_id) if not playerequip.can_melt: player.update_equip(playerequip) AlertHandler( player, response, AlertID.ALERT_EQUIP_CAN_NOT_MELT, u"equipMelt:playerequip_id(%s) can not melt" % (playerequip_id)) return response #根据 装备分类,装备等级,精炼等级 计算回炉消耗的钻石。 # diamond = Static.EQUIP_QUALITY_RATIO * playerequip.equip.quality + Static.EQUIP_LEVEL_RATIO * playerequip.level + Static.EQUIP_REFINELEVEL_RATIO * playerequip.refineLevel diamond = playerequip.equip.quality * (playerequip.level + playerequip.refineLevel * 4) / 5 if player.yuanbo < diamond: AlertHandler( player, response, AlertID.ALERT_DIAMOND_NOT_ENOUGH, u"equipMelt:playerequip_id(%s) melt costYuanbo(%s) playerYuanbo(%s)" % (playerequip_id, diamond, player.yuanbo)) return response gold = 0 refinexp = 0 for i in range(1, playerequip.level): equipenhance = get_equipenhance(i) gold += equipenhance.gold for i in range(0, playerequip.refineLevel): equiprefine = get_equiprefine(playerequip.equip.quality, i) refinexp += equiprefine.refineXp info = u"装备回炉:%s:%s" % (playerequip_id, playerequip.equip_id) player.sub_yuanbo(diamond, info) playerequip.melt() rewards = [] gold = int(Static.EQUIP_GOLD_RATIO * gold) player.add_gold(gold, info) rewards.append({"type": Static.GOLD_ID, "count": gold}) refine_item_id = Static.ITEM_REFINE_ID refinepoint = get_item(refine_item_id).number number = refinexp / refinepoint if number > 0: acquire_item(player, refine_item_id, number=number, info=info) rewards.append({"type": refine_item_id, "count": number}) #检查装备精炼大师 & 强化大师 if playerequip.playerhero_id > 0: playerhero = player.heroes.get(playerequip.playerhero_id) # 之所以不用or将两个表达式相连是因为每个表达式里面有对应的操作,如果满足了第一个条件那么第二个就不会执行。 check_refine = playerhero.check_equip_refinemaster() check_enhance = playerhero.check_equip_enhancemaster() if check_refine or check_enhance: player.update_hero(playerhero, True) player.update_equip(playerequip, True) response.logic_response.set("rewards", rewards) return response