From a1ea5474ffd2b081668f9a0cef8d069aa78db85d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 12 十二月 2025 20:53:42 +0800
Subject: [PATCH] 389 流向记录(战斗服务器不记录流向)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py |  102 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 101 insertions(+), 1 deletions(-)

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 253c496..95bd803 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py
@@ -16,13 +16,21 @@
 #-------------------------------------------------------------------------------
 
 import DBDataMgr
+import PlayerMail
 import ShareDefine
 import GameFuncComm
+import IPY_GameWorld
 import IpyGameDataPY
-import PlayerBillboard
 import PlayerTreasure
+import PlayerBillboard
+import ChPyNetSendPack
 import PlayerControl
+import NetPackCommon
+import ItemControler
+import ItemCommon
 import GameWorld
+import ChConfig
+import math
 
 # 开服冲榜类型对应功能ID
 OSAFuncIDDict = {
@@ -97,3 +105,95 @@
             PlayerBillboard.DoGiveBillboardAwardByMail(osaType, "OSAHeroCall", billboardAwardDict, "OSAHeroCall")
             
     return
+
+
+## ------------------------------------------- 开服庆典 ---------------------------------------------
+
+def OnPlayerLogin(curPlayer):
+    if GetOSACelebrationState(curPlayer) == 3:
+        __autoChangeCelebrationPoint(curPlayer)
+        return
+    SyncOSACelebrationInfo(curPlayer)
+    return
+
+def PlayerOnDay(curPlayer):
+    if GetOSACelebrationState(curPlayer) == 3:
+        __autoChangeCelebrationPoint(curPlayer)
+        return
+    return
+
+def __autoChangeCelebrationPoint(curPlayer):
+    ## 活动结束后自动转换庆典积分
+    unUsePoint = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_OSAPoint)
+    if unUsePoint <= 0:
+        return
+    moneyItemID = ItemCommon.GetMoneyItemID(IPY_GameWorld.TYPE_Price_Gold_Money)
+    if not moneyItemID:
+        return
+    playerID = curPlayer.GetPlayerID()
+    oneNeedPoint = IpyGameDataPY.GetFuncCfg("OSACelebration", 3) # 多少积分=1元宝
+    changeMoney = int(math.ceil(unUsePoint / float(oneNeedPoint)))
+    itemList = [[moneyItemID, changeMoney]]
+    GameWorld.DebugLog("自动转化未使用的庆典积分: unUsePoint=%s,oneNeedPoint=%s,changeMoney=%s,itemList=%s" 
+                       % (unUsePoint, oneNeedPoint, changeMoney, itemList), playerID)
+    if PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_OSAPoint, unUsePoint, "SysClear"):
+        PlayerMail.SendMailByKey("OSACelebrationPoint", playerID, itemList)
+    return
+
+def GetOSACelebrationState(curPlayer):
+    ## 玩家是否在开服庆典活动中
+    # @return: 0-未开启;1-活动中;2-结束显示期;3-结束关闭期
+    #开服庆典,后端不限制功能是否开启
+    #funcID = ShareDefine.GameFuncID_OSA_Celebration
+    #if not GameFuncComm.GetFuncCanUse(curPlayer, funcID):
+    #    #GameWorld.DebugLog("开服庆典功能未开启! funcID=%s" % (funcID))
+    #    return 0
+    endDay = IpyGameDataPY.GetFuncCfg("OSACelebration", 1)
+    serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
+    if serverDay <= endDay:
+        #GameWorld.DebugLog("开服庆典活动中! serverDay=%s,endDay=%s" % (serverDay, endDay))
+        return 1
+    if serverDay == (endDay + 1):
+        #GameWorld.DebugLog("开服庆典结算中! serverDay=%s,endDay=%s" % (serverDay, endDay))
+        return 2
+    #GameWorld.DebugLog("开服庆典已结束! serverDay=%s,endDay=%s" % (serverDay, endDay))
+    return 3
+
+def AddOSACelebrationPoint(curPlayer, addPoint):
+    ## 庆典累计积分
+    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
+    updPoint = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationPoint, curPoint + addPoint)
+    GameWorld.DebugLog("增加开服庆典积分: addPoint=%s,curPoint=%s,updPoint=%s" % (addPoint, curPoint, updPoint))
+    SyncOSACelebrationInfo(curPlayer)
+    return
+
+def GetOSACelebrationPointAward(curPlayer, awardPoint):
+    ## 领取开服庆典累计积分阶段奖励
+    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
+    if curPoint < awardPoint:
+        GameWorld.DebugLog("累计开服庆典积分不足: curPoint=%s < %s" % (curPoint, awardPoint))
+        return
+    awardDict = IpyGameDataPY.GetFuncEvalCfg("OSACelebration", 2, {}) # {"累计积分":[[物品ID,个数], ...], ...}
+    pointKeyList = [int(p) for p in awardDict.keys()]
+    pointKeyList.sort()
+    if awardPoint not in pointKeyList:
+        GameWorld.DebugLog("不存在该开服庆典积分阶段奖励: awardPoint=%s not in %s" % (awardPoint, pointKeyList))
+        return
+    index = pointKeyList.index(awardPoint)
+    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationAward)
+    if awardState&pow(2, index):
+        GameWorld.DebugLog("该开服庆典积分阶段奖励已领取: awardPoint=%s,index=%s,awardState=%s" % (awardPoint, index, awardState))
+        return
+    updState = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationAward, awardState|pow(2, index))
+    itemList = awardDict[str(awardPoint)]
+    GameWorld.DebugLog("领取开服庆典积分阶段奖励: awardPoint=%s,index=%s,awardState=%s,updState=%s,itemList=%s" % (awardPoint, index, awardState, updState, itemList))
+    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["OSACelebration", False, {}])
+    SyncOSACelebrationInfo(curPlayer)
+    return
+
+def SyncOSACelebrationInfo(curPlayer):
+    clientPack = ChPyNetSendPack.tagSCOSACelebrationInfo()
+    clientPack.PointTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
+    clientPack.PointAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationAward)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    return

--
Gitblit v1.8.0