From 9bc8c9c3e4b48dab63efbca946713465ee30b4cd Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 17 一月 2024 15:47:31 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(副本回合制NPC支持配置精怪技能、神通技能;增加属性强化治疗215、弱化治疗216;NPC支持触发被动效果;被动效果触发方式增加按回合触发-效果ID5000;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py |   58 ++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 34 insertions(+), 24 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 76bfdd2..ea9f691 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -76,6 +76,7 @@
 import PlayerVip
 import GameObj
 import ChNPC
+import PassiveBuffEffMng
 
 import random
 import math
@@ -2268,7 +2269,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, mirrorPlayerID=0):
+def SummonMapNpc(npcId, rebornX, rebornY, aiType=0, lastTime=0, playerID=0, sightLevel=0, refreshID=0, mirrorPlayerID=0, skillIDList=None, skillIDExList=None):
     npcData = GameWorld.GetGameData().FindNPCDataByID(npcId)
     if not npcData:
         GameWorld.ErrLog("找不到该NPCID: %s" % npcId)
@@ -2304,10 +2305,28 @@
         curSummon.SetDict(ChConfig.Def_NPC_Dict_MirrorPlayerID, mirrorPlayerID)
         
     curSummon.Reborn(rebornX, rebornY, False)
+    skillManager = curSummon.GetSkillManager()
+    #有指定的技能,重新学习
+    if skillIDList:
+        #GameWorld.DebugLog("指定召唤兽技能: npcID=%s,skillIDList=%s" % (npcID, skillIDList))
+        skillManager.ResetSkill()
+        for skillID in skillIDList:
+            skillManager.LVUPSkillByID(skillID)
+    #附加学习技能
+    if skillIDExList:
+        for skillID in skillIDExList:
+            if not skillManager.FindSkillBySkillID(skillID):
+                skillManager.LVUPSkillByID(skillID)
     NPCControl(curSummon).DoNPCRebornCommLogic(tick)
     
     FBLogic.DoFBRebornSummonNPC(curSummon, tick)
     #__NotifyMapPlayerSummonMapNPC(npcId, rebornX, rebornY)
+    if skillIDList or skillIDExList:
+        learnSkillIDList = []
+        for index in range(0, skillManager.GetSkillCount()):
+            useSkill = skillManager.GetSkillByIndex(index)
+            learnSkillIDList.append(useSkill.GetSkillID())
+        GameWorld.DebugLog("召唤的NPC所有技能: curID=%s,npcID=%s,skill=%s" % (curSummon.GetID(), npcId, learnSkillIDList))
     return curSummon
 
 def SummonNPC(gameObj, npcID, rebornX, rebornY, skillIDList=None):
@@ -2552,6 +2571,8 @@
                     PyGameData.g_playerPriWoodPileNPCDict.pop(priWoodPilePlayerID)
                 break
             
+    PassiveBuffEffMng.GetPassiveEffManager().RemovePassiveEff((curNPC.GetID(), IPY_GameWorld.gotNPC))
+    
     # C++设置npc死亡
     curNPC.SetDead(curNPC.GetDictByKey(ChConfig.Def_NPCDead_Reason),
                    curNPC.GetDictByKey(ChConfig.Def_NPCDead_KillerType),
@@ -4120,13 +4141,13 @@
 #
 #        #清空禁止
 #        curNPC.ForbiddenSkillTypeList_Clear()
-    
-        #宠物特殊处理
-        if PetControl.RefurbishPetAttr(curNPC):
-            return
         
+        isPetNPC = PetControl.IsPetNPC(curNPC)
         mirrorPlayerID = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID)
-        if mirrorPlayerID:
+        #宠物特殊处理
+        if isPetNPC:
+            PetControl.RefurbishPetAttr(curNPC)
+        elif mirrorPlayerID:
             self.SetMirrorPlayerNPCAttr(mirrorPlayerID, isReborn)
         else:
             DoNPCAttrStrengthen(curNPC, isReborn)
@@ -4139,12 +4160,13 @@
         #客户端自己算血量上限
 #        if GameObj.GetMaxHP(curNPC) != curNPCMaxHP_Before:
 #            curNPC.Notify_MaxHP()
-            
+        
+        PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curNPC)
         return
     
     def SetMirrorPlayerNPCAttr(self, mirrorPlayerID, isReborn):
         ## 设置镜像玩家NPC属性
-        PropDict, PlusDict = PlayerViewCacheTube.GetPlayerPropPlusDictByID(mirrorPlayerID)
+        PropDict, _ = PlayerViewCacheTube.GetPlayerPropPlusDictByID(mirrorPlayerID)
         if not PropDict:
             return
         curNPC = self.__Instance
@@ -4167,26 +4189,14 @@
         GameObj.SetAtkBackDefRate(curNPC, PropDict.get("AtkBackDefRate", 0))
         GameObj.SetSuckHPPer(curNPC, PropDict.get("SuckHPPer", 0))
         GameObj.SetSuckHPDefPer(curNPC, PropDict.get("SuckHPDefPer", 0))
+        GameObj.SetCurePer(curNPC, PropDict.get("CurePer", 0))
+        GameObj.SetCureDefPer(curNPC, PropDict.get("CureDefPer", 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)
-                
-        learnSkillIDList = []
-        for index in range(0, skillManager.GetSkillCount()):
-            useSkill = skillManager.GetSkillByIndex(index)
-            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))
+        GameWorld.DebugLog("设置镜像玩家: objID=%s,NPCID=%s,mirrorPlayerID=%s,maxHP=%s" 
+                           % (curNPC.GetID(), curNPC.GetNPCID(), mirrorPlayerID, GameObj.GetMaxHP(curNPC)))
         return
     
     def SetHelpBattleRobotRebornAttr(self, fightPower):

--
Gitblit v1.8.0