| | |
| | | import ShareDefine
|
| | | import PlayerFamily
|
| | | import GameWorldFamilyWar
|
| | | import IPY_GameServer
|
| | | import random
|
| | |
|
| | | FackFamilyIDStart = 1000000000
|
| | |
|
| | | ## 执行逻辑
|
| | | # @param curPlayer 当前玩家
|
| | |
| | | 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()
|
| | |
| | | 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
|
| | |
|
| | |
|
| | |
|