From 2a7ed58c22dc878e52598fca4239f14f7cdf8076 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 25 七月 2024 14:55:31 +0800 Subject: [PATCH] 10216 【越南】【港台】【主干】【砍树】古神战场修改(系统场次战场中可购买召集,继承原召集场次效果) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py | 76 ++++++++++++++++++++++++++++++++------ 1 files changed, 64 insertions(+), 12 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py index 375371e..9ac8890 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py @@ -329,6 +329,7 @@ def OnMapServerInitOK(): # 通知地图服务器状态 SyncMapServerCrossBattlefieldBuyInfo() + SyncMapServerCrossBattlefieldSysCallBuyInfo() return def SyncMapServerCrossBattlefieldBuyInfo(): @@ -343,6 +344,11 @@ buyInfo[playerID] = {"callPlayerIDList":buyRec.callPlayerIDList, "factionID":buyRec.factionID} syncMapBuyInfo[zoneID][hmNum] = buyInfo GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossBattlefieldCallTeamInfo, syncMapBuyInfo) + return + +def SyncMapServerCrossBattlefieldSysCallBuyInfo(): + syncMapBuyInfo = PyGameData.g_crossBattlefieldSysCallBuyList + GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossBattlefieldSysCallBuyInfo, syncMapBuyInfo) return def OnMinuteProcess(): @@ -435,7 +441,8 @@ PyGameData.g_crossDynamicLineInfo.pop(ChConfig.Def_FBMapID_CrossBattlefield, None) PyGameData.g_overPlayerIDList = [] - + PyGameData.g_crossBattlefieldSysCallBuyList = [] + hmNum = battlefieldState openHour, openMinute = GetHMByNum(hmNum) sysOpenHMList = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldOpen", 1) @@ -642,6 +649,49 @@ hmNum = GetHMNum(openHour, openMinute) + # 更新缓存 + curCache = PlayerViewCache.FindViewCache(playerID, True) + if curCache: + cacheDict = PlayerViewCache.GetCachePropDataDict(curCache) + cacheDict["Name"] = playerName + cacheDict["Job"] = job + cacheDict["LV"] = playerLV + cacheDict["RealmLV"] = realmLV + cacheDict["FightPower"] = fightPower + + sysOpenHMList = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldOpen", 1) + if [openHour, openMinute] in sysOpenHMList: + if playerID in PyGameData.g_crossBattlefieldSysCallBuyList: + GameWorld.Log("玩家已经购买过该系统场次! zoneID=%s,openHour=%s,openMinute=%s" % (zoneID, openHour, openMinute), playerID) + return + PyGameData.g_crossBattlefieldSysCallBuyList.append(playerID) + + buyTime = int(time.time()) + GameWorld.DebugLog("玩家购买系统召集场次! zoneID=%s,openHour=%s,openMinute=%s" % (zoneID, openHour, openMinute), playerID) + + # 上榜 + billboardCallCountLimit = IpyGameDataPY.GetFuncCfg("CrossBattlefieldBillboard", 1) # 周召集榜上榜至少次数 + groupValue1, dataID, name1, name2 = zoneID, playerID, playerName, "" + type2, value1, value2 = job, realmLV, 0 + cmpValue = buyOpenCountWeek + 1 + if cmpValue >= billboardCallCountLimit: + CrossBillboard.UpdCrossBillboard(ShareDefine.Def_CBT_BattlefieldWCall, groupValue1, dataID, name1, name2, type2, value1, value2, cmpValue) + + # 通知子服 + serverGroupIDList = [serverGroupID] + msgData.update({"opType":"SysCallBuy", "buyTime":buyTime}) + sendMsg = {"zoneID":zoneID, "SysCallBuyPlayerID":playerID, "opData":msgData} + CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_BattlefieldBuy, sendMsg, serverGroupIDList) + + SyncMapServerCrossBattlefieldSysCallBuyInfo() + + buyPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) + if buyPlayer: + sendCMD = str(["SysCallBuy", PyGameData.g_crossBattlefieldSysCallBuyList]) + GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, buyPlayer.GetPlayerID(), buyPlayer.GetRealMapID(), + "CrossBattlefield", sendCMD, len(sendCMD), buyPlayer.GetRouteServerIndex()) + return + if zoneID not in PyGameData.g_crossBattlefieldBuyInfo: PyGameData.g_crossBattlefieldBuyInfo[zoneID] = {} buyHMInfo = PyGameData.g_crossBattlefieldBuyInfo[zoneID] @@ -671,16 +721,6 @@ return # ================ 可以购买,以下执行添加购买场次阵营逻辑 ================ - - # 更新缓存 - curCache = PlayerViewCache.FindViewCache(playerID, True) - if curCache: - cacheDict = PlayerViewCache.GetCachePropDataDict(curCache) - cacheDict["Name"] = playerName - cacheDict["Job"] = job - cacheDict["LV"] = playerLV - cacheDict["RealmLV"] = realmLV - cacheDict["FightPower"] = fightPower # 新增场次购买记录 buyTime = int(time.time()) @@ -979,7 +1019,6 @@ GameWorld.DebugLog("收到跨服服务器同步的战场购买信息: %s" % msgData) zoneID = msgData["zoneID"] - syncBuyHMInfo = msgData["syncBuyHMInfo"] opData = msgData.get("opData", {}) curZoneID = GetCrossBattlefieldZoneID(GameWorld.GetServerGroupID()) @@ -987,6 +1026,19 @@ GameWorld.ErrLog("非本服所属分区的跨服战场购买信息! curZoneID(%s) != zoneID(%s) %s" % (curZoneID, zoneID, str(msgData))) return + if "SysCallBuyPlayerID" in msgData: + playerID = msgData["SysCallBuyPlayerID"] + if PlayerControl.GetDBPlayerAccIDByID(playerID): + openHour = opData["openHour"] + openMinute = opData["openMinute"] + faction = opData["faction"] + buyTime = opData["buyTime"] + todayBuyOpenCount = opData["todayBuyOpenCount"] + msgInfo = ["BattlefieldBuy", [openHour, openMinute, faction, todayBuyOpenCount, buyTime]] + CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossBattlefield", msgInfo) + return + + syncBuyHMInfo = msgData["syncBuyHMInfo"] if not syncBuyHMInfo: PyGameData.g_crossBattlefieldBuyInfo.pop(zoneID, None) -- Gitblit v1.8.0