hxp
2023-05-24 6eb8ce81a683bf5a3024877fdcd4d8c95a8c87b5
9818 【BT10】新增古宝特效效果

# Conflicts:
# ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyFlagwar.py
12个文件已修改
186 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -2180,6 +2180,7 @@
struct tagCoat
{
    DWORD        _CoatID;    //时装编号
    BYTE        CostQuality;    //时装品质 0-普通;1-稀有;2-传说
    list        EquipItemID;    //装备物品ID(按职业顺序)
    DWORD        UnlockItemID;    //材料物品ID
    DWORD        MaxLV;    //最大星级
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py
@@ -204,7 +204,7 @@
    # 通知子服更新玩家总伤害
    if syncPlayerHurtInfo:
        serverGroupIDList = []
        sendMsg = {"syncPlayerHurtInfo":syncPlayerHurtInfo}
        sendMsg = {"syncPlayerHurtInfo":syncPlayerHurtInfo, "killBoss":1}
        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossYaomoBossHurtInfo, sendMsg, serverGroupIDList)
        
    return
@@ -228,6 +228,7 @@
    #zoneID = msgData["zoneID"]
    #npcID = msgData["npcID"]
    syncPlayerHurtInfo = msgData["syncPlayerHurtInfo"]
    isKillBoss = msgData.get("killBoss") == 1
    
    for playerID, hurtInfo in syncPlayerHurtInfo.items():
        if not PlayerControl.GetDBPlayerAccIDByID(playerID):
@@ -242,12 +243,16 @@
            continue
        Sync_CrossYaomoBossPlayerHurtInfo(curPlayer)
        
        if awardIndex == None:
            continue
        # 通知地图发放奖励
        msgInfo = ["HurtValueAward", [awardIndex, awardItemList]]
        CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
        if awardIndex != None:
            # 通知地图发放奖励
            msgInfo = ["HurtValueAward", [awardIndex, awardItemList]]
            CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
        if isKillBoss:
            # 通知地图击杀妖魔boss
            msgInfo = ["KillYaomoBoss", hurtInfo]
            CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
    return
def OnPlayerLogin(curPlayer):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py
@@ -37,6 +37,7 @@
import SkillCommon
import PlayerWeekParty
import PlayerTongTianLing
import PlayerGubao
import random
import time
@@ -174,6 +175,7 @@
            EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_ElderBattlefield, 0, ChConfig.CME_Log_Start)
            PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_ElderBattlefield, 1)
            PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_ElderBattlefield, 1)
            PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_ElderBattlefield, 1)
    else:
        rebornBuffLV = GameWorld.GetGameFB().GetPlayerGameFBDictByKey(playerID, FBPlayerDict_RebornBuffLV)
        __DoAddRebornBuff(curPlayer, rebornBuffLV, tick)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
@@ -34,6 +34,7 @@
import NetPackCommon
import SkillCommon
import EventReport
import PlayerGubao
import ItemCommon
import BuffSkill
import AICommon
@@ -525,6 +526,7 @@
        FBCommon.SetHadDelTicket(curPlayer)
        FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_FamilyWar)
        PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FamilyWar, 1)
        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_FamilyWar, 1)
    isFinalMatch = gameFB.GetGameFBDictByKey(GameFBDict_IsFinalMatch)
    roundNum = gameFB.GetGameFBDictByKey(GameFBDict_RoundNum)
    groupID = gameFB.GetGameFBDictByKey(GameFBDict_GroupID)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1702,6 +1702,7 @@
                "Coat":(
                        ("DWORD", "CoatID", 1),
                        ("BYTE", "CostQuality", 0),
                        ("list", "EquipItemID", 0),
                        ("DWORD", "UnlockItemID", 0),
                        ("DWORD", "MaxLV", 0),
@@ -5602,6 +5603,7 @@
    
    def __init__(self):
        self.CoatID = 0
        self.CostQuality = 0
        self.EquipItemID = []
        self.UnlockItemID = 0
        self.MaxLV = 0
@@ -5610,6 +5612,7 @@
        return
        
    def GetCoatID(self): return self.CoatID # 时装编号
    def GetCostQuality(self): return self.CostQuality # 时装品质 0-普通;1-稀有;2-传说
    def GetEquipItemID(self): return self.EquipItemID # 装备物品ID(按职业顺序)
    def GetUnlockItemID(self): return self.UnlockItemID # 材料物品ID
    def GetMaxLV(self): return self.MaxLV # 最大星级
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py
@@ -152,6 +152,19 @@
    Sync_ClothesCoatSkinInfo(curPlayer, coatID)
    return
def GetCoatQualityLVInfo(curPlayer):
    costQualityLVDict = {}
    ipyMgr = IpyGameDataPY.IPY_Data()
    for i in xrange(ipyMgr.GetCoatCount()):
        ipyData = ipyMgr.GetCoatByIndex(i)
        coatID = ipyData.GetCoatID()
        costQuality = ipyData.GetCostQuality()
        skinLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV % coatID)
        if not skinLV:
            continue
        costQualityLVDict[costQuality] = costQualityLVDict.get(costQuality, 0) + skinLV
    return costQualityLVDict
## 计算时装属性
#  @param curPlayer 玩家
#  @param allAttrList 属性列表
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py
@@ -28,6 +28,7 @@
import ItemControler
import PlayerActivity
import PlayerSuccess
import PlayerGubao
def DoPlayerLogin(curPlayer):
@@ -238,6 +239,7 @@
            PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossBattlefield, addCnt)
            
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_HighScoreToday, highScoreToday)
        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossBattlefield, 1)
        
    if isSameWeek:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_EnterCountWeek, enterCountWeek)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py
@@ -24,6 +24,7 @@
import ShareDefine
import ItemCommon
import ChConfig
import PlayerGubao
def OnYaomoBossStateChange(state, tick):
    ## 活动状态变更
@@ -104,6 +105,10 @@
    if msgType == "HurtValueAward":
        __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg)
        
    ## 参与击杀妖魔boss
    if msgType == "KillYaomoBoss":
        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossYaomoBoss, 1)
    return
def __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
@@ -463,6 +463,21 @@
        titleActiveList.append(curGradID)
    return titleActiveList
def GetDienstgradActiveTypeCountInfo(curPlayer):
    activeTypeCountDict = {}
    dienstgradManager = curPlayer.GetDienstgradManager()
    gradCnt = dienstgradManager.GetCount()
    for i in xrange(gradCnt):
        curGradID = dienstgradManager.AtGradID(i)
        if curGradID == 0:
            continue
        curDienstgradData = GetDienstgradData(curGradID)
        if curDienstgradData == None:
            continue
        curType = curDienstgradData.GetType()
        activeTypeCountDict[curType] = activeTypeCountDict.get(curType, 0) + 1
    return activeTypeCountDict
def CalcAllDienstgradAttr(curPlayer):
    # 计算全部称号属性
    allAttrList = [{} for i in range(4)]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py
@@ -130,6 +130,8 @@
        return
    
    allAttrList = [{} for _ in range(4)]
    customAttrDictFaQi = {}
    faQiAllAttrInfo = {}
    
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetFaQiLVUpCount()):
@@ -147,6 +149,7 @@
        lvAttrValueList = lvupIpyData.GetLVAttrValue()
        for i, attrID in enumerate(lvAttrTypeList):
            attrValue = lvAttrValueList[i]
            faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
            
        # 培养丹增加属性
@@ -157,10 +160,12 @@
            attrMultiple = upItemCount / upItemPerCount
            for i, attrID in enumerate(upItemAttrTypeList):
                attrValue = upItemAttrValueList[i]
                faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
                PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrList)
                
    customAttrDictFaQi["faQiAllAttrInfo"] = faQiAllAttrInfo
    # 保存计算值
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList, customAttrDict=customAttrDictFaQi)
    return
def Sync_FaQiLVInfo(curPlayer):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -29,6 +29,17 @@
import PlayerPet
import ChConfig
import ItemControler
import PlayerDienstgrad
import PlayerCoat
GubaoEffType_FamilyWar = 48 # 参与仙盟联赛每X次+XXX属性    x次
GubaoEffType_ElderBattlefield = 49 # 参与上古战场每X次+XXX属性    x次
GubaoEffType_CrossBattlefield = 50 # 参与古神战场每X次+XXX属性    x次
GubaoEffType_CrossYaomoBoss = 51 # 参与魔王入侵每X次+XXX属性    x次
GubaoEffType_CrossFamilyFlagwar = 52 # 参与逐鹿万界每X次+XXX属性    x次
GubaoEffAttrIypeList = [GubaoEffType_FamilyWar, GubaoEffType_ElderBattlefield, GubaoEffType_CrossBattlefield,
                        GubaoEffType_CrossYaomoBoss, GubaoEffType_CrossFamilyFlagwar]
GubaoEffType_ActivityPlace = 33 # 活跃修炼x次可领取物品    x次
GubaoEffType_Arena = 34 # 竞技场挑战x次可领取物品    x次
@@ -296,17 +307,17 @@
            effAttrInfo = {}
            #GameWorld.DebugLog("GubaoStar属性: gubaoID=%s,star=%s,starEffIDList=%s" % (gubaoID, star, starEffIDList))
            for effID in starEffIDList:
                __calcStarEffAttrByID(curPlayer, effID, effAttrInfo)
                __calcStarEffAttrByID(curPlayer, gubaoID, effID, effAttrInfo)
                #GameWorld.DebugLog("    effID=%s,effAttrInfo=%s" % (effID, effAttrInfo))
            for attrID, attrValue in effAttrInfo.items():
                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
                
    # 保存计算值
    #GameWorld.DebugLog("古宝属性: %s" % allAttrList)
    GameWorld.DebugLog("古宝属性: %s" % allAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList)
    return
def __calcStarEffAttrByID(curPlayer, effID, effAttrInfo):
def __calcStarEffAttrByID(curPlayer, gubaoID, effID, effAttrInfo):
    ''' 计算古宝特殊效果ID对应提升属性
    '''
    ipyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
@@ -555,6 +566,85 @@
        if attrID > 0 and addAttrValue > 0:
            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
            
    #41    x类型神兵每X级+X属性    x类型    x级
    elif effType == 41:
        gwType = effCond
        gwLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % gwType)
        addAttrValue = int(gwLV / effCond2 * effAttrValue)
        #GameWorld.DebugLog("    effID=%s,effType=%s,gwType=%s,gwLV=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, gwType, gwLV, effCond2, attrID, addAttrValue))
        if attrID > 0 and addAttrValue > 0:
            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
    #42    法器每X阶+X%法器总属性    x阶
    elif effType == 42:
        customAttrDictFaQi = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi)[2]
        faQiAllAttrInfo = customAttrDictFaQi.get("faQiAllAttrInfo", {})
        faQiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV)
        addPer = int(faQiLV / effCond * effAttrValue)
        #GameWorld.DebugLog("    effID=%s,effType=%s,faQiLV=%s,addPer=%s,faQiAllAttrInfo=%s" % (effID, effType, faQiLV, addPer, faQiAllAttrInfo))
        __addStarEffFuncAttr(ipyData, effAttrInfo, faQiAllAttrInfo, addPer)
    #43    每拥有X个X类型的称号+X属性    x类型    x个
    elif effType == 43:
        activeTypeCountDict = PlayerDienstgrad.GetDienstgradActiveTypeCountInfo(curPlayer)
        dType = effCond
        activeCount = activeTypeCountDict.get(dType, 0)
        addAttrValue = int(activeCount / effCond2 * effAttrValue)
        #GameWorld.DebugLog("    effID=%s,effType=%s,dType=%s,activeTypeCountDict=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, dType, activeTypeCountDict, effCond2, attrID, addAttrValue))
        if attrID > 0 and addAttrValue > 0:
            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
    #44    X品质时装总星数每X星+X属性    x类型    x星
    elif effType == 44:
        costQualityLVDict = PlayerCoat.GetCoatQualityLVInfo(curPlayer)
        quality = effCond
        lvTotal = costQualityLVDict.get(quality, 0)
        addAttrValue = int(lvTotal / effCond2 * effAttrValue)
        #GameWorld.DebugLog("    effID=%s,effType=%s,quality=%s,costQualityLVDict=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, quality, costQualityLVDict, effCond2, attrID, addAttrValue))
        if attrID > 0 and addAttrValue > 0:
            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
    #45    每X级魅力等级+X属性    x级
    elif effType == 45:
        charmLV = PlayerControl.GetCharmLV(curPlayer)
        addAttrValue = int(charmLV / effCond * effAttrValue)
        #GameWorld.DebugLog("    effID=%s,effType=%s,charmLV=%s,effCond=%s,attrID=%s,addAttrValue=%s" % (effID, effType, charmLV, effCond, attrID, addAttrValue))
        if attrID > 0 and addAttrValue > 0:
            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
    #46    每拥有X个神通技能+X属性    x个
    elif effType == 46:
        customAttrDictShentong = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong)[2]
        shentongSkillInfo = customAttrDictShentong.get("shentongSkillInfo", {})
        skillCount = len(shentongSkillInfo)
        addAttrValue = int(skillCount / effCond * effAttrValue)
        #GameWorld.DebugLog("    effID=%s,effType=%s,skillCount=%s,effCond=%s,attrID=%s,addAttrValue=%s,shentongSkillInfo=%s" % (effID, effType, skillCount, effCond, attrID, addAttrValue, shentongSkillInfo))
        if attrID > 0 and addAttrValue > 0:
            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
    #47    神通技能总等级每X级+X属性    x级
    elif effType == 47:
        customAttrDictShentong = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong)[2]
        shentongSkillInfo = customAttrDictShentong.get("shentongSkillInfo", {})
        skillLVTotal = sum(shentongSkillInfo.values())
        addAttrValue = int(skillLVTotal / effCond * effAttrValue)
        #GameWorld.DebugLog("    effID=%s,effType=%s,skillLVTotal=%s,effCond=%s,attrID=%s,addAttrValue=%s,shentongSkillInfo=%s" % (effID, effType, skillLVTotal, effCond, attrID, addAttrValue, shentongSkillInfo))
        if attrID > 0 and addAttrValue > 0:
            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
    #48    参与仙盟联赛每X次+XXX属性    x次
    #49    参与上古战场每X次+XXX属性    x次
    #50    参与古神战场每X次+XXX属性    x次
    #51    参与魔王入侵每X次+XXX属性    x次
    #52    参与逐鹿万界每X次+XXX属性    x次
    elif effType in GubaoEffAttrIypeList:
        effValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
        addAttrValue = int(effValue / effCond * effAttrValue)
        #GameWorld.DebugLog("    effID=%s,effType=%s,effValue=%s,effCond=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effValue, effCond, attrID, addAttrValue))
        if attrID > 0 and addAttrValue > 0:
            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
    return
def __addStarEffFuncAttr(ipyData, effAttrInfo, funcAttrInfo, effAttrValue):
@@ -574,8 +664,9 @@
    return
def AddGubaoItemEffValue(curPlayer, effType, addCnt):
    if effType not in GubaoEffTtemIypeList:
    if effType not in GubaoEffTtemIypeList and effType not in GubaoEffAttrIypeList:
        return
    isAttr = False
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetGubaoCount()):
        ipyData = ipyDataMgr.GetGubaoByIndex(index)
@@ -599,6 +690,11 @@
            GameWorld.DebugLog("更新古宝物品效果类型进度值: gubaoID=%s,effID=%s,effType=%s,effValue=%s,addCnt=%s,updValue=%s" 
                               % (gubaoID, effID, effType, effValue, addCnt, updValue), curPlayer.GetPlayerID())
            Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
            if effType in GubaoEffAttrIypeList:
                isAttr = True
    if isAttr:
        RefreshGubaoAttr(curPlayer)
    return
def GetGubaoItemEffAward(curPlayer, gubaoID, effIDStr):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
@@ -230,9 +230,11 @@
def CalcShentongAttr(curPlayer):
    
    customAttrDictShentong = {}
    fightPowerEx = 0
    allAttrList = [{} for _ in range(4)]
    
    shentongSkillInfo = {}
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetShentongCount()):
        ipyData = ipyDataMgr.GetShentongByIndex(index)
@@ -258,10 +260,19 @@
            if lvIpyData.GetFightPowerEx():
                fightPowerEx += lvIpyData.GetFightPowerEx()
                
            LVSkillID = lvIpyData.GetLVSkillID()
            if LVSkillID:
                skillData = GameWorld.GetGameData().GetSkillBySkillID(LVSkillID)
                if skillData:
                    skillTypeID = skillData.GetSkillTypeID()
                    skillLV = skillData.GetSkillLV()
                    shentongSkillInfo[skillTypeID] = skillLV
    customAttrDictShentong["shentongSkillInfo"] = shentongSkillInfo
    # 附加战力
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Shentong, fightPowerEx)
    # 保存计算值
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList, customAttrDict=customAttrDictShentong)
    return
def Sync_ShentongLVInfo(curPlayer, shentongIDList=None):