From 900edea7e693fd04bdbd2d66c684ae5f709cc7fb Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 15 三月 2021 17:58:32 +0800 Subject: [PATCH] 8854 子 【主干】【BT2】【GM】【后端】后台实现封禁玩家设备ID号后,聊天禁言 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 49 +++++++++++++++++++++++++++++++++++++------------ 1 files changed, 37 insertions(+), 12 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py index 48c9641..6fc4016 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py @@ -5982,17 +5982,41 @@ # 禁言 通知gameServer def SetGMForbidenTalk(curPlayer, value): - curPlayer.SetGMForbidenTalk(value) - curPlayer.SendGameServerRefreshState(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value) - curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value, False) + ''' 设置是否禁言 + @param value: 0-解禁;1-禁言;2-禁设备;3-解设备 + + 禁设备流程 + 1.先设置2通知前端写入禁设备记录(前端处理当为2时本地设备标记为禁设备) + 2.再设置1,此时前后端状态均为1,即角色禁言 + + 解禁设备流程 + 1.先设置3通知前端删除禁设备记录 + 2.再设置0,此时前后端状态均为1,即角色解禁 + ''' + __SetGMForbidenTalkValue(curPlayer, value) #同步设置离线DB玩家账号状态值 accState = curPlayer.GetAccState() - if value: + if value == 2: + accState = accState | pow(2, ChConfig.Def_PysForbidTalkDevice) accState = accState | pow(2, ChConfig.Def_PysForbidTalk) + elif value == 1: + accState = accState | pow(2, ChConfig.Def_PysForbidTalk) + elif value == 3: + if (accState & pow(2, ChConfig.Def_PysForbidTalkDevice)): + accState = accState ^ pow(2, ChConfig.Def_PysForbidTalkDevice) + if (accState & pow(2, ChConfig.Def_PysForbidTalk)): + accState = accState ^ pow(2, ChConfig.Def_PysForbidTalk) elif (accState & pow(2, ChConfig.Def_PysForbidTalk)) > 0: accState = accState ^ pow(2, ChConfig.Def_PysForbidTalk) SetPlayerAccState(curPlayer, accState) + return + +def __SetGMForbidenTalkValue(curPlayer, value): + curPlayer.SetGMForbidenTalk(value) + curPlayer.SendGameServerRefreshState(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value) + curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value, False) + GameWorld.DebugLog("__SetGMForbidenTalkValue %s" % value, curPlayer.GetPlayerID()) return def SetPlayerAccState(curPlayer, accState): @@ -6000,21 +6024,22 @@ curPlayer.SetExAttr17(accState) # 同步设置该值 0309 封包登录时需要用到 curPlayer.SendGameServerRefreshState(ShareDefine.CDBPlayerRefresh_ExAttr17, accState) curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ExAttr17, accState, False) - GameWorld.DebugLog("SetPlayerAccState %s" % (accState)) + GameWorld.DebugLog("SetPlayerAccState %s" % (accState), curPlayer.GetPlayerID()) return def DoGMForbidenTalkOnLogin(curPlayer): ## 离线时被禁言,此时DB的账号状态值为禁言状态,但是GMOper暂时没有禁言操作命令,故上线时检查设置下离线禁言状态 ## 目前离线时被禁言的,暂时只处理AccState ExAttr17, GMOper命令暂不处理,所以为永久禁言 - if not curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidTalk): + if curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidTalkDevice): + GameWorld.Log("上线时角色为被设备禁言状态!", curPlayer.GetPlayerID()) + __SetGMForbidenTalkValue(curPlayer, 2) + __SetGMForbidenTalkValue(curPlayer, 1) + elif curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidTalk): + GameWorld.Log("上线时角色为被禁言状态!", curPlayer.GetPlayerID()) + __SetGMForbidenTalkValue(curPlayer, 1) + else: curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, 0, False) - return - GameWorld.Log("上线时角色为被禁言状态!", curPlayer.GetPlayerID()) - value = 1 - curPlayer.SetGMForbidenTalk(value) - curPlayer.SendGameServerRefreshState(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value) - curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value, False) return ## 协助目标玩家ID -- Gitblit v1.8.0