#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GM.Commands.CreateFamily # # @todo:´´½¨¼ÙÏÉÃË # @author hxp # @date 2025-05-09 # @version 1.0 # # ÏêϸÃèÊö: ´´½¨¼ÙÏÉÃË # #------------------------------------------------------------------------------- #"""Version = 2025-05-09 12:20""" #------------------------------------------------------------------------------- import GameWorld import ShareDefine import PlayerViewCache import IPY_PlayerDefine import PlayerFamily import DBDataMgr import random ## Ö´ÐÐÂß¼­ # @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 ¸öÊý [×ÜÕ½Á¦ 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]") return value1 = gmList[0] if value1 == "c": # ¿ç·þÃüÁî return if value1 == "pl": __printFamilyList(curPlayer, gmList) return if value1 == "pf": __printFamilyInfo(curPlayer, gmList) return if value1 == "j": __addFackRequestJoin(curPlayer, gmList) return if value1 == "m": __addFackMember(curPlayer, gmList) return creatCount = value1 if creatCount <= 0: __delFackFamily(curPlayer) return __createFackFamily(curPlayer, gmList) return def __addFackMember(curPlayer, gmList): 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) return MemberMax = PlayerFamily.GetFamilySetting(curFamily.GetLV(), "MemberMax") if curFamily.GetCount() >= MemberMax: GameWorld.DebugAnswer(curPlayer, "³ÉÔ±ÒÑÂú: %s" % MemberMax) return memCnt = min(memCnt, MemberMax - curFamily.GetCount()) 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) addCnt = 0 for i in range(memCnt): fackID = fackIDStart + i + 1 if fackID >= ShareDefine.FackPlayerIDMax: break PlayerFamily.DoPlayerJionFamily(curFamily, fackID, None, broadcastFamilyChange=False) addCnt += 1 familyMgr.Sort() PlayerFamily.Sync_FamilyInfo(curPlayer) GameWorld.DebugAnswer(curPlayer, "Ôö¼Ó³ÉÔ±Êý:%s, ×ܳÉÔ±:%s" % (addCnt, curFamily.GetCount())) return def __addFackRequestJoin(curPlayer, gmList): reqCnt = gmList[1] if len(gmList) > 1 else 1 familyID = gmList[2] if len(gmList) > 2 else curPlayer.GetFamilyID() familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: GameWorld.DebugAnswer(curPlayer, "ûÓиÃÏÉÃË: %s" % familyID) return reqCnt = min(reqCnt, 100) fackIDList = range(1, 200) random.shuffle(fackIDList) addCnt = 0 reqDict = family.GetReqJoinPlayerInfo() for fackID in fackIDList: if fackID in reqDict: continue family.AddReqJoinPlayerID(fackID) addCnt += 1 if addCnt >= reqCnt: break # ¹ã²¥¸øÓÐÕÐÈËȨÏÞµÄ clientPack = PlayerFamily.GetPack_FamilyReqJoinInfo(familyID) PlayerFamily.Broadcast_FamilyPack(familyID, clientPack, PlayerFamily.FamilyPowerID_Call) GameWorld.DebugAnswer(curPlayer, "Ôö¼ÓÉêÇëÊý:%s, ×ÜÉêÇë:%s" % (addCnt, len(family.GetReqJoinPlayerInfo()))) return def __printFamilyList(curPlayer, gmList): printCnt = gmList[1] if len(gmList) > 1 else 100 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) return def __printFamilyInfo(curPlayer, gmList): familyID = gmList[1] if len(gmList) > 1 else curPlayer.GetFamilyID() familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: GameWorld.DebugAnswer(curPlayer, "ÏÉÃ˲»´æÔÚ: %s" % familyID) return GameWorld.DebugAnswer(curPlayer, "----- ¡¾%s¡¿ -----" % (GameWorld.CodeToGbk(family.GetName()))) GameWorld.DebugAnswer(curPlayer, "ÏÉÃËID:%s, ServerID:%s" % (familyID, family.GetServerID())) 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()))) GameWorld.DebugAnswer(curPlayer, "×ÜÕ½Á¦:%s, ÈËÊý:%s" % (family.GetFightPowerTotal(), family.GetCount())) GameWorld.DebugAnswer(curPlayer, "ÃËÖ÷ID:%s" % (family.GetLeaderID())) for index in range(family.GetCount()): member = family.GetAt(index) playerID = member.GetPlayerID() fightPower = member.GetFightPowerTotal() GameWorld.DebugAnswer(curPlayer, "%s,ID:%s,ְλ:%s,Õ½Á¦:%s" % (index, playerID, member.GetFmLV(), fightPower)) return def __delFackFamily(curPlayer): delCnt = 0 familyMgr = DBDataMgr.GetFamilyMgr() for index in range(familyMgr.GetCount())[::-1]: family = familyMgr.GetAt(index) familyID = family.GetID() if familyID > ShareDefine.FackFamilyIDMax: continue familyMgr.DelFamily(family.GetID()) if curPlayer: GameWorld.DebugAnswer(curPlayer, "ɾ³ý¼ÙÏÉÃËÊý: %s,Ê£Óà:%s" % (delCnt, familyMgr.GetCount())) elif GameWorld.IsCrossServer(): GameWorld.DebugAnswer(None, "ɾ³ý¿ç·þ¼ÙÏÉÃË: %s,Ê£Óà:%s" % (delCnt, familyMgr.GetCount())) return def __createFackFamily(curPlayer, gmList): ## ¸öÊý [×ÜÕ½Á¦ ServerID µÈ¼¶ ³ÉÔ±Êý] 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) 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 joinLVMin = gmList[6] if len(gmList) > 6 else random.randint(1, 10) FakeFamilyName = GameWorld.GbkToCode("ÉñÃØ¾üÍÅ") FakeEmblemWord = GameWorld.GbkToCode("Éñ") fackFamilyID = ShareDefine.FackFamilyIDStart fackMemID = ShareDefine.FackPlayerIDStart fackMemIDMax = ShareDefine.FackPlayerIDMax fackMemIDList = [] createOKCnt = 0 familyMgr = DBDataMgr.GetFamilyMgr() for _ in range(min(creatCount, 100)): fackFamily = familyMgr.FindFamily(fackFamilyID) while fackFamily and fackFamilyID < ShareDefine.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 = familyMgr.FindFamily(fackFamilyID) if fackFamily: break fackFamilyName = "%s%s" % (FakeFamilyName, fackFamilyID) fackFamily = familyMgr.AddFamily(fackFamilyName, serverID, fackFamilyID) fackFamilyID += 1 if not fackFamily: continue fackFamily.SetLV(familyLV) fackFamily.SetFightPowerTotal(familyFightPower) fackFamily.SetEmblemID(1) fackFamily.SetEmblemWord(FakeEmblemWord) fackFamily.SetJoinReview(joinReview) # ÉèÖÃÐèÒªÉóºË fackFamily.SetJoinLVMin(joinLVMin) # ¹ÙÖ° 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 member = fackFamily.AddMember(fackMemID) if not member: continue if not fackFamily.GetLeaderID(): member.SetFmLV(IPY_PlayerDefine.fmlLeader) fackFamily.SetLeaderID(fackMemID) fackMemID += 1 # ¸ù¾Ý³É¹¦´´½¨µÄ³ÉԱƽ¾ù·ÖÅä×ÜÕ½Á¦ memFightPowerTotal = familyFightPower memCnt = fackFamily.GetCount() avgValue = memFightPowerTotal / memCnt for m in range(memCnt): member = fackFamily.GetAt(m) memID = member.GetPlayerID() fmLV = member.GetFmLV() if m == memCnt - 1: memFightPower = memFightPowerTotal else: memFightPower = avgValue + memCnt / 2 - m memFightPowerTotal -= memFightPower viewCache = PlayerViewCache.FindViewCache(memID) viewCache.SetFightPowerTotal(memFightPower) 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())) return