From 05251cfca26ce5f044923793da7c97597413ed1b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 13 八月 2025 19:18:54 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(主线掉落物品默认不堆叠;注:单个物品的个数可能大于1,单个战利品ID可能一次掉多个;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py |   48 ++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 42 insertions(+), 6 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 cbe7cb0..bf3a1e4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -16,6 +16,7 @@
 #"""Version = 2025-07-02 17:30"""
 #-------------------------------------------------------------------------------
 
+import BattleObj
 import TurnAttack
 import PyGameData
 import ShareDefine
@@ -56,6 +57,7 @@
         self.olPlayer = None
         self.shapeType = 0
         self.heroItemDict = {} # 阵容武将背包索引信息  {itemIndex:posNum, ...}
+        self.lineupChange = False # 是否已变更阵容标记,在刷新属性后重置标记
         self.__refreshState = 0 # 刷属性标记, 0-不需要刷新了,1-需要刷新
         
         self.__freeLineupHeroObjs = [] # 释放的空闲对象[LineupHero, ...]
@@ -69,6 +71,7 @@
         @param shapeType: 阵型
         @param refreshForce: 是否强制刷属性
         '''
+        self.lineupChange = True
         self.shapeType = shapeType
         self.heroItemDict = heroItemDict
         GameWorld.DebugLog("更新阵容: lineupID=%s,%s" % (self.lineupID, heroItemDict), self.playerID)
@@ -129,6 +132,7 @@
         if not self.__refreshState:
             return False
         doRefreshLineupAttr(self.olPlayer.curPlayer, self.olPlayer, self)
+        self.lineupChange = False
         self.__refreshState = 0
         return True
     
@@ -154,7 +158,7 @@
         return
     
     def OnClear(self):
-        self.mainFight.turnFight.clearFight()
+        self.mainFight.turnFight.exitFight()
         return
     
     def SetPlayer(self, curPlayer):
@@ -661,8 +665,8 @@
             inheritPer = 1 # 继承比例,默认100%
             if attrID in ChConfig.AttrInheritPerDict:
                 attrInheritPerID = ChConfig.AttrInheritPerDict[attrID] # 继承ID
-                inheritPer = selfAttrDict.get(attrInheritPerID, 100) # 继承比例从武将自身属性中取
-                inheritPer /= 100.0
+                inheritPer = selfAttrDict.get(attrInheritPerID, 10000) # 继承比例从武将自身属性中取
+                inheritPer /= 10000.0
                 
             lineupHaloValue, lineupHaloPer = lineupHaloAttrInfo.get(attrID, 0), 0
             fetterValue, fetterPer = fetterAttrDict.get(attrID, 0), 0
@@ -702,7 +706,7 @@
         # 计算战力
         fightPower = FormulaControl.Eval("fightPowerFormula", fightPowerFormula, fightPowerParamDict)
         
-        GameWorld.DebugLog("    fightPower=%s,heroSkillIDList=%s" % (fightPower, lineupHero.heroSkillIDList))
+        GameWorld.DebugLog("    fightPower=%s,heroSkillIDList=%s" % (fightPower, lineupHero.heroSkillIDList), playerID)
         skillTypeIDDict = {}
         for skillID in lineupHero.heroSkillIDList:
             skillData = IpyGameDataPY.GetIpyGameData("Skill", skillID)
@@ -724,7 +728,7 @@
             skillID = skillData.GetSkillID()
             lineupHero.heroSkillIDList.append(skillID)
             skillFightPower += skillData.GetFightPower()
-        GameWorld.DebugLog("    skillFightPower=%s,heroSkillIDList=%s" % (skillFightPower, lineupHero.heroSkillIDList))
+        GameWorld.DebugLog("    skillFightPower=%s,heroSkillIDList=%s" % (skillFightPower, lineupHero.heroSkillIDList), playerID)
         
         # 最终战力
         fightPowerTotal = fightPower + skillFightPower
@@ -738,10 +742,42 @@
     lineup.fightPower = lineupFightPower
     GameWorld.DebugLog("    阵容最终战力: lineupID=%s,lineupFightPower=%s" % (lineupID, lineupFightPower), playerID)
     
-    # 更新排行榜
+    # 非主线阵容不处理以下内容
     if lineupID != ShareDefine.Lineup_Main:
         return
     
     PlayerControl.SetFightPower(curPlayer, lineupFightPower)
     
+    mainFightMgr = TurnAttack.GetMainFightMgr(curPlayer)
+    mainTurnFight = mainFightMgr.turnFight
+    # 主线战斗如果有在战斗中,实时更新
+    if mainTurnFight and mainTurnFight.isInFight():
+        # 如果是阵容变化的,重新开始战斗
+        if lineup.lineupChange:
+            GameWorld.DebugLog("主阵容变化,重新开始战斗", playerID)
+            if mainTurnFight.mapID == ChConfig.Def_FBMapID_Main:
+                TurnAttack.__doMainLevelWave(curPlayer, True)
+            elif mainTurnFight.mapID == ChConfig.Def_FBMapID_MainBoss:
+                TurnAttack.__doMainBossStart(curPlayer)
+                
+        # 否则只重新设置战斗属性
+        else:
+            GameWorld.DebugLog("主阵容卡牌属性变更,更新战斗武将属性", playerID)
+            # lineup        为卡牌的阵容,仅有阵容属性相关,没有战斗对象
+            # batLineup    为卡牌阵容体现到具体战斗的战斗阵容,有具体的战斗对象
+            faction, num = ChConfig.Def_FactionA, 1 # 主线战斗玩家自己默认阵营A的第1个战斗阵容
+            batLineup = mainTurnFight.getBatFaction(faction).getBatlineup(num)
+            batObjMgr = BattleObj.GetBatObjMgr()
+            for posNum, objID in batLineup.posObjIDDict.items():
+                batObj = batObjMgr.getBatObj(objID)
+                if not batObj:
+                    continue
+                lineupHero = lineup.GetLineupHero(posNum)
+                if lineupHero.heroBatAttrDict:
+                    batObj.UpdInitBatAttr(lineupHero.heroBatAttrDict)
+    else:
+        GameWorld.DebugLog("主阵容没有在战斗中,不需要处理", playerID)
+        
+    # 更新排行榜
+    
     return

--
Gitblit v1.8.0