From 9c5f7ba286ee8fa87f9e348624fee2127b3fe85a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 04 十二月 2025 15:45:44 +0800
Subject: [PATCH] 369 【活动内容】开服冲榜-服务端

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerDay.py |   35 ------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py         |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py          |   22 +++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py          |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                    |   11 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py          |   18 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py      |   99 +++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py         |   47 +++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py            |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py           |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py      |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                       |    1 
 12 files changed, 201 insertions(+), 45 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index cc573b3..dd38543 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3084,7 +3084,6 @@
 Def_PlayerKey_Frist_Lock = "Frist_Lock"  # 是否接受了任务1
 Def_PlayerKey_TaskExpRewardMultiple = "TaskExpRewardMultiple"  # 任务经验奖励倍值
 Def_PlayerKey_BuyItemCnt = "BuyItemCnt"  # 购买物品数量
-Def_PlayerKey_QueryOpenServerAwardState = "QueryOpenServerAwardState"  # 查询开服奖励状态
 
 Def_PlayerKey_QueryMarkIdCardIndex = 'QueryMarkIdCardIndex'  # 指定账号生成卡类型
 Def_PlayerKey_QueryNewGuyCardType = 'QueryNewGuyCardType'  # 查询的新手卡类型
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py
index 8ff5db8..309a4f3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py
@@ -26,7 +26,7 @@
         GameWorld.DebugAnswer(curPlayer, errInfo)
     GameWorld.DebugAnswer(curPlayer, "新增榜单假数据: Billboard 类型 分组值1 分组值2 条数 比较值1可选参数(比较值2 常规值1~5)")
     GameWorld.DebugAnswer(curPlayer, "删除榜单假数据: Billboard 类型 分组值1 分组值2")
-    GameWorld.DebugAnswer(curPlayer, "输出排行榜数据: Billboard p 类型 分组值1 分组值2")
+    GameWorld.DebugAnswer(curPlayer, "输出排行榜数据: Billboard p 类型 [分组值1 值2 从x名 到x名]")
     GameWorld.DebugAnswer(curPlayer, "注:如果没有特殊说明,本服榜单分组值均为0,跨服榜单分组值1为分区ID,分组2为0")
     
     nameTypeList = ShareDefine.BillboardNameDict.keys()
@@ -137,7 +137,7 @@
     return
 
 def __GetBillTypeSign(billboardType, groupValue1, groupValue2):
-    billTypeSign = "Type:%s" % billboardType
+    billTypeSign = "%s" % billboardType
     if groupValue1:
         billTypeSign = "%s-%s" % (billTypeSign, groupValue1)
     if groupValue2:
@@ -145,7 +145,7 @@
     return billTypeSign
 
 def __logFackData(curPlayer, gmList):
-    ## 输出排行榜数据: Billboard p 类型 分组值1 分组值2
+    ## 输出排行榜数据: Billboard p 类型 分组值1 分组值2 名次A 到B
     if len(gmList) <= 1:
         GameWorld.DebugAnswer(curPlayer, "榜单数据条数总览")
         billboardMgr = DBDataMgr.GetBillboardMgr()
@@ -164,6 +164,8 @@
     billboardType = gmList[1]
     groupValue1 = gmList[2] if len(gmList) > 2 else 0
     groupValue2 = gmList[3] if len(gmList) > 3 else 0
+    fromRank = gmList[4] if len(gmList) > 4 else 0
+    toRank = gmList[5] if len(gmList) > 5 else 0
     billboardMgr = DBDataMgr.GetBillboardMgr()
     billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
     billboardObj.SortDelayDo()
@@ -171,16 +173,24 @@
     maxDataCount = billboardObj.GetMaxCount()
     idOrderDict = billboardObj.GetIDOrderDict()
     
+    printDebugCnt = 0
     billTypeSign = __GetBillTypeSign(billboardType, groupValue1, groupValue2)
-    GameWorld.DebugAnswer(curPlayer, "榜单数据(%s)条数: %s/%s 详见日志" % (billTypeSign, curDataCount, maxDataCount))
+    bName = ShareDefine.BillboardNameDict[billboardType]
+    GameWorld.DebugAnswer(curPlayer, "%s(%s)条数: %s/%s 详见日志" % (bName, billTypeSign, curDataCount, maxDataCount))
     for index in range(curDataCount):
         bbData = billboardObj.At(index)
         dataID = bbData.GetID()
         rank = idOrderDict.get(dataID, 0)
+        if (fromRank and rank < fromRank) or (toRank and rank > toRank):
+            continue
         
+        cmpValues = [bbData.GetCmpValue(), bbData.GetCmpValue2(), bbData.GetCmpValue3()]
         valueList = [getattr(bbData, "GetValue%s" % num)() for num in range(1, 9)]
-        GameWorld.DebugLog("%s,rank=%s,ID=%s,CmpValue=%s,CmpValue2=%s,Value=%s" 
-                           % (index, rank, dataID, bbData.GetCmpValue(), bbData.GetCmpValue2(), valueList), curPlayer.GetPlayerID())
+        if printDebugCnt < 20:
+            printDebugCnt += 1
+            GameWorld.DebugAnswer(curPlayer, "%s,ID:%s,榜值:%s" % (rank, dataID, cmpValues))
+        GameWorld.DebugLog("%s,rank=%s,ID=%s,CmpValues=%s,Value=%s" 
+                           % (index, rank, dataID, cmpValues, valueList), curPlayer.GetPlayerID())
         
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerDay.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerDay.py
index cbe9b1e..90ee62e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerDay.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerDay.py
@@ -15,40 +15,9 @@
 #"""Version = 2025-05-15 10:35"""
 #-------------------------------------------------------------------------------
 
-import GameWorld
-import ShareDefine
-import GameWorldEvent
-import PlayerSignDay
-import DBDataMgr
-import ChPlayer
+import ServerDay
 
-import time
-
-#---------------------------------------------------------------------
-## 执行逻辑
-#  @param curPlayer 当前玩家
-#  @param cmdList 参数
-#  @return None
-#  @remarks 函数详细说明.
 def OnExec(curPlayer, cmdList):
-    #重置开服天,设置非合服
-    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerWeek, 0)
-    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerDay, 0)
-    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_IsMixServer, 0)
-    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_MixServerDay, 0)
-    
-    curTime = int(time.time())
-    GameWorldEvent.SetInitOpenServerTime(curTime)
-    
-    if curPlayer:
-        ChPlayer.Sync_OpenServerDay(curPlayer)
-        ServerDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
-        IsMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
-        MixDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_MixServerDay) + 1
-        OpenWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
-        GameWorld.DebugAnswer(curPlayer, '开服星期%s, 天数:%s 是否合服:%s, 合服天数:%s' % (OpenWeekday, ServerDay, IsMixServer, MixDay))
-        PlayerSignDay.ResetDaySign(curPlayer)
-        
-    # 暂时同步GameServer,之后可去除
+    ServerDay.OnExec(curPlayer, [1])
     return True
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py
index 57cea70..84e07aa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py
@@ -60,6 +60,7 @@
     DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerDay, 0)
     DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_IsMixServer, 0)
     DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_MixServerDay, 0)
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_OSAAwardState, 0)
     
     curTime = int(time.time())
     GameWorldEvent.SetInitOpenServerTime(curTime)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py
index 2b7b51c..1c3f017 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py
@@ -18,10 +18,12 @@
 import GameWorld
 import PlayerEventCounter
 import GameWorldEvent
+import ServerDay
 
 def OnExec(curPlayer, gmList):
     __DoExec(GameWorld.GetGameWorld().GetTick())
-    
+        
+    ServerDay.__printServerDay(curPlayer)
     # 暂时同步GameServer,之后可去除
     return True
 
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 8af5d3d..91fe638 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -29,6 +29,7 @@
 import PlayerControl
 import FunctionNPCCommon
 import PlayerActBuyCountGift
+import OpenServerActivity
 import PlayerActLoginNew
 import PlayerActTask
 import ItemControler
@@ -45,6 +46,8 @@
                      ShareDefine.GameFuncID_Shop:lambda curObj:FunctionNPCCommon.DoShopOpen(curObj),
                      ShareDefine.GameFuncID_Horse:lambda curObj:PlayerHorse.DoHorseOpen(curObj),
                      ShareDefine.GameFuncID_Travel:lambda curObj:PlayerTravel.DoTravelOpen(curObj),
+                     ShareDefine.GameFuncID_OSA_MainLevel:lambda curObj:OpenServerActivity.DoOSA_MainLevel(curObj),
+                     ShareDefine.GameFuncID_OSA_HeroCall:lambda curObj:OpenServerActivity.DoOSA_HeroCall(curObj),
                      }
 
 def GetFuncOpenLVIpyData(funcID): return IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py
new file mode 100644
index 0000000..253c496
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.OpenServerActivity
+#
+# @todo:开服活动
+# @author hxp
+# @date 2025-12-04
+# @version 1.0
+#
+# 详细描述: 开服活动
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-12-04 16:00"""
+#-------------------------------------------------------------------------------
+
+import DBDataMgr
+import ShareDefine
+import GameFuncComm
+import IpyGameDataPY
+import PlayerBillboard
+import PlayerTreasure
+import PlayerControl
+import GameWorld
+
+# 开服冲榜类型对应功能ID
+OSAFuncIDDict = {
+                 ShareDefine.Def_BT_OSA_MainLevel:ShareDefine.GameFuncID_OSA_MainLevel,
+                 ShareDefine.Def_BT_OSA_HeroCall:ShareDefine.GameFuncID_OSA_HeroCall,
+                 }
+
+def DoOSA_MainLevel(curPlayer):
+    if GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_MainLevel) != 1:
+        return
+    lvID = PlayerControl.GetPassMainLevelID(curPlayer)
+    GameWorld.DebugLog("开服关卡榜开启更新榜单: lvID=%s" % lvID, curPlayer.GetPlayerID())
+    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_MainLevel, lvID)
+    return
+
+def DoOSA_HeroCall(curPlayer):
+    if GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_HeroCall) != 1:
+        return
+    callCnt = PlayerTreasure.GetHeroCallCnt(curPlayer)
+    GameWorld.DebugLog("开服招募榜开启更新榜单: callCnt=%s" % callCnt, curPlayer.GetPlayerID())
+    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_HeroCall, callCnt)
+    return
+
+def GetOSAState(curPlayer, osaType):
+    ## 玩家是否在开服冲榜活动中
+    # @return: 0-未开启;1-活动中;2-结束显示期;3-结束关闭期
+    funcID = OSAFuncIDDict.get(osaType)
+    if not funcID:
+        return 0
+    if not GameFuncComm.GetFuncCanUse(curPlayer, funcID):
+        #GameWorld.DebugLog("开服冲榜功能未开启! osaType=%s,funcID=%s" % (osaType, funcID))
+        return 0
+    osaDayDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboard", 1, {})
+    startDay, endDay = osaDayDict.get(str(osaType), [0, 0])
+    serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
+    if startDay <= serverDay <= endDay:
+        #GameWorld.DebugLog("开服冲榜活动中! osaType=%s,serverDay=%s,startDay=%s,endDay=%s" % (osaType, serverDay, startDay, endDay))
+        return 1
+    if serverDay == (endDay + 1):
+        #GameWorld.DebugLog("开服冲榜结算中! osaType=%s,serverDay=%s,startDay=%s,endDay=%s" % (osaType, serverDay, startDay, endDay))
+        return 2
+    #GameWorld.DebugLog("开服冲榜已结束! osaType=%s,serverDay=%s,startDay=%s,endDay=%s" % (osaType, serverDay, startDay, endDay))
+    return 3
+
+def OnDay():
+    
+    osaAwardState = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OSAAwardState)
+    serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
+    osaDayDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboard", 1, {})
+    for osaType, dayRange in osaDayDict.items():
+        osaType = int(osaType)
+        startDay, endDay = dayRange
+        if startDay > endDay:
+            continue
+        if serverDay <= endDay:
+            #GameWorld.DebugLog("开服冲榜未开始或活动中的不处理: osaType=%s,serverDay=%s <= endDay(%s)" % (osaType, serverDay, endDay))
+            continue
+        
+        # 结算
+        if osaAwardState & pow(2, osaType):
+            #GameWorld.DebugLog("开服冲榜奖励已结算过了: osaType=%s,osaAwardState=%s" % (osaType, osaAwardState))
+            continue
+        osaAwardState |= pow(2, osaType)
+        DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_OSAAwardState, osaAwardState)
+        GameWorld.DebugLog("开服冲榜奖励结算: osaType=%s,osaAwardState=%s,serverDay=%s" % (osaType, osaAwardState, serverDay))
+        
+        if osaType == ShareDefine.Def_BT_OSA_MainLevel:
+            billboardAwardDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboard", 2, {})
+            PlayerBillboard.DoGiveBillboardAwardByMail(osaType, "OSAMainLevel", billboardAwardDict, "OSAMainLevel")
+        elif osaType == ShareDefine.Def_BT_OSA_HeroCall:
+            billboardAwardDict = IpyGameDataPY.GetFuncEvalCfg("OSABillboard", 3, {})
+            PlayerBillboard.DoGiveBillboardAwardByMail(osaType, "OSAHeroCall", billboardAwardDict, "OSAHeroCall")
+            
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
index b474f25..34b4c1e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -21,6 +21,7 @@
 import ChPyNetSendPack
 import NetPackCommon
 import IpyGameDataPY
+import PlayerMail
 import DBDataMgr
 
 import time
@@ -388,3 +389,49 @@
         clientPack.ViewIDDataList.append(viewData)
     clientPack.ViewIDDataCnt = len(clientPack.ViewIDDataList)
     return clientPack
+
+def DoGiveBillboardAwardByMail(billboardType, funcName, billboardAwardDict, mailKey):
+    ## 结算排行奖励邮件发放
+    GameWorld.Log("=== %s结算排行奖励! === " % (funcName))
+    if not billboardAwardDict:
+        return
+    orderList = [int(orderStr) for orderStr in billboardAwardDict.keys()]
+    orderList.sort()
+    GameWorld.Log("    奖励名次列表: %s" % orderList)
+    
+    billboardMgr = DBDataMgr.GetBillboardMgr()
+    billBoard = billboardMgr.GetBillboard(ShareDefine.Def_BT_Arena)
+    if not billBoard:
+        return
+    billBoard.SortDelayDo()
+    
+    awardOrder = orderList[0]
+    orderPlayerIDDict = {}
+    billboardCount, billboardMaxCount = billBoard.GetCount(), billBoard.GetMaxCount()
+    GameWorld.Log("    榜单数据数: %s/%s" % (billboardCount, billboardMaxCount))
+    for index in xrange(billboardCount):
+        billBoardData = billBoard.At(index)
+        if not billBoardData:
+            continue
+        order = index + 1
+        
+        if order > awardOrder:
+            nextOrderIndex = orderList.index(awardOrder) + 1
+            if nextOrderIndex >= len(orderList):
+                break
+            awardOrder = orderList[nextOrderIndex]
+            
+        playerID = billBoardData.GetID()
+        if playerID < ShareDefine.RealPlayerIDStart:
+            # 非真人不处理
+            continue
+        
+        orderPlayerIDDict[playerID] = [order, awardOrder]
+        
+        paramList = [order]
+        awardList = billboardAwardDict[str(awardOrder)]
+        PlayerMail.SendMailByKey(mailKey, playerID, awardList, paramList)
+        
+    GameWorld.Log("    奖励玩家名次信息: %s" % orderPlayerIDDict)
+    GameWorld.Log("===================================================")
+    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 d914d0b..d2e7ce2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -48,6 +48,7 @@
 import PlayerCostRebate
 import PlayerActLunhuidian
 import GY_Query_CrossRealmReg
+import OpenServerActivity
 import CrossRealmPlayer
 import CrossPlayerData
 import PlayerActivity
@@ -4330,6 +4331,8 @@
         PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_MainLevel, lvID)
         PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevel)
         PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_MainLevel, lvID)
+        if OpenServerActivity.GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_MainLevel) == 1:
+            PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_MainLevel, lvID)
     return value
 def GetMainLevelPassInfo(curPlayer):
     ## 获取主线关卡过关进度信息
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 6f75318..4eea7a3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -82,6 +82,7 @@
 import IpyGameDataPY
 import PlayerArena
 import PyGameData
+import OpenServerActivity
 import PlayerXiangong
 import PlayerBillboard
 import PlayerViewCache
@@ -106,6 +107,7 @@
     #副本OnDay事件响应
     #FBLogic.OnDay(tick)
     
+    OpenServerActivity.OnDay()
     #仙盟
     PlayerFamily.FamilyOnDay()
     PlayerArena.OnDay()
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 2a80a9e..f711016 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -26,6 +26,9 @@
 import PlayerActLunhuidian
 import PlayerActYunshi
 import PlayerActivity
+import OpenServerActivity
+import PlayerBillboard
+import ShareDefine
 import ItemCommon
 import PlayerHero
 import PyGameData
@@ -53,6 +56,8 @@
 TreasureType_HeroComm = 11 # 英雄招募 - 普通
 TreasureType_HeroHigh = 12 # 英雄招募 - 高级
 TreasureType_HeroScore = 13 # 英雄招募 - 积分
+#武将招募的所有类型
+TreasureType_HeroCallList = [TreasureType_HeroComm, TreasureType_HeroHigh, TreasureType_HeroScore]
 
 def OnTreasureLogin(curPlayer):
     Sync_TreasureInfo(curPlayer)
@@ -438,9 +443,11 @@
     if addScoreType and addScore:
         PlayerControl.GiveMoney(curPlayer, addScoreType, addScore * treasureCount)
         
-    if treasureType in [TreasureType_HeroComm, TreasureType_HeroHigh, TreasureType_HeroScore]:
+    if treasureType in TreasureType_HeroCallList:
         PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroCall, treasureCount)
-        
+        if OpenServerActivity.GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_HeroCall) == 1:
+            PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_HeroCall, GetHeroCallCnt(curPlayer))
+            
     PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_Treasure, treasureType, treasureCount)
     
     # 给物品
@@ -484,6 +491,13 @@
     Sync_TreasureInfo(curPlayer, [treasureType])
     return
 
+def GetHeroCallCnt(curPlayer):
+    ## 获取武将招募总次数
+    callCount = 0
+    for treasureType in TreasureType_HeroCallList:
+        callCount += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (treasureType))
+    return callCount
+
 def __getLuckyRateInfo(curLuck, luckyItemRateDict, luckyValueList):
     if not luckyItemRateDict or not luckyValueList:
         return 0, []
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index ba7e5e4..daa6765 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -40,6 +40,8 @@
 Def_InitOpenServerTime = 'InitOpenServerTime'
 Def_SetOpenServerTime = 'SetOpenServerTime' # GM工具预定的开服时间
 
+
+Def_OSAAwardState = 'OSAAwardState' #开服冲榜活动结算状态
 # ------------------------- WorldKey ------------------------- 
 
 #---奇迹, 职业枚举定义---
@@ -429,7 +431,9 @@
 Def_BT_MainLevel,    # 主线关卡过关榜 0
 Def_BT_Arena,    # 演武场积分周榜 1
 Def_BT_Tianzi,    # 天子考验伤害榜 2
-) = range(0, 3) 
+Def_BT_OSA_MainLevel,    # 开服关卡榜 3
+Def_BT_OSA_HeroCall,    # 开服招募榜 4
+) = range(0, 5) 
 
 ''' 跨服排行榜类型, 从 150 开始,最大条数在功能配置表 CrossBillboardSet 配置,没配默认100
 与本服榜单存储的是不一样的数据库表格,理论上类型可以和本服榜单类型重复,为了做下区分防误导,跨服榜单从 150 开始
@@ -442,7 +446,8 @@
 
 BillboardTypeAllList = BillboardTypeList + CrossBillboardTypeList
 
-BillboardNameDict = {Def_BT_MainLevel:"主线过关榜", Def_BT_Arena:"演武场积分周榜", Def_BT_Tianzi:"天子考验伤害榜"}
+BillboardNameDict = {Def_BT_MainLevel:"主线过关榜", Def_BT_Arena:"演武场积分周榜", Def_BT_Tianzi:"天子考验伤害榜", 
+                     Def_BT_OSA_MainLevel:"开服关卡榜", Def_BT_OSA_HeroCall:"开服招募榜"}
 
 #仙盟榜单类型
 FamilyBillboardList = []
@@ -802,6 +807,8 @@
 GameFuncID_Arena = 27           # 竞技场
 GameFuncID_Horse = 37           # 坐骑
 GameFuncID_Travel = 44          # 游历
+GameFuncID_OSA_MainLevel = 45   # 开服关卡榜
+GameFuncID_OSA_HeroCall = 46    # 开服招募榜
 
 # 以下为暂时无用的
 GameFuncID_Pet = -1             # 宠物,灵宠 6

--
Gitblit v1.8.0