hxp
昨天 9d5ec7599f3abe0cebb76ce1df3c3b8c4e0aa51e
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -37,74 +37,55 @@
import ChItem
import GameLogic_Tianzi
import PlayerGoldInvest
import PlayerCrossRealmPK
import PlayerCrossChampionship
import PlayerCostRebate
import CrossActCTGBillboard
import CrossActAllRecharge
import PlayerActCollectWords
import PlayerActTotalRecharge
import PlayerActLianqi
import PlayerActGodGift
import PlayerActFamilyGCZ
import PlayerActFamilyCTGAssist
import PlayerActRechargeRebateGold
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
import PlayerActRechargePrize
import PlayerActGrowupBuy
import PlayerActTurntable
import PlayerActBuyOne
import PlayerSpringSale
import PlayerBossReborn
import PlayerWeekParty
import PlayerFeastWeekParty
import PlayerFeastLogin
import PlayerFeastWish
import PlayerActTask
import PlayerActYunshi
import PlayerActLunhuidian
import PlayerActBuyCountGift
import PlayerActLoginNew
import PlayerActLogin
import PlayerFlashGiftbag
import PlayerDailyGiftbag
import PlayerOfflineSupport
import PlayerLuckyCloudBuy
import PlayerLuckyTreasure
import PlayerTongTianLing
import PlayerFlashSale
import PlayerWishingWell
import CrossPlayerData
import PlayerTreasure
import PlayerZhanling
import PlayerLove
import IpyGameDataPY
import PlayerArena
import PyGameData
import OpenServerActivity
import PlayerXiangong
import PlayerBillboard
import PlayerViewCache
import GameFuncComm
import PlayerMail
import PlayerHero
import PlayerTree
import PlayerLLMJ
import DBDataMgr
import datetime
import time
## 原GameServer通知的
def GameServer_OnDay(index, tick): return
def GameServer_OnHour(index, tick): return
def GameServer_OnWeek(index, tick): return
def GameServer_OnMonth(index, tick): return
def GameServer_OnYear(index, tick): return
def DoLogic_CrossCenterOnDay(centerEventValue):
    '''收到跨服中心同步的onday事件,注意这里本服的触发跨服中心onday事件
    事件由跨服中心统一管理,跨服中心onday后,会广播同步给所有服务器,包含其他跨服服务器及游戏服
    由于是由跨服中心统一调度的,所以其他服务器可以各自处理各自跨服功能本服的跨服onday逻辑
    【注】常规处理可以无视功能所在跨服与游戏服的onday触发先后顺序,各自处理各自的逻辑即可
    如功能所在跨服管理功能的公共跨服数据onday,游戏服管理玩家自身的onday
    如果个别功能需要先处理公共数据再处理玩家自身数据的,则由功能自己管理,公共数据处理完毕后再同步给对应的游戏服
    '''
    GameWorld.Log("CrossCenterOnDay -> centerEventValue=%s" % centerEventValue)
    PlayerFamily.FamilyCrossCenterOnDay()
    # 其他跨服功能
    PlayerBillboard.OnDay(centerEventValue)
    return
def DoLogic_OnDay(tick):
    GameWorld.Log("MapServer -> OnDay!")
    #副本OnDay事件响应
    #FBLogic.OnDay(tick)
    
    OpenServerActivity.OnDay()
    #仙盟
    PlayerFamily.FamilyOnDay()
    PlayerArena.OnDay()
@@ -121,14 +102,20 @@
        PlayerOnDay(curPlayer)
        
    PlayerMail.OnDayEx()
    PlayerControl.RemoveTimeoutLeaveServerPlayerInfo(tick)
    PlayerBillboard.OnDay()
    PlayerViewCache.OnDay()
    return
def DoLogic_CrossCenterOnHour(centerEventValue):
    GameWorld.Log("CrossCenterOnHour -> centerEventValue=%s" % centerEventValue)
    PlayerFamily.FamilyCrossCenterOnHour()
    return
def DoLogic_OnHour(tick):
    GameWorld.Log("MapServer -> OnHour!")
    
    PlayerFamily.FamilyOnHour()
    #副本OnHour事件
    FBLogic.OnHour(time, tick)
    
@@ -218,11 +205,51 @@
    return
#--------------------------------------------------------
def PlayerOnCrossCenterEvent(curPlayer, centerEventValue=0, gmEvent=""):
    ## 跨服中心过天
    if not centerEventValue:
        centerEventValue = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CrossCenterEvent)
    playerEventValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnCrossEvent)
    if not playerEventValue:
        playerEventValue = centerEventValue
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnCrossEvent, centerEventValue)
    if playerEventValue == centerEventValue and not gmEvent:
        return
    centerEventTime = GameWorld.ChangeStrToDatetime("%s" % centerEventValue, ChConfig.TYPE_Time_Format_YmdH)
    playerEventTime = GameWorld.ChangeStrToDatetime("%s" % playerEventValue, ChConfig.TYPE_Time_Format_YmdH)
    center_Day = centerEventTime.day
    center_Month = centerEventTime.month
    center_Year = centerEventTime.year
    player_Day = playerEventTime.day
    player_Month = playerEventTime.month
    player_Year = playerEventTime.year
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnCrossEvent, centerEventValue)
    if (center_Day != player_Day or center_Month != player_Month or center_Year != player_Year or gmEvent == "GMOnDay"):
        PlayerCrossCenterOnDay(curPlayer, centerEventValue)
    return
def PlayerCrossCenterOnDay(curPlayer, centerEventValue):
    playerID = curPlayer.GetPlayerID()
    GameWorld.Log("PlayerCrossCenterOnDay! centerEventValue=%s" % (centerEventValue), playerID)
    PlayerFamily.PlayerCrossCenterOnDay(curPlayer)
    GameWorld.Log("PlayerOnDayCross OK!", playerID)
    return
def PlayerOnDay(curPlayer):
    #记录玩家字典值,待初始化后执行
    if not curPlayer.GetGameServerInitOK():
        GameServerRefresh.Set_PlayerGameServerInitOK_OnDay(curPlayer , 1)
        return
    #GameServer已废弃,不再验证
    #if not curPlayer.GetGameServerInitOK():
    #    GameServerRefresh.Set_PlayerGameServerInitOK_OnDay(curPlayer , 1)
    #    return
    
    ondayValue = __Get_Can_OnDay(curPlayer)
    if not ondayValue:
@@ -231,8 +258,11 @@
    playerID = curPlayer.GetPlayerID()
    GameWorld.Log("PlayerOnDay! ondayValue=%s" % (ondayValue), playerID)
    
    # 过天同步下时间、开服天
    ChPlayer.Sync_PyServerDataTimeToClient(curPlayer)
    ChPlayer.Sync_OpenServerDay(curPlayer)
    __DoPlayerOnDay(curPlayer, ShareDefine.Def_OnEventType)
    __DoPlayerOnDay(curPlayer, ShareDefine.Def_OnEventTypeEx)
    
    GameWorld.Log("PlayerOnDay OK!", playerID)
    return
@@ -243,65 +273,58 @@
        return
    
    # 常规过天
    if onEventType == ShareDefine.Def_OnEventType:
        #清空每日事件奖励
        curPlayer.SetDayProcessGameEventCount(0)
        #OnDay时清除每日签到的信息
        PlayerSignDay.SignDayOnDay(curPlayer)
        # 累计登陆礼包登陆次数刷新
        PlayerLoginDayAward.NotePlayerLoginDayCnt(curPlayer)
        #------------------------------------------------------------------------------
        PlayerCoin.OnDay(curPlayer)
        PlayerTree.PlayerOnDay(curPlayer)
        #投资
        PlayerGoldInvest.OnDay(curPlayer)
        #战令
        PlayerZhanling.OnDay(curPlayer)
        #寻宝
        PlayerTreasure.OnDay(curPlayer)
        PlayerGoldGift.OnDay(curPlayer)
        #转盘
        PlayerActTurntable.PlayerOnDay(curPlayer)
        #情缘
        PlayerLove.DoPlayerOnDay(curPlayer)
        #仙宫
        PlayerXiangong.PlayerOnDay(curPlayer)
        PlayerControl.PayCoinOnDay(curPlayer)
        ChPlayer.PlayerOnDay(curPlayer)
        PlayerActivity.OnDay(curPlayer)
        PlayerLLMJ.PlayerOnDay(curPlayer)
        FunctionNPCCommon.ShopItemOnDay(curPlayer)
    #if onEventType == ShareDefine.Def_OnEventType:
    GameFuncComm.DoFuncOpenLogic(curPlayer)
    #清空每日事件奖励
    curPlayer.SetDayProcessGameEventCount(0)
    #OnDay时清除每日签到的信息
    PlayerSignDay.SignDayOnDay(curPlayer)
    # 累计登陆礼包登陆次数刷新
    PlayerLoginDayAward.NotePlayerLoginDayCnt(curPlayer)
    #------------------------------------------------------------------------------
    PlayerCoin.OnDay(curPlayer)
    PlayerTree.PlayerOnDay(curPlayer)
    #投资
    PlayerGoldInvest.OnDay(curPlayer)
    #战令
    PlayerZhanling.OnDay(curPlayer)
    #寻宝
    PlayerTreasure.OnDay(curPlayer)
    PlayerGoldGift.OnDay(curPlayer)
    #转盘
    PlayerActTurntable.PlayerOnDay(curPlayer)
    #情缘
    PlayerLove.DoPlayerOnDay(curPlayer)
    #仙宫
    PlayerXiangong.PlayerOnDay(curPlayer)
    PlayerControl.PlayerOnDay(curPlayer)
    ChPlayer.PlayerOnDay(curPlayer)
    PlayerActivity.OnDay(curPlayer)
    PlayerLLMJ.PlayerOnDay(curPlayer)
    FunctionNPCCommon.ShopItemOnDay(curPlayer)
    OpenServerActivity.PlayerOnDay(curPlayer)
    # 特殊时间点X点过天
    elif onEventType == ShareDefine.Def_OnEventTypeEx:
        PlayerHero.PlayerOnDay(curPlayer)
        # 仙盟过天
        PlayerFamily.PlayerOnDay(curPlayer)
        # 重置物品每日使用次数
        ChItem.ResetItemUseCntToday(curPlayer)
        # 极品白拿
        PlayerFreeGoods.OnDay(curPlayer)
        #采集次数重置
        NPCCommon.PlayerOnDay(curPlayer)
        #跨服竞技场
        PlayerCrossRealmPK.DoPlayerOnDay(curPlayer)
        #跨服排位
        PlayerCrossChampionship.DoPlayerOnDay(curPlayer)
        #竞技场
        PlayerArena.OnDayEx(curPlayer)
        #特殊时间点过天的,一般是游戏功能,此时立即同步一次跨服玩家数据
        CrossPlayerData.SendMergePlayerDataNow(curPlayer)
    #elif onEventType == ShareDefine.Def_OnEventTypeEx:
    PlayerHero.PlayerOnDay(curPlayer)
    # 仙盟过天
    PlayerFamily.PlayerOnDay(curPlayer)
    # 重置物品每日使用次数
    ChItem.ResetItemUseCntToday(curPlayer)
    # 极品白拿
    PlayerFreeGoods.OnDay(curPlayer)
    #采集次数重置
    NPCCommon.PlayerOnDay(curPlayer)
    #竞技场
    PlayerArena.OnDayEx(curPlayer)
    # 以下为支持两种重置模式切换配置的
    FBCommon.FBOnDay(curPlayer, onEventType)
    #许愿池
    PlayerWishingWell.OnDay(curPlayer)
    #通天令
    PlayerTongTianLing.OnDay(curPlayer, onEventType)
    #任务活动
    PlayerActTask.OnDay(curPlayer)
    #登录活动
@@ -349,9 +372,10 @@
#  @remarks 函数详细说明.
def PlayerOnWeek(curPlayer):
    #记录玩家字典值,待初始化后执行
    if not curPlayer.GetGameServerInitOK():
        GameServerRefresh.Set_PlayerGameServerInitOK_OnWeek(curPlayer , 1)
        return
    #GameServer已废弃,不再验证
    #if not curPlayer.GetGameServerInitOK():
    #    GameServerRefresh.Set_PlayerGameServerInitOK_OnWeek(curPlayer , 1)
    #    return
    
    onWeekValue = __Get_Can_OnWeek(curPlayer)
    if not onWeekValue:
@@ -394,7 +418,6 @@
    elif onEventType == ShareDefine.Def_OnEventTypeEx:
        #竞技场
        PlayerArena.OnWeekEx(curPlayer)
        PlayerFamily.OnWeekEx(curPlayer)
        
    # 以下为支持两种重置模式切换配置的
    FBCommon.FBOnWeek(curPlayer, onEventType)
@@ -407,9 +430,10 @@
#  @remarks 函数详细说明.
def PlayerOnMonth(curPlayer):
    #记录玩家字典值,待初始化后执行
    if not curPlayer.GetGameServerInitOK():
        GameServerRefresh.Set_PlayerGameServerInitOK_OnMonth(curPlayer , 1)
        return
    #GameServer已废弃,不再验证
    #if not curPlayer.GetGameServerInitOK():
    #    GameServerRefresh.Set_PlayerGameServerInitOK_OnMonth(curPlayer , 1)
    #    return
    
    onMonthValue = __Get_Can_OnMonth(curPlayer)
    if not onMonthValue:
@@ -447,9 +471,10 @@
#  @remarks 函数详细说明.
def PlayerOnYear(curPlayer):
    #记录玩家字典值,待初始化后执行
    if not curPlayer.GetGameServerInitOK():
        GameServerRefresh.Set_PlayerGameServerInitOK_OnYear(curPlayer , 1)
        return
    #GameServer已废弃,不再验证
    #if not curPlayer.GetGameServerInitOK():
    #    GameServerRefresh.Set_PlayerGameServerInitOK_OnYear(curPlayer , 1)
    #    return
    
    curPlayerID = curPlayer.GetPlayerID()
    
@@ -471,9 +496,10 @@
#  @remarks 函数详细说明.
def PlayerOnHour(curPlayer):
    #记录玩家字典值,待初始化后执行
    if not curPlayer.GetGameServerInitOK():
        GameServerRefresh.Set_PlayerGameServerInitOK_OnHour(curPlayer , 1)
        return
    #GameServer已废弃,不再验证
    #if not curPlayer.GetGameServerInitOK():
    #    GameServerRefresh.Set_PlayerGameServerInitOK_OnHour(curPlayer , 1)
    #    return
    
    curPlayerID = curPlayer.GetPlayerID()
    
@@ -684,6 +710,9 @@
    #OnYear事件
    if __Get_Can_OnYear(curPlayer):
        PlayerOnYear(curPlayer)
    # 跨服事件检查
    PlayerOnCrossCenterEvent(curPlayer)
    return
@@ -853,111 +882,8 @@
                PlayerControl.SetCoupleInfo(playerID, coupleInfo)
            return
        
        if key.startswith(ShareDefine.Def_Notify_WorldKey_OperationActionInfo[:-2]):
            keyHead = ShareDefine.Def_Notify_WorldKey_OperationActionInfo[:-2]
            actionName = key[len(keyHead):]
            actInfo = eval(msgValue)
            actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
            if actionName in ShareDefine.MultiActNumOperationActNameList:
                if not actNum:
                    GameWorld.ErrLog('MultiActNumOperation can not found actNum. actionName=%s,msg = %s' % (actionName, msg))
                    return
                if actionName not in PyGameData.g_operationActionDict:
                    PyGameData.g_operationActionDict[actionName] = {}
                PyGameData.g_operationActionDict[actionName][actNum] = actInfo
            else:
                PyGameData.g_operationActionDict[actionName] = actInfo
            if actionName == ShareDefine.OperationActionName_ExpRate:
                PlayerControl.RefreshOperationAction_ExpRate()
            elif actionName == ShareDefine.OperationActionName_CostRebate:
                PlayerCostRebate.RefreshCostRebateActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_TotalRecharge:
                PlayerActTotalRecharge.RefreshTotalRechargeActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_GodGift:
                PlayerActGodGift.RefreshGodGiftActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_ManyDayRecharge:
                PlayerActManyDayRecharge.RefreshManyDayRechargeActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_SingleRecharge:
                PlayerActSingleRecharge.RefreshSingleRechargeActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_Turntable:
                PlayerActTurntable.RefreshTurntableActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_SpringSale:
                PlayerSpringSale.RefreshSpringSaleActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_BossReborn:
                PlayerBossReborn.RefreshOperationAction_BossReborn()
            elif actionName == ShareDefine.OperationActionName_FlashGiftbag:
                PlayerFlashGiftbag.RefreshFlashGiftbagActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_DailyGiftbag:
                PlayerDailyGiftbag.RefreshDailyGiftbagActionInfo()
            elif actionName == ShareDefine.OperationActionName_BuyOne:
                PlayerActBuyOne.RefreshBuyOneActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_FamilyCTGAssist:
                PlayerActFamilyCTGAssist.RefreshFamilyCTGAssistActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_FlashSale:
                PlayerFlashSale.RefreshflashSaleActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_WishingWell:
                PlayerWishingWell.RefreshWishingWellAction()
            elif actionName == ShareDefine.OperationActionName_CollectWords:
                PlayerActCollectWords.RefreshActCollectWordsInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_WeekParty:
                PlayerWeekParty.RefreshOperationAction_WeekParty()
            elif actionName == ShareDefine.OperationActionName_BuyCountGift:
                PlayerActBuyCountGift.RefreshBuyCountGiftActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_ActTask:
                PlayerActTask.RefreshActTaskActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_Yunshi:
                PlayerActYunshi.RefreshActYunshiActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_Lunhuidian:
                PlayerActLunhuidian.RefreshActLunhuidianActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_LoginAward:
                PlayerActLogin.RefreshOperationAction_LoginAward()
            elif actionName == ShareDefine.OperationActionName_ActLoginNew:
                PlayerActLoginNew.RefreshActLoginActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_FeastLogin:
                PlayerFeastLogin.RefreshFeastLoginActionInfo()
            elif actionName == ShareDefine.OperationActionName_FeastWish:
                PlayerFeastWish.RefreshFeastWishActionInfo()
            elif actionName == ShareDefine.OperationActionName_FeastWeekParty:
                PlayerFeastWeekParty.RefreshOperationAction_FeastWeekParty()
            elif actionName == ShareDefine.OperationActionName_LuckyTreasure:
                PlayerLuckyTreasure.RefreshLuckyTreasureAction()
            elif actionName == ShareDefine.OperationActionName_RechargePrize:
                PlayerActRechargePrize.RefreshRechargePrizeActionInfo()
            elif actionName == ShareDefine.OperationActionName_GrowupBuy:
                PlayerActGrowupBuy.RefreshGrowupBuyActionInfo()
            elif actionName == ShareDefine.OperationActionName_RechargeRebateGold:
                PlayerActRechargeRebateGold.RefreshRechargeRebateGoldActionInfo()
        if key.startswith(ShareDefine.Def_Notify_WorldKey_OperationActionInfo[:-2]):
            # 运营活动改为通过 GameWorldAction.OnMapOperationActionRefresh 触发刷新
            return
        
        if key.startswith(ShareDefine.Def_Notify_WorldKey_CrossActInfo[:-2]):
@@ -972,38 +898,10 @@
                #GameWorld.DebugLog("跨服服务器地图,不处理")
                return
            
            if actionName == ShareDefine.CrossActName_CTGBillboard:
                CrossActCTGBillboard.RefreshCrossActCTGBillboardInfo()
            elif actionName == ShareDefine.CrossActName_AllRecharge:
                CrossActAllRecharge.RefreshCrossActAllRechargeInfo()
            elif actionName == ShareDefine.CrossActName_Lianqi:
                PlayerActLianqi.RefreshCrossActLianqiInfo()
            elif actionName == ShareDefine.CrossActName_FamilyGCZ:
                PlayerActFamilyGCZ.RefreshActFamilyGCZInfo()
            return
        
        if key == ShareDefine.Def_Notify_WorldKey_CrossZoneName:
            PyGameData.g_crossZoneName = msgValue
            return
        if key == ShareDefine.Def_Notify_WorldKey_CrossServerTime:
            PyGameData.g_crossServerTimeInfo = eval(msgValue)
            playerManager = GameWorld.GetPlayerManager()
            for index in xrange(playerManager.GetPlayerCount()):
                curPlayer = playerManager.GetPlayerByIndex(index)
                if not GameWorld.IsNormalPlayer(curPlayer):
                    continue
                ChPlayer.Sync_PyServerDataTimeToClient(curPlayer)
            return
        # 幸运云购
        if key == ShareDefine.Def_Notify_WorldKey_LuckyCloudBuyInfo:
            PyGameData.g_luckyCloudBuyInfo = eval(msgValue)
            PlayerLuckyCloudBuy.OnLuckyCloudBuyChange()
            return
        
        if msgValue.isdigit():
@@ -1032,11 +930,6 @@
    # elif key == ShareDefine.Def_Notify_WorldKey_MapServerScriptReloadVersion:
    #    ReloadModule.DoMapServerScriptReload(value, tick)
    #===============================================================================================
    # 跨服PK
    elif key == ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID:
        PlayerCrossRealmPK.OnCrossRealmPKSeasonChange(value)
    #通用设置
    befValue = gameWorldMgr.GetGameWorldDictByKey(key)
    gameWorldMgr.SetGameWorldDict(key, value)