// ===================================================
// ADMIN SYSTEM - Full Admin Script
// Version: 0.1
// For: SA-MP 0.3.7+
// Author: Moha
// ===================================================
#include <a_samp>
#include <sscanf2>
#include <zcmd>
// ===================================================
// DEFINES & ENUMS
// ===================================================
#define MAX_ADMIN_LEVEL 6
#define DIALOG_ADMIN_PANEL 5000
#define DIALOG_REPORT_PANEL 5001
// Colors
#define COLOR_RED 0xFF0000FF
#define COLOR_GREEN 0x00FF00FF
#define COLOR_YELLOW 0xFFFF00FF
#define COLOR_WHITE 0xFFFFFFFF
#define COLOR_BLUE 0x0066FFFF
#define COLOR_ORANGE 0xFF8C00FF
#define COLOR_PINK 0xFF69B4FF
#define COLOR_LIME 0x00FF80FF
#define COLOR_GREY 0x808080FF
#define COLOR_ADMIN 0x00FF80FF
#define COLOR_ADMIN_CMD 0xFFAA00FF
enum AdminLevels {
LEVEL_PLAYER = 0,
LEVEL_MODERATOR = 1,
LEVEL_SENIOR_MOD = 2,
LEVEL_MANAGER = 3,
LEVEL_ADMIN = 4,
LEVEL_HEAD_ADMIN = 5,
LEVEL_OWNER = 6
}
enum PlayerData {
AdminLevel,
bool:LoggedIn,
bool:Muted,
bool:Frozen,
bool:GodMode,
bool:Invisible,
bool:IsJailed,
WarnCount,
JailTime,
Float:JailX,
Float:JailY,
Float:JailZ,
bool:IsSpectating,
SpectateTarget,
bool:IsInAdminMode
}
// ===================================================
// VARIABLES
// ===================================================
new PlayerInfo[MAX_PLAYERS][PlayerData];
new PlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];
new bool:IsAdminLogged[MAX_PLAYERS];
// ===================================================
// STOCKS & FUNCTIONS
// ===================================================
stock GetAdminLevelName(level) {
new names[][] = {
"Player",
"Moderator",
"Senior Moderator",
"Manager",
"Administrator",
"Head Administrator",
"Owner"
};
return (level >= 0 && level <= 6) ? names[level] : "Unknown";
}
stock IsAdmin(playerid, level = 1) {
if(!IsPlayerConnected(playerid)) return 0;
return (PlayerInfo[playerid][AdminLevel] >= level);
}
stock IsPlayerLogged(playerid) {
return PlayerInfo[playerid][LoggedIn];
}
stock GetPlayerNameEx(playerid) {
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
return name;
}
stock SendAdminMessage(color, const message[], level = 1) {
for(new i = 0; i < MAX_PLAYERS; i++) {
if(IsPlayerConnected(i) && IsAdmin(i, level)) {
SendClientMessage(i, color, message);
}
}
}
// ===================================================
// ON PLAYER CONNECT
// ===================================================
public OnPlayerConnect(playerid) {
// Reset all player data
PlayerInfo[playerid][AdminLevel] = 0;
PlayerInfo[playerid][LoggedIn] = false;
PlayerInfo[playerid][Muted] = false;
PlayerInfo[playerid][Frozen] = false;
PlayerInfo[playerid][GodMode] = false;
PlayerInfo[playerid][Invisible] = false;
PlayerInfo[playerid][IsJailed] = false;
PlayerInfo[playerid][WarnCount] = 0;
PlayerInfo[playerid][JailTime] = 0;
PlayerInfo[playerid][IsSpectating] = false;
PlayerInfo[playerid][IsInAdminMode] = false;
GetPlayerName(playerid, PlayerName[playerid], MAX_PLAYER_NAME);
new msg[128];
format(msg, sizeof(msg), "📥 %s has joined the server.", PlayerName[playerid]);
SendAdminMessage(COLOR_GREY, msg, 0);
return 1;
}
// ===================================================
// ON PLAYER DISCONNECT
// ===================================================
public OnPlayerDisconnect(playerid, reason) {
new msg[128];
format(msg, sizeof(msg), "📤 %s has left the server.", PlayerName[playerid]);
SendAdminMessage(COLOR_GREY, msg, 0);
return 1;
}
// ===================================================
// ON PLAYER TEXT (Anti-Spam & Mute)
// ===================================================
public OnPlayerText(playerid, text[]) {
if(PlayerInfo[playerid][Muted]) {
SendClientMessage(playerid, COLOR_RED, "✖ You are muted! You cannot speak.");
return 0;
}
return 1;
}
// ===================================================
// ON PLAYER COMMAND (Admin Check)
// ===================================================
public OnPlayerCommandPerformed(playerid, cmdtext[], success) {
if(!success) {
SendClientMessage(playerid, COLOR_RED, "✖ Unknown command. Type /help for commands.");
return 0;
}
return 1;
}
// ===================================================
// ADMIN LOGIN SYSTEM
// ===================================================
CMD:adminlogin(playerid, params[]) {
if(PlayerInfo[playerid][LoggedIn]) {
SendClientMessage(playerid, COLOR_YELLOW, "⚠ You are already logged in as admin.");
return 1;
}
new password[64];
if(sscanf(params, "s[64]", password)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /adminlogin [password]");
return 1;
}
// Simple password check (in real script, use hashed passwords)
if(strcmp(password, "admin123", false) == 0) {
PlayerInfo[playerid][LoggedIn] = true;
PlayerInfo[playerid][AdminLevel] = 6; // Owner level
IsAdminLogged[playerid] = true;
SendClientMessage(playerid, COLOR_GREEN, "✔ You have been logged in as Admin!");
SendClientMessage(playerid, COLOR_ADMIN, "🔰 Welcome to Admin Panel!");
new msg[128];
format(msg, sizeof(msg), "🔰 %s logged in as Admin (Level: %d)", PlayerName[playerid], PlayerInfo[playerid][AdminLevel]);
SendAdminMessage(COLOR_ADMIN, msg, 1);
} else {
SendClientMessage(playerid, COLOR_RED, "✖ Wrong password!");
}
return 1;
}
CMD:adminlogout(playerid, params[]) {
if(!PlayerInfo[playerid][LoggedIn]) {
SendClientMessage(playerid, COLOR_RED, "✖ You are not logged in as admin.");
return 1;
}
PlayerInfo[playerid][LoggedIn] = false;
IsAdminLogged[playerid] = false;
SendClientMessage(playerid, COLOR_YELLOW, "⚠ You have been logged out from admin.");
return 1;
}
// ===================================================
// ADMIN LEVEL SYSTEM
// ===================================================
CMD:setadmin(playerid, params[]) {
if(!IsAdmin(playerid, 3)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 3+ to use this command.");
return 1;
}
new targetid, level;
if(sscanf(params, "ud", targetid, level)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /setadmin [playerid] [level (1-6)]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(level < 0 || level > 6) {
SendClientMessage(playerid, COLOR_RED, "✖ Invalid admin level. Must be between 1-6.");
return 1;
}
if(PlayerInfo[targetid][AdminLevel] == level) {
SendClientMessage(playerid, COLOR_YELLOW, "⚠ Player already has this admin level.");
return 1;
}
PlayerInfo[targetid][AdminLevel] = level;
new msg[128];
format(msg, sizeof(msg), "✔ %s has been promoted to %s (Level: %d)",
PlayerName[targetid], GetAdminLevelName(level), level);
SendClientMessage(playerid, COLOR_GREEN, msg);
format(msg, sizeof(msg), "🔰 %s assigned you to %s (Level: %d)",
PlayerName[playerid], GetAdminLevelName(level), level);
SendClientMessage(targetid, COLOR_ADMIN, msg);
format(msg, sizeof(msg), "🔰 %s set admin level of %s to %d",
PlayerName[playerid], PlayerName[targetid], level);
SendAdminMessage(COLOR_ADMIN, msg, 1);
return 1;
}
// ===================================================
// KICK COMMAND
// ===================================================
CMD:kick(playerid, params[]) {
if(!IsAdmin(playerid, 1)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 1+ to use this command.");
return 1;
}
if(!IsPlayerLogged(playerid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Please login first: /adminlogin [password]");
return 1;
}
new targetid, reason[64];
if(sscanf(params, "us[64]", targetid, reason)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /kick [playerid] [reason]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(targetid == playerid) {
SendClientMessage(playerid, COLOR_RED, "✖ You cannot kick yourself.");
return 1;
}
if(PlayerInfo[targetid][AdminLevel] >= PlayerInfo[playerid][AdminLevel]) {
SendClientMessage(playerid, COLOR_RED, "✖ You cannot kick higher or equal level admins.");
return 1;
}
new msg[256];
format(msg, sizeof(msg), "⛔ %s has been kicked by %s. Reason: %s",
PlayerName[targetid], PlayerName[playerid], reason);
SendClientMessageToAll(COLOR_RED, msg);
format(msg, sizeof(msg), "⛔ Admin %s kicked %s. Reason: %s",
PlayerName[playerid], PlayerName[targetid], reason);
SendAdminMessage(COLOR_ADMIN, msg, 1);
Kick(targetid);
return 1;
}
// ===================================================
// BAN COMMAND
// ===================================================
CMD:ban(playerid, params[]) {
if(!IsAdmin(playerid, 2)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 2+ to use this command.");
return 1;
}
if(!IsPlayerLogged(playerid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Please login first: /adminlogin [password]");
return 1;
}
new targetid, reason[64];
if(sscanf(params, "us[64]", targetid, reason)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /ban [playerid] [reason]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(targetid == playerid) {
SendClientMessage(playerid, COLOR_RED, "✖ You cannot ban yourself.");
return 1;
}
if(PlayerInfo[targetid][AdminLevel] >= PlayerInfo[playerid][AdminLevel]) {
SendClientMessage(playerid, COLOR_RED, "✖ You cannot ban higher or equal level admins.");
return 1;
}
// Save banned player info
new file[64], ip[16], name[MAX_PLAYER_NAME];
GetPlayerName(targetid, name, sizeof(name));
GetPlayerIp(targetid, ip, sizeof(ip));
format(file, sizeof(file), "Bans/%s.ini", name);
new INI:banFile = INI_Open(file);
INI_WriteString(banFile, "BannedBy", PlayerName[playerid]);
INI_WriteString(banFile, "Reason", reason);
INI_WriteString(banFile, "IP", ip);
INI_WriteInt(banFile, "AdminLevel", PlayerInfo[targetid][AdminLevel]);
INI_Close(banFile);
new msg[256];
format(msg, sizeof(msg), "🚫 %s has been banned by %s. Reason: %s",
PlayerName[targetid], PlayerName[playerid], reason);
SendClientMessageToAll(COLOR_RED, msg);
format(msg, sizeof(msg), "🚫 Admin %s banned %s. Reason: %s",
PlayerName[playerid], PlayerName[targetid], reason);
SendAdminMessage(COLOR_ADMIN, msg, 1);
Ban(targetid);
return 1;
}
// ===================================================
// UNBAN COMMAND
// ===================================================
CMD:unban(playerid, params[]) {
if(!IsAdmin(playerid, 2)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 2+ to use this command.");
return 1;
}
new name[64];
if(sscanf(params, "s[64]", name)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /unban [playername]");
return 1;
}
new file[64];
format(file, sizeof(file), "Bans/%s.ini", name);
if(!fexist(file)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not found in ban list.");
return 1;
}
fremove(file);
new msg[128];
format(msg, sizeof(msg), "✔ %s has been unbanned.", name);
SendClientMessage(playerid, COLOR_GREEN, msg);
SendAdminMessage(COLOR_ADMIN, msg, 1);
return 1;
}
// ===================================================
// MUTE / UNMUTE
// ===================================================
CMD:mute(playerid, params[]) {
if(!IsAdmin(playerid, 1)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 1+ to use this command.");
return 1;
}
new targetid, minutes;
if(sscanf(params, "uD", targetid, minutes)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /mute [playerid] [minutes]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(PlayerInfo[targetid][AdminLevel] >= PlayerInfo[playerid][AdminLevel]) {
SendClientMessage(playerid, COLOR_RED, "✖ You cannot mute higher or equal level admins.");
return 1;
}
PlayerInfo[targetid][Muted] = true;
new msg[128];
format(msg, sizeof(msg), "🔇 %s has been muted for %d minutes by %s.",
PlayerName[targetid], minutes, PlayerName[playerid]);
SendClientMessageToAll(COLOR_YELLOW, msg);
format(msg, sizeof(msg), "🔇 You have been muted by %s for %d minutes.",
PlayerName[playerid], minutes);
SendClientMessage(targetid, COLOR_RED, msg);
return 1;
}
CMD:unmute(playerid, params[]) {
if(!IsAdmin(playerid, 1)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 1+ to use this command.");
return 1;
}
new targetid;
if(sscanf(params, "u", targetid)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /unmute [playerid]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(!PlayerInfo[targetid][Muted]) {
SendClientMessage(playerid, COLOR_YELLOW, "⚠ Player is not muted.");
return 1;
}
PlayerInfo[targetid][Muted] = false;
new msg[128];
format(msg, sizeof(msg), "🔊 %s has been unmuted by %s.",
PlayerName[targetid], PlayerName[playerid]);
SendClientMessageToAll(COLOR_GREEN, msg);
SendClientMessage(targetid, COLOR_GREEN, "✔ You have been unmuted.");
return 1;
}
// ===================================================
// FREEZE / UNFREEZE
// ===================================================
CMD:freeze(playerid, params[]) {
if(!IsAdmin(playerid, 1)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 1+ to use this command.");
return 1;
}
new targetid;
if(sscanf(params, "u", targetid)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /freeze [playerid]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(PlayerInfo[targetid][AdminLevel] >= PlayerInfo[playerid][AdminLevel]) {
SendClientMessage(playerid, COLOR_RED, "✖ You cannot freeze higher or equal level admins.");
return 1;
}
TogglePlayerControllable(targetid, false);
PlayerInfo[targetid][Frozen] = true;
new msg[128];
format(msg, sizeof(msg), "❄️ %s has been frozen by %s.",
PlayerName[targetid], PlayerName[playerid]);
SendClientMessageToAll(COLOR_LIGHTBLUE, msg);
return 1;
}
CMD:unfreeze(playerid, params[]) {
if(!IsAdmin(playerid, 1)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 1+ to use this command.");
return 1;
}
new targetid;
if(sscanf(params, "u", targetid)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /unfreeze [playerid]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(!PlayerInfo[targetid][Frozen]) {
SendClientMessage(playerid, COLOR_YELLOW, "⚠ Player is not frozen.");
return 1;
}
TogglePlayerControllable(targetid, true);
PlayerInfo[targetid][Frozen] = false;
new msg[128];
format(msg, sizeof(msg), "🔥 %s has been unfrozen by %s.",
PlayerName[targetid], PlayerName[playerid]);
SendClientMessageToAll(COLOR_GREEN, msg);
return 1;
}
// ===================================================
// WARN SYSTEM
// ===================================================
CMD:warn(playerid, params[]) {
if(!IsAdmin(playerid, 1)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 1+ to use this command.");
return 1;
}
new targetid, reason[64];
if(sscanf(params, "us[64]", targetid, reason)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /warn [playerid] [reason]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(PlayerInfo[targetid][AdminLevel] >= PlayerInfo[playerid][AdminLevel]) {
SendClientMessage(playerid, COLOR_RED, "✖ You cannot warn higher or equal level admins.");
return 1;
}
PlayerInfo[targetid][WarnCount]++;
new msg[128];
format(msg, sizeof(msg), "⚠ %s has been warned by %s. Reason: %s (Warnings: %d/3)",
PlayerName[targetid], PlayerName[playerid], reason, PlayerInfo[targetid][WarnCount]);
SendClientMessageToAll(COLOR_YELLOW, msg);
format(msg, sizeof(msg), "⚠ You have been warned by %s. Reason: %s",
PlayerName[playerid], reason);
SendClientMessage(targetid, COLOR_RED, msg);
// Auto-kick after 3 warnings
if(PlayerInfo[targetid][WarnCount] >= 3) {
format(msg, sizeof(msg), "⛔ %s has been kicked (3 warnings reached).", PlayerName[targetid]);
SendClientMessageToAll(COLOR_RED, msg);
Kick(targetid);
}
return 1;
}
CMD:clearwarns(playerid, params[]) {
if(!IsAdmin(playerid, 2)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 2+ to use this command.");
return 1;
}
new targetid;
if(sscanf(params, "u", targetid)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /clearwarns [playerid]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
PlayerInfo[targetid][WarnCount] = 0;
new msg[128];
format(msg, sizeof(msg), "✔ All warnings cleared for %s.", PlayerName[targetid]);
SendClientMessage(playerid, COLOR_GREEN, msg);
SendClientMessage(targetid, COLOR_GREEN, "✔ Your warnings have been cleared.");
return 1;
}
// ===================================================
// JAIL / UNJAIL
// ===================================================
CMD:jail(playerid, params[]) {
if(!IsAdmin(playerid, 2)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 2+ to use this command.");
return 1;
}
new targetid, minutes;
if(sscanf(params, "uD", targetid, minutes)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /jail [playerid] [minutes]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(PlayerInfo[targetid][AdminLevel] >= PlayerInfo[playerid][AdminLevel]) {
SendClientMessage(playerid, COLOR_RED, "✖ You cannot jail higher or equal level admins.");
return 1;
}
// Save player's position
GetPlayerPos(targetid, PlayerInfo[targetid][JailX], PlayerInfo[targetid][JailY], PlayerInfo[targetid][JailZ]);
// Teleport to jail
SetPlayerPos(targetid, 264.5208, 77.6391, 1001.0391); // LS Jail
SetPlayerInterior(targetid, 6);
SetPlayerVirtualWorld(targetid, 0);
PlayerInfo[targetid][IsJailed] = true;
PlayerInfo[targetid][JailTime] = minutes * 60;
new msg[128];
format(msg, sizeof(msg), "⛓️ %s has been jailed for %d minutes by %s.",
PlayerName[targetid], minutes, PlayerName[playerid]);
SendClientMessageToAll(COLOR_ORANGE, msg);
format(msg, sizeof(msg), "⛓️ You have been jailed by %s for %d minutes.",
PlayerName[playerid], minutes);
SendClientMessage(targetid, COLOR_RED, msg);
return 1;
}
CMD:unjail(playerid, params[]) {
if(!IsAdmin(playerid, 2)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 2+ to use this command.");
return 1;
}
new targetid;
if(sscanf(params, "u", targetid)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /unjail [playerid]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(!PlayerInfo[targetid][IsJailed]) {
SendClientMessage(playerid, COLOR_YELLOW, "⚠ Player is not jailed.");
return 1;
}
// Teleport back
SetPlayerPos(targetid, PlayerInfo[targetid][JailX], PlayerInfo[targetid][JailY], PlayerInfo[targetid][JailZ]);
SetPlayerInterior(targetid, 0);
SetPlayerVirtualWorld(targetid, 0);
PlayerInfo[targetid][IsJailed] = false;
PlayerInfo[targetid][JailTime] = 0;
new msg[128];
format(msg, sizeof(msg), "🔓 %s has been unjailed by %s.",
PlayerName[targetid], PlayerName[playerid]);
SendClientMessageToAll(COLOR_GREEN, msg);
SendClientMessage(targetid, COLOR_GREEN, "✔ You have been released from jail.");
return 1;
}
// ===================================================
// SPECTATE MODE
// ===================================================
CMD:spectate(playerid, params[]) {
if(!IsAdmin(playerid, 2)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 2+ to use this command.");
return 1;
}
new targetid;
if(sscanf(params, "u", targetid)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /spectate [playerid]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(PlayerInfo[playerid][IsSpectating]) {
// Stop spectating
PlayerInfo[playerid][IsSpectating] = false;
TogglePlayerSpectating(playerid, false);
SetPlayerPos(playerid, 0.0, 0.0, 5.0);
SendClientMessage(playerid, COLOR_GREEN, "✔ Spectating mode disabled.");
return 1;
}
TogglePlayerSpectating(playerid, true);
PlayerSpectatePlayer(playerid, targetid);
PlayerInfo[playerid][IsSpectating] = true;
PlayerInfo[playerid][SpectateTarget] = targetid;
new msg[128];
format(msg, sizeof(msg), "👁️ You are now spectating %s.", PlayerName[targetid]);
SendClientMessage(playerid, COLOR_BLUE, msg);
SendClientMessage(playerid, COLOR_YELLOW, "🔴 Type /spectate again to stop.");
return 1;
}
// ===================================================
// GIVE MONEY & SET MONEY
// ===================================================
CMD:givemoney(playerid, params[]) {
if(!IsAdmin(playerid, 4)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 4+ to use this command.");
return 1;
}
new targetid, amount;
if(sscanf(params, "ud", targetid, amount)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /givemoney [playerid] [amount]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(amount < 1 || amount > 1000000) {
SendClientMessage(playerid, COLOR_RED, "✖ Amount must be between 1 and 1,000,000.");
return 1;
}
GivePlayerMoney(targetid, amount);
new msg[128];
format(msg, sizeof(msg), "✔ You gave $%d to %s.", amount, PlayerName[targetid]);
SendClientMessage(playerid, COLOR_GREEN, msg);
format(msg, sizeof(msg), "💰 Admin %s gave you $%d.", PlayerName[playerid], amount);
SendClientMessage(targetid, COLOR_LIME, msg);
return 1;
}
CMD:setmoney(playerid, params[]) {
if(!IsAdmin(playerid, 4)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 4+ to use this command.");
return 1;
}
new targetid, amount;
if(sscanf(params, "ud", targetid, amount)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /setmoney [playerid] [amount]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(amount < 0 || amount > 10000000) {
SendClientMessage(playerid, COLOR_RED, "✖ Amount must be between 0 and 10,000,000.");
return 1;
}
ResetPlayerMoney(targetid);
GivePlayerMoney(targetid, amount);
new msg[128];
format(msg, sizeof(msg), "✔ %s's money set to $%d.", PlayerName[targetid], amount);
SendClientMessage(playerid, COLOR_GREEN, msg);
format(msg, sizeof(msg), "💰 Admin %s set your money to $%d.", PlayerName[playerid], amount);
SendClientMessage(targetid, COLOR_LIME, msg);
return 1;
}
// ===================================================
// GIVE WEAPON
// ===================================================
CMD:giveweapon(playerid, params[]) {
if(!IsAdmin(playerid, 4)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 4+ to use this command.");
return 1;
}
new targetid, weaponid, ammo;
if(sscanf(params, "udd", targetid, weaponid, ammo)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /giveweapon [playerid] [weaponid] [ammo]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
if(weaponid < 0 || weaponid > 46) {
SendClientMessage(playerid, COLOR_RED, "✖ Invalid weapon ID (0-46).");
return 1;
}
GivePlayerWeapon(targetid, weaponid, ammo);
new msg[128];
format(msg, sizeof(msg), "✔ You gave weapon %d to %s.", weaponid, PlayerName[targetid]);
SendClientMessage(playerid, COLOR_GREEN, msg);
return 1;
}
CMD:resetweapons(playerid, params[]) {
if(!IsAdmin(playerid, 3)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 3+ to use this command.");
return 1;
}
new targetid;
if(sscanf(params, "u", targetid)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /resetweapons [playerid]");
return 1;
}
if(!IsPlayerConnected(targetid)) {
SendClientMessage(playerid, COLOR_RED, "✖ Player not connected.");
return 1;
}
ResetPlayerWeapons(targetid);
SendClientMessage(playerid, COLOR_GREEN, "✔ Weapons reset.");
SendClientMessage(targetid, COLOR_RED, "🔫 Your weapons have been removed by admin.");
return 1;
}
// ===================================================
// WEATHER & TIME
// ===================================================
CMD:setweather(playerid, params[]) {
if(!IsAdmin(playerid, 4)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 4+ to use this command.");
return 1;
}
new weatherid;
if(sscanf(params, "d", weatherid)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /setweather [weatherid (0-45)]");
return 1;
}
if(weatherid < 0 || weatherid > 45) {
SendClientMessage(playerid, COLOR_RED, "✖ Invalid weather ID (0-45).");
return 1;
}
SetWeather(weatherid);
new msg[128];
format(msg, sizeof(msg), "🌤️ Admin %s changed weather to %d.", PlayerName[playerid], weatherid);
SendClientMessageToAll(COLOR_LIGHTBLUE, msg);
return 1;
}
CMD:settime(playerid, params[]) {
if(!IsAdmin(playerid, 4)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 4+ to use this command.");
return 1;
}
new hour, minute = 0;
if(sscanf(params, "dD", hour, minute)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /settime [hour] [minute]");
return 1;
}
if(hour < 0 || hour > 23 || minute < 0 || minute > 59) {
SendClientMessage(playerid, COLOR_RED, "✖ Invalid time format.");
return 1;
}
SetWorldTime(hour);
new msg[128];
format(msg, sizeof(msg), "🕐 Admin %s set time to %02d:%02d.", PlayerName[playerid], hour, minute);
SendClientMessageToAll(COLOR_LIGHTBLUE, msg);
return 1;
}
// ===================================================
// ADMIN PANEL
// ===================================================
CMD:adminpanel(playerid, params[]) {
if(!IsAdmin(playerid, 1)) {
SendClientMessage(playerid, COLOR_RED, "✖ You don't have access to admin panel.");
return 1;
}
new dialog[1024];
strcat(dialog, "🔰 Admin Panel\n\n");
strcat(dialog, "1️⃣ Player Management\n");
strcat(dialog, "2️⃣ Server Management\n");
strcat(dialog, "3️⃣ Report System\n");
strcat(dialog, "4️⃣ Admin List\n");
strcat(dialog, "5️⃣ My Admin Info\n");
ShowPlayerDialog(playerid, DIALOG_ADMIN_PANEL, DIALOG_STYLE_LIST,
"Admin Panel", dialog, "Select", "Close");
return 1;
}
// ===================================================
// DIALOG RESPONSE
// ===================================================
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
if(!response) return 0;
switch(dialogid) {
case DIALOG_ADMIN_PANEL: {
switch(listitem) {
case 0: {
SendClientMessage(playerid, COLOR_LIGHTBLUE, "📋 Player Management Commands:");
SendClientMessage(playerid, -1, "/kick, /ban, /mute, /unmute, /freeze, /unfreeze");
SendClientMessage(playerid, -1, "/warn, /clearwarns, /jail, /unjail, /spectate");
}
case 1: {
SendClientMessage(playerid, COLOR_LIGHTBLUE, "⚙️ Server Management Commands:");
SendClientMessage(playerid, -1, "/setweather, /settime, /giveweapon, /resetweapons");
SendClientMessage(playerid, -1, "/givemoney, /setmoney");
}
case 2: {
ShowReportPanel(playerid);
}
case 3: {
ShowAdminList(playerid);
}
case 4: {
new msg[128];
format(msg, sizeof(msg), "🔰 Your Admin Level: %d (%s)",
PlayerInfo[playerid][AdminLevel],
GetAdminLevelName(PlayerInfo[playerid][AdminLevel]));
SendClientMessage(playerid, COLOR_ADMIN, msg);
}
}
}
}
return 1;
}
stock ShowAdminList(playerid) {
new dialog[1024];
strcat(dialog, "👑 Online Admins\n\n");
new count = 0;
for(new i = 0; i < MAX_PLAYERS; i++) {
if(IsPlayerConnected(i) && IsAdmin(i, 1)) {
new line[64];
format(line, sizeof(line), "%s (Level: %d)\n",
PlayerName[i], PlayerInfo[i][AdminLevel]);
strcat(dialog, line);
count++;
}
}
if(count == 0) {
strcat(dialog, "No admins online.");
}
ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_LIST,
"Admin List", dialog, "OK", "");
}
stock ShowReportPanel(playerid) {
ShowPlayerDialog(playerid, DIALOG_REPORT_PANEL, DIALOG_STYLE_INPUT,
"📝 Report System",
"Enter your report:",
"Send", "Cancel");
}
// ===================================================
// REPORT COMMAND (For Players)
// ===================================================
CMD:report(playerid, params[]) {
if(sscanf(params, "s[128]", params)) {
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /report [message]");
return 1;
}
new msg[256];
format(msg, sizeof(msg), "📝 Report from %s: %s", PlayerName[playerid], params);
SendAdminMessage(COLOR_PINK, msg, 1);
SendAdminMessage(COLOR_PINK, "Use /handle to view all reports", 1);
SendClientMessage(playerid, COLOR_GREEN, "✔ Your report has been sent to admins.");
return 1;
}
// ===================================================
// SERVERSIDE COMMANDS (Level 5+)
// ===================================================
CMD:restart(playerid, params[]) {
if(!IsAdmin(playerid, 5)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 5+ to use this command.");
return 1;
}
SendClientMessageToAll(COLOR_RED, "⚠️ Server is restarting in 5 seconds...");
SetTimer("ServerRestart", 5000, false);
return 1;
}
forward ServerRestart();
public ServerRestart() {
SendRconCommand("gmx");
}
CMD:shutdown(playerid, params[]) {
if(!IsAdmin(playerid, 6)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 6 to use this command.");
return 1;
}
SendClientMessageToAll(COLOR_RED, "⚠️ Server is shutting down...");
SetTimer("ServerShutdown", 3000, false);
return 1;
}
forward ServerShutdown();
public ServerShutdown() {
SendRconCommand("exit");
}
// ===================================================
// GODMODE & INVISIBLE (Level 6+)
// ===================================================
CMD:godmode(playerid, params[]) {
if(!IsAdmin(playerid, 6)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 6 to use this command.");
return 1;
}
PlayerInfo[playerid][GodMode] = !PlayerInfo[playerid][GodMode];
new msg[128];
format(msg, sizeof(msg), "⭐ Godmode %s.", PlayerInfo[playerid][GodMode] ? "Enabled" : "Disabled");
SendClientMessage(playerid, COLOR_ADMIN, msg);
return 1;
}
CMD:invisible(playerid, params[]) {
if(!IsAdmin(playerid, 6)) {
SendClientMessage(playerid, COLOR_RED, "✖ You need admin level 6 to use this command.");
return 1;
}
PlayerInfo[playerid][Invisible] = !PlayerInfo[playerid][Invisible];
new color = PlayerInfo[playerid][Invisible] ? COLOR_GREY : COLOR_WHITE;
new msg[128];
format(msg, sizeof(msg), "👻 Invisible %s.", PlayerInfo[playerid][Invisible] ? "Enabled" : "Disabled");
SendClientMessage(playerid, color, msg);
return 1;
}
// ===================================================
// ON PLAYER SPAWN (Jail Check)
// ===================================================
public OnPlayerSpawn(playerid) {
if(PlayerInfo[playerid][IsJailed]) {
SetPlayerPos(playerid, 264.5208, 77.6391, 1001.0391);
SetPlayerInterior(playerid, 6);
SendClientMessage(playerid, COLOR_RED, "⛓️ You are jailed! You cannot escape.");
return 0;
}
return 1;
}
// ===================================================
// TIMER FOR JAIL COUNTDOWN
// ===================================================
forward OnJailTimer();
public OnJailTimer() {
for(new i = 0; i < MAX_PLAYERS; i++) {
if(IsPlayerConnected(i) && PlayerInfo[i][IsJailed]) {
if(PlayerInfo[i][JailTime] > 0) {
PlayerInfo[i][JailTime]--;
// Show timer every 30 seconds
if(PlayerInfo[i][JailTime] % 30 == 0) {
new msg[64];
format(msg, sizeof(msg), "⏱️ Jail time remaining: %d seconds", PlayerInfo[i][JailTime]);
SendClientMessage(i, COLOR_ORANGE, msg);
}
} else {
// Auto unjail
new msg[128];
format(msg, sizeof(msg), "🔓 %s has been automatically unjailed.", PlayerName[i]);
SendClientMessageToAll(COLOR_GREEN, msg);
SetPlayerPos(i, PlayerInfo[i][JailX], PlayerInfo[i][JailY], PlayerInfo[i][JailZ]);
SetPlayerInterior(i, 0);
PlayerInfo[i][IsJailed] = false;
SendClientMessage(i, COLOR_GREEN, "✔ You have been released from jail.");
}
}
}
return 1;
}
// ===================================================
// ON GAMEMODE INIT
// ===================================================
public OnGameModeInit() {
SetTimer("OnJailTimer", 1000, true); // Jail timer (1 second)
SendRconCommand("hostname SA-MP: Full Admin System");
return 1;
}
// ===================================================
// END OF SCRIPT
// ===================================================