| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #---------------------------------------------------------------------  | 
| #  | 
| #---------------------------------------------------------------------  | 
| ##@package PlayerEventCounter  | 
| # Ê¼þÏìÓ¦  | 
| #  | 
| # @author eggxp  | 
| # @date 2010-3-31  | 
| # @version 1.7  | 
| #  | 
| # @change: "2013-03-13 17:00" wdb É¾³ý·â°ü  | 
| # @change: "2013-12-06 15:00" hxp »Ö¸´Í¨Öª¿ª·þÌìÊý·â°ü  | 
| # @change: "2013-12-16 20:40" hxp ÆÁ±ÎÖÜË«±¶¾Ñ鼯Ëã  | 
| # @change: "2014-04-26 19:30" hxp Ôö¼ÓÁìµØÕ½  | 
| # @change: "2014-05-07 14:00" hxp »Ö¸´¹úÍõÕ½  | 
| # @change: "2014-12-01 12:30" hxp ºÏ·þÌìÊý¸üм°Í¬²½  | 
| # @change: "2014-12-03 14:30" hxp ºÏ·þ»î¶¯¹ýÌì  | 
| #---------------------------------------------------------------------  | 
| #"""Version = 2014-12-03 14:30"""  | 
| #---------------------------------------------------------------------  | 
| import GameWorld  | 
| import datetime  | 
| import PlayerFamily  | 
| import PlayerDBGSEvent  | 
| import PlayerViewCache  | 
| import PlayerFBHelpBattle  | 
| import PlayerFairyDomain  | 
| import ChPyNetSendPack  | 
| import GameWorldArena  | 
| import NetPackCommon  | 
| import PlayerDuJie  | 
| import PlayerCharm  | 
| import CrossBattlefield  | 
| import CrossChampionship  | 
| import CrossYaomoBoss  | 
| #---------------------------------------------------------------------  | 
|   | 
| #---------------------------------------------------------------------  | 
| ## ´¦ÀíÍæ¼ÒÿСʱÏìÓ¦  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def DoLogic_GameServer_OnHour(tick):  | 
|     #´¦ÀíÕâ¸öСʱ·¢³öµÄÓʼþ  | 
|     #GameWorld.GetMailManager().ProcessAllMail()  | 
|     PlayerFairyDomain.OnHour()  | 
|     return  | 
|   | 
| ## ´¦ÀíÍæ¼ÒÿÈÕÏìÓ¦  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def DoLogic_GameServer_OnDay(tick):  | 
|       | 
|     #É趨·þÎñÆ÷µ±Ç°Ììʼþ  | 
|     PlayerDBGSEvent.SetDBGSTrig_ServerTime(PlayerDBGSEvent.Def_ServerDay)  | 
|     #É趨ºÏ·þÌì  | 
|     isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer)  | 
|     if isMixServer:  | 
|         PlayerDBGSEvent.SetDBGSTrig_ServerTime(PlayerDBGSEvent.Def_MixServerDay)  | 
|       | 
|     #÷ÈÁ¦  | 
|     PlayerCharm.DoOnDay()  | 
|     #¼Ò×å¸üР | 
|     PlayerFamily.FamilyOnDay(tick)  | 
|     #¿ç·þÅÅλ  | 
|     CrossChampionship.DoOnDay()  | 
|     #¿ç·þÑýħboss  | 
|     CrossYaomoBoss.DoOnDay()  | 
|       | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|     for i in xrange(playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(i)  | 
|         if curPlayer == None or not curPlayer.GetInitOK():  | 
|             continue  | 
|           | 
|         PlayerOnDay(curPlayer)  | 
|       | 
|     #ɾ³ýËùÓеÄÈÎÎñ·¢²¼  | 
|     missionPubManager = GameWorld.GetGameWorld().GetDBMissionPubManager()  | 
|     missionPubManager.Clear()  | 
|     return  | 
|   | 
| def DoLogic_GameServer_OnDayEx(tick):  | 
|     #ÏÉÃË  | 
|     PlayerFamily.FamilyOnDayEx(tick)  | 
|     #¶É½ÙOnDay  | 
|     PlayerDuJie.OnDayEx()  | 
|     #¸±±¾ÖúÕ½  | 
|     PlayerFBHelpBattle.HelpBattleOnDay()  | 
|     #Íæ¼Ò»º´æ  | 
|     PlayerViewCache.DoOnDayEx()  | 
|     #çÎç¿OnDay  | 
|     PlayerFairyDomain.OnDayEx()  | 
|     #¾º¼¼³¡  | 
|     GameWorldArena.OnDayEx()  | 
|     #¿ç·þÕ½³¡  | 
|     CrossBattlefield.DoOnDayEx()  | 
|     #¿ç·þÅÅλ  | 
|     CrossChampionship.DoOnDayEx()  | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|     for i in xrange(playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(i)  | 
|         if curPlayer == None or not curPlayer.GetInitOK():  | 
|             continue  | 
|           | 
|         PlayerOnDayEx(curPlayer)  | 
|           | 
|     return  | 
|   | 
| ## ´¦ÀíÍæ¼ÒÿÖÜÏìÓ¦  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def DoLogic_GameServer_OnWeek(tick):   | 
|          | 
|     #É趨·þÎñÆ÷µ±Ç°ÖÜʼþ  | 
|     PlayerDBGSEvent.SetDBGSTrig_ServerTime(PlayerDBGSEvent.Def_ServerWeek)  | 
|       | 
|     #÷ÈÁ¦  | 
|     PlayerCharm.DoOnWeek()  | 
|     #¼Ò×å¸üР | 
|     PlayerFamily.FamilyOnWeek(tick)  | 
|       | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|       | 
|     for i in xrange(playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(i)  | 
|         if curPlayer == None or not curPlayer.GetInitOK():  | 
|             continue  | 
|           | 
|         PlayerOnWeek(curPlayer)  | 
|   | 
|     return  | 
|   | 
| def DoLogic_GameServer_OnWeekEx(tick):  | 
|       | 
|     # ¾º¼¼³¡  | 
|     GameWorldArena.OnWeekEx()  | 
|     # ¿ç·þÕ½³¡  | 
|     CrossBattlefield.DoOnWeekEx()  | 
|       | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|     for i in xrange(playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(i)  | 
|         if curPlayer == None or not curPlayer.GetInitOK():  | 
|             continue  | 
|           | 
|         PlayerOnWeekEx(curPlayer)  | 
|           | 
|     return  | 
|   | 
| ## ´¦ÀíÍæ¼ÒÿÔÂÏìÓ¦  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def DoLogic_GameServer_OnMonth(tick):  | 
|       | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|       | 
|     for i in xrange(playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(i)  | 
|         if curPlayer == None or not curPlayer.GetInitOK():  | 
|             continue  | 
|           | 
|         PlayerOnMonth(curPlayer)  | 
|           | 
|     return  | 
|   | 
| def DoLogic_GameServer_OnMonthEx(tick):  | 
|       | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|       | 
|     for i in xrange(playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(i)  | 
|         if curPlayer == None or not curPlayer.GetInitOK():  | 
|             continue  | 
|           | 
|         PlayerOnMonthEx(curPlayer)  | 
|           | 
|     return  | 
|   | 
| ## ´¦ÀíÍæ¼ÒÿÄêÏìÓ¦  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def DoLogic_GameServer_OnYear(tick):  | 
|       | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|       | 
|     for i in xrange(playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(i)  | 
|         if curPlayer == None or curPlayer.GetID() == 0:  | 
|             continue  | 
|           | 
|         PlayerOnYear(curPlayer)  | 
|       | 
|     return  | 
| #--------------------------------------------------------  | 
| ## ´¥·¢Íæ¼ÒÿÈÕÏìÓ¦(²ÎÊý -> µ±Ç°Íæ¼Ò)  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def PlayerOnDay(curPlayer):  | 
|       | 
|     if GameWorld.IsCrossServer():  | 
|         return  | 
|       | 
|     #֪ͨ¿ª·þÌìÊý  | 
|     Sync_OpenServerDay(curPlayer)  | 
|       | 
|     GameWorld.Log("PlayerOnDay!", curPlayer.GetPlayerID())  | 
|     return  | 
|   | 
| def PlayerOnDayEx(curPlayer):  | 
|     GameWorld.Log("PlayerOnDayEx!", curPlayer.GetPlayerID())  | 
|       | 
|     return  | 
|   | 
| ## ´¥·¢Íæ¼ÒÿÖÜÏìÓ¦(²ÎÊý -> µ±Ç°Íæ¼Ò)  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def PlayerOnWeek(curPlayer):  | 
|     GameWorld.Log("PlayerOnWeek!", curPlayer.GetPlayerID())  | 
|       | 
|     #¼Ò×åÿÖÜÏìÓ¦  | 
|     PlayerFamily.OnWeek(curPlayer)  | 
|     return  | 
|   | 
| def PlayerOnWeekEx(curPlayer):  | 
|     GameWorld.Log("PlayerOnWeekEx!", curPlayer.GetPlayerID())  | 
|       | 
|     return  | 
|   | 
| ## ´¥·¢Íæ¼ÒÿÔÂÏìÓ¦(²ÎÊý -> µ±Ç°Íæ¼Ò)  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def PlayerOnMonth(curPlayer):  | 
|     GameWorld.Log("PlayerOnMonth!", curPlayer.GetPlayerID())  | 
|     return  | 
|   | 
| def PlayerOnMonthEx(curPlayer):  | 
|     GameWorld.Log("PlayerOnMonthEx!", curPlayer.GetPlayerID())  | 
|     return  | 
|   | 
| ## ´¥·¢Íæ¼ÒÿÄêÏìÓ¦(²ÎÊý -> µ±Ç°Íæ¼Ò)  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def PlayerOnYear(curPlayer):  | 
|     GameWorld.Log("PlayerOnYear!", curPlayer.GetPlayerID())  | 
|     return  | 
|   | 
| ## ¸üÐÂÍæ¼ÒÔÚÏßʱ¼ä(²ÎÊý -> µ±Ç°Íæ¼Ò)  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def UpdatePlayerLoginTime(curPlayer):  | 
|     lastLoginTimeStr = curPlayer.GetLogoffTime()  | 
|     lastLoginTimeStr = lastLoginTimeStr.strip()  | 
|     if lastLoginTimeStr == "" or lastLoginTimeStr == '0':  | 
|         #Íæ¼Ò³õ´ÎÉÏÏß, ´¥·¢ËùÓÐʼþ  | 
|         PlayerOnDay(curPlayer)  | 
|         PlayerOnWeek(curPlayer)  | 
|         PlayerOnMonth(curPlayer)  | 
|         PlayerOnYear(curPlayer)  | 
|         return  | 
|       | 
|     lastLoginTime = GameWorld.GetDateTimeByStr(lastLoginTimeStr)  | 
|     #»ñÈ¡Êý¾Ý  | 
|     curDateTime = datetime.datetime.today()  | 
|     dateTime_Day = curDateTime.day  | 
|     dateTime_Week = datetime.datetime.isocalendar(curDateTime)[1]  | 
|     dateTime_Month = curDateTime.month  | 
|     dateTime_Year = curDateTime.year  | 
|     #ÉϴεǽÊý¾Ý  | 
|     player_Day = lastLoginTime.day  | 
|     player_Week = datetime.datetime.isocalendar(lastLoginTime)[1]  | 
|     player_Month = lastLoginTime.month  | 
|     player_Year = lastLoginTime.year  | 
|     #-----------------------------------------------------------------------------------  | 
|     #OnDayʼþ  | 
|     if dateTime_Day != player_Day or dateTime_Month != player_Month or dateTime_Year != player_Year:  | 
|         PlayerOnDay(curPlayer)  | 
|       | 
|     #OnWeekʼþ  | 
|     #²»¿¼ÂǸôÄêÇé¿ö£¬Èç2009,12,31ÈÕÏÂÏß->2010,12,31ÈÕÉÏÏß(²»´¥·¢OnWeek)  | 
|     if dateTime_Week != player_Week :  | 
|         PlayerOnWeek(curPlayer)  | 
|   | 
|     #OnMonthʼþ  | 
|     if dateTime_Month != player_Month or dateTime_Year != player_Year:  | 
|         PlayerOnMonth(curPlayer)  | 
|       | 
|     #OnYearʼþ  | 
|     if dateTime_Year != player_Year:  | 
|         PlayerOnYear(curPlayer)  | 
|           | 
|     return  | 
| #--------------------------------------------------------  | 
|   | 
| ## Í¨Öª¿ª·þÌìÊý  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @return: None  | 
| def Sync_OpenServerDay(curPlayer):  | 
|     # ·þÎñÆ÷ʱ¼ä  | 
|     serverTime = GameWorld.GetServerTime()  | 
|     if not serverTime:  | 
|         return  | 
|     openDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)  | 
|     isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer)  | 
|     mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay)  | 
|     packData = ChPyNetSendPack.tagOpenServerDay()  | 
|     packData.Clear()  | 
|     packData.Day = openDay  | 
|     packData.IsMixServer = isMixServer  | 
|     packData.MixDay = mixServerDay  | 
|     packData.OpenWeekday = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday)  | 
|     packData.NowYear = serverTime.year  | 
|     packData.NowMonth = serverTime.month  | 
|     packData.NowDay = serverTime.day  | 
|     packData.NowHour = serverTime.hour  | 
|     packData.NowMinute = serverTime.minute  | 
|     packData.NowSecond = serverTime.second  | 
|     packData.NowMicSecond = serverTime.microsecond  | 
|     packData.WeekOfYear = GameWorld.GetWeekOfYear()  | 
|     NetPackCommon.SendFakePack(curPlayer, packData)  | 
|     return  | 
|   | 
|   | 
|      |