Exemplo n.º 1
0
def pvpEnemyData(request, response):
    '''
    敌军 详细数据
    '''
    player = request.player
    target_player_id = getattr(request.logic_request, "userId", 0)
    target_player = get_player(target_player_id, False)
    if not target_player:
        raise ErrorException(
            player,
            u"pvpEnemyData:pvp army layout target player is None:target player id(%s) is not existed"
            % target_player_id)

    all_heros = target_player.layoutSiegeHeroes
    artifacts_view_list = []
    equips_view_list = []
    hero_view_list = []
    for hero in all_heros:
        hero_view_list.append(hero.to_dict())
        all_hero_equips = get_playerheroes_equips(target_player, [hero])
        for equip in all_hero_equips:
            equips_view_list.append(equip.to_dict())
        all_hero_artifacts = get_playerheroes_artifacts(target_player, [hero])
        for artifact in all_hero_artifacts:
            artifacts_view_list.append(artifact.to_dict())
    response.logic_response.set("artifacts", artifacts_view_list)
    response.logic_response.set("equips", equips_view_list)
    response.logic_response.set("heros", hero_view_list)
    response.logic_response.set("user", target_player.userSimple_dict())

    return response
Exemplo n.º 2
0
def siegeBattlePlayerLock(request, response):
    """
    攻城战对手锁定 or 解锁
    """

    player = request.player
    oppId = getattr(request.logic_request, "oppId", 0)
    isLocked = True
    # 检查等级
    if not player.isOpenSiege:
        AlertHandler(
            player, response, AlertID.ALERT_PLAYER_LEVEL_NOT_ENOUGH,
            u"siegeBattlePlayerLock:need level(%s) player level is %s" %
            (Static.SIEGE_LEVEL, player.level))
        return response

    for _index, _opp in enumerate(player.SiegeBattle.opps):
        _player = get_player(_opp["player_id"], False)

        if _opp["player_id"] == oppId:
            player.SiegeBattle.opps[_index]["isLocked"] = not _opp["isLocked"]
            player.SiegeBattle.update()
            isLocked = player.SiegeBattle.opps[_index]["isLocked"]
            break

    response.logic_response.set("isLocked", isLocked)
    response.common_response.player.set("siegeBattle",
                                        player.SiegeBattle.to_dict())
    return response
Exemplo n.º 3
0
def pvpRank(request, response):
    '''
    PVP世界排名
    '''
    player = request.player
    now = datetime.datetime.now()
    week = now.isoweekday()
    hour = now.hour
    #  这个字段表明 是否需要上周的数据
    last_rank = False

    # 如果当前是不允许pvp战斗的时间,取得的数据上周的排行。
    if week == Static.PVP_STOP_WEEK and hour < Static.PVP_STOP_HOUR:
        last_rank = True
        rank_datas = PVPRank.get_last_ranks()
    else:
        rank_datas = PVPRank.get_ranks()
    opp_data = []
    for p_id, p_score in rank_datas:
        if not p_id or p_id == "None":
            continue
        if p_score >= Static.PVP_INIT_SCORE:
            opp_player = get_player(p_id, False)
            if opp_player and opp_player.level >= Static.PVP_LEVEL:
                dicts = opp_player.pvp_view_data(can_fight=True,
                                                 last_rank=last_rank)
                opp_data.append(dicts)

    response.logic_response.set("rankOpps", opp_data)
    return response
Exemplo n.º 4
0
    def to_SimpleDict(self):
        dicts = {}
        from module.player.api import get_player
        members = [get_player(pk, False) for pk in self.membersIds]
        dicts["powerRank"] = reduce(lambda x, y: x + y,
                                    [player.powerRank for player in members])
        dicts["name"] = self.name
        dicts["level"] = self.level
        dicts["icon"] = self.icon
        dicts["limitLevel"] = self.limitLevel
        dicts["powerRank"] = self.powerrank
        dicts["outerAttention"] = self.outerAttention
        dicts["category"] = self.category
        dicts["id"] = self.pk

        chairman = get_player(self.chairmanId, False)
        dicts["members"] = [
            chairman.guild.userGuild_dict(chairman.guild.guildInfo)
        ]  #所有时候只需要公会会长信息
        dicts["memberCount"] = len(self.membersIds)
        dicts["requestMemberIds"] = self.requestMemberIds

        return dicts
Exemplo n.º 5
0
    def run(self):
        ThreadPoolCounter.increase() # スレッドカウンタインクリメント
        
        user_agent = get_random_user_agent(self.random_unique_id)
        opensocial_userid = create_hashed_debug_user_id(user_agent)
#        print opensocial_userid
        player = get_player(opensocial_userid)
        # チュートリアルは強制的に完了
#        if not player.is_end_tutorial():
#            player.end_tutorial()
#            view_url = reverse('mobile_quest_index')
#            request_send(user_agent, self.site_domain, view_url)
    
        request_controller = AppRequestController(user_agent, self.site_domain, player)
        request_controller.random_execute()
        ThreadPoolCounter.decrease() # スレッドカウンタデクリメント
Exemplo n.º 6
0
def guildKickMembers(request, response):
    """
    社团踢人
    """
    player = request.player

    targetPlayerId = getattr(request.logic_request, "targetPlayerId", 0)
    targetPlayer = get_player(targetPlayerId)

    # 不能踢出所选的人因为权限不够
    if player.guild.position >= targetPlayer.guild.position:
        targetPlayer.self_release_lock()
        AlertHandler(
            player, response, AlertID.ALERT_GUILD_LIMIT_CAN_NOT_KICK_MEMBERS,
            u"guildKickMembers your position is %s targert position is %s " %
            (player.guild.position, targetPlayer.guild.position))
        return response

    if player.guildId != targetPlayer.guildId:
        targetPlayer.self_release_lock()
        return response

    player.guild.kick_from_guild(targetPlayer)

    # # 把训练所里的英雄信息更新
    # if targetPlayer.trainingHeroIds:
    #     for hero_id in targetPlayer.trainingHeroIds:
    #         hero = targetPlayer.heroes.get(hero_id)
    #         hero.quiteHeroFromGuild()
    #         targetPlayer.heroes.update(hero, True)

    # # 把自己有关公会的信息更新
    # targetPlayer.quiteGuild()

    # 创建一条日志
    create_loginfo(player.guildId, 2, targetPlayer.name)

    # info = make_guildInfo(new_guild)

    # response.logic_response.set("info", info)

    # response.common_response.player.set("trainingHeroIds", player.trainingHeroIds)
    response.common_response.player.set("guild", player.guild.to_dict())

    return response
Exemplo n.º 7
0
 def get_unFighting_member_info(self):
     from player.api import get_player
     playerInfoDict = {}
     pid_list = self.get_unFighting_member_list()
     for player_id in pid_list:
         feiBook = 0  #未发飞鸽传书
         _player = get_player(player_id, lock=False)
         if str(player_id) not in playerInfoDict:
             if str(player_id) in self.guildInfo.feiBookDict:
                 feiBook = 1
             playerInfoDict[str(player_id)] = {
                 "feiBook": feiBook,
                 "name": _player.name,
                 "level": _player.level,
                 "iconId": _player.iconId
             }
     self.self_release_lock()
     return playerInfoDict
Exemplo n.º 8
0
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
Exemplo n.º 9
0
def displayAppMember(request, response):
    """
    展示申请加入的人员信息
    """
    player = request.player
    guildInfo = player.guild.guildInfo

    membersInfo = []

    # 如果在等待审核期间,发出申请的人已经加入别的社团那么就不展示他的信息。直接删掉
    for _playerId in guildInfo.requestMemberIds:
        _player = get_player(_playerId, False)
        if _player.guildId:
            player.guild.disallow_join_guild(_playerId)  #已经加入其它公会
            #guildInfo.requestMemberIds.remove(_playerId)
        else:
            membersInfo.append(_player.guild.userGuild_dict(guildInfo))

    guildInfo.save()

    response.logic_response.set("members", membersInfo)
    return response
Exemplo n.º 10
0
def guildPositionUp(request, response):
    """
    职位变更
    """
    player = request.player

    category = getattr(request.logic_request, "category", 0)
    targetPlayerId = getattr(request.logic_request, "id", 0)

    targetPlayer = get_player(targetPlayerId)

    if not player.guild.isChairman:
        targetPlayer.self_release_lock()
        AlertHandler(
            player, response,
            AlertID.ALERT_GUILD_LIMIT_NOT_ENOUGH_TO_POSITION_UP,
            u"guildPositionUp your position is %s targert position is %s " %
            (player.guild.posiotn, targetPlayer.guild.position))
        return response

    guildInfo = player.guild.guildInfo

    # 升职。管理员给普通会员升职为副会长
    if category == 1:
        guildLevel = get_guild(guildInfo.level)
        #传职
        if targetPlayer.pk in guildInfo.viChairmanIds:
            player.guild.exchange_position(targetPlayer)
            create_loginfo(player.guildId, 3, player.name)
            create_loginfo(player.guildId, 5, targetPlayer.name)
        #会员变为副会长
        else:
            if guildInfo.viChairmanCount >= guildLevel.viceChairmanCount:
                targetPlayer.self_release_lock()
                guildInfo.self_release_lock()
                AlertHandler(
                    player, response,
                    AlertID.ALERT_GUILD_VICHAIRMAN_COUNT_HAS_TOP,
                    u"guildPositionUp guild is level %s can has %s vichairmans now is %s "
                    % (guildInfo.level, guildLevel.viceChairmanCount,
                       guildInfo.viChairmanCount))
                return response
            player.guild.change_position(targetPlayer,
                                         Static.GUILD_VI_CHAIRMAN_POSITION)
            create_loginfo(player.guildId, 3, targetPlayer.name)

    # 降职
    elif category == 2:
        if not targetPlayer.guild.isViChairman:
            targetPlayer.self_release_lock()
            guildInfo.self_release_lock()
            return response

        player.guild.change_position(targetPlayer,
                                     Static.GUILD_NORMAL_POSITION)
        create_loginfo(player.guildId, 4, targetPlayer.name)

    else:
        targetPlayer.self_release_lock()
        guildInfo.self_release_lock()

    response.common_response.player.set("guild", player.guild.to_dict())

    return response
Exemplo n.º 11
0
 def targetPlayer(self):
     from module.player.api import get_player
     targetPlayer = get_player(self.targetPlayerId, False)
     return targetPlayer
Exemplo n.º 12
0
 def powerRank(self):
     from module.player.api import get_player
     return reduce(
         lambda x, y: x + y,
         [get_player(pk, False).powerRank for pk in self.membersIds])
Exemplo n.º 13
0
def speedUpHero(request, response):
    """
    为社团成员加速
    """
    player = request.player
    targetPlayerId = getattr(request.logic_request, "targetPlayerId", 0)
    category = getattr(request.logic_request, "category", 0)

    # 每人每天的加速和被加速的次数是有限制的
    # if player.speedCount <= 0:
    #     AlertHandler(player, response, AlertID.ALERT_PLAYER_HAS_NO_SPEEDING_COUNT,  u"speedUpHero PLAYER has no speeding count %s" %player.id)
    #     return response

    #每日最多加速5次
    if player.guild.isMaxSpeed:
        response.common_response.player.set("guild", player.guild.to_dict())
        return response

    targetPlayer = None
    if targetPlayerId:
        if targetPlayerId == player.id:
            return response
        targetPlayer = get_player(targetPlayerId)
        if not targetPlayer:
            return response
        #不在公会
        if targetPlayerId not in player.guild.guildInfo.membersIds:
            player.guild.guildInfo.self_release_lock()
            targetPlayer.self_release_lock()
            response.common_response.player.set("guild",
                                                player.guild.to_dict(True))
            return response

        #modify by ljdong 同一个用户可以被多次加速
        #if targetPlayerId in player.guild.speedPlayerIds:
        #response.common_response.player.set("guild", player.guild.to_dict(True))
        #return response

        #每日最多被加速5次
        if targetPlayer.guild.isMaxSpeeded:
            player.guild.guildInfo.self_release_lock()
            targetPlayer.self_release_lock()
            response.common_response.player.set("guild",
                                                player.guild.to_dict(True))
            return response
    else:
        memberIds = copy.copy(player.guild.guildInfo.membersIds)
        random.shuffle(memberIds)
        for memberId in memberIds:
            #modify by ljdong
            #if memberId in player.guild.speedPlayerIds:
            #continue
            if memberId == player.id:
                continue
            targetPlayer = get_player(memberId)
            #每日最多被加速5次
            if targetPlayer.guild.isMaxSpeeded:
                targetPlayer.self_release_lock()
                continue

            targetPlayerId = memberId
            break

        if not targetPlayerId:
            return response

    guildLevel = get_guild(player.guild.guildInfo.level)

    player.guild.speed(targetPlayer)

    contents = []
    contents.append({
        "content":
        "fytext_301171",
        "paramList": [player.guild.guildInfo.name, targetPlayer.name],
    })

    send_system_mail(player,
                     None,
                     "fytext_301173",
                     contents=contents,
                     rewards=guildLevel.speedRewards)
    contents = []
    contents.append({
        "content": "fytext_301172",
        "paramList": [player.guild.guildInfo.name, player.name],
    })
    send_system_mail(targetPlayer,
                     None,
                     "fytext_301173",
                     contents=contents,
                     rewards=guildLevel.speedRewards)
    response.common_response.player.set("guild", player.guild.to_dict())

    return response
Exemplo n.º 14
0
def _siegeBattleResult(request, response):
    """
        攻城战结算
    """
    player = request.player
    isWin = getattr(request.logic_request, "isWin", False)
    soldiers = getattr(request.logic_request, "soldiers", [])
    targetId = getattr(request.logic_request, "oppId", False)

    if not player.isOpenSiege:
        AlertHandler(
            player, response, AlertID.ALERT_LEVEL_SHORTAGE,
            u"_siegeBattleResult:playerLevel(%s) startLevel(%s)" %
            (player.level, Static.SIEGE_LEVEL))
        return response
    # 目标玩家
    if int(targetId) != int(player.SiegeBattle.oppId):
        # 检验目标
        raise ErrorException(
            player,
            u"siegeBattleResult: SiegeBattle target player is not correct:target player id(%s) is not existed"
            % targetId)
    # 记录本次对战结果
    player.SiegeBattle.fightEnd(isWin)
    target_player = get_player(targetId)
    print '目标ID', targetId
    resource = {}
    if isWin:
        # 掠夺的资源
        if targetId > 0:
            # 真人
            resource = target_player.SiegeBattle.get_resources_settlement()
            target_player.siege_be_ended()  # 清空攻击时间
            # 隐藏分变化
            player.add_liveness(18)
            target_player.sub_liveness(15)
            # 防守失败者有3小时的受保护时间
            print '设置保护时间3小时'
            target_player.set_lock_time()
        else:
            # 机器人
            resource = get_robot_resource(targetId)
            player.add_liveness(12)
        player.SiegeBattle.add_resource(resource)

    else:
        # 隐藏分变化
        if targetId > 0:
            player.add_liveness(6)
            target_player.sub_liveness(5)
            target_player.siege_be_ended()  # 清空攻击时间
        else:
            player.add_liveness(4)

    player.cancel_protect_time()
    # 将资源转化成奖励
    rewards = player.SiegeBattle.from_resource_to_reward(resource)
    send_battle_record(player=player,
                       targetPlayer=target_player,
                       isWin=isWin,
                       category=2,
                       playerHeroes=player.layoutSiegeHeroSimple_dict(),
                       targetHeroes=target_player.layoutSiegeHeroSimple_dict(),
                       playerWallSoldiers=soldiers,
                       targetWallSoldiers=target_player.siege_wall_soldiers(),
                       resource=resource)

    if target_player.id > 0:
        send_battle_record(
            player=target_player,
            targetPlayer=player,
            isWin=not isWin,
            category=2,
            playerHeroes=target_player.layoutSiegeHeroSimple_dict(),
            targetHeroes=player.layoutSiegeHeroSimple_dict(),
            playerWallSoldiers=target_player.siege_wall_soldiers(),
            targetWallSoldiers=soldiers,
            resource=resource)
    player.dailytask_going(Static.DAILYTASK_CATEGORY_SIEGE_BATTLE,
                           number=1,
                           is_incr=True,
                           is_series=True)
    player.SiegeBattle.update()
    response.logic_response.set("rewards",
                                [reward.to_dict() for reward in rewards])
    response.common_response.player.set("siegeBattle",
                                        player.SiegeBattle.to_dict())
    return response
Exemplo n.º 15
0
    def to_dict(self, is_all=False, is_root=False):
        dicts = super(SysGuildInfo, self).to_dict(is_all)
        from module.player.api import get_player

        if is_all:
            dicts["idStr"] = self.idStr

        today = datetime.datetime.now().date()
        if self.contributeAt.date() != today:
            dicts["dailyXp"] = 0

        if not is_root and (is_all or
                            ("membersIds" in self.mKeys or "viChairmanIds"
                             in self.mKeys or "chairmanId" in self.mKeys)):
            members = [get_player(pk, False) for pk in self.membersIds]
            dicts["powerRank"] = reduce(
                lambda x, y: x + y, [_player.powerRank for _player in members])
            dicts["members"] = [
                _player.guild.userGuild_dict(self) for _player in members
            ]
            if len(dicts["mKeys"]) > 0:
                dicts["mKeys"].append("powerRank")
                dicts["mKeys"].append("members")
            self.powerrank = dicts["powerRank"]
            self.save()

        #必须放在最后处理
        del_keys = ["attentionV", "membersIds", "contributeAt"]
        for del_key in del_keys:
            if del_key in dicts:
                del dicts[del_key]

            if del_key in dicts["mKeys"]:
                dicts["mKeys"].remove(del_key)

        now = int(time.time())
        if "fire1" in dicts:
            if dicts["fire1"]["status"] == 2:
                dicts["fire1"]["timeLeft"] = dicts["fire1"][
                    "fireAt"] + 3600 * dicts["fire1"]["fireHour"] + 1
            if dicts["fire1"]["status"] == 1:
                dicts["fire1"]["timeLeft"] = dicts["fire1"]["fireHour"]

            del dicts["fire1"]["fireAt"]
            #del dicts["fire1"]["fireHour"]

        if "fire2" in dicts:
            if dicts["fire2"]["status"] == 2:
                dicts["fire2"]["timeLeft"] = dicts["fire2"][
                    "fireAt"] + 3600 * dicts["fire2"]["fireHour"] + 1
            if dicts["fire2"]["status"] == 1:
                dicts["fire2"]["timeLeft"] = dicts["fire2"]["fireHour"]

            del dicts["fire2"]["fireAt"]
            #del dicts["fire2"]["fireHour"]

        if "fire3" in dicts:
            if dicts["fire3"]["status"] == 2:
                dicts["fire3"]["timeLeft"] = dicts["fire3"][
                    "fireAt"] + 3600 * dicts["fire3"]["fireHour"] + 1
            if dicts["fire3"]["status"] == 1:
                dicts["fire3"]["timeLeft"] = dicts["fire3"]["fireHour"]

            del dicts["fire3"]["fireAt"]
            #del dicts["fire3"]["fireHour"]

        dicts["siegeStatus"], dicts[
            "siegeStatusChangeAt"] = self.getSiegeStatusInfo()
        dicts["siegeGuildStatus"] = self.siegeGuildStatus
        if len(dicts["mKeys"]) > 0:
            dicts["mKeys"].append("siegeStatus")
            dicts["mKeys"].append("siegeStatusChangeAt")
            dicts["mKeys"].append("siegeGuildStatus")

        return dicts
Exemplo n.º 16
0
def _pvpBattleResult(request, response):
    """
    竞技场
    """
    player = request.player
    target_player_id = getattr(request.logic_request, "oppId", 0)
    playback = getattr(request.logic_request, "playback", [])
    layout = getattr(request.logic_request, "layout", [])
    isWin = getattr(request.logic_request, "isWin", 0)
    summary = getattr(request.logic_request, "summary", 0)  #死亡情况
    powerrank = getattr(request.logic_request, "powerRank", 0)  #战斗力
    now = datetime.datetime.now()
    hour = now.hour

    # 未达到竞技场等级。
    if not player.isOpenArena:
        AlertHandler(
            player, response, AlertID.ALERT_LEVEL_SHORTAGE,
            u"_pvpBattleResult:playerLevel(%s) startLevel(%s)" %
            (player.level, Static.PVP_LEVEL))

    # 未到竞技场开启时间
    week = now.isoweekday()
    if week == Static.PVP_STOP_WEEK and hour < Static.PVP_STOP_HOUR:
        response.logic_response.set("openState", 2)
        return response

    player.update_hero_layout(layout)
    target_player = get_player(target_player_id, False)

    # 验证是否有对面的玩家。
    if not target_player:
        raise ErrorException(
            player,
            u"_pvpBattleResult:pvp target player is None:target player id(%s) is not existed"
            % target_player_id)
    rewards = pvp_fight(player, target_player, isWin)

    if isWin:
        player.task_going(Static.TASK_CATEGORY_ARENA_PK_SUCCESS, is_incr=True)

    score = 0

    for reward in rewards:
        if reward["type"] == Static.SCORE_ID:
            score = reward["count"]

    # pvp 的分支,pvp已经没有邮件的功能了。改成战斗记录的操作了。
    # send_battle_record(player=player, isWin=isWin, playerScore=player.PVP.score, playerRank=player.PVP.rank, targetPlayerScore=target_player.PVP.score, targetPlayerRank=target_player.PVP.rank, addScore=score,playerPowerRank = player.powerRank, targetPlayerId=target_player.pk,targetPlayerPowerRank=target_player.powerRank, playerVip=int(player.vip_level), playerIcon=player.iconId, targetPlayerVip=int(target_player.vip_level), targetPlayerIcon=target_player.iconId)
    send_battle_record(player=player,
                       targetPlayer=target_player,
                       isWin=isWin,
                       category=1,
                       addScore=score,
                       playerHeroes=player.layoutHeroSimple_dict(),
                       targetHeroes=target_player.layoutHeroSimple_dict())

    # 竞技场排名七天乐奖励
    rank = 1000 - player.PVP.rank
    rank = rank if rank > 0 else 0
    player.seven_days_task_going(category=Static.SEVEN_TASK_CATEGORY_PVP_RANK,
                                 number=rank,
                                 is_incr=False,
                                 with_top=True,
                                 is_series=True)

    player.PVP.update_oppIds()

    ## 这里至少是5个人.
    opp_ids = player.PVP.get_oppIds()
    sumOpps = []
    new_oppids = random.sample(opp_ids, 5)
    opps = get_pvp_players(new_oppids)
    for opp in opps:
        sumOpps.append(opp.pvp_view_data(True))
    response.common_response.player.set("opps", sumOpps)

    #战斗失败添加冷却时间
    if not isWin:
        player.PVP.updateCdTime()

    player.PVP.update()

    target_player.PVP.update()

    response.common_response.player.set("arena", player.PVP.to_dict())

    response.logic_response.set("heroLevelUp", [])
    response.logic_response.set("oppName", target_player.name)
    response.logic_response.set("rewards", rewards)
    response.logic_response.set("openState", 1)

    return response
Exemplo n.º 17
0
def pvpSetUp(request, response):
    '''
    PVP阵容
    '''
    player = request.player
    # 这个是选中敌人的id
    target_player_id = getattr(request.logic_request, "oppId", 0)
    category = getattr(request.logic_request, "category", 0)  # 1竞技场 2掠夺 3攻城战
    target_player = get_player(target_player_id, False)

    #竞技场
    if category == 1:
        #竞技场未开放
        if not player.isOpenArena:
            AlertHandler(player, response, AlertID.ALERT_LEVEL_SHORTAGE,
                         u"pvpSetUp:PVP playerLevel(%s)" % (player.level))
            return response

        #耐力不足
        if player.stamina < Static.PVP_SUB_STAMINA:
            AlertHandler(player, response, AlertID.ALERT_STAMINA_NOT_ENOUGH,
                         u"pvpSetUp:stamina not enougth")
            return response
        now = datetime.datetime.now()
        week = now.isoweekday()
        hour = now.hour
        if week == Static.PVP_STOP_WEEK and hour < Static.PVP_STOP_HOUR:
            response.logic_response.set("openState", 2)
            return
        # 是否达到冷却时间。
        # 从django里面取出来的时间类型是带有时区的复杂类型。所以需要将时区的信息去除掉。这样才能和正常的日期类型去做比较
        player.PVP.cd_time = player.PVP.cd_time.replace(tzinfo=None)
        if player.PVP.cd_time > datetime.datetime.now():
            return response

        # 每日战斗五次
        if player.PVP.freeBattleCount <= 0:
            return response
        player.sub_stamina(Static.PVP_SUB_STAMINA)
        # 扣除耐力
        # 之所以放在请求战斗里面去做,主要是因为怕玩家中途杀掉进程,可以逃避扣除耐力的做法
        player.PVP.subBattleCount()
        player.PVP.update()
        #PVP 战斗一次
        player.dailytask_going(Static.DAILYTASK_CATEGORY_PK,
                               number=1,
                               is_incr=True,
                               is_series=True)

        playback_data = {}
        #竞技场

        playback_data = {"leftArmyData": target_player.army_data}
        response.logic_response.set("playback", playback_data)
        response.logic_response.set("category", category)
        response.logic_response.set("openState", 1)
        # 场景目前是表里面配置了三十二个。如果以后表里面有修改,
        response.logic_response.set("pvpSceneId", random.randint(1, 7) * 10)
    elif category == 3:
        #耐力不足
        if target_player_id != -10001:
            #攻城战未开放
            if not player.isOpenSiege:
                AlertHandler(
                    player, response, AlertID.ALERT_LEVEL_SHORTAGE,
                    u"pvpSetUp:siege playerLevel(%s)" % (player.level))
                return response
            if player.siege_be_challenging:
                # 正在被攻击 不能进行匹配
                AlertHandler(player, response,
                             AlertID.ALERT_SIEGE_BATTLE_BE_CHALLENGING,
                             u"siegeBattlePlayer:be challenging")
                return response
            if target_player_id != player.SiegeBattle.oppId:
                # 匹配的对手和挑战的对手不统一
                AlertHandler(
                    player, response, AlertID.ALERT_SIEGE_BATTLE_MATCH_AGAIN,
                    u"pvpSetUp:siege fight player(%s) is not match player(%s)"
                    % (target_player_id, player.SiegeBattle.oppId))
                return response

            # 移动堡垒检查
            if not player.SiegeBattle.has_fort:
                AlertHandler(player, response,
                             AlertID.ALERT_SIEGE_BATTLE_NO_FORT,
                             u"siegeBattlePlayer:fort is not enougth")
                return response
            if target_player_id > 0:
                target_player.siege_be_challenged()  # 设置被挑战的时间
            player.siege_be_safedTime(240)  # 攻击者被保护4分钟
            # 消耗一个移动堡垒
            player.SiegeBattle.use_fort()
            response.common_response.player.set("siegeBattle",
                                                player.SiegeBattle.to_dict())

        playback_data = {"leftArmyData": target_player.building_army_data}
        response.logic_response.set("playback", playback_data)
        response.logic_response.set("category", category)
        response.logic_response.set("openState", 1)
        response.logic_response.set("pvpSceneId", random.randint(1, 7) * 10)

    return response
Exemplo n.º 18
0
 def player(self):
     from module.player.api import get_player
     player = get_player(self.player_id, False)
     return player
Exemplo n.º 19
0
def allowedMemberJoinGuild(request, response):
    """
    加入或者拒绝社团
    """
    player = request.player

    category = getattr(request.logic_request, "category", 0)  # 1允许 2 拒绝
    targetPlayerId = getattr(request.logic_request, "targetPlayerId", 0)

    if player.guild.position not in [
            Static.GUILD_CHAIRMAN_POSITION, Static.GUILD_VI_CHAIRMAN_POSITION
    ]:
        # 不是会长不可以审核
        return response

    guildInfo = player.guild.guildInfo

    if targetPlayerId and targetPlayerId not in guildInfo.requestMemberIds:  #检查是否在请求列表中
        guildInfo.self_release_lock()
        return response

    # 如果是拒绝的话,分为单个拒绝和拒绝所有
    if category == 2:
        if targetPlayerId:
            targetPlayer = get_player(targetPlayerId, False)
            # 从列表里面删除
            player.guild.disallow_join_guild(targetPlayerId)
            contents = []
            contents.append({
                "content": "fytext_300760",
                "paramList": [guildInfo.name],
            })

            # 发送邮件通知对方,没有加入成功
            send_system_mail(targetPlayer,
                             None,
                             "fytext_300762",
                             contents=contents)
        else:
            # 所有
            for targetPlayerId in guildInfo.requestMemberIds:
                targetPlayer = get_player(targetPlayerId, False)
                # 再进行一次验证
                if not targetPlayer.guildId:
                    contents = []
                    contents.append({
                        "content": "fytext_300760",
                        "paramList": [guildInfo.name],
                    })

                    send_system_mail(targetPlayer,
                                     None,
                                     "fytext_300762",
                                     contents=contents)

                player.guild.disallow_join_guild(targetPlayerId)

    # 如果同意操作基本类似
    elif category == 1:
        targetPlayers = []
        if targetPlayerId:
            targetPlayer = get_player(targetPlayerId)
            targetPlayers.append(targetPlayer)
        else:
            for id in guildInfo.requestMemberIds:
                targetPlayer = get_player(id)
                targetPlayers.append(targetPlayer)

        for targetPlayer in targetPlayers:
            contents = []
            contents.append({
                "content": "fytext_300759",
                "paramList": [guildInfo.name],
            })

            send_system_mail(targetPlayer,
                             None,
                             "fytext_300761",
                             contents=contents)
            player.guild.allow_join_guild(targetPlayer)

    guildInfo.save()
    response.common_response.player.set("guild", player.guild.to_dict())

    return response
Exemplo n.º 20
0
def purchase_callback(request):
    """
    支付回调
    """

    AppID = request.POST.get("AppID", "")
    OrderSerial = request.POST.get("OrderSerial", "")
    CooperatorOrderSerial = request.POST.get("CooperatorOrderSerial", "")
    Sign = request.POST.get("Sign", "")
    Content = request.POST.get("Content", "")
    secret_key = settings.CHANNELS["baidu"]["secret_key"]

    sign = hashlib.md5("%s%s%s%s%s" %
                       (AppID, OrderSerial, CooperatorOrderSerial, Content,
                        secret_key)).hexdigest()

    result = {
        "AppID": AppID,
        "ResultCode": 0,
        "resultMsg": "",
        "Sign": "",
        "Content": ""
    }
    if sign != Sign:
        result["resultMsg"] = u"Sign Error"

    else:
        contentStr = base64.b64decode(Content)
        #json解析
        content = simplejson.loads(contentStr)

        order = get_order(CooperatorOrderSerial)

        if not order:
            result["ResultMsg"] = "No order"
        else:
            if not order.is_success:
                order.notify_data = simplejson.dumps(content)
                order.plat_order_id = OrderSerial
                yuanbo = get_yuanbo(order.yuanbo_id)

                #if yuanbo.price <= content["OrderMoney"] and content["OrderStatus"] == 1:
                if content["OrderStatus"] == 1:
                    player = get_player(order.player_id)
                    add_yuanbo, is_first = recharge_yuanbo(
                        player, yuanbo, info="baidu recharge")
                    order.yuanbo = add_yuanbo
                    order.is_first = is_first
                    order.success()
                    player.update()
                else:
                    order.failure()

                order.save()
            result["ResultCode"] = 1

    result["Sign"] = hashlib.md5(
        "%s%s%s" %
        (result["AppID"], result["ResultCode"], secret_key)).hexdigest()

    return HttpResponseJson(result)