From 5fbb5f807ca75fa69fba14ad2563892f08b4588d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 10 二月 2026 18:28:22 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(修复改名没有同步更新名字映射关系bug;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py |  142 ++++++++++++++++++++++++++++++++++-------------
 1 files changed, 103 insertions(+), 39 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 3842ea6..4a95648 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"""
@@ -19,19 +19,115 @@
 import CreateFamily
 import IpyGameDataPY
 import PlayerFamilyEmblem
-import PlayerFamily
-import DBDataMgr
 import PlayerControl
+import PlayerFamily
+import CrossPlayer
+import DBDataMgr
 import time
 
+def GetGMServerIDList(curPlayer):
+    ## 获取命令额外发送到其他服务器,如跨服
+    crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
+    if crossServerID:
+        GameWorld.DebugAnswer(curPlayer, "本服公会已互通跨服ID:%s" % crossServerID)
+        return [crossServerID]
+    GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
+    return []
+
+def OnExecCross(crossPlayer, msgList):
+    if not msgList:
+        return
+    if GameWorld.IsMainServer() and DBDataMgr.GetFamilyMgr().GetCurCrossServerID():
+        # 本服公会已互通不再执行本服命令
+        return
+    
+    familyID = crossPlayer.GetFamilyID()
+    familyMgr = DBDataMgr.GetFamilyMgr()
+    curFamily = familyMgr.FindFamily(familyID) if familyID else None
+    if not curFamily:
+        GameWorld.DebugAnswer(crossPlayer, "玩家未加入公会!")
+        return
+    
+    value = msgList[0]
+    if value == "m":
+        CreateFamily.OnExecCross(crossPlayer, msgList)
+        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))
+            return
+        curFamily.SetLV(lv)
+        curFamily.SetExp(exp)
+        GameWorld.DebugAnswer(crossPlayer, "设置公会等级:%s, exp=%s" % (lv, exp))
+        
+    elif value == "e":
+        emblemID = msgList[1] if len(msgList) > 1 else 0
+        setExpireTimes = msgList[2] if len(msgList) > 2 else None
+        emblemActionObj = PlayerFamilyEmblem.AddFamilyEmblem(curFamily.GetID(), emblemID, setExpireTimes)
+        if not emblemActionObj:
+            GameWorld.DebugAnswer(crossPlayer, "该徽章ID无法添加")
+            return
+        endTime = PlayerFamilyEmblem.GetActionEmblemEndTime(emblemActionObj)
+        GameWorld.DebugAnswer(crossPlayer, "添加徽章(%s)到期:%s" % (emblemID, GameWorld.ChangeTimeNumToStr(endTime)))
+        return
+    
+    elif value == "n":
+        PlayerFamily.SetRenameTime(curFamily, 0)
+        GameWorld.DebugAnswer(crossPlayer, "重置公会改名CD")
+        
+    elif value == "c":
+        contribDay = msgList[1] if len(msgList) > 1 else 0
+        contribTotal = msgList[2] if len(msgList) > 2 else 0
+        memID = msgList[3] if len(msgList) > 3 else crossPlayer.GetPlayerID()
+        member = curFamily.FindMember(memID)
+        if not member:
+            GameWorld.DebugAnswer(crossPlayer, "不存在该成员ID:%s" % memID)
+            return
+        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
+        logoutMinutes = msgList[2] if len(msgList) > 2 else 0
+        member = curFamily.FindMember(memID)
+        if not member:
+            GameWorld.DebugAnswer(crossPlayer, "不存在该成员ID:%s" % memID)
+            return
+        member.SetOffTime(int(time.time()) - logoutMinutes * 60)
+        GameWorld.DebugAnswer(crossPlayer, "成员ID:%s,离线时间:%s" % (memID, GameWorld.ChangeTimeNumToStr(member.GetOffTime())))
+        syncMemIDList.append(memID)
+        
+    isSyncMem = True if syncMemIDList else False
+    PlayerFamily.Sync_FamilyInfo(crossPlayer, syncMemIDList=syncMemIDList, isSyncMem=isSyncMem)
+    return
+
 def OnExec(curPlayer, msgList):
+    ## 游戏服执行命令
     
     if not msgList:
+        GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
         GameWorld.DebugAnswer(curPlayer, "设置等级: Family lv 等级 经验")
         GameWorld.DebugAnswer(curPlayer, "设置徽章: Family e 徽章ID [剩余时间秒]")
+        GameWorld.DebugAnswer(curPlayer, "设置贡献: Family c 今日贡献 累计贡献 [成员ID]")
         GameWorld.DebugAnswer(curPlayer, "设置离开: Family l 主动离开次数 被踢次数 上次是否主动  离开多久了")
-        GameWorld.DebugAnswer(curPlayer, "添加成员: Family m 人数 [仙盟ID]")
-        GameWorld.DebugAnswer(curPlayer, "创建仙盟相关使用命令: CreateFamily")
+        GameWorld.DebugAnswer(curPlayer, "添加成员: Family m 人数 [公会ID]")
+        GameWorld.DebugAnswer(curPlayer, "成员离线: Family ml 成员ID 离线分钟数")
+        GameWorld.DebugAnswer(curPlayer, "重置改名: Family n")
+        GameWorld.DebugAnswer(curPlayer, "创建公会相关使用命令: CreateFamily")
+        return
+    
+    crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
+    if not crossPlayer:
         return
     
     value = msgList[0]
@@ -46,37 +142,5 @@
         GameWorld.DebugAnswer(curPlayer, "设置离开: Info=%s,%s" % (leaveInfo, GameWorld.ChangeTimeNumToStr(leaveTime)))
         return
     
-    familyID = curPlayer.GetFamilyID()
-    familyMgr = DBDataMgr.GetFamilyMgr()
-    curFamily = familyMgr.FindFamily(familyID) if familyID else None
-    if not curFamily:
-        GameWorld.DebugAnswer(curPlayer, "玩家未加入仙盟!")
-        return
-    
-    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(curPlayer, "仙盟等级不存在: %s" % (lv))
-            return
-        curFamily.SetLV(lv)
-        curFamily.SetExp(exp)
-        GameWorld.DebugAnswer(curPlayer, "设置仙盟等级:%s, exp=%s" % (lv, exp))
-        
-    elif value == "e":
-        emblemID = msgList[1] if len(msgList) > 1 else 0
-        setExpireTimes = msgList[2] if len(msgList) > 2 else None
-        emblemActionObj = PlayerFamilyEmblem.AddFamilyEmblem(curFamily.GetID(), emblemID, setExpireTimes)
-        if not emblemActionObj:
-            GameWorld.DebugAnswer(curPlayer, "该徽章ID无法添加")
-            return
-        endTime = PlayerFamilyEmblem.GetActionEmblemEndTime(emblemActionObj)
-        GameWorld.DebugAnswer(curPlayer, "添加徽章(%s)到期:%s" % (emblemID, GameWorld.ChangeTimeNumToStr(endTime)))
-        return
-    
-    elif value == "m":
-        CreateFamily.OnExec(curPlayer, msgList)
-        return
-    
-    PlayerFamily.Sync_FamilyInfo(curPlayer)
+    OnExecCross(crossPlayer, msgList)
     return

--
Gitblit v1.8.0