|  |  | 
 |  |  | 
 | 
 |  |  | # 禁言 通知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):
 | 
 |  |  |         curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, 0, False)
 | 
 |  |  |         return
 | 
 |  |  |     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())
 | 
 |  |  |     value = 1
 | 
 |  |  |     curPlayer.SetGMForbidenTalk(value)
 | 
 |  |  |     curPlayer.SendGameServerRefreshState(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value)
 | 
 |  |  |     curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value, False)
 | 
 |  |  |         __SetGMForbidenTalkValue(curPlayer, 1)
 | 
 |  |  |     else:
 | 
 |  |  |         curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, 0, False)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | ## 协助目标玩家ID
 |