账号禁言表存储了被禁言账号的信息,包括禁言时间、禁言持续时长、禁言原因等。禁言是一种较轻的惩罚措施,被禁言的玩家可以登录游戏,但无法在公共频道发言。
字段名 | 类型 | 属性 | 描述 |
---|---|---|---|
guid | int(10) unsigned | 主键 | 账号ID,对应account表中的id字段 |
mutedate | int(10) unsigned | 主键 | 禁言日期 (Unix时间戳) |
mutetime | int(10) unsigned | 不为空 | 禁言时长 (分钟) |
mutedby | varchar(50) | 不为空 | 禁言操作者 |
mutereason | varchar(255) | 不为空 | 禁言原因 |
被禁言的账号ID,对应account表中的id字段。这个字段是表的主键之一,用于标识被禁言的账号。
示例值: 1, 42, 1337
账号被禁言的日期和时间,以Unix时间戳格式存储(从1970年1月1日UTC开始的秒数)。这个字段是表的主键之一,允许记录同一账号的多次禁言历史。
示例值: 1609459200(2021年1月1日 00:00:00 UTC)
注意: 可以使用FROM_UNIXTIME()函数将时间戳转换为可读的日期时间格式。
禁言的持续时间,以分钟为单位。如果设置为0,表示永久禁言。
示例值:
执行禁言操作的管理员或系统名称。通常是GM的角色名或账号名,也可以是自动禁言系统的标识。
示例值: "Admin", "GameMaster", "ChatFilter"
禁言账号的原因,用于记录为什么对该账号执行禁言操作。这个信息通常会显示给被禁言的玩家。
示例值: "刷屏", "辱骂其他玩家", "发布广告", "不当言论"
以下SQL语句将禁言ID为42的账号,为期24小时:
INSERT INTO account_muted (guid, mutedate, mutetime, mutedby, mutereason)
VALUES (42, UNIX_TIMESTAMP(), 1440, 'Admin', '辱骂其他玩家');
以下SQL语句将永久禁言ID为42的账号:
INSERT INTO account_muted (guid, mutedate, mutetime, mutedby, mutereason)
VALUES (42, UNIX_TIMESTAMP(), 0, 'Admin', '严重违规言论');
以下SQL语句将解除ID为42的账号的禁言:
DELETE FROM account_muted
WHERE guid = 42;
使用以下SQL语句查询:
SELECT a.username,
FROM_UNIXTIME(am.mutedate) AS mute_date,
am.mutetime,
FROM_UNIXTIME(am.mutedate + (am.mutetime * 60)) AS unmute_date,
am.mutedby,
am.mutereason
FROM account_muted am
JOIN account a ON am.guid = a.id
WHERE am.mutedate + (am.mutetime * 60) > UNIX_TIMESTAMP() OR am.mutetime = 0;
使用以下SQL语句查询:
SELECT FROM_UNIXTIME(mutedate) AS mute_date,
mutetime,
FROM_UNIXTIME(mutedate + (mutetime * 60)) AS unmute_date,
mutedby,
mutereason
FROM account_muted
WHERE guid = 42
ORDER BY mutedate DESC;
account表中的mutetime字段存储的是禁言到期的Unix时间戳,而account_muted表中的mutetime字段存储的是禁言的持续时间(分钟)。两者配合使用,account表中的字段用于游戏服务器判断玩家是否被禁言,而account_muted表用于记录禁言历史和详细信息。
不需要。禁言设置后立即生效,如果玩家当前已登录,他们将立即无法在公共频道发言。
禁言只会限制玩家在公共频道(如世界频道、交易频道等)发言的能力,不会影响玩家的其他游戏体验。被禁言的玩家仍然可以: