#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GM.Commands.FuncTeam # # @todo:¹¦ÄܶÓÎé # @author hxp # @date 2024-08-02 # @version 1.0 # # ÏêϸÃèÊö: ¹¦ÄܶÓÎé # #------------------------------------------------------------------------------- #"""Version = 2024-08-02 16:30""" #------------------------------------------------------------------------------- import GameWorld import PyDataManager import PlayerFuncTeam import IpyGameDataPY import ShareDefine import ChConfig import random #--------------------------------------------------------------------- #Âß¼­ÊµÏÖ ## Ö´ÐÐÂß¼­ # @param curPlayer µ±Ç°Íæ¼Ò # @param gmList [cmdIndex gmAccID msg] # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def OnExec(curPlayer, gmList): ## ±¾·þ´¦Àí GameWorld.DebugAnswer(curPlayer, "----------------------------") if not gmList: GameWorld.DebugAnswer(curPlayer, "Çå¿Õ¶ÓÎé: FuncTeam 0") GameWorld.DebugAnswer(curPlayer, "ɾ³ý¶ÓÎé: FuncTeam d teamID") GameWorld.DebugAnswer(curPlayer, "´´½¨¶ÓÎé: FuncTeam c mapID ¸öÊý [×îµÍµÈ¼¶ ×îµÍÕ½Á¦ ½ö±¾·þ ÐèÒªÉóºË mapEx zoneID]") GameWorld.DebugAnswer(curPlayer, "Ìí¼ÓÉêÇë: FuncTeam a teamID ÈËÊý [Ö¸¶¨ID ...]") GameWorld.DebugAnswer(curPlayer, "Êä³ö¶ÓÎé: FuncTeam p [teamID]") GameWorld.DebugAnswer(curPlayer, "Êä³öÍæ¼Ò¶ÓÎé: FuncTeam pt [playerID]") GameWorld.DebugAnswer(curPlayer, "ÉèÖöÓÎéIDÉÏÏÞ: FuncTeam idMax ×î´ó¶ÓÎéID") return def OnGetMergeParam(curPlayer): playerID = curPlayer.GetPlayerID() serverGroupID = GameWorld.GetServerGroupID() return [serverGroupID, playerID] def OnMergeServerExec(gmList, tick): ## ¿ç·þ´¦Àí serverGroupID = gmList[-2] playerID = gmList[-1] gmList = gmList[:-2] if not gmList: return value1 = gmList[0] if value1 == 0: delCount = PlayerFuncTeam.DelTealAll() GameWorld.DebugAnswerCross(playerID, serverGroupID, "¹¦ÄܶÓÎéÒÑÇå¿Õ! delCount=%s" % delCount) elif value1 == "d": teamID = gmList[1] if len(gmList) > 1 else 0 isOK = PlayerFuncTeam.DelTeam(teamID) GameWorld.DebugAnswerCross(playerID, serverGroupID, "ɾ³ý¶ÓÎé[%s], isOK=%s" % (teamID, isOK)) elif value1 == "c": __CreateFuncTeam(playerID, serverGroupID, gmList) elif value1 == "a": __AddApplyPlayer(playerID, serverGroupID, gmList) elif value1 == "p": __PrintFuncTeamInfo(playerID, serverGroupID, gmList) elif value1 == "pt": __PrintPlayerFuncTeamInfo(playerID, serverGroupID, gmList) elif value1 == "idMax": teamIDMax = gmList[1] if len(gmList) > 1 else 99999 funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager() funcTeamMgr.teamIDMax = teamIDMax GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÉèÖöÓÎéIDÉÏÏÞ£º%s" % teamIDMax) return def __CreateFuncTeam(playerID, serverGroupID, gmList): ## ´´½¨ÐéÄâ¶ÓÎé funcMapID = gmList[1] if len(gmList) > 1 else 0 createCount = gmList[2] if len(gmList) > 2 else 1 minLV = gmList[3] if len(gmList) > 3 else 0 minFightPower = gmList[4] if len(gmList) > 4 else 0 serverOnly = gmList[5] if len(gmList) > 5 else 0 needCheck = gmList[6] if len(gmList) > 6 else 0 funcMapEx = gmList[7] if len(gmList) > 7 else 0 zoneID = gmList[8] if len(gmList) > 8 else 0 if not zoneID: zoneInfo = PlayerFuncTeam.GetFuncTeamMapIDZoneInfo(funcMapID, serverGroupID) if not zoneInfo: return zoneID, _ = zoneInfo captainID = 0 funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager() captainIDList = funcTeamMgr.playerFuncTeamIDDict.keys() if captainIDList: captainID = min(captainIDList) if not captainID or captainID > 10000: captainID = 10000 # ¼Ù¶Ó³¤ID´Ó9999µ¹Ðò FakeName = "¶ÓÎéÃû".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding()) teamInfo = {"funcMapID":funcMapID, "funcMapEx":funcMapEx, "teamName":"", "minLV":minLV, "minFightPower":minFightPower % ChConfig.Def_PerPointValue, "minFightPowerEx":minFightPower / ChConfig.Def_PerPointValue, "serverOnly":serverOnly, "needCheck":needCheck} funcTeamMgr.LockBatch() createTeamIDList = [] for _ in xrange(createCount): captainID -= 1 if captainID <= 0: break teamInfo.update({ "teamName":"%s%s" % (FakeName, captainID), }) newTeam = funcTeamMgr.CreateFuncTeam(captainID, teamInfo, zoneID) if not newTeam: break createTeamIDList.append(newTeam.GetTeamID()) funcTeamMgr.UnLockBatch() funcTeamMgr.SortTeam(zoneID, funcMapID) funcTeamMgr.SyncMapFuncTeamMemIDInfo(createTeamIDList) GameWorld.DebugAnswerCross(playerID, serverGroupID, "³É¹¦´´½¨¶ÓÎéÊý:%s, ×ܶÓÎéÊý:%s" % (len(createTeamIDList), len(funcTeamMgr.funcTeamDict))) return def __AddApplyPlayer(playerID, serverGroupID, gmList): ## Ìí¼ÓÉêÇëÈËÊý teamID = gmList[1] if len(gmList) > 1 else 0 applyCount = gmList[2] if len(gmList) > 2 else 1 applyPlayerIDList = gmList[3:] if len(gmList) > 3 else [] funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager() funcTeam = funcTeamMgr.GetFuncTeam(teamID) if not funcTeam: GameWorld.DebugAnswerCross(playerID, serverGroupID, "¶ÓÎé²»´æÔÚ! teamID=%s" % teamID) return funcMapID = funcTeam.GetFuncMapID() ipyData = IpyGameDataPY.GetIpyGameData("FuncTeamSet", funcMapID) if not ipyData: return applyMax = ipyData.GetApplyMax() if not applyMax: applyMax = 50 applyMax = min(applyMax, 100) addCount = 0 while applyCount > 0: if applyPlayerIDList: applyID = applyPlayerIDList.pop(0) else: applyID = random.randint(100, 1000) applyIDList = funcTeam.GetApplyIDList() if len(applyIDList) >= applyMax: break if applyID in applyIDList: continue if applyID in funcTeam.GetMemberIDList(): continue funcTeam.AddApplyID(applyID) addCount += 1 applyCount -= 1 GameWorld.DebugAnswerCross(playerID, serverGroupID, "¶ÓÎéÉêÇëÈë¶ÓÊý:%s,teamID:%s,ÐÂÔö:%s" % (len(funcTeam.GetApplyIDList()), teamID, addCount)) PlayerFuncTeam.SendFuncTeamToClientServer(teamID) return def __PrintPlayerFuncTeamInfo(playerID, serverGroupID, gmList): ## Êä³öÍæ¼Ò¶ÓÎé tagPlayerID = gmList[1] if len(gmList) > 1 else playerID funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager() if tagPlayerID not in funcTeamMgr.playerFuncTeamIDDict: GameWorld.DebugAnswerCross(playerID, serverGroupID, "Íæ¼ÒûÓжÓÎé! %s" % tagPlayerID) return funcTeamIDDict = funcTeamMgr.playerFuncTeamIDDict[tagPlayerID] for teamID in funcTeamIDDict.values(): __PrintFuncTeamDetail(playerID, serverGroupID, teamID) return def __PrintFuncTeamDetail(playerID, serverGroupID, teamID): ## Êä³ö¶ÓÎéÃ÷ϸ funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager() funcTeam = funcTeamMgr.GetFuncTeam(teamID) if not funcTeam: GameWorld.DebugAnswerCross(playerID, serverGroupID, "¶ÓÎé²»´æÔÚ! teamID=%s" % teamID) return captainID = funcTeam.GetCaptainID() memberIDList = funcTeam.GetMemberIDList() applyIDList = funcTeam.GetApplyIDList() fpTotal = funcTeam.GetMemFightPowerTotal() needCheck = funcTeam.GetNeedCheck() GameWorld.DebugAnswerCross(playerID, serverGroupID, "¶ÓÎéID=%s,¶Ó³¤=%s,¶ÓÔ±=%s,ÉêÇë=%s" % (teamID, captainID, len(memberIDList), len(applyIDList))) GameWorld.DebugAnswerCross(playerID, serverGroupID, " zoneID=%s,mapID=%s-%s,Éó:%s" % (funcTeam.GetZoneID(), funcTeam.GetFuncMapID(), funcTeam.GetFuncMapEx(), needCheck)) #GameWorld.DebugAnswerCross(playerID, serverGroupID, " ¶ÓÃû=%s" % (funcTeam.GetTeamName())) GameWorld.DebugAnswerCross(playerID, serverGroupID, " ×ÜÕ½Á¦=%s" % (fpTotal)) GameWorld.DebugAnswerCross(playerID, serverGroupID, " ¶ÓÔ±ID=%s" % (memberIDList)) GameWorld.DebugAnswerCross(playerID, serverGroupID, " ÉêÇëID=%s %s" % (applyIDList, len(applyIDList))) return def __PrintFuncTeamInfo(playerID, serverGroupID, gmList): ## Êä³ö¶ÓÎé teamID = gmList[1] if len(gmList) > 1 else 0 if teamID: __PrintFuncTeamDetail(playerID, serverGroupID, teamID) return funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager() if not funcTeamMgr.funcTeamDict: GameWorld.DebugAnswerCross(playerID, serverGroupID, "ûÓй¦ÄܶÓÎé!") return GameWorld.DebugAnswerCross(playerID, serverGroupID, "×ܶÓÎéÊý:%s,×îСID:%s,×î´óID:%s" % (len(funcTeamMgr.funcTeamDict), min(funcTeamMgr.funcTeamDict), max(funcTeamMgr.funcTeamDict))) for key, funcTeamList in funcTeamMgr.funcTeamListDict.items(): zoneID, funcMapID = key if not funcTeamList: continue GameWorld.DebugAnswerCross(playerID, serverGroupID, "zoneID=%s,funcMapID=%s,¶ÓÎéÊý=%s" % (zoneID, funcMapID, len(funcTeamList))) for num, funcTeam in enumerate(funcTeamList[:20], 1): teamID = funcTeam.GetTeamID() captainID = funcTeam.GetCaptainID() memberIDList = funcTeam.GetMemberIDList() applyIDList = funcTeam.GetApplyIDList() fpTotal = funcTeam.GetMemFightPowerTotal() needCheck = funcTeam.GetNeedCheck() GameWorld.DebugAnswerCross(playerID, serverGroupID, "%s,ID%s,¶Ó³¤%s,Ô±%s-%s,Éó%s,Õ½%s" % (num, teamID, captainID, len(memberIDList), len(applyIDList), needCheck, fpTotal)) return