| | |
| | | #
|
| | | ##@package GM.Commands.CreateFamily
|
| | | #
|
| | | # @todo:创建假仙盟
|
| | | # @todo:创建假公会
|
| | | # @author hxp
|
| | | # @date 2025-05-09
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 创建假仙盟
|
| | | # 详细描述: 创建假公会
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-05-09 12:20"""
|
| | |
| | | import PlayerViewCache
|
| | | import IPY_PlayerDefine
|
| | | import PlayerFamily
|
| | | import CrossPlayer
|
| | | import DBDataMgr
|
| | | import random
|
| | |
|
| | | ## 执行逻辑
|
| | | # @param curPlayer 当前玩家
|
| | | # @param gmList []
|
| | | # @return None
|
| | | def GetGMServerIDList(curPlayer):
|
| | | ## 获取命令额外发送到其他服务器,如跨服
|
| | | crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
|
| | | #GameWorld.DebugAnswer(curPlayer, "GetGMServerIDList: %s" % crossServerID)
|
| | | if crossServerID:
|
| | | return [crossServerID]
|
| | | return []
|
| | |
|
| | | def OnExecCross(crossPlayer, gmList):
|
| | | ## 跨服执行命令
|
| | | GameWorld.DebugLog("OnExecCross %s" % gmList, crossPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def OnExec(curPlayer, gmList):
|
| | | ## 游戏服执行命令
|
| | |
|
| | | if not gmList:
|
| | | #GameWorld.DebugAnswer(curPlayer, "创建跨服假仙盟: CreatFamily c 个数 [总战力 ServerID 等级 成员数]")
|
| | | #GameWorld.DebugAnswer(curPlayer, "删除跨服假仙盟: CreatFamily c 0")
|
| | | 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 j [申请数 仙盟ID]")
|
| | | GameWorld.DebugAnswer(curPlayer, "添加本盟成员: CreatFamily m 人数 [仙盟ID]")
|
| | | 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
|
| | | |
| | | crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
|
| | | if not crossPlayer:
|
| | | #GameWorld.DebugAnswer(curPlayer, "找不到crossPlayer")
|
| | | return
|
| | |
|
| | | value1 = gmList[0]
|
| | | if value1 == "c":
|
| | | # 跨服命令
|
| | | return
|
| | | |
| | | if value1 == "pl":
|
| | | __printFamilyList(curPlayer, gmList)
|
| | | return
|
| | |
| | | __printFamilyInfo(curPlayer, gmList)
|
| | | return
|
| | |
|
| | | if value1 == "j":
|
| | | if value1 == "sq":
|
| | | __addFackRequestJoin(curPlayer, gmList)
|
| | | return
|
| | |
|
| | | if value1 == "m":
|
| | | __addFackMember(curPlayer, gmList)
|
| | | __addFackMember(curPlayer, gmList, crossPlayer)
|
| | | return
|
| | |
|
| | | creatCount = value1
|
| | |
| | | __createFackFamily(curPlayer, gmList)
|
| | | return
|
| | |
|
| | | def __addFackMember(curPlayer, gmList):
|
| | | def __addFackMember(curPlayer, gmList, crossPlayer):
|
| | | memCnt = gmList[1] if len(gmList) > 1 else 1
|
| | | familyID = gmList[2] if len(gmList) > 2 else curPlayer.GetFamilyID()
|
| | |
|
| | | familyMgr = DBDataMgr.GetFamilyMgr()
|
| | | curFamily = familyMgr.FindFamily(familyID)
|
| | | if not curFamily:
|
| | | GameWorld.DebugAnswer(curPlayer, "没有该仙盟: %s" % familyID)
|
| | | GameWorld.DebugAnswer(curPlayer, "没有该公会: %s" % familyID)
|
| | | return
|
| | |
|
| | | MemberMax = PlayerFamily.GetFamilySetting(curFamily.GetLV(), "MemberMax")
|
| | |
| | | return
|
| | | memCnt = min(memCnt, MemberMax - curFamily.GetCount())
|
| | |
|
| | | curZoneMgr = familyMgr.GetZoneFamilyMgrByFamilyID(familyID)
|
| | | if not curZoneMgr:
|
| | | return
|
| | | |
| | | fackIDStart = 0
|
| | | for i in range(0, familyMgr.GetCount()):
|
| | | family = familyMgr.GetAt(i)
|
| | | for index in xrange(family.GetCount()):
|
| | | member = family.GetAt(index)
|
| | | memID = member.GetPlayerID()
|
| | | if memID > ShareDefine.FackPlayerIDMax:
|
| | | continue
|
| | | fackIDStart = max(memID, fackIDStart)
|
| | | for zoneID in familyMgr.GetZoneIDListThisServer():
|
| | | zoneMgr = familyMgr.GetZoneFamilyMgr(zoneID)
|
| | | for i in range(0, zoneMgr.GetCount()):
|
| | | family = zoneMgr.GetAt(i)
|
| | | for index in xrange(family.GetCount()):
|
| | | member = family.GetAt(index)
|
| | | memID = member.GetPlayerID()
|
| | | if memID > ShareDefine.FackPlayerIDMax:
|
| | | continue
|
| | | fackIDStart = max(memID, fackIDStart)
|
| | |
|
| | | addCnt = 0
|
| | | for i in range(memCnt):
|
| | |
| | | PlayerFamily.DoPlayerJionFamily(curFamily, fackID, None, broadcastFamilyChange=False)
|
| | | addCnt += 1
|
| | |
|
| | | familyMgr.Sort()
|
| | | PlayerFamily.Sync_FamilyInfo(curPlayer)
|
| | | curZoneMgr.Sort()
|
| | | PlayerFamily.Sync_FamilyInfo(crossPlayer)
|
| | | GameWorld.DebugAnswer(curPlayer, "增加成员数:%s, 总成员:%s" % (addCnt, curFamily.GetCount()))
|
| | | return
|
| | |
|
| | |
| | | familyMgr = DBDataMgr.GetFamilyMgr()
|
| | | family = familyMgr.FindFamily(familyID)
|
| | | if not family:
|
| | | GameWorld.DebugAnswer(curPlayer, "没有该仙盟: %s" % familyID)
|
| | | GameWorld.DebugAnswer(curPlayer, "没有该公会: %s" % familyID)
|
| | | return
|
| | |
|
| | | reqCnt = min(reqCnt, 100)
|
| | |
| | | for fackID in fackIDList:
|
| | | if fackID in reqDict:
|
| | | continue
|
| | | if familyMgr.GetPlayerFamilyID(fackID):
|
| | | continue
|
| | | family.AddReqJoinPlayerID(fackID)
|
| | | addCnt += 1
|
| | | if addCnt >= reqCnt:
|
| | | break
|
| | | # 广播给有招人权限的
|
| | | clientPack = PlayerFamily.GetPack_FamilyReqJoinInfo(familyID)
|
| | | PlayerFamily.Broadcast_FamilyPack(familyID, clientPack, PlayerFamily.FamilyPowerID_Call)
|
| | | PlayerFamily.SendFamilyReqJoinInfo(familyID)
|
| | | GameWorld.DebugAnswer(curPlayer, "增加申请数:%s, 总申请:%s" % (addCnt, len(family.GetReqJoinPlayerInfo())))
|
| | | return
|
| | |
|
| | | def __printFamilyList(curPlayer, gmList):
|
| | | printCnt = gmList[1] if len(gmList) > 1 else 100
|
| | | printCnt = gmList[1] if len(gmList) > 1 else 20
|
| | | fromIndex = gmList[2] if len(gmList) > 2 else 0
|
| | |
|
| | | printAnswerCnt = 0
|
| | | familyMgr = DBDataMgr.GetFamilyMgr()
|
| | | familyMgr.Sort()
|
| | | familyCnt = familyMgr.GetCount()
|
| | | GameWorld.DebugAnswer(curPlayer, "----- 仙盟总数: %s -----" % (familyCnt))
|
| | | for index in range(fromIndex, fromIndex + printCnt):
|
| | | if index >= familyCnt:
|
| | | break
|
| | | family = familyMgr.GetAt(index)
|
| | | rank = index + 1
|
| | | |
| | | 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)
|
| | | else:
|
| | | GameWorld.DebugLog(text)
|
| | | zoneIDList = familyMgr.GetZoneIDListThisServer()
|
| | | for zoneID in zoneIDList:
|
| | | zoneMgr = familyMgr.GetZoneFamilyMgr(zoneID)
|
| | | zoneMgr.Sort()
|
| | | familyCnt = zoneMgr.GetCount()
|
| | | GameWorld.DebugAnswer(curPlayer, "----- 【分区%s】公会总数: %s -----" % (zoneID, familyCnt))
|
| | | for index in range(fromIndex, fromIndex + printCnt):
|
| | | if index >= familyCnt:
|
| | | break
|
| | | family = zoneMgr.GetAt(index)
|
| | | rank = index + 1
|
| | | |
| | | 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)
|
| | | else:
|
| | | GameWorld.DebugLog(text)
|
| | |
|
| | | return
|
| | |
|
| | |
| | | familyMgr = DBDataMgr.GetFamilyMgr()
|
| | | family = familyMgr.FindFamily(familyID)
|
| | | if not family:
|
| | | GameWorld.DebugAnswer(curPlayer, "仙盟不存在: %s" % familyID)
|
| | | GameWorld.DebugAnswer(curPlayer, "公会不存在: %s" % familyID)
|
| | | return
|
| | |
|
| | | zoneID = familyMgr.GetFamilyZoneID(familyID)
|
| | | GameWorld.DebugAnswer(curPlayer, "----- 【%s】 -----" % (GameWorld.CodeToGbk(family.GetName())))
|
| | | GameWorld.DebugAnswer(curPlayer, "仙盟ID:%s, ServerID:%s" % (familyID, family.GetServerID()))
|
| | | 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())))
|
| | |
| | |
|
| | | delCnt = 0
|
| | | familyMgr = DBDataMgr.GetFamilyMgr()
|
| | | for index in range(familyMgr.GetCount())[::-1]:
|
| | | family = familyMgr.GetAt(index)
|
| | | familyID = family.GetID()
|
| | | for familyID in familyMgr.GetFamilyIDList():
|
| | | if familyID > ShareDefine.FackFamilyIDMax:
|
| | | continue
|
| | | familyMgr.DelFamily(family.GetID())
|
| | | delCnt += 1
|
| | | familyMgr.DelFamily(familyID)
|
| | |
|
| | | if curPlayer:
|
| | | GameWorld.DebugAnswer(curPlayer, "删除假仙盟数: %s,剩余:%s" % (delCnt, familyMgr.GetCount()))
|
| | | elif GameWorld.IsCrossServer():
|
| | | GameWorld.DebugAnswer(None, "删除跨服假仙盟: %s,剩余:%s" % (delCnt, familyMgr.GetCount()))
|
| | | remainCnt = len(familyMgr.GetFamilyIDList())
|
| | | GameWorld.DebugAnswer(curPlayer, "删除假公会数: %s,剩余:%s" % (delCnt, remainCnt))
|
| | | return
|
| | |
|
| | | def __createFackFamily(curPlayer, gmList):
|
| | |
| | |
|
| | | creatCount = gmList[0] if len(gmList) > 0 else 1 # 默认1个
|
| | | familyFightPower = gmList[1] if len(gmList) > 1 else 10000000
|
| | | serverID = gmList[2] if len(gmList) > 2 else random.randint(1, 200)
|
| | | serverID = gmList[2] if len(gmList) > 2 else GameWorld.GetGameWorld().GetServerID() #random.randint(1, 200)
|
| | | familyLV = gmList[3] if len(gmList) > 3 else 1 # 默认1级
|
| | | memberCnt = gmList[4] if len(gmList) > 4 else random.randint(1, 10)
|
| | | joinReview = gmList[5] if len(gmList) > 5 else 1
|
| | |
| | | fackFamily.SetJoinReview(joinReview) # 设置需要审核
|
| | | fackFamily.SetJoinLVMin(joinLVMin) # 官职
|
| | |
|
| | | GameWorld.DebugLog("创建假仙盟: fackFamilyID=%s,serverID=%s,familyFightPower=%s,memberCnt=%s" |
| | | GameWorld.DebugLog("创建假公会: fackFamilyID=%s,serverID=%s,familyFightPower=%s,memberCnt=%s" |
| | | % (fackFamilyID, serverID, familyFightPower, memberCnt))
|
| | | for _ in range(memberCnt):
|
| | |
|
| | |
| | | memFightPowerTotal -= memFightPower
|
| | | viewCache = PlayerViewCache.FindViewCache(memID)
|
| | | viewCache.SetFightPowerTotal(memFightPower)
|
| | | GameWorld.DebugLog(" 仙盟成员: memID=%s,memFightPower=%s,fmLV=%s" % (memID, memFightPower, fmLV))
|
| | | GameWorld.DebugLog(" 公会成员: memID=%s,memFightPower=%s,fmLV=%s" % (memID, memFightPower, fmLV))
|
| | | member.RefreshMemberByID(memID)
|
| | |
|
| | | createOKCnt += 1
|
| | | familyFightPower += 10000
|
| | |
|
| | | familyMgr.Sort()
|
| | | if curPlayer:
|
| | | GameWorld.DebugAnswer(curPlayer, "成功创建假仙盟: %s,剩余:%s" % (creatCount, familyMgr.GetCount()))
|
| | | elif GameWorld.IsCrossServer():
|
| | | GameWorld.DebugAnswer(None, "成功创建跨服假仙盟: %s,总:%s" % (creatCount, familyMgr.GetCount()))
|
| | | GameWorld.DebugAnswer(curPlayer, "成功创建假公会: %s,总:%s" % (creatCount, len(familyMgr.GetFamilyIDList())))
|
| | | return
|