Guest User

Untitled

a guest
Dec 31st, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     s-Admin V1.5 Release
  3.         ->About:
  4.             s-Admin is a simple admin script with just the nessesary commands, why ?
  5.             Well i like admin scripts clean and usefull, and not full of useless commands.
  6.  
  7.             It supports MYSQL, but also Y_INI so the users can decide for themself if they want to use
  8.             textfiles or an online database. s-Admin also provides a dialogged GUI, the administrator can just
  9.             doubleclick on a player in the scorelist and it will show up a dialog with several options.
  10.  
  11.             s-Admin also saves the player stats (like score,money) and includes an anti-jail/mute evade.
  12.  
  13.         ->Commands:
  14.             Player      (Level 0):
  15.                 Command:        Parameters:                         Explaination:
  16.                 /admins         none                                Lists all online administrator
  17.                 /changepassword [oldpassword] [newpassword]         Allows the player to change his password
  18.                 /stats          none                                Rettreive's playerstats
  19.                 /whois          [playerid]                          Rettreive information about given playerid
  20.                 /whowas         [playername]                        Rettreive information about given playername
  21.                 /report         [playerid] [reason]                 Reports another player (this will be shown to online admins and in Rcon console)
  22.  
  23.             Moderator   (Level 1):
  24.                 Command:        Parameters:                         Explaination:
  25.                 /acmds          none                                Shows all admin commands
  26.                 /a              [text]                              Adminchat
  27.                 /announce       [text]                              Announce a message
  28.                 /spectate       [playerid]                          Spectate player
  29.                 /stop           none                                Stops spectating player
  30.                 /disarm         [playerid]                          Resets player weapons of playerid
  31.                 /mute           [playerid] [reason (optional)]      Mutes player
  32.                 /unmute         [playerid]                          Unmutes player
  33.                 /freeze         [playerid] [reason (optional)]      Freezes player
  34.                 /unfreeze       [playerid]                          Unfreezes player
  35.                 /jail           [playerid] [reason (optional)]      Jails player
  36.                 /unjail         [playerid]                          Unjails player
  37.                 /kick           [playerid] [reason (optional)]      Kicks player
  38.  
  39.             Administrator   (Level 2):
  40.                 Command:        Parameters:                         Explaination:
  41.                 /veh            [vehiclename]                       Spawns a vehicle for the admin
  42.                 /get            [playerid]                          Teleports given playerid to the admin
  43.                 /goto           [playerid]                          Teleports admin to the given playerid
  44.                 /giveweapon     [playerid][weaponid][ammo]          Gives weapon to given playerid
  45.                 /setmoney       [playerid][ammount]                 Changes money of playerid
  46.                 /setscore       [playerid][ammount]                 Changes score of playerid
  47.                 /explode        [playerid]                          Explodes playerid
  48.                 /ban            [playerid] [reason (optional)]      Bans the playerid
  49.                 /banip          [ip]                                Bans the given IP
  50.                 /annoy          [playerid]                          Releases a cow on the player! (Known from Hiddos's annoying cow script)
  51.                 /catchcow                                           Removes released cow
  52.  
  53.             Owner           (Level 3):
  54.                 Command:        Parameters:                         Explaination:
  55.                 /setlevel       [playerid][level]                   Adjust the rights of the player (Level 0/3)
  56.                 /unbanip        [ip]                                Unbans the given IP
  57.  
  58.  
  59.         ->Credits:
  60.             Hiddos for his annoying cow script
  61.             Zeex for ZCMD
  62.             Y_Less for sscanf2
  63.             Y_Less for Y_INI
  64.             G-sTyLeZzZ for his MYSQL Plugin
  65.  
  66.         ->Changelog:
  67.             1b:
  68.                 - /stats colors are better
  69.                 - /admins colors are better
  70.                 - adminchat has now a space
  71.             1c:
  72.                 - You cannot click on yourself in the scorelist anymore
  73.                 - /countdown command added
  74.                 - /veh has been optimised
  75.                 - /giveweapon is now using weapon names instead of ID's
  76.                 - s-Admin is now using gLibrary 1.1
  77.             1.1:
  78.                 - Optimised code (using gLibrary 1.2) and better colors
  79.                 - s-Admin now also saves IP
  80.                 - passwords will now be hashed with WhirlPool
  81.                 - /whois is now public
  82.                 - /whowas added
  83.             1.2:
  84.                 - Returns fixed
  85.                 - Colors changed again (looks much better now)
  86.                 - Some VERY important security issues fixed (logging in)
  87.                 - Return problem fixed (compability with other scripts using dialogs)
  88.             1.3:
  89.                 - System uses new gLibrary (problem solved with OnPlayerDisconnect)
  90.             1.4
  91.                 - /veh has been fixed
  92.                 - /report has been fixed
  93.             1.5
  94.                 - gLibrary has been updated fixing the chat bug
  95.                 - login dialog for existing users is now using password dialog style
  96. */
  97. #include <a_samp>
  98. #include <sscanf2>
  99. #include <zcmd>
  100. #include <gLibrary>
  101. native WP_Hash(buffer[], len, const str[]);
  102. //================================================================================================================
  103. //------------------Settings------------------
  104. #define USE_MYSQL_DATABASE              false       //if defined false, it will use Y_INI (text files) instead
  105.  
  106. #define MAX_LOGIN_ATTEMPTS              3           //maximum login attempts before kick
  107. #define DIALOG_RANGE                    100         //dialog range (100 by default, will use dialogid's 100-104)
  108.  
  109. #define ALLOW_ANNOY                     true        //allow administrators so release a crazy cow on players!
  110. #define ALLOW_ADMINS                    true        //you can turn this off if you dont want to allow players using /admins to see if there is an admin online
  111. #define ALLOW_VEH                       true        //allows admins to spawn vehicles
  112. //----------------SQL Settings----------------      //only needs to be set when you use mysql db
  113. #define HOST    "localhost"
  114. #define USER    "root"
  115. #define DB      "s-admin"
  116. #define PASS    ""
  117.  
  118. //================================================================================================================
  119. //ignore these
  120. #define abs(%0) ((%0) >= 0 ? (%0) : -(%0))
  121. new cow_victim = -1, object_cow, movecow_timer;
  122. #if USE_MYSQL_DATABASE == true
  123.     #include <yoursql>
  124. #else
  125.     #define MAX_INI_ENTRY_TEXT 129
  126.     #include <YSI/y_ini>
  127. #endif
  128. #define color_red gCOLOR_RED
  129. #define color_green gCOLOR_GREEN
  130. #define color_gray gCOLOR_GRAY
  131. #define color_orange gCOLOR_ORANGE
  132. #define color_blue 0xADD8E6FF
  133. #define color_yellow gCOLOR_YELLOW
  134. #define DIALOG_REGISTER DIALOG_RANGE
  135. #define DIALOG_LOGIN DIALOG_RANGE +1
  136. #define DIALOG_CHANGENICK DIALOG_RANGE +2
  137. #define DIALOG_REPORT DIALOG_RANGE +3
  138. #define DIALOG_ADMIN DIALOG_RANGE +4
  139.  
  140. enum gPlayerInfo
  141. {
  142.     Username[32],
  143.     Password[129],
  144.     Muted,
  145.     Jailed,
  146.     Score,
  147.     Money,
  148.     Level,
  149.     Ip[32]
  150. }
  151. new PlayerInfo[MAX_PLAYERS][gPlayerInfo];
  152.  
  153. enum gTempInfo
  154. {
  155.     Username[32],
  156.     Password[129],
  157.     Muted,
  158.     Jailed,
  159.     Score,
  160.     Money,
  161.     Level,
  162.     Ip[32]
  163. }
  164. new TempInfo[gPlayerInfo];
  165.  
  166. new UpdateSpectateTimer[MAX_PLAYERS];
  167. new bool:CountDownInProgress = false;
  168. new countdown_counter = 5;
  169.  
  170. //================================================================================================================
  171. //basic script
  172. public OnFilterScriptInit()
  173. {
  174.     print("\n--------------------------------------");
  175.     print("     Gamer's admin script       V1.5    ");
  176.     print("--------------------------------------\n");
  177.     #if USE_MYSQL_DATABASE == true
  178.         yoursql_connect(HOST,USER,DB,PASS);
  179.     #endif
  180.     for(new i = 0;i<MAX_PLAYERS;i++)
  181.     {
  182.         if(!IsPlayerConnected(i)) continue;
  183.         OnPlayerConnect(i);
  184.     }
  185.     return 1;
  186. }
  187.  
  188. public OnFilterScriptExit()
  189. {
  190.     for(new i = 0;i<MAX_PLAYERS;i++)
  191.     {
  192.         if(!IsPlayerConnected(i)) continue;
  193.         SaveUser(i);
  194.     }
  195.     #if USE_MYSQL_DATABASE == true
  196.         yoursql_close();
  197.     #endif
  198.     return 1;
  199. }
  200.  
  201. public OnPlayerConnect(playerid)
  202. {
  203.     format(PlayerInfo[playerid][Username],32," ");
  204.     format(PlayerInfo[playerid][Password],32," ");
  205.     PlayerInfo[playerid][Level] = 0;
  206.     new pName[MAX_PLAYER_NAME],string[96];GetPlayerName(playerid,pName,sizeof pName);
  207.     if(IsPlayerNPC(playerid)) return 1;
  208.     #if USE_MYSQL_DATABASE == true
  209.         format(string,sizeof string,"SELECT * FROM users WHERE Username = '%s'",yoursql_escape_string(pName));
  210.         if(yoursql_countrows(string) == 0)
  211.         {
  212.             ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Account registration","You need to register in order to play on this server! Please fill in a password.","Register","Quit");
  213.         } else {
  214.             LoadUser(playerid,pName);
  215.             ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Account registration","This account is registered! Please fill in a password to join.","Login","Change name");
  216.             SetPVarInt(playerid,"attempt",0);
  217.         }
  218.     #else
  219.         format(string,sizeof string,"Users/%s.ini",pName);
  220.         if(!fexist(string))
  221.         {
  222.             ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Account registration","You need to register in order to play on this server! Please fill in a password.","Register","Quit");
  223.         } else {
  224.             LoadUser(playerid,pName);
  225.             ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Account registration","This account is registered! Please fill in a password to join.","Login","Change name");
  226.             SetPVarInt(playerid,"attempt",0);
  227.         }
  228.     #endif
  229.     return 1;
  230. }
  231. public OnPlayerSpawn(playerid)
  232. {
  233.     if(PlayerInfo[playerid][Jailed] == 1)
  234.     {
  235.         SendClientMessageToAllEx(color_red,"ss",PlayerInfo[playerid][Username]," is automaticly jailed (Jail evade).");
  236.         SetTimerEx("JailOnSpawnDelay",1000,false,"i",playerid);
  237.     } else if (PlayerInfo[playerid][Muted] == 1){
  238.         SendClientMessageToAllEx(color_red,"ss",PlayerInfo[playerid][Username]," is automaticly muted (Mute evade).");
  239.     }
  240.     return 1;
  241. }
  242. forward JailOnSpawnDelay(playerid);
  243. public JailOnSpawnDelay(playerid)
  244. {
  245.     JailPlayer(playerid);
  246. }
  247.  
  248. public OnPlayerDisconnect(playerid, reason)
  249. {
  250.     if(!IsPlayerNPC(playerid))
  251.     {
  252.         SaveUser(playerid);
  253.         if(cow_victim == playerid)
  254.         {
  255.             StopAnnoying();
  256.         }
  257.     }
  258.     return 1;
  259. }
  260.  
  261. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  262. {
  263.     if(playerid == clickedplayerid) return SendClientMessage(playerid,color_red,"You cannot open the usermenu for yourself!");
  264.     SetPVarInt(playerid,"selectedid",clickedplayerid);
  265.     switch(PlayerInfo[playerid][Level])
  266.     {
  267.         case 0:{
  268.             if(!IsPlayerAdmin(playerid))
  269.             {
  270.                 ShowPlayerDialog(playerid,DIALOG_REPORT,DIALOG_STYLE_INPUT,"Report player","Please fill in a valid reason:","OK","Cancel");
  271.             } else ShowPlayerDialog(playerid,DIALOG_ADMIN,DIALOG_STYLE_LIST,"Administrator menu","Spectate\nDisarm\nMute\nUnmute\nFreeze\nUnfreeze\nJail\nUnjail\nKick\nGet\nGoto\nAnnoy\nBan","OK","Cancel");
  272.         }
  273.         case 1:ShowPlayerDialog(playerid,DIALOG_ADMIN,DIALOG_STYLE_LIST,"Moderator menu","Spectate\nDisarm\nMute\nUnmute\nFreeze\nUnfreeze\nJail\nUnjail\nKick","OK","Cancel");
  274.         case 2,3:ShowPlayerDialog(playerid,DIALOG_ADMIN,DIALOG_STYLE_LIST,"Administrator menu","Spectate\nDisarm\nMute\nUnmute\nFreeze\nUnfreeze\n\nJail\nUnjail\nKick\nGet\nGoto\nAnnoy\nBan","OK","Cancel");
  275.     }
  276.     return 1;
  277. }
  278.  
  279. //================================================================================================================
  280. //dialog handler
  281. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  282. {
  283.     switch(dialogid)
  284.     {
  285.         case(DIALOG_REGISTER):
  286.         {
  287.             if(!response)
  288.             {
  289.                 SendClientMessageToAllEx(color_gray,"ss",PlayerInfo[playerid][Username]," has been kicked by the server (Quit at registration).");
  290.                 Kick(playerid);
  291.             }
  292.             OnPlayerRegister(playerid,inputtext);
  293.         }
  294.  
  295.         case(DIALOG_LOGIN):
  296.         {
  297.             if(!response) return ShowPlayerDialog(playerid,DIALOG_CHANGENICK,DIALOG_STYLE_INPUT,"Account registration","Please fill in a nickname:","OK","Quit");
  298.             if(GetPVarInt(playerid,"attempt") == MAX_LOGIN_ATTEMPTS)
  299.             {
  300.                 SendClientMessageToAllEx(color_gray,"ss",PlayerInfo[playerid][Username]," has been kicked by the server (Failed to login).");
  301.                 Kick(playerid);
  302.             } else {
  303.                 if(!strlen(inputtext))
  304.                 {
  305.                     SendClientMessageEx(playerid,color_red,"sisis","You have failed to login (attempt ",GetPVarInt(playerid,"attempt") +1,"/",MAX_LOGIN_ATTEMPTS,").");
  306.                     ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Account registration","This account is registered! Please fill in a password to join.","Login","Change username");
  307.                     SetPVarInt(playerid,"attempt",GetPVarInt(playerid,"attempt") +1);
  308.                     printf("%s failed to login (attempt %i/%i).",PlayerInfo[playerid][Username],GetPVarInt(playerid,"attempt"),MAX_LOGIN_ATTEMPTS);
  309.                 }
  310.                 new buffer[129];WP_Hash(buffer,sizeof buffer,inputtext);
  311.                 if(!strcmp(buffer,PlayerInfo[playerid][Password]))
  312.                 {
  313.                     if(PlayerInfo[playerid][Level] > 0)
  314.                     {
  315.                         SendClientMessageEx(playerid,color_green,"sis","You have succesfully logged in as level ",PlayerInfo[playerid][Level]," admin!");
  316.                     } else SendClientMessage(playerid,color_green,"You have succesfully logged in.");
  317.                     SendClientMessageToAllEx(color_green,"ss",PlayerInfo[playerid][Username]," has logged in, welcome back!");
  318.                     printf("%s has logged in.",PlayerInfo[playerid][Username]);
  319.                 } else {
  320.                     SendClientMessageEx(playerid,color_red,"sisis","You have failed to login (attempt ",GetPVarInt(playerid,"attempt") +1,"/",MAX_LOGIN_ATTEMPTS,").");
  321.                     ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Account registration","This account is registered! Please fill in a password to join.","Login","Change username");
  322.                     SetPVarInt(playerid,"attempt",GetPVarInt(playerid,"attempt") +1);
  323.                     printf("%s failed to login (attempt %i/%i).",PlayerInfo[playerid][Username],GetPVarInt(playerid,"attempt"),MAX_LOGIN_ATTEMPTS);
  324.                 }
  325.             }
  326.         }
  327.  
  328.         case(DIALOG_CHANGENICK):
  329.         {
  330.             if(!response)
  331.             {
  332.                 SendClientMessageToAllEx(color_gray,"ss",PlayerInfo[playerid][Username]," has been kicked by the server (Quit at registration).");
  333.                 Kick(playerid);
  334.             }
  335.             if(!strlen(inputtext))
  336.             {
  337.                 SendClientMessage(playerid,color_red,"Account registration: Please fill in a valid username!");
  338.                 ShowPlayerDialog(playerid,DIALOG_CHANGENICK,DIALOG_STYLE_INPUT,"Account registration","Please fill in a nickname:","OK","Quit");
  339.             }
  340.             SetPlayerName(playerid,inputtext);
  341.             OnPlayerConnect(playerid);
  342.         }
  343.         case(DIALOG_REPORT):
  344.         {
  345.             if(!response) return 1;
  346.             new id = GetPVarInt(playerid,"selectedid");
  347.             new reason[64];format(reason,sizeof reason,"%s",inputtext);
  348.             if(!strlen(reason)) return SendClientMessage(playerid,color_red,"No valid reason.");
  349.             new counter = 0;for(new i = 0;i<MAX_PLAYERS;i++)
  350.             {
  351.                 if(!IsPlayerConnected(i)) continue;
  352.                 if(PlayerInfo[i][Level] > 0)
  353.                 {
  354.                     SendClientMessageEx(i,color_orange,"sssisssisss","Incomming report from ",PlayerInfo[playerid][Username],"(",playerid,") Reporting ",PlayerInfo[id][Username],"(",id,"), Reason: ",reason,".");
  355.                     counter++;
  356.                 }
  357.             }
  358.             printf("%s has reported %s (Reason:%s)",PlayerInfo[playerid][Username],PlayerInfo[id][Username],reason);
  359.             return SendClientMessageEx(playerid,color_orange,"sis","Your report has been sent to all online administrators (",counter," at the moment).");
  360.         }
  361.         case(DIALOG_ADMIN):
  362.         {
  363.             if(!response) return 1;
  364.             new id = GetPVarInt(playerid,"selectedid");
  365.             switch(listitem)
  366.             {
  367.                 case 0://spectate
  368.                 {
  369.                     if(GetPVarInt(playerid,"spectating") == 1) return SendClientMessage(playerid,color_red,"You are already spectating! Please use /stop to turn spectatemode off.");
  370.                     TogglePlayerSpectating(playerid,1);
  371.                     SetPVarInt(playerid,"spectating",1);
  372.                     if(IsPlayerInAnyVehicle(id))
  373.                     {
  374.                         SetPVarInt(playerid,"state",1);
  375.                         PlayerSpectateVehicle(playerid,GetPlayerVehicleID(id));
  376.                     } else {
  377.                         SetPVarInt(playerid,"state",0);
  378.                         PlayerSpectatePlayer(playerid,id);
  379.                     }
  380.                     UpdateSpectateTimer[playerid] = SetTimerEx("UpdateAdminSpectate",1000,true,"ii",playerid,id);
  381.                     return SendClientMessageEx(playerid,color_green,"sss","You are now spectating ",PlayerInfo[id][Username]," . You can use /stop to switch back to normal mode.");
  382.                 }
  383.                 case 1: //disarm
  384.                 {
  385.                     ResetPlayerWeapons(id);
  386.                     return SendClientMessageToAllEx(color_red,"ssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} disarmed ",PlayerInfo[id][Username],".");
  387.                 }
  388.                 case 2://mute
  389.                 {
  390.                     if(PlayerInfo[id][Muted] == 1) return SendClientMessage(playerid,color_red,"Player is already muted!");
  391.                     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} muted ",PlayerInfo[id][Username],".");
  392.                     PlayerInfo[id][Muted] = 1;
  393.                     return MutePlayer(id);
  394.                 }
  395.                 case 3://unmute
  396.                 {
  397.                     if(PlayerInfo[id][Muted] == 0) return SendClientMessage(playerid,color_red,"Player is not muted!");
  398.                     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} unmuted ",PlayerInfo[id][Username],".");
  399.                     PlayerInfo[id][Muted] = 0;
  400.                     return UnMutePlayer(id);
  401.                 }
  402.                 case 4://freeze
  403.                 {
  404.                     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} froze ",PlayerInfo[id][Username],".");
  405.                     return TogglePlayerControllable(id,0);
  406.                 }
  407.                 case 5://unfreeze
  408.                 {
  409.                     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} unfroze ",PlayerInfo[id][Username],".");
  410.                     return TogglePlayerControllable(id,1);
  411.                 }
  412.                 case 6://jail
  413.                 {
  414.                     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} jailed ",PlayerInfo[id][Username],".");
  415.                     PlayerInfo[id][Jailed] = 1;
  416.                     return JailPlayer(id);
  417.                 }
  418.                 case 7: //unjail
  419.                 {
  420.                     if(PlayerInfo[id][Jailed] == 0) return SendClientMessage(playerid,color_red,"Player is not jailed!");
  421.                     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} unjailed ",PlayerInfo[id][Username],".");
  422.                     PlayerInfo[id][Jailed] = 0;
  423.                     return UnJailPlayer(id);
  424.                 }
  425.                 case 8://kick
  426.                 {
  427.                     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} kicked ",PlayerInfo[id][Username],".");
  428.                     return Kick(id);
  429.                 }
  430.                 case 9://get
  431.                 {
  432.                     new Float:x,Float:y,Float:z;GetPlayerPos(playerid,x,y,z);x = x +2;
  433.                     SetPlayerPos(id,x,y,z);
  434.                     SendClientMessageEx(playerid,color_green,"sss","You have teleported ",PlayerInfo[id][Username]," to your position!");
  435.                     return SendClientMessageEx(id,color_green,"sss","Administrator ",PlayerInfo[playerid][Username]," has teleported you to his position!");
  436.                 }
  437.                 case 10://goto
  438.                 {
  439.                     new Float:x,Float:y,Float:z;GetPlayerPos(id,x,y,z);x = x +2;
  440.                     SetPlayerPos(playerid,x,y,z);
  441.                     return SendClientMessageEx(playerid,color_red,"sss","You have teleported to ",PlayerInfo[id][Username],"'s position!");
  442.                 }
  443.                 case 11://annoy
  444.                 {
  445.                     if(cow_victim != -1) return SendClientMessage(playerid,color_red,"Sorry! It seems like your cow has already been stolen by another administrator.");
  446.                     #if ALLOW_ANNOY == false
  447.                         return SendClientMessage(playerid,color_red,"Sorry! This feature has been disabled.");
  448.                     #else
  449.                     AnnoyPlayer(id);
  450.                     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} has released his cow on ",PlayerInfo[id][Username]," !!!");
  451.                     return SendClientMessageEx(playerid,color_green,"sss","You have released your cow on ",PlayerInfo[id][Username],"! please use /catchcow to bring him back.");
  452.                     #endif
  453.                 }
  454.                 case 12://ban
  455.                 {
  456.                     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} banned ",PlayerInfo[id][Username],".");
  457.                     return Ban(id);
  458.                 }
  459.             }
  460.         }
  461.     }
  462.     return 0;
  463. }
  464. //================================================================================================================
  465. //Player commands:
  466. COMMAND:in(playerid,params[])
  467. {
  468.     return SendClientMessageEx(playerid,gCOLOR_RED,"sf","Speed: ",GetVehicleSpeed(GetPlayerVehicleID(playerid),0));
  469. }
  470.  
  471. COMMAND:test(playerid,params[])
  472. {
  473.     return PutPlayerInVehicle(playerid,GetClosestVehicleForPlayer(playerid),0);
  474. }
  475.  
  476. COMMAND:reconnect(playerid,params[])
  477. {
  478.     SendClientMessage(playerid,gCOLOR_RED,"You will now be reconnected to the server, DO NOT LEAVE!");
  479.     SetPlayerToReconnect(playerid);
  480.     return 1;
  481. }
  482. COMMAND:changepassword(playerid,params[])
  483. {
  484.     new oldpass[129],newpass[129];
  485.     if(sscanf(params,"s[32]s[32]",oldpass,newpass)) return SendClientMessage(playerid,color_red,"USAGE: /changepassword [oldpassword] [newpassword]");
  486.     WP_Hash(oldpass,sizeof oldpass,oldpass);
  487.     if(strcmp(PlayerInfo[playerid][Password],oldpass)) return SendClientMessage(playerid,color_red,"ERROR! Your current password does not match with your entered password!");
  488.     #if USE_MYSQL_DATABASE == true
  489.         WP_Hash(PlayerInfo[playerid][Password],129,newpass);
  490.     #else
  491.         WP_Hash(PlayerInfo[playerid][Password],129,newpass);
  492.     #endif
  493.     SaveUser(playerid);
  494.     return SendClientMessage(playerid,color_green,"Your password has succesfully been changed.");
  495. }
  496. COMMAND:stats(playerid,params[])
  497. {
  498.     SendClientMessage(playerid,color_green,"Your current stats:");
  499.     SendClientMessageEx(playerid,color_yellow,"sis","Score: ",GetPlayerScore(playerid),".");
  500.     SendClientMessageEx(playerid,color_yellow,"sis","Money: ",GetPlayerMoney(playerid),".");
  501.     return 1;
  502. }
  503.  
  504. COMMAND:whois(playerid,params[])
  505. {
  506.     new id;
  507.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /whois [playerid]");
  508.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  509.     SendClientMessageEx(playerid,color_orange,"sis","Who is ID ",id,".");
  510.     SendClientMessageEx(playerid,color_yellow,"sss","Username: {FFFFFF}",PlayerInfo[id][Username],".");
  511.     switch(PlayerInfo[id][Level])
  512.     {
  513.         case 0:SendClientMessage(playerid,color_yellow,"Level: {FFFFFF}Player.");
  514.         case 1:SendClientMessage(playerid,color_yellow,"Level: {FFFFFF}Moderator.");
  515.         case 2:SendClientMessage(playerid,color_yellow,"Level: {FFFFFF}Administrator.");
  516.         case 3:SendClientMessage(playerid,color_yellow,"Level: {FFFFFF}Server owner.");
  517.     }
  518.     SendClientMessageEx(playerid,color_yellow,"sis","Score: ",GetPlayerScore(id),".");
  519.     SendClientMessageEx(playerid,color_yellow,"sis","Money: ",GetPlayerMoney(id),".");
  520.     SendClientMessageEx(playerid,color_yellow,"sss","IP: ",GetPlayerIpEx(id),".");
  521.     return 1;
  522. }
  523.  
  524. COMMAND:whowas(playerid,params[])
  525. {
  526.     new pName[MAX_PLAYER_NAME];
  527.     if(sscanf(params,"s[32]",pName)) return SendClientMessage(playerid,color_red,"USAGE: /whowas [playername]");
  528.  
  529.     #if USE_MYSQL_DATABASE == true
  530.         new query[128];format(query,sizeof query,"SELECT * FROM users WHERE Username = '%s'",pName);
  531.         if(yoursql_countrows(query) != 1) return SendClientMessage(playerid,color_red,"User not found in our database!");
  532.         format(query,sizeof query,"Username = '%s'",pName);
  533.         sscanf(yoursql_receive("users",query),"p<|>e<s[32]s[129]iiiiis[32]>",TempInfo);
  534.     #else
  535.         new file[64];format(file,sizeof file,"Users/%s.ini",pName);
  536.         if(!fexist(file)) return SendClientMessage(playerid,color_red,"User not found in our database!");
  537.         INI_ParseFile(file, "YINI_TEMPLOAD", .bExtra = true, .extra = playerid);
  538.     #endif
  539.  
  540.     SendClientMessageEx(playerid,color_orange,"sss","Who was ",pName,".");
  541.     SendClientMessageEx(playerid,color_yellow,"sss","Username: {FFFFFF}",TempInfo[Username],".");
  542.     switch(TempInfo[Level])
  543.     {
  544.         case 0:SendClientMessage(playerid,color_yellow,"Level: {FFFFFF}Player.");
  545.         case 1:SendClientMessage(playerid,color_yellow,"Level: {FFFFFF}Moderator.");
  546.         case 2:SendClientMessage(playerid,color_yellow,"Level: {FFFFFF}Administrator.");
  547.         case 3:SendClientMessage(playerid,color_yellow,"Level: {FFFFFF}Server owner.");
  548.     }
  549.     SendClientMessageEx(playerid,color_yellow,"sis","Score: ",TempInfo[Score],".");
  550.     SendClientMessageEx(playerid,color_yellow,"sis","Money: ",TempInfo[Money],".");
  551.     SendClientMessageEx(playerid,color_yellow,"sss","IP: ",TempInfo[Ip],".");
  552.     format(TempInfo[Username],32," ");
  553.     format(TempInfo[Password],192," ");
  554.     format(TempInfo[Muted],32," ");
  555.     format(TempInfo[Jailed],32," ");
  556.     format(TempInfo[Score],32," ");
  557.     format(TempInfo[Money],32," ");
  558.     format(TempInfo[Level],32," ");
  559.     format(TempInfo[Ip],32," ");
  560.     return 1;
  561. }
  562. forward YINI_TEMPLOAD(playerid,Name[],Value[]);
  563. public YINI_TEMPLOAD(playerid,Name[],Value[])
  564. {
  565.     if(!strcmp(Name,"Username")){format(TempInfo[Username],32,"%s",Value);}
  566.     if(!strcmp(Name,"Score")){TempInfo[Score] = strval(Value);}
  567.     if(!strcmp(Name,"Money")){TempInfo[Money] = strval(Value);}
  568.     if(!strcmp(Name,"Level")){TempInfo[Level] = strval(Value);}
  569.     if(!strcmp(Name,"Ip")){format(TempInfo[Ip],32,"%s",Value);}
  570.     return 1;
  571. }
  572.  
  573. COMMAND:report(playerid,params[])
  574. {
  575.     new id,reason[64];
  576.     if(sscanf(params,"is[64]",id,reason)) return SendClientMessage(playerid,color_red,"USAGE: /report [playerid] [reason]");
  577.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  578.     new counter = 0;for(new i = 0;i<MAX_PLAYERS;i++)
  579.     {
  580.         if(!IsPlayerConnected(i)) continue;
  581.         if(PlayerInfo[i][Level] > 0)
  582.         {
  583.             SendClientMessageEx(i,color_orange,"sssisssisss","Incomming report from ",PlayerInfo[playerid][Username],"(",playerid,") Reporting ",PlayerInfo[id][Username],"(",id,"), Reason: ",reason,".");
  584.             counter++;
  585.         }
  586.     }
  587.     printf("%s has reported %s (Reason:%s)",PlayerInfo[playerid][Username],PlayerInfo[id][Username],reason);
  588.     return SendClientMessageEx(playerid,color_orange,"sis","Your report has been sent to all online administrators (",counter," at the moment).");
  589. }
  590. COMMAND:admins(playerid,params[])
  591. {
  592.     #if ALLOW_ADMINS == false
  593.         return SendClientMessage(playerid,color_red,"Sorry! This feature has been disabled.");
  594.     #else
  595.         new counter = 0;
  596.         SendClientMessage(playerid,color_green,"Online admins:");
  597.         for(new i = 0;i<MAX_PLAYERS;i++)
  598.         {
  599.             if(!IsPlayerConnected(i)) continue;
  600.             if(PlayerInfo[i][Level] > 0)
  601.             {
  602.                 SendClientMessageEx(playerid,color_orange,"s",PlayerInfo[i][Username]);
  603.                 counter++;
  604.             }
  605.         }
  606.         if(counter == 0)
  607.         {
  608.             SendClientMessage(playerid,color_red,"There are no admins online!");
  609.         }
  610.         return 1;
  611.     #endif
  612. }
  613.  
  614. COMMAND:acmds(playerid,params[])
  615. {
  616.     if(PlayerInfo[playerid][Level] == 0) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  617.     SendClientMessage(playerid,color_orange,"Moderator (Level 1 and up):");
  618.     SendClientMessage(playerid,color_yellow,"/a /countdown /whois /announce /spectate /disarm /(un)mute /(un)freeze /(un)jail /kick");
  619.     SendClientMessage(playerid,color_orange,"Administrator (Level 2 and up):");
  620.     SendClientMessage(playerid,color_yellow,"/veh /get /goto /giveweapon /setmoney /setscore /explode /ban /banip /annoy");
  621.     SendClientMessage(playerid,color_orange,"Owner (Level 3):");
  622.     SendClientMessage(playerid,color_yellow,"/setlevel /unbanip");
  623.     return 1;
  624. }
  625.  
  626. //================================================================================================================
  627. //Moderator commands
  628. COMMAND:a(playerid,params[])
  629. {
  630.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  631.     new text[128];
  632.     if(sscanf(params,"s[128]",text)) return SendClientMessage(playerid,color_red,"USAGE: /a [text]");
  633.     for(new i = 0;i<MAX_PLAYERS;i++)
  634.     {
  635.         if(!IsPlayerConnected(i)) continue;
  636.         if(PlayerInfo[i][Level] < 1) continue;
  637.         SendClientMessageEx(i,color_yellow,"ssss","Adminchat: ",PlayerInfo[playerid][Username],": {FFFFFF}",text);
  638.     }
  639.     return 1;
  640. }
  641.  
  642. COMMAND:countdown(playerid,params[])
  643. {
  644.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  645.     if(CountDownInProgress == true) return SendClientMessage(playerid,color_red,"There is already a countdown in progress!");
  646.     CountDownInProgress = true;
  647.     SetTimer("countdown",1000,false);
  648.     SendClientMessageToAllEx(color_red,"sss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} has started a countdown!");
  649.     return 1;
  650. }
  651. forward countdown();
  652. public countdown()
  653. {
  654.     if(countdown_counter == 0){countdown_counter = 5;CountDownInProgress = false;return GameTextForAll("GO GO GO!",1000,6);}
  655.     new str[32];format(str,sizeof str,"~g~%i",countdown_counter);
  656.     GameTextForAll(str,1000,6);
  657.     countdown_counter--;
  658.     return SetTimer("countdown",1000,false);
  659. }
  660.  
  661.  
  662. COMMAND:announce(playerid,params[])
  663. {
  664.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  665.     new msg[128];
  666.     if(sscanf(params,"s",msg)) return SendClientMessage(playerid,color_red,"USAGE: /announce [text]");
  667.     SendClientMessageToAllEx(color_yellow,"ss","ANNOUNCEMENT: ",msg);
  668.     return GameTextForAll(msg,5000,4);
  669. }
  670. COMMAND:spectate(playerid,params[])
  671. {
  672.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  673.     new id;
  674.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /spectate [id]");
  675.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  676.     if(id == playerid) return SendClientMessage(playerid,color_red,"You cannot spectate yourself!");
  677.     if(GetPVarInt(playerid,"spectating") == 1) return SendClientMessage(playerid,color_red,"You are already spectating! Please use /stop to turn spectatemode off.");
  678.     TogglePlayerSpectating(playerid,1);
  679.     SetPVarInt(playerid,"spectating",1);
  680.     if(IsPlayerInAnyVehicle(id))
  681.     {
  682.         SetPVarInt(playerid,"state",1);
  683.         PlayerSpectateVehicle(playerid,GetPlayerVehicleID(id));
  684.     } else {
  685.         SetPVarInt(playerid,"state",0);
  686.         PlayerSpectatePlayer(playerid,id);
  687.     }
  688.     UpdateSpectateTimer[playerid] = SetTimerEx("UpdateAdminSpectate",1000,true,"ii",playerid,id);
  689.     return SendClientMessageEx(playerid,color_green,"sss","You are now spectating ",PlayerInfo[id][Username]," . You can use /stop to switch back to normal mode.");
  690. }
  691. forward UpdateAdminSpectate(playerid,id);
  692. public UpdateAdminSpectate(playerid,id)
  693. {
  694.     if(GetPVarInt(playerid,"state") == 1 && !IsPlayerInAnyVehicle(id))
  695.     {
  696.         PlayerSpectatePlayer(playerid,id);
  697.         SetPVarInt(playerid,"state",0);
  698.     } else if (GetPVarInt(playerid,"state") == 0 && IsPlayerInAnyVehicle(id)) {
  699.         PlayerSpectateVehicle(playerid,GetPlayerVehicleID(id));
  700.         SetPVarInt(playerid,"state",1);
  701.     }
  702. }
  703.  
  704. COMMAND:stop(playerid,params[])
  705. {
  706.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  707.     if(GetPVarInt(playerid,"spectating") == 0) return SendClientMessage(playerid,color_red,"You are not spectating a player! use /spectate [ID] to spectate a player.");
  708.     TogglePlayerSpectating(playerid,0);
  709.     SetPVarInt(playerid,"spectating",0);
  710.     KillTimer(UpdateSpectateTimer[playerid]);
  711.     return 1;
  712. }
  713.  
  714. COMMAND:disarm(playerid,params[])
  715. {
  716.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  717.     new id;
  718.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /disarm [playerid]");
  719.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  720.     ResetPlayerWeapons(id);
  721.     SendClientMessageToAllEx(color_red,"ssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} disarmed ",PlayerInfo[id][Username],".");
  722.     return 1;
  723. }
  724.  
  725. COMMAND:mute(playerid,params[])
  726. {
  727.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  728.     new id,reason[64];
  729.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /mute [id] [reason]");
  730.     sscanf(params,"is[64]",id,reason);
  731.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  732.     if(PlayerInfo[id][Muted] == 1) return SendClientMessage(playerid,color_red,"Player is already muted!");
  733.     if(!strlen(reason))
  734.     {
  735.         SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} muted ",PlayerInfo[id][Username],".");
  736.     } else {
  737.         SendClientMessageToAllEx(color_red,"sssssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} muted ",PlayerInfo[id][Username]," Reason:",reason,".");
  738.     }
  739.     PlayerInfo[id][Muted] = 1;
  740.     MutePlayer(id);
  741.     return 1;
  742. }
  743. COMMAND:unmute(playerid,params[])
  744. {
  745.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  746.     new id;
  747.     if(sscanf(params,"i",id))return SendClientMessage(playerid,color_red,"USAGE: /unmute [id]");
  748.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  749.     if(PlayerInfo[id][Muted] == 0) return SendClientMessage(playerid,color_red,"Player is not muted!");
  750.     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} unmuted ",PlayerInfo[id][Username],".");
  751.     PlayerInfo[id][Muted] = 0;
  752.     UnMutePlayer(playerid);
  753.     return 1;
  754. }
  755.  
  756. COMMAND:freeze(playerid,params[])
  757. {
  758.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  759.     new id,reason[64];
  760.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /freeze [id] [reason]");
  761.     sscanf(params,"is[64]",id,reason);
  762.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  763.     if(!strlen(reason))
  764.     {
  765.         SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} froze ",PlayerInfo[id][Username],".");
  766.     } else {
  767.         SendClientMessageToAllEx(color_red,"sssssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} froze ",PlayerInfo[id][Username]," Reason:",reason,".");
  768.     }
  769.     TogglePlayerControllable(id,0);
  770.     return 1;
  771. }
  772. COMMAND:unfreeze(playerid,params[])
  773. {
  774.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  775.     new id;
  776.     if(sscanf(params,"i",id))return SendClientMessage(playerid,color_red,"USAGE: /unfreeze [id]");
  777.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  778.     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} unfroze ",PlayerInfo[id][Username],".");
  779.     TogglePlayerControllable(id,1);
  780.     return 1;
  781. }
  782.  
  783. COMMAND:jail(playerid,params[])
  784. {
  785.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  786.     new id,reason[64];
  787.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /jail [id] [reason]");
  788.     sscanf(params,"is[64]",id,reason);
  789.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  790.     if(!strlen(reason))
  791.     {
  792.         SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} jailed ",PlayerInfo[id][Username],".");
  793.     } else {
  794.         SendClientMessageToAllEx(color_red,"sssssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} jailed ",PlayerInfo[id][Username]," Reason:",reason,".");
  795.     }
  796.     PlayerInfo[id][Jailed] = 1;
  797.     JailPlayer(id);
  798.     return 1;
  799. }
  800. COMMAND:unjail(playerid,params[])
  801. {
  802.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  803.     new id;
  804.     if(sscanf(params,"i",id))return SendClientMessage(playerid,color_red,"USAGE: /unjail [id]");
  805.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  806.     if(PlayerInfo[id][Jailed] == 0) return SendClientMessage(playerid,color_red,"Player is not jailed!");
  807.     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} unjailed ",PlayerInfo[id][Username],".");
  808.     PlayerInfo[id][Jailed] = 0;
  809.     UnJailPlayer(id);
  810.     return 1;
  811. }
  812.  
  813. COMMAND:kick(playerid,params[])
  814. {
  815.     if(PlayerInfo[playerid][Level] < 1) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  816.     new id,reason[64];
  817.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /kick [id] [reason]");
  818.     sscanf(params,"is[64]",id,reason);
  819.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  820.     if(!strlen(reason))
  821.     {
  822.         SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} kicked ",PlayerInfo[id][Username],".");
  823.     } else {
  824.         SendClientMessageToAllEx(color_red,"sssssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} kicked ",PlayerInfo[id][Username]," Reason:",reason,".");
  825.     }
  826.     return Kick(id);
  827. }
  828.  
  829. //================================================================================================================
  830. //Administrator commands
  831. COMMAND:veh(playerid,params[])
  832. {
  833.     #if ALLOW_VEH == false
  834.         return SendClientMessage(playerid,color_red,"Sorry! This feature has been disabled.");
  835.     #else
  836.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  837.     new vehicle[32],c1 = -1,c2 = -1;
  838.     if(sscanf(params,"s[24]",vehicle)) return SendClientMessage(playerid,color_red,"USAGE: /veh [vehiclename] [color1] [color2]");
  839.     sscanf(params,"s[24]ii",vehicle,c1,c2);
  840.     new model = GetVehicleModelIdByName(vehicle);
  841.     if(model == 0) return  SendClientMessage(playerid,color_red,"Sorry! Cannot find a vehicle with your entered vehiclename.");
  842.     new Float:x,Float:y,Float:z;
  843.     GetPlayerPos(playerid,x,y,z);
  844.     CreateVehicle(model,x+5,y,z,0,c1,c2,-1);
  845.     SendClientMessageEx(playerid,color_orange,"sss","You succesfully spawned a ",vehicle," !");
  846.     printf("%s has spawned a %s.",PlayerInfo[playerid][Username],vehicle);
  847.     return 1;
  848.     #endif
  849. }
  850.  
  851. COMMAND:get(playerid,params[])
  852. {
  853.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  854.     new id;
  855.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /get [playerid]");
  856.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  857.     new Float:x,Float:y,Float:z;GetPlayerPos(playerid,x,y,z);x = x +2;
  858.     SetPlayerPos(id,x,y,z);
  859.     SendClientMessageEx(playerid,color_green,"sss","You have teleported ",PlayerInfo[id][Username]," to your position!");
  860.     SendClientMessageEx(id,color_green,"sss","Administrator ",PlayerInfo[playerid][Username]," has teleported you to his position!");
  861.     return 1;
  862. }
  863. COMMAND:goto(playerid,params[])
  864. {
  865.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  866.     new id;
  867.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /goto [playerid]");
  868.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  869.     new Float:x,Float:y,Float:z;GetPlayerPos(id,x,y,z);x = x +2;
  870.     SetPlayerPos(playerid,x,y,z);
  871.     SendClientMessageEx(playerid,color_green,"sss","You have teleported to ",PlayerInfo[id][Username],"'s position!");
  872.     return 1;
  873. }
  874.  
  875. COMMAND:giveweapon(playerid,params[])
  876. {
  877.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  878.     new id,weapon[32],ammo;
  879.     if(sscanf(params,"is[32]i",id,weapon,ammo)) return SendClientMessage(playerid,color_red,"USAGE: /giveweapon [playerid] [weaponname] [ammo]");
  880.     new wid = GetWeaponIdByName(weapon);
  881.     if(wid == -1) return SendClientMessage(playerid,color_red,"Invalid weapon name!");
  882.     GivePlayerWeapon(id,wid,ammo);
  883.     SendClientMessageEx(id,color_green,"sssss","Administrator ",PlayerInfo[playerid][Username]," gave you a ",weapon,"!");
  884.     SendClientMessageEx(playerid,color_green,"sssss","You have given ",PlayerInfo[id][Username]," a ",weapon,".");
  885.     return 1;
  886. }
  887.  
  888. COMMAND:setmoney(playerid,params[])
  889. {
  890.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  891.     new id,value;
  892.     if(sscanf(params,"ii",id,value)) return SendClientMessage(playerid,color_red,"USAGE: /setmoney [playerid] [value]");
  893.     SetPlayerMoney(id,value);
  894.     SendClientMessageEx(id,color_green,"sssis","Administrator ",PlayerInfo[playerid][Username]," has changed your money to ",value," !");
  895.     SendClientMessageEx(playerid,color_green,"sssis","You have succesfully changed ",PlayerInfo[id][Username],"'s money to ",value," .");
  896.     return 1;
  897. }
  898.  
  899. COMMAND:setscore(playerid,params[])
  900. {
  901.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  902.     new id,value;
  903.     if(sscanf(params,"ii",id,value)) return SendClientMessage(playerid,color_red,"USAGE: /setscore [playerid] [value]");
  904.     SetPlayerScore(id,value);
  905.     SendClientMessageEx(id,color_green,"sssis","Administrator ",PlayerInfo[playerid][Username]," has changed your score to ",value," !");
  906.     SendClientMessageEx(playerid,color_green,"sssis","You have succesfully changed ",PlayerInfo[id][Username],"'s score to ",value," .");
  907.     return 1;
  908. }
  909.  
  910. COMMAND:explode(playerid,params[])
  911. {
  912.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  913.     new id;
  914.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /explode [playerid]");
  915.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  916.     new Float:x,Float:y,Float:z;GetPlayerPos(id,x,y,z);
  917.     CreateExplosion(x,y,z,0,5);
  918.     CreateExplosion(x,y+3,z,0,7);
  919.     CreateExplosion(x+3,y,z,0,8);
  920.     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} made ",PlayerInfo[id][Username]," go boom!");
  921.     return 1;
  922. }
  923.  
  924. COMMAND:ban(playerid,params[])
  925. {
  926.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  927.     new id,reason[64];
  928.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /ban [id] [reason]");
  929.     sscanf(params,"is[64]",id,reason);
  930.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  931.     if(!strlen(reason))
  932.     {
  933.         SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} banned ",PlayerInfo[id][Username],".");
  934.     } else {
  935.         SendClientMessageToAllEx(color_red,"sssssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} banned ",PlayerInfo[id][Username]," Reason:",reason,".");
  936.     }
  937.     return Ban(id);
  938. }
  939.  
  940. COMMAND:banip(playerid,params[])
  941. {
  942.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  943.     new ip[32];if(sscanf(params,"s[32]",ip)) return SendClientMessage(playerid,color_red,"USAGE: /banip [ip]");
  944.     new str[64];format(str,sizeof str,"banip %s",ip);
  945.     SendRconCommand(str);
  946.     SendClientMessageEx(playerid,color_green,"sss","You have succesfully banned ",ip," !");
  947.     printf("%s has banned %s.",PlayerInfo[playerid][Username],ip);
  948.     return 1;
  949. }
  950.  
  951. COMMAND:annoy(playerid,params[])
  952. {
  953.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  954.     new id;
  955.     if(sscanf(params,"i",id)) return SendClientMessage(playerid,color_red,"USAGE: /annoy [playerid]");
  956.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  957.     if(cow_victim != -1) return SendClientMessage(playerid,color_red,"Sorry! It seems like your cow has already been stolen by another administrator.");
  958.     #if ALLOW_ANNOY == false
  959.         return SendClientMessage(playerid,color_red,"Sorry! This feature has been disabled.");
  960.     #else
  961.     AnnoyPlayer(id);
  962.     SendClientMessageToAllEx(color_red,"sssss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} has released his cow on ",PlayerInfo[id][Username]," !!!");
  963.     SendClientMessageEx(playerid,color_green,"sss","You have released your cow on ",PlayerInfo[id][Username],"! please use /catchcow to bring him back.");
  964.     return 1;
  965.     #endif
  966. }
  967. COMMAND:catchcow(playerid,params[])
  968. {
  969.     if(PlayerInfo[playerid][Level] < 2) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  970.     if(cow_victim == -1) return SendClientMessage(playerid,color_red,"You cannot catch the cow if it isnt released yet!");
  971.     StopAnnoying();
  972.     SendClientMessageToAllEx(color_red,"sss","***Administrator ",PlayerInfo[playerid][Username],"{FFFFFF} has brought his cow back to the farm!");
  973.     return 1;
  974. }
  975.  
  976. //================================================================================================================
  977. //Server owner commands
  978. COMMAND:setlevel(playerid,params[])
  979. {
  980.     if(PlayerInfo[playerid][Level] < 3&& !IsPlayerAdmin(playerid)) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  981.     new id,level;if(sscanf(params,"ii",id,level)) return SendClientMessage(playerid,color_red,"USAGE: /setlevel [playerid] [level 0/3]");
  982.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid,color_red,"Player not connected.");
  983.     if(level > 3) return SendClientMessage(playerid,color_red,"Error! You can only pick between level 0/3 (0: Player - 1: Moderator - 2: Administrator - 3: Owner)");
  984.     if(PlayerInfo[id][Level] < level)
  985.     {
  986.         PlayerInfo[id][Level] = level;
  987.         SendClientMessageEx(playerid,color_green,"sssis","You have promoted ",PlayerInfo[id][Username]," succesfully to level ",level,".");
  988.         SendClientMessageEx(id,color_green,"sis","Congratulations! You have been promoted to level ",level,".");
  989.     } else {
  990.         PlayerInfo[id][Level] = level;
  991.         SendClientMessageEx(playerid,color_green,"sssis","You have demoted ",PlayerInfo[id][Username]," succesfully to level ",level,".");
  992.         SendClientMessageEx(id,color_green,"sis","You have been demoted to level ",level,".");
  993.     }
  994.     SaveUser(id);
  995.     return 1;
  996. }
  997.  
  998. COMMAND:unbanip(playerid,params[])
  999. {
  1000.     if(PlayerInfo[playerid][Level] < 3 ) return SendClientMessage(playerid,color_red,"You have no permission to use this command!");
  1001.     new ip[32];if(sscanf(params,"s[32]",ip)) return SendClientMessage(playerid,color_red,"USAGE: /unbanip [ip]");
  1002.     new str[64];format(str,sizeof str,"unbanip %s",ip);
  1003.     SendRconCommand(str);
  1004.     SendClientMessageEx(playerid,color_green,"sss","You have succesfully unbanned ",ip," !");
  1005.     printf("%s has unbanned %s.",PlayerInfo[playerid][Username],ip);
  1006.     return 1;
  1007. }
  1008.  
  1009. //================================================================================================================
  1010. //stocks for admin script
  1011. stock OnPlayerRegister(playerid,password[])
  1012. {
  1013.     GetPlayerName(playerid,PlayerInfo[playerid][Username],MAX_PLAYER_NAME);
  1014.     WP_Hash(PlayerInfo[playerid][Password],129,password);
  1015.     PlayerInfo[playerid][Muted] = 0;
  1016.     PlayerInfo[playerid][Score] = GetPlayerScore(playerid);
  1017.     PlayerInfo[playerid][Money] = GetPlayerMoney(playerid);
  1018.     PlayerInfo[playerid][Level] = 0;
  1019.     format(PlayerInfo[playerid][Ip],32,"%s",GetPlayerIpEx(playerid));
  1020.     #if USE_MYSQL_DATABASE == true
  1021.         yoursql_insert("users","ssiiiiis",yoursql_escape_string(PlayerInfo[playerid][Username]),PlayerInfo[playerid][Password],PlayerInfo[playerid][Muted],PlayerInfo[playerid][Jailed],PlayerInfo[playerid][Score],PlayerInfo[playerid][Money],PlayerInfo[playerid][Level],PlayerInfo[playerid][Ip]);
  1022.     #else
  1023.         new string[128];format(string,sizeof string,"Users/%s.ini",PlayerInfo[playerid][Username]);
  1024.         new INI:handler = INI_Open(string);
  1025.         INI_WriteString(handler,"Username",PlayerInfo[playerid][Username]);
  1026.         INI_WriteString(handler,"Password",PlayerInfo[playerid][Password]);
  1027.         INI_WriteInt(handler,"Muted",PlayerInfo[playerid][Muted]);
  1028.         INI_WriteInt(handler,"Jailed",PlayerInfo[playerid][Jailed]);
  1029.         INI_WriteInt(handler,"Score",GetPlayerScore(playerid));
  1030.         INI_WriteInt(handler,"Money",GetPlayerMoney(playerid));
  1031.         INI_WriteInt(handler,"Level",0);
  1032.         INI_WriteString(handler,"Ip",GetPlayerIpEx(playerid));
  1033.         INI_Close(handler);
  1034.     #endif
  1035.     printf("%s has registered an account.",PlayerInfo[playerid][Username]);
  1036.     SendClientMessageToAllEx(color_green,"ss",PlayerInfo[playerid][Username]," has registered an account, welcome!");
  1037. }
  1038.  
  1039. stock LoadUser(playerid,pName[])
  1040. {
  1041.     new identifier[64];
  1042.     #if USE_MYSQL_DATABASE == true
  1043.         format(identifier,sizeof identifier,"Username = '%s'",pName);
  1044.         sscanf(yoursql_receive("users",identifier),"p<|>e<s[32]s[129]iiiiis[12]>",PlayerInfo[playerid]);
  1045.     #else
  1046.         format(identifier,sizeof identifier,"Users/%s.ini",pName);
  1047.         INI_ParseFile(identifier, "YINI_LOAD", .bExtra = true, .extra = playerid);
  1048.     #endif
  1049.     SetPlayerScore(playerid,PlayerInfo[playerid][Score]);
  1050.     SetPlayerMoney(playerid,PlayerInfo[playerid][Money]);
  1051.     return 1;
  1052. }
  1053.  
  1054. forward YINI_LOAD(playerid,Name[],Value[]);
  1055. public YINI_LOAD(playerid,Name[],Value[])
  1056. {
  1057.     if(!strcmp(Name,"Username")){format(PlayerInfo[playerid][Username],32,"%s",Value);}
  1058.     if(!strcmp(Name,"Password")){format(PlayerInfo[playerid][Password],129,"%s",Value);}
  1059.     if(!strcmp(Name,"Muted")){PlayerInfo[playerid][Muted] = strval(Value);}
  1060.     if(!strcmp(Name,"Jailed")){PlayerInfo[playerid][Jailed] = strval(Value);}
  1061.     if(!strcmp(Name,"Score")){PlayerInfo[playerid][Score] = strval(Value);}
  1062.     if(!strcmp(Name,"Money")){PlayerInfo[playerid][Money] = strval(Value);}
  1063.     if(!strcmp(Name,"Level")){PlayerInfo[playerid][Level] = strval(Value);}
  1064.     if(!strcmp(Name,"Ip")){format(PlayerInfo[playerid][Ip],32,"%s",Value);}
  1065.     return 1;
  1066. }
  1067.  
  1068. stock SaveUser(playerid)
  1069. {
  1070.     new string[320];
  1071.     #if USE_MYSQL_DATABASE == true
  1072.         format(string,sizeof string,"password = '%s', muted = %i, jailed = %i, score = %i, money = %i, level = %i, Ip = '%s'",yoursql_escape_string(PlayerInfo[playerid][Password]),PlayerInfo[playerid][Muted],PlayerInfo[playerid][Jailed],GetPlayerScore(playerid),GetPlayerMoney(playerid),PlayerInfo[playerid][Level],GetPlayerIpEx(playerid));
  1073.         new identifier[32];format(identifier,sizeof identifier,"Username = '%s'",PlayerInfo[playerid][Username]);
  1074.         yoursql_update("users",string,identifier);
  1075.     #else
  1076.         format(string,sizeof string,"Users/%s.ini",PlayerInfo[playerid][Username]);
  1077.         new INI:handler = INI_Open(string);
  1078.         INI_WriteString(handler,"Password",PlayerInfo[playerid][Password]);
  1079.         INI_WriteInt(handler,"Muted",PlayerInfo[playerid][Muted]);
  1080.         INI_WriteInt(handler,"Jailed",PlayerInfo[playerid][Jailed]);
  1081.         INI_WriteInt(handler,"Score",GetPlayerScore(playerid));
  1082.         INI_WriteInt(handler,"Money",GetPlayerMoney(playerid));
  1083.         INI_WriteInt(handler,"Level",PlayerInfo[playerid][Level]);
  1084.         INI_Close(handler);
  1085.     #endif
  1086. }
  1087. //================================================================================================================
  1088. //Parts from Hiddos's annoying cow script
  1089. stock AnnoyPlayer(playerid)
  1090. {
  1091.     object_cow = CreateObject(16442, 0, 0, 0, 0, 0, 0);
  1092.     cow_victim = playerid;
  1093.     new Float:Pos[4];
  1094.     if(IsPlayerInAnyVehicle(cow_victim)) GetVehiclePos(GetPlayerVehicleID(cow_victim), Pos[0], Pos[1], Pos[2]);
  1095.     else GetPlayerPos(cow_victim, Pos[0], Pos[1], Pos[2]);
  1096.     Pos[0] += float(random(30) - 15);
  1097.     Pos[1] += float(random(30) - 15);
  1098.     StopObject(object_cow);
  1099.     SetObjectPos(object_cow, Pos[0], Pos[1], Pos[2] - 7.5);
  1100.     MoveObject(object_cow, Pos[0], Pos[1], Pos[2], 5.0);
  1101.     movecow_timer = SetTimer("MoveCow", 2000, true);
  1102. }
  1103. stock StopAnnoying()
  1104. {
  1105.     KillTimer(movecow_timer);
  1106.     DestroyObject(object_cow); //Bai bai cow :(
  1107.     cow_victim = -1;
  1108. }
  1109. stock Float:GetPlayerSpeed(playerid)
  1110. {
  1111.         new Float:x,Float:y,Float:z;
  1112.         if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z);
  1113.         else GetPlayerVelocity(playerid,x,y,z);
  1114.         return floatsqroot(x*x+y*y+z*z) * 48.5;
  1115. }
  1116. forward MoveCow();
  1117. public MoveCow()
  1118. {
  1119.     if(cow_victim == -1) return;
  1120.     new Float:Pos[7];
  1121.     GetObjectPos(object_cow, Pos[0], Pos[1], Pos[2]);
  1122.     if(IsPlayerInAnyVehicle(cow_victim)) GetVehiclePos(GetPlayerVehicleID(cow_victim), Pos[3], Pos[4], Pos[5]);
  1123.     else GetPlayerPos(cow_victim, Pos[3], Pos[4], Pos[5]);
  1124.     Pos[3] += float(random(10) - 5);
  1125.     Pos[4] += float(random(10) - 5);
  1126.     Pos[6] = atan( floatdiv(abs(Pos[4] - Pos[1]), abs(Pos[3] - Pos[0])) );
  1127.  
  1128.     if(Pos[3] < Pos[0] && Pos[4] < Pos[1])  Pos[6] += 180;
  1129.     else if(!(Pos[3] > Pos[0] && Pos[4] > Pos[1]))
  1130.     {
  1131.         Pos[6] *= float(-1);
  1132.         Pos[6] += float((Pos[3] > Pos[0] && Pos[4] < Pos[1]) ? (90) : (270));
  1133.         Pos[6] -= float(90);
  1134.     }
  1135.     SetObjectRot(object_cow, 0, 0, Pos[6]);
  1136.     MoveObject(object_cow, Pos[3], Pos[4], Pos[5] + 1.2, GetPlayerSpeed(cow_victim) + 7.8);
  1137. }
Add Comment
Please, Sign In to add comment