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/CreateFamily.py |  167 ++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 116 insertions(+), 51 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py
index 087b9c0..8f00d0d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py
@@ -27,70 +27,135 @@
 def GetGMServerIDList(curPlayer):
     ## 获取命令额外发送到其他服务器,如跨服
     crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
-    #GameWorld.DebugAnswer(curPlayer, "GetGMServerIDList: %s" % crossServerID)
     if crossServerID:
+        GameWorld.DebugAnswer(curPlayer, "本服公会已互通跨服ID:%s" % crossServerID)
         return [crossServerID]
+    GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
     return []
 
 def OnExecCross(crossPlayer, gmList):
-    ## 跨服执行命令
-    GameWorld.DebugLog("OnExecCross %s" % gmList, crossPlayer.GetPlayerID())
+    if not gmList:
+        return
+    if GameWorld.IsMainServer() and DBDataMgr.GetFamilyMgr().GetCurCrossServerID():
+        # 本服公会已互通不再执行本服命令
+        return
+    
+    playerID = crossPlayer.GetPlayerID()
+    familyMgr = DBDataMgr.GetFamilyMgr()
+    familyID = familyMgr.GetPlayerFamilyID(playerID)
+    zoneID = familyMgr.GetFamilyZoneID(familyID)
+    if GameWorld.IsCrossServer():
+        GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
+        
+    value1 = gmList[0]
+    if value1 == "pl":
+        __printFamilyList(crossPlayer, gmList)
+        return
+    
+    if value1 == "pf":
+        __printFamilyInfo(crossPlayer, gmList)
+        return
+    
+    if value1 == "sq":
+        __addFackRequestJoin(crossPlayer, gmList)
+        return
+    
+    if value1 == "m":
+        __addFackMember(crossPlayer, gmList)
+        return
+    
+    if value1 == "ds":
+        __delServerMember(crossPlayer, gmList)
+        return
+    
+    creatCount = value1
+    if creatCount <= 0:
+        __delFackFamily(crossPlayer, gmList)
+        return
+    elif isinstance(creatCount, int) and creatCount > 0:
+        __createFackFamily(crossPlayer, gmList)
     return
 
 def OnExec(curPlayer, gmList):
     ## 游戏服执行命令
-    
     if not gmList:
+        GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
         GameWorld.DebugAnswer(curPlayer, "创建假人公会: CreatFamily 个数 [总战力 ServerID 等级 成员数  是否审核 官职限制]")
         GameWorld.DebugAnswer(curPlayer, "删除假人公会: CreatFamily 0")
         GameWorld.DebugAnswer(curPlayer, "输出公会列表: CreatFamily pl [条数 从第x名]")
         GameWorld.DebugAnswer(curPlayer, "输出公会明细: CreatFamily pf 公会ID")
         GameWorld.DebugAnswer(curPlayer, "添加假申请人: CreatFamily sq [申请数 公会ID]")
         GameWorld.DebugAnswer(curPlayer, "添加公会成员: CreatFamily m 人数 [公会ID]")
+        GameWorld.DebugAnswer(curPlayer, "踢出区服成员: CreatFamily ds 服务器ID")
+        GameWorld.DebugAnswer(curPlayer, "删除本服公会: CreatFamily df")
+        GameWorld.DebugAnswer(curPlayer, "重置互通状态: CreatFamily c")
         return
     
     crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
     if not crossPlayer:
-        #GameWorld.DebugAnswer(curPlayer, "找不到crossPlayer")
         return
     
     value1 = gmList[0]
-    if value1 == "pl":
-        __printFamilyList(curPlayer, gmList)
+    if value1 == "df":
+        __delFackFamily(curPlayer, [0, 1])
         return
     
-    if value1 == "pf":
-        __printFamilyInfo(curPlayer, gmList)
+    if value1 == "c":
+        if not GameWorld.IsMainServer():
+            return
+        if not DBDataMgr.GetFamilyMgr().GetCurCrossServerID():
+            GameWorld.DebugAnswer(curPlayer, "本服未互通")
+            return
+        DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_FamilyCrossState, 0)
+        DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_FamilyTransDataTime, 0)
+        GameWorld.DebugAnswer(curPlayer, "已重置互通状态请重登或重启服务器")
         return
     
-    if value1 == "sq":
-        __addFackRequestJoin(curPlayer, gmList)
-        return
-    
-    if value1 == "m":
-        __addFackMember(curPlayer, gmList, crossPlayer)
-        return
-    
-    creatCount = value1
-    if creatCount <= 0:
-        __delFackFamily(curPlayer)
-        return
-    __createFackFamily(curPlayer, gmList)
+    OnExecCross(crossPlayer, gmList)
     return
 
-def __addFackMember(curPlayer, gmList, crossPlayer):
+def __delServerMember(crossPlayer, gmList):
+    delServerID = gmList[1] if len(gmList) > 1 else 1
+    GameWorld.DebugAnswer(crossPlayer, "踢出指定区服成员!delServerID=%s" % delServerID)
+    delCnt, delFamilyCnt = 0, 0
+    familyMgr = DBDataMgr.GetFamilyMgr()
+    for familyID in familyMgr.GetFamilyIDList():
+        family = familyMgr.FindFamily(familyID)
+        for index in range(family.GetCount())[::-1]:
+            member = family.GetAt(index)
+            memID = member.GetPlayerID()
+            if member.GetServerID() != delServerID:
+                continue
+            if member.GetFmLV() == IPY_PlayerDefine.fmlLeader:
+                GameWorld.DebugAnswer(crossPlayer, "踢出区服成员是会长直接删公会!%s" % familyID)
+                familyMgr.DelFamily(familyID)
+                delFamilyCnt += 1
+                break
+            GameWorld.DebugAnswer(crossPlayer, "踢出区服成员!ID=%s,ServerID=%s" % (memID, delServerID))
+            family.DeleteMember(memID)
+            delCnt += 1
+    if not delCnt and not delFamilyCnt:
+        GameWorld.DebugAnswer(crossPlayer, "没有该区服成员了")
+    else:
+        GameWorld.DebugAnswer(crossPlayer, "踢出成员数:%s" % delCnt)
+        if delFamilyCnt:
+            GameWorld.DebugAnswer(crossPlayer, "删除公会数:%s" % delFamilyCnt)
+        GameWorld.DebugAnswer(crossPlayer, "请正常关服重启测试!")
+    return
+
+def __addFackMember(crossPlayer, gmList):
     memCnt = gmList[1] if len(gmList) > 1 else 1
-    familyID = gmList[2] if len(gmList) > 2 else curPlayer.GetFamilyID()
+    familyID = gmList[2] if len(gmList) > 2 else crossPlayer.GetFamilyID()
     
     familyMgr = DBDataMgr.GetFamilyMgr()
     curFamily = familyMgr.FindFamily(familyID)
     if not curFamily:
-        GameWorld.DebugAnswer(curPlayer, "没有该公会: %s" % familyID)
+        GameWorld.DebugAnswer(crossPlayer, "没有该公会: %s" % familyID)
         return
     
     MemberMax = PlayerFamily.GetFamilySetting(curFamily.GetLV(), "MemberMax")
     if curFamily.GetCount() >= MemberMax:
-        GameWorld.DebugAnswer(curPlayer, "成员已满: %s" % MemberMax)
+        GameWorld.DebugAnswer(crossPlayer, "成员已满: %s" % MemberMax)
         return
     memCnt = min(memCnt, MemberMax - curFamily.GetCount())
     
@@ -120,17 +185,17 @@
         
     curZoneMgr.Sort()
     PlayerFamily.Sync_FamilyInfo(crossPlayer)
-    GameWorld.DebugAnswer(curPlayer, "增加成员数:%s, 总成员:%s" % (addCnt, curFamily.GetCount()))
+    GameWorld.DebugAnswer(crossPlayer, "增加成员数:%s, 总成员:%s" % (addCnt, curFamily.GetCount()))
     return
 
-def __addFackRequestJoin(curPlayer, gmList):
+def __addFackRequestJoin(crossPlayer, gmList):
     reqCnt = gmList[1] if len(gmList) > 1 else 1
-    familyID = gmList[2] if len(gmList) > 2 else curPlayer.GetFamilyID()
+    familyID = gmList[2] if len(gmList) > 2 else crossPlayer.GetFamilyID()
     
     familyMgr = DBDataMgr.GetFamilyMgr()
     family = familyMgr.FindFamily(familyID)
     if not family:
-        GameWorld.DebugAnswer(curPlayer, "没有该公会: %s" % familyID)
+        GameWorld.DebugAnswer(crossPlayer, "没有该公会: %s" % familyID)
         return
     
     reqCnt = min(reqCnt, 100)
@@ -149,10 +214,10 @@
             break
     # 广播给有招人权限的
     PlayerFamily.SendFamilyReqJoinInfo(familyID)
-    GameWorld.DebugAnswer(curPlayer, "增加申请数:%s, 总申请:%s" % (addCnt, len(family.GetReqJoinPlayerInfo())))
+    GameWorld.DebugAnswer(crossPlayer, "增加申请数:%s, 总申请:%s" % (addCnt, len(family.GetReqJoinPlayerInfo())))
     return
 
-def __printFamilyList(curPlayer, gmList):
+def __printFamilyList(crossPlayer, gmList):
     printCnt = gmList[1] if len(gmList) > 1 else 20
     fromIndex = gmList[2] if len(gmList) > 2 else 0
     
@@ -163,7 +228,7 @@
         zoneMgr = familyMgr.GetZoneFamilyMgr(zoneID)
         zoneMgr.Sort()
         familyCnt = zoneMgr.GetCount()
-        GameWorld.DebugAnswer(curPlayer, "----- 【分区%s】公会总数: %s -----" % (zoneID, familyCnt))
+        GameWorld.DebugAnswer(crossPlayer, "----- 【分区%s】公会总数: %s -----" % (zoneID, familyCnt))
         for index in range(fromIndex, fromIndex + printCnt):
             if index >= familyCnt:
                 break
@@ -173,52 +238,52 @@
             text = "%s,ID:%s,LV:%s,战:%s,成:%s,审:%s,官:%s" % (rank, family.GetID(), family.GetLV(), family.GetFightPowerTotal(), family.GetCount(), family.GetJoinReview(), family.GetJoinLVMin())
             printAnswerCnt += 1
             if printAnswerCnt <= 100:
-                GameWorld.DebugAnswer(curPlayer, text)
+                GameWorld.DebugAnswer(crossPlayer, text)
             else:
                 GameWorld.DebugLog(text)
             
     return
 
-def __printFamilyInfo(curPlayer, gmList):
-    familyID = gmList[1] if len(gmList) > 1 else curPlayer.GetFamilyID()
+def __printFamilyInfo(crossPlayer, gmList):
+    familyID = gmList[1] if len(gmList) > 1 else crossPlayer.GetFamilyID()
     
     familyMgr = DBDataMgr.GetFamilyMgr()
     family = familyMgr.FindFamily(familyID)
     if not family:
-        GameWorld.DebugAnswer(curPlayer, "公会不存在: %s" % familyID)
+        GameWorld.DebugAnswer(crossPlayer, "公会不存在: %s" % familyID)
         return
     
     zoneID = familyMgr.GetFamilyZoneID(familyID)
-    GameWorld.DebugAnswer(curPlayer, "----- 【%s】 -----" % (GameWorld.CodeToGbk(family.GetName())))
-    GameWorld.DebugAnswer(curPlayer, "公会ID:%s, ServerID:%s, 分区:%s" % (familyID, family.GetServerID(), zoneID))
-    GameWorld.DebugAnswer(curPlayer, "LV:%s, Exp:%s" % (family.GetLV(), family.GetExp()))
-    GameWorld.DebugAnswer(curPlayer, "审核:%s, 官职条件:%s, 申请数:%s" % (family.GetJoinReview(), family.GetJoinLVMin(), len(family.GetReqJoinPlayerInfo())))
-    GameWorld.DebugAnswer(curPlayer, "战旗:%s, 旗号【%s】" % (family.GetEmblemID(), GameWorld.CodeToGbk(family.GetEmblemWord())))
-    GameWorld.DebugAnswer(curPlayer, "总战力:%s, 人数:%s" % (family.GetFightPowerTotal(), family.GetCount()))
-    GameWorld.DebugAnswer(curPlayer, "盟主ID:%s" % (family.GetLeaderID()))
+    GameWorld.DebugAnswer(crossPlayer, "----- 【%s】 -----" % (GameWorld.CodeToGbk(family.GetName())))
+    GameWorld.DebugAnswer(crossPlayer, "公会ID:%s, ServerID:%s, 分区:%s" % (familyID, family.GetServerID(), zoneID))
+    GameWorld.DebugAnswer(crossPlayer, "LV:%s, Exp:%s" % (family.GetLV(), family.GetExp()))
+    GameWorld.DebugAnswer(crossPlayer, "审核:%s, 官职条件:%s, 申请数:%s" % (family.GetJoinReview(), family.GetJoinLVMin(), len(family.GetReqJoinPlayerInfo())))
+    GameWorld.DebugAnswer(crossPlayer, "战旗:%s, 旗号【%s】" % (family.GetEmblemID(), GameWorld.CodeToGbk(family.GetEmblemWord())))
+    GameWorld.DebugAnswer(crossPlayer, "总战力:%s, 人数:%s" % (family.GetFightPowerTotal(), family.GetCount()))
+    GameWorld.DebugAnswer(crossPlayer, "盟主ID:%s" % (family.GetLeaderID()))
     for index in range(family.GetCount()):
         member = family.GetAt(index)
         playerID = member.GetPlayerID()
         fightPower = member.GetFightPowerTotal()
-        GameWorld.DebugAnswer(curPlayer, "%s,ID:%s,职位:%s,战力:%s" % (index, playerID, member.GetFmLV(), fightPower))
+        GameWorld.DebugAnswer(crossPlayer, "%s,ID:%s,职位:%s,战力:%s" % (index, playerID, member.GetFmLV(), fightPower))
         
     return
 
-def __delFackFamily(curPlayer):
-    
+def __delFackFamily(crossPlayer, gmList):
+    isAll = gmList[1] if len(gmList) > 1 else 0
     delCnt = 0
     familyMgr = DBDataMgr.GetFamilyMgr()
     for familyID in familyMgr.GetFamilyIDList():
-        if familyID > ShareDefine.FackFamilyIDMax:
+        if not isAll and familyID > ShareDefine.FackFamilyIDMax:
             continue
         delCnt += 1
         familyMgr.DelFamily(familyID)
         
     remainCnt = len(familyMgr.GetFamilyIDList())
-    GameWorld.DebugAnswer(curPlayer, "删除假公会数: %s,剩余:%s" % (delCnt, remainCnt))
+    GameWorld.DebugAnswer(crossPlayer, "删除公会数: %s,剩余:%s" % (delCnt, remainCnt))
     return
 
-def __createFackFamily(curPlayer, gmList):
+def __createFackFamily(crossPlayer, gmList):
     ## 个数 [总战力 ServerID 等级 成员数]
     
     creatCount = gmList[0] if len(gmList) > 0 else 1 # 默认1个
@@ -307,5 +372,5 @@
         createOKCnt += 1
         familyFightPower += 10000
         
-    GameWorld.DebugAnswer(curPlayer, "成功创建假公会: %s,总:%s" % (creatCount, len(familyMgr.GetFamilyIDList())))
+    GameWorld.DebugAnswer(crossPlayer, "成功创建假公会: %s,总:%s" % (creatCount, len(familyMgr.GetFamilyIDList())))
     return

--
Gitblit v1.8.0