From f2cf64ffabcd15d5497aee8914b8d37d8b9a88b0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 07 二月 2026 15:39:43 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(公会GM命令支持跨服 CreateFamily、Family、Zhenbaoge;跨服公会聊天支持,包含公会聊天缓存;查看玩家A705回包增加公会所在服务器ID信息;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py |   53 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 28 insertions(+), 25 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py
index 8fd4477..0541ea5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py
@@ -4,12 +4,12 @@
 #
 ##@package GM.Commands.Family
 #
-# @todo:仙盟
+# @todo:公会
 # @author hxp
 # @date 2025-10-10
 # @version 1.0
 #
-# 详细描述: 仙盟
+# 详细描述: 公会
 #
 #-------------------------------------------------------------------------------
 #"""Version = 2025-10-10 21:00"""
@@ -23,33 +23,25 @@
 import PlayerFamily
 import CrossPlayer
 import DBDataMgr
-import DBFamily
 import time
 
 def GetGMServerIDList(curPlayer):
     ## 获取命令额外发送到其他服务器,如跨服
     crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
-    GameWorld.DebugAnswer(curPlayer, "本服公会互通跨服ID:%s" % crossServerID)
     if crossServerID:
+        GameWorld.DebugAnswer(curPlayer, "本服公会已互通跨服ID:%s" % crossServerID)
         return [crossServerID]
+    GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
     return []
-
-def OnExecCross(crossPlayer, gmList):
-    ## 跨服执行命令
-    playerID = crossPlayer.GetPlayerID()
-    familyMgr = DBDataMgr.GetFamilyMgr()
-    familyID = familyMgr.GetPlayerFamilyID(playerID)
-    zoneID = familyMgr.GetFamilyZoneID(familyID)
-    GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
-    OnExec(crossPlayer, gmList)
-    return
 
 def OnExec(curPlayer, msgList):
     ## 游戏服执行命令
     
+    isMainServer = GameWorld.IsMainServer()
     if not msgList:
-        if GameWorld.IsCrossServer():
+        if not isMainServer:
             return
+        GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
         GameWorld.DebugAnswer(curPlayer, "设置等级: Family lv 等级 经验")
         GameWorld.DebugAnswer(curPlayer, "设置徽章: Family e 徽章ID [剩余时间秒]")
         GameWorld.DebugAnswer(curPlayer, "设置贡献: Family c 今日贡献 累计贡献 [成员ID]")
@@ -64,8 +56,9 @@
     if not crossPlayer:
         return
     
-    isMainServer = GameWorld.IsMainServer()
     value = msgList[0]
+    
+    # 都在本服执行的
     if value == "l":
         if not isMainServer:
             return
@@ -78,26 +71,33 @@
         GameWorld.DebugAnswer(curPlayer, "设置离开: Info=%s,%s" % (leaveInfo, GameWorld.ChangeTimeNumToStr(leaveTime)))
         return
     
-    if isMainServer and DBFamily.IsFamilyCross():
-        GameWorld.DebugAnswer(curPlayer, "公会已跨服由跨服执行命令")
-        return
-    
+    if isMainServer:
+        crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
+        if crossServerID:
+            # 本服公会已互通不再执行本服命令
+            return
+        
     familyID = crossPlayer.GetFamilyID()
     familyMgr = DBDataMgr.GetFamilyMgr()
     curFamily = familyMgr.FindFamily(familyID) if familyID else None
     if not curFamily:
-        GameWorld.DebugAnswer(crossPlayer, "玩家未加入仙盟!")
+        GameWorld.DebugAnswer(crossPlayer, "玩家未加入公会!")
         return
     
+    if GameWorld.IsCrossServer():
+        zoneID = familyMgr.GetFamilyZoneID(familyID)
+        GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
+        
+    syncMemIDList = []
     if value == "lv":
         lv = msgList[1] if len(msgList) > 1 else 1
         exp = msgList[2] if len(msgList) > 2 else 0
         if not IpyGameDataPY.GetIpyGameData("Family", lv):
-            GameWorld.DebugAnswer(crossPlayer, "仙盟等级不存在: %s" % (lv))
+            GameWorld.DebugAnswer(crossPlayer, "公会等级不存在: %s" % (lv))
             return
         curFamily.SetLV(lv)
         curFamily.SetExp(exp)
-        GameWorld.DebugAnswer(crossPlayer, "设置仙盟等级:%s, exp=%s" % (lv, exp))
+        GameWorld.DebugAnswer(crossPlayer, "设置公会等级:%s, exp=%s" % (lv, exp))
         
     elif value == "e":
         emblemID = msgList[1] if len(msgList) > 1 else 0
@@ -116,7 +116,7 @@
     
     elif value == "n":
         PlayerFamily.SetRenameTime(curFamily, 0)
-        GameWorld.DebugAnswer(crossPlayer, "重置改名CD")
+        GameWorld.DebugAnswer(crossPlayer, "重置公会改名CD")
         
     elif value == "c":
         contribDay = msgList[1] if len(msgList) > 1 else 0
@@ -129,6 +129,7 @@
         member.SetContribDay(contribDay)
         member.SetContribTotal(contribTotal)
         GameWorld.DebugAnswer(crossPlayer, "设置贡献:%s/%s, ID:%s" % (contribDay, contribTotal, memID))
+        syncMemIDList.append(memID)
         
     elif value == "ml":
         memID = msgList[1] if len(msgList) > 1 else 0
@@ -139,6 +140,8 @@
             return
         member.SetOffTime(int(time.time()) - logoutMinutes * 60)
         GameWorld.DebugAnswer(crossPlayer, "成员ID:%s,离线时间:%s" % (memID, GameWorld.ChangeTimeNumToStr(member.GetOffTime())))
+        syncMemIDList.append(memID)
         
-    PlayerFamily.Sync_FamilyInfo(crossPlayer)
+    isSyncMem = True if syncMemIDList else False
+    PlayerFamily.Sync_FamilyInfo(crossPlayer, syncMemIDList=syncMemIDList, isSyncMem=isSyncMem)
     return

--
Gitblit v1.8.0