ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -18,144 +18,81 @@
import ReadChConfig
import ChConfig
import GameWorld
import EventShell
import FBLogic
import IPY_GameWorld
import ChPlayer
import GameLogInfo
import GameServerRefresh
import ShareDefine
import PlayerGameWallow
import Operate_PlayerBuyZhenQi
import PlayerSignDay
import PlayerCoin
import PlayerControl
import PlayerWorldAverageLv
import PlayerFamily
import PlayerFamilyZhenfa
import PlayerOnlinePrize
import NPCCustomRefresh
import PlayerLoginDayAward
import NPCCommon
import FunctionNPCCommon
import PlayerGoldGift
import PlayerActivity
import PlayerBindJadeWheel
import FBCommon
import PlayerSuccess
import PlayerFreeGoods
import PlayerMagicWeapon
import ChItem
import GameLogic_Tianzi
import PlayerGoldInvest
import PlayerNewGuyCard
import PlayerCrossRealmPK
import PlayerCrossChampionship
import PlayerCrossBattlefield
import PlayerPet
import BossHurtMng
import PlayerRecover
import GameLogic_FamilyParty
import PlayerFamilyRedPacket
import GameLogic_FamilyInvade
import GameLogic_ElderBattlefield
import GameLogic_AllFamilyBoss
import GameLogic_HorsePetBoss
import GameLogic_FamilyWar
import OpenServerCampaign
import PlayerCostRebate
import CrossActCTGBillboard
import CrossActAllRecharge
import PlayerActCollectWords
import PlayerActTotalRecharge
import PlayerActGarbageSorting
import PlayerActXianXiaMJ
import PlayerActGubao
import PlayerActHorsePetTrain
import PlayerActLianqi
import PlayerActGodGift
import PlayerActFamilyGCZ
import PlayerActFamilyCTGAssist
import PlayerActRechargeRebateGold
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
import PlayerActRechargePrize
import PlayerActGrowupBuy
import PlayerActTurntable
import PlayerActBossTrial
import PlayerActBuyOne
import PlayerSpringSale
import PlayerBossReborn
import PlayerWeekParty
import PlayerFeastWeekParty
import PlayerFeastTravel
import PlayerFeastLogin
import PlayerFeastWish
import PlayerActTask
import PlayerActYunshi
import PlayerActLunhuidian
import PlayerActBuyCountGift
import PlayerActLoginNew
import PlayerActLogin
import PlayerFlashGiftbag
import PlayerDailyGiftbag
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerActHorsePetFeast
import PlayerFeastRedPacket
import PlayerCrossYaomoBoss
import PlayerLuckyCloudBuy
import PlayerLuckyTreasure
import PlayerAuctionHouse
import PlayerTongTianLing
import PlayerRefineStove
import PlayerFlashSale
import PlayerOfflineSupport
import PlayerWishingWell
import PlayerFairyDomain
import CrossPlayerData
import PlayerTreasure
import PlayerZhanling
import PlayerVip
import PlayerLove
import PlayerDiceEx
import IpyGameDataPY
import FamilyRobBoss
import FBHelpBattle
import QuestManager
import PlayerAssist
import PlayerArena
import PyGameData
import PlayerTJG
import PlayerGuaji
import OpenServerActivity
import PlayerXiangong
import PlayerFuncTeam
import PlayerMineArea
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!")
    playerManager = GameWorld.GetPlayerManager()
    #处理所有玩家信件的onday事件, 把存在时间+1
    playerManager.ProcessAllPlayerMailOnDay()
    #清空每日日记记录信息
    GameLogInfo.ClearGameLogInfo()
    #副本OnDay事件响应
    FBLogic.OnDay(tick)
    #FBLogic.OnDay(tick)
    
    #删除所有的任务发布
    missionPubManager = GameWorld.GetGameWorld().GetDBMissionPubManager()
    missionPubManager.Clear()
    OpenServerActivity.OnDay()
    #仙盟
    PlayerFamily.FamilyOnDay()
    PlayerArena.OnDay()
    GameLogic_Tianzi.OnDay()
    
    PlayerOfflineSupport.OnDay()
    playerManager = GameWorld.GetPlayerManager()
    for i in xrange(playerManager.GetPlayerCount()):
        curPlayer = playerManager.GetPlayerByIndex(i)
        
@@ -163,21 +100,22 @@
            continue
        
        PlayerOnDay(curPlayer)
        PlayerOnDayEx(curPlayer)
    DoLogic_OnDayEx(tick)
    PlayerMail.OnDayEx()
    PlayerBillboard.OnDay()
    PlayerViewCache.OnDay()
    return
def DoLogic_OnDayEx(tick):
    GameWorld.Log("MapServer -> OnDayEx!")
def DoLogic_CrossCenterOnHour(centerEventValue):
    GameWorld.Log("CrossCenterOnHour -> centerEventValue=%s" % centerEventValue)
    
    PlayerMail.OnDayEx()
    PlayerControl.RemoveTimeoutLeaveServerPlayerInfo(tick)
    PlayerFamily.FamilyCrossCenterOnHour()
    return
def DoLogic_OnHour(tick):
    GameWorld.Log("MapServer -> OnHour!")
    
    PlayerFamily.FamilyOnHour()
    #副本OnHour事件
    FBLogic.OnHour(time, tick)
    
@@ -197,6 +135,8 @@
def DoLogic_OnWeek(tick):
    GameWorld.Log("MapServer -> OnWeek!")
    
    PlayerArena.OnWeek()
    playerManager = GameWorld.GetPlayerManager()
    for i in xrange(playerManager.GetPlayerCount()):
        curPlayer = playerManager.GetPlayerByIndex(i)
@@ -205,7 +145,6 @@
            continue
        
        PlayerOnWeek(curPlayer)
        PlayerOnWeekEx(curPlayer)
        
    #副本OnWeek事件响应
    FBLogic.OnWeek(tick)
@@ -222,7 +161,6 @@
            continue
        
        PlayerOnMonth(curPlayer)
        PlayerOnMonthEx(curPlayer)
        
    return
@@ -267,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:
@@ -280,27 +258,13 @@
    playerID = curPlayer.GetPlayerID()
    GameWorld.Log("PlayerOnDay! ondayValue=%s" % (ondayValue), playerID)
    
    # 过天同步下时间、开服天
    ChPlayer.Sync_PyServerDataTimeToClient(curPlayer)
    ChPlayer.Sync_OpenServerDay(curPlayer)
    __DoPlayerOnDay(curPlayer, ShareDefine.Def_OnEventType)
    
    GameWorld.Log("PlayerOnDay OK!", playerID)
    return
def PlayerOnDayEx(curPlayer):
    #记录玩家字典值,待初始化后执行
    if not curPlayer.GetGameServerInitOK():
        GameServerRefresh.Set_PlayerGameServerInitOK_OnDayEx(curPlayer , 1)
        return
    ondayValue = __Get_Can_OnDayEx(curPlayer)
    if not ondayValue:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, ondayValue)
    playerID = curPlayer.GetPlayerID()
    GameWorld.Log("PlayerOnDayEx! ondayValue=%s" % (ondayValue), playerID)
    __DoPlayerOnDay(curPlayer, ShareDefine.Def_OnEventTypeEx)
    GameWorld.Log("PlayerOnDayEx OK!", playerID)
    return
    
def __DoPlayerOnDay(curPlayer, onEventType):
@@ -309,141 +273,58 @@
        return
    
    # 常规过天
    if onEventType == ShareDefine.Def_OnEventType:
        #开服活动
        OpenServerCampaign.OnOpenServerCampaignDay(curPlayer)
        #清空每日事件奖励
        curPlayer.SetDayProcessGameEventCount(0)
        #重置宠物每天的训练次数
        PlayerPet.DoLogic_PetInfo_OnDay(curPlayer)
        PlayerGameWallow.RevertHealthGame_OnDay(curPlayer)
        PlayerOnlinePrize.ResetPrizeInfoOnDay(curPlayer)
        #OnDay时清除每日签到的信息
        PlayerSignDay.SignDayOnDay(curPlayer)
        # 累计登陆礼包登陆次数刷新
        PlayerLoginDayAward.NotePlayerLoginDayCnt(curPlayer)
        #------------------------------------------------------------------------------
        PlayerVip.VipOnDay(curPlayer)
        PlayerCoin.OnDay(curPlayer)
        #成就
        PlayerSuccess.SuccOnDay(curPlayer)
        # 新手卡
        PlayerNewGuyCard.NewGuyCardOnday(curPlayer)
        #投资
        PlayerGoldInvest.OnDay(curPlayer)
        #战令
        PlayerZhanling.OnDay(curPlayer)
        #寻宝
        PlayerTreasure.OnDay(curPlayer)
        #法宝
        PlayerMagicWeapon.OnDay(curPlayer)
        PlayerGoldGift.OnDay(curPlayer)
        #炼丹
        PlayerRefineStove.OnDay(curPlayer)
        #绑玉转盘
        PlayerBindJadeWheel.OnDay(curPlayer)
        #转盘
        PlayerActTurntable.PlayerOnDay(curPlayer)
        #情缘
        PlayerLove.DoPlayerOnDay(curPlayer)
        #仙宫
        PlayerXiangong.PlayerOnDay(curPlayer)
        PlayerControl.PayCoinOnDay(curPlayer)
        #玩法前瞻奖励
        gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
        if gameNoticeAwardState:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GameNoticeAwardState, 0)
            ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_GameNotice, 0)
        #每日分享奖励重置
        shareGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShareGameAwardState)
        if shareGameAwardState:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShareGameAwardState, 0)
            ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ShareGame, 0)
        #开服每日奖励
        awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OpenSererDailyAward)
        if awardState:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OpenSererDailyAward, 0)
            ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_OpenServerDailyAward, 0)
        #开服每日奖励
        awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeDayAward)
        if awardState:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeDayAward, 0)
            ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_RechargeDayAward, 0)
    #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:
        # 资源找回
        PlayerRecover.RecoverOnDay(curPlayer)
        #触发每日任务重置脚本
        EventShell.EventResponse_OnDay(curPlayer)
        #购买次数清空
        Operate_PlayerBuyZhenQi.PlayerOnDay(curPlayer)
        #我要太极过天
        PlayerDiceEx.OnDay(curPlayer)
        # 世界boss
        BossHurtMng.OnDay(curPlayer)
        # 仙盟过天
        PlayerFamily.PlayerOnDay(curPlayer)
        # 重置物品每日使用次数
        ChItem.ResetItemUseCntToday(curPlayer)
        # 极品白拿
        PlayerFreeGoods.OnDay(curPlayer)
        #采集次数重置
        NPCCommon.PlayerOnDay(curPlayer)
        #副本助战
        FBHelpBattle.DoPlayerOnDay(curPlayer)
        #跨服竞技场
        PlayerCrossRealmPK.DoPlayerOnDay(curPlayer)
        #跨服排位
        PlayerCrossChampionship.DoPlayerOnDay(curPlayer)
        #跨服战场
        PlayerCrossBattlefield.DoPlayerOnDay(curPlayer)
        #缥缈仙域
        PlayerFairyDomain.OnDay(curPlayer)
        #仙盟宴会
        GameLogic_FamilyParty.OnDayFamilyPartyPlayer(curPlayer)
        #竞技场
        PlayerArena.OnDayEx(curPlayer)
        #协助
        PlayerAssist.DoPlayerOnDay(curPlayer)
        #福地
        PlayerMineArea.PlayerOnDay(curPlayer)
        #挂机
        PlayerGuaji.PlayerOnDay(curPlayer)
        #特殊时间点过天的,一般是游戏功能,此时立即同步一次跨服玩家数据
        CrossPlayerData.SendMergePlayerDataNow(curPlayer)
    #PlayerTJG.TJGOnDay(curPlayer, onEventType)
    #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)
    #日常活动OnDay
    PlayerActivity.OnDay(curPlayer, onEventType)
    # 商店物品购买兑换OnDay
    FunctionNPCCommon.ShopItemOnDay(curPlayer, onEventType)
    # 仙盟红包OnDay
    PlayerFamilyRedPacket.RedPacketOnDay(curPlayer, onEventType)
    #许愿池
    PlayerWishingWell.OnDay(curPlayer)
    #通天令
    PlayerTongTianLing.OnDay(curPlayer, onEventType)
    #bossƾ֤
    PlayerActBossTrial.PlayerOnDay(curPlayer, onEventType)
    #任务活动
    PlayerActTask.OnDay(curPlayer)
    #登录活动
@@ -491,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:
@@ -503,26 +385,9 @@
    GameWorld.Log("PlayerOnWeek! onWeekValue=%s" % (onWeekValue), playerID)
    
    __DoPlayerOnWeek(curPlayer, ShareDefine.Def_OnEventType)
    GameWorld.Log("PlayerOnWeek OK!", playerID)
    return
def PlayerOnWeekEx(curPlayer):
    #记录玩家字典值,待初始化后执行
    if not curPlayer.GetGameServerInitOK():
        GameServerRefresh.Set_PlayerGameServerInitOK_OnWeekEx(curPlayer , 1)
        return
    onWeekValue = __Get_Can_OnWeekEx(curPlayer)
    if not onWeekValue:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, onWeekValue)
    playerID = curPlayer.GetPlayerID()
    GameWorld.Log("PlayerOnWeekEx! onWeekValue=%s" % (onWeekValue), playerID)
    __DoPlayerOnWeek(curPlayer, ShareDefine.Def_OnEventTypeEx)
    
    GameWorld.Log("PlayerOnWeekEx OK!", playerID)
    GameWorld.Log("PlayerOnWeek OK!", playerID)
    return
def __DoPlayerOnWeek(curPlayer, onEventType):
@@ -545,28 +410,17 @@
        
        #计算这一周的家族的活跃度
        CalcFamilyActiveValue(curPlayer)
        #成就Onweek
        PlayerSuccess.OnWeek(curPlayer)
        
        # 每周提示玩家提示vip等级加入贵宾俱乐部
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasVIPClubNote, 0)
        FunctionNPCCommon.ShopItemOnWeek(curPlayer)
        
    elif onEventType == ShareDefine.Def_OnEventTypeEx:
        #触发每周任务重置脚本
        EventShell.EventResponse_OnWeek(curPlayer)
        #竞技场
        PlayerArena.OnWeekEx(curPlayer)
        PlayerFamily.OnWeekEx(curPlayer)
        PlayerCrossBattlefield.DoPlayerOnWeek(curPlayer)
        
    # 以下为支持两种重置模式切换配置的
    FBCommon.FBOnWeek(curPlayer, onEventType)
    #日常活动OnWeek
    PlayerActivity.OnWeek(curPlayer, onEventType)
    # 商店物品购买兑换OnDay
    FunctionNPCCommon.ShopItemOnWeek(curPlayer, onEventType)
    return
#---------------------------------------------------------------------
@@ -576,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:
@@ -588,26 +443,9 @@
    GameWorld.Log("PlayerOnMonth! onMonthValue=%s" % (onMonthValue), playerID)
    
    __DoPlayerOnMonth(curPlayer, ShareDefine.Def_OnEventType)
    GameWorld.Log("PlayerOnMonth OK!", playerID)
    return
def PlayerOnMonthEx(curPlayer):
    #记录玩家字典值,待初始化后执行
    if not curPlayer.GetGameServerInitOK():
        GameServerRefresh.Set_PlayerGameServerInitOK_OnMonthEx(curPlayer , 1)
        return
    onMonthValue = __Get_Can_OnMonthEx(curPlayer)
    if not onMonthValue:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonthEx, onMonthValue)
    playerID = curPlayer.GetPlayerID()
    GameWorld.Log("PlayerOnMonthEx! onMonthValue=%s" % (onMonthValue), playerID)
    __DoPlayerOnMonth(curPlayer, ShareDefine.Def_OnEventTypeEx)
    
    GameWorld.Log("PlayerOnMonthEx OK!", playerID)
    GameWorld.Log("PlayerOnMonth OK!", playerID)
    return
def __DoPlayerOnMonth(curPlayer, onEventType):
@@ -624,8 +462,6 @@
        pass
        #OnMonthEx
        
    # 商店物品购买兑换OnMonth
    FunctionNPCCommon.ShopItemOnMonth(curPlayer, onEventType)
    return
#---------------------------------------------------------------------
@@ -635,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()
    
@@ -659,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()
    
@@ -670,9 +508,6 @@
        return
    
    GameWorld.Log("PlayerOnHour!" , curPlayerID)
    tick = GameWorld.GetGameWorld().GetTick()
    #PlayerVip.CalcVIPTimeByTick(curPlayer, tick)
    
    #记录
    curDateTime = GameWorld.GetCurrentTime()
@@ -683,12 +518,6 @@
    if curHour == 1:
        #从数据库中查询当前排行榜等级
        curPlayer.DataServer_GetBillboardLV()
    #触发每小时任务重置脚本
    EventShell.EventResponse_OnHour(curPlayer)
    #缥缈仙域
    PlayerFairyDomain.OnHour(curPlayer)
    return
    
#---------------------------------------------------------------------
@@ -859,28 +688,31 @@
        PlayerOnDay(curPlayer)
        
    #OnDayEx事件
    if __Get_Can_OnDayEx(curPlayer):
        PlayerOnDayEx(curPlayer)
    #if __Get_Can_OnDayEx(curPlayer):
    #    PlayerOnDayEx(curPlayer)
        
    #OnWeek事件
    if __Get_Can_OnWeek(curPlayer):
        PlayerOnWeek(curPlayer)
        
    #OnWeekEx事件
    if __Get_Can_OnWeekEx(curPlayer):
        PlayerOnWeekEx(curPlayer)
    #if __Get_Can_OnWeekEx(curPlayer):
    #    PlayerOnWeekEx(curPlayer)
        
    #OnMonth事件
    if __Get_Can_OnMonth(curPlayer):
        PlayerOnMonth(curPlayer)
        
    #OnMonthEx事件
    if __Get_Can_OnMonthEx(curPlayer):
        PlayerOnMonthEx(curPlayer)
    #if __Get_Can_OnMonthEx(curPlayer):
    #    PlayerOnMonthEx(curPlayer)
        
    #OnYear事件
    if __Get_Can_OnYear(curPlayer):
        PlayerOnYear(curPlayer)
    # 跨服事件检查
    PlayerOnCrossCenterEvent(curPlayer)
    return
@@ -925,49 +757,6 @@
        return dateTime_Day
    return 0
def __Get_Can_OnDayEx(curPlayer):
    '''判断可否凌晨X点过天
    @return: 0-不可; >0-可以, 且代表的是过天需记录的值
    '''
    curDateTime = GameWorld.GetCurrentTime()
    # 上次过天记录格式: 年月日, 如20171027
    lastOndayEx = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnDayEx)
    #GameWorld.DebugLog("__Get_Can_OnDayEx lastOndayEx=%s" % (lastOndayEx))
    if lastOndayEx:
        lastOndayEx_Year = lastOndayEx / 10000
        lastOndayEx_Month = lastOndayEx % 10000 / 100
        lastOndayEx_Day = lastOndayEx % 100
        #GameWorld.DebugLog("lastOndayEx_Year=%s,lastOndayEx_Month=%s,lastOndayEx_Day=%s" % (lastOndayEx_Year, lastOndayEx_Month, lastOndayEx_Day))
        # 上次过天的日期0点
        lastDatetime = datetime.datetime(lastOndayEx_Year, lastOndayEx_Month, lastOndayEx_Day, 0, 0, 0)
        passTime = curDateTime - lastDatetime
        passDays = passTime.days
        passSeconds = passTime.seconds
        # 如果时间差没有超过1天,代表还未过天
        if passDays == 0:
            #GameWorld.DebugLog("如果时间差没有超过1天,代表还未过天, passDays=%s" % passDays)
            return 0
        # 等于1天的, 时间差需 >= X时才可过天, 即 X * 3600 秒
        if passDays == 1 and passSeconds < ShareDefine.Def_OnEventHour * 3600:
            #GameWorld.DebugLog("等于1天的, 时间差需 >= X时才可过天, 即 X * 3600 秒, passSeconds=%s" % passSeconds)
            return 0
        #if passDays < 0:
        #    GameWorld.DebugLog("时间天差小于0,一般为异常情况,只有时间往回调才回出现!默认允许过天,passDays=%s" % passDays)
        # 大于1天的无论什么时间点都可以过天
    if curDateTime.hour < ShareDefine.Def_OnEventHour:
        curDateTime = curDateTime - datetime.timedelta(days=1)
        #GameWorld.Log("OnDayEx 特殊X点之前过天的,代表天差大于1天的时间过天,这时候的过天值需设置为昨天 %s" % curDateTime)
    dateTime_Day = curDateTime.day
    dateTime_Month = curDateTime.month
    dateTime_Year = curDateTime.year
    #GameWorld.DebugLog("可以过天")
    return dateTime_Year * 10000 + dateTime_Month * 100 + dateTime_Day
## 检查玩家是否可以OnWeek
#  @param curPlayer 当前玩家
#  @param curMission 当前任务
@@ -983,55 +772,6 @@
    if (dateTime_Week != player_Week):
        return dateTime_Week
    return 0
def __Get_Can_OnWeekEx(curPlayer):
    '''判断可否凌晨X点过周
    @return: 0-不可; >0-可以, 且代表的是过周需记录的值
    '''
    curDateTime = GameWorld.GetCurrentTime()
    isocalendar = datetime.datetime.isocalendar(curDateTime)
    dateTime_year, dateTime_week, dateTime_day = isocalendar
    # 上次过周记录格式: 年周, 如201752
    lastOnWeekEx = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnWeekEx)
    #GameWorld.DebugLog("__Get_Can_OnWeekEx lastOnWeekEx=%s,dateTime_year=%s,week=%s,day=%s"
    #                   % (lastOnWeekEx, dateTime_year, dateTime_week, dateTime_day))
    if lastOnWeekEx:
        lastOnWeekEx_Year = lastOnWeekEx / 100
        lastOnWeekEx_Week = lastOnWeekEx % 100
        # 本周已经过周过
        if dateTime_year == lastOnWeekEx_Year and dateTime_week == lastOnWeekEx_Week:
            #GameWorld.DebugLog("本周已经过周过")
            return 0
        # 当前天为每周第一天的时候,需判断周差为1时当前时间点是否超过5点
        if dateTime_day == 1:
            preWeekDateTime = curDateTime - datetime.timedelta(days=7) # 上一周的datetime(即周差为1)
            preWeek_year, preWeek_week, preWeek_day = datetime.datetime.isocalendar(preWeekDateTime)
            # 上次过周的刚好是周差1, 则需判断当前时间点是否超过X时
            if preWeek_year == lastOnWeekEx_Year and preWeek_week == lastOnWeekEx_Week:
                if curDateTime.hour < ShareDefine.Def_OnEventHour:
                    #GameWorld.DebugLog("本周第一天,未到达过周时间点, hour=%s" % curDateTime.hour)
                    return 0
            # 周差不为1的时候,则无论什么时间点均可过周
            else:
                #GameWorld.DebugLog("周差不为1的时候,则无论什么时间点均可过周, 可以过周")
                pass
        # 不是每周第一天的时候,则无论什么时间点均可过周
        else:
            #GameWorld.DebugLog("不是每周第一天的时候,则无论什么时间点均可过周, 可以过周")
            pass
    if dateTime_day == 1 and curDateTime.hour < ShareDefine.Def_OnEventHour:
        onWeekDateTime = curDateTime - datetime.timedelta(days=7) # 上一周的datetime(即周差为1)
        dateTime_year, dateTime_week, dateTime_day = datetime.datetime.isocalendar(onWeekDateTime)
        #GameWorld.Log("OnWeekEx 周一特殊X点之前过天的,代表周差大于1天的周一过周,这时候的过周值需设置为上周 %s" % onWeekDateTime)
    #GameWorld.DebugLog("可以过周")
    return dateTime_year * 100 + dateTime_week
## 检查玩家是否可以OnMonth
#  @param curPlayer 当前玩家
@@ -1049,56 +789,6 @@
    if (dateTime_Month != player_Month or dateTime_Year != player_Year):
        return dateTime_Month
    return 0
def __Get_Can_OnMonthEx(curPlayer):
    '''判断可否凌晨X点过月
    @return: 0-不可; >0-可以, 且代表的是过月需记录的值
    '''
    curDateTime = GameWorld.GetCurrentTime()
    dateTime_day = curDateTime.day
    dateTime_month = curDateTime.month
    dateTime_year = curDateTime.year
    # 上次过月记录格式: 年月, 如201712
    lastOnMonthEx = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnMonthEx)
    #GameWorld.DebugLog("__Get_Can_OnMonthEx lastOnMonthEx=%s,dateTime_year=%s,dateTime_month=%s"
    #                   % (lastOnMonthEx, dateTime_year, dateTime_month))
    if lastOnMonthEx:
        lastOnMonthEx_Year = lastOnMonthEx / 100
        lastOnMonthEx_Month = lastOnMonthEx % 100
        # 本月已经过月过
        if dateTime_year == lastOnMonthEx_Year and dateTime_month == lastOnMonthEx_Month:
            #GameWorld.DebugLog("本月已经过月过")
            return 0
        # 当前天为每月第一天的时候,需判断月差为1时当前时间点是否超过5点
        if dateTime_day == 1:
            preMonth_month = 12 if dateTime_month == 1 else dateTime_month - 1 # 上一月
            preMonth_year = dateTime_year if preMonth_month != 12 else dateTime_year - 1 # 上一月所属年
            # 上次过月的刚好是月差1, 则需判断当前时间点是否超过X时
            if preMonth_year == lastOnMonthEx_Year and preMonth_month == lastOnMonthEx_Month:
                if curDateTime.hour < ShareDefine.Def_OnEventHour:
                    #GameWorld.DebugLog("本月第一天,未到达过月时间点, hour=%s" % curDateTime.hour)
                    return 0
            # 月差不为1的时候,则无论什么时间点均可过月
            else:
                #GameWorld.DebugLog("月差不为1的时候,则无论什么时间点均可过月, 可以过月")
                pass
        # 不是每月第一天的时候,则无论什么时间点均可过月
        else:
            #GameWorld.DebugLog("不是每月第一天的时候,则无论什么时间点均可过月, 可以过月")
            pass
    if dateTime_day == 1 and curDateTime.hour < ShareDefine.Def_OnEventHour:
        dateTime_month = 12 if dateTime_month == 1 else dateTime_month - 1 # 上一月
        dateTime_year = dateTime_year if dateTime_month != 12 else dateTime_year - 1 # 上一月所属年
        #GameWorld.Log("OnMonthEx 月1号特殊X点之前过天的,代表月差大于1的月1号过月,这时候的过月值需设置为上月。%d%02d" % (dateTime_year, dateTime_month))
    #GameWorld.DebugLog("可以过月")
    return dateTime_year * 100 + dateTime_month
## 检查玩家是否可以OnYear
#  @param curPlayer 当前玩家
@@ -1178,11 +868,6 @@
            PyGameData.g_bossShuntLineState = eval(msgValue)
            return
        
        if key == ShareDefine.Def_Notify_WorldKey_FamilyKillHorsePetRobBossCnt:
            PyGameData.g_familyKillHorsePetRobBossCntDict = eval(msgValue)
            FamilyRobBoss.OnFamilyKillHorsePetRobBossCntChange(tick)
            return
        if key == ShareDefine.Def_Notify_WorldKey_FBEnterTimeLimiitMapID:
            PyGameData.FBEnterTimeLimiitMapID = eval(msgValue)
            return
@@ -1191,192 +876,14 @@
            PyGameData.FBOpenTimeRecord = eval(msgValue)
            return
        
        if key == ShareDefine.Def_Notify_WorldKey_VSFamilyInfo:
            PyGameData.VSFamilyInfo = eval(msgValue)
            return
        if key == ShareDefine.Def_Notify_WorldKey_FamilyPartyInfo:
            if GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_FamilyParty:
                PyGameData.g_familyPartyInfo = eval(msgValue)
            return
        if key == ShareDefine.Def_Notify_WorldKey_FamilyPartyAddFamilyActivity:
            mapID, familyID, addFamilyActivity = eval(msgValue)
            if GameWorld.GetMap().GetMapID() == mapID:
                GameLogic_FamilyParty.DoAddFamilyMemberFamilyActivity(familyID, addFamilyActivity)
            return
        if key == ShareDefine.Def_Notify_WorldKey_FamilyZhenfaInfo:
            PlayerFamilyZhenfa.GameServer_FamilyZhenfa(eval(msgValue))
            return
        if key == ShareDefine.Def_Notify_WorldKey_AssistBoss:
            assistData = eval(msgValue)
            if GameWorld.GetMap().GetMapID() == assistData[0]:
                PlayerAssist.GameServer_AssistBossMsg(assistData[1:])
            return
        if key == ShareDefine.Def_Notify_WorldKey_AddFamilyAuctionItem:
            mapID, familyAuctionItemDict = eval(msgValue)
            if GameWorld.GetMap().GetMapID() == mapID:
                PlayerAuctionHouse.DoAddFamilyAuctionItem(familyAuctionItemDict)
            return
        if key == ShareDefine.Def_Notify_WorldKey_AddSystemAuctionItem:
            mapID, sysAuctionItemList = eval(msgValue)
            if GameWorld.GetMap().GetMapID() == mapID:
                PlayerAuctionHouse.DoAddSystemAuctionItem(sysAuctionItemList)
            return
        if key == ShareDefine.Def_Notify_WorldKey_FairyDomainLimit:
            isAdd, limitList = eval(msgValue)
            if isAdd:
                PyGameData.g_fairyDomainLimit += limitList
            else:
                PyGameData.g_fairyDomainLimit = limitList
            return
        if key == ShareDefine.Def_Notify_WorldKey_CoupleInfo:
            syncCoupleInfo = eval(msgValue)
            for playerID, coupleInfo in syncCoupleInfo.items():
                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_GarbageSorting:
                PlayerActGarbageSorting.RefreshGarbageSortingActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_XianXiaMJ:
                PlayerActXianXiaMJ.RefreshXianXiaMJActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_Gubao:
                PlayerActGubao.RefreshGubaoActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_HorsePetTrain:
                PlayerActHorsePetTrain.RefreshHorsePetTrainActionInfo(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_BossTrial:
                PlayerActBossTrial.RefreshBossTrialActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_HorsePetFeast:
                PlayerActHorsePetFeast.RefreshOperationAction_HorsePetFeast(actNum)
            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_FairyCeremony:
                PlayerFairyCeremony.RefreshOperationAction_FairyCeremony()
            elif actionName == ShareDefine.OperationActionName_NewFairyCeremony:
                PlayerNewFairyCeremony.RefreshOperationAction_NewFairyCeremony()
            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_FeastTravel:
                PlayerFeastTravel.RefreshFeastTravelActionInfo()
            elif actionName == ShareDefine.OperationActionName_FeastWeekParty:
                PlayerFeastWeekParty.RefreshOperationAction_FeastWeekParty()
            elif actionName == ShareDefine.OperationActionName_FeastRedPacket:
                PlayerFeastRedPacket.RefreshOperationAction_FeastRedPacket()
            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]):
@@ -1391,63 +898,10 @@
                #GameWorld.DebugLog("跨服服务器地图,不处理")
                return
            
            if actionName == ShareDefine.CrossActName_CTGBillboard:
                CrossActCTGBillboard.RefreshCrossActCTGBillboardInfo()
            elif actionName == ShareDefine.CrossActName_AllRecharge:
                CrossActAllRecharge.RefreshCrossActAllRechargeInfo()
            elif actionName == ShareDefine.CrossActName_BossTrial:
                PlayerActBossTrial.RefreshCrossActBossTrialInfo()
            elif actionName == ShareDefine.CrossActName_XianXiaMJ:
                PlayerActXianXiaMJ.RefreshCrossActXianXiaMJInfo()
            elif actionName == ShareDefine.CrossActName_Gubao:
                PlayerActGubao.RefreshCrossActGubaoInfo()
            elif actionName == ShareDefine.CrossActName_HorsePetTrain:
                PlayerActHorsePetTrain.RefreshCrossActHorsePetTrainInfo()
            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 key == ShareDefine.Def_Notify_WorldKey_FuncTeamMemIDInfo:
            PlayerFuncTeam.OnFuncTeamMemIDRefresh(eval(msgValue))
            return
        if key == ShareDefine.Def_Notify_WorldKey_CrossBattlefieldCallTeamInfo:
            PyGameData.g_crossBattlefieldCallTeamInfo = eval(msgValue)
            return
        if key == ShareDefine.Def_Notify_WorldKey_CrossBattlefieldSysCallBuyInfo:
            PyGameData.g_crossBattlefieldSysCallBuyList = eval(msgValue)
            return
        
        if msgValue.isdigit():
@@ -1476,44 +930,6 @@
    # elif key == ShareDefine.Def_Notify_WorldKey_MapServerScriptReloadVersion:
    #    ReloadModule.DoMapServerScriptReload(value, tick)
    #===============================================================================================
    # 跨服PK
    elif key == ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID:
        PlayerCrossRealmPK.OnCrossRealmPKSeasonChange(value)
    # 守卫人皇
    elif key == ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyInvade:
        if gameWorldMgr.GetGameWorldDictByKey(key) != value:
            GameLogic_FamilyInvade.OnFamilyInvadeStateChange(value, tick)
    # 上古战场
    elif key == ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_ElderBattlefield:
        if gameWorldMgr.GetGameWorldDictByKey(key) != value:
            GameLogic_ElderBattlefield.OnElderBattlefieldStateChange(value, tick)
    # 多仙盟BOSS
    elif key in [ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyBoss1]:
        if gameWorldMgr.GetGameWorldDictByKey(key) != value:
            GameLogic_AllFamilyBoss.OnAllFamilyBossStateChange(value, tick)
    # 骑宠BOSS
    elif key == ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_HorsePetBoss:
        if gameWorldMgr.GetGameWorldDictByKey(key) != value:
            GameLogic_HorsePetBoss.OnHorsePetBossStateChange(value, tick)
    # 跨服妖魔boss
    elif key == ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % ShareDefine.CrossDailyActionID_YaomoBoss:
        if gameWorldMgr.GetGameWorldDictByKey(key) != value:
            PlayerCrossYaomoBoss.OnYaomoBossStateChange(value, tick)
    # 世界等级
    elif key == ShareDefine.Def_Notify_WorldKey_WorldAverageLv:
        if value and gameWorldMgr.GetGameWorldDictByKey(key) != value:
            gameWorldMgr.SetGameWorldDict(key, value) # 世界等级先更新再处理
            playerManager = GameWorld.GetPlayerManager()
            for index in xrange(playerManager.GetPlayerCount()):
                curPlayer = playerManager.GetPlayerByIndex(index)
                if not GameWorld.IsNormalPlayer(curPlayer):
                    continue
                PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
    #通用设置
    befValue = gameWorldMgr.GetGameWorldDictByKey(key)
    gameWorldMgr.SetGameWorldDict(key, value)
@@ -1521,17 +937,8 @@
    #-------在设置了字典值以后处理---------------------------------
    # 刷新世界boss
    if key.startswith('GameWorldBossReborn_'):
        NPCCustomRefresh.ProcessAllNPCRefresh(tick)
    # 王者仙盟
    elif key == ShareDefine.Def_Notify_WorldKey_ChampionFamilyID:
        GameLogic_FamilyWar.OnChampionFamilyIDChange()
    # 仙盟宴会
    elif key == ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyParty:
        if befValue != value:
            GameLogic_FamilyParty.OnFamilyPartyStateChange(value, tick)
        pass
#===============================================================================
#    ---修改为上述的 统一字典处理
#    if msg == ChConfig.Def_Notify_Key_PurTalk:
@@ -1564,12 +971,6 @@
    gameWorldMgr.SetGameWorldDict(ShareDefine.Def_Notify_WorldKey_ReloadJpegCaptcha, value)
    
    IpyGameDataPY.IPYData.IpyDataClear()
    #任务重读,需放在配置重读后面,暂时默认关闭,仅有需要重读任务时开启配置
    if IpyGameDataPY.GetFuncCfg("ReloadQuests", 1):
        tick = GameWorld.GetGameWorld().GetTick()
        QuestManager.ReloadQuests(tick)
        EventShell.DoReloadRefresh()
    return
#===============================================================================