From de17a057f7a93fe8c9ccb04dd44023b4c8ed1161 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 26 五月 2025 18:35:49 +0800 Subject: [PATCH] 16 卡牌服务端(仙盟珍宝阁支持;仙盟行为数据查询通知;去除特殊时间5点过天、过周、过月逻辑,统一保留0点触发;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 229 +++----------------------------------------------------- 1 files changed, 14 insertions(+), 215 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py index 9d7d77f..f2043a7 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py @@ -156,6 +156,8 @@ #删除所有的任务发布 missionPubManager = GameWorld.GetGameWorld().GetDBMissionPubManager() missionPubManager.Clear() + #仙盟 + PlayerFamily.FamilyOnDay() for i in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(i) @@ -164,19 +166,11 @@ continue PlayerOnDay(curPlayer) - PlayerOnDayEx(curPlayer) - - DoLogic_OnDayEx(tick) - - PlayerBillboard.OnDay() - PlayerViewCache.OnDay() - return - -def DoLogic_OnDayEx(tick): - GameWorld.Log("MapServer -> OnDayEx!") - + PlayerMail.OnDayEx() PlayerControl.RemoveTimeoutLeaveServerPlayerInfo(tick) + PlayerBillboard.OnDay() + PlayerViewCache.OnDay() return def DoLogic_OnHour(tick): @@ -209,7 +203,6 @@ continue PlayerOnWeek(curPlayer) - PlayerOnWeekEx(curPlayer) #副本OnWeek事件响应 FBLogic.OnWeek(tick) @@ -226,7 +219,6 @@ continue PlayerOnMonth(curPlayer) - PlayerOnMonthEx(curPlayer) return @@ -285,26 +277,9 @@ GameWorld.Log("PlayerOnDay! ondayValue=%s" % (ondayValue), playerID) __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) + GameWorld.Log("PlayerOnDay OK!", playerID) return def __DoPlayerOnDay(curPlayer, onEventType): @@ -506,26 +481,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): @@ -591,26 +549,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): @@ -862,24 +803,24 @@ 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): @@ -928,49 +869,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 当前任务 @@ -986,55 +884,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 当前玩家 @@ -1052,56 +901,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 当前玩家 -- Gitblit v1.8.0