null);
await _db.AddServerBanAsync(banDef);
+ if (_cfg.GetCVar(CCVars.ServerBanResetLastReadRules) && target != null)
+ await _db.SetLastReadRules(target.Value, null); // Reset their last read rules. They probably need a refresher!
var adminName = banningAdmin == null
? Loc.GetString("system-user")
: (await _db.GetPlayerRecordByUserId(banningAdmin.Value))?.LastSeenUserName ?? Loc.GetString("system-user");
.SingleOrDefaultAsync());
}
- public async Task SetLastReadRules(NetUserId player, DateTimeOffset date)
+ public async Task SetLastReadRules(NetUserId player, DateTimeOffset? date)
{
await using var db = await GetDb();
return;
}
- dbPlayer.LastReadRules = date.UtcDateTime;
+ dbPlayer.LastReadRules = date?.UtcDateTime;
await db.DbContext.SaveChangesAsync();
}
#region Rules
Task<DateTimeOffset?> GetLastReadRules(NetUserId player);
- Task SetLastReadRules(NetUserId player, DateTimeOffset time);
+ Task SetLastReadRules(NetUserId player, DateTimeOffset? time);
#endregion
return RunDbCommand(() => _db.GetLastReadRules(player));
}
- public Task SetLastReadRules(NetUserId player, DateTimeOffset time)
+ public Task SetLastReadRules(NetUserId player, DateTimeOffset? time)
{
DbWriteOpsMetric.Inc();
return RunDbCommand(() => _db.SetLastReadRules(player, time));
{
PopupTime = _cfg.GetCVar(CCVars.RulesWaitTime),
CoreRules = _cfg.GetCVar(CCVars.RulesFile),
- ShouldShowRules = !isLocalhost && !hasCooldown
+ ShouldShowRules = !isLocalhost && !hasCooldown,
};
_netManager.ServerSendMessage(showRulesMessage, e.Channel);
}
public static readonly CVarDef<bool> ServerBanErasePlayer =
CVarDef.Create("admin.server_ban_erase_player", false, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED);
+ /// <summary>
+ /// If true, will reset the last time the player has read the rules. This will mean on their next login they will be shown the rules again.
+ /// </summary>
+ public static readonly CVarDef<bool> ServerBanResetLastReadRules =
+ CVarDef.Create("admin.server_ban_reset_last_read_rules", true, CVar.ARCHIVE | CVar.SERVER);
+
/// <summary>
/// Minimum players sharing a connection required to create an alert. -1 to disable the alert.
/// </summary>