hxp
2026-01-20 9bbff431b0f42a19ed6efe6b98164586b5984a20
16 卡牌服务端(后台GM广播;)
1个文件已添加
3个文件已修改
161 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_BroadCast.py 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
@@ -905,6 +905,22 @@
        return
    
    return
## 获得指定的时间格式
#  @param timeStr 时间列表
#  @param timeFormat 指定的转换格式
#  @return 时间datetime格式
#  @remarks 获得指定的时间格式
def GetDateTimeByFormatStr(timeStr, timeFormat):
    timeStr = timeStr.strip().split(".")[0]
    try:
        return  datetime.datetime.strptime(timeStr, timeFormat)
    except BaseException , e :
        Log("%s : %s"%(e, timeStr))
        return
    return
#---------------------------------------------------------------------
##获得与现实时间差距的小时数
# @param dateTimeStr 比较时间字符 如"2010-05-26 11:21:25"
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -125,6 +125,7 @@
import IPY_ServerDefine
import CommFunc
from PyMongoDB import RecvPackToMapDB
import GMT_BroadCast
import PyMongoMain
import PlayerTalk
import PlayerHero
@@ -715,6 +716,7 @@
    
    else:
        PyMongoMain.GetUserCtrlDB().OnPlayerLogin(curPlayer)
        GMT_BroadCast.OnPlayerLogin(curPlayer)
        PlayerHero.OnPlayerLogin(curPlayer)
        PlayerMail.OnPlayerLogin(curPlayer)
        PlayerHJG.OnPlayerLogin(curPlayer)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -38,6 +38,8 @@
g_turnFightMgr = None
g_broadCastList = [] # 后台gm广播
g_arenaPlayerMatchDict = {} # 本服竞技场玩家匹配记录缓存 {playerID:[tagPlayerID, ...], ...}
g_beautyEffTypeDict = {} # 红颜特殊效果缓存 {playerID:{effType:[effValue, effTypeValue], ...}, ...}
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_BroadCast.py
New file
@@ -0,0 +1,141 @@
#!/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