| | |
| | | import PlayerMagicWeapon
|
| | | import PlayerWeekParty
|
| | | import CalcNoLineEffect
|
| | | import PassiveBuffEffMng
|
| | | import CrossPlayerData
|
| | | import CalcLineEffect
|
| | | import PlayerActivity
|
| | |
| | | limitPetClassLV = petSkillUnLockList[i] # 学习此技能所需宠物阶级
|
| | | if initClass < limitPetClassLV:
|
| | | continue
|
| | | curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillid)
|
| | | if not curSkilData:
|
| | | continue
|
| | | if curSkilData.GetFuncType() == ChConfig.Def_SkillFuncType_PetOwnerSkill:
|
| | | __GiveOwnerSkill(curPlayer, skillid)
|
| | | continue
|
| | | newPetItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillid)
|
| | |
|
| | | return newPetItem
|
| | |
|
| | | # 从称号获得技能
|
| | | def __GiveOwnerSkill(curPlayer, skillResID):
|
| | | GameWorld.DebugLog("给灵宠主人技能: skillResID=%s" % skillResID)
|
| | | skillData = GameWorld.GetGameData().FindSkillByType(skillResID, 1)
|
| | | if skillData == None:
|
| | | GameWorld.DebugLog(" not find skill(%s)" % skillResID)
|
| | | return
|
| | | if not SkillCommon.CheckSkillJob(curPlayer, skillData):
|
| | | return
|
| | | if not SkillShell.CheckLearnSkillCondition(curPlayer, skillData):
|
| | | GameWorld.DebugLog(" learn skill condition isn't enough! skillResID=%s" % skillResID)
|
| | | return
|
| | | skillManager = curPlayer.GetSkillManager()
|
| | | if skillManager.FindSkillBySkillTypeID(skillResID):
|
| | | GameWorld.DebugLog(" have learned skill(%s)" % skillResID)
|
| | | return
|
| | | |
| | | skillManager.LVUpSkillBySkillTypeID(skillResID)
|
| | | PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer, skillResID) |
| | | PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerEx(skillResID, 0)
|
| | | return
|
| | |
|
| | | ## 获取宠物实例对应的宠物数据物品
|
| | | def GetPetDataItem(curPetOwner, rolePet):
|
| | |
| | |
|
| | | learnSkillIDList = [max(a) for a in learnSkillDict.values()]
|
| | | return learnSkillIDList, passiveSkillList
|
| | |
|
| | | ## 设置宠物的技能战力
|
| | | def SetPetSkillFightPower(curPlayer):
|
| | | petPackIndex = ShareDefine.rptPet
|
| | | petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
|
| | | |
| | | allFightPower = 0
|
| | | for i in range(petPack.GetCount()):
|
| | | petItem = petPack.GetAt(i)
|
| | | if petItem.IsEmpty():
|
| | | continue
|
| | | for i in range(petItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
|
| | | skillID = petItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i)
|
| | | curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not curSkilData:
|
| | | continue
|
| | | allFightPower += curSkilData.GetFightPower()
|
| | | |
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % ShareDefine.Def_MFPType_Pet, allFightPower)
|
| | |
|
| | | #===============================================================================
|
| | | #// A7 02 宠物激活 #tagCMActivatePet
|
| | |
| | | learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer)
|
| | | PetControl.DoLogic_PlayerPetLearnSkillList(rolePet, learnSkillList)
|
| | | RefreshPetItemAddAttr(curPlayer, True)
|
| | | SetPetSkillFightPower(curPlayer) # 技能战力重算
|
| | |
|
| | | # 开服活动数据
|
| | | OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_PetLV, GetTotalPetLV(curPlayer))
|
| | |
| | |
|
| | | if not ItemControler.PlayerItemControler(curPlayer).PutInItem(petPackIndex, newPetItem):
|
| | | return
|
| | | SetPetSkillFightPower(curPlayer) # 技能战力重算
|
| | | petItemIndex = GetPetDataItemIndexByNPCID(curPlayer, petNPCID)
|
| | | DoChangePetState(curPlayer, petItemIndex, ShareDefine.Def_PetState_Fight)
|
| | | RefreshPetItemAddAttr(curPlayer, True)
|
| | |
| | | # 未达到所需阶级
|
| | | if updClassLV + 1 < limitPetClassLV:
|
| | | continue
|
| | | petDataItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillid)
|
| | | curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillid)
|
| | | if not curSkilData:
|
| | | continue
|
| | | if curSkilData.GetFuncType() == ChConfig.Def_SkillFuncType_PetOwnerSkill:
|
| | | __GiveOwnerSkill(curPlayer, skillid)
|
| | | continue
|
| | | petDataItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillid)
|
| | | if not SkillCommon.isPassiveAttr(curSkilData):
|
| | | #被动技能不学
|
| | | learnSkillList.append(skillid)
|
| | |
| | | fightPet = curPlayer.GetPetMgr().GetFightPet()
|
| | | if learnSkillList and fightPet:
|
| | | PetControl.DoLogic_PlayerPetLearnSkillList(fightPet, learnSkillList)
|
| | | |
| | | SetPetSkillFightPower(curPlayer) # 技能战力重算
|
| | | |
| | | RefreshPetItemAddAttr(curPlayer, True)
|
| | |
|
| | | # 开服活动数据
|
| | |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkill, skillAttrList)
|
| | |
|
| | | #初始战力
|
| | | initFPAdd = 0
|
| | | fpExTotal = 0
|
| | | petPackIndex = ShareDefine.rptPet
|
| | | petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
|
| | | for i in range(petPack.GetCount()):
|
| | | petItem = petPack.GetAt(i)
|
| | | if petItem.IsEmpty():
|
| | | continue |
| | | continue
|
| | | # 物品上的技能战力,主人上的另算
|
| | | for i in range(petItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
|
| | | skillID = petItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i)
|
| | | curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not curSkilData:
|
| | | continue
|
| | | fpExTotal += curSkilData.GetFightPower()
|
| | | petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
|
| | | petIpyData = GetPetIpydata(petItemNPCID)
|
| | | if not petIpyData:
|
| | | continue
|
| | | initFPAdd += petIpyData.GetInitFightPower()
|
| | | fpExTotal += petIpyData.GetInitFightPower() # 初始战力
|
| | | #觉醒战力
|
| | | skinData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorsePetSkinData % (2, petItemNPCID), 0)
|
| | | skinIpyData = IpyGameDataPY.GetIpyGameDataNotLog('HorsePetSkin', 2, petItemNPCID, skinData/100)
|
| | |
| | | for attrID, attrValue in skinIpyData.GetAttrInfo().items():
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPetSkin)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkin, allAttrListPetSkin)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Pet, initFPAdd)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Pet, fpExTotal)
|
| | | # GameWorld.DebugLog("宠物榜NPCID: %s, petDict=%s" % (billPetNPCID, str(billPetDict)))
|
| | | return
|
| | |
|