#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package PyMongoDB.GMToolLogicProcess.Commands.GMT_BroadCast # # @todo:GM¹¤¾ßÃüÁî - ¹ã²¥ # @author hxp # @date 2026-01-20 # @version 1.0 # # ÏêϸÃèÊö: GM¹¤¾ßÃüÁî - ¹ã²¥ # #------------------------------------------------------------------------------- #"""Version = 2026-01-20 16:00""" #------------------------------------------------------------------------------- import ChConfig import GameWorld import DataRecordPack import ChPyNetSendPack import NetPackCommon import PyGameData import GMCommon import datetime Def_MaxBroadCast = 10 # ¹ã²¥×î´ó´æ´¢ÊýÁ¿ ## ÊÕµ½gmÃüÁîÖ´ÐÐ # @param gmCmdDict:gmÃüÁî×Öµä # @return None def OnExec(gmCmdDict): broadCastMsg = gmCmdDict.get(GMCommon.Def_GMKey_BroadCastMsg, '') startTime = gmCmdDict.get(GMCommon.Def_GMKey_StartTime, '') endTime = gmCmdDict.get(GMCommon.Def_GMKey_EndTime, '') startDate = gmCmdDict.get(GMCommon.Def_GMKey_StartDate, '') endDate = gmCmdDict.get(GMCommon.Def_GMKey_EndDate, '') interval = GameWorld.ToIntDef(gmCmdDict.get(GMCommon.Def_GMKey_Interval, '1'), 1) interval = max(1, interval) isDelOthers = gmCmdDict.get(GMCommon.Def_GMKey_IsDelOthers, 0) == "on" if startDate == '' or startTime == '' or endDate == '' or endTime == '': # ûÓÐÉèÖÃʱ¼ä£¬Ä¬ÈÏÁ¢¼´¹ã²¥Ò»´Î startTime = GameWorld.GetCurrentDataTimeStr() endTime = str(GameWorld.GetServerTime() + datetime.timedelta(seconds=59)) endTime = endTime.strip().split(".")[0] else: startTime = startDate + " " + startTime endTime = endDate + ' ' + endTime if broadCastMsg == '' or endTime == '' or startTime == '': return GMCommon.Def_ParamErr # ɾ³ý֮ǰµÄ´æ´¢µÄ¹ã²¥ if isDelOthers: DelAllBroadCast() startDate = GameWorld.GetDateTimeByFormatStr(startTime, ChConfig.TYPE_Time_Format) endDate = GameWorld.GetDateTimeByFormatStr(endTime, ChConfig.TYPE_Time_Format) dateTime = GameWorld.GetServerTime() # ÅжÏʱ¼äÊÇ·ñÕýÈ· if CheckDate(startDate, endDate) or CheckDate(dateTime, endDate): return GMCommon.Def_InvalidTime startTime = GameWorld.ChangeTimeStrToNum(startTime) endTime = GameWorld.ChangeTimeStrToNum(endTime) # ·¢ËÍÏûÏ¢ SetBroadCastInfo(startTime, endTime, interval, broadCastMsg, isDelOthers) # Á÷Ïò DataRecordPack.DR_ToolGMOperate(0, '', '', 'GMT_BroadCast', str(gmCmdDict)) return GMCommon.Def_Success def CheckDate(startDate, endDate): ## ÅжÏʱ¼äÊÇ·ñ´íÎó if not startDate or not endDate: return False if (endDate - startDate).days < 0: return True return False def DelAllBroadCast(): ## ɾ³ý֮ǰµÄ´æ´¢µÄ¹ã²¥ PyGameData.g_broadCastList = [] return def SetBroadCastInfo(startTime, endTime, interval, msg, isDelOthers): ## Ìí¼Ó¹ã²¥ PyGameData.g_broadCastList.append([startTime, endTime, interval, msg]) if len(PyGameData.g_broadCastList) > Def_MaxBroadCast: PyGameData.g_broadCastList = PyGameData.g_broadCastList[-Def_MaxBroadCast:] # ¹ã²¥ÔÚÏßÍæ¼Ò NetPackCommon.SendFackPackOnline(GetBroadPack(startTime, endTime, interval, msg, isDelOthers)) return def OnPlayerLogin(curPlayer): if PyGameData.g_broadCastList == []: return # ÅжÏʱ¼ä»ò»¹Ê£ÓàµÄ¹ã²¥ tempList = [] curTime = GameWorld.GetServerTime() for msgInfo in PyGameData.g_broadCastList: startTime, endTime, interval, msg = msgInfo dateTime = GameWorld.ChangeTimeNumToDatetime(endTime) if (dateTime - curTime).days < 0: continue # ÐèÒª´æ´¢µÄ¹ã²¥ tempList.append(msgInfo) # ֪ͨ¿Í»§¶Ë£¬¹ã²¥ÄÚÈÝ NetPackCommon.SendFakePack(curPlayer, GetBroadPack(startTime, endTime, interval, msg)) # ¸üй㲥Áбí PyGameData.g_broadCastList = tempList[:] return def GetBroadPack(startTime, endTime, interval, msg, isDelOthers=False): packData = ChPyNetSendPack.tagBroadCastInfo() packData.Clear() packData.IsDelOthers = isDelOthers packData.StartTime = startTime packData.EndTime = endTime packData.Interval = interval packData.Msg = msg packData.MsgLen = len(msg) return packData