| New file |
| | |
| | | #!/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
|