#!/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]") 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 creatCount = value1 if creatCount <= 0: __delFackFamily(curPlayer) return __createFackFamily(curPlayer, gmList) 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" % (rank, family.GetID(), family.GetLV(), family.GetFightPowerTotal(), family.GetCount()) 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" % (family.GetEmblemID())) GameWorld.DebugAnswer(curPlayer, "×ÜÕ½Á¦:%s,ÈËÊý:%s" % (family.GetFightPowerTotal(), family.GetCount())) GameWorld.DebugAnswer(curPlayer, "ÃËÖ÷:%s" % (family.GetLeaderID())) for index in range(family.GetCount()): member = family.GetAt(index) playerID = member.GetPlayerID() fightPower = member.GetFightPowerTotal() GameWorld.DebugAnswer(curPlayer, "%s,%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) FakeFamilyName = 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.SetJoinReview(1) # ÉèÖÃÐèÒªÉóºË fackFamily.SetJoinLVMin(random.randint(0, 1000)) 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, True) 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