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