From ca11e79c7981d66e3d8bdbe12b3f2b44b3ae7063 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 26 一月 2026 16:18:36 +0800
Subject: [PATCH] 438 【方案】方案预设-服务端(武将方案切换时如果为空方案则复制当前武将方案;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py |   52 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 45 insertions(+), 7 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 c91d54a..cd3b221 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -19,6 +19,7 @@
 import BattleObj
 import TurnAttack
 import PyGameData
+import SkillCommon
 import ShareDefine
 import PlayerPreset
 import PlayerControl
@@ -38,6 +39,8 @@
 import ChEquip
 
 import time
+
+g_calcDetail = 0
 
 class LineupHero():
     ## 阵容武将,注意:同一个武将在不同阵容中可能属性不一样
@@ -77,6 +80,10 @@
         if not isReload: # 非重读阵容的视为变更
             self.isHeroChange = True
         reloadEffHeroCard(curPlayer, self) # 更新武将阵容强制重刷生效卡牌
+        return
+    
+    def OnSwitch(self):
+        self.isHeroChange = True
         return
     
     def IsHeroItemIn(self, itemIndex): return itemIndex in self.heroItemDict
@@ -951,6 +958,7 @@
     horseAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Horse)
     beautyAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Beauty)
     minggeAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Mingge, mgPresetID)
+    mgSkillLVDict = olPlayer.GetCalcSpecInfo(ChConfig.Def_CalcAttr_Mingge, mgPresetID)
     dingjungeAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Dingjunge) if exclusiveMapID == ChConfig.Def_FBMapID_Dingjunge else {}
     
     GameWorld.DebugLog("    国家武将统计=%s" % countryHeroInfo, playerID)
@@ -971,7 +979,7 @@
     GameWorld.DebugLog("    主幻境阁属性=%s" % hjgAttrDict, playerID)
     GameWorld.DebugLog("    主公坐骑属性=%s" % horseAttrDict, playerID)
     GameWorld.DebugLog("    主公红颜属性=%s" % beautyAttrDict, playerID)
-    GameWorld.DebugLog("    主公命格属性=%s,mgPresetID=%s" % (minggeAttrDict, mgPresetID), playerID)
+    GameWorld.DebugLog("    主公命格属性=%s,技能:%s,mgPresetID=%s" % (minggeAttrDict, mgSkillLVDict, mgPresetID), playerID)
     GameWorld.DebugLog("    定军专属属性=%s" % dingjungeAttrDict, playerID)
     effCardAddPer = heroPreset.GetEffCardAddPer()
     effCardAddPer /= 10000.0
@@ -981,9 +989,23 @@
     OfficialLV = curPlayer.GetOfficialRank()
     GameWorld.DebugLog("    PlayerLV=%s,OfficialLV=%s" % (PlayerLV, OfficialLV), playerID)
     
+    mgSkillFightPower = 0
+    for skillTypeID, skillLV in mgSkillLVDict.items():
+        skillID = SkillCommon.GetSkillIDBySkillTypeID(skillTypeID, skillLV)
+        skillData = IpyGameDataPY.GetIpyGameData("Skill", skillID)
+        if not skillData:
+            continue
+        paramDict = {"SkillPower":skillData.GetFightPower(), "PlayerLV":PlayerLV, "OfficialLV":OfficialLV}
+        sFightPower = FormulaControl.Eval("skillFPFormula", skillFPFormula, paramDict, toInt=True)
+        mgSkillFightPower += sFightPower
+    if mgSkillLVDict:
+        GameWorld.DebugLog("    命格技能战力=%s,mgSkillLVDict=%s" % (mgSkillFightPower, mgSkillLVDict), playerID)
+        
     fpRatioIpyData = IpyGameDataPY.GetIpyGameData("FightPowerRatio", OfficialLV)
     
     lineupFightPower = 0 # 阵容总战力
+    lineupFightPower += mgSkillFightPower
+    
     for heroID, selfAttrDict in heroSelfAttrInfo.items():
         lineupHero = presetLineup.GetLineupHeroByID(heroID)
         if not lineupHero:
@@ -1065,13 +1087,27 @@
                              "starTalentValue":starTalentValue, "starTalentPer":starTalentPer, "breakLVValue":breakLVValue, "breakLVPer":breakLVPer,
                              "awakeTalentValue":awakeTalentValue, "awakeTalentPer":awakeTalentPer,
                              }
-            
+            #testDict = {'lineupHaloPer': 0.1, 'minggeValue': 43685, 'heroLVValue': 836851, 'cardPer': 72.276, 'realmValue': 9878456, 'fetterPer': 0.15, 'horseValue': 5040, 'equipValue': 18381400, 'inheritPer': 1.4, 'lvValue': 53600}
+            #testDict = {'inheritPer': 1, 'minggeValue': 905, 'equipValue': 796}
+            #for k in attrParamDict.keys():
+            #    v = testDict.get(k, 0)
+            #    exec("%s = %s" % (k, v))
+            #    attrParamDict[k] = v
             if attrID in ChConfig.BaseAttrIDList:
-                attrValue = FormulaControl.Eval("baseAttrFormula", baseAttrFormula, attrParamDict, toInt=False, ndigits=3)
+                attrValue = FormulaControl.Eval("baseAttrFormula", baseAttrFormula, attrParamDict, toInt=False, ndigits=2)
+                #GameWorld.DebugLog("    evalValue=%s,attrValue=%s" % (eval(baseAttrFormula), attrValue))
             else:
-                attrValue = FormulaControl.Eval("otherAttrFormula", otherAttrFormula, attrParamDict, toInt=False, ndigits=3)
-            #GameWorld.DebugLog("    attrID=%s,attrValue=%s,attrParamDict=%s" % (attrID, attrValue, attrParamDict))
-            
+                attrValue = FormulaControl.Eval("otherAttrFormula", otherAttrFormula, attrParamDict, toInt=False, ndigits=2)
+                #GameWorld.DebugLog("    evalValue=%s,attrValue=%s" % (eval(otherAttrFormula), attrValue))
+            # 前端对比刷属性明细时需要
+            if g_calcDetail and attrValue > 0:
+                calcParamDict = {}
+                for k, v in attrParamDict.items():
+                    if not v or (k == "inheritPer" and v == 1):
+                        continue
+                    calcParamDict[k] = v
+                GameWorld.DebugLogEx("    heroID=%s,attrID=%s,attrValue=%s,%s", heroID, attrID, attrValue, calcParamDict)
+                
             attrIpyData = IpyGameDataPY.GetIpyGameData("PlayerAttr", attrID)
             attrName = attrIpyData.GetParameter() if attrIpyData else "%s" % attrID
             attrRatioName = "%sRatio" % attrName
@@ -1150,10 +1186,12 @@
             faction, num = ChConfig.Def_FactionA, 1 # 主线战斗玩家自己默认阵营A的第1个战斗阵容
             batLineup = mainTurnFight.getBatFaction(faction).getBatlineup(num)
             batObjMgr = BattleObj.GetBatObjMgr()
-            for posNum, objID in batLineup.posObjIDDict.items():
+            for posNum, objID in batLineup.getPosObjIDDict().items():
                 batObj = batObjMgr.getBatObj(objID)
                 if not batObj:
                     continue
+                if batObj.GetBatObjType() != ChConfig.BatObjType_BatHero:
+                    continue
                 lineupHero = presetLineup.GetLineupHero(posNum)
                 if lineupHero.heroBatAttrDict:
                     batObj.UpdInitBatAttr(lineupHero.heroBatAttrDict, lineupHero.heroSkillIDList)

--
Gitblit v1.8.0