From c280ced8be799a899efc78b21cc807d435ab6609 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 10 二月 2026 19:34:03 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(退出公会时间根据当前是否互通取对应的本服或跨服时间;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py |  119 +++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 86 insertions(+), 33 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 56f9470..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
@@ -33,37 +33,18 @@
     GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
     return []
 
-def OnExec(curPlayer, gmList):
-    ## 游戏服执行命令
-    
-    isMainServer = GameWorld.IsMainServer()
+def OnExecCross(crossPlayer, gmList):
     if not gmList:
-        if not isMainServer:
-            return
-        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]")
+        return
+    if GameWorld.IsMainServer() and DBDataMgr.GetFamilyMgr().GetCurCrossServerID():
+        # 本服公会已互通不再执行本服命令
         return
     
-    if isMainServer:
-        crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
-        if crossServerID:
-            # 本服公会已互通不再执行本服命令
-            return
-        
-    crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
-    if not crossPlayer:
-        return
-    
+    playerID = crossPlayer.GetPlayerID()
+    familyMgr = DBDataMgr.GetFamilyMgr()
+    familyID = familyMgr.GetPlayerFamilyID(playerID)
+    zoneID = familyMgr.GetFamilyZoneID(familyID)
     if GameWorld.IsCrossServer():
-        playerID = crossPlayer.GetPlayerID()
-        familyMgr = DBDataMgr.GetFamilyMgr()
-        familyID = familyMgr.GetPlayerFamilyID(playerID)
-        zoneID = familyMgr.GetFamilyZoneID(familyID)
         GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
         
     value1 = gmList[0]
@@ -83,11 +64,83 @@
         __addFackMember(crossPlayer, gmList)
         return
     
+    if value1 == "ds":
+        __delServerMember(crossPlayer, gmList)
+        return
+    
     creatCount = value1
     if creatCount <= 0:
-        __delFackFamily(crossPlayer)
+        __delFackFamily(crossPlayer, gmList)
         return
-    __createFackFamily(crossPlayer, gmList)
+    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:
+        return
+    
+    value1 = gmList[0]
+    if value1 == "df":
+        __delFackFamily(curPlayer, [0, 1])
+        return
+    
+    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
+    
+    OnExecCross(crossPlayer, gmList)
+    return
+
+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):
@@ -216,18 +269,18 @@
         
     return
 
-def __delFackFamily(crossPlayer):
-    
+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(crossPlayer, "删除假公会数: %s,剩余:%s" % (delCnt, remainCnt))
+    GameWorld.DebugAnswer(crossPlayer, "删除公会数: %s,剩余:%s" % (delCnt, remainCnt))
     return
 
 def __createFackFamily(crossPlayer, gmList):

--
Gitblit v1.8.0