From 9d5ec7599f3abe0cebb76ce1df3c3b8c4e0aa51e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 10 二月 2026 11:40:15 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(跨服聊天;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py | 48 +++++++++++++++++++++++++++++++++++-------------
1 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
index e366e5e..f12f11c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
@@ -25,6 +25,7 @@
import IPY_GameWorld
import DataRecordPack
import PlayerEventCounter
+import GameWorldAction
import PlayerViewCache
import PlayerControl
import NetPackCommon
@@ -91,6 +92,9 @@
LoadDBPlayer()
PlayerViewCache.LoadRobot()
PyGameData.g_initGameTime = int(time.time()) # 放到加载数据之后
+
+ # 检查跨服中心唯一性
+ GameWorld.CheckCrossCenterUniquenessErr()
if DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_FamilyTransDataTime):
DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_FamilyTransDataTime, 0)
@@ -332,15 +336,13 @@
DoCheckNewServerOpen(tick)
DBDataMgr.OnMinute(curTime)
DoLogic_GameWorldEvenByTime(tick)
+ GameWorldAction.OnProcessGameAction(curTime)
#每5分钟
if curMinute % 5 == 0:
OnMinute_5(curTime, tick)
#其他功能逻辑
- #GameWorldActionControl.Dispose_OperationActionState()
- #GameWorldActionControl.Dispose_DailyActionState()
- #GameWorldActionControl.Dispose_FBStateTime()
PlayerControl.OnMinute(curTime)
PlayerFamily.OnMinute()
PlayerOnline.OnMinute()
@@ -365,6 +367,14 @@
gameWorld.SetGameWorldDict("OnlineCntM", curMinute)
activePlayerCount = GameWorld.GetPlayerManager().OnlineCount()
DataRecordPack.DR_OnLinePlayerCount(activePlayerCount) # 总在线
+ return
+
+def OnGM_CrossCenterEvent(gmEvent):
+ if not GameWorld.IsCrossCenter():
+ return
+ serverEventValue = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CrossCenterEvent)
+ if DoLogic_CrossCenterEvent(serverEventValue, gmEvent=gmEvent):
+ CrossMgr.SendCrossServerEvent(gmEvent=gmEvent)
return
def DoLogic_GameWorldEvenByTime(tick):
@@ -457,22 +467,25 @@
PlayerEventCounter.DoLogic_OnYear(tick)
return
-def DoLogic_CrossCenterEvent(centerEventValue, centerServerID=0):
+def DoLogic_CrossCenterEvent(centerEventValue, centerServerID=0, gmEvent=""):
## 收到跨服中心事件同步,如OnDay等
serverEventValue = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CrossCenterEvent)
if not serverEventValue:
serverEventValue = centerEventValue
DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_CrossCenterEvent, centerEventValue)
- if centerServerID:
- GameWorld.Log("处理跨服中心事件值! serverEventValue=%s,centerEventValue=%s,centerServerID=%s" % (serverEventValue, centerEventValue, centerServerID))
-
- if serverEventValue == centerEventValue:
- GameWorld.DebugLog("跨服中心事件值不变! serverEventValue=%s,centerEventValue=%s,centerServerID=%s" % (serverEventValue, centerEventValue, centerServerID))
+ if serverEventValue == centerEventValue and not gmEvent:
+ if centerServerID:
+ GameWorld.Log("本服与跨服中心事件值相同不处理! serverEventValue=%s,centerEventValue=%s,centerServerID=%s" % (serverEventValue, centerEventValue, centerServerID))
return
- serverEventTime = GameWorld.ChangeStrToDatetime("%s:%02d:%02d" % serverEventValue, ChConfig.TYPE_Time_Format_YmdHMS)
- centerEventTime = GameWorld.ChangeStrToDatetime("%s:%02d:%02d" % centerEventValue, ChConfig.TYPE_Time_Format_YmdHMS)
+ if centerServerID:
+ GameWorld.Log("本服与跨服中心事件值变化! serverEventValue=%s,centerEventValue=%s,centerServerID=%s,gmEvent=%s" % (serverEventValue, centerEventValue, centerServerID, gmEvent))
+ else:
+ GameWorld.Log("跨服中心服务器事件值变化! serverEventValue=%s,centerEventValue=%s,gmEvent=%s" % (serverEventValue, centerEventValue, gmEvent))
+
+ serverEventTime = GameWorld.ChangeStrToDatetime("%s" % serverEventValue, ChConfig.TYPE_Time_Format_YmdH)
+ centerEventTime = GameWorld.ChangeStrToDatetime("%s" % centerEventValue, ChConfig.TYPE_Time_Format_YmdH)
serverHour = serverEventTime.hour
serverDay = serverEventTime.day
@@ -491,12 +504,12 @@
isEvent = False
#OnHour事件
- if (serverHour != centerHour or serverDay != centerDay or serverMonth != centerMonth or serverYear != centerYear):
+ if (serverHour != centerHour or serverDay != centerDay or serverMonth != centerMonth or serverYear != centerYear or gmEvent == "GMOnHour"):
isEvent = True
PlayerEventCounter.DoLogic_CrossCenterOnHour(centerEventValue)
#OnDay事件
- if (serverDay != centerDay or serverMonth != centerMonth or serverYear != centerYear):
+ if (serverDay != centerDay or serverMonth != centerMonth or serverYear != centerYear or gmEvent == "GMOnDay"):
isEvent = True
PlayerEventCounter.DoLogic_CrossCenterOnDay(centerEventValue)
@@ -512,6 +525,15 @@
#if serverYear != curTimeYear:
# OnYear(tick)
+ # 游戏服额外处理玩家
+ if GameWorld.IsMainServer():
+ playerManager = GameWorld.GetPlayerManager()
+ for i in xrange(playerManager.OnlineCount()):
+ curPlayer = playerManager.OnlineAt(i)
+ if not GameWorld.IsNormalPlayer(curPlayer):
+ continue
+ PlayerEventCounter.PlayerOnCrossCenterEvent(curPlayer, centerEventValue, gmEvent=gmEvent)
+
return isEvent
def __CheckIpyDataRecycle(timeNow):
--
Gitblit v1.8.0