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
@@ -28,16 +29,18 @@
import GameLogic_Dingjunge
import PlayerMingge
import PlayerBeauty
import PlayerFamily
import PlayerHorse
import PlayerGubao
import PlayerHero
import PlayerHJG
import GameWorld
import ChPlayer
import ChConfig
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
@@ -358,8 +365,6 @@
            
            effCardAddPerAft = heroPreset.GetEffCardAddPer()
            
            if effCardAddPerBef == effCardAddPerAft:
                continue
            heroPresetID = heroPreset.heroPresetID
            GameWorld.DebugLog("武将物品变化影响: itemIndex=%s,heroPresetID=%s,effCardAddPerBef=%s,effCardAddPerAft=%s" 
                               % (itemIndex, heroPresetID, effCardAddPerBef, effCardAddPerAft), self.playerID)
@@ -775,9 +780,9 @@
        skinID = 0
        skinIDList = heroIpyData.GetSkinIDList()
        if skinIndex < 0 or skinIndex >= len(skinIDList):
            skinID = skinIDList[skinIndex]
        elif skinIDList:
            skinID = skinIDList[0]
        elif skinIDList:
            skinID = skinIDList[skinIndex]
            
        lineupHero = presetLineup.GetLineupHero(posNum)
        #if False:
@@ -951,6 +956,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 +977,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 +987,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 +1085,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,9 +1184,11 @@
            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:
@@ -1160,7 +1196,4 @@
    else:
        GameWorld.DebugLog("主线阵容没有在战斗中,不需要处理", playerID)
        
    PlayerFamily.RefreshFamilyMember(curPlayer) # 更新公会
    # 更新排行榜
    return