ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -701,6 +701,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
@@ -855,7 +889,16 @@
    reModelID = lineupIpyData.GetReModelID()
    lvReIpyData = None
    heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) if heroID else None
    npcStronger = IpyGameDataPY.GetIpyGameDataNotLog("NPCStronger", npcID)
    npcStronger = None
    npcStrongerList = IpyGameDataPY.GetIpyGameDataListNotLog("NPCStronger", npcID)
    if npcStrongerList and strongerLV:
        for strongerData in npcStrongerList:
            if not strongerData.GetNPCLV() or strongerLV <= strongerData.GetNPCLV():
                npcStronger = strongerData
                break
        if not npcStronger:
            npcStronger = npcStrongerList[-1] # 找不到时取最后一条
    if npcStronger and strongerLV:
        lvReIpyData = IpyGameDataPY.GetIpyGameData("LVReValue", reModelID, strongerLV)
        if lvReIpyData:
@@ -1191,8 +1234,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
@@ -2197,23 +2247,25 @@
    heroCount = 0
    batObjMgr = BattleObj.GetBatObjMgr()
    statInfo = {}
    drLineupInfo = {}
    drHeroIDDict = {}
    for faction in turnFight.factionDict.keys():
        if str(faction) not in statInfo:
            statInfo[str(faction)] = {}
        facStatInfo = statInfo[str(faction)]
        if str(faction) not in drLineupInfo:
            drLineupInfo[str(faction)] = {}
        facDRLineupInfo = drLineupInfo[str(faction)]
        if str(faction) not in drHeroIDDict:
            drHeroIDDict[str(faction)] = {}
        facDRHeroIDDict = drHeroIDDict[str(faction)]
        batFaction = turnFight.getBatFaction(faction)
        batFaction.totalHurt = 0
        for num in batFaction.lineupDict.keys():
            if str(num) not in facStatInfo:
                facStatInfo[str(num)] = {}
            lineupStatInfo = facStatInfo[str(num)]
            if str(num) not in facDRHeroIDDict:
                facDRHeroIDDict[str(num)] = {}
            posHeroIDDict = facDRHeroIDDict[str(num)]
            batLineup = batFaction.getBatlineup(num)
            batLineup.totalHurt = 0
            facDRLineupInfo[str(num)] = batLineup.lineupInfo
            GameWorld.DebugLogEx("阵容明细: faction=%s,num=%s", faction, num)
            for posNum, objID in batLineup.getPosObjIDDict().items():
                if posNum == ChConfig.TFPosNum_Mingge:
@@ -2233,6 +2285,7 @@
                dead = 0 if batObj.IsAlive() else 1
                if heroID:
                    heroCount += 1
                    posHeroIDDict[str(posNum)] = heroID
                GameWorld.DebugLogEx("    Pos:%s ID=%s,npcID=%s,heroID=%s,HP=%s/%s, 输出=%s,承伤=%s,治疗=%s", 
                                     posNum, objID, npcID, heroID, batObj.GetHP(), batObj.GetMaxHP(), atkHurt, defHurt, cureHP)
                lineupStatInfo[str(posNum)] = {"ObjID":objID, "HeroID":heroID, "NPCID":npcID, "AtkHurt":atkHurt, "DefHurt":defHurt, "CureHP":cureHP, 
@@ -2247,7 +2300,7 @@
    # 流向记录
    if mapID != ChConfig.Def_FBMapID_Main and reqPlayerID:
        DataRecordPack.DR_FightStat(reqPlayerID, mapID, funcLineID, turnFight.isWin, turnFight.turnNum, turnFight.turnMax, 
                                    heroCount, turnFight.costTime, statInfo, drLineupInfo, guid)
                                    heroCount, turnFight.costTime, drHeroIDDict, guid)
    return
#// B4 14 查看战报 #tagCSTurnFightReportView