Final Code
Final Code
20 AM
// Utility Functions
function sendAnnouncement(message, playerId = null, color = 0x00FF00) {
room.sendAnnouncement(message, playerId, color);
}
function updateLastMovement(player) {
lastMovementTime[player.id] = Date.now();
}
function isAdmin(player) {
return admins.includes(player.id);
}
function isSuperAdmin(player) {
return player.id === superAdmin;
}
function grantAdmin(player) {
room.setPlayerAdmin(player.id, true);
if (!admins.includes(player.id)) {
admins.push(player.id);
}
sendAnnouncement("You are now an admin!", player.id, 0xACE1AF);
}
function removeAdmin(player) {
room.setPlayerAdmin(player.id, false);
admins = admins.filter(id => id !== player.id);
sendAnnouncement("Admin rights removed.", player.id, 0xFF0000);
}
function revokeAllAdmins(exceptPlayer) {
room.getPlayerList().forEach(player => {
if (player.id !== exceptPlayer.id) {
room.setPlayerAdmin(player.id, false);
}
});
admins = [exceptPlayer.id];
}
function updateAdmins() {
admins = room.getPlayerList().filter(player => player.admin).map(player =>
player.id);
}
// Mute Functions
function mutePlayer(player, duration = 300000) { // Default duration is 5 minutes
(300000 ms)
if (!mutedPlayers[player.id]) {
const unmuteTime = Date.now() + duration;
mutedPlayers[player.id] = unmuteTime;
setTimeout(() => {
delete mutedPlayers[player.id];
sendAnnouncement(player.name + " is now unmuted.", null, 0x00FF00);
}, duration);
sendAnnouncement(player.name + " is muted for 5 minutes.", null, 0xFF0000);
}
}
function permMutePlayer(player) {
if (!permanentlyMutedPlayers.includes(player.id)) {
permanentlyMutedPlayers.push(player.id);
sendAnnouncement(player.name + " is permanently muted.", null, 0xFF0000);
}
}
function unmutePlayer(player) {
delete mutedPlayers[player.id];
permanentlyMutedPlayers = permanentlyMutedPlayers.filter(id => id !==
player.id);
sendAnnouncement(player.name + " is now unmuted.", null, 0x00FF00);
}
function enableSlowDownMode() {
slowDownMode = true;
sendAnnouncement("Slow Mode on for 3 minutes.", null, 0xFF0000);
slowDownModeTimeout = setTimeout(() => {
slowDownMode = false;
sendAnnouncement("Slow Mode off.", null, 0x00FF00);
}, 3 * 60 * 1000);
}
function disableSlowDownMode() {
slowDownMode = false;
clearTimeout(slowDownModeTimeout);
sendAnnouncement("Slow Mode off.", null, 0x00FF00);
}
function normalizeName(name) {
return name.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
}
function findPlayerByName(partialName) {
let normalizedSearchName = normalizeName(partialName);
return room.getPlayerList().find(player =>
normalizeName(player.name).includes(normalizedSearchName));
}
if (message.startsWith("!remword ")) {
if (!isSuperAdmin(player)) {
sendAnnouncement("Only super admin can execute this command.",
player.id, 0xFF0000);
return false;
}
let word = message.substring(9).trim().toLowerCase();
if (bannedWords.includes(word)) {
bannedWords = bannedWords.filter(w => w !== word);
sendAnnouncement(`${word} removed from banned words.`, null,
0x00FF00);
} else {
sendAnnouncement(`${word} not found in banned words.`, player.id,
0xFF0000);
}
return false;
}
// Mute Commands
if (message.startsWith("!mute ")) {
if (!isSuperAdmin(player)) {
sendAnnouncement("Only super admin can execute this command.",
player.id, 0xFF0000);
return false;
}
let playerName = message.substring(6).trim();
let targetPlayer = findPlayerByName(playerName);
if (targetPlayer) {
mutePlayer(targetPlayer);
} else {
sendAnnouncement("Player not found: " + playerName, player.id,
0xFF0000);
}
return false;
}
if (message.startsWith("!permmute ")) {
if (!isSuperAdmin(player)) {
sendAnnouncement("Only super admin can execute this command.",
player.id, 0xFF0000);
return false;
}
let playerName = message.substring(10).trim();
let targetPlayer = findPlayerByName(playerName);
if (targetPlayer) {
permMutePlayer(targetPlayer);
} else {
sendAnnouncement("Player not found: " + playerName, player.id,
0xFF0000);
}
return false;
}
if (message.startsWith("!unmute ")) {
if (!isSuperAdmin(player)) {
sendAnnouncement("Only super admin can execute this command.",
player.id, 0xFF0000);
return false;
}
let playerName = message.substring(8).trim();
let targetPlayer = findPlayerByName(playerName);
if (targetPlayer) {
unmutePlayer(targetPlayer);
} else {
sendAnnouncement("Player not found: " + playerName, player.id,
0xFF0000);
}
return false;
}
if (slowDownMode) {
const now = Date.now();
const lastMessage = lastMessageTime[player.id] || 0;
const timeDiff = now - lastMessage;
if (timeDiff < 3000) { // 3 seconds cooldown
sendAnnouncement(`Wait ${(3000 - timeDiff) / 1000}s to message.`,
player.id, 0xFF0000);
return false;
}
lastMessageTime[player.id] = now;
}
if (permanentlyMutedPlayers.includes(player.id)) {
sendAnnouncement("You are permanently muted and cannot send messages.",
player.id, 0xFF0000);
return false;
}
return true;
}