#!/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 PlayerTreasure
|
import PlayerBillboard
|
import ChPyNetSendPack
|
import PlayerControl
|
import NetPackCommon
|
import ItemControler
|
import GameWorld
|
import ChConfig
|
import ObjPool
|
|
# ¿ª·þ³å°ñÀàÐͶÔÓ¦¹¦ÄÜ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("¿ª·þ³å°ñδ¿ªÊ¼»ò»î¶¯ÖеIJ»´¦Àí: 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
|
|
|
## ------------------------------------------- ¿ª·þÇìµä ---------------------------------------------
|
|
def OnPlayerLogin(curPlayer):
|
SyncOSACelebrationInfo(curPlayer)
|
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 = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCOSACelebrationInfo)
|
clientPack.PointTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
|
clientPack.PointAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationAward)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|