From 81669ea742584ffc6cc7d886ee61293d4ac03fb0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 05 三月 2026 17:52:31 +0800
Subject: [PATCH] 534 【开服冲榜】新增活动类型-服务端(武将冲榜-7;红颜冲榜-8;命格冲榜-9;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py       |    6 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py         |    8 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py       |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py         |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py               |   11 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py     |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py |  183 +++++++++++++++++++++++++++++++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py       |   15 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py       |    9 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py      |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                  |    4 
 11 files changed, 229 insertions(+), 19 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 7d57969..3297e46 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3591,6 +3591,10 @@
 Def_PDict_SuccessValue = "Succ_%s_%s" # 当前次数值,参数(成就类型、条件)
 Def_PDict_SuccessAward = "Succ_Award_%s" # 成就领奖记录,按成就ID位存储0-未领,1-已领,参数(key编号)
 
+# 开服冲榜
+Def_PDict_OSAValue = "OSAValue_%s" # 冲榜活动值,参数(冲榜类型)
+Def_PDict_OSABillValue = "OSABillValue_%s" # 冲榜上榜值,用于判断上榜,参数(冲榜类型)
+
 # 开服庆典
 Def_PDict_OSACelebrationPoint = "OSACelebrationPoint" # 开服庆典累计积分
 Def_PDict_OSACelebrationAward = "OSACelebrationAward" # 开服庆典累计积分阶段奖励领奖状态,按积分排序后的索引位记录是否已领取
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
index 1eea137..3538cfe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -47,8 +47,11 @@
                      ShareDefine.GameFuncID_Horse:lambda curObj:PlayerHorse.DoHorseOpen(curObj),
                      ShareDefine.GameFuncID_Travel:lambda curObj:PlayerTravel.DoTravelOpen(curObj),
                      ShareDefine.GameFuncID_Mingge:lambda curObj:PlayerMingge.DoMinggeOpen(curObj),
-                     ShareDefine.GameFuncID_OSA_MainLevel:lambda curObj:OpenServerActivity.DoOSA_MainLevel(curObj),
-                     ShareDefine.GameFuncID_OSA_HeroCall:lambda curObj:OpenServerActivity.DoOSA_HeroCall(curObj),
+                     ShareDefine.GameFuncID_OSA_MainLevel:lambda curObj:OpenServerActivity.DoOSA_MainLevelOpen(curObj),
+                     ShareDefine.GameFuncID_OSA_HeroCall:lambda curObj:OpenServerActivity.DoOSA_HeroCallOpen(curObj),
+                     ShareDefine.GameFuncID_OSA_HeroTrain:lambda curObj:OpenServerActivity.DoOSA_HeroTrainOpen(curObj),
+                     ShareDefine.GameFuncID_OSA_BeautyTrain:lambda curObj:OpenServerActivity.DoOSA_BeautyTrainOpen(curObj),
+                     ShareDefine.GameFuncID_OSA_MinggeTrain:lambda curObj:OpenServerActivity.DoOSA_MinggeTrainOpen(curObj),
                      }
 
 def GetFuncOpenLVIpyData(funcID): return IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
@@ -102,7 +105,7 @@
         befValue, updValue = GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, funcID, 1)
         if befValue == updValue:
             continue
-        GameWorld.DebugLog("    功能开启:funcID=%s,befValue=%s(%s),updValue=%s(%s)" 
+        GameWorld.DebugLog("    功能开启: funcID=%s,befValue=%s(%s),updValue=%s(%s)" 
                            % (funcID, befValue, str(bin(befValue)[2:]), updValue, str(bin(updValue)[2:])), curPlayer.GetPlayerID())
         
         if funcID in FuncOpenLogicDict:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py
index 95bd803..e1d9b9f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py
@@ -18,6 +18,8 @@
 import DBDataMgr
 import PlayerMail
 import ShareDefine
+import PlayerPreset
+import PlayerOnline
 import GameFuncComm
 import IPY_GameWorld
 import IpyGameDataPY
@@ -27,6 +29,7 @@
 import PlayerControl
 import NetPackCommon
 import ItemControler
+import PlayerBeauty
 import ItemCommon
 import GameWorld
 import ChConfig
@@ -36,31 +39,186 @@
 OSAFuncIDDict = {
                  ShareDefine.Def_BT_OSA_MainLevel:ShareDefine.GameFuncID_OSA_MainLevel,
                  ShareDefine.Def_BT_OSA_HeroCall:ShareDefine.GameFuncID_OSA_HeroCall,
+                 ShareDefine.Def_BT_OSA_HeroTrain:ShareDefine.GameFuncID_OSA_HeroTrain,
+                 ShareDefine.Def_BT_OSA_BeautyTrain:ShareDefine.GameFuncID_OSA_BeautyTrain,
+                 ShareDefine.Def_BT_OSA_MinggeTrain:ShareDefine.GameFuncID_OSA_MinggeTrain,
                  }
 
-def DoOSA_MainLevel(curPlayer):
+def DoOSA_MainLevelOpen(curPlayer): UpdOSA_MainLevelBillboard(curPlayer)
+def UpdOSA_MainLevelBillboard(curPlayer, lvID=0):
     if GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_MainLevel) != 1:
         return
-    lvID = PlayerControl.GetPassMainLevelID(curPlayer)
-    GameWorld.DebugLog("开服关卡榜开启更新榜单: lvID=%s" % lvID, curPlayer.GetPlayerID())
+    if not lvID:
+        lvID = PlayerControl.GetPassMainLevelID(curPlayer)
     PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_MainLevel, lvID)
     return
 
-def DoOSA_HeroCall(curPlayer):
+def DoOSA_HeroCallOpen(curPlayer): UpdOSA_HeroCallBillboard(curPlayer)
+def UpdOSA_HeroCallBillboard(curPlayer, callCnt=0):
     if GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_HeroCall) != 1:
         return
-    callCnt = PlayerTreasure.GetHeroCallCnt(curPlayer)
-    GameWorld.DebugLog("开服招募榜开启更新榜单: callCnt=%s" % callCnt, curPlayer.GetPlayerID())
+    if not callCnt:
+        callCnt = PlayerTreasure.GetHeroCallCnt(curPlayer)
     PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_HeroCall, callCnt)
     return
 
-def GetOSAState(curPlayer, osaType):
+def DoOSA_HeroTrainOpen(curPlayer): UpdOSA_HeroTrainBillboard(curPlayer)
+def UpdOSA_HeroTrainBillboard(curPlayer):
+    if GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_HeroTrain) != 1:
+        return
+    
+    osaType = ShareDefine.Def_BT_OSA_HeroTrain
+    mainBatPresetID = PlayerPreset.GetBatPresetID(curPlayer, ShareDefine.BatPreset_Main)
+    heroPresetID = PlayerPreset.GetFuncPresetID(curPlayer, mainBatPresetID, ShareDefine.FuncPreset_Hero)
+    olPlayer = PlayerOnline.GetOnlineMgr().GetOnlinePlayer(curPlayer)
+    heroPreset = olPlayer.GetHeroPreset(heroPresetID)
+    effCardDict = heroPreset.GetEffectiveCardDict()
+    
+    cardScore = 0
+    curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+    for cardInfo in effCardDict.values():
+        index = cardInfo[1]
+        if index < 0 or index >= curPack.GetCount():
+            continue
+        heroItem = curPack.GetAt(index)
+        if not heroItem or heroItem.IsEmpty():
+            continue
+        cardScore += __calcHeroCardTrainScore(heroItem)
+        
+    washItemID = IpyGameDataPY.GetFuncCfg("HeroWash", 1)
+    trainItemScoreDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboardTrain", 1, {})
+    osaValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSAValue % osaType)
+    washScore = osaValue * trainItemScoreDict.get(str(washItemID), 0)
+    
+    trainScore = cardScore + washScore
+    
+    # 上榜积分: 只取历史最高分
+    osaBillValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSABillValue % osaType)
+    GameWorld.DebugLog("武将冲榜: trainScore=%s(%s+%s),osaValue=%s,osaBillValue=%s,mainBatPresetID=%s,heroPresetID=%s" 
+                       % (trainScore, cardScore, washScore, osaValue, osaBillValue, mainBatPresetID, heroPresetID))
+    if trainScore <= osaBillValue:
+        # 可能降低积分,降低时不更新榜单
+        GameWorld.DebugLog("    武将冲榜积分未提升不更新榜单! trainScore=%s <= %s" % (trainScore, osaBillValue))
+        return
+    trainScore = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSABillValue % osaType, trainScore)
+    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_HeroTrain, trainScore)
+    return
+
+def __calcHeroCardTrainScore(heroItem):
+    heroID = heroItem.GetItemTypeID()
+    heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
+    if not heroIpyData:
+        return 0
+    quality = heroIpyData.GetQuality()
+    qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
+    if not qualityIpyData:
+        return 0
+    
+    heroLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroLV)
+    star = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
+    breakLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
+    awakeLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroAwakeLV)
+    
+    # 培养积分,开服武将冲榜会用到
+    # 武将冲榜增加积分 按消耗材料算 {"消耗物品ID":每个物品积分, },积分支持小数,物品ID支持配武将经验石、突破石、觉醒石、洗练石等
+    trainItemScoreDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboardTrain", 1, {})
+    qualityStarScoreDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboardTrain", 2, {})
+    trainItemCntDict = {}
+    #GameWorld.DebugLog("武将物品培养积分: heroID=%s,quality=%s,heroLV=%s,star=%s,breakLV=%s,awakeLV=%s" % (heroID, quality, heroLV, star, breakLV, awakeLV))
+    # 等级
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("HeroQualityLV", {"Quality":quality}, True)
+    if ipyDataList:
+        for ipyData in ipyDataList:
+            if heroLV <= ipyData.GetHeroLV():
+                break
+            costItemInfo = ipyData.GetUPCostItem()
+            if not costItemInfo:
+                continue
+            costItemID, costItemCount = costItemInfo
+            trainItemCntDict[costItemID] = trainItemCntDict.get(costItemID, 0) + costItemCount
+        #GameWorld.DebugLog("    quality=%s,heroLV=%s,%s" % (quality, heroLV, trainItemCntDict))
+        
+    # 突破
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("HeroQualityBreak", {"Quality":quality}, True)
+    if ipyDataList:
+        for ipyData in ipyDataList:
+            if breakLV <= ipyData.GetBreakLV():
+                break
+            costItemList = ipyData.GetUPCostItemList()
+            if not costItemList:
+                continue
+            for costItemInfo in costItemList:
+                costItemID, costItemCount = costItemInfo[:2]
+                trainItemCntDict[costItemID] = trainItemCntDict.get(costItemID, 0) + costItemCount
+        #GameWorld.DebugLog("    quality=%s,breakLV=%s,%s" % (quality, breakLV, trainItemCntDict))
+        
+    # 觉醒 
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("HeroQualityAwake", {"Quality":quality}, True, False)
+    if ipyDataList:
+        for ipyData in ipyDataList:
+            if awakeLV <= ipyData.GetAwakeLV():
+                break
+            costItemInfo = ipyData.GetUPCostItem()
+            if not costItemInfo:
+                continue
+            costItemID, costItemCount = costItemInfo
+            trainItemCntDict[costItemID] = trainItemCntDict.get(costItemID, 0) + costItemCount
+        #GameWorld.DebugLog("    quality=%s,awakeLV=%s,%s" % (quality, awakeLV, trainItemCntDict))
+                
+    trainScore = 0
+    for costItemID, itemCnt in trainItemCntDict.items():
+        addScore = trainItemScoreDict.get(str(costItemID), 0) * itemCnt
+        trainScore += addScore
+        
+    # 星级
+    starScore = star * qualityStarScoreDict.get(str(quality), 0)
+    trainScore += starScore
+    #GameWorld.DebugLog("    trainScore=%s,starScore=%s" % (trainScore, starScore))
+    
+    # 洗炼为通用的,在外层最后直接加
+    return int(trainScore)
+
+def DoOSA_BeautyTrainOpen(curPlayer): UpdOSA_BeautyTrainBillboard(curPlayer)
+def UpdOSA_BeautyTrainBillboard(curPlayer):
+    if GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_BeautyTrain) != 1:
+        return
+    # 红颜好感总等级
+    beautyTotalLV = PlayerBeauty.GetBeautyLVTotal(curPlayer)
+    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_BeautyTrain, beautyTotalLV)
+    return
+
+def DoOSA_MinggeTrainOpen(curPlayer): UpdOSA_MinggeTrainBillboard(curPlayer)
+def UpdOSA_MinggeTrainBillboard(curPlayer):
+    if GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_MinggeTrain) != 1:
+        return
+    osaType = ShareDefine.Def_BT_OSA_MinggeTrain
+    trainScoreList = IpyGameDataPY.GetFuncEvalCfg("OSABillboardTrain", 4)
+    if not trainScoreList or len(trainScoreList) != 2:
+        return
+    tuiyanScore, lingyingScore = trainScoreList
+    osaValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSAValue % osaType)
+    curLingying = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MGLingying)
+    trainScore = int(osaValue * tuiyanScore + curLingying * lingyingScore)
+    GameWorld.DebugLog("命格冲榜: trainScore=%s,osaValue=%s,curLingying=%s" % (trainScore, osaValue, curLingying))
+    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_MinggeTrain, trainScore)
+    return
+
+def AddOSAValue(curPlayer, osaType, addValue):
+    ## 增加开服冲榜活动值,功能未开启时也要加
+    if GetOSAState(curPlayer, osaType, checkFuncOpen=False) != 1:
+        return
+    osaValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSAValue % osaType)
+    updOSAValue = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSAValue % osaType, osaValue + addValue)
+    GameWorld.DebugLog("更新开服冲榜活动值: osaType=%s,addValue=%s,updOSAValue=%s" % (osaType, addValue, updOSAValue))
+    return
+
+def GetOSAState(curPlayer, osaType, checkFuncOpen=True):
     ## 玩家是否在开服冲榜活动中
     # @return: 0-未开启;1-活动中;2-结束显示期;3-结束关闭期
     funcID = OSAFuncIDDict.get(osaType)
     if not funcID:
         return 0
-    if not GameFuncComm.GetFuncCanUse(curPlayer, funcID):
+    if checkFuncOpen and not GameFuncComm.GetFuncCanUse(curPlayer, funcID):
         #GameWorld.DebugLog("开服冲榜功能未开启! osaType=%s,funcID=%s" % (osaType, funcID))
         return 0
     osaDayDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboard", 1, {})
@@ -103,6 +261,15 @@
         elif osaType == ShareDefine.Def_BT_OSA_HeroCall:
             billboardAwardDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboard", 3, {})
             PlayerBillboard.DoGiveBillboardAwardByMail(osaType, "OSAHeroCall", billboardAwardDict, "OSAHeroCall")
+        elif osaType == ShareDefine.Def_BT_OSA_HeroTrain:
+            billboardAwardDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboardTrain", 3, {})
+            PlayerBillboard.DoGiveBillboardAwardByMail(osaType, "OSAHeroTrain", billboardAwardDict, "OSAHeroTrain")
+        elif osaType == ShareDefine.Def_BT_OSA_BeautyTrain:
+            billboardAwardDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboard", 4, {})
+            PlayerBillboard.DoGiveBillboardAwardByMail(osaType, "OSABeautyTrain", billboardAwardDict, "OSABeautyTrain")
+        elif osaType == ShareDefine.Def_BT_OSA_MinggeTrain:
+            billboardAwardDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboardTrain", 5, {})
+            PlayerBillboard.DoGiveBillboardAwardByMail(osaType, "OSAMinggeTrain", billboardAwardDict, "OSAMinggeTrain")
             
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
index a280305..175e207 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
@@ -22,6 +22,7 @@
 import PlayerControl
 import IpyGameDataPY
 import ChPyNetSendPack
+import OpenServerActivity
 import PlayerGoldRush
 import NetPackCommon
 import ItemControler
@@ -226,6 +227,19 @@
         actCnt += 1
     return actCnt
 
+def GetBeautyLVTotal(curPlayer):
+    ## 红颜总等级
+    lvTotal = 0
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in range(ipyDataMgr.GetBeautyCount()):
+        ipyData = ipyDataMgr.GetBeautyByIndex(index)
+        beautyID = ipyData.GetBeautyID()
+        if not GetBeautyState(curPlayer, beautyID):
+            continue
+        curLV = GetBeautyLVInfo(curPlayer, beautyID)[0]
+        lvTotal += curLV
+    return lvTotal
+
 #// B2 20 红颜好感度升级 #tagCSBeautyLVUP
 #
 #struct    tagCSBeautyLVUP
@@ -315,6 +329,7 @@
     # 有升级额外处理
     if updLV > curLV:
         RefreshBeautyAttr(curPlayer)
+        OpenServerActivity.UpdOSA_BeautyTrainBillboard(curPlayer)
         
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 8347eea..f473343 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4149,8 +4149,7 @@
         PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevel)
         PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_MainLevel, lvID)
         PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAMainLevel, lvID)
-        if OpenServerActivity.GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_MainLevel) == 1:
-            PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_MainLevel, lvID)
+        OpenServerActivity.UpdOSA_MainLevelBillboard(curPlayer, lvID)
         DataRecordPack.DR_MainLevelPass(curPlayer, lvID)
     return value
 def GetMainLevelPassInfo(curPlayer):
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 7b7499f..1a6b85b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -22,6 +22,7 @@
 import ItemControler
 import PlayerSuccess
 import ChPyNetSendPack
+import OpenServerActivity
 import PlayerActivity
 import NetPackCommon
 import PlayerControl
@@ -190,6 +191,7 @@
         #首次获得图鉴额外逻辑 ...
         Sync_HeroInfo(curPlayer, [heroID])
         PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 首次获得
+        OpenServerActivity.UpdOSA_HeroTrainBillboard(curPlayer) # 首次获得
         
     return
 
@@ -321,6 +323,7 @@
     PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroLVUP, 1)
     PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroLVUP)
     PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroLVUP, 1)
+    OpenServerActivity.UpdOSA_HeroTrainBillboard(curPlayer) # 升级
     return
 
 def GetHeroLVMax(heroItem):
@@ -412,6 +415,7 @@
             returnItemList.append([itemID, returnCnt])
         ItemControler.GivePlayerItemOrMail(curPlayer, returnItemList, event=["HeroStarUPReturn", False, {}])
         
+    OpenServerActivity.UpdOSA_HeroTrainBillboard(curPlayer) # 升星
     return
 
 def GetHeroStarMax(heroID, heroItem=None):
@@ -667,6 +671,7 @@
     SetHeroBreakLV(curPlayer, heroItem, nextBreakLV)
     
     PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 突破
+    OpenServerActivity.UpdOSA_HeroTrainBillboard(curPlayer) # 突破
     return
 
 def SetHeroBreakLV(curPlayer, heroItem, breakLV, isSync=True):
@@ -733,6 +738,7 @@
     SetHeroAwakeLV(heroItem, nextAwakeLV)
     
     PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # 觉醒
+    OpenServerActivity.UpdOSA_HeroTrainBillboard(curPlayer) # 觉醒
     return
 
 def SetHeroAwakeLV(heroItem, awakeLV, isSync=True):
@@ -1010,6 +1016,8 @@
     heroItem.Sync_Item()
     GameWorld.DebugLog("武将洗炼结果! itemIndex=%s,heroID=%s,washIDList=%s,lockTalentIndexs=%s" 
                        % (itemIndex, heroID, washIDList, lockTalentIndexs))
+    OpenServerActivity.AddOSAValue(curPlayer, ShareDefine.Def_BT_OSA_HeroTrain, washCostItemCount)
+    OpenServerActivity.UpdOSA_HeroTrainBillboard(curPlayer) # 洗炼
     return
 
 def HeroTalentWashReplace(curPlayer, itemIndex, heroItem):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py
index 8d50d2e..d22e828 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py
@@ -20,6 +20,7 @@
 import PlayerControl
 import ItemControler
 import IpyGameDataPY
+import OpenServerActivity
 import ChPyNetSendPack
 import NetPackCommon
 import PlayerOnline
@@ -183,6 +184,9 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MGGanwuExp, updExp)
     Sync_MinggeInfo(curPlayer)
     
+    OpenServerActivity.AddOSAValue(curPlayer, ShareDefine.Def_BT_OSA_MinggeTrain, succCount)
+    OpenServerActivity.UpdOSA_MinggeTrainBillboard(curPlayer) # 推演
+    
     ItemCommon.SyncMakeItemAnswer(curPlayer, ShareDefine.Def_mitMGTuiyan, ChConfig.Def_ComposeState_Sucess, succCount)
     return True
 
@@ -342,6 +346,8 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MGLingying, updLingying)
     GameWorld.DebugLog("    updLingying=%s,useCount=%s" % (updLingying, useCount))
     Sync_MinggeInfo(curPlayer)
+    
+    OpenServerActivity.UpdOSA_MinggeTrainBillboard(curPlayer)
     return
 
 def RefreshMinggeAttr(curPlayer, mgNum=0):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
index ba6ac1c..cc59c81 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -27,6 +27,7 @@
 import FormulaControl
 import PlayerPrestigeSys
 import GameLogic_Dingjunge
+import OpenServerActivity
 import PlayerMingge
 import PlayerBeauty
 import PlayerHorse
@@ -34,7 +35,6 @@
 import PlayerHero
 import PlayerHJG
 import GameWorld
-import ChPlayer
 import ChConfig
 import ChEquip
 
@@ -94,6 +94,7 @@
         self._effectiveCardDict[heroID] = [cardAddPer, itemIndex, inThis]
         return
         
+    def GetEffectiveCardDict(self): return self._effectiveCardDict
     def SetEffectiveCardDict(self, effectiveCardDict): self._effectiveCardDict = effectiveCardDict
     def GetEffCardAddPer(self):
         effCardAddPer = 0
@@ -619,6 +620,7 @@
     for syncItem in syncItemDict.values():
         syncItem.Sync_Item()
         
+    OpenServerActivity.UpdOSA_HeroTrainBillboard(curPlayer) # 重载生效卡
     return
 
 def getHeroCardAddPer(heroItem):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py
index 25cb9e5..d543b7f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py
@@ -47,7 +47,7 @@
             if taskID not in taskIDList:
                 taskIDList.append(taskID)
         IpyGameDataPY.SetConfigEx(key, taskIDListDict)
-        GameWorld.Log("任务ID列表: %s" % taskIDListDict)
+        #GameWorld.Log("任务ID列表: %s" % taskIDListDict)
     return taskIDListDict.get(taskGroup, [])
 
 def OnPlayerLogin(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
index a8324eb..60938e7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -779,8 +779,7 @@
         PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroCall, treasureCount)
         PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroCall, treasureCount)
         heroCallCnt = GetHeroCallCnt(curPlayer)
-        if OpenServerActivity.GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_HeroCall) == 1:
-            PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_HeroCall, heroCallCnt)
+        OpenServerActivity.UpdOSA_HeroCallBillboard(curPlayer, heroCallCnt)
         PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroCall, heroCallCnt)
         
     PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_Treasure, treasureType, treasureCount)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index fee2781..d8c6a8a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -326,7 +326,10 @@
 Def_BT_OSA_HeroCall,    # 开服招募榜 4
 Def_BT_Dingjunge,    # 定军阁过关榜 5
 Def_BT_ActHeroAppear,    # 武将登场招募榜 6
-) = range(0, 7) 
+Def_BT_OSA_HeroTrain,    # 开服武将冲榜 7
+Def_BT_OSA_BeautyTrain,    # 开服红颜冲榜 8
+Def_BT_OSA_MinggeTrain,    # 开服命格冲榜 9
+) = range(0, 10) 
 
 ''' 跨服排行榜类型, 从 150 开始,最大条数在功能配置表 CrossBillboardSet 配置,没配默认100
 与本服榜单存储的是不一样的数据库表格,理论上类型可以和本服榜单类型重复,为了做下区分防误导,跨服榜单从 150 开始
@@ -341,7 +344,8 @@
 
 BillboardNameDict = {Def_BT_MainLevel:"主线过关榜", Def_BT_Arena:"演武场积分周榜", Def_BT_Tianzi:"天子考验伤害榜", 
                      Def_BT_OSA_MainLevel:"开服关卡榜", Def_BT_OSA_HeroCall:"开服招募榜", Def_BT_Dingjunge:"定军阁过关榜", 
-                     Def_BT_ActHeroAppear:"武将登场招募榜(分组值1-ActNum)"
+                     Def_BT_OSA_HeroTrain:"开服武将冲榜", Def_BT_OSA_BeautyTrain:"开服红颜冲榜", Def_BT_OSA_MinggeTrain:"开服命格冲榜", 
+                     Def_BT_ActHeroAppear:"武将登场招募榜(分组值1-ActNum)",
                      }
 
 #仙盟榜单类型
@@ -707,6 +711,9 @@
 GameFuncID_OSA_HeroCall = 46    # 开服招募榜
 GameFuncID_OSA_Celebration = 47 # 开服庆典
 GameFuncID_Mingge = 54          # 命格
+GameFuncID_OSA_HeroTrain = 59   # 开服武将冲榜
+GameFuncID_OSA_BeautyTrain = 60 # 开服红颜冲榜
+GameFuncID_OSA_MinggeTrain = 61 # 开服命格冲榜
 
 # 以下为暂时无用的
 GameFuncID_Pet = -1             # 宠物,灵宠 6

--
Gitblit v1.8.0