From b3c6d36f5ae851f09a3c2e73494ff19956b06fb0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 11 四月 2025 16:56:14 +0800
Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(跨服仙盟支持;后台查询区服仙盟支持;活动时间流程支持;攻城战主活动功能完整流程:公示、分组、战备、战斗、榜单、竞猜、领奖等;)

---
 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/CreateFamily.py |  146 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 143 insertions(+), 3 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/CreateFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/CreateFamily.py
index 0d572b6..5382fb2 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/CreateFamily.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/CreateFamily.py
@@ -18,7 +18,10 @@
 import ShareDefine
 import PlayerFamily
 import GameWorldFamilyWar
+import IPY_GameServer
+import random
 
+FackFamilyIDStart = 1000000000
 
 ## 执行逻辑
 #  @param curPlayer 当前玩家
@@ -27,11 +30,17 @@
 def OnExec(curPlayer, gmList):
     
     if not gmList:
-        GameWorld.DebugAnswer(curPlayer, "CreatFamily 创建假仙盟个数 可选参数(仙盟等级 是否设置联赛名次)")
-        GameWorld.DebugAnswer(curPlayer, "删除创建的假仙盟: CreatFamily 0")
+        GameWorld.DebugAnswer(curPlayer, "创建跨服假仙盟: CreatFamily c 个数 [总战力 ServerID 等级 成员数]")
+        GameWorld.DebugAnswer(curPlayer, "删除跨服假仙盟: CreatFamily c 0")
+        GameWorld.DebugAnswer(curPlayer, "创建本服假仙盟: CreatFamily 个数 [等级 设置联赛名次]")
+        GameWorld.DebugAnswer(curPlayer, "删除本服假仙盟: CreatFamily 0")
         return
     
-    creatCount = gmList[0]
+    value1 = gmList[0]
+    if value1 == "c":
+        return
+    
+    creatCount = value1
     if creatCount <= 0:
         delFamilyList = []
         familyManager = GameWorld.GetFamilyManager()
@@ -94,4 +103,135 @@
     PlayerFamily.DoFamilySort()
     return
 
+def OnGetMergeParam(curPlayer):
+    return []
+
+def OnMergeServerExec(gmList, tick):
+    ## 跨服执行命令
+    if not gmList:
+        return
+    
+    value1 = gmList[0]
+    if value1 != "c":
+        return
+    
+    value2 = gmList[1] if len(gmList) > 1 else 1 # 默认1个
+    if not value2:
+        __delMergeServerFackFamily()
+        return
+    
+    __createMergeServerFackFamily(gmList)
+    return
+
+def __delMergeServerFackFamily():
+    
+    delCnt = 0
+    familyManager = GameWorld.GetFamilyManager()
+    for i in range(familyManager.GetCount())[::-1]:
+        family = familyManager.GetAt(i)
+        if not family:
+            continue
+        if family.GetID() >= FackFamilyIDStart:
+            familyManager.DelFamily(family.GetID())
+            delCnt += 1
+            
+    GameWorld.DebugAnswer(None, "成功删除跨服假仙盟: %s,剩余:%s" % (delCnt, familyManager.GetCount()))
+    return
+
+def __createMergeServerFackFamily(gmList):
+    ## c 个数 [总战力 ServerID 等级 成员数]
+    
+    creatCount = gmList[1] if len(gmList) > 1 else 1 # 默认1个
+    familyFightPower = gmList[2] if len(gmList) > 2 else 10000000
+    serverID = gmList[3] if len(gmList) > 3 else random.randint(1, 200)
+    familyLV = gmList[4] if len(gmList) > 4 else 1 # 默认1级
+    memberCnt = gmList[5] if len(gmList) > 5 else random.randint(1, 10)
+    
+    FakeFamilyName = "假仙盟".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
+    FakeMemberName = "假成员".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
+    
+    fackFamilyID = FackFamilyIDStart # 跨服假仙盟ID从10亿开始,因为子服的仙盟ID分配是从1开始
+    fackFamilyIDMax = fackFamilyID + 10000 # 限制最大假盟数
+    fackMemID = 1 # 假成员 1~9999
+    fackMemIDMax = 9999
+    fackMemIDList = []
+    createOKCnt = 0
+    familyManager = GameWorld.GetFamilyManager()
+    for _ in range(min(creatCount, 100)):
+        
+        fackFamily = familyManager.FindFamily(fackFamilyID)
+        while fackFamily and fackFamilyID < fackFamilyIDMax:
+            for m in xrange(fackFamily.GetCount()):
+                member = fackFamily.GetAt(m)
+                memID = member.GetPlayerID()
+                if memID and memID not in fackMemIDList:
+                    fackMemIDList.append(memID)
+            fackFamilyID += 1
+            fackFamily = familyManager.FindFamily(fackFamilyID)
+            
+        if fackFamily:
+            break
+        
+        fackFamilyName = "%s%s" % (FakeFamilyName, fackFamilyID)
+        fackFamily = familyManager.AddFamilyEx(fackFamilyName, fackFamilyID)
+        fackFamilyID += 1
+        if not fackFamily:
+            continue
+        
+        fackFamily.SetLV(familyLV)
+        PlayerFamily.SetFamilyTotalFightPower(fackFamily, familyFightPower)
+        PlayerFamily.SetFamilyEmblemID(fackFamily, 1)
+        fackFamily.SetServerID(serverID)
+        
+        GameWorld.DebugLog("创建假仙盟: fackFamilyID=%s,serverID=%s,familyFightPower=%s,memberCnt=%s" 
+                           % (fackFamilyID, serverID, familyFightPower, memberCnt))
+        for _ in range(memberCnt):
+            
+            while fackMemID in fackMemIDList and fackMemID < fackMemIDMax:
+                fackMemID += 1
+                
+            if fackMemID in fackMemIDList:
+                break
+            fackMemName = "%s%s" % (FakeMemberName, fackMemID)
+            
+            member = fackFamily.AddMemberEx(fackMemID)
+            if not member:
+                continue
+            
+            member.SetName(fackMemName)
+            member.SetLV(random.randint(100, 200))
+            member.SetJob(random.randint(1, 2))
+            member.SetOfficialRank(random.randint(1, 20))
+            
+            if not fackFamily.GetLeaderID():
+                member.SetFamilyLV(IPY_GameServer.fmlLeader)
+                fackFamily.SetLeaderID(fackMemID)
+                fackFamily.SetLeaderName(fackMemName)
+                fackFamily.SetLeaderOfficialRank(member.GetOfficialRank())
+                
+            fackMemID += 1
+            
+        # 根据成功创建的成员平均分配总战力
+        memFightPowerTotal = familyFightPower
+        memCnt = fackFamily.GetCount()
+        avgValue = memFightPowerTotal / memCnt
+        for m in range(memCnt):
+            member = fackFamily.GetAt(m)
+            memID = member.GetPlayerID()
+            fmLV = member.GetFamilyLV()
+            if m == memCnt - 1:
+                memFightPower = memFightPowerTotal
+            else:
+                memFightPower = avgValue + memCnt / 2 - m
+                memFightPowerTotal -= memFightPower
+            PlayerFamily.SetMemberFightPower(member, memFightPower)
+            GameWorld.DebugLog("    仙盟成员: memID=%s,memFightPower=%s,fmLV=%s" % (memID, memFightPower, fmLV))
+            
+        createOKCnt += 1
+        familyFightPower += 10000
+        
+    GameWorld.DebugAnswer(None, "成功创建跨服假仙盟: %s,总:%s" % (creatCount, familyManager.GetCount()))
+    return
+
+
 

--
Gitblit v1.8.0