From 12392320a13113f580f75c314e74c952b7a9ab7d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 14 十一月 2019 10:31:05 +0800
Subject: [PATCH] 8338 【主干】【后端】女娲的祝福等buff物品的类型分配(新增类型18效果与类型9相同)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py | 343 +++++++++++++++++++++++++++++++++++---------------------
1 files changed, 213 insertions(+), 130 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index bcf2381..b934983 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -37,30 +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 PlayerFamilyStore
+import PlayerFBHelpBattle
+import PlayerHorsePetBoss
+#import PlayerFamilyStore
import PlayerFamilySWRH
import GameWorldProcess
import PlayerLVAward
@@ -72,9 +65,19 @@
import PyDataManager
import PyGameData
import PlayerTalk
+import PlayerStore
+import CrossRealmPlayer
+import CrossRealmMsg
+import CrossRealmPK
+import ChPyNetSendPack
+import NetPackCommon
+import AuctionHouse
+import PlayerFairyDomain
+import GameWorldItem
import time
import datetime
+import json
#---------------------------------------------------------------------
#全局变量
#---------------------------------------------------------------------
@@ -258,7 +261,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))
@@ -299,7 +302,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)
@@ -311,9 +314,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 请求的玩家
@@ -413,28 +494,42 @@
callName = pack.GetCallName()
resultName = pack.GetResultName() #[queryid, 人气值, 物品ID]
- if callName == 'SendMail':
- title, content, getDays, playerIDList, addItemList, gold, goldPaper, silver = eval(resultName)
+ if callName == "SendMail":
+ 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)
+ PlayerCompensation.SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold, goldPaper, silver, detail=detail, moneySource=moneySource)
return
- if callName == 'SendMailBatch':
+ 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 == "DynamicLineMapStateChange":
+ PlayerFB.OnCrossDynamicLineStateChange(eval(resultName))
+ return
+
+ if callName == "DynamicLineMapInitOK":
+ PlayerFB.OnCrossDynamicMapReset(eval(resultName))
return
if callName == "CommMapServerInitOK":
@@ -454,27 +549,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': #地图服务器玩家退出答题
@@ -487,11 +563,6 @@
msg, msgList = eval(resultName)
PlayerControl.TeamNotify(teamID, msg, msgList)
- return
-
- if callName == 'ReveiveRecallAward':
- #召回奖励领取情况
- PlayerRecall.ReveiveRecallAwardResult(srcPlayerID, resultName)
return
if callName == "NotifyTruckDestroy":
@@ -525,33 +596,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喇叭聊天
@@ -560,6 +633,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
# 战盟联赛
@@ -590,16 +671,6 @@
return
- # 领地争夺战拔旗消耗
- if callName =="ManorWarGetFlagCost":
- PlayerManorWar.ManorWarGetFlagCost(eval(resultName))
- return
-
- # 领地争夺战获胜战盟
- if callName =="ManorWarWinner":
- PlayerManorWar.DoMapServerManorWarWinner(eval(resultName))
- return
-
# 战盟副本boss开始、被击杀
if callName =="FamilyBossFBState":
PlayerFamilyBoss.FamilyBossOnKilled(eval(resultName), tick)
@@ -618,12 +689,17 @@
# 世界boss状态
if callName =="GameWorldBossState":
- GameWorldBoss.DoGameWorldBossOnReborn(eval(resultName), tick)
+ GameWorldBoss.OnGameWorldBossStateChange(eval(resultName), tick)
return
# 仙盟归属boss信息同步
if callName =="FamilyOwnerBossInfo":
GameWorldBoss.MapServer_FamilyOwnerBossInfo(eval(resultName))
+ return
+
+ # 骑宠争夺伤血玩家同步
+ if callName =="HorsePetRobBossHurtPlayer":
+ GameWorldBoss.MapServer_HorsePetRobBossHurtPlayer(eval(resultName))
return
# 全局掉落CD
@@ -634,26 +710,19 @@
if callName =="GlobalDropRate":
GameWorldProcess.UpdGlobalDropRate(eval(resultName))
return
-
- # 自定义商店全服限购次数清空
- if callName =="ShopItemClearBuyCnt":
- shopID = eval(resultName)[0]
- GameWorldShopItem.DoShopItemClearBuyCnt(shopID)
+ # 全局击杀数统计
+ if callName =="GlobalKillCount":
+ GameWorldProcess.UpdGlobalKillCount(eval(resultName))
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':
@@ -677,6 +746,10 @@
if callName =="DuJieFBOver":
PlayerDuJie.DoDuJieFBOver(eval(resultName))
return
+ #境界提升全服buff
+ if callName =="RealmUpAddBuff":
+ PlayerDuJie.DoRealmUpAddBuff(resultName)
+ return
# 组队副本队长请求进入询问结果
if callName == "EnterFBTeamAsk":
@@ -694,6 +767,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":
@@ -756,14 +839,34 @@
if callName =="AddBossRebornPoint":
GameWorldBoss.AddBossRebornPoint(eval(resultName))
return
- #通知神兽副本NPC刷新时间
- if callName =="DogzNPCTime":
- GameWorldBoss.Sync_DogzNPCRefreshTime(eval(resultName))
+ #多仙盟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分割线-----------------------------------------------------------------
#---有可能return-----------------------------------------------------------------
+ #商城全服购买限制
+ if callName == "GetStoreServerBuyCnt":
+ curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
+ if not curPlayer:
+ return
+ ret = PlayerStore.DoStoreServerBuyQueryResult(curPlayer, eval(resultName))
+ if ret == None:
+ resultName = ''
+ else:
+ resultName = '%s' % ret
+
#玩家等级奖励
if callName == "GetPlayerLVAward":
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
@@ -792,54 +895,34 @@
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':
# 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)
--
Gitblit v1.8.0