| | |
| | |
|
| | | # 禁言 通知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):
|
| | |
| | | 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
|