hxp
2020-03-02 7a58a47083cb8c7920733c8378ca41964e9330e4
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -37,31 +37,23 @@
import PlayerBillboard
import PlayerExam
import PlayerControl
import PlayerRecall
import PlayerFamilyAction
import PlayerUniversalGameRec
import PlayerFamily
import GameWorldOpenServerCampaign
import GameWorldMixServerCampaign
import ShareDefine
import GameDataRecord
import GameWorldShopItem
import PlayerMergeRegister
import PlayerCompensation
import PlayerFB
import UpdatePlayerName
import PlayerFamilyBoss
import PlayerManorWar
import GameWorldBoss
import MergeBroadcast
import GameWorldFamilyWar
import GameWorldMergeKing
import GameWorldMergePK
#import PlayerFamilyTech
import MergeChildMsg
import PlayerFamilyRedPacket
import PlayerFBHelpBattle
import PlayerFamilyStore
import PlayerHorsePetBoss
#import PlayerFamilyStore
import PlayerFamilySWRH
import GameWorldProcess
import PlayerLVAward
@@ -77,9 +69,17 @@
import CrossRealmPlayer
import CrossRealmMsg
import CrossRealmPK
import ChPyNetSendPack
import NetPackCommon
import AuctionHouse
import PlayerFairyDomain
import GameWorldSkyTower
import GameWorldItem
import PlayerAssist
import time
import datetime
import json
#---------------------------------------------------------------------
#全局变量
#---------------------------------------------------------------------
@@ -263,7 +263,7 @@
        return
    # 查询地图NPC数量
    elif queryType == ChConfig.queryType_NPCCnt:
        __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD)
        __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick)
        return
    else:
        GameWorld.ErrLog('unKnow queryType = %s' % (queryType))
@@ -304,7 +304,7 @@
#  @param queryCallName: 请求回调名
#  @param sendCMD: 请求的命令 根据请求类型和请求命令来决定最终操作
#  @return None
def __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD):
def __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick):
    playerManager = GameWorld.GetPlayerManager()
    try:
        mapInfo = eval(sendCMD)
@@ -316,9 +316,87 @@
        return
    
    tagMapID = mapInfo[0]
    npcIDList = mapInfo[2]
    # 本服查询跨服地图怪物数
    if tagMapID in ChConfig.Def_CrossMapIDList and not GameWorld.IsCrossServer():
        __QueryCrossServerMapNPCCntInfo(curPlayer, tagMapID, npcIDList, tick)
        return
    playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), ChConfig.queryType_NPCCnt, 0, tagMapID,
                queryCallName, sendCMD, len(sendCMD), curPlayer.GetRouteServerIndex())
    return
def __QueryCrossServerMapNPCCntInfo(curPlayer, mapID, npcIDList, tick):
    ## 查询跨服地图NPC个数信息
    if mapID in PyGameData.g_crossMapNPCInfo:
        infoTick, mapNPCInfoDict = PyGameData.g_crossMapNPCInfo[mapID]
        if tick - infoTick < 60 * 1000:
            #GameWorld.DebugLog("直接同步本服缓存的跨服地图NPC信息")
            SyncPlayerCrossMapNPCInfo(curPlayer, mapID, npcIDList, mapNPCInfoDict)
            return
    serverGroupID = GameWorld.GetServerGroupID()
    zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID)
    if not zoneIpyData:
        return
    zoneID = zoneIpyData.GetZoneID()
    # 本服缓存超时,发送跨服服务器查询
    playerID = curPlayer.GetPlayerID()
    dataMsg = {"PlayerID":playerID, "ZoneID":zoneID, "MapID":mapID, "NPCIDList":npcIDList}
    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryNPCInfo, dataMsg)
    return
def ClientServerMsg_QueryNPCInfo(serverGroupID, msgData):
    ## 收到子服请求查看跨服地图NPC个数信息
    zoneID = msgData["ZoneID"]
    mapID = msgData["MapID"]
    zoneIpyData = CrossRealmPlayer.GetServerCrossZoneMapIpyData(zoneID, mapID)
    if not zoneIpyData:
        return
    realMapID = zoneIpyData.GetMapID()
    copyMapID = zoneIpyData.GetCopyMapID()
    sendCMD = {"ServerGroupID":serverGroupID, "CopyMapID":copyMapID}
    sendCMD.update(msgData)
    sendCMD = str(sendCMD)
    GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, 0, realMapID, "NPCCntCross", sendCMD, len(sendCMD))
    return
def CrossServerMsg_NPCInfoRet(msgData, tick):
    ## 收到跨服服务器同步的地图NPC信息
    mapID = msgData["MapID"]
    playerID = msgData["PlayerID"]
    npcIDList = msgData["NPCIDList"]
    mapNPCInfoDict = msgData["Result"]
    PyGameData.g_crossMapNPCInfo[mapID] = [tick, mapNPCInfoDict]
    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
    if curPlayer:
        SyncPlayerCrossMapNPCInfo(curPlayer, mapID, npcIDList, mapNPCInfoDict)
    return
def SyncPlayerCrossMapNPCInfo(curPlayer, mapID, npcIDList, mapNPCInfoDict):
    ## 同步给玩家跨服地图NPC信息
    npcInfoPack = ChPyNetSendPack.tagMCNPCCntList()
    npcInfoPack.Clear()
    npcInfoPack.MapID = mapID
    npcInfoPack.NPCInfoList = []
    for npcID in npcIDList:
        npcInfo = ChPyNetSendPack.tagMCNPCCntInfo()
        npcInfo.Clear()
        npcInfo.NPCID = npcID
        npcInfo.Cnt = mapNPCInfoDict.get(npcID, 0)
        npcInfoPack.NPCInfoList.append(npcInfo)
    npcInfoPack.NPCInfoCnt = len(npcInfoPack.NPCInfoList)
    NetPackCommon.SendFakePack(curPlayer, npcInfoPack)
    return
## 获得家族属性(等级,人数)获得自己所在家族的属性
#  @param curPlayer 请求的玩家
@@ -419,10 +497,10 @@
    resultName = pack.GetResultName()                       #[queryid, 人气值, 物品ID]
    
    if callName == "SendMail":
        title, content, getDays, playerIDList, addItemList, gold, goldPaper, silver, detail = eval(resultName)
        title, content, getDays, playerIDList, addItemList, gold, goldPaper, silver, detail, moneySource = eval(resultName)
        limitTime = str(GameWorld.GetDatetimeByDiffDays(getDays))
        limitTime = limitTime.split(".")[0]
        PlayerCompensation.SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold, goldPaper, silver, detail=detail)
        PlayerCompensation.SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold, goldPaper, silver, detail=detail, moneySource=moneySource)
        return
    
    if callName == "SendMailBatch":
@@ -439,9 +517,21 @@
        CrossRealmMsg.SendMsgToClientServer(msgType, dataMsg, serverGroupIDList)
        return
    
    if callName == 'MergeWorldNotify':
        country, msgMark, msgParamList, lineID, mergeMinOSD, mergeMaxOSD, mergeMapInfo = eval(resultName)
        PlayerControl.MergeWorldNotify(country, msgMark, msgParamList, lineID, mergeMinOSD, mergeMaxOSD, mergeMapInfo, 1)
    if callName == "SetCrossPlayerAttrValue":
        CrossRealmPlayer.SetCrossPlayerAttrValue(eval(resultName), tick)
        return
    if callName == 'CrossNotify':
        serverGroupIDList, crossNotifyList = eval(resultName)
        PlayerControl.CrossNotify(serverGroupIDList, crossNotifyList)
        return
    if callName == "DynamicLineMapStateChange":
        PlayerFB.OnCrossDynamicLineStateChange(eval(resultName))
        return
    if callName == "DynamicLineMapInitOK":
        PlayerFB.OnCrossDynamicMapReset(eval(resultName))
        return
    
    if callName == "CommMapServerInitOK":
@@ -461,27 +551,8 @@
        PlayerFamily.MapServer_PyAddFamilyInfoValue(curPlayer, eval(resultName))
        return
    
    if callName == 'UpdRechargeRankBillboard':     #地图服务器更新玩家通知特惠累计充值排行榜
        PlayerBillboard.MapServer_UpdateRechargeRankBillboard(eval(resultName))
        return
    if callName == 'UpdCostRankBillboard':     #地图服务器更新玩家通知特惠累计消费排行榜
        PlayerBillboard.MapServer_UpdateCostRankBillboard(eval(resultName))
        return
    if callName == 'UpdateTotalRechargeBillboard':    #地图服务器更新玩家充值总数排行榜
        PlayerBillboard.MapServer_UpdateTotalRechargeBillboard(eval(resultName))
        return
    if callName == 'UpdMSRechargeRankBillboard':    #地图服务器更新玩家合服活动充值总数排行榜
        PlayerBillboard.MapServer_UpdMSRechargeRankBillboard(eval(resultName))
        return
    if callName == 'UpdMSFamilyKillBossBillboard':    #地图服务器更新玩家合服活动战盟击杀boss总数排行榜
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        if not curPlayer:
            return
        GameWorldMixServerCampaign.UpdMixCampaignFamiliyBossCnt(curPlayer, eval(resultName))
        return
    
    if callName == 'ExitExam': #地图服务器玩家退出答题
@@ -494,11 +565,6 @@
        msg, msgList = eval(resultName)
        
        PlayerControl.TeamNotify(teamID, msg, msgList)
        return
    if callName == 'ReveiveRecallAward':
        #召回奖励领取情况
        PlayerRecall.ReveiveRecallAwardResult(srcPlayerID, resultName)
        return
    
    if callName == "NotifyTruckDestroy":
@@ -532,30 +598,14 @@
        GameDataRecord.ChangeCoinCnt(eval(resultName))
        return
    
    #跨服广播子服
    if callName == 'SendBroadcastMergeClient':
        operType, mapID, dataDict, isRepeat = eval(resultName)
        MergeBroadcast.SendBroadcastMerge(operType, mapID, dataDict, isRepeat)
        return
    #跨服赛报名获得新账号
    #if callName == 'MergeRegister':
    #    PlayerMergeRegister.MergeWarRegisterNewAcc(srcPlayerID, eval(resultName), tick)
    #    return
    #跨服王者争霸
    if callName == 'MergeKingFB':
        GameWorldMergeKing.MapServer_MergeKingFB(eval(resultName))
        return
    #跨服匹配PK战斗结算
    if callName == "CrossPKOver":
        CrossRealmPK.MapServer_MergePKOver(eval(resultName))
        CrossRealmPK.MapServer_CrossPKOver(eval(resultName), tick)
        return
    
    #跨服匹配房间开启
    if callName == "CrossPKRoomOpen":
        CrossRealmPK.MapServer_CrossPKRoomOpen(eval(resultName))
        CrossRealmPK.MapServer_CrossPKRoomOpen(eval(resultName), tick)
        return
    
    #跨服匹配PK取消匹配
@@ -587,6 +637,14 @@
        PlayerTalk.ChatPYSpeaker(curPlayer, eval(resultName))
        return
    
    #刷新本服角色信息
    if callName == 'RefreshMainServerRole':
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        if not curPlayer:
            return
        ChPlayer.DoRefreshMainServerRole(curPlayer)
        return
    # 战盟联赛
    if callName =="FamilyWarOver":
        GameWorldFamilyWar.MapServer_FamilyWarOver(eval(resultName))
@@ -613,16 +671,6 @@
            elif notifyType == 2:
                PlayerUniversalGameRec.SendUniversalGameRecInfo(None, recType)
                
        return
    # 领地争夺战拔旗消耗
    if callName =="ManorWarGetFlagCost":
        PlayerManorWar.ManorWarGetFlagCost(eval(resultName))
        return
    # 领地争夺战获胜战盟
    if callName =="ManorWarWinner":
        PlayerManorWar.DoMapServerManorWarWinner(eval(resultName))
        return
    
    # 战盟副本boss开始、被击杀
@@ -669,25 +717,14 @@
        GameWorldProcess.UpdGlobalKillCount(eval(resultName))
        return
    
    # 自定义商店全服限购次数清空
    if callName =="ShopItemClearBuyCnt":
        shopID = eval(resultName)[0]
        GameWorldShopItem.DoShopItemClearBuyCnt(shopID)
        return
    # 新手指导员天数
    if callName =="FreshmanGuiderDay":
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        if not curPlayer:
            return
        guiderDay = eval(resultName)[0]
        PlayerControl.SetFreshmanGuiderDay(curPlayer, guiderDay)
    # 缓存装备广播信息中的装备明细信息
    if callName == "NotifyEquipDetailInfo":
        GameWorldItem.OnCacheNotifyEquipDetailInfo(json.loads(resultName), tick)
        return
    
    #生成仙盟红包
    if callName == 'CreatFamilyRedPacket':
        PlayerFamilyRedPacket.CreatFamilyRedPacket(eval(resultName))
    if callName == "MapServer_CreatRedPacket":
        PlayerFamilyRedPacket.MapServer_CreatRedPacket(eval(resultName))
        return
    #发仙盟红包
    if callName == 'SendFamilyRedPacket':
@@ -711,6 +748,10 @@
    if callName =="DuJieFBOver":
        PlayerDuJie.DoDuJieFBOver(eval(resultName))
        return
    #境界提升全服buff
    if callName =="RealmUpAddBuff":
        PlayerDuJie.DoRealmUpAddBuff(resultName)
        return
    
    # 组队副本队长请求进入询问结果
    if callName == "EnterFBTeamAsk":
@@ -730,15 +771,35 @@
        PlayerBourse.OnGivePlayerBourseGainsResult(curPlayer, eval(resultName))
        return
    
    # 拍卖行
    if callName == "AuctionHouse":
        curPlayer = None
        if srcPlayerID:
            curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
            if not curPlayer:
                return
        AuctionHouse.MapServer_AuctionHouseLogic(curPlayer, eval(resultName), tick)
        return
    # 协助
    if callName == "PlayerAssist":
        curPlayer = None
        if srcPlayerID:
            curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
            if not curPlayer:
                return
        PlayerAssist.MapServer_PlayerAssistLogic(curPlayer, eval(resultName), tick)
        return
    if callName == "TeamMemFuncData":
        PlayerTeam.MapServer_TeamMemFuncData(srcPlayerID, eval(resultName))
        return
    
    #封魔坛结束
    if callName == "SealDemonOver":
        playerID, lineID, rank = eval(resultName)
        PyDataManager.GetSealDemonRecordManager().UpdateSealDemonRecord(playerID,lineID,rank)
        return
#    #封魔坛结束
#    if callName == "SealDemonOver":
#        playerID, lineID, rank = eval(resultName)
#        PyDataManager.GetSealDemonRecordManager().UpdateSealDemonRecord(playerID,lineID,rank)
#        return
    
    #查询副本功能线路人数
    if callName == "FBLinePlayerCnt":
@@ -790,11 +851,19 @@
    if callName =="AddBossRebornPoint":
        GameWorldBoss.AddBossRebornPoint(eval(resultName))
        return
    #通知神兽副本NPC刷新时间
    if callName =="DogzNPCTime":
        PyGameData.g_dogzNPCRefreshTimeDict = eval(resultName)
        GameWorldBoss.Sync_DogzNPCRefreshTime()
    #多仙盟BOSS结束
    if callName =="AllFamilyBossOver":
        PlayerFamilyBoss.AllFamilyBossKilled()
        return
    #骑宠BOSS结束
    if callName =="HorsePetBossOver":
        PlayerHorsePetBoss.HorsePetBossKilled(int(resultName))
        return
    #缥缈仙域事件出现
    if callName =="AddFairyDomainEvent":
        PlayerFairyDomain.AddFairyDomainEvent(eval(resultName))
        return
#---return分割线-----------------------------------------------------------------
    
@@ -838,29 +907,11 @@
            return
        resultName = '%s' % ret
        
    if callName == 'SendInviteCode':
        #邀请码验证回复
        resultName = PlayerRecall.PlayerRecall_InviteCode(srcPlayerID, pack.GetQueryID())
    if callName == 'MixServerCampaignAward':
        #可否领取合服活动奖励
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        resultName = '%s' % GameWorldMixServerCampaign.CanGiveMixCampaignAward(curPlayer, eval(resultName))
    if callName == 'OpenServerCampaignAward':
        #可否领取开服活动奖励
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        resultName = '%s' % GameWorldOpenServerCampaign.CanGiveCampaignAward(curPlayer, eval(resultName))
        
    # 跨服PK奖励
    if callName == 'MergePKAward':
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        resultName = '%s' % GameWorldMergePK.MapServer_QueryMergePKAward(curPlayer, eval(resultName))
    # 跨服王者争霸
    if callName == 'MergeKing':
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        resultName = '%s' % GameWorldMergeKing.MapServer_MergeKingQuery(curPlayer, eval(resultName))
    
    # 玩家自身战盟科技等级提升, 改为地图直接处理, 暂屏蔽
#    if callName == 'PlayerFamilyTechLVUP':
@@ -877,26 +928,20 @@
        if ret == None:
            return
        resultName = '%s' % ret
    # 战盟仓库
    if callName == "FamilyStore":
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        if not curPlayer:
            return
        resultName = '%s' % PlayerFamilyStore.DoMapServerFamilyStore(curPlayer, eval(resultName), tick)
    
    # 自定义商店物品
    if callName == "ShopItem":
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        resultName = '%s' % GameWorldShopItem.DoShopItemQueryResult(curPlayer, eval(resultName))
    # 玩家天梯奖励
    if callName == "HighLadderReward":
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        import HighLadder
        needResult, resultName = HighLadder.MapServer_HighLadderReward(curPlayer, eval(resultName))
        if not needResult:
    # 天星塔
    if callName == "SkyTower":
        ret = GameWorldSkyTower.MapServer_SkyTowerInfo(eval(resultName))
        if ret == None:
            return
        resultName = '%s' % ret
#    # 战盟仓库
#    if callName == "FamilyStore":
#        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
#        if not curPlayer:
#            return
#        resultName = '%s' % PlayerFamilyStore.DoMapServerFamilyStore(curPlayer, eval(resultName), tick)
        
    srcPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)