From cb1d20b4aff8ca422a12a18f024a65b201687ec0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 08 二月 2023 15:52:48 +0800
Subject: [PATCH] 9765 【BT8】【后端】神通(神通技能可用个数增加条件限制)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py |   37 ++++++++++++++++++++++++++-----------
 1 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
index b16e2ff..ab373f0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
@@ -95,7 +95,7 @@
         lvSkillTypeID = lvSkillData.GetSkillTypeID() if lvSkillData else 0
         lvSkillLV = lvSkillData.GetSkillLV() if lvSkillData else 0
         
-        ShentongSkillCount = IpyGameDataPY.GetFuncCfg("Shentong", 1)
+        ShentongSkillCount = len(IpyGameDataPY.GetFuncEvalCfg("Shentong", 1))
         skillIDList = []
         for num in range(ShentongSkillCount):
             skillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShentongSkillID % num)
@@ -141,9 +141,11 @@
     return
 
 def SetShentongSkill(curPlayer, setSkillIDList):
+    # @param setSkillIDList: 因为是发送所有技能槽设置的技能,所以元素中可能存在技能0
     if not setSkillIDList:
         return
-    ShentongSkillCountMax = IpyGameDataPY.GetFuncCfg("Shentong", 1)
+    needSkillCntList = IpyGameDataPY.GetFuncEvalCfg("Shentong", 1)
+    ShentongSkillCountMax = len(needSkillCntList)
     if len(setSkillIDList) > ShentongSkillCountMax:
         return
     
@@ -158,30 +160,43 @@
             GameWorld.ErrLog("找不到该神通技能数据! skillID=%s" % skillID)
             return
         forbidSkillIDList.append(skillID)
-        
+    
+    setSkillCount = len(forbidSkillIDList)
+    canUseSkillDict = {} # {skillTypeID:skillID, ...}
     ipyDataMgr = IpyGameDataPY.IPY_Data()
     for index in xrange(ipyDataMgr.GetShentongLVCount()):
         ipyData = ipyDataMgr.GetShentongLVByIndex(index)
         LVSkillID = ipyData.GetLVSkillID()
         if not LVSkillID:
             continue
-        if LVSkillID not in forbidSkillIDList:
-            continue
         shentongID = ipyData.GetShentongID()
         shentongClassLV = ipyData.GetShentongClassLV()
         shentongLV = ipyData.GetShentongLV()
         classLV, lv = GetShentongLVInfo(curPlayer, shentongID)
         if classLV < shentongClassLV or (classLV == shentongClassLV and lv < shentongLV):
-            GameWorld.ErrLog("神通等级不足,无法使用该技能! LVSkillID=%s,shentongID=%s,needClassLV=(%s-%s),curClassLV=(%s-%s)" 
-                             % (LVSkillID, shentongID, shentongClassLV, shentongLV, classLV, lv), curPlayer.GetPlayerID())
-            return
-        forbidSkillIDList.remove(LVSkillID)
-        
+            #GameWorld.ErrLog("神通等级不足,无法使用该技能! LVSkillID=%s,shentongID=%s,needClassLV=(%s-%s),curClassLV=(%s-%s)" 
+            #                 % (LVSkillID, shentongID, shentongClassLV, shentongLV, classLV, lv), curPlayer.GetPlayerID())
+            continue
+        skillData = GameWorld.GetGameData().GetSkillBySkillID(LVSkillID)
+        if not skillData:
+            continue
+        skillTypeID = skillData.GetSkillTypeID()
+        canUseSkillDict[skillTypeID] = LVSkillID
+        if LVSkillID in forbidSkillIDList:
+            forbidSkillIDList.remove(LVSkillID)
+            
     if forbidSkillIDList:
         GameWorld.ErrLog("存在无法使用的神通技能,无法设置! setSkillIDList=%s,forbidSkillIDList=%s" 
                          % (setSkillIDList, forbidSkillIDList), curPlayer.GetPlayerID())
         return
     
+    if setSkillCount > 0:
+        needCanUseSkillCnt = needSkillCntList[setSkillCount - 1]
+        if needCanUseSkillCnt > len(canUseSkillDict):
+            GameWorld.DebugLog("存在未解锁的神通技能孔,无法设置! setSkillIDList=%s,needCanUseSkillCnt=%s > canUseSkillCnt=%s(%s)" 
+                               % (setSkillIDList, needCanUseSkillCnt, len(canUseSkillDict), canUseSkillDict), curPlayer.GetPlayerID())
+            return
+        
     # 因为可能调整顺序,必须先统一删除再统一添加,不然可能导致技能顺序调整后先被添加后又被删除
     skillManager = curPlayer.GetSkillManager()
     playerCtl = PlayerControl.PlayerControl(curPlayer)
@@ -276,7 +291,7 @@
 
 def Sync_ShentongSkillInfo(curPlayer, isLogin=False):
     skillIDList = []
-    ShentongSkillCountMax = IpyGameDataPY.GetFuncCfg("Shentong", 1)
+    ShentongSkillCountMax = len(IpyGameDataPY.GetFuncEvalCfg("Shentong", 1))
     for num in range(ShentongSkillCountMax):
         skillIDList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShentongSkillID % num))
         

--
Gitblit v1.8.0