mirror of
https://github.com/iDisaster/GTAConnected.git
synced 2026-03-08 09:25:23 +00:00
Delete resources/admin directory
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<meta>
|
||||
<info author="GTAConnected Server" type="script" version="1.0.0" description="Admin moderation and management tools" />
|
||||
<script src="server.js" type="server" language="javascript" />
|
||||
</meta>
|
||||
@@ -1,500 +0,0 @@
|
||||
// ============================================================================
|
||||
// ADMIN RESOURCE - Server Side
|
||||
// Handles server moderation, kick/ban, and admin commands
|
||||
// ============================================================================
|
||||
|
||||
// Define colors using toColour
|
||||
const COLOUR_WHITE = toColour(255, 255, 255, 255);
|
||||
const COLOUR_RED = toColour(255, 100, 100, 255);
|
||||
const COLOUR_DARKRED = toColour(255, 50, 50, 255);
|
||||
const COLOUR_GREEN = toColour(100, 255, 100, 255);
|
||||
const COLOUR_BLUE = toColour(100, 200, 255, 255);
|
||||
const COLOUR_YELLOW = toColour(255, 255, 100, 255);
|
||||
const COLOUR_ORANGE = toColour(255, 200, 100, 255);
|
||||
const COLOUR_GREY = toColour(200, 200, 200, 255);
|
||||
const COLOUR_PINK = toColour(255, 150, 100, 255);
|
||||
|
||||
// Admin list - add player names or account identifiers here
|
||||
const admins = [
|
||||
"Admin",
|
||||
"Owner",
|
||||
"ServerOwner",
|
||||
"Disaster"
|
||||
];
|
||||
|
||||
// Ban list (stored in memory - use a database for persistence)
|
||||
let bannedPlayers = [];
|
||||
let mutedPlayers = [];
|
||||
|
||||
// ============================================================================
|
||||
// EVENTS
|
||||
// ============================================================================
|
||||
|
||||
addEventHandler("OnResourceStart", function(event, resource) {
|
||||
console.log("[Admin] Resource started - " + admins.length + " admins configured");
|
||||
});
|
||||
|
||||
addEventHandler("OnPlayerConnect", function(event, client, ip) {
|
||||
// Check if player is banned
|
||||
for (let i = 0; i < bannedPlayers.length; i++) {
|
||||
if (bannedPlayers[i].ip === ip || bannedPlayers[i].name === client.name) {
|
||||
console.log("[Admin] Banned player attempted to connect: " + client.name + " (" + ip + ")");
|
||||
client.disconnect("You are banned from this server: " + bannedPlayers[i].reason);
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
addEventHandler("OnPlayerJoined", function(event, client) {
|
||||
if (isAdmin(client)) {
|
||||
messageClient("[ADMIN] You have administrator privileges", client, COLOUR_RED);
|
||||
}
|
||||
});
|
||||
|
||||
addEventHandler("OnPlayerCommand", function(event, client, command, params) {
|
||||
let cmd = command.toLowerCase();
|
||||
|
||||
// Public commands
|
||||
switch(cmd) {
|
||||
case "admins":
|
||||
showAdmins(client);
|
||||
return;
|
||||
|
||||
case "report":
|
||||
if (params && params.length > 0) {
|
||||
reportPlayer(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /report <message>", client, COLOUR_ORANGE);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Admin-only commands
|
||||
if (!isAdmin(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch(cmd) {
|
||||
case "kick":
|
||||
if (params && params.length > 0) {
|
||||
let parts = params.split(" ");
|
||||
let targetName = parts[0];
|
||||
let reason = parts.slice(1).join(" ") || "No reason specified";
|
||||
kickPlayer(client, targetName, reason);
|
||||
} else {
|
||||
messageClient("[USAGE] /kick <player> [reason]", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "ban":
|
||||
if (params && params.length > 0) {
|
||||
let parts = params.split(" ");
|
||||
let targetName = parts[0];
|
||||
let reason = parts.slice(1).join(" ") || "No reason specified";
|
||||
banPlayer(client, targetName, reason);
|
||||
} else {
|
||||
messageClient("[USAGE] /ban <player> [reason]", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "unban":
|
||||
if (params && params.length > 0) {
|
||||
unbanPlayer(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /unban <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "mute":
|
||||
if (params && params.length > 0) {
|
||||
mutePlayer(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /mute <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "unmute":
|
||||
if (params && params.length > 0) {
|
||||
unmutePlayer(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /unmute <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "freeze":
|
||||
if (params && params.length > 0) {
|
||||
freezePlayer(client, params, true);
|
||||
} else {
|
||||
messageClient("[USAGE] /freeze <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "unfreeze":
|
||||
if (params && params.length > 0) {
|
||||
freezePlayer(client, params, false);
|
||||
} else {
|
||||
messageClient("[USAGE] /unfreeze <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "slap":
|
||||
if (params && params.length > 0) {
|
||||
slapPlayer(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /slap <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "goto":
|
||||
case "tpto":
|
||||
if (params && params.length > 0) {
|
||||
teleportToPlayer(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /goto <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "bring":
|
||||
case "tphere":
|
||||
if (params && params.length > 0) {
|
||||
bringPlayer(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /bring <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "announce":
|
||||
case "ann":
|
||||
if (params && params.length > 0) {
|
||||
announce(params);
|
||||
} else {
|
||||
messageClient("[USAGE] /announce <message>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "setadmin":
|
||||
if (params && params.length > 0) {
|
||||
setAdmin(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /setadmin <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "getip":
|
||||
if (params && params.length > 0) {
|
||||
getPlayerIP(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /getip <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case "ahelp":
|
||||
case "adminhelp":
|
||||
showAdminHelp(client);
|
||||
break;
|
||||
|
||||
case "sethealth":
|
||||
if (params && params.length > 0) {
|
||||
let parts = params.split(" ");
|
||||
if (parts.length >= 2) {
|
||||
setPlayerHealth(client, parts[0], parseInt(parts[1]));
|
||||
} else {
|
||||
messageClient("[USAGE] /sethealth <player> <health>", client, COLOUR_ORANGE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "setarmour":
|
||||
if (params && params.length > 0) {
|
||||
let parts = params.split(" ");
|
||||
if (parts.length >= 2) {
|
||||
setPlayerArmour(client, parts[0], parseInt(parts[1]));
|
||||
} else {
|
||||
messageClient("[USAGE] /setarmour <player> <armour>", client, COLOUR_ORANGE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "explode":
|
||||
if (params && params.length > 0) {
|
||||
explodePlayer(client, params);
|
||||
} else {
|
||||
messageClient("[USAGE] /explode <player>", client, COLOUR_ORANGE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// Check if player is muted before chat
|
||||
addEventHandler("OnPlayerChat", function(event, client, messageText) {
|
||||
if (isMuted(client)) {
|
||||
messageClient("[ADMIN] You are muted and cannot chat!", client, COLOUR_RED);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// ============================================================================
|
||||
// FUNCTIONS
|
||||
// ============================================================================
|
||||
|
||||
function isAdmin(client) {
|
||||
return admins.indexOf(client.name) !== -1;
|
||||
}
|
||||
|
||||
function isMuted(client) {
|
||||
return mutedPlayers.indexOf(client.name) !== -1;
|
||||
}
|
||||
|
||||
function findPlayer(name) {
|
||||
let clients = getClients();
|
||||
let nameLower = name.toLowerCase();
|
||||
|
||||
for (let i = 0; i < clients.length; i++) {
|
||||
if (clients[i].name.toLowerCase() === nameLower ||
|
||||
clients[i].name.toLowerCase().indexOf(nameLower) !== -1) {
|
||||
return clients[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function kickPlayer(admin, targetName, reason) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target) {
|
||||
message("[ADMIN] " + target.name + " was kicked by " + admin.name + ": " + reason, COLOUR_RED);
|
||||
target.disconnect("Kicked: " + reason);
|
||||
console.log("[Admin] " + admin.name + " kicked " + target.name + ": " + reason);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function banPlayer(admin, targetName, reason) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target) {
|
||||
bannedPlayers.push({
|
||||
name: target.name,
|
||||
ip: target.ip,
|
||||
reason: reason,
|
||||
admin: admin.name,
|
||||
date: new Date().toISOString()
|
||||
});
|
||||
|
||||
message("[ADMIN] " + target.name + " was banned by " + admin.name + ": " + reason, COLOUR_DARKRED);
|
||||
target.disconnect("Banned: " + reason);
|
||||
console.log("[Admin] " + admin.name + " banned " + target.name + ": " + reason);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function unbanPlayer(admin, targetName) {
|
||||
let found = false;
|
||||
for (let i = bannedPlayers.length - 1; i >= 0; i--) {
|
||||
if (bannedPlayers[i].name.toLowerCase() === targetName.toLowerCase()) {
|
||||
bannedPlayers.splice(i, 1);
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (found) {
|
||||
messageClient("[ADMIN] " + targetName + " has been unbanned", admin, COLOUR_GREEN);
|
||||
console.log("[Admin] " + admin.name + " unbanned " + targetName);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found in ban list: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function mutePlayer(admin, targetName) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target) {
|
||||
if (mutedPlayers.indexOf(target.name) === -1) {
|
||||
mutedPlayers.push(target.name);
|
||||
}
|
||||
message("[ADMIN] " + target.name + " was muted by " + admin.name, COLOUR_PINK);
|
||||
console.log("[Admin] " + admin.name + " muted " + target.name);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function unmutePlayer(admin, targetName) {
|
||||
let target = findPlayer(targetName);
|
||||
let name = target ? target.name : targetName;
|
||||
|
||||
let index = mutedPlayers.indexOf(name);
|
||||
if (index !== -1) {
|
||||
mutedPlayers.splice(index, 1);
|
||||
message("[ADMIN] " + name + " was unmuted by " + admin.name, COLOUR_GREEN);
|
||||
console.log("[Admin] " + admin.name + " unmuted " + name);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player is not muted: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function freezePlayer(admin, targetName, freeze) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target && target.player) {
|
||||
target.player.frozen = freeze;
|
||||
let status = freeze ? "frozen" : "unfrozen";
|
||||
message("[ADMIN] " + target.name + " was " + status + " by " + admin.name, COLOUR_ORANGE);
|
||||
console.log("[Admin] " + admin.name + " " + status + " " + target.name);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function slapPlayer(admin, targetName) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target && target.player) {
|
||||
let pos = target.player.position;
|
||||
target.player.position = new Vec3(pos.x, pos.y, pos.z + 5);
|
||||
target.player.health -= 10;
|
||||
message("[ADMIN] " + target.name + " was slapped by " + admin.name, COLOUR_ORANGE);
|
||||
console.log("[Admin] " + admin.name + " slapped " + target.name);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function teleportToPlayer(admin, targetName) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target && target.player && admin.player) {
|
||||
let pos = target.player.position;
|
||||
admin.player.position = new Vec3(pos.x + 2, pos.y, pos.z);
|
||||
messageClient("[ADMIN] Teleported to " + target.name, admin, COLOUR_GREEN);
|
||||
console.log("[Admin] " + admin.name + " teleported to " + target.name);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function bringPlayer(admin, targetName) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target && target.player && admin.player) {
|
||||
let pos = admin.player.position;
|
||||
target.player.position = new Vec3(pos.x + 2, pos.y, pos.z);
|
||||
messageClient("[ADMIN] " + admin.name + " brought you to them", target, COLOUR_ORANGE);
|
||||
messageClient("[ADMIN] Brought " + target.name + " to you", admin, COLOUR_GREEN);
|
||||
console.log("[Admin] " + admin.name + " brought " + target.name);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function announce(text) {
|
||||
message("=================================", COLOUR_YELLOW);
|
||||
message("[ANNOUNCEMENT] " + text, COLOUR_YELLOW);
|
||||
message("=================================", COLOUR_YELLOW);
|
||||
console.log("[Admin] Announcement: " + text);
|
||||
}
|
||||
|
||||
function setAdmin(admin, targetName) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target) {
|
||||
if (admins.indexOf(target.name) === -1) {
|
||||
admins.push(target.name);
|
||||
messageClient("[ADMIN] You have been granted admin privileges by " + admin.name, target, COLOUR_GREEN);
|
||||
messageClient("[ADMIN] " + target.name + " is now an admin", admin, COLOUR_GREEN);
|
||||
console.log("[Admin] " + admin.name + " made " + target.name + " an admin");
|
||||
} else {
|
||||
messageClient("[ADMIN] " + target.name + " is already an admin", admin, COLOUR_ORANGE);
|
||||
}
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function getPlayerIP(admin, targetName) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target) {
|
||||
messageClient("[ADMIN] " + target.name + "'s IP: " + target.ip, admin, COLOUR_BLUE);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function setPlayerHealth(admin, targetName, health) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target && target.player) {
|
||||
target.player.health = health;
|
||||
messageClient("[ADMIN] Set " + target.name + "'s health to " + health, admin, COLOUR_GREEN);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function setPlayerArmour(admin, targetName, armour) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target && target.player) {
|
||||
target.player.armour = armour;
|
||||
messageClient("[ADMIN] Set " + target.name + "'s armour to " + armour, admin, COLOUR_GREEN);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function explodePlayer(admin, targetName) {
|
||||
let target = findPlayer(targetName);
|
||||
if (target && target.player) {
|
||||
let pos = target.player.position;
|
||||
gta.createExplosion(pos, 0, 10.0);
|
||||
message("[ADMIN] " + target.name + " was exploded by " + admin.name, COLOUR_RED);
|
||||
console.log("[Admin] " + admin.name + " exploded " + target.name);
|
||||
} else {
|
||||
messageClient("[ADMIN] Player not found: " + targetName, admin, COLOUR_RED);
|
||||
}
|
||||
}
|
||||
|
||||
function showAdmins(client) {
|
||||
messageClient("=== ONLINE ADMINS ===", client, COLOUR_ORANGE);
|
||||
let clients = getClients();
|
||||
let onlineAdmins = [];
|
||||
|
||||
for (let i = 0; i < clients.length; i++) {
|
||||
if (isAdmin(clients[i])) {
|
||||
onlineAdmins.push(clients[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
if (onlineAdmins.length > 0) {
|
||||
messageClient(onlineAdmins.join(", "), client, COLOUR_GREEN);
|
||||
} else {
|
||||
messageClient("No admins online", client, COLOUR_GREY);
|
||||
}
|
||||
}
|
||||
|
||||
function reportPlayer(client, reportMessage) {
|
||||
let clients = getClients();
|
||||
console.log("[Report] " + client.name + ": " + reportMessage);
|
||||
|
||||
for (let i = 0; i < clients.length; i++) {
|
||||
if (isAdmin(clients[i])) {
|
||||
messageClient("[REPORT] " + client.name + ": " + reportMessage, clients[i], COLOUR_ORANGE);
|
||||
}
|
||||
}
|
||||
|
||||
messageClient("[REPORT] Your report has been sent to admins", client, COLOUR_GREEN);
|
||||
}
|
||||
|
||||
function showAdminHelp(client) {
|
||||
messageClient("=== ADMIN COMMANDS ===", client, COLOUR_ORANGE);
|
||||
messageClient("/kick <player> [reason] - Kick a player", client, COLOUR_GREY);
|
||||
messageClient("/ban <player> [reason] - Ban a player", client, COLOUR_GREY);
|
||||
messageClient("/unban <player> - Unban a player", client, COLOUR_GREY);
|
||||
messageClient("/mute <player> - Mute a player", client, COLOUR_GREY);
|
||||
messageClient("/unmute <player> - Unmute a player", client, COLOUR_GREY);
|
||||
messageClient("/freeze <player> - Freeze a player", client, COLOUR_GREY);
|
||||
messageClient("/unfreeze <player> - Unfreeze a player", client, COLOUR_GREY);
|
||||
messageClient("/slap <player> - Slap a player", client, COLOUR_GREY);
|
||||
messageClient("/goto <player> - Teleport to a player", client, COLOUR_GREY);
|
||||
messageClient("/bring <player> - Bring a player to you", client, COLOUR_GREY);
|
||||
messageClient("/announce <msg> - Server announcement", client, COLOUR_GREY);
|
||||
messageClient("/setadmin <player> - Grant admin rights", client, COLOUR_GREY);
|
||||
messageClient("/getip <player> - Get player's IP", client, COLOUR_GREY);
|
||||
messageClient("/sethealth <player> <hp> - Set health", client, COLOUR_GREY);
|
||||
messageClient("/setarmour <player> <armor> - Set armour", client, COLOUR_GREY);
|
||||
messageClient("/explode <player> - Explode a player", client, COLOUR_GREY);
|
||||
}
|
||||
|
||||
console.log("[Admin] Server script loaded!");
|
||||
Reference in New Issue
Block a user