#!/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 CrossPlayer import DBDataMgr import random 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 ¸öÊý [×ÜÕ½Á¦ 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 == "pl": __printFamilyList(curPlayer, gmList) return if value1 == "pf": __printFamilyInfo(curPlayer, gmList) return if value1 == "sq": __addFackRequestJoin(curPlayer, gmList) return if value1 == "m": __addFackMember(curPlayer, gmList, crossPlayer) return creatCount = value1 if creatCount <= 0: __delFackFamily(curPlayer) return __createFackFamily(curPlayer, gmList) return 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) return MemberMax = PlayerFamily.GetFamilySetting(curFamily.GetLV(), "MemberMax") if curFamily.GetCount() >= MemberMax: GameWorld.DebugAnswer(curPlayer, "³ÉÔ±ÒÑÂú: %s" % MemberMax) return memCnt = min(memCnt, MemberMax - curFamily.GetCount()) curZoneMgr = familyMgr.GetZoneFamilyMgrByFamilyID(familyID) if not curZoneMgr: return fackIDStart = 0 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): fackID = fackIDStart + i + 1 if fackID >= ShareDefine.FackPlayerIDMax: break PlayerFamily.DoPlayerJionFamily(curFamily, fackID, None, broadcastFamilyChange=False) addCnt += 1 curZoneMgr.Sort() PlayerFamily.Sync_FamilyInfo(crossPlayer) 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 if familyMgr.GetPlayerFamilyID(fackID): continue family.AddReqJoinPlayerID(fackID) addCnt += 1 if addCnt >= reqCnt: break # ¹ã²¥¸øÓÐÕÐÈËȨÏÞµÄ 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 20 fromIndex = gmList[2] if len(gmList) > 2 else 0 printAnswerCnt = 0 familyMgr = DBDataMgr.GetFamilyMgr() 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 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 zoneID = familyMgr.GetFamilyZoneID(familyID) GameWorld.DebugAnswer(curPlayer, "----- ¡¾%s¡¿ -----" % (GameWorld.CodeToGbk(family.GetName()))) 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()))) 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 familyID in familyMgr.GetFamilyIDList(): if familyID > ShareDefine.FackFamilyIDMax: continue delCnt += 1 familyMgr.DelFamily(familyID) remainCnt = len(familyMgr.GetFamilyIDList()) GameWorld.DebugAnswer(curPlayer, "ɾ³ý¼Ù¹«»áÊý: %s,Ê£Óà:%s" % (delCnt, remainCnt)) 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 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 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 GameWorld.DebugAnswer(curPlayer, "³É¹¦´´½¨¼Ù¹«»á: %s,×Ü:%s" % (creatCount, len(familyMgr.GetFamilyIDList()))) return