| | |
| | | playerName = curPlayer.GetName()
|
| | | petNPCID = petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
|
| | | classLV = petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV) + 1
|
| | | alreadyLearnSkillInfo = {}
|
| | | for i in xrange(petDataItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
|
| | | itemSkillList = []
|
| | | itemSkillCount = petDataItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)
|
| | | for i in xrange(itemSkillCount):
|
| | | skillID = petDataItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i)
|
| | | skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not skillData:
|
| | | continue
|
| | | skillTypeID = skillData.GetSkillTypeID()
|
| | | alreadyLearnSkillInfo[skillTypeID] = [skillID, i]
|
| | | #GameWorld.DebugLog("开始更新灵宠技能: petNPCID=%s,classLV=%s,alreadyLearnSkillInfo=%s" % (petNPCID, classLV, alreadyLearnSkillInfo))
|
| | | itemSkillList.append([skillTypeID, skillID])
|
| | | #GameWorld.DebugLog("开始更新灵宠技能: petNPCID=%s,classLV=%s,itemSkillList=%s" % (petNPCID, classLV, itemSkillList))
|
| | |
|
| | | petIpyData = GetPetIpydata(petNPCID)
|
| | | petSkillList = petIpyData.GetSkillID()
|
| | | petSkillUnLockList = petIpyData.GetSkillUnLock()
|
| | | sysMarkList = petIpyData.GetSkillUnLockSys()
|
| | | learnSkillList = []
|
| | | skillChange = False
|
| | | for i, skillID in enumerate(petSkillList):
|
| | | limitPetClassLV = petSkillUnLockList[i] # 学习此技能所需宠物阶级
|
| | | if classLV < limitPetClassLV:
|
| | | #GameWorld.DebugLog(" 未满足学习阶级: i=%s,skillID=%s,limitPetClassLV=%s" % (i, skillID, limitPetClassLV))
|
| | | GameWorld.DebugLog(" 未满足学习阶级: i=%s,skillID=%s,limitPetClassLV=%s" % (i, skillID, limitPetClassLV))
|
| | | break
|
| | | skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not skillData:
|
| | | continue
|
| | | skillTypeID = skillData.GetSkillTypeID()
|
| | | alreadyLearnSkillID, skillIndex = alreadyLearnSkillInfo.get(skillTypeID, [0, -1])
|
| | | alreadyLearnSkillID, alreadyLearnIndex = 0, -1
|
| | | for skillIndex, skillInfo in enumerate(itemSkillList):
|
| | | itemSkillTypeID, itemSkillID = skillInfo
|
| | | if itemSkillTypeID == skillTypeID:
|
| | | alreadyLearnSkillID = itemSkillID
|
| | | alreadyLearnIndex = skillIndex
|
| | | break
|
| | | if skillID <= alreadyLearnSkillID:
|
| | | #GameWorld.DebugLog(" 技能已经学习过: i=%s,skillID=%s <= alreadyLearnSkillID=%s" % (i, skillID, alreadyLearnSkillID))
|
| | | continue
|
| | |
| | | #GameWorld.DebugLog(" 主人学习技能: i=%s,skillID=%s" % (i, skillID))
|
| | | SkillCommon.GivePlayerSkillByJobSkill(curPlayer, [skillID])
|
| | | continue
|
| | | skillChange = True
|
| | | if not alreadyLearnSkillID:
|
| | | #GameWorld.DebugLog(" 学习新的技能: i=%s,skillID=%s" % (i, skillID))
|
| | | petDataItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillID)
|
| | | itemSkillList.append([skillTypeID, skillID])
|
| | | else:
|
| | | #GameWorld.DebugLog(" 学习升级技能: i=%s,skillID=%s,skillIndex=%s" % (i, skillID, skillIndex))
|
| | | petDataItem.UpdataUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, skillIndex, skillID)
|
| | | itemSkillList[alreadyLearnIndex] = [skillTypeID, skillID]
|
| | | if not SkillCommon.isPassiveAttr(skillData):
|
| | | #被动技能不学
|
| | | learnSkillList.append(skillID)
|
| | |
| | | #增加升级活跃点效果
|
| | | PlayerActivity.AddActivityByLVOnLearnSkill(curPlayer, skillID)
|
| | |
|
| | | if not skillChange:
|
| | | return learnSkillList
|
| | | |
| | | for skillIndex, skillInfo in enumerate(itemSkillList):
|
| | | skillID = skillInfo[1]
|
| | | if skillIndex < itemSkillCount:
|
| | | itemSkillID = petDataItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, skillIndex)
|
| | | if itemSkillID != skillID:
|
| | | #GameWorld.DebugLog(" 学习升级技能: itemSkillID=%s -> skillID=%s,skillIndex=%s" % (itemSkillID, skillID, skillIndex))
|
| | | petDataItem.UpdataUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, skillIndex, skillID)
|
| | | else:
|
| | | #GameWorld.DebugLog(" 学习新的技能: skillID=%s,skillIndex=%s" % (skillID, skillIndex))
|
| | | petDataItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillID)
|
| | | |
| | | nowSkillIDList = []
|
| | | for i in xrange(petDataItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
|
| | | nowSkillIDList.append(petDataItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i))
|