From 9b1eca8955321ce7ba8a8151f7c5c169da5fbff6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 06 八月 2025 15:25:29 +0800
Subject: [PATCH] 80 【常规】背包-服务端(去除使用物品多余验证;同步使用物品封包;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py |   44 ++++++++++++++++++++++++++++++++++++--------
 1 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
index 0c96bc7..e51d59f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -43,6 +43,7 @@
         self.heroBatAttrDict = {} # 武将的最终战斗属性字典, {attrID:value, ...}
         self.heroSkillIDList = [] # 武将拥有的技能ID列表 [skillID, ...]
         self.fightPower = 0 # 武将最终战力
+        self.skillFightPower = 0 # 技能战力
         return
     
 class Lineup():
@@ -61,7 +62,7 @@
         self.fightPower = 0 # 阵容总战力
         return
     
-    def UpdLineup(self, heroItemDict, shapeType=0, refreshForce=False):
+    def UpdLineup(self, heroItemDict, shapeType=0, refreshForce=False, syncLineup=True):
         '''变更阵容时更新
         @param heroItemDict: 武将背包索引信息  {itemIndex:posNum, ...}
         @param shapeType: 阵型
@@ -71,6 +72,8 @@
         self.heroItemDict = heroItemDict
         GameWorld.DebugLog("更新阵容: lineupID=%s,%s" % (self.lineupID, heroItemDict), self.playerID)
         self.RefreshLineupAttr(refreshForce)
+        if syncLineup and self.olPlayer.curPlayer:
+            PlayerHero.Sync_Lineup(self.olPlayer.curPlayer, self.lineupID)
         return
     
     def FreeLineupHero(self):
@@ -96,11 +99,14 @@
         return lineupHero
     
     def GetLineupHeroByID(self, heroID):
+        lineupHero = None
         for posNum in self.lineupHeroDict.keys():
-            lineup = self.GetLineupHero(posNum)
-            if lineup.heroID == heroID:
-                return lineup
-        return
+            lineupHero = self.GetLineupHero(posNum)
+            if lineupHero.heroID == heroID:
+                return lineupHero
+        if False:
+            lineupHero = LineupHero()
+        return lineupHero
     
     def GetLineupInfo(self):
         ## 获取阵容信息,即要用到该阵容了,如战斗或者保存缓存信息等
@@ -380,8 +386,9 @@
         # 获取其他绑定该阵容的功能,如红颜、灵兽等
         
         shapeType = lineShapeTypeDict.get(lineupID, 0)
-        lineup.UpdLineup(heroItemDict, shapeType)
+        lineup.UpdLineup(heroItemDict, shapeType, syncLineup=False)
         
+    PlayerHero.Sync_Lineup(curPlayer)
     return
 
 def doCalcAllAttr(curPlayer):
@@ -674,23 +681,44 @@
             else:
                 attrValue = FormulaControl.Eval("otherAttrFormula", otherAttrFormula, attrParamDict)
             #GameWorld.DebugLog("    attrID=%s,attrValue=%s,attrParamDict=%s" % (attrID, attrValue, attrParamDict))
-            lineupHero.heroBatAttrDict[attrID] = attrValue
             
             attrIpyData = IpyGameDataPY.GetIpyGameData("PlayerAttr", attrID)
             attrName = attrIpyData.GetParameter() if attrIpyData else "%s" % attrID
             fightPowerParamDict[attrName] = attrValue
             if attrValue:
+                lineupHero.heroBatAttrDict[attrID] = attrValue
                 logAttrDict["%s-%s" % (attrID, attrName)] = attrValue
                 
         # 计算战力
         fightPower = FormulaControl.Eval("fightPowerFormula", fightPowerFormula, fightPowerParamDict)
-        skillFightPower = 0
+        
+        GameWorld.DebugLog("    fightPower=%s,heroSkillIDList=%s" % (fightPower, lineupHero.heroSkillIDList))
+        skillTypeIDDict = {}
         for skillID in lineupHero.heroSkillIDList:
             skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
             if not skillData:
                 continue
+            skillTypeID = skillData.GetSkillTypeID()
+            if skillTypeID not in skillTypeIDDict:
+                skillTypeIDDict[skillTypeID] = skillData
+            else:
+                befSkillData = skillTypeIDDict[skillTypeID]
+                befSkillID = befSkillData.GetSkillID()
+                if befSkillID >= skillID:
+                    continue
+                skillTypeIDDict[skillTypeID] = skillData
+                
+        skillFightPower = 0
+        lineupHero.heroSkillIDList = []
+        for skillData in skillTypeIDDict.values():
+            skillID = skillData.GetSkillID()
+            lineupHero.heroSkillIDList.append(skillID)
             skillFightPower += skillData.GetFightPower()
+        GameWorld.DebugLog("    skillFightPower=%s,heroSkillIDList=%s" % (skillFightPower, lineupHero.heroSkillIDList))
+        
+        # 最终战力
         fightPowerTotal = fightPower + skillFightPower
+        lineupHero.skillFightPower = skillFightPower
         lineupHero.fightPower = fightPowerTotal
         lineupFightPower += fightPowerTotal
         

--
Gitblit v1.8.0