From 35d98e9c630fd4408561c8c54b4c09193bb9ce9e Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 20 三月 2026 14:57:32 +0800
Subject: [PATCH] 0312 修改服务端补主线进度通知

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py |   67 +++++++++++++++++++++++++++++++--
 1 files changed, 63 insertions(+), 4 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index fb0f5cf..21cedac 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -169,6 +169,17 @@
             deadCnt += 1
         return deadCnt
     
+    def GetBeFrozenCnt(self):
+        ## 获取本阵容累计被冰冻次数
+        totalCnt = 0
+        batObjMgr = BattleObj.GetBatObjMgr()
+        for objID in self._batHeroObjIDList:
+            batObj = batObjMgr.getBatObj(objID)
+            if not batObj:
+                continue
+            totalCnt += batObj.GetBeFrozenCnt()
+        return totalCnt
+    
 class BatFaction():
     ## 战斗阵营
     
@@ -701,6 +712,40 @@
         lineupInfo["MGSkillIDList"] = mgSkillIDList
     return lineupInfo
 
+def GetPlayerHeroBatViewLineupInfo(curPlayer, heroID, skinIndex):
+    ## 获取玩家战斗预览阵容信息
+    playerID = curPlayer.GetPlayerID()
+    heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
+    if not heroIpyData:
+        return
+    skinIDList = heroIpyData.GetSkinIDList()
+    skinID = skinIDList[skinIndex] if len(skinIDList) > skinIndex else 0
+    
+    heroBatAttrDict = IpyGameDataPY.GetFuncEvalCfg("HeroBatView", 1, {})
+    heroViewInfo = IpyGameDataPY.GetFuncEvalCfg("HeroBatView", 2) # 预览时的武将 站位|等级|星级|突破等级|觉醒等级
+    posNum = heroViewInfo[0] if len(heroViewInfo) > 0 else 2
+    heroLV = heroViewInfo[1] if len(heroViewInfo) > 1 else 100
+    star = heroViewInfo[2] if len(heroViewInfo) > 2 else 0
+    breakLV = heroViewInfo[3] if len(heroViewInfo) > 3 else 0
+    awakeLV = heroViewInfo[4] if len(heroViewInfo) > 4 else 0
+    fightPower = 0
+    
+    skillIDlist = GetNPCHeroSkillIDList(heroID, heroIpyData, breakLV, awakeLV)
+    
+    heroDict = {}
+    heroDict[str(posNum)] = {
+                             "HeroID":heroID,
+                             "SkinID":skinID,
+                             "LV":heroLV,
+                             "Star":star,
+                             "BreakLV":breakLV,
+                             "AwakeLV":awakeLV,
+                             "FightPower":fightPower,
+                             "AttrDict":{str(k):v for k, v in heroBatAttrDict.items() if v > 0},
+                             "SkillIDList":skillIDlist,
+                             }
+    return {"PlayerID":playerID, "Hero":heroDict}
+
 def GetNPCLineupInfo(lineupID, strongerLV=0, difficulty=0, isLog=True, viewNPCID=0):
     ## 获取NPC阵容信息
     # @param lineupID: 阵容ID
@@ -1200,8 +1245,15 @@
     playerServerID = GameWorld.GetPlayerServerID(curPlayer)
     guid = GameWorld.GetGUID()
     
-    atkBatPresetType = ChConfig.MapAtkBatPresetTypeDict.get(mapID, ShareDefine.BatPreset_Main)
-    atkLineupInfo = GetPlayerLineupInfo(curPlayer, atkBatPresetType, exclusiveMapID=mapID)
+    if mapID == ChConfig.Def_FBMapID_HeroBatView:
+        if not valueList:
+            return
+        heroID = valueList[0]
+        skinIndex = valueList[1] if len(valueList) > 1 else 0
+        atkLineupInfo = GetPlayerHeroBatViewLineupInfo(curPlayer, heroID, skinIndex)
+    else:
+        atkBatPresetType = ChConfig.MapAtkBatPresetTypeDict.get(mapID, ShareDefine.BatPreset_Main)
+        atkLineupInfo = GetPlayerLineupInfo(curPlayer, atkBatPresetType, exclusiveMapID=mapID)
     if not atkLineupInfo:
         GameWorld.DebugLogEx("玩家没有主线阵容数据! mapID=%s", mapID, playerID)
         return
@@ -1431,6 +1483,12 @@
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     reqType = clientData.ReqType
     reqValue = clientData.ReqValue
+
+        
+    # 开始时补通知一次当前关卡进度, 原因:前端播放战报关卡进度吞包刷新问题
+    curPlayer.SetExAttr1(PlayerControl.GetMainLevelPassValue(curPlayer), False, False) # 不通知GameServer
+    PlayerControl.SetMainLevelNowValue(curPlayer, PlayerControl.GetMainLevelNowValue(curPlayer))
+    
     
     if reqType == 0:
         __doExitMainFight(curPlayer)
@@ -1553,6 +1611,7 @@
     if not lineupMainInfo:
         GameWorld.DebugLogEx("没有设置主阵容!", playerID)
         return
+
     
     strongerLV = levelIpyData.GetNPCLV()
     difficulty = levelIpyData.GetDifficulty()
@@ -1943,7 +2002,7 @@
         if skillData.GetSkillType() in ChConfig.Def_LstBuff_List:
             #GameWorld.DebugLogEx("    持续类buff由触发时机决定剩余时间! curID=%s,index=%s,skillID=%s,buffID=%s", curID, index, skillID, buffID)
             continue
-        if skillData.GetSkillType() == ChConfig.Def_SkillType_Halo and buff.GetOwnerID() != curID:
+        if skillData.GetSkillType() in ChConfig.Def_HaloSkill_List and buff.GetOwnerID() != curID:
             GameWorld.DebugLogEx("    光环buff非光源不处理! curID=%s,index=%s,skillID=%s,buffID=%s", curID, index, skillID, buffID)
             continue
         
@@ -1991,7 +2050,7 @@
         if skillData.GetSkillType() in ChConfig.Def_LstBuff_List:
             #GameWorld.DebugLogEx("    持续类buff由触发时机决定剩余时间! curID=%s,index=%s,skillID=%s,buffID=%s", curID, index, skillID, buffID)
             continue
-        if skillData.GetSkillType() == ChConfig.Def_SkillType_Halo and buff.GetOwnerID() != curID:
+        if skillData.GetSkillType() in ChConfig.Def_HaloSkill_List and buff.GetOwnerID() != curID:
             GameWorld.DebugLogEx("    光环buff非光源不处理! curID=%s,index=%s,skillID=%s,buffID=%s", curID, index, skillID, buffID)
             continue
         remainTime = buff.GetRemainTime()

--
Gitblit v1.8.0