From ca212ad097edfe324b5b6035e64cfbcf5146b044 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 09 十二月 2025 10:50:22 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(突破单独配置所需武将等级,不需要满级才能突破;突破消耗物品改为支持多种物品;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py |  355 +++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 198 insertions(+), 157 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
index d429bc5..1f308e9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -20,11 +20,13 @@
 import IpyGameDataPY
 import IPY_GameWorld
 import ItemControler
+import PlayerSuccess
 import ChPyNetSendPack
 import PlayerActivity
 import NetPackCommon
 import PlayerControl
 import PlayerOnline
+import PlayerTask
 import GameWorld
 import ChConfig
 
@@ -182,6 +184,7 @@
         GameWorld.DebugLog("首次激活武将: heroID=%s" % (heroID), curPlayer.GetPlayerID())
         #首次获得图鉴额外逻辑 ...
         Sync_HeroInfo(curPlayer, [heroID])
+        PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 首次获得
         
     return
 
@@ -223,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)
@@ -298,6 +301,14 @@
             continue
         return posNum
     return 0
+
+def InMainLineup(heroItem):
+    ## 是否在主阵容中
+    for lpIndex in range(heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)):
+        lineupValue = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
+        if GetLineupValue(lineupValue)[0] == ShareDefine.Lineup_Main:
+            return True
+    return False
 
 #// B2 30 武将升级 #tagCSHeroLVUP
 #
@@ -350,9 +361,11 @@
     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)
+    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroLVUP, 1)
     return
 
 def GetHeroLVMax(heroItem):
@@ -432,6 +445,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):
@@ -464,7 +479,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()
@@ -472,15 +487,15 @@
     if addStar > 0:
         __DoHeroStarTalentUp(item, addStar)
         PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroStarUP, addStar)
+        PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroStarUP, addStar)
+        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroStarUP, addStar)
+        
     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):
@@ -623,43 +638,41 @@
     ipyData = IpyGameDataPY.GetIpyGameData("HeroQualityBreak", quality, breakLV)
     if not ipyData:
         return
-    LVMax = ipyData.GetLVMax()
-    if heroLV < LVMax:
-        GameWorld.DebugLog("未满级,无法突破: heroLV=%s < %s" % (heroLV, LVMax), playerID)
+    UPLVNeed = ipyData.GetUPLVNeed()
+    if heroLV < UPLVNeed:
+        GameWorld.DebugLog("武将等级不足,无法突破: heroLV=%s < %s" % (heroLV, UPLVNeed), playerID)
         return
     nextBreakLV = breakLV + 1
     if not IpyGameDataPY.GetIpyGameData("HeroQualityBreak", quality, nextBreakLV):
         GameWorld.DebugLog("突破等级已满级: quality=%s,breakLV=%s" % (quality, breakLV), playerID)
         return
-    costItemInfo = ipyData.GetUPCostItem()
-    if not costItemInfo:
-        return
-    costItemID, costItemCount = costItemInfo
-    if not costItemID or not costItemCount:
+    costItemList = ipyData.GetUPCostItemList()
+    if not costItemList:
         return
     itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    hasEnough, itemIndexList = ItemCommon.GetItem_FromPack_ByID(costItemID, itemPack, costItemCount)
-    if not hasEnough:
-        GameWorld.DebugLog("材料不足,武将无法突破! costItemID=%s, costItemCount=%s" % (costItemID, costItemCount))
+    lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(costItemList, itemPack)
+    if lackItemDict:
+        GameWorld.DebugLog("材料不足,武将无法突破! quality=%s,breakLV=%s,lackItemDict=%s" % (quality, breakLV, lackItemDict), playerID)
         return
-    ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, costItemCount, True, "HeroBreak")
+    ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "HeroBreak")
+    
     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
@@ -712,7 +725,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):
@@ -850,7 +863,7 @@
     if isSync:
         heroItem.Sync_Item()
     
-    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 选择天赋
     return
 
 #// B2 35 武将洗炼 #tagCSHeroWash
@@ -984,7 +997,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
@@ -1017,7 +1030,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):
@@ -1033,7 +1046,7 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroSkin % heroID, updState)
     Sync_HeroInfo(curPlayer, [heroID])
     
-    RefreshLordAttr(curPlayer)
+    #RefreshLordAttr(curPlayer)
     return
 
 #// B2 37 武将图鉴激活升级 #tagCSHeroBookUP
@@ -1051,12 +1064,26 @@
     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
+
+def GetHeroBookActCnt(curPlayer):
+    ## 获取武将图鉴已激活数量
+    bookCnt = 0
+    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
+        bookCnt += 1
+    return bookCnt
 
 def __doHeroBookAct(curPlayer, heroID):
     ## 图鉴激活
@@ -1085,44 +1112,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])
-    
-    RefreshLordAttr(curPlayer)
-    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])
+#    
+#    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
 #
@@ -1210,7 +1241,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):
@@ -1280,6 +1311,7 @@
     ratio = IpyGameDataPY.GetFuncCfg("HeroRebirth", 5)
     dismissItemList = []
     returnItemDict = {}
+    olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
     curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
     for itemIndex in itemIndexList:
         if itemIndex < 0 or itemIndex >= curPack.GetCount():
@@ -1300,6 +1332,10 @@
             GameWorld.DebugLog("上阵中的武将无法遣散! itemIndex=%s,lineupValueList=%s" % (itemIndex, lineupValueList))
             continue
         heroID = heroItem.GetItemTypeID()
+        _, effItemIndex, _ = olPlayer.GetHeroEffectiveCard(heroID)
+        if itemIndex == effItemIndex:
+            GameWorld.DebugLog("生效中的卡牌无法遣散! itemIndex=%s,heroID=%s,effItemIndex=%s" % (itemIndex, heroID, effItemIndex))
+            continue
         heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
         if not heroIpyData:
             continue
@@ -1420,8 +1456,13 @@
     for syncItem in syncItemDict.values():
         syncItem.Sync_Item()
         
-    lineup = PlayerOnline.GetOnlinePlayer(curPlayer).GetLineup(lineupID, False)
+    olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
+    lineup = olPlayer.GetLineup(lineupID, False)
     lineup.UpdLineup(heroItemDict, shapeType)
+    
+    # 主阵容调整,重载生效的卡牌
+    if lineupID == ShareDefine.Lineup_Main:
+        PlayerOnline.reloadEffHeroCard(curPlayer, olPlayer)
     return
 
 def ComLineupValue(lineupID, shapeType, posNum): return lineupID * 10000 + shapeType * 100 + posNum
@@ -1462,7 +1503,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)
@@ -1472,43 +1513,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:
@@ -1538,10 +1579,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:

--
Gitblit v1.8.0