#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GM.Commands.PlayerMirror # # @todo:¾µÏñÊý¾Ý # @author hxp # @date 2024-12-26 # @version 1.0 # # ÏêϸÃèÊö: ¾µÏñÊý¾Ý # #------------------------------------------------------------------------------- #"""Version = 2024-12-26 17:00""" #------------------------------------------------------------------------------- import ChConfig import ShareDefine import PyDataManager import PlayerPackData import ReadChConfig import GameWorld import base64 import random ## Ö´ÐÐÂß¼­ # @param curPlayer µ±Ç°Íæ¼Ò # @param gmList [] # @return None def OnExec(curPlayer, gmList): if not gmList: return value = gmList[0] if value == "a": __addFackPackData(gmList[1:]) elif value == "d": __delFackPackData() elif value == "p": __printPackData(gmList[1:]) return def OnGetMergeParam(curPlayer): return [] def OnMergeServerExec(gmList, tick): ## ¿ç·þÖ´ÐÐÃüÁî value = gmList[0] if value == "a": __addFackPackData(gmList[1:]) elif value == "d": __delFackPackData() elif value == "p": __printPackData(gmList[1:]) return def __addFackPackData(gmList): ## Ìí¼Ó¼ÙµÄ´ò°üÊý¾Ý£¬Ò»°ãÓÃÓÚ¿ª·¢²âÊÔ¹¦ÄÜÓà FakeName = "¼ÙÃû×Ö".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding()) packDataMgr = PyDataManager.GetDBPlayerPackDataManager() #GameWorld.DebugAnswer(curPlayer, "Ìí¼Ó¾µÏñ: PlayerMirror a ¸öÊý [ÆðʼID Õ½Á¦ Çø·þID Ä£°ækey]") addCount = gmList[0] if len(gmList) > 0 else 1 startID = gmList[1] if len(gmList) > 1 else 1 fightPower = gmList[2] if len(gmList) > 2 else 0 serverID = gmList[3] if len(gmList) > 3 else 0 packDataTempKey = gmList[4] if len(gmList) > 4 else "" jobFackPackDataDict = ReadChConfig.GetEvalChConfig("FackPackData") addOKCount = 0 for index in range(addCount): fackID = startID + index if packDataMgr.IsPlayerIn(fackID): continue job = random.randint(1, 2) tempKey = packDataTempKey if packDataTempKey else "job%s" % job if tempKey not in jobFackPackDataDict: GameWorld.DebugAnswer(None, "ÅäÖÃFackPackData.txtûÓиÃÄ£°ækey:%s" % tempKey) return packDataTeam = jobFackPackDataDict[tempKey] packDataTeamBuff = base64.b64decode(packDataTeam) tempDBPlayer = PlayerPackData.GetDBPlayerByPackData(packDataTeam) tempDBPlayer.PlayerID = fackID tempDBPlayer.PlayerName = "%s%s" % (FakeName, fackID) curServerID = serverID if serverID else fackID / 100 if not curServerID: curServerID = 9999 tempDBPlayer.AccID = "fack%s@test@s%s" % (fackID, curServerID) # ûÓÐÖ¸¶¨Ä£°æ£¬ÔòËæ»úÊý¾Ý if not packDataTempKey: tempDBPlayer.Job = job tempDBPlayer.LV = random.randint(tempDBPlayer.LV, tempDBPlayer.LV + 2) tempDBPlayer.OfficialRank = random.randint(tempDBPlayer.OfficialRank, tempDBPlayer.OfficialRank + 2) curFightPower = fightPower if fightPower else (tempDBPlayer.FightPowerEx * ChConfig.Def_PerPointValue + tempDBPlayer.FightPower) curFightPower += index tempDBPlayer.FightPower = curFightPower % ChConfig.Def_PerPointValue tempDBPlayer.FightPowerEx = curFightPower / ChConfig.Def_PerPointValue updBuff = tempDBPlayer.getBuffer() + packDataTeamBuff[tempDBPlayer.getLength():] updPackData = base64.b64encode(updBuff) packDataMgr.UpdPlayerPackData(fackID, updPackData) addOKCount += 1 packDataMgr.Sort() GameWorld.DebugAnswer(None, "Ìí¼Ó¼ÙÍæ¼Ò´ò°üÊý¾ÝÊý:%s,×Ü:%s" % (addOKCount, packDataMgr.GetCount())) return def __delFackPackData(): delCount = 0 packDataMgr = PyDataManager.GetDBPlayerPackDataManager() for index in range(packDataMgr.GetCount())[::-1]: packObj = packDataMgr.At(index) if packObj.playerID >= 10000: continue packDataMgr.DelPlayerPackData(packObj.playerID) delCount += 1 GameWorld.DebugAnswer(None, "ɾ³ý¼ÙÍæ¼Ò´ò°üÊý¾ÝÊý:%s,Ê£:%s" % (delCount, packDataMgr.GetCount())) return def __printPackData(gmList): startIndex = gmList[0] if len(gmList) > 0 else 0 printCount = gmList[1] if len(gmList) > 1 else 100 packDataMgr = PyDataManager.GetDBPlayerPackDataManager() packDataMgr.Sort() dataCount = packDataMgr.GetCount() GameWorld.DebugLog("=== ´ò°üÊý¾Ý×ÜÊý: dataCount=%s,startIndex=%s" % (dataCount, startIndex)) for index in range(startIndex, startIndex + printCount): if index >= dataCount: break packObj = packDataMgr.At(index) playerID = packObj.playerID fightPower = packObj.fightPower serverID = packObj.serverID GameWorld.DebugLog("index=%s,playerID=%s,serverID=%s,fightPower=%s,%s" % (index, playerID, serverID, fightPower, packObj.GetBaseDict())) GameWorld.DebugAnswer(None, "Êä³öÍê±ÏÏê¼ûGameServerÈÕÖ¾!×Ü:%s" % (dataCount)) return