ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -42,25 +42,19 @@
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 PlayerFamilyStore
import PlayerFBHelpBattle
import PlayerHorsePetBoss
#import PlayerFamilyStore
import PlayerFamilySWRH
import GameWorldProcess
import PlayerLVAward
@@ -73,6 +67,12 @@
import PyGameData
import PlayerTalk
import PlayerStore
import CrossRealmPlayer
import CrossRealmMsg
import CrossRealmPK
import ChPyNetSendPack
import NetPackCommon
import AuctionHouse
import time
import datetime
@@ -259,7 +259,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))
@@ -300,7 +300,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)
@@ -312,9 +312,78 @@
        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
    # 本服缓存超时,发送跨服服务器查询
    playerID = curPlayer.GetPlayerID()
    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryNPCInfo, {"PlayerID":playerID, "MapID":mapID, "NPCIDList":npcIDList})
    return
def ClientServerMsg_QueryNPCInfo(serverGroupID, msgData):
    ## 收到子服请求查看跨服地图NPC个数信息
    mapID = msgData["MapID"]
    zoneIpyData = CrossRealmPlayer.GetServerCrossZoneMapIpyData(mapID, serverGroupID)
    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 请求的玩家
@@ -415,27 +484,33 @@
    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":
        PlayerCompensation.SendPersonalItemMailBatch(eval(resultName))
        return
    
    if callName == 'SendMergerChildMsg':
        operType, dataMsg = eval(resultName)
        MergeChildMsg.SendMergerChildToCenterStringData(operType, dataMsg)
        # 如果是恢复跨服PK连胜的,先记录恢复的玩家ID, 等待成功后同步最新结果给玩家
        if operType == ChConfig.Def_RecoverMergePKWin:
            GameWorldMergePK.Add_RecoverMergePKWinPlayer(srcPlayerID)
    if callName == "SendMsgToCrossServer":
        msgType, dataMsg = eval(resultName)
        CrossRealmMsg.SendMsgToCrossServer(msgType, dataMsg)
        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 == "SendMsgToClientServer":
        msgType, dataMsg, serverGroupIDList = eval(resultName)
        CrossRealmMsg.SendMsgToClientServer(msgType, dataMsg, serverGroupIDList)
        return
    if callName == "SetCrossPlayerAttrValue":
        CrossRealmPlayer.SetCrossPlayerAttrValue(eval(resultName), tick)
        return
    if callName == 'CrossNotify':
        serverGroupIDList, crossNotifyList = eval(resultName)
        PlayerControl.CrossNotify(serverGroupIDList, crossNotifyList)
        return
    
    if callName == "CommMapServerInitOK":
@@ -455,27 +530,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': #地图服务器玩家退出答题
@@ -526,33 +582,35 @@
        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))
    #跨服匹配PK战斗结算
    if callName == "CrossPKOver":
        CrossRealmPK.MapServer_CrossPKOver(eval(resultName), tick)
        return
    
    #跨服匹配PK
    if callName == 'MergePKOver':
        GameWorldMergePK.MapServer_MergePKOver(eval(resultName))
    #跨服匹配房间开启
    if callName == "CrossPKRoomOpen":
        CrossRealmPK.MapServer_CrossPKRoomOpen(eval(resultName), tick)
        return
    
    #跨服匹配PK取消匹配
    if callName == 'MergePKCancel':
    if callName == "CrossRealmPKCancel":
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        if not curPlayer:
            return
        GameWorldMergePK.SendCancelMergePKMatch(curPlayer, resultName)
        CrossRealmPK.SendCancelCrossRealmPKMatch(curPlayer, resultName)
        return
    #跨服PK请求玩家当前排名
    if callName == "CrossPKSeasonOrder":
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        if not curPlayer:
            return
        CrossRealmPK.MapServer_QueryCrossPKSeasonOrder(curPlayer, eval(resultName))
        return
    #跨服注册结果
    if callName == "CrossRealmReg":
        CrossRealmPlayer.OnCrossRealmRegOK(srcPlayerID, eval(resultName), tick)
        return
    
    #py喇叭聊天
@@ -561,6 +619,14 @@
        if not curPlayer:
            return
        PlayerTalk.ChatPYSpeaker(curPlayer, eval(resultName))
        return
    #刷新本服角色信息
    if callName == 'RefreshMainServerRole':
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
        if not curPlayer:
            return
        ChPlayer.DoRefreshMainServerRole(curPlayer)
        return
    
    # 战盟联赛
@@ -589,16 +655,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开始、被击杀
@@ -645,12 +701,6 @@
        GameWorldProcess.UpdGlobalKillCount(eval(resultName))
        return
    
    # 自定义商店全服限购次数清空
    if callName =="ShopItemClearBuyCnt":
        shopID = eval(resultName)[0]
        GameWorldShopItem.DoShopItemClearBuyCnt(shopID)
        return
    # 新手指导员天数
    if callName =="FreshmanGuiderDay":
        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
@@ -662,8 +712,8 @@
        return
    
    #生成仙盟红包
    if callName == 'CreatFamilyRedPacket':
        PlayerFamilyRedPacket.CreatFamilyRedPacket(eval(resultName))
    if callName == "MapServer_CreatRedPacket":
        PlayerFamilyRedPacket.MapServer_CreatRedPacket(eval(resultName))
        return
    #发仙盟红包
    if callName == 'SendFamilyRedPacket':
@@ -687,6 +737,10 @@
    if callName =="DuJieFBOver":
        PlayerDuJie.DoDuJieFBOver(eval(resultName))
        return
    #境界提升全服buff
    if callName =="RealmUpAddBuff":
        PlayerDuJie.DoRealmUpAddBuff(resultName)
        return
    
    # 组队副本队长请求进入询问结果
    if callName == "EnterFBTeamAsk":
@@ -704,6 +758,16 @@
        if not curPlayer:
            return
        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 == "TeamMemFuncData":
@@ -766,11 +830,15 @@
    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
#---return分割线-----------------------------------------------------------------
    
@@ -781,7 +849,10 @@
        if not curPlayer:
            return
        ret = PlayerStore.DoStoreServerBuyQueryResult(curPlayer, eval(resultName))
        resultName = '%s' % ret
        if ret == None:
            resultName = ''
        else:
            resultName = '%s' % ret
        
    #玩家等级奖励
    if callName == "GetPlayerLVAward":
@@ -814,51 +885,35 @@
    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':
#        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
#        resultName = '%s' % PlayerFamilyTech.OnQuery_PlayerFamilyTechLVUP(curPlayer, eval(resultName))
    
    # 战盟仓库
    if callName == "FamilyStore":
    # 副本助战
    if callName =="FBHelpBattle":
        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:
        ret = PlayerFBHelpBattle.MapServer_FBHelpBattle(curPlayer, 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)