#!/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 PlayerMail import ShareDefine import GameFuncComm import IPY_GameWorld import IpyGameDataPY import PlayerTreasure import PlayerBillboard import ChPyNetSendPack import PlayerControl import NetPackCommon import ItemControler import ItemCommon import GameWorld import ChConfig import math # ¿ª·þ³å°ñÀàÐͶÔÓ¦¹¦ÄÜ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): 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