#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GM.Commands.Pet # # @todo:³èÎï # @author hxp # @date 2021-07-02 # @version 1.0 # # ÏêϸÃèÊö: ³èÎï # #------------------------------------------------------------------------------- #"""Version = 2021-07-02 19:30""" #------------------------------------------------------------------------------- import ChConfig import GameWorld import PlayerControl import IpyGameDataPY import ShareDefine import PetControl import PlayerPet import OpenFunc def __Help(curPlayer, petNumNameDict): GameWorld.DebugAnswer(curPlayer, "------------------") GameWorld.DebugAnswer(curPlayer, "ÖØÖÃÁé³è: Pet 0 [¿ÉÑ¡µÚ¼¸Ö»]") GameWorld.DebugAnswer(curPlayer, "¼¤»îËùÓÐ: Pet 99 [¿ÉÑ¡ÊÇ·ñÂú½×]") GameWorld.DebugAnswer(curPlayer, "¼¤»îÖ¸¶¨: Pet µÚ¼¸Ö» ½×¼¶") GameWorld.DebugAnswer(curPlayer, "ÅàÑøÁé³è: Pet ÅàÑøÀàÐÍ µÈ½× µ¤Êý") GameWorld.DebugAnswer(curPlayer, "×¢£ºÖØÖÃÁé³èÐèÖØµÇ") petNumList = petNumNameDict.keys() petNameNumInfo = "" for i, petNum in enumerate(petNumList, 1): petNameNumInfo += "%s-%s£»" % (petNumNameDict[petNum], petNum) if petNum % 3 == 0 or i == len(petNumList): GameWorld.DebugAnswer(curPlayer, petNameNumInfo) petNameNumInfo = "" return ## GMÃüÁîÖ´ÐÐÈë¿Ú # @param curPlayer µ±Ç°Íæ¼Ò # @param msgList ²ÎÊýÁбí # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def OnExec(curPlayer, msgList): petNumNameDict = {} petNPCIDNumDict = {} ipyDataMgr = IpyGameDataPY.IPY_Data() for index in xrange(ipyDataMgr.GetPetInfoCount()): ipyData = ipyDataMgr.GetPetInfoByIndex(index) needItemID = ipyData.GetUnLockNeedItemID() curItem = GameWorld.GetGameData().GetItemByTypeID(needItemID) if not curItem: continue itemName = curItem.GetName() petName = itemName.replace("Áé³è£º", "") petNum = index + 1 petNPCID = ipyData.GetID() petNPCIDNumDict[petNPCID] = petNum petNumNameDict[petNum] = petName petNumList = sorted(petNumNameDict.keys()) if not msgList: __Help(curPlayer, petNumNameDict) return # ÖØÖÃÁé³è if msgList[0] == 0: clearNumList = msgList[1:] if len(msgList) > 1 else None clearOKList = __ClearPet(curPlayer, petNPCIDNumDict, clearNumList) for trainType in xrange(1, PlayerPet.GetPetTrainTypes() + 1): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainLV % trainType, 1) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainItemCount % trainType, 0) GameWorld.DebugAnswer(curPlayer, "ÖØÖÃÁé³è±àºÅ:%s" % sorted(clearOKList)) # ¼¤»îËùÓÐ elif msgList[0] == 99: isFullLV = msgList[1] if len(msgList) > 1 else None classLV = 999 if isFullLV else None OpenFunc.DoGMOpenFunc(curPlayer, ShareDefine.GameFuncID_Pet) activeOKList = [] petNumList = petNPCIDNumDict.values() for i, petNum in enumerate(petNumList): index = msgList[0] refresh = i >= (len(petNumList) - 1) if PlayerPet.DoPetActivate(curPlayer, petNum, classLV, refresh=refresh): activeOKList.append(petNum) GameWorld.DebugAnswer(curPlayer, "¼¤»îÁé³è±àºÅ:%s" % sorted(activeOKList)) # ¼¤»îÖ¸¶¨ elif len(msgList) == 2: petNum = msgList[0] classLV = msgList[1] OpenFunc.DoGMOpenFunc(curPlayer, ShareDefine.GameFuncID_Pet) if PlayerPet.DoPetActivate(curPlayer, petNum, classLV): GameWorld.DebugAnswer(curPlayer, "¼¤»îÁé³è: %s(%s), %s½×" % (petNumNameDict.get(petNum, petNum), petNum, classLV)) # ÅàÑøÁé³è elif len(msgList) == 3: trainType, trainLV, eatItemCount = msgList PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainLV % trainType, trainLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainItemCount % trainType, eatItemCount) else: __Help(curPlayer, petNumNameDict) return PlayerPet.RefreshPetItemAddAttr(curPlayer, True) PlayerPet.OnPlayerPetLogin(curPlayer) return def __ClearPet(curPlayer, petNPCIDNumDict, clearNumList=None): clearOKList = [] #»ñµÃÕ½¶·µÄ³èÎï fightPetNPCID = 0 curPetMgr = curPlayer.GetPetMgr() fightPet = curPetMgr.GetFightPet() if fightPet != None: fightPetNPCID = fightPet.GetRolePet().NPCID fightPetNum = petNPCIDNumDict.get(fightPetNPCID) #---Èç¹ûÓгöÕ½ÖеijèÎïÐèÒªÏÈÕÙ»Ø--- if not clearNumList or fightPetNum in clearNumList: PetControl.ReCallFightPet(curPlayer) #»ñµÃÍæ¼Ò³èÎïÐÅÏ¢ petList = [] petListCount = curPetMgr.PetList_Cnt() for i in range(petListCount): pet = curPetMgr.PetList_At(i) petNPCID = pet.GetRolePet().NPCID petNum = petNPCIDNumDict.get(petNPCID) if not clearNumList or petNum in clearNumList: petList.append(pet) for pet in petList: curPetMgr.PetList_SetFree(pet.GetRolePet().PetID) # ³èÎïÊý¾ÝÎïÆ·±³°üÇå³ý petPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet) for i in range(petPack.GetCount())[::-1]: petItem = petPack.GetAt(i) if not petItem or petItem.IsEmpty(): continue petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID) petNum = petNPCIDNumDict.get(petNPCID) if not clearNumList or petNum in clearNumList: petItem.Clear() clearOKList.append(petNum) return clearOKList