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