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