From 8683baa38581e664f92fcfd7d38edf6b01e8b157 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 07 八月 2025 16:19:09 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(重生扣除货币)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py |   60 +++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 49 insertions(+), 11 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..cbe7cb0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -30,7 +30,7 @@
 import time
 
 class LineupHero():
-    ## 阵容战斗武将,注意:同一个武将在不同阵容中可能属性不一样
+    ## 阵容武将,注意:同一个武将在不同阵容中可能属性不一样
     
     def __init__(self):
         self.Clear()
@@ -39,10 +39,12 @@
     def Clear(self):
         self.itemIndex = 0
         self.heroID = 0
+        self.skinID = 0
         self.posNum = 0
         self.heroBatAttrDict = {} # 武将的最终战斗属性字典, {attrID:value, ...}
         self.heroSkillIDList = [] # 武将拥有的技能ID列表 [skillID, ...]
         self.fightPower = 0 # 武将最终战力
+        self.skillFightPower = 0 # 技能战力
         return
     
 class Lineup():
@@ -61,7 +63,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 +73,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 +100,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):
         ## 获取阵容信息,即要用到该阵容了,如战斗或者保存缓存信息等
@@ -147,7 +154,7 @@
         return
     
     def OnClear(self):
-        self.mainFight.clear()
+        self.mainFight.turnFight.clearFight()
         return
     
     def SetPlayer(self, curPlayer):
@@ -380,8 +387,9 @@
         # 获取其他绑定该阵容的功能,如红颜、灵兽等
         
         shapeType = lineShapeTypeDict.get(lineupID, 0)
-        lineup.UpdLineup(heroItemDict, shapeType)
+        lineup.UpdLineup(heroItemDict, shapeType, syncLineup=False)
         
+    PlayerHero.Sync_Lineup(curPlayer)
     return
 
 def doCalcAllAttr(curPlayer):
@@ -446,7 +454,15 @@
         star = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
         breakLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
         awakeLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroAwakeLV)
+        skinIndex = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroSkin)
         
+        skinID = 0
+        skinIDList = heroIpyData.GetSkinIDList()
+        if skinIndex < 0 or skinIndex >= len(skinIDList):
+            skinID = skinIDList[skinIndex]
+        elif skinIDList:
+            skinID = skinIDList[0]
+            
         InitAddPer += qualityIpyData.GetInitAddPer()
         LVAddPer += qualityIpyData.GetLVAddPer() * heroLV
         BreakLVAddPer += qualityIpyData.GetBreakLVAddPer() * breakLV
@@ -458,6 +474,7 @@
         lineupHero.itemIndex = itemIndex
         lineupHero.posNum = posNum
         lineupHero.heroID = heroID
+        lineupHero.skinID = skinID
         lineupHero.heroBatAttrDict = {}
         lineupHero.heroSkillIDList = []
         lineupHero.fightPower = 0
@@ -674,23 +691,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)
+            skillData = IpyGameDataPY.GetIpyGameData("Skill", 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