ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -184,6 +184,7 @@
        GameWorld.DebugLog("首次激活武将: heroID=%s" % (heroID), curPlayer.GetPlayerID())
        #首次获得图鉴额外逻辑 ...
        Sync_HeroInfo(curPlayer, [heroID])
        PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 首次获得
        
    return
@@ -225,55 +226,55 @@
    GameWorld.DebugLog("设置武将图鉴激活状态:%s,bookState=%s,updBookState=%s" % (isAct, bookState, updBookState), curPlayer.GetPlayerID())
    return
def GetHeroBookStarLV(curPlayer, heroID):
    ## 武将图鉴星级等级
    bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
    return GameWorld.GetValue(bookState, 4, 3)
def SetHeroBookStarLV(curPlayer, heroID, starLV):
    ## 设置武将图鉴星级等级,支持三位数 0~999 级
    bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
    updBookState = GameWorld.SetValue(bookState, 4, 3, starLV)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, updBookState)
    GameWorld.DebugLog("设置武将图鉴星级等级:%s,bookState=%s,updBookState=%s" % (starLV, bookState, updBookState), curPlayer.GetPlayerID())
    return
#def GetHeroBookStarLV(curPlayer, heroID):
#    ## 武将图鉴星级等级
#    bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
#    return GameWorld.GetValue(bookState, 4, 3)
#def SetHeroBookStarLV(curPlayer, heroID, starLV):
#    ## 设置武将图鉴星级等级,支持三位数 0~999 级
#    bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
#    updBookState = GameWorld.SetValue(bookState, 4, 3, starLV)
#    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, updBookState)
#    GameWorld.DebugLog("设置武将图鉴星级等级:%s,bookState=%s,updBookState=%s" % (starLV, bookState, updBookState), curPlayer.GetPlayerID())
#    return
def GetHeroBookStarLVH(curPlayer, heroID):
    ## 武将图鉴星级历史最高等级
    bookStateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBookH % heroID)
    return GameWorld.GetValue(bookStateH, 4, 3)
def SetHeroBookStarLVH(curPlayer, heroID, starLVH):
    ## 设置武将图鉴星级历史最高等级,支持三位数 0~999 级
    bookStateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBookH % heroID)
    updBookStateH = GameWorld.SetValue(bookStateH, 4, 3, starLVH)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBookH % heroID, updBookStateH)
    GameWorld.DebugLog("设置武将图鉴星级历史最高等级:%s,bookStateH=%s,updBookStateH=%s" % (starLVH, bookStateH, updBookStateH), curPlayer.GetPlayerID())
    Sync_HeroInfo(curPlayer, [heroID])
    return
#def GetHeroBookStarLVH(curPlayer, heroID):
#    ## 武将图鉴星级历史最高等级
#    bookStateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBookH % heroID)
#    return GameWorld.GetValue(bookStateH, 4, 3)
#def SetHeroBookStarLVH(curPlayer, heroID, starLVH):
#    ## 设置武将图鉴星级历史最高等级,支持三位数 0~999 级
#    bookStateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBookH % heroID)
#    updBookStateH = GameWorld.SetValue(bookStateH, 4, 3, starLVH)
#    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBookH % heroID, updBookStateH)
#    GameWorld.DebugLog("设置武将图鉴星级历史最高等级:%s,bookStateH=%s,updBookStateH=%s" % (starLVH, bookStateH, updBookStateH), curPlayer.GetPlayerID())
#    Sync_HeroInfo(curPlayer, [heroID])
#    return
def GetHeroBookBreakLV(curPlayer, heroID):
    ## 武将图鉴突破等级
    bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
    return GameWorld.GetValue(bookState, 7, 3)
def SetHeroBookBreakLV(curPlayer, heroID, breakLV):
    ## 设置武将图鉴突破等级,支持三位数 0~999 级
    bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
    updBookState = GameWorld.SetValue(bookState, 7, 3, breakLV)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, updBookState)
    GameWorld.DebugLog("设置武将图鉴突破等级:%s,bookState=%s,updBookState=%s" % (breakLV, bookState, updBookState), curPlayer.GetPlayerID())
    return
#def GetHeroBookBreakLV(curPlayer, heroID):
#    ## 武将图鉴突破等级
#    bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
#    return GameWorld.GetValue(bookState, 7, 3)
#def SetHeroBookBreakLV(curPlayer, heroID, breakLV):
#    ## 设置武将图鉴突破等级,支持三位数 0~999 级
#    bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
#    updBookState = GameWorld.SetValue(bookState, 7, 3, breakLV)
#    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, updBookState)
#    GameWorld.DebugLog("设置武将图鉴突破等级:%s,bookState=%s,updBookState=%s" % (breakLV, bookState, updBookState), curPlayer.GetPlayerID())
#    return
def GetHeroBookBreakLVH(curPlayer, heroID):
    ## 武将图鉴突破历史最高等级
    bookStateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBookH % heroID)
    return GameWorld.GetValue(bookStateH, 7, 3)
def SetHeroBookBreakLVH(curPlayer, heroID, breakLVH):
    ## 设置武将图鉴突破历史最高等级,支持三位数 0~999 级
    bookStateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBookH % heroID)
    updBookStateH = GameWorld.SetValue(bookStateH, 7, 3, breakLVH)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBookH % heroID, updBookStateH)
    GameWorld.DebugLog("设置武将图鉴突破历史最高等级:%s,bookStateH=%s,updBookStateH=%s" % (breakLVH, bookStateH, updBookStateH), curPlayer.GetPlayerID())
    Sync_HeroInfo(curPlayer, [heroID])
    return
#def GetHeroBookBreakLVH(curPlayer, heroID):
#    ## 武将图鉴突破历史最高等级
#    bookStateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBookH % heroID)
#    return GameWorld.GetValue(bookStateH, 7, 3)
#def SetHeroBookBreakLVH(curPlayer, heroID, breakLVH):
#    ## 设置武将图鉴突破历史最高等级,支持三位数 0~999 级
#    bookStateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBookH % heroID)
#    updBookStateH = GameWorld.SetValue(bookStateH, 7, 3, breakLVH)
#    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBookH % heroID, updBookStateH)
#    GameWorld.DebugLog("设置武将图鉴突破历史最高等级:%s,bookStateH=%s,updBookStateH=%s" % (breakLVH, bookStateH, updBookStateH), curPlayer.GetPlayerID())
#    Sync_HeroInfo(curPlayer, [heroID])
#    return
def GetHeroItem(curPlayer, itemIndex):
    curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
@@ -352,7 +353,7 @@
    GameWorld.DebugLog("武将升级: itemIndex=%s,heroID=%s,updHeroLV=%s" % (itemIndex, heroID, updHeroLV), playerID)
    heroItem.SetUserAttr(ShareDefine.Def_IudetHeroLV, updHeroLV)
    
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 升级
    
    PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroLVUP, 1)
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroLVUP)
@@ -436,6 +437,8 @@
                       % (itemIndex, heroID, star, useStar, addStar, updStar), playerID)
    ItemCommon.DelItem(curPlayer, useItem, useItem.GetCount(), False, "HeroStarUP")
    DoHeroUpdStar(curPlayer, heroItem, updStar)
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 升星
    return
def GetHeroStarMax(heroItem):
@@ -468,7 +471,7 @@
def DoHeroUpdStar(curPlayer, heroItem, updStar, isSync=True):
    ## 执行武将星级更新
    heroID = heroItem.GetItemTypeID()
    #heroID = heroItem.GetItemTypeID()
    curStar = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
    addStar = updStar - curStar
    item = heroItem.GetItem()
@@ -482,12 +485,9 @@
    if isSync:
        heroItem.Sync_Item()
    
    itemIndex = heroItem.GetItemPlaceIndex()
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
    starLVH = GetHeroBookStarLVH(curPlayer, heroID)
    if updStar > starLVH:
        SetHeroBookStarLVH(curPlayer, heroID, updStar)
    #starLVH = GetHeroBookStarLVH(curPlayer, heroID)
    #if updStar > starLVH:
    #    SetHeroBookStarLVH(curPlayer, heroID, updStar)
    return
def __DoHeroStarTalentUp(singleItem, addLV):
@@ -653,20 +653,20 @@
    GameWorld.DebugLog("武将突破: itemIndex=%s,heroID=%s,nextBreakLV=%s" % (itemIndex, heroID, nextBreakLV), playerID)
    SetHeroBreakLV(curPlayer, heroItem, nextBreakLV)
    
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 突破
    return
def SetHeroBreakLV(curPlayer, heroItem, breakLV, isSync=True):
    ## 设置武将突破等级
    heroID = heroItem.GetItemTypeID()
    #heroID = heroItem.GetItemTypeID()
    item = heroItem.GetItem()
    item.SetUserAttr(ShareDefine.Def_IudetHeroBreakLV, breakLV)
    if isSync:
        heroItem.Sync_Item()
        
    breakLVH = GetHeroBookBreakLVH(curPlayer, heroID)
    if breakLV > breakLVH:
        SetHeroBookBreakLVH(curPlayer, heroID, breakLV)
    #breakLVH = GetHeroBookBreakLVH(curPlayer, heroID)
    #if breakLV > breakLVH:
    #    SetHeroBookBreakLVH(curPlayer, heroID, breakLV)
    return
#// B2 33 武将觉醒 #tagCSHeroAwake
@@ -719,7 +719,7 @@
    GameWorld.DebugLog("武将觉醒: itemIndex=%s,heroID=%s,nextAwakeLV=%s" % (itemIndex, heroID, nextAwakeLV), playerID)
    SetHeroAwakeLV(heroItem, nextAwakeLV)
    
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 觉醒
    return
def SetHeroAwakeLV(heroItem, awakeLV, isSync=True):
@@ -857,7 +857,7 @@
    if isSync:
        heroItem.Sync_Item()
    
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 选择天赋
    return
#// B2 35 武将洗炼 #tagCSHeroWash
@@ -991,7 +991,7 @@
    heroItem.Sync_Item()
    GameWorld.DebugLog("武将洗炼替换! itemIndex=%s,heroID=%s,washIDList=%s" % (itemIndex, heroID, washIDList))
    
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 替换洗炼天赋
    return
#// B2 36 武将换肤 #tagCSHeroWearSkin
@@ -1024,7 +1024,7 @@
            return
    heroItem.SetUserAttr(ShareDefine.Def_IudetHeroSkin, skinIndex)
    
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 切换皮肤
    return
def ActiveHeroSkin(curPlayer, heroID, skinIndex, isActive=True):
@@ -1040,7 +1040,7 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroSkin % heroID, updState)
    Sync_HeroInfo(curPlayer, [heroID])
    
    RefreshLordAttr(curPlayer)
    #RefreshLordAttr(curPlayer)
    return
#// B2 37 武将图鉴激活升级 #tagCSHeroBookUP
@@ -1058,9 +1058,9 @@
    bookType = clientData.BookType
    
    if bookType == 1:
        __doHeroBookStarLVUP(curPlayer, heroID)
        pass #__doHeroBookStarLVUP(curPlayer, heroID)
    elif bookType == 2:
        __doHeroBookBreakLVUP(curPlayer, heroID)
        pass #__doHeroBookBreakLVUP(curPlayer, heroID)
    else:
        __doHeroBookAct(curPlayer, heroID)
    return
@@ -1106,48 +1106,48 @@
                    
    Sync_HeroInfo(curPlayer, [heroID])
    
    RefreshLordAttr(curPlayer)
    #RefreshLordAttr(curPlayer) 图鉴属性去除了
    
    bookCnt = GetHeroBookActCnt(curPlayer)
    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_HeroBook)
    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroBook, bookCnt)
    return
def __doHeroBookStarLVUP(curPlayer, heroID):
    ## 图鉴星级升级
    playerID = curPlayer.GetPlayerID()
    if not GetHeroBookInitState(curPlayer, heroID):
        GameWorld.DebugLog("该武将图鉴未激活! heroID=%s" % heroID, playerID)
        return
    bookStar = GetHeroBookStarLV(curPlayer, heroID)
    bookStarH = GetHeroBookStarLVH(curPlayer, heroID)
    if bookStar >= bookStarH:
        GameWorld.DebugLog("该武将图鉴星级已达当前英雄最高星级! heroID=%s,bookStar=%s >= %s" % (heroID, bookStar, bookStarH), playerID)
        return
    GameWorld.DebugLog("武将图鉴星级升级! heroID=%s,bookStar=%s,bookStarH=%s" % (heroID, bookStar, bookStarH), playerID)
    SetHeroBookStarLV(curPlayer, heroID, bookStar + 1)
    Sync_HeroInfo(curPlayer, [heroID])
#def __doHeroBookStarLVUP(curPlayer, heroID):
#    ## 图鉴星级升级,废弃
#    playerID = curPlayer.GetPlayerID()
#    if not GetHeroBookInitState(curPlayer, heroID):
#        GameWorld.DebugLog("该武将图鉴未激活! heroID=%s" % heroID, playerID)
#        return
#    bookStar = GetHeroBookStarLV(curPlayer, heroID)
#    bookStarH = GetHeroBookStarLVH(curPlayer, heroID)
#    if bookStar >= bookStarH:
#        GameWorld.DebugLog("该武将图鉴星级已达当前英雄最高星级! heroID=%s,bookStar=%s >= %s" % (heroID, bookStar, bookStarH), playerID)
#        return
#    GameWorld.DebugLog("武将图鉴星级升级! heroID=%s,bookStar=%s,bookStarH=%s" % (heroID, bookStar, bookStarH), playerID)
#    SetHeroBookStarLV(curPlayer, heroID, bookStar + 1)
#    Sync_HeroInfo(curPlayer, [heroID])
#
#    RefreshLordAttr(curPlayer)
#    return
    
    RefreshLordAttr(curPlayer)
    return
def __doHeroBookBreakLVUP(curPlayer, heroID):
    ## 图鉴突破升级
    playerID = curPlayer.GetPlayerID()
    if not GetHeroBookInitState(curPlayer, heroID):
        GameWorld.DebugLog("该武将图鉴未激活! heroID=%s" % heroID, playerID)
        return
    bookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
    bookBreakLVH = GetHeroBookBreakLVH(curPlayer, heroID)
    if bookBreakLV >= bookBreakLVH:
        GameWorld.DebugLog("该武将图鉴突破等级已达当前英雄最高突破等级! heroID=%s,bookBreakLV=%s >= %s" % (heroID, bookBreakLV, bookBreakLVH), playerID)
        return
    GameWorld.DebugLog("武将图鉴突破升级! heroID=%s,bookBreakLV=%s,bookBreakLVH=%s" % (heroID, bookBreakLV, bookBreakLVH), playerID)
    SetHeroBookBreakLV(curPlayer, heroID, bookBreakLV + 1)
    Sync_HeroInfo(curPlayer, [heroID])
    RefreshLordAttr(curPlayer)
    return
#def __doHeroBookBreakLVUP(curPlayer, heroID):
#    ## 图鉴突破升级,废弃
#    playerID = curPlayer.GetPlayerID()
#    if not GetHeroBookInitState(curPlayer, heroID):
#        GameWorld.DebugLog("该武将图鉴未激活! heroID=%s" % heroID, playerID)
#        return
#    bookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
#    bookBreakLVH = GetHeroBookBreakLVH(curPlayer, heroID)
#    if bookBreakLV >= bookBreakLVH:
#        GameWorld.DebugLog("该武将图鉴突破等级已达当前英雄最高突破等级! heroID=%s,bookBreakLV=%s >= %s" % (heroID, bookBreakLV, bookBreakLVH), playerID)
#        return
#    GameWorld.DebugLog("武将图鉴突破升级! heroID=%s,bookBreakLV=%s,bookBreakLVH=%s" % (heroID, bookBreakLV, bookBreakLVH), playerID)
#    SetHeroBookBreakLV(curPlayer, heroID, bookBreakLV + 1)
#    Sync_HeroInfo(curPlayer, [heroID])
#
#    RefreshLordAttr(curPlayer)
#    return
#// B2 38 武将锁定 #tagCSHeroLock
#
@@ -1235,7 +1235,7 @@
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroAwakeRebirthCnt, rebirthCnt + 1)
        Sync_PlayerHeroInfo(curPlayer)
        
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 重生
    return
def __calcHeroLVReturnitem(quality, heroLV, returnItemDict, ratio):
@@ -1487,7 +1487,7 @@
    if not awardMoneyInfo or len(awardMoneyInfo) != 2:
        return
    moneyType, moneyValue = awardMoneyInfo
    if GetHeroActivite(curPlayer, heroID) != 1:
    if not GetHeroActivite(curPlayer, heroID):
        GameWorld.DebugLog("武将未获得过,不可激活阵容推荐! heroID=%s" % (heroID))
        return
    awardState |= pow(2, index)
@@ -1497,43 +1497,43 @@
    Sync_LineupRecommendInfo(curPlayer, [recommendID])
    return
def RefreshLordAttr(curPlayer):
    ## 刷新主公属性
    CalcHeroAddAttr(curPlayer)
    PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
    return
#def RefreshLordAttr(curPlayer):
#    ## 刷新主公属性
#    CalcHeroAddAttr(curPlayer)
#    PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
#    return
def CalcHeroAddAttr(curPlayer):
    ## 计算武将对主公增加的属性
    heroBookAttrDict = {}
    playerID = curPlayer.GetID()
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in range(ipyDataMgr.GetHeroCount()):
        ipyData = ipyDataMgr.GetHeroByIndex(index)
        heroID = ipyData.GetHeroID()
        if not ipyData.GetPlayerCanUse():
            continue
        if not GetHeroBookInitState(curPlayer, heroID):
            # 图鉴未激活
            continue
        quality = ipyData.GetQuality()
        qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
        if not qualityIpyData:
            continue
        bookInitAddPer = qualityIpyData.GetBookInitAddPer()
        bookStarAddPer = qualityIpyData.GetBookStarAddPer()
        bookBreakLVAddPer = qualityIpyData.GetBookBreakLVAddPer()
        bookStar = GetHeroBookStarLV(curPlayer, heroID)
        bookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
        for attrPerID in ChConfig.BaseAttrPerIDList:
            addPer = bookInitAddPer + bookStar * bookStarAddPer + bookBreakLV * bookBreakLVAddPer
            heroBookAttrDict[attrPerID] = heroBookAttrDict.get(attrPerID, 0) + addPer
    GameWorld.DebugLog("武将图鉴属性: %s" % heroBookAttrDict, playerID)
    PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_HeroBook, heroBookAttrDict)
    return
#def CalcHeroAddAttr(curPlayer):
#    ## 计算武将对主公增加的属性
#
#    heroBookAttrDict = {}
#    playerID = curPlayer.GetID()
#
#    ipyDataMgr = IpyGameDataPY.IPY_Data()
#    for index in range(ipyDataMgr.GetHeroCount()):
#        ipyData = ipyDataMgr.GetHeroByIndex(index)
#        heroID = ipyData.GetHeroID()
#        if not ipyData.GetPlayerCanUse():
#            continue
#        if not GetHeroBookInitState(curPlayer, heroID):
#            # 图鉴未激活
#            continue
#        quality = ipyData.GetQuality()
#        qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
#        if not qualityIpyData:
#            continue
#        #bookInitAddPer = qualityIpyData.GetBookInitAddPer()
#        #bookStarAddPer = qualityIpyData.GetBookStarAddPer()
#        #bookBreakLVAddPer = qualityIpyData.GetBookBreakLVAddPer()
#        bookStar = GetHeroBookStarLV(curPlayer, heroID)
#        bookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
#        for attrPerID in ChConfig.BaseAttrPerIDList:
#            addPer = bookInitAddPer + bookStar * bookStarAddPer + bookBreakLV * bookBreakLVAddPer
#            heroBookAttrDict[attrPerID] = heroBookAttrDict.get(attrPerID, 0) + addPer
#
#    GameWorld.DebugLog("武将图鉴属性: %s" % heroBookAttrDict, playerID)
#    PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_HeroBook, heroBookAttrDict)
#    return
def Sync_HeroInfo(curPlayer, heroIDList=None):
    if heroIDList != None:
@@ -1563,10 +1563,10 @@
        hero.HeroID = heroID
        hero.SkinState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroSkin % heroID)
        hero.BookInitState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID) % 10
        hero.BookStarLV = GetHeroBookStarLV(curPlayer, heroID)
        hero.BookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
        hero.BookStarLVH = GetHeroBookStarLVH(curPlayer, heroID)
        hero.BookBreakLVH = GetHeroBookBreakLVH(curPlayer, heroID)
        #hero.BookStarLV = GetHeroBookStarLV(curPlayer, heroID)
        #hero.BookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
        #hero.BookStarLVH = GetHeroBookStarLVH(curPlayer, heroID)
        #hero.BookBreakLVH = GetHeroBookBreakLVH(curPlayer, heroID)
        syncInfoList.append(hero)
        
    if not syncInfoList: