#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GM.Commands.CreateFamily # # @todo:´´½¨¼ÙÏÉÃË # @author hxp # @date 2018-01-12 # @version 1.0 # # ÏêϸÃèÊö: ´´½¨¼ÙÏÉÃË # #------------------------------------------------------------------------------- #"""Version = 2018-01-12 18:00""" #------------------------------------------------------------------------------- import GameWorld import ShareDefine import PlayerFamily import GameWorldFamilyWar import IPY_GameServer import random FackFamilyIDStart = 1000000000 ## Ö´ÐÐÂß¼­ # @param curPlayer µ±Ç°Íæ¼Ò # @param gmList [] # @return None def OnExec(curPlayer, gmList): if not gmList: GameWorld.DebugAnswer(curPlayer, "´´½¨¿ç·þ¼ÙÏÉÃË: CreatFamily c ¸öÊý [×ÜÕ½Á¦ ServerID µÈ¼¶ ³ÉÔ±Êý]") GameWorld.DebugAnswer(curPlayer, "ɾ³ý¿ç·þ¼ÙÏÉÃË: CreatFamily c 0") GameWorld.DebugAnswer(curPlayer, "´´½¨±¾·þ¼ÙÏÉÃË: CreatFamily ¸öÊý [µÈ¼¶ ÉèÖÃÁªÈüÃû´Î]") GameWorld.DebugAnswer(curPlayer, "ɾ³ý±¾·þ¼ÙÏÉÃË: CreatFamily 0") return value1 = gmList[0] if value1 == "c": return creatCount = value1 if creatCount <= 0: delFamilyList = [] familyManager = GameWorld.GetFamilyManager() for i in xrange(familyManager.GetCount()): family = familyManager.GetAt(i) if not family.GetCount(): delFamilyList.append(family) delCnt = len(delFamilyList) for delFamily in delFamilyList: familyID = delFamily.GetID() familyWarRank = PlayerFamily.GetFamilyWarRank(delFamily) familyManager.DelFamily(familyID) GameWorldFamilyWar.OnDeleteFamily(familyID, familyWarRank) PlayerFamily.DoFamilySort() GameWorld.DebugAnswer(curPlayer, "ɾ³ý¼ÙÏÉÃËÊý: %s" % delCnt) return # ÕÒ³ö¼ÙÏÉÃ˵Ä×îµÍÕ½Á¦ maxWarRank = 0 minTotalFightPower = 1000001 familyManager = GameWorld.GetFamilyManager() for i in xrange(familyManager.GetCount()): family = familyManager.GetAt(i) maxWarRank = max(maxWarRank, PlayerFamily.GetFamilyWarRank(family)) if not family.GetCount(): minTotalFightPower = min(minTotalFightPower, PlayerFamily.GetFamilyTotalFightPower(family)) creatTime = GameWorld.GetCurrentDataTimeStr() FakeFamilyName = "¼ÙÏÉÃË".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding()) FakeLeaderName = "¼ÙÃËÖ÷".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding()) succCreatCount = 0 creatCount = min(100, creatCount) familyLV = gmList[1] if len(gmList) > 1 else 1 warRank = gmList[2] if len(gmList) > 2 else 0 familyManager = GameWorld.GetFamilyManager() curCnt = familyManager.GetCount() for i in xrange(curCnt + 1, creatCount + curCnt + 1): familyName = "%s_%s" % (FakeFamilyName, i) curFamily = familyManager.AddFamily(familyName) if curFamily == None: continue succCreatCount += 1 #---´´½¨¼ÙÏÉÃË--- curFamily.SetServerID(GameWorld.GetServerGroupID()) curFamily.SetCreateTime(creatTime) curFamily.SetLV(familyLV) curFamily.SetAcceptJoin(ShareDefine.FamilyAcceptJoin_Refuse) # ÉèÖþܾøÉêÇë curFamily.SetLeaderName("%s%s" % (FakeLeaderName, i)) minTotalFightPower -= 1 PlayerFamily.SetFamilyTotalFightPower(curFamily, minTotalFightPower) if warRank and maxWarRank < (GameWorldFamilyWar.FamilyWar_MaxFamilyCount - GameWorldFamilyWar.FamilyWar_GroupFamilyCount): maxWarRank += 1 PlayerFamily.SetFamilyWarRank(curFamily, maxWarRank) GameWorld.DebugAnswer(curPlayer, "´´½¨¼ÙÏÉÃËÊý: %s" % succCreatCount) 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