#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package GameWorldProcess # @todo: ÊÀ½çÂß¼­´¥·¢ # # @author: eggxp # @date 2010-5-10 # @version 6.3 # # @note: #--------------------------------------------------------------------- # @change: "2011-03-31 17:10" panwei ÐÂÔö¸ß¾«¶È¶¨Ê±Æ÷HighPrecisionProcess, 1ÃëC++µ÷ÓÃÒ»´Î # @change: "2011-07-22 11:00" panwei FindGameFbEventºÍGetGameFbEvent½Ó¿Ú±ä¸üÐÂÔölineID # @change: "2012-03-30 09:00" Alee ͳһʱ¼äµãͳ¼ÆÔÚÏßÈËÊý£¬±ãÓÚ¶à·þÎñͳ¼Æ # @change: "2013-12-06 15:00" hxp Ôö¼Ó֪ͨMapServer¿ª·þÌìÊý£¬¿ª·þ»î¶¯×´Ì¬¸üР# @change: "2013-12-10 11:21" xmnathan È¥µô¿Í»§¶ËÓû§»úÆ÷Êý¾ÝÿÈÕÊý¾Ý²É¼¯²Ù×÷ # @change: "2013-12-26 20:20" Alee ¼õÉÙÁ÷Ïò¼Ç¼ # @change: "2013-12-27 22:00" Alee ¹Ø±ÕÿÈÕ³äֵͳ¼Æ£¨¹¦ÄÜ£©£¬¹Ø±Õ¼Ò×åÕù°ÔÕ½ # @change: "2014-01-14 20:00" hxp Ôö¼Ó֪ͨMapServerÉÏÒ»³¡Õ½ÃËÕ½»ñʤսÃËid # @change: "2014-01-21 18:30" hxp Ôö¼ÓÄêÊÞÂß¼­ # @change: "2014-02-11 14:30" hxp Ôö¼ÓÏÊ»¨OnDay´¦ÀíÈë¿Ú # @change: "2014-02-27 12:00" hxp Ôö¼ÓÊÀ½çbossÂß¼­ # @change: "2014-04-26 19:30" hxp Ôö¼ÓÁìµØÕ½»î¶¯ # @change: "2014-06-21 15:20" hxp Ôö¼ÓÌØ»Ý»î¶¯ # @change: "2014-08-04 17:30" xmnathan ÌìÌÝÿÈÕ¸üР# @change: "2014-08-15 17:00" xmnathan ÐÞ¸ÄOnDayº¯ÊýÄÚµÄÖ´ÐÐ˳Ðò # @change: "2014-10-08 10:30" xmnathan add ¶¨Ê±ÇåÀí¹ýÆÚ²¹³¥ # @change: "2014-10-29 22:00" hxp MapServerInitOKÔö¼ÓÀ©Õ¹key״̬֪ͨ # @change: "2014-10-31 15:00" xmnathan MapServerInitOK֪ͨ±ù·âÍõ×ù¹Ú¾üÕ½ÃËÃËÖ÷Ö°Òµµ½µØÍ¼Ë¢Ð¶ÔÓ¦µñÏñNPC # @change: "2014-11-10 10:30" xmnathan PlayerBillboardͳһ¿½±´ÅÅÐаñ×òÈÕ°ñ # @change: "2014-11-12 21:00" hxp OnDayʱ֪ͨMapServerµ±Ç°¿ª·þÌìÊýʱ»úÌáǰµ½MapServerOnDay֮ǰ # @change: "2014-12-02 11:30" hxp Ôö¼ÓºÏ·þ״̬¼°ÌìÊý¼Ç¼; Ôö¼Ó¿ªµØÍ¼Í¬²½ # @change: "2014-12-03 14:30" hxp Ôö¼Óͬ²½ºÏ·þ»î¶¯×´Ì¬ # @change: "2014-12-03 18:00" hxp Ôö¼ÓºÏ·þÊ×´ÎÆô¶¯Êý¾Ý¼ÓÔØ´¦Àí # @change: "2014-12-08 11:00" hxp Ôö¼ÓºÏ·þʱµÄ¿ª·þÌìÊý¼Ç¼ # @change: "2014-12-22 15:30" hxp Ôö¼ÓÈ«·þµôÂÊ # @change: "2015-01-08 22:00" hxp µØÍ¼Æô¶¯ok֪ͨbossÐÅÏ¢ # @change: "2015-01-15 11:30" hxp Õû5·Öʼþ»ã±¨È«·þÔÚÏßÈËÊý; ¹Ø±ÕµØÍ¼ÈËÊý»ã±¨ # @change: "2015-01-22 15:00" hxp È¥³ý¸£Àû¶àͬ²½map # @change: "2015-01-24 23:30" hxp ¿ªÆôµØÍ¼Í¬²½¹¥³ÇÕ½»ñʤսÃË # @change: "2015-01-29 01:00" hxp ¿ªÆô·þÎñÆ÷ÖØÖÃÅÅÐаñ´¦Àí # @change: "2015-02-04 14:00" hxp ÉñÃØÉ̵괦Àí # @change: "2015-03-22 16:30" hxp Õ½Ã˼ÒÔ° # @change: "2015-05-07 15:00" ljd ºì°ü²ú³ö¿ØÖÆ # @change: "2015-06-05 17:00" hxp ÉÏÒ»´ÎPKÖÜÈüÌì֪ͨ # @change: "2015-06-25 14:30" hxp Ôö¼Ó123457È«·þµôÂÊÔö¼Óʼþ # @change: "2015-09-21 20:00" hxp ºÏ·þÊ×´ÎÆô¶¯Çå³ý¿ç·þ±¨ÃûÕ˺ÅÐÅÏ¢ # @change: "2015-10-25 17:00" hxp Ôö¼Ó¿ç·þPK # @change: "2015-11-13 17:30" hxp Ôö¼ÓÍõÕßÕù°Ô # @change: "2016-06-13 10:30" hxp ïÚ³µÐÞ¸ÄΪÏÞʱÍê³É # @change: "2016-07-27 20:00" Alee Ð޸Ĵò¿ªÎļþ³¬Ê±¹Ø±Õ # @change: "2016-08-05 19:00" hxp ½Å±¾ÈȸüÖ§³Ö # @change: "2016-08-29 23:30" hxp ºé»ÄÖ®Á¦ # @change: "2016-08-30 16:00" hxp ×Ô¶¨ÒåÔÚÏßͳ¼Æ # @change: "2016-10-26 17:00" hxp Ôö¼ÓÒ°ÍâµôÂä°ó¶¨µÈ¼¶¼ÆËã # @change: "2016-11-03 21:30" hxp ֪ͨսÃ˻µ±ÈÕ¿ªÆô״̬ # @change: "2017-05-24 16:00" hxp ¿ç·þ·þÎñÆ÷ÔÚÏßÍæ¼Òͳ¼Æ # @change: "2017-06-05 19:30" hxp ºÏ·þºóÊ×´ÎÆô¶¯·þÎñÆ÷ɾ³ý¹ýÆÚµÄͨÓÃÊý¾Ý # @change: "2017-06-22 15:00" hxp »î¶¯¿ØÖÆ´¥·¢ÆµÂʾ«È·µ½Õû·Ö # @change: "2017-07-01 15:30" hxp ÈËÊýͳ¼ÆÖ§³Ö»ì·þģʽ #--------------------------------------------------------------------- import GameWorld import datetime import ChConfig import PlayerTruck import PlayerEventCounter import PlayerControl import GMShell import PlayerDBGSEvent import PlayerFamily import GameLogInfo import GameWorldActionControl import PlayerBillboard #import PlayerExam import IPY_GameServer import GMCommon import time import DataRecordPack import ShareDefine import GameWorldAverageLv import PlayerDBOper import PlayerGeTui import GameWorldBoss import PlayerCompensation import ReadChConfig import EventReport #import ReloadModule import CrossRealmPK import CrossRealmMsg import CrossRealmPlayer import PlayerFBHelpBattle import PlayerFamilyRedPacket import IpyGameDataPY import PlayerFamilyParty import GameWorldFamilyWar import AuctionHouse import PlayerXMZZ import PlayerTeam import PyGameData import ChPlayer #--------------------------------------------------------------------- #--------------------------------------------------------------------- ## ´¥·¢Ã¿¸öСʱµÄʼþ # @param curTimeStr ʱ¼ä×Ö·û´® # @param tick µ±Ç°Ê±¼ä # @return None # @remarks ÔÚÿ´ÎOnGameWorldProcessÖУ¬Òò¶Ô±Èʱ¼ä³öÏÖ²îÒ죬˵Ã÷¸Ã´¥·¢ÒÔСʱΪʱ¼ä²îµÄʼþ # ·Ö±ðµ÷ÓÃ Íæ¼ÒµÄOnHourºÍGameWorldµÄOnHour£¬ # £¨¶îÍâµÄ£¬Ã¿Ð¡Ê±¿ÉÄܻῪÆô´æ´¢ÈËÎïÐÅÏ¢×ֵ䣬Çå¿Õ±¦ÎïµôÂ䣩 # ¸üе±Ç°Ê±¼ä def OnHour(curTimeStr, tick): GameWorld.Log("GameServer -> OnHour!") PlayerEventCounter.DoLogic_GameServer_OnHour(tick) GameWorld.GetGameWorld().OnHour(curTimeStr) #ÉèÖôæÈ¡Êý¾Ý¿âKey __SetWorldKey_SavePlayer(curTimeStr) #ÿСʱÇå¿Õ±¦ÎïµôÂä #__ClearTreasureDropCount() #¼Ç¼µ±Ç°Ê±¼ä GameLogInfo.Set_Server_Hour() PlayerFamily.FamilyOnHour() return ## ´¥·¢Ã¿ÈÕʼþ(²ÎÊý -> µ±Ç°Ê±¼ä) # @param curTimeStr ʱ¼ä×Ö·û´® # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def OnDay(curTimeStr, tick): GameWorld.Log("GameServer -> OnDay!") #ÅÅÐаñ¿½±´×òÈÕ°ñµ¥ PlayerBillboard.CopyBillboardOnDay() #¿ª·þ»î¶¯£¬·ÅÔÚÅÅÐаñ¿½±´×òÈÕ°ñ¸üкó´¦Àí PlayerEventCounter.DoLogic_GameServer_OnDay(tick) # ֪ͨ¿ª·þÌìÊý, ·ÅÔÚµØÍ¼OnDay֮ǰ´¦Àí, ²»È»µØÍ¼ÔÚOnDayʱÐèÒªÓõ½¿ª·þÌìʱ»áÈ¡µ½×òÌìµÄÖµ openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay) isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_IsMixServer, isMixServer) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_MixServerDay, mixServerDay) GameWorld.GetGameWorld().OnDay(curTimeStr) #¼Ç¼µ±Ç°Ê±¼ä GameLogInfo.Set_Server_Day() #¼Ç¼ÅÅÐаñÐÅÏ¢µ½oss PlayerBillboard.NoteOssBillboardInfoByDay() # ³äÖµ»î¶¯ÏûºÄÔª±¦ÅÅÐаñ¸üР#GameWorldActionHoliday.GoldActionRank_OnDay(tick) # ondayÖØÉèÈ«·þ³äÖµµãȯÊý£¬×ÜÔÚÏßÈËÊý # GameDataRecord.OnDayResetRecord() # ÏÉÃ˺ì°ü PlayerFamilyRedPacket.DoOnDay() # Íæ¼ÒµÈ¼¶¼Ç¼¸üРChPlayer.UpdataPlayerLVInfo() # ֪ͨ¿ª·þÌìÊý #openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) #GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay) #ÇåÀí¹ýÆÚ²¹³¥ PlayerCompensation.ClearUpTimeOutCompensation() PlayerGeTui.ClearFMTGeTuiLimit() import PlayerBourse PlayerBourse.OverTimeItemsDeal() # ÏÉÃËÁªÈü GameWorldFamilyWar.DoOnDay() return def OnDayEx(tick): GameWorld.Log("GameServer -> OnDayEx!") PlayerEventCounter.DoLogic_GameServer_OnDayEx(tick) __Set_Server_DayEx() #ÏÉħ֮Õù PlayerXMZZ.XMZZOndayEx() return ## ´¥·¢Ã¿ÖÜʼþ(²ÎÊý -> µ±Ç°Ê±¼ä) # @param curTimeStr ʱ¼ä×Ö·û´® # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def OnWeek(curTimeStr, tick): GameWorld.Log("GameServer -> OnWeek!") #¼Ç¼µ±Ç°Ê±¼ä-->½«¼Ç¼ʱ¼äÒÆµ½´¦ÀíÍæ¼ÒÖÜÏìӦ֮ǰ£¬ÒòÿÖÜÏìÓ¦ÐèÒª»ñÈ¡×îÐÂServer_Week GameLogInfo.Set_Server_Week() # ´¦ÀíÍæ¼ÒÿÖÜÏìÓ¦ PlayerEventCounter.DoLogic_GameServer_OnWeek(tick) GameWorld.GetGameWorld().OnWeek(curTimeStr) return def OnWeekEx(tick): GameWorld.Log("GameServer -> OnWeekEx!") PlayerEventCounter.DoLogic_GameServer_OnWeekEx(tick) __Set_Server_WeekEx() return ## ´¥·¢Ã¿ÔÂʼþ(²ÎÊý -> µ±Ç°Ê±¼ä) # @param curTimeStr ʱ¼ä×Ö·û´® # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def OnMonth(curTimeStr, tick): GameWorld.Log("GameServer -> OnMonth!") PlayerEventCounter.DoLogic_GameServer_OnMonth(tick) GameWorld.GetGameWorld().OnMonth(curTimeStr) #¼Ç¼µ±Ç°Ê±¼ä GameLogInfo.Set_Server_Month() return def OnMonthEx(tick): GameWorld.Log("GameServer -> OnMonthEx!") PlayerEventCounter.DoLogic_GameServer_OnMonthEx(tick) __Set_Server_MonthEx() return ## ´¥·¢Ã¿Äêʼþ(²ÎÊý -> µ±Ç°Ê±¼ä) # @param curTimeStr ʱ¼ä×Ö·û´® # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def OnYear(curTimeStr, tick): GameWorld.Log("GameServer -> OnYear!") PlayerEventCounter.DoLogic_GameServer_OnYear(tick) GameWorld.GetGameWorld().OnYear(curTimeStr) #¼Ç¼µ±Ç°Ê±¼ä GameLogInfo.Set_Server_Year() return #--------------------------------------------------------------------- ## ÉèÖÃÊÇ·ñ´ò¿ª´¢´æÍæ¼Ò×Öµä # @param curTimeStr ʱ¼ä # @return None # @remarks Èç¹ûÊÇ23µã£¬¾Í´ò¿ª´æ´¢Íæ¼Ò×ֵ䣬·ñÔò¾Í¹Ø±Õ¡£ # Õâ¸ö×ÖµäÖµÔÚDispose_MapServer_PlayerSave Àï»áÓõ½¡£ # Dispose_MapServer_PlayerSaveÕâ¸öÿ´ÎOnGameProcess¶¼»áµ÷Ó㬠# Ö»ÓÐ×ֵ俪ÁË£¬²Å´æ´¢Íæ¼ÒÊý¾Ý def __SetWorldKey_SavePlayer(curTimeStr): #curTimeStr -> 2009-03-05 16:00:00 type -> str #È¡³öµ±Ç°µÄСʱÊý try: timeStr = int(curTimeStr.split()[1].split(':')[0]) except BaseException , e: GameWorld.Log('###»ñÈ¡Íæ¼Ò´¢´æ×ÖµäÒì³£ = %s , %s'%(curTimeStr , e)) return gameWorld = GameWorld.GetGameWorld() #µ±Ç°Ê±¼äÊÇ23µã if timeStr == 23: if not gameWorld.GetDictByKey(ChConfig.Def_WorldKey_SavePlayer): #ÉèÖÿªÆô gameWorld.SetDict(ChConfig.Def_WorldKey_SavePlayer , 1) else: if gameWorld.GetDictByKey(ChConfig.Def_WorldKey_SavePlayer): #»¹Ô­×Öµä gameWorld.SetDict(ChConfig.Def_WorldKey_SavePlayer , 0) return #--------------------------------------------------------------------- ##¸ß¾«¶È¼ÆÊ±Æ÷, 1ÃëC++µ÷ÓÃÒ»´Î # @param tick µ±Ç°Ê±¼ä # @return None # @remarks def HighPrecisionProcess(tick): GameWorld.GetPsycoFunc(__Func_HighPrecisionProcess)(tick) return #--------------------------------------------------------------------- ##¸ß¾«¶È¼ÆÊ±Æ÷, 1ÃëC++µ÷ÓÃÒ»´Î # @param tick µ±Ç°Ê±¼ä # @return None # @remarks def __Func_HighPrecisionProcess(tick): if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit): return curTime = int(time.time()) #ÏÉÃËÑç»á´ðÌⶨʱÆ÷ PlayerFamilyParty.FamilyParty_Process(tick) # °ïÖ÷µ¯ÛÀʱÖÓµ÷Óà PlayerFamily.OnLeaderImpeachTick(tick) #¿ç·þÍæ¼Ò CrossRealmPlayer.OnCrossProcess(tick) #¿ç·þPKÆ¥Åä CrossRealmPK.OnPKMatchProcess(tick) GameWorldBoss.DoCheckWorldBossReborn(tick) GameWorldBoss.ProcessBossGeTui(tick) PlayerGeTui.ProcessNewGuyCallBackGeTui(tick) #×é¶Ó¸±±¾°æ±¾ PlayerTeam.DoTeamProcess(tick) #²Ù×÷Python±í PlayerDBOper.PyDBProccess(tick) #ÅÄÂôÐÐ AuctionHouse.OnAuctionItemTimeProcess(curTime, tick) #ÿÕû·ÖÖÓ´¦ÀíÒ»´Î curDateTime = datetime.datetime.today() curMinute = curDateTime.minute curSecond = curDateTime.second processMinute = curMinute + 1 # .minuteÊÇ0~59£¬ÕâÀïÊÖ¶¯+1 lastProcessMinute = GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_ProcessMinute) if processMinute != lastProcessMinute: GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_ProcessMinute, processMinute) ## ·þÎñÆ÷Æô¶¯Ê±£¬µÚÒ»´ÎÕû·Ö´¦Àí»áÑÓ³Ù 0~59Ãë #if lastProcessMinute != 0: GameWorldProcessOnMinute(curMinute, tick) # ÿÕû10Ãë´¦Àí if curSecond % 10 == 0: SendMapCommMapLinePlayerCount() return def SendMapCommMapLinePlayerCount(isForce=False): # ͬ²½³£¹æµØÍ¼Ïß·ÈËÊýÃ÷ϸµ½µØÍ¼·þÎñÆ÷£¬Ä¿Ç°ÓÃÓÚÇÐͼ·ÖÁ÷Óà if not isForce and not PyGameData.g_needSyncCommMapLinePlayerCount: return GameWorld.DebugLog("֪ͨ³£¹æµØÍ¼Íæ¼ÒÈËÊýÐÅÏ¢: isForce=%s,PyGameData.g_commMapLinePlayerCountDict=%s" % (isForce, PyGameData.g_commMapLinePlayerCountDict)) GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_CommMapLinePlayerCount, PyGameData.g_commMapLinePlayerCountDict) PyGameData.g_needSyncCommMapLinePlayerCount = False return def GameWorldProcessOnMinute(curMinute, tick): # ÿÕû·ÖÖÓ´¥·¢Ò»´Î #¼ì²é·þÎñÆ÷Õýʽ¿ª·þ DoCheckNewServerOpen(tick) #´¦ÀíÓÎÏ·ÊÀ½çÖеÄʱ¼äʼþ DisposeGameWorldEvenByTime(tick) GameWorldActionControl.Dispose_OperationActionState() GameWorldActionControl.Dispose_DailyActionState() GameWorldActionControl.Dispose_FBStateTime() #¿ç·þPK CrossRealmPK.OnMinuteProcess() #´¦ÀíÖØ¿ª·þÎñÆ÷ºó, »î¶¯¼ÌÐø¿ªÆôÂß¼­¸ù¾ÝÌìÊý #GameWorldActionControl.Dispose_Action_GoOn_ByDay(tick) #´¥·¢ÊÀ½çµÈ¼¶ GameWorldAverageLv.OpenWorldAverageLv() #µ¹¼ÆÊ±Àë¶Ó´¦Àí PlayerTeam.DoCountdownLeaveTeamLogic(tick) #¸±±¾ÖúÕ½ PlayerFBHelpBattle.OnMinuteProcess() #ºì°ü PlayerFamilyRedPacket.OnRedPacketMinuteProcess() #ÿ5·ÖÖÓ´¥·¢Ò»´ÎÏÉÃË×ÜÕ½Á¦¸üРif curMinute % 5 == 0: PlayerFamily.UpdFamilyTotalFightPower() return #--------------------------------------------------------------------- ## ÓÎÏ·ÊÀ½ç´¦Àí(²ÎÊý -> µ±Ç°Ê±¼ä) -< µ×²ã¶¨Ê±µ÷Óà # @param tick µ±Ç°Ê±¼ä # @return None # @remarks def OnGameWorldProcess(tick): GameWorld.GetPsycoFunc(__Func_OnGameWorldProcess)(tick) return ## ÓÎÏ·ÊÀ½ç´¦Àí(²ÎÊý -> µ±Ç°Ê±¼ä) -< µ×²ã¶¨Ê±µ÷Óà # @param tick µ±Ç°Ê±¼ä # @return None # @remarks def __Func_OnGameWorldProcess(tick): ##´¦ÀíÓÎÏ·ÊÀ½çÖеÄʱ¼äʼþ #DisposeGameWorldEvenByTime(tick) #´¦ÀíÓÎÏ·ÊÀ½çÖеÄïÚ³µÊ¼þ DisposeGameWorldEvenByTruck(tick) #´¦ÀíÊÀ½ç¹«¸æ DisposeGameWorldBroadcast(tick) #´¦ÀíÊÀ½ç»î¶¯ DisposeGameWorldGame(tick) #»Ø±¨Êý¾Ý¿âµ±Ç°ÔÚÏßÍæ¼ÒÊý DisposeGameActivePlayer(tick) #ͬ²½µØÍ¼·þÎñÆ÷ʱ¼ä Dispose_MapServer_Time(tick) #±£´æÍæ¼ÒÊý¾Ý Dispose_MapServer_PlayerSave(tick) #ˢеØÍ¼·þÎñÆ÷״̬ DisposeMapServerRunningState(tick) #»Ø±¨Êý¾Ý¿â·þÎñÆ÷״̬£¬¼Ç¼Êý¾Ý¿âÈÕ־ûÓÐÓô¦ #DisposeServerState(tick) #¶¨Ê±´æÈ¡Êý¾Ý¿âÖеÄGMÃüÁî Dispose_DataBase_GMShell(tick) ##´¦ÀíÖØ¿ª·þÎñÆ÷ºó, »î¶¯¼ÌÐø¿ªÆôÂß¼­¸ù¾ÝÌìÊý #GameWorldActionControl.Dispose_Action_GoOn_ByDay(tick) #¶¨Ê±ÏòRouteServer·¢ËÍÏûÏ¢ Dispose_SendMsg_RouteServer(tick) #¶¨Ê±¼ì²â¹Ø±Õ³¬Ê±Îļþ EventReport.OnTimeCloseScribeTxt() #ÊÀ½çboss¼ÆË㵱ǰÔÚÏßÈËÊý GameWorldBoss.CalcGameWorldBossOnlineCnt(tick) return ## ¶¨Ê±ÏòRouteServer·¢ËÍÐÅÏ¢ # @param tick µ±Ç°Ê±¼ä # @return None # @remarks SendHeartBeat()¶øÒÑ£¬¼ä¸ôÓÃGetTickByTypeÈ¡µÃ def Dispose_SendMsg_RouteServer(tick): gameWorld = GameWorld.GetGameWorld() lastTick = gameWorld.GetTickByType(ChConfig.TYPE_SendMsg_RouteServer) if lastTick == -1: #δ³õʼ»¯²»·¢ÐÅÏ¢ return if tick - lastTick < ChConfig.TYPE_Tick_Time[ChConfig.TYPE_SendMsg_RouteServer]: return gameWorld.SetTickByType(ChConfig.TYPE_SendMsg_RouteServer , tick) #·¢ËÍÏûÏ¢¸øRouteServer GameWorld.GetGameWorld().SendHeartBeat() return ## ¶¨Ê±´æÈ¡Êý¾Ý¿âÖеÄGMÃüÁî # @param tick µ±Ç°Ê±¼ä # @return None # @remarks ¼ä¸ôÅжϣ¬´ÓgameWorld.GetTickByTypeÀïÈ¡ # gameWorld.GetDBGMCommandListManager() À´²Ù×÷¾ßÌåµÄgmÃüÁî´Ódb»ñÈ¡£¬·¢Ë͸øgmShellÖ´ÐÐ def Dispose_DataBase_GMShell(tick): gameWorld = GameWorld.GetGameWorld() if tick - gameWorld.GetTickByType(ChConfig.TYPE_ReadDateBaseGM) < ChConfig.TYPE_Tick_Time[ChConfig.TYPE_ReadDateBaseGM]: return gameWorld.SetTickByType(ChConfig.TYPE_ReadDateBaseGM , tick) dBGMCommandListManager = gameWorld.GetDBGMCommandListManager() #֪ͨÊý¾Ý¿â×¼±¸»ñÈ¡ÃüÁî dBGMCommandListManager.DataServer_GMCommandReq() dBGMCommandListCount = dBGMCommandListManager.GetCount() if not dBGMCommandListCount: #Î޼Ǽ return #Ö´ÐÐGMÃüÁî for i in range(0 , dBGMCommandListCount): gmCommon = dBGMCommandListManager.GetAt(i) GMShell.DoLogic_DBGMCommon(gmCommon) #Çå¿ÕËùÓÐÊý¾Ý¿âµÄGMÇëÇó dBGMCommandListManager.Clear() return ## ͬ²½µØÍ¼·þÎñÆ÷ʱ¼ä # @param tick µ±Ç°Ê±¼ä # @return None # @remarks GetTickByTypeȡʱ¼ä¼ä¸ô£¬gameWorld.OnTimeSyncÀ´Ïò¸÷µØÍ¼·¢³öͬ²½ÐÅÏ¢ def Dispose_MapServer_Time(tick): gameWorld = GameWorld.GetGameWorld() if tick - gameWorld.GetTickByType(ChConfig.TYPE_SendTimeToMapServer) < ChConfig.TYPE_Tick_Time[ChConfig.TYPE_SendTimeToMapServer]: return gameWorld.SetTickByType(ChConfig.TYPE_SendTimeToMapServer , tick) #ͬ²½¼ÆËã»úʱ¼ä gameWorld.OnTimeSync(GameWorld.GetCurrentDataTimeStr()) return ## »Ø±¨Êý¾Ý¿â·þÎñÆ÷״̬ # @param tick µ±Ç°Ê±¼ä # @return None # @remarks gameWorld.DataServer_ServerStateReport() ÏòÊý¾Ý¿â»Ø±¨ # GetTickByType È¡¼ä¸ô def DisposeServerState(tick): gameWorld = GameWorld.GetGameWorld() if tick - gameWorld.GetTickByType(ChConfig.TYPE_SendServerState) < ChConfig.TYPE_Tick_Time[ChConfig.TYPE_SendServerState]: return gameWorld.SetTickByType(ChConfig.TYPE_SendServerState , tick) #»Ø±¨Êý¾Ý¿â·þÎñÆ÷״̬ gameWorld.DataServer_ServerStateReport() return ## ±£´æÍæ¼ÒÊý¾Ý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks GetDictByKey(ChConfig.Def_WorldKey_SavePlayer) Õâ¸ö×ÖµäֵΪ1£¬Ôò±£´æÍæ¼ÒÊý¾Ý # OnHourÀÉèÖÃ23µãʱ£¬½«´ËkeyÉèÖÆÎª¿ÉÒÔ±£´æ¡£curPlayer.MapServer_PlayerSave()·¢Ëͱ£´æÇëÇó def Dispose_MapServer_PlayerSave(tick): if GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_SavePlayer) != 1: #GameWorld.Log('±£´æ¿ª¹ØÎ´¿ªÆô') return if datetime.datetime.today().minute < 50: #GameWorld.Log('ûµ½50·ÖÖÓ') return playerManager = GameWorld.GetPlayerManager() curPlayerList = [] for i in range(playerManager.GetActivePlayerCount()): curPlayer = playerManager.GetActivePlayerAt(i) curPlayerList.append(curPlayer) #PythonÅÅÐò curPlayerList.sort(key = GetKey) for i in range(0, len(curPlayerList)): #³¬¹ý50¸öÍæ¼Ò,²»´¦Àí if i >= 50: break curPlayer = curPlayerList[i] curPlayer.MapServer_PlayerSave() #GameWorld.Log('---%s'%curPlayer.GetLV()) #ÉèÖÃΪÒѾ­´¦ÀíÍê±Ï GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_SavePlayer , 2) return ## PythonµÄsort×Öµä # @param curPlayer µ±Ç°Ê±¼ä # @return lv # @remarks º¯ÊýÏêϸ˵Ã÷. def GetKey(curPlayer): return curPlayer.GetLV() ## »Ø±¨µ±Ç°Êý¾Ý¿âÍæ¼ÒÔÚÏßÊýÁ¿ # @param tick µ±Ç°Ê±¼ä # @return None # ËùÓзþÎñÆ÷ÈËÊýÒª»Ø±¨Ò»´Î£¬ ÿ¸ömapÒ²Òª»Ø±¨Ò»´Î # gameWorld.GetTickByType(0 - n) È¡¼ä¸ô def DisposeGameActivePlayer(tick): gameWorld = GameWorld.GetGameWorld() curMinute = datetime.datetime.today().minute #ΪÁËÿ¸ö·þµÄÊä³öʱ¼äµãͳһһ¸ö·ÖÖӵ㣬±ãÓÚͳ¼Æ if curMinute % 5 != 0: return noteData = gameWorld.GetDictByKey("OnlineCntM") if noteData == curMinute: # ͬһ·ÖÖÓ²»¶à·¢ËÍ£¬´Ë´¦²»½¨ÒéÓÃCD´¦Àí£¬±ÜÃâÁ½CD³åÍ» return gameWorld.SetDict("OnlineCntM", curMinute) # È«·þÔÚÏßÈËÊýƽ̨Ã÷ϸ platformOLDict = {} # ƽ̨ÔÚÏßÈËÊý {ƽ̨:ÈËÊý, ...} #mapPlatformOLDict = {} # µØÍ¼Æ½Ì¨ÔÚÏßÈËÊý {mapID:{ƽ̨:ÈËÊý, ...}, ...} tjgOnlineCnt = 0 # ÍÑ»ú¹ÒÔÚÏßÍæ¼Ò playerManager = GameWorld.GetPlayerManager() activePlayerCount = playerManager.GetActivePlayerCount() for index in xrange(activePlayerCount): player = playerManager.GetActivePlayerAt(index) if player == None or not player.GetInitOK(): continue if PlayerControl.GetIsTJG(player): tjgOnlineCnt += 1 continue platform = GameWorld.GetPlayerPlatform(player) platformOLDict[platform] = platformOLDict.get(platform, 0) + 1 # ÀÛ¼ÆÆ½Ì¨ÔÚÏßÈËÊý # mapID = player.GetMapID() # mapOLDict = mapPlatformOLDict.get(mapID, {}) # mapOLDict[platform] = mapOLDict.get(platform, 0) + 1 # ÀۼƵØÍ¼Æ½Ì¨ÔÚÏßÈËÊý # mapPlatformOLDict[mapID] = mapOLDict #GameWorld.DebugLog("ƽ̨ÔÚÏßÈËÊý: %s" % platformOLDict) #GameWorld.DebugLog("µØÍ¼Æ½Ì¨ÔÚÏßÈËÊý: %s" % mapPlatformOLDict) # ¼Ç¼·þÎñÆ÷ÈËÊý #activePlayerCount = GameWorld.GetPlayerManager().GetActivePlayerCount() #DataRecordPack.DR_OnLinePlayerCount(activePlayerCount, platformOLDict, tjgOnlineCnt) #=========================================================================== for platform, playerCnt in platformOLDict.items(): DataRecordPack.DR_OnLinePlayerCount(playerCnt, platform, tjgOnlineCnt) # µ¥Æ½Ì¨ EventReport.WriteEvent_concurrency(playerCnt, 0, platform) # µ¥Æ½Ì¨ ´Ë´¦²»ÄÜ´«ÍÑ»ú¹ÒÍæ¼Ò×ÜÊý #=========================================================================== DataRecordPack.DR_OnLinePlayerCount(activePlayerCount, {}, tjgOnlineCnt) # ×ÜÔÚÏß #EventReport.WriteEvent_concurrency(activePlayerCount, tjgOnlineCnt) #ˢе±Ç°µØÍ¼·þÎñÆ÷ #=========================================================================== # custom_concurrencyMapList = ReadChConfig.GetEvalChConfig("EventReportMapID") # gameMapManager = GameWorld.GetGameWorld().GetGameMapManager() # gameMapManager.RefreshMapPlayer() # mapCnt = gameMapManager.GetCount() # for i in xrange(mapCnt): # curMap = gameMapManager.GetAt(i) # mapID = curMap.GetID() # if mapID not in custom_concurrencyMapList: # continue # #playerCnt = curMap.GetCount() # mapOLDict = mapPlatformOLDict.get(mapID, {}) # for platform, playerCnt in mapOLDict.items(): # EventReport.WriteEvent_custom_concurrency(platform, playerCnt, "MapID:%s" % mapID) #=========================================================================== # #ˢе±Ç°µØÍ¼·þÎñÆ÷ # gameMapManager = gameWorld.GetGameMapManager() # #ˢеØÍ¼·þÎñÆ÷ # gameMapManager.RefreshMapPlayer() # for i in range(gameMapManager.GetGameMapByIPCount()): # curIP = gameMapManager.GetGameMapIPAt(i) # curIndex = gameMapManager.GetGameMapIndexByIPAt(i) # # ¼Ç¼µØÍ¼·þÎñÆ÷ÈËÊý # DataRecordPack.DR_GameMapOnLinePlayerCnt(str(curIP), curIndex, gameMapManager.GetGameMapPlayerCountByIPAt(i)) return ## ´¦ÀíÊÀ½ç»î¶¯ # @param tick # @return None # @remarks # ¶Ôµ±Ç°ËùÓл½øÐÐÅжϣ¬Èç¹û¿ªÆô»ò¹Ø±ÕµÄʱ¼äÓÐÒì³££¬»òÕ߻¹ýÆÚ£¬Ôò×¼±¸É¾³ý # Èç¹ûÇ¡ºÃ´¦Ôڻʱ¼äÄÚ£¬Ôò¿ªÆôSetIsProcessing(True) ²¢Í¨ÖªÏàÓ¦map # ×îºó½«ÒªÉ¾³ýµÄ»î¶¯µÄɾ³ý¹¤×÷£¨É¾³ýǰҪÏȹرջ) ͳһ½»¸ø±ðµÄ ·½·¨À´´¦Àí def DisposeGameWorldGame(tick): eventManager = GameWorld.GetGameWorldEventManager() delList = [] todayDateTime = datetime.datetime.today() for index in range(eventManager.GetActiveEventCount()): event = eventManager.GetActiveEventByIndex(index) eventID = event.GetEventID() eventEndTime = GameWorld.GetDateTimeByStr(event.GetEndTime()) eventStartTime = GameWorld.GetDateTimeByStr(event.GetStartTime()) if not eventStartTime or not eventEndTime: delList.append(eventID) GameWorld.Log("###---»î¶¯ÉèÖÃʱ¼äÒì³£ , %s , %s , %s"%(eventID , eventStartTime , eventEndTime)) continue #먦ÆôµÄ»î¶¯ if not event.GetIsProcessing(): if todayDateTime > eventStartTime and todayDateTime < eventEndTime: #֪ͨµØÍ¼·þÎñÆ÷ event.SetIsProcessing(True) #»ñµÃÄÚÈÝ eventPar = event.GetPar() #֪ͨµØÍ¼·þÎñÆ÷µ±Ç°»î¶¯ __NotifyMapServerProcess(event , eventID , eventPar) #Êä³öϵͳÌáʾ sysMsg = GMCommon.GetGameServer_GM_GameOpen_Msg(eventID) if sysMsg != "": PlayerControl.WorldNotify(0, sysMsg) if todayDateTime > eventEndTime: delList.append(eventID) for delEventID in delList: DoLogic_ProcessEvent_Close(delEventID) #ɾ³ýʼþ eventManager.DelActiveEvent(delEventID) #Êä³öϵͳÌáʾ sysMsg = GMCommon.GetGameServer_GM_GameClose_Msg(delEventID) if sysMsg != "": PlayerControl.WorldNotify(0, sysMsg) return ## ½«»î¶¯Í¨Öª¸øµØÍ¼·þÎñÆ÷ # @param event »î¶¯ # @param eventID »î¶¯ID # @param eventPar ÄÚÈÝ # @return None # @remarks ͨ¹ý»î¶¯ID£¬·Ö±ðµ÷Óò»Í¬µÄ·½·¨À´´¦Àí»î¶¯Âß¼­£¬ÕâÀï¶¼ÊÇ¿ªÆô»î¶¯ # »î¶¯µÄ²ÎÊýParÕâÀïÓÐÓõ½ ¶øÇÒ²»Í¬µÄ»î¶¯£¬ParµÄº¬ÒåÒ²²»Í¬£¬¿ÉÄÜ»¹Òª½øÐнâÎö def __NotifyMapServerProcess(event , eventID , eventPar): #ÊÇ·ñÊÇÈ«·þË«±¶ÈÎÎñ if eventID == ChConfig.Def_GY_GM_Game_DoubleExp: __DisposeWorldExpEvent(True , int(eventPar)) #ÊÇ·ñÊÇÈ«·þµôÂÊÔö¼Ó elif eventID == ChConfig.Def_GY_GM_Game_DropRate: __DisposeWorldDropRateEvent(True , int(eventPar)) #ÊÇ·ñÊÇÈ«·þ¹«¸æÈÎÎñ elif eventID == ChConfig.Def_GY_GM_Game_Broadcast: interval , msg = __GetBroseCastStr(eventPar) __DisposeBroadcastEvent(True, msg, interval) else: #֪ͨËùÓеĵØÍ¼·þÎñÆ÷,Ö´ÐÐÈÎÎñÊý¾Ý½Å±¾ event.Notify_AllMapServerProcess() return #--------------------------------------------------------------------- ## ¹Ø±ÕÒѾ­¿ªÆôµÄ»î¶¯ # @param eventID »î¶¯ID # @return None # @remarks Ó뿪Æô»î¶¯Ïà·´£¬ÕâÀïÊǹرջ def DoLogic_ProcessEvent_Close(eventID): #ÊÇ·ñÊÇÈ«·þË«±¶ÈÎÎñ if eventID == ChConfig.Def_GY_GM_Game_DoubleExp: __DisposeWorldExpEvent(False) #ÊÇ·ñÊÇÈ«·þµôÂÊÔö¼Ó elif eventID == ChConfig.Def_GY_GM_Game_DropRate: __DisposeWorldDropRateEvent(False) #ÊÇ·ñÊÇÈ«·þ¹«¸æÈÎÎñ elif eventID == ChConfig.Def_GY_GM_Game_Broadcast: __DisposeBroadcastEvent(False) return #--------------------------------------------------------------------- ## ½âÎö¹Ø²¥×Ö·û´® # @param eventPar # @return interval , msg # @remarks ¹ã²¥»î¶¯Á¦µÄPar£¬Í¨¹ý´Ë·½·¨±»½âÎö³É¹ã²¥ÄÚÈݺ͹㲥¼ä¸ô def __GetBroseCastStr(eventPar): index = eventPar.find(":") interval = int(eventPar[:index]) msg = eventPar[index + 1:] return interval , msg ## ÉèÖò¢´¦ÀíÊÀ½ç¾­ÑéÂß¼­ # @param isOpen ÊÇ·ñÉèÖà # @param expRate ĬÈÏÍò·ÖÂÊ Õâ¸öÊÇδ¿ªÊ¼»î¶¯µÄĬÈϾ­Ñé±¶ÂÊ # @return None # @remarks ¿ªÆô»òɾ³ýÈ«¸±Ë«±¶»î¶¯£¬½ö½öÉèÖÃgameWorld.SetExpRate¾Í¿ÉÒÔÁË def __DisposeWorldExpEvent(isOpen , expRate = ChConfig.Def_MaxRateValue): gameWorld = GameWorld.GetGameWorld() #¿ªÆô»î¶¯ if isOpen: gameWorld.SetExpRate(expRate) else: gameWorld.SetExpRate(expRate) return ## ÉèÖò¢´¦ÀíÊÀ½çµôÂÊÂß¼­ # @param isOpen ÊÇ·ñÉèÖà # @param expRate ĬÈÏÍò·ÖÂÊ Õâ¸öÊÇδ¿ªÊ¼»î¶¯µÄĬÈϾ­Ñé±¶ÂÊ # @return None def __DisposeWorldDropRateEvent(isOpen, expRate=0): #¿ªÆô»î¶¯ if isOpen: worldDropRateAdd = max(0, expRate - ChConfig.Def_MaxRateValue) else: worldDropRateAdd = 0 # Èô¹Ø±Õ£¬Ä¬ÈÏΪ0 SetWorldDropRateAdd(worldDropRateAdd) return ## ÉèÖò¢Í¨ÖªÊÀ½çµôÂÊÔö¼Ó def SetWorldDropRateAdd(worldDropRateAdd): #=============================================================================================== # # ֪ͨÊÀ½çµôÂÊÌáÉý # worldDropRateKey = ShareDefine.Def_Notify_WorldKey_WorldDropRateAdd # GameWorld.GetGameWorld().SetDict(worldDropRateKey, worldDropRateAdd) # GameWorld.SendMapServerMsgEx(worldDropRateKey, worldDropRateAdd) #=============================================================================================== return #--------------------------------------------------------------------- ## ´¦ÀíµØÍ¼¾­Ñé×Ö·û´® # @param event »î¶¯ # @param mapIDList Ë;­ÑéµØÍ¼×Ö·û´® # @return None # @remarks ֪ͬµØÍ¼·þÎñÆ÷£¬ÓõÄÊÇ: µ«ÊÇ֪ͨµÄÄÚÈÝÊÇÊ²Ã´ÄØ£¿Ó¦¸ÃÊÇDZ¹æÔò¾ÍÖªµÀÁË¡£¡£¡£ # event.Notify_AllMapServerProcess() # ºÍ event.Notify_SelectMapServerProcess(vector) def __DisposeMapGiveExp(event , mapIDList): #×Ö·û´® '[]' -> [] mapIDList = eval(mapIDList) if not mapIDList: #֪ͨȫ·þÎñÆ÷Ö´ÐÐ event.Notify_AllMapServerProcess() return vector = IPY_GameServer.IntVector() for mapID in mapIDList: vector.push_back(int(mapID)) #ָ֪ͨ¶¨µØÍ¼·þÎñÆ÷ event.Notify_SelectMapServerProcess(vector) return #--------------------------------------------------------------------- ## ÉèÖÃÊÇ·ñ¿ªÆôÓÎÏ·ÊÀ½çÖеĹ«¸æÕâ¸ö»î¶¯ # @param isOpen ÊÇ·ñ¿ªÆô # @param broadcastMsg ¹ã²¥ÄÚÈÝ # @param broadcastTick ¹ã²¥¼ä¸ô # @return None # @remarks ÉèÖÿªÆô»ò¹Ø±ÕÓÎÏ·¹ã²¥µÄ»î¶¯µÄ¿ª¹Ø£¬¿ÉÒÔÉèÖù㲥ÄÚÈݺ͹㲥¼ä¸ô def __DisposeBroadcastEvent(isOpen , broadcastMsg = '' , broadcastTick = 0): gameWorld = GameWorld.GetGameWorld() #ÊÇ·ñ¿ªÆô if isOpen: gameWorld.SetBroadcastMsg(broadcastMsg) gameWorld.SetBroadcastInterval(broadcastTick) #ÊÇ·ñ¹Ø±Õ else: gameWorld.SetBroadcastMsg(broadcastMsg) gameWorld.SetBroadcastTick(0) gameWorld.SetBroadcastInterval(0) return #--------------------------------------------------------------------- ## ´¦ÀíÊÀ½ç¹«¸æ # @param tick µ±Ç°Ê±¼ä # @return None # @remarks # IPY_GameWorldEventManager.FindActiveEvent(int eventID) µÃµ½IPY_GameWorldEvent # ÔÙÅжÏÕâ¸öevent ÊÇ·ñGetIsProcessing() Õâ¸öʼþ¡£¡£¡£Æäʵ¾ÍÊǹ㲥ʼþChConfig.Def_GY_GM_Game_Broadcast # Èç¹û´¦Ôڹ㲥ʼþÏ£ºgameWorld.GetBroadcastTick()»ñÈ¡ÊÇ·ñ´ïµ½¹ã²¥¼ä¸ô # »¹Óй㲥ÄÚÈÝ£¬¹ã²¥³ÖÐøÊ±¼äµÈ£¬¶¼´ÓGameWorldÖ±½Ó»ñµÃ # ¶øÓÎÏ·¹ã²¥ÄÚÈÝ£¬Ò²ÊÇÔÚ±¾Ä£¿éÀïµÄÆäËû·½·¨ÀïÇëÇóÌí¼Ó½øÈ¥µÄ def DisposeGameWorldBroadcast(tick): eventManager = GameWorld.GetGameWorldEventManager() broadEvent = eventManager.FindActiveEvent(ChConfig.Def_GY_GM_Game_Broadcast) if not broadEvent: #ÎÞ¹«¸æ return if not broadEvent.GetIsProcessing(): #δ¼¤»î return gameWorld = GameWorld.GetGameWorld() broadcastMsg = gameWorld.GetBroadcastMsg() if broadcastMsg == '' : #ÎÞÄÚÈÝ return #=============================================================================== # ²»ÓÃÕâ¸öÅж¨ÁË,¸ÄΪ¿ªÆôʱ¼ä,½áÊøÊ±¼ä # boradcastStartTick = gameWorld.GetBroadcastStartTick() # # if boradcastStartTick == 0: # #ÎÞ¿ªÆôʱ¼ä # return # # # ²»ÓÃÕâ¸öÅж¨ÁË,¸ÄΪ¿ªÆôʱ¼ä,½áÊøÊ±¼ä # if tick - boradcastStartTick > gameWorld.GetBroadcastLastTime() * 60 * 1000: # #ÒѾ­¹ýÆÚ # return # #=============================================================================== #¼ä¸ô -> ·ÖÖÓתºÁÃë if tick - gameWorld.GetBroadcastTick() < gameWorld.GetBroadcastInterval() * 60 * 1000: #¼ä¸ôδµ½ return #¹ã²¥ GameWorld.GetPlayerManager().BroadcastInfo(broadcastMsg) #ÉèÖüä¸ô gameWorld.SetBroadcastTick(tick) return ## ´¦ÀíÓÎÏ·ÊÀ½çÖеÄïÚ³µ # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def DisposeGameWorldEvenByTruck(tick) : #½«Éæ¼°µ½C++ÖÐÁбíɾ³ýµÄ¹¦ÄÜ,ͳһ¸Ä³É -> ¸´ÖÆPyÁбíºó,È»ºó½øÐÐɾ³ýÂß¼­ (ÒòWhileÓм¸Âʽ«µ¼ÖÂËÀËø) worldTruck_List = [] #ïÚ³µ¹ÜÀíÆ÷ truckMananger = GameWorld.GetTruckMananger() for index in range(truckMananger.GetTruckCount()): truck = truckMananger.GetTruckByIndex(index) worldTruck_List.append(truck) if not worldTruck_List: return truckTime = ReadChConfig.GetEvalChConfig("TruckTime") * 60 curTime = int(time.time()) #·þÎñ¶Ë´¦ÀíïÚ³µ³¬Ê±Îª ʵ¼ÊÔËïÚÏÞÖÆÊ±¼ä+µôÏß»º³åʱ¼ä #³¬¹ý´Ëʱ¼äºóïÚ³µÏûʧ£¬ÇÒÎÞ½±Àø disappearTime = truckTime + ChConfig.Def_PlayerTruckLogoffTick / 1000 #GameWorld.DebugLog("DisposeGameWorldEvenByTruck count=%s,curTime=%s,truckTime=%s,disappearTime=%s" # % (len(worldTruck_List), curTime, truckTime, disappearTime)) #´¦ÀíÂß¼­ for curTruck in worldTruck_List: if curTime - curTruck.GetLogoffTick() < disappearTime: #GameWorld.Log(" ÔËïÚʱ¼ä: %d startTime=%d,curTime=%s,truckTime=%s, passTime=%s" # % (curTruck.GetOwnerID(), curTruck.GetLogoffTick(), curTime, truckTime, curTime - curTruck.GetLogoffTick())) continue GameWorld.Log("ÔËïÚʱ¼ä³¬Ê±: %d disappear! startTime=%d,curTime=%s,truckTime=%s" % (curTruck.GetOwnerID(), curTruck.GetLogoffTick(), curTime, truckTime)) #³¬¹ýʱ¼ä,ïÚ³µÏûʧ PlayerTruck.DelTruck(curTruck) # #»ñµÃÖ÷ÈË # curTruckOwnerID = curTruck.GetOwnerID() # curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curTruckOwnerID) # #Ö÷ÈË»¹ÔÚÏß # if curPlayer != None: # continue # # if curTruck.GetLogoffTick() == 0: # continue # # #Íæ¼Ò²»ÔÚÏß,µ«ïÚ³µÏûʧʱ¼äδµ½,²»Ïûʧ # if tick - curTruck.GetLogoffTick() < ChConfig.Def_PlayerTruckLogoffTick: # continue # # GameWorld.Log("%d disappear! logofftick = %d"%(curTruckOwnerID, curTruck.GetLogoffTick())) # #³¬¹ýʱ¼ä,ïÚ³µÏûʧ # PlayerTruck.DelTruck(curTruck) return ## ´¦ÀíÓÎÏ·ÊÀ½çʱ¼äʼþ # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def DisposeGameWorldEvenByTime(tick) : #Ö´ÐÐʱ¼ä´¦ÀíÂß¼­ DoLogic_GameWorldEvenByTime(tick) return ## Ö´ÐÐʱ¼ä´¦ÀíÂß¼­ # @param tick µ±Ç°Ê±¼ä # @return None # @remarks ¶Ô±È·þÎñÆ÷µ±Ç°Ê±¼äºÍ·þÎñÆ÷ÉϴμǼµÄʱ¼ä£¬Èç¹ûÓÐСʱ²îÒ죬Ôò˵Ã÷Ó¦´¥·¢Ð¡Ê±Ê¼þ # Èç´ËÀàÍÆ£¬callµ½ËùÓÐÒòʱ¼ä¶ø´¥·¢Ê¼þµÄº¯ÊýÖÐ def DoLogic_GameWorldEvenByTime(tick): lastTick = GameWorld.GetGameWorld().GetTickByType(ChConfig.TYPE_EvenByTime) if lastTick == -1: #GameWorld.Log("δ³õʼ»¯·þÎñÆ÷") return #·þÎñÆ÷µ±Ç°Ê±¼ä( ×Ö·û´® ) , ÓÃÓڼǼ curTimeStr = GameWorld.GetCurrentDataTimeStr() #-----------·þÎñÆ÷µ±Ç°Ê±¼ä curTime = datetime.datetime.today() curTimeHour = curTime.hour curTimeDay = curTime.day curTimeWeek = datetime.datetime.isocalendar(curTime)[1] curTimeMonth = curTime.month curTimeYear = curTime.year #-----------·þÎñÆ÷¼Ç¼µÄʱ¼ä serverHour , serverDay , serverWeek , serverMonth , serverYear = GameLogInfo.InitServerTime() #-----------¿ªÊ¼±È¶Ôʱ¼ä #OnHourʼþ if (serverHour != curTimeHour or serverDay!= curTimeDay or serverMonth != curTimeMonth or serverYear != curTimeYear): OnHour(curTimeStr, tick) #OnDayʼþ if (serverDay != curTimeDay or serverMonth != curTimeMonth or serverYear != curTimeYear): OnDay(curTimeStr, tick) #OnDayExʼþ if __Get_Can_OnDayEx(): OnDayEx(tick) #OnWeekʼþ #²»¿¼ÂǸôÄêÇé¿ö£¬Èç2009,12,31Èչطþ->2010,12,31ÈÕ¿ª·þ(²»´¥·¢OnWeek) if (serverWeek != curTimeWeek): OnWeek(curTimeStr, tick) #OnWeekExʼþ if __Get_Can_OnWeekEx(): OnWeekEx(tick) #OnMonthʼþ if (serverMonth != curTimeMonth or serverYear != curTimeYear): OnMonth(curTimeStr, tick) #OnMonthExʼþ if __Get_Can_OnMonthEx(): OnMonthEx(tick) #OnYearʼþ if serverYear != curTimeYear: OnYear(curTimeStr, tick) return def __Get_Can_OnDayEx(): '''ÅжϿɷñÁ賿Xµã¹ýÌì @return: 0-²»¿É£» 1-¿ÉÒÔ ''' curDateTime = GameWorld.GetServerTime() #dateTime_Day = curDateTime.day #dateTime_Month = curDateTime.month #dateTime_Year = curDateTime.year # ÉϴιýÌì¼Ç¼¸ñʽ: ÄêÔÂÈÕ, Èç20171027 lastOndayEx = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_Server_DayEx) #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ÌìµÄÎÞÂÛʲôʱ¼äµã¶¼¿ÉÒÔ¹ýÌì #GameWorld.DebugLog("¿ÉÒÔ¹ýÌì") return 1 def __Set_Server_DayEx(): onDayDateTime = GameWorld.GetServerTime() # ÌØÊâXµã֮ǰ¹ýÌìµÄ£¬´ú±íÌì²î´óÓÚ1ÌìµÄʱ¼ä¹ýÌ죬ÕâʱºòµÄ¹ýÌìÖµÐèÉèÖÃΪ×òÌì if onDayDateTime.hour < ShareDefine.Def_OnEventHour: onDayDateTime = onDayDateTime - datetime.timedelta(days=1) #GameWorld.Log("SetDayEx ÌØÊâXµã֮ǰ¹ýÌìµÄ£¬´ú±íÌì²î´óÓÚ1ÌìµÄʱ¼ä¹ýÌ죬ÕâʱºòµÄ¹ýÌìÖµÐèÉèÖÃΪ×òÌì %s" % onDayDateTime) ondayExValue = onDayDateTime.year * 10000 + onDayDateTime.month * 100 + onDayDateTime.day PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_Server_DayEx, ondayExValue) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OnDayEx, ondayExValue) GameWorld.Log("Set_Server_DayEx, OnDayExValue=%s" % ondayExValue) return def __Get_Can_OnWeekEx(): '''ÅжϿɷñÁ賿Xµã¹ýÖÜ @return: 0-²»¿É£» 1-¿ÉÒÔ ''' curDateTime = GameWorld.GetServerTime() isocalendar = datetime.datetime.isocalendar(curDateTime) dateTime_year, dateTime_week, dateTime_day = isocalendar # ÉϴιýÖܼǼ¸ñʽ: ÄêÖÜ, Èç201752 lastOnWeekEx = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_Server_WeekEx) #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 #GameWorld.DebugLog("¿ÉÒÔ¹ýÖÜ") return 1 def __Set_Server_WeekEx(): onWeekDateTime = GameWorld.GetServerTime() isocalendar = datetime.datetime.isocalendar(onWeekDateTime) dateTime_year, dateTime_week, dateTime_day = isocalendar # ÌØÊâXµã֮ǰ¹ýÖܵ쬴ú±íÖܲî´óÓÚ1ÌìµÄʱ¼ä¹ýÌ죬ÕâʱºòµÄ¹ýÌìÖµÐèÉèÖÃΪÉÏÖÜ if dateTime_day == 1 and onWeekDateTime.hour < ShareDefine.Def_OnEventHour: onWeekDateTime = onWeekDateTime - datetime.timedelta(days=7) # ÉÏÒ»ÖܵÄdatetime(¼´ÖܲîΪ1) dateTime_year, dateTime_week, dateTime_day = datetime.datetime.isocalendar(onWeekDateTime) #GameWorld.Log("SetWeekEx ÖÜÒ»ÌØÊâXµã֮ǰ¹ýÌìµÄ£¬´ú±íÖܲî´óÓÚ1µÄÖÜÒ»¹ýÖÜ£¬ÕâʱºòµÄ¹ýÖÜÖµÐèÉèÖÃΪÉÏÖÜ %s" % onWeekDateTime) onWeekExValue = dateTime_year * 100 + dateTime_week PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_Server_WeekEx, onWeekExValue) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OnWeekEx, onWeekExValue) GameWorld.Log("Set_Server_WeekEx, OnWeekExValue=%s" % onWeekExValue) return def __Get_Can_OnMonthEx(): '''ÅжϿɷñÁ賿Xµã¹ýÔ @return: 0-²»¿É£» 1-¿ÉÒÔ ''' curDateTime = GameWorld.GetServerTime() dateTime_day = curDateTime.day dateTime_month = curDateTime.month dateTime_year = curDateTime.year # ÉϴιýԼǼ¸ñʽ: ÄêÔÂ, Èç201712 lastOnMonthEx = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_Server_MonthEx) #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 # ÉÏÒ»ÔÂËùÊôÄê #GameWorld.DebugLog("preMonth_year=%s,preMonth_month=%s,lastOnMonthEx_Year=%s,lastOnMonthEx_Month=%s" # % (preMonth_year, preMonth_month, lastOnMonthEx_Year, lastOnMonthEx_Month)) # ÉϴιýÔµĸպÃÊÇÔ²î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 #GameWorld.DebugLog("¿ÉÒÔ¹ýÔÂ") return 1 def __Set_Server_MonthEx(): onMonthDateTime = GameWorld.GetServerTime() dateTime_day = onMonthDateTime.day dateTime_month = onMonthDateTime.month dateTime_year = onMonthDateTime.year # ÌØÊâXµã֮ǰ¹ýÔµģ¬´ú±íÔ²î´óÓÚ1ÌìµÄʱ¼ä¹ýÌ죬ÕâʱºòµÄ¹ýÌìÖµÐèÉèÖÃΪÉÏÔ if dateTime_day == 1 and onMonthDateTime.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("SetMonthEx ÔÂ1ºÅÌØÊâXµã֮ǰ¹ýÌìµÄ£¬´ú±íÔ²î´óÓÚ1µÄÔÂ1ºÅ¹ýÔ£¬ÕâʱºòµÄ¹ýÔÂÖµÐèÉèÖÃΪÉÏÔÂ") onMonthExValue = dateTime_year * 100 + dateTime_month PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_Server_MonthEx, onMonthExValue) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OnMonthEx, onMonthExValue) GameWorld.Log("Set_Server_MonthEx, onMonthExValue=%s" % onMonthExValue) return #--------------------------------------------------------------------- ##GameWorldÔ¤³õʼ»¯ # @param tick µ±Ç°Ê±¼ä # @return None # @remarks ±ÈInitGameWorld¸üÔçµÄʱ»ú³õʼ»¯ def PreInitGameWorld(tick): #=============================================================================== # ÔÚÕâÀï³õʼ»¯Ò»Ð©ºÍÓÎÏ·¶ÔÏóÎ޹صĶ«Î÷£¬Õâ¸ö³õʼ»¯Ê±»úÔ¶±ÈInitGameWorldÔ磬±ÈÈçÕâ´ÎµÄÅÅÐаñÀàÐ;ÍÒªÔÚÕâ¸ö³õʼ»¯ÀïÃæÌí¼Ó # ÔÚÕâ¸ö³õʼ»¯º¯ÊýµÄ×îºó Òªµ÷ÓÃSetPreInitOKº¯Êý ÉèÖóõʼ»¯ÒѾ­³É¹¦ #=============================================================================== #³õʼ»¯ÅÅÐаñ PlayerBillboard.InitServerBillboard() #³õʼ»¯¶ÓÎé×î´óÈËÊý GameWorld.GetTeamManager().SetMaxTeamMemberCount(ChConfig.Def_Team_MaxPlayerCount) #ÉèÖóõʼ»¯³É¹¦ GameWorld.GetGameWorld().SetPreInitOK(True) return ## GameWorld³õʼ»¯ # @param tick µ±Ç°Ê±¼ä # @return None # @remarks ÏÈÇëÇóÅÅÐаñÐÅÏ¢£¬È»ºóSetTickTypeCount£¬ÉèÖÃÐèÒª±£´æµÄʱ¼äÖÖÀà def InitGameWorld(tick): #±ê¼ÇGameWorld³õʼ»¯Íê³É GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_IsGameWorldInit, int(time.time())) #³õʼ»¯ÓÎϷʱÖÓ GameWorld.GetGameWorld().SetTickTypeCount(ChConfig.TYPE_Tick_Count) #³õʼ»°¿ª·þʱ¼ä¡¢ÐÇÆÚ¼¸ initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime) openServerWeekday = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday) if initOpenServerTime <= 0 or openServerWeekday <= 0: #¼Ç¼Ê״οª·¢Ê±¼ä(ÏÖʵʱ¼ä´Á) PlayerDBGSEvent.SetInitOpenServerTime(initOpenServerTime if initOpenServerTime else int(time.time())) #³õʼ»¯¼Ò×åÊýÁ¿ GameWorld.GetFamilyManager().SetFamilyUpperLimitCount(ChConfig.Def_Family_MaxCnt) #ÅÅÐòÔª±¦½»Òׯ½Ì¨ GameWorld.GetGameWorld().GetDBGoldOrderFormMgr().Sort() #ÅÅÐòÅÅÐаñ PlayerBillboard.SortServerBillboard() #ÅÅÐòÏÉÃË PlayerFamily.DoFamilySort() GameWorldActionControl.Dispose_FBStateTime() #ÏÉÃËÁªÈü GameWorldFamilyWar.OnGameServerInitOK() #²éѯPyTableÐÅÏ¢ #PlayerDBOper.QueryAllPyTable() #ʼþ»ã±¨³õʼ»¯ EventReport.InitDllAppID() #ReloadModule.RefreshModuleFileCMTime(True) #ºÏ·þÊ×´ÎÆô¶¯¼ÓÔØ´¦Àí __DoMixServerInit() #ÏÉħ֮Õù PlayerXMZZ.OnGameServerInitOK() #¼ÓÔØ»îÔ¾Íæ¼ÒµÈ¼¶ÐÅÏ¢ ChPlayer.LoadPlayerLVData() #¼ÓÔØÖúÕ½ÐÅÏ¢ PlayerFBHelpBattle.OnServerStart() #¿ç·þPK CrossRealmPK.OnGameServerInitOK() #ÊÀ½çboss±»É±´ÎÊýÖØÖà #GameWorldBoss.CheckResetBossKilledCntOnServerInit() __Func_HighPrecisionProcess(tick) # Ö÷¶¯´¥·¢Ò»´Î¸ß¾«¶ÈµÄµ÷Óã¬È·±£·þÎñÆ÷Æô¶¯ºóһЩ¹¦ÄܻµÈµÄÊý¾Ý»á±»¼ÓÔØ GameWorld.Log("=============================== ·þÎñÆ÷Æô¶¯³É¹¦ ===================================") isCrossServer = GameWorld.IsCrossServer() if isCrossServer: isServerClose = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossServerClose) isServerOpen = 0 if isServerClose else 1 GameWorld.GetGameWorld().SetDict(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isServerOpen) GameWorld.Log("¿ç·þ·þÎñÆ÷Æô¶¯³É¹¦: isServerOpen=%s,crossZoneName=%s" % (isServerOpen, GameWorld.GetCrossZoneName())) else: serverGroupID = GameWorld.GetServerGroupID() GameWorld.Log("·þÎñÆ÷Æô¶¯³É¹¦: ServerGroupID=%s" % serverGroupID) GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_GameWorldInitOK, 1) # ×¢Ò⣺¿ç·þÏà¹ØÐÅÏ¢µÄµ÷ÓÃÐè·ÅÔÚ×îºó£¬²»È»¿ÉÄܵ¼Ö·þÎñÆ÷δÆô¶¯¹¦ÄÜ»òÕß¹¦ÄÜδ¼ÓÔØ³É¹¦µ¼Ö¿ç·þ·þÎñÆ÷Óë×Ó·þÖ®¼äµÄÊý¾Ýͬ²½¿ÉÄܳöÏÖÒì³£µÄÇé¿ö CrossRealmMsg.OnGameServerInitOK() return def DoCheckNewServerOpen(tick): setOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_SetOpenServerTime) if not setOpenServerTime: #GameWorld.DebugLog("ûÓÐÖ¸¶¨¿ª·þʱ¼ä£¡") return curOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime) if curOpenServerTime == setOpenServerTime: #GameWorld.DebugLog("ÒѾ­Õýʽ¿ª·þ¹ýÁË£¡") return curTime = int(time.time()) if curTime < setOpenServerTime: #GameWorld.DebugLog("»¹Î´µ½Õýʽ¿ª·þʱ¼ä£¡") return OnNewServerOpen(tick) return def OnNewServerOpen(tick): '''зþ¿ªÆôÐèÒª´¦ÀíµÄÂß¼­''' GameWorld.Log("Ö´ÐÐÕýʽ¿ª·þÖØÖÃÂß¼­...") setOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_SetOpenServerTime) if not setOpenServerTime: return #Çå DBGSTrig dbgsTrigKeyDict = {} gsEventTrigManager = GameWorld.GetGameWorld().GetDBGameServerEventTrigManager() for i in xrange(gsEventTrigManager.GetCount()): gsEvent = gsEventTrigManager.GetAt(i) key = gsEvent.GetEventID() value = gsEvent.GetIsEvent() if not value or key in [PlayerDBGSEvent.Def_InitOpenServerTime, PlayerDBGSEvent.Def_SetOpenServerTime]: continue dbgsTrigKeyDict[key] = value for key, value in dbgsTrigKeyDict.items(): gsEventTrigManager.DeleteByKey(key) GameWorld.Log("DeleteGameServerEventTrig %s=%s" % (key, value)) #Çå ÅÅÐаñ for billboardIndex in ShareDefine.BillboardTypeList: billBoard = GameWorld.GetBillboard().FindBillboard(billboardIndex) count = 0 if not billBoard else billBoard.GetCount() if count: PlayerBillboard.ClearBillboardByIndex(billboardIndex) GameWorld.Log("ClearBillboard %s, count=%s" % (billboardIndex, count)) #Çå ͨÓüǼ universalRecMgr = GameWorld.GetUniversalRecMgr() for recType in ShareDefine.Def_UniversalGameRecTypeList: recordList = universalRecMgr.GetTypeList(recType) recordCount = 0 if not recordList else recordList.Count() universalRecMgr.Delete(recType) if recordCount: GameWorld.Log("DeleteRecData recType=%s, count=%s" % (recType, recordCount)) #Çå ¼Ò×å familyList = [] familyMgr = GameWorld.GetFamilyManager() for i in xrange(familyMgr.GetCount()): familyList.append(familyMgr.GetAt(i)) for family in familyList: GameWorld.Log("DeleteFamily familyID=%s" % (family.GetID())) PlayerFamily.DoLogic_DeleteFamily(None, family, tick) #ÏÉÃËÁªÈü GameWorldFamilyWar.DoFamilyWarReset() PyGameData.g_sortBOSSRefreshList = [] # bossË¢ÐÂÐÅÏ¢¼Ç¼»º´æÖØÖÃ, ²»ÖØÖûᵼÖÂ֪ͨǰ¶ËµÄbossÐÅϢΪ¿Õ PlayerDBGSEvent.SetInitOpenServerTime(setOpenServerTime) ReadChConfig.ReloadConfig() AllMapServerInitOK(tick) return ## ·þÎñÆ÷¿ª·þʱÊÇÐÇÆÚ¼¸ def GetOpenServerWeekday(): return PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday) ## ËùÓеØÍ¼·þÎñÆ÷³õʼ»¯³É¹¦ºó(·â°ü×¢²á) # @param tick µ±Ç°Ê±¼ä # @return None # @remarks µ±Ò»¸ömapServer¿ªÆôʱ£¬ def AllMapServerInitOK(tick): #֪ͨËùÓеØÍ¼·þÎñÆ÷³õʼ»¯³É¹¦, ͬ²½Ê±¼ä GameWorld.GetGameWorld().Notify_AllMapServerInitOK(GameWorld.GetCurrentDataTimeStr()) #ÉèÖÃÈ«²¿¾­Ñé±¶ÂÊ __SetWorldExpRate() __SetWorldDropRateAdd() #֪ͨµØÍ¼·þÎñÆ÷µ±Ç°ÒѾ­¼¤»îµÄ»î¶¯ __NotifyMapServerEvent() #֪ͨ»î¶¯×´Ì¬ GameWorldActionControl.SendMapServerOperationActionState() GameWorldActionControl.SendMapServerDailyActionState() GameWorldActionControl.SendMapServerFBFuncState() #֪ͨÒѾ­·¢²¼µÄÈÎÎñ __NotifyMissionPubEvent() #´¥·¢½Ú¼ÙÈջ #GameWorldActionHoliday.ActionHoliday_OpenAndClose(tick, True) #֪ͨÊÀ½çµÈ¼¶ worldLv = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_WorldAverageLv, worldLv) # ֪ͨȫ·þ½±Àø #PlayerCanGetReward.SendMapAllPlayerReward() # ֪ͨ¿ª·þÌìÊý openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay) openServerWeekday = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday, openServerWeekday) # ºÏ·þ״̬ isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_IsMixServer, isMixServer) # ºÏ·þÌì mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_MixServerDay, mixServerDay) # ÉϴκϷþʱµÄ¿ª·þÌìÊý¡¢ÊÀ½çµÈ¼¶ lastMixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_LastMixServerDay) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_LastMixServerDay, lastMixServerDay) lastMixServerWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_LastMixServerWorldLV) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_LastMixServerWorldLV, lastMixServerWorldLV) # ֪ͨսÃËÏà¹Ø»î¶¯¿ªÆô״̬ fadState = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_FamilyActivityDayState) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyActivityDayState, fadState) # ֪ͨ¿ªÆô·þÎñÆ÷ʱ¼ä initGameWorldTime = GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_InitGameWorldTime, initGameWorldTime) # ֪ͨÊÀ½çboss½±ÀøÐÅÏ¢ GameWorldBoss.OnMapServerInitOK() # ֪ͨÊÀ½çµôÂÊÌáÉý #worldDropRateKey = ShareDefine.Def_Notify_WorldKey_WorldDropRateAdd #worldDropRate = GameWorld.GetGameWorld().GetDictByKey(worldDropRateKey) #GameWorld.SendMapServerMsgEx(worldDropRateKey, worldDropRate) # ÏÉÃËÁªÈü GameWorldFamilyWar.OnMapServerInitOK() # ¿ç·þ·þÎñÆ÷״̬ isCrossServerOpen = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isCrossServerOpen) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossZoneName, PyGameData.g_crossZoneName) # ¿ç·þPK CrossRealmPK.OnMapServerInitOK() SendAllMapGlobalDropInfo() # È«¾ÖµôÂä¿ØÖÆ SendMapCommMapLinePlayerCount(True) # ͬ²½Ò»´ÎÆÕͨµØÍ¼Ïß·ÈËÊýÐÅÏ¢ #Ëæ»ú¼ÙÏÉÃË PlayerFamily.RandomFakeFamily() # ¼Ç¼·þÎñÆ÷ÊÇ·ñÕý³£¿ªÆôÍê±Ï getUrl = ReadChConfig.GetPyMongoConfig("EventReport", "OpenStateUrl") + "?Type=MapInit&MapCount=%s"%GameWorld.GetGameWorld().GetGameMapManager().GetCount() GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl) return ## ·þÎñÆ÷ºÏ·þÊ×´ÎÆô¶¯Êý¾Ý¼ÓÔØ´¦Àí # @param None # @return None def __DoMixServerInit(): isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) if not isMixServer: GameWorld.DebugLog("·ÇºÏ·þ£¬²»´¦ÀíºÏ·þÊ×´ÎÆô¶¯Êý¾Ý¼ÓÔØ£¡") return isMixServerInitOK = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServerInitOK) if isMixServerInitOK: GameWorld.DebugLog("ºÏ·þÊ×´ÎÆô¶¯¼ÓÔØÒѾ­´¦Àí¹ý£¡") return GameWorld.Log("ºÏ·þÊ×´ÎÆô¶¯¼ÓÔØ´¦Àí...") # Çå³ýÖ¸¶¨Í¨ÓÃÊý¾Ý£¬Ò»°ãÊǺϷþ¹¤¾ßɾ£¬ÕâÀï¿ÉÒÔÔÙ×ö¸ö²¹³ä universalRecMgr = GameWorld.GetUniversalRecMgr() delRecTypeList = [] GameWorld.Log("Çå³ýÖ¸¶¨Í¨ÓÃÊý¾Ý delRecTypeList=%s" % str(delRecTypeList)) for delRecType in delRecTypeList: universalRecMgr.Delete(delRecType) # ɾ³ý¹ýÆÚµÄͨÓÃÊý¾Ý __DelOutofdayRecData(universalRecMgr) # ÏÉÃËÁªÈüÖØÖà GameWorldFamilyWar.DoFamilyWarReset() # ÖØÖÃËùÓÐÏÉÃËÁªÈüÆÀ¼¶ familyManager = GameWorld.GetFamilyManager() for i in xrange(familyManager.GetCount()): family = familyManager.GetAt(i) PlayerFamily.SetFamilyWarRank(family, 0) PlayerFamily.DoFamilySort() # ÉèÖúϷþÊ×´ÎÆô¶¯¼ÓÔØ³É¹¦ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServerInitOK, 1) # ÉèÖñ¾´ÎºÏ·þʱµÄ¿ª·þÌìÊý¡¢ÊÀ½çµÈ¼¶ serverDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_LastMixServerDay, serverDay) worldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_LastMixServerWorldLV, worldLV) GameWorld.Log(" ºÏ·þÊ×´ÎÆô¶¯¼ÓÔØ³É¹¦! serverDay=%s,worldLV=%s" % (serverDay, worldLV)) return def __DelOutofdayRecData(universalRecMgr): # ɾ³ý¹ýÆÚµÄͨÓÃÊý¾Ý curTime = int(time.time()) delOutofdayRecDataDict = { } GameWorld.Log("Ö´ÐÐɾ³ý¹ýÆÚµÄͨÓÃÊý¾Ý, curTime=%s,delOutofdayRecDataDict=%s" % (curTime, delOutofdayRecDataDict)) for otDayRecType, otTime in delOutofdayRecDataDict.items(): otRecDataList = universalRecMgr.GetTypeList(otDayRecType) if not otRecDataList: continue delCnt = 0 totalCnt = otRecDataList.Count() for index in xrange(totalCnt): delIndex = index - delCnt otRecData = otRecDataList.At(delIndex) if curTime - otRecData.GetTime() >= otTime: otRecDataList.Delete(delIndex) delCnt +=1 GameWorld.Log(" ɾ³ý¹ýÆÚÌõÊý: recType=%s,totalCnt=%s,delCnt=%s" % (otDayRecType, totalCnt, delCnt)) return ## ÉèÖÃÈ«²¿¾­Ñé±¶ÂÊ£¬ÓÅÏȸù¾Ý»î¶¯¸ÅÂÊ # @param # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __SetWorldExpRate(): eventManager = GameWorld.GetGameWorldEventManager() expRateEvent = eventManager.FindActiveEvent(ChConfig.Def_GY_GM_Game_DoubleExp) #ÎÞ¾­Ñé±¶ÂÊÉèÖà if not expRateEvent: expRate = ChConfig.Def_MaxRateValue #δ¼¤»î elif not expRateEvent.GetIsProcessing(): expRate = ChConfig.Def_MaxRateValue else: expRate = int(expRateEvent.GetPar()) GameWorld.GetGameWorld().SetExpRate(expRate) return ## ÉèÖÃÈ«·þµôÂÊÔö¼Ó¸ÅÂÊ # @param # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __SetWorldDropRateAdd(): eventManager = GameWorld.GetGameWorldEventManager() event = eventManager.FindActiveEvent(ChConfig.Def_GY_GM_Game_DropRate) #ÎÞ¾­Ñé±¶ÂÊÉèÖà if not event: __DisposeWorldDropRateEvent(False) #δ¼¤»î elif not event.GetIsProcessing(): __DisposeWorldDropRateEvent(False) else: __DisposeWorldDropRateEvent(True , int(event.GetPar())) return ## ֪ͨµØÍ¼·þÎñÆ÷µ±Ç°±£´æµÄ»î¶¯ # @param # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __NotifyMapServerEvent(): eventManager = GameWorld.GetGameWorldEventManager() for index in range(eventManager.GetActiveEventCount()): event = eventManager.GetActiveEventByIndex(index) #먦ÆôµÄ»î¶¯ if not event.GetIsProcessing(): continue #֪ͨµØÍ¼·þÎñÆ÷µ±Ç°»î¶¯ __NotifyMapServerProcess(event , event.GetEventID() , event.GetPar()) return ## µØÍ¼·þÎñÆ÷Ë¢ÐÂ×Ô¼º×´Ì¬ # @param index µØÍ¼Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks ÿ¸ömap ¶¨Ê±Éϱ¨×Ô¼ºµÄmapID£¬lineID£¬curPlayerCnt,maxPlayerCnt ,´æ´¢Èë # GameWorld().GetMapServerStateManager() ¸ñʽÈç mapid 101 , lineid 0, cur 0, max 2000 def MapServer_RefreshState(index, tick): pack = IPY_GameServer.IPY_GMapServerState() routeServerIndex = pack.GetRouteServerIndex() mapID = pack.GetMapID() lineID = pack.GetLineID() curPlayerCount = pack.GetCurPlayerCount() maxPlayerCount = pack.GetMaxPlayerCount() #int nRouteServerIndex, int nMapID, int nLineID, int nCurPlayerCnt, int nMaxPlayerCnt GameWorld.GetGameWorld().GetMapServerStateManager().SetZoneServerState(routeServerIndex, mapID, lineID, curPlayerCount, maxPlayerCount) PyGameData.g_commMapLineRouteDict[(mapID, lineID)] = routeServerIndex #GameWorld.DebugLog("MapServer_RefreshState routeServerIndex=%s,mapID=%s,lineID=%s,curPlayerCount=%s,maxPlayerCount=%s" # % (routeServerIndex, mapID, lineID, curPlayerCount, maxPlayerCount)) # ÕâÀïÖ»¸üУ¬Í¨ÖªÔÚÆäËûµØ·½´¦Àí linePlayerCountDict = PyGameData.g_commMapLinePlayerCountDict.get(mapID, {}) if lineID not in linePlayerCountDict or linePlayerCountDict[lineID] != curPlayerCount: linePlayerCountDict[lineID] = curPlayerCount PyGameData.g_commMapLinePlayerCountDict[mapID] = linePlayerCountDict PyGameData.g_needSyncCommMapLinePlayerCount = True return #////////////////////////////////////////////////////////////// #//01 04 ÈÎÎñ·¢²¼#tagGMissionPub #tagGMissionPub * GettagGMissionPub(); # #class IPY_GMissionPub #{ #public: # //·¢²¼ÈÎÎñID # int GetMissionID(); # //·¢²¼ÀàÐÍ(¼Ò×å, ¹ú¼Ò) TMissinoPubType # int GetMissinoPubType(); # //·¢²¼ID # int GetPubID(); #}; ## ÈÎÎñ·¢²¼±í # @param index µØÍ¼Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def MapServer_MissionPub(index, tick): pack = IPY_GameServer.IPY_GMissionPub() missionPubManager = GameWorld.GetGameWorld().GetDBMissionPubManager() curMissionPub = missionPubManager.AddDBMissionPub(pack.GetMissionID()) curMissionPub.SetMissinoPubType(pack.GetMissinoPubType()) curMissionPub.SetPubID(pack.GetPubID()) curMissionPub.Notify_AllMapServerProcess() return ## ֪ͨÒѾ­·¢²¼µÄÈÎÎñ # @param # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __NotifyMissionPubEvent(): missionPubManager = GameWorld.GetGameWorld().GetDBMissionPubManager() missionPubManager.NotifyAllMapServerMissionPubProcess() return #--------------------------------------------------------------------- #////////////////////////////////////////////////////////////// #//04 02 ¼«Æ·µôÂä#tagGTreasureDrop #tagGTreasureDrop * GettagGTreasureDrop(); # #class IPY_GTreasureDrop #{ #public: # # int GetItemID(); # # int GetItemCount(); # //µôÂ书ÄÜÀàÐÍ # int GetDropFunctionType(); #--------------------------------------------------------------------- ## ÊÕ°ü£¬µôÂäÎïÆ· # @param index µØÍ¼Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def MapServer_TreasureDrop(index, tick): pack = IPY_GameServer.IPY_GTreasureDrop() itemID = pack.GetItemID() itemCount = pack.GetItemCount() dropFunctionType = pack.GetDropFunctionType() __ProcessFunctionTypeDrop(dropFunctionType, itemID, itemCount) if dropFunctionType != IPY_GameServer.dfdAll: #ËùÓеôÂä __ProcessFunctionTypeDrop(IPY_GameServer.dfdAll, itemID, itemCount) return ## ´¦Àí¹¦ÄÜÀàÐ͵ôÂä # @param dropFunctionType µôÂ书ÄÜÀàÐÍ # @param itemID ÎïÆ·ID # @param itemCount ÎïÆ·ÊýÁ¿ # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __ProcessFunctionTypeDrop(dropFunctionType, itemID, itemCount): dropManager = GameWorld.GetGameWorld().GetDBGameWorldDropManager() curDrop = dropManager.FindGameWorldDrop(itemID, dropFunctionType) if curDrop == None: #ÎÞ´ËÀàµôÂä return finalCount = curDrop.GetCurrentCount() + itemCount curDrop.SetCurrentCount(finalCount) if finalCount >= curDrop.GetDropCount(): curDrop.Notify_AllMapServerDropState(0) return ## Çå¿Õ±¦ÎïµôÂä # @param # @return None # @remarks ÿÌìÇå¿ÕÒ»´Î def __ClearTreasureDropCount(): #ÿÌìÇå¿Õ±¦ÎïµôÂä dropManager = GameWorld.GetGameWorld().GetDBGameWorldDropManager() for i in range(dropManager.GetCount()): curDrop = dropManager.GetAt(i) curDrop.SetCurrentCount(0) dropManager.Notify_AllMapServerClearForbiddenDrop() return def SendAllMapGlobalDropInfo(): # ͬ²½ËùÓеØÍ¼ËùÓÐÈ«·þµôÂä¿ØÖÆÐÅÏ¢ globalDropCDDict = IpyGameDataPY.GetFuncEvalCfg("GlobalDropCD", 1) # {ÎïÆ·ID:·ÖÖÓ, ...} globalKilledCountDropDict = IpyGameDataPY.GetFuncEvalCfg("GlobalDropCD", 2) # È«·þ»÷ɱ´ÎÊý±Øµô globalDropRateDict = IpyGameDataPY.GetFuncEvalCfg("NPCGlobalDropRate") # {ÎïÆ·ID:[[npcIDÁбí], "¸ÅÂʹ«Ê½"], ...} for itemID in globalDropCDDict.keys(): key = ShareDefine.Def_Notify_WorldKey_LastDropTime % itemID dropTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(key) GameWorld.SendMapServerMsgEx(key, dropTime) for itemID in globalDropRateDict.keys(): key = ShareDefine.Def_Notify_WorldKey_DropNPCKilledCnt % itemID killedCnt = PlayerDBGSEvent.GetDBGSTrig_ByKey(key) GameWorld.SendMapServerMsgEx(key, killedCnt) for npcID in globalKilledCountDropDict.keys(): key = ShareDefine.Def_Notify_WorldKey_NPCKilledCount % npcID killedCnt = PlayerDBGSEvent.GetDBGSTrig_ByKey(key) GameWorld.SendMapServerMsgEx(key, killedCnt) return def UpdGlobalDropCD(msgList): ## ¸üÐÂÈ«¾ÖµôÂäCDÎïÆ·×îºóÒ»´ÎµôÂäʱ¼ä itemID, dropTime = msgList key = ShareDefine.Def_Notify_WorldKey_LastDropTime % itemID PlayerDBGSEvent.SetDBGSTrig_ByKey(key, dropTime) GameWorld.SendMapServerMsgEx(key, dropTime) return def UpdGlobalDropRate(msgList): ## ¸üÐÂÈ«¾Ö»÷ɱ´ÎÊý»»ËãµôÂä¸ÅÂʵÄÎïÆ·ËùÀۼƵĻ÷ɱ´ÎÊý itemID, updKilledCnt = msgList key = ShareDefine.Def_Notify_WorldKey_DropNPCKilledCnt % itemID PlayerDBGSEvent.SetDBGSTrig_ByKey(key, updKilledCnt) GameWorld.SendMapServerMsgEx(key, updKilledCnt) return def UpdGlobalKillCount(msgList): ## ¸üÐÂÈ«¾Ö»÷ɱ´ÎÊý npcID, updKilledCnt = msgList key = ShareDefine.Def_Notify_WorldKey_NPCKilledCount % npcID PlayerDBGSEvent.SetDBGSTrig_ByKey(key, updKilledCnt) GameWorld.SendMapServerMsgEx(key, updKilledCnt) return #--------------------------------------------------------------------- #////////////////////////////////////////////////////////////// #//01 05 ×¢²á¸±±¾ÐÅÏ¢#tagGRegisterFBInfo #tagGRegisterFBInfo * GettagGRegisterFBInfo(); # #class IPY_GRegisterFBInfo #{ #public: # # int GetDataMapID(); # //¶Ô¿Í»§¶ËµÄÏßID # int GetClientLineID(); # //µ¥Ïß×î´óÍæ¼ÒÊýÄ¿ # int GetMaxPlayerCount(); # # int GetFbInfoLen(); # //size = FbInfoLen # char * GetFbInfo(); #}; ## ×¢²á¸±±¾ÐÅÏ¢ # @param index µØÍ¼Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def MapServer_RegisterFBInfo(index, tick): fbEventMgr = GameWorld.GetGameWorld().GetGameFbEventList() #»ñÈ¡·â°ü²ÎÊý mPack = IPY_GameServer.IPY_GRegisterFBInfo() gameFBEvent = fbEventMgr.GetGameFbEvent(mPack.GetLineID(), mPack.GetDataMapID()) fbDetail = gameFBEvent.GetGameFbDetail(mPack.GetClientLineID()) fbDetail.SetClientLineID(mPack.GetClientLineID()) fbDetail.SetMaxPlayerCount(mPack.GetMaxPlayerCount()) fbDetail.SetFbInfo(mPack.GetFbInfo()) return #////////////////////////////////////////////////////////////// #//01 06 ¸±±¾ÐÅϢˢÐÂ#tagGFbInfoRefresh #tagGFbInfoRefresh * GettagGFbInfoRefresh(); # #class IPY_GFbInfoRefresh #{ #public: # # int GetDataMapID(); # # int GetClientLineID(); # # int GetPlayerCount(); #}; ## ¸±±¾ÐÅϢˢР# @param index µØÍ¼Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def MapServer_FbInfoRefresh(index, tick): pack = IPY_GameServer.IPY_GFbInfoRefresh() fbEvent = GameWorld.GetGameWorld().GetGameFbEventList() gameFBEvent = fbEvent.FindGameFbEvent(pack.GetLineID(), pack.GetDataMapID()) if gameFBEvent == None: return #2009.5.30 #ÐÞ¸Ä: Èç¹û¸±±¾ÐÅϢˢеÄʱºò, ¸±±¾Ã»ÓÐ×¢²áÏêϸÐÅÏ¢, ÄÇô¾Í²»´¦Àí #gameFBEvent = fbEvent.GetGameFbEvent(pack.GetDataMapID()) fbDetail = gameFBEvent.GetGameFbDetail(pack.GetClientLineID()) fbDetail.SetPlayerCount(pack.GetPlayerCount()) return #--------------------------------------------------------------------- #=============================================================================== # //08 07 µØÍ¼·þÎñÆ÷״̬#tagGMapServerRunningState # tagGMapServerRunningState * GettagGMapServerRunningState(); # # class IPY_GMapServerRunningState # { # public: # # // ÔÝʱ¼ÓÔÚ·â°ü # int GetRouteServerIndex(); # # int GetMapID(); # # int GetState(); # }; #=============================================================================== ## ÔËÐÐ״̬ˢР# @param index µØÍ¼Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks state=3 ÊÇ¿ªÆô 0ÊÇʧȥÁ¬½Ó def MapServer_RunningStateRefresh(index, tick): mapServerPack = IPY_GameServer.IPY_GMapServerRunningState() gameMapManager = GameWorld.GetGameWorld().GetGameMapManager() curMap = gameMapManager.Find(mapServerPack.GetRouteServerIndex(), mapServerPack.GetMapID()) if curMap == None: return if mapServerPack.GetState() not in [0,1,2,3] and curMap.GetState() != mapServerPack.GetState(): # ¼Ç¼·þÎñÆ÷ÊÇ·ñÕý³£¿ªÆôÍê±Ï, ±ÜÃâÖØ¸´·¢ËÍ GameWorld.DebugLog("MapServer_RunningStateRefresh--_%s"%([mapServerPack.GetState(), curMap.GetState(), mapServerPack.GetMapID(), curMap.GetID()])) SendGameError("MapError") curMap.SetState(mapServerPack.GetState()) curMap.SetRefreshTick(tick) return def SendGameError(state): getUrl = ReadChConfig.GetPyMongoConfig("EventReport", "OpenStateUrl") groupID = ReadChConfig.GetPyMongoConfig("platform", "GroupID") userDBName = ReadChConfig.GetPyMongoConfig("connect", "USER_DB_NAME") getUrl = getUrl + "?Type=%s&groupID=%s&userDBName=%s"%(state, groupID, userDBName) GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl) ## ˢеØÍ¼·þÎñÆ÷״̬, Èç¹û1·ÖÖÓûÓÐ״̬»Ø±¨, Ë¢ÐÂΪÏûʧ״̬ # @param tick µ±Ç°Ê±¼ä # @return None # @remarks curMap.GetRefreshTick() > 5min Ôò£ºcurMap.SetState£¨Ïûʧ£© def DisposeMapServerRunningState(tick): #¼ä¸ôδµ½ if not GameWorld.SetWorldDictKey(ChConfig.TYPE_MapServerRunningState, tick): return gameMapManager = GameWorld.GetGameWorld().GetGameMapManager() isSendMapClose = False for i in range(0, gameMapManager.GetCount()): curMap = gameMapManager.GetAt(i) if curMap.GetState() == IPY_GameServer.mssNone: #µØÍ¼ÒѾ­»ÒÁË continue if tick - curMap.GetRefreshTick() < ChConfig.Def_Tick_MapServer_MssNone: #¼ä¸ôδµ½ continue curMap.SetState(IPY_GameServer.mssNone) if not isSendMapClose: # ±ÜÃâ¶àµØÍ¼·¢Ë͹ý¶àÓʼþ, Èç¹Ø·þµÄʱºò SendGameError("MapDisconnect") # ״̬±¨¸æ isSendMapClose = True return #--------------------------------------------------------------------- #=============================================================================== # //01 07 µØÍ¼·þÎñÆ÷״̬ÐÅÏ¢#tagGMapServerMsg # # struct tagGMapServerMsg # { # tagHead Head; # WORD MsgLen; # char Msg[MsgLen]; //size = MsgLen # }; #=============================================================================== ## µØÍ¼·þÎñÆ÷״̬ÐÅÏ¢ # @param index µØÍ¼Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks µØÍ¼·þÎñÆ÷״̬ÐÅÏ¢.MapServer½Ó¿ÚGameWorld.GetGameWorld().SendGameServerMsg def MapServer_MapServerMsg(index , tick): pack = IPY_GameServer.IPY_GMapServerMsg() msg = pack.GetMsg() #MapServer·Ç¸öÈËÇëÇó´¦Àí RunEventFunc(msg) return ## MapServer·Ç¸öÈËÇëÇó´¦Àí # @param funcName # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def RunEventFunc(funcName): funcName = "RunEventFunc_" + funcName if globals().has_key(funcName): return globals()[funcName]() else: GameWorld.Log("Error : RunEventFunc funcName = %s"%funcName) return ## ÓÃÓڹطþ֮ǰPYÒª´¦ÀíµÄÄÚÈÝ£¬×îºóÒ»¶¨ÒªÍ¨ÖªC++¹Ø·þ # @param None # @return None def BeforeClose(tick): PlayerTeam.OnServerClose(tick) ChPlayer.SavePlayerLVData() PlayerFBHelpBattle.OnServerClose() GameWorld.Log("֪ͨC++¹Ø·þ£¡") GameWorld.GetGameWorld().OnServerClose() def ChangeGameServerState(state): # Ö»½ÓÊÕ´óÓÚµÈÓÚmssPyError GameWorld.DebugLog("ChangeGameServerState:%s"%state) SendGameError("GameServerError")