From 3d91868f55b438ec735569142d34559aad930d2f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 09 十一月 2023 16:23:05 +0800
Subject: [PATCH] 8325 【主干】【BT0.1】【后端】套装技能(套装技能升级支持;召唤兽对玩家主人使用技能支持)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 2 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 72 ++++++++++++++++++++++-------------
2 files changed, 47 insertions(+), 27 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
index cb39531..0841b1f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -1269,10 +1269,9 @@
if not suitCntDict:
return
#GameWorld.DebugLog(' suitCntDict=%s'%suitCntDict)
- learnSkillList = []
- delSkillIDList = []
+ learnSkillInfo = {}
+ suiteSkillTypeIDList = []
skillManager = curPlayer.GetSkillManager()
- playerName = curPlayer.GetName()
for suiteID, starList in suitCntDict.items():
ipyDataList = IpyGameDataPY.GetIpyGameDataList('EquipSuitAttr', suiteID)
if not ipyDataList:
@@ -1283,39 +1282,58 @@
skillID = ipyData.GetSkillID()
activateIndex = ipyData.GetActivateIndex()
isActivate = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex)
- #GameWorld.DebugLog("suiteID=%s,suiteCnt=%s,needStar=%s,isActivate=%s" % (suiteID, suiteCnt, needStar, isActivate))
+ skillData = None if not skillID else GameWorld.GetGameData().GetSkillBySkillID(skillID)
+ skillTypeID = 0 if not skillData else skillData.GetSkillTypeID()
+ skillLV = 0 if not skillData else skillData.GetSkillLV()
+ #GameWorld.DebugLog("suiteID=%s,suiteCnt=%s,needStar=%s,isActivate=%s,skillID=%s,skillTypeID=%s,skillLV=%s" % (suiteID, suiteCnt, needStar, isActivate, skillID, skillTypeID, skillLV))
+ if skillTypeID and skillTypeID not in suiteSkillTypeIDList:
+ suiteSkillTypeIDList.append(skillTypeID)
if isActivate and [1 if star >= needStar else 0 for star in starList].count(1) >= suiteCnt:
#GameWorld.DebugLog(" 套装: suiteID=%s,suiteCnt=%s,needStar=%s" % (suiteID, suiteCnt, needStar))
for attrID, attrValue in ipyData.GetAttrInfo().items():
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSuit)
#GameWorld.DebugLog(" 属性: ID=%s +%s" % (attrID, attrValue))
#技能
- if skillID and not skillManager.FindSkillBySkillTypeID(skillID):
- learnSkillList.append(skillID)
-# #广播,改为激活时广播即可
-# notifyMark = ipyData.GetIsNotify()
-# if notifyMark and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark):
-# PlayerControl.WorldNotify(0, 'AllStarLevelUp' if needStar else 'AllStarLevelUp2', [playerName, suiteID, suiteCnt, needStar])
-# GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark, 1)
-
- else:
- if skillID and skillManager.FindSkillBySkillTypeID(skillID):
- delSkillIDList.append(skillID)
- skillManager.DeleteSkillBySkillTypeID(skillID)
-
-
- for skillID in learnSkillList:
- GameWorld.DebugLog(' 激活套装技能 skillResID=%s' % (skillID))
- skillData = GameWorld.GetGameData().FindSkillByType(skillID, 1)
+ if skillTypeID and skillLV and skillLV > learnSkillInfo.get(skillTypeID, 0):
+ learnSkillInfo[skillTypeID] = skillLV
+
+ #GameWorld.DebugLog("suiteSkillTypeIDList:%s" % suiteSkillTypeIDList)
+ #GameWorld.DebugLog("learnSkillInfo:%s" % learnSkillInfo)
+ skillChange = False
+ playerCtl = PlayerControl.PlayerControl(curPlayer)
+ for skillTypeID in suiteSkillTypeIDList:
+ if skillTypeID in learnSkillInfo:
+ #需要学习的不处理
+ continue
+ curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID)
+ if not curSkill:
+ continue
+ skillChange = True
+ skillID = curSkill.GetSkillID()
+ GameWorld.DebugLog(" 删除套装技能: skillID=%s" % skillID)
+ skillManager.DeleteSkillBySkillID(skillID)
+ playerCtl.RefreshSkillFightPowerByDel(skillID)
+
+ for skillTypeID, skillLV in learnSkillInfo.items():
+ skillData = GameWorld.GetGameData().FindSkillByType(skillTypeID, skillLV)
if not skillData:
continue
- skillManager.LVUpSkillBySkillTypeID(skillID)
- PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerEx(skillID, 0)
+ skillID = skillData.GetSkillID()
+ curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID)
+ if curSkill:
+ if skillLV == curSkill.GetSkillLV():
+ continue
+ delSkillID = curSkill.GetSkillID()
+ GameWorld.DebugLog(" 删除套装技能等级: skillTypeID=%s,skillLV=%s,skillID=%s,delSkillID=%s" % (skillTypeID, skillLV, skillID, delSkillID))
+ skillManager.DeleteSkillBySkillID(delSkillID)
+ playerCtl.RefreshSkillFightPowerByDel(delSkillID)
+
+ GameWorld.DebugLog(" 激活套装技能等级: skillTypeID=%s,skillLV=%s,skillID=%s" % (skillTypeID, skillLV, skillID))
+ skillManager.LVUPSkillByID(skillID)
+ playerCtl.RefreshSkillFightPowerEx(skillID, 0)
+ skillChange = True
- for delSkillID in delSkillIDList:
- PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerByDel(delSkillID)
-
- if learnSkillList or delSkillIDList:
+ if skillChange:
# 重刷被动技能
PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index 02a3845..932035a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -609,6 +609,8 @@
owner = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotNPC, curNPC)
if not owner:
+ owner = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curNPC)
+ if not owner:
return False
return GameWorld.IsSameObj(curTag, owner)
--
Gitblit v1.8.0