From d1aa37504456311fe9d7ddc2f23f537c2408b90c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 09 一月 2024 11:06:44 +0800 Subject: [PATCH] 10019 【砍树】回合战斗(灵宠通用;技能通用;玩家镜像支持) 1. 灵宠修改为通用模式,玩家及NPC均可召唤灵宠,NPC对应召唤的灵宠NPC与玩家的灵宠NPCID区分; 2. 技能全部为通用技能,玩家、玩家镜像、NPC均通用;支持玩家镜像赋予玩家技能进行攻击; 3. 技能释放方式8(单体恢复:增加方式6-按目标攻击力恢复血量) 4. 修改玩家技能缓存格式 5. 修复玩家灵宠技能升级bug --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py | 41 +++++++++++++++++++++++++++++++---------- 1 files changed, 31 insertions(+), 10 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py index 9a5614c..2abebb8 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py @@ -549,31 +549,39 @@ 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 @@ -581,12 +589,11 @@ #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) @@ -597,6 +604,20 @@ #增加升级活跃点效果 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)) -- Gitblit v1.8.0