Example #1
0
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
Example #2
0
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
Example #3
0
 def item(self):
     return get_item(self.item_id)
Example #4
0
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
Example #5
0
 def item(self):
     from module.item.api import get_item
     return get_item(self.type)
Example #6
0
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