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/NPC/NPCCommon.py |   37 +++++++++++++++++++++++--------------
 1 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 44956ba..76bfdd2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -2268,7 +2268,7 @@
 # @param aiType: AI类型
 # @return 如果召唤失败返回None 否则返回召唤的NPC的实例
 # @remarks 在地图里召唤NPC 根据NPCID 出生点 AI类型 和TICK
-def SummonMapNpc(npcId, rebornX, rebornY, aiType=0, lastTime=0, playerID=0, sightLevel=0, refreshID=0, pvpPlayerID=0):
+def SummonMapNpc(npcId, rebornX, rebornY, aiType=0, lastTime=0, playerID=0, sightLevel=0, refreshID=0, mirrorPlayerID=0):
     npcData = GameWorld.GetGameData().FindNPCDataByID(npcId)
     if not npcData:
         GameWorld.ErrLog("找不到该NPCID: %s" % npcId)
@@ -2300,8 +2300,8 @@
     if curSummon.GetType() == ChConfig.ntRobot:
         __OnFBRobotReborn(curSummon, curSummon.GetLV())
         
-    if curSummon.GetType() == ChConfig.ntPVP and pvpPlayerID:
-        curSummon.SetDict(ChConfig.Def_NPC_Dict_PVPPlayerID, pvpPlayerID)
+    if mirrorPlayerID:
+        curSummon.SetDict(ChConfig.Def_NPC_Dict_MirrorPlayerID, mirrorPlayerID)
         
     curSummon.Reborn(rebornX, rebornY, False)
     NPCControl(curSummon).DoNPCRebornCommLogic(tick)
@@ -2506,8 +2506,8 @@
     if summonPlayerID > 0:
         curNPC.SetDict(ChConfig.Def_NPC_Dict_SummonMapNPCPlayerID, 0)
         
-    if curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_PVPPlayerID):
-        curNPC.SetDict(ChConfig.Def_NPC_Dict_PVPPlayerID, 0)
+    if curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID):
+        curNPC.SetDict(ChConfig.Def_NPC_Dict_MirrorPlayerID, 0)
         
     refreshObj = NPCRealmRefresh.GetTagNPCRefresh(curNPC)
     if refreshObj:
@@ -4125,9 +4125,9 @@
         if PetControl.RefurbishPetAttr(curNPC):
             return
         
-        pvpPlayerID = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_PVPPlayerID)
-        if pvpPlayerID:
-            self.SetPVPNPCPlayerAttr(pvpPlayerID)
+        mirrorPlayerID = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID)
+        if mirrorPlayerID:
+            self.SetMirrorPlayerNPCAttr(mirrorPlayerID, isReborn)
         else:
             DoNPCAttrStrengthen(curNPC, isReborn)
             
@@ -4142,8 +4142,9 @@
             
         return
     
-    def SetPVPNPCPlayerAttr(self, pvpPlayerID):
-        PropDict, PlusDict = PlayerViewCacheTube.GetPlayerPropPlusDictByID(pvpPlayerID)
+    def SetMirrorPlayerNPCAttr(self, mirrorPlayerID, isReborn):
+        ## 设置镜像玩家NPC属性
+        PropDict, PlusDict = PlayerViewCacheTube.GetPlayerPropPlusDictByID(mirrorPlayerID)
         if not PropDict:
             return
         curNPC = self.__Instance
@@ -4166,18 +4167,26 @@
         GameObj.SetAtkBackDefRate(curNPC, PropDict.get("AtkBackDefRate", 0))
         GameObj.SetSuckHPPer(curNPC, PropDict.get("SuckHPPer", 0))
         GameObj.SetSuckHPDefPer(curNPC, PropDict.get("SuckHPDefPer", 0))
-                
+        
+        if not isReborn:
+            return
+        
         skillManager = curNPC.GetSkillManager()
         SkillInfo = PlusDict.get("SkillInfo", {})
         for _, skillLVDict in SkillInfo.items():
             for skillID, _ in skillLVDict.items():
+                skillID = GameWorld.ToIntDef(skillID)
+                skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
+                if not skillData:
+                    continue
                 skillManager.LearnSkillByID(skillID)
                 
-        GameWorld.DebugLog("SetPVPNPCPlayerAttr: objID=%s,NPCID=%s,pvpPlayerID=%s,maxHP=%s,SkillInfo=%s" 
-                           % (curNPC.GetID(), curNPC.GetNPCID(), pvpPlayerID, GameObj.GetMaxHP(curNPC), SkillInfo))
+        learnSkillIDList = []
         for index in range(0, skillManager.GetSkillCount()):
             useSkill = skillManager.GetSkillByIndex(index)
-            GameWorld.DebugLog("    NPC SkillID=%s" % useSkill.GetSkillID())
+            learnSkillIDList.append(useSkill.GetSkillID())
+        GameWorld.DebugLog("设置镜像玩家: objID=%s,NPCID=%s,mirrorPlayerID=%s,maxHP=%s,learnSkillIDList=%s" 
+                           % (curNPC.GetID(), curNPC.GetNPCID(), mirrorPlayerID, GameObj.GetMaxHP(curNPC), learnSkillIDList))
         return
     
     def SetHelpBattleRobotRebornAttr(self, fightPower):

--
Gitblit v1.8.0