Advertisement
Logan_Adams

EASY-TO-HANDLE ADMINSYSTEM VERSION 1.2 BY LOGAN ADAMS

Jun 9th, 2012
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 21.73 KB | None | 0 0
  1. /**** EASY-TO-HANDLE ADMINSYSTEM ****/
  2. /**** created & written by Logan Adams aka. McBastard112 2012 ****/
  3. /**** Version 1.2 ****/
  4. /**** For SAMP 0.3 ****/
  5. /*********************** *************/
  6.  
  7. /**** CHANGELOG *********/
  8.  
  9. /**** Version 1.2 ****/
  10. /**** added new functions. Now you can Give The Player per dialog a weapon and per dialog the ammo, the same for Giving the player money.
  11.  of Course you can resett the weapons of the player, too.
  12.  ****/
  13. /**** At Restarting and Shutting the server down Dialogs you'll have to enter only integers. Text will be recognized .. Same at new functions in this version. ****/
  14. /**** ****************/
  15.  
  16. /**** Version 1.1 ****/
  17. /**** Dialog Bugs fixed ****/
  18. /**** Spectate Bugs fixed ****/
  19. /**** added new functions at /controlpanel. Now you can insert at Restart/Exit Server the interval until the server will be restarted/shutten down ****/
  20. /**** ****************/
  21.  
  22. /**** Includes ****/
  23. #include <a_samp>
  24. #include <ocmd>
  25. /**** ************/
  26.  
  27. /**** Farben/colors ****/
  28. #define ROT 0xF50000FF
  29. #define BLAU 0x1400FFFF
  30. #define GELB 0xFFFF00FF
  31. #define GRÜN 0x19FF00FF
  32. #define TÜRKIS 0x00FFFFFF
  33. #define SCHWARZ 0x000000FF
  34. #define WEISS 0xFEFEFEFF
  35. #define GOLD 0xFFC800FF
  36. #define PINK 0xFF0055FF
  37. #define LILA 0xC800FFFF
  38. #define GRAU 0xAAAAAAFF
  39. /********** *******/
  40.  
  41. /**** Variablen ****/
  42. new targetid[MAX_PLAYERS];
  43. new weaponid[MAX_PLAYERS];
  44. /**** ***************/
  45.  
  46. /**** Timer Forwards **************/
  47. forward Restarttimer();
  48. forward Shuttimer();
  49. /**** ***************************/
  50.  
  51. /**** Dialog ID's ****/
  52. #define fs_CONTROL 100
  53. #define fs_PLAYER 101
  54. #define fs_CONTROL_HOST 102
  55. #define fs_CONTROL_MODE 103
  56. #define fs_CONTROL_MAP 104
  57. #define fs_PLAYER_KICK 105
  58. #define fs_PLAYER_BAN 106
  59. #define fs_CONTROL_RESTART 107
  60. #define fs_CONTROL_EXIT 108
  61. #define fs_PLAYER_GUN 109
  62. #define fs_PLAYER_AMMO 110
  63. #define fs_PLAYER_MONEY 111
  64. /**** *****************/
  65.  
  66. public OnFilterScriptInit()
  67. {
  68.     print("\n-------------------------------------------------");
  69.     print("  |EASY-TO-HANDLE-ADMINSYSTEM successfully loaded.|");
  70.     print("  |Version 1.2|");
  71.     print("  |by Logan Adams aka. McBastard112|");
  72.     print("  |For SAMP 0.3|");
  73.     print("---------------------------------------------------\n");
  74.     return 1;
  75. }
  76.  
  77. public OnFilterScriptExit()
  78. {
  79.     print("\n-------------------------------------------------");
  80.     print("  |EASY-TO-HANDLE-ADMINSYSTEM successfully unloaded.|");
  81.     print("  |Version 1.2|");
  82.     print("  |by Logan Adams aka. McBastard112|");
  83.     print("  |For SAMP 0.3|");
  84.     print("---------------------------------------------------\n");
  85.     return 1;
  86. }
  87.  
  88. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  89. {
  90.     switch(dialogid)
  91.     {
  92.         case fs_CONTROL:
  93.         {
  94.             switch(listitem)
  95.             {
  96.                 case 0:
  97.                 {
  98.                     ShowPlayerDialog(playerid,fs_CONTROL_HOST,DIALOG_STYLE_INPUT,"Change Hostname","Insert new Hostname below ...","OK","Quit");
  99.                     return 1;
  100.                 }
  101.                 case 1:
  102.                 {
  103.                     ShowPlayerDialog(playerid,fs_CONTROL_MODE,DIALOG_STYLE_INPUT,"Change Mode","Insert new Mode below ...","OK","Quit");
  104.                     return 1;
  105.                 }
  106.                 case 2:
  107.                 {
  108.                     ShowPlayerDialog(playerid,fs_CONTROL_MAP,DIALOG_STYLE_INPUT,"Change Mapname","Insert new Mapname below ...","OK","Quit");
  109.                     return 1;
  110.                 }
  111.                 case 3:
  112.                 {
  113.                     ShowPlayerDialog(playerid,fs_CONTROL_RESTART,DIALOG_STYLE_INPUT,"Insert interval","Insert interval ( in seconds ) of time below ...","OK","");
  114.                     return 1;
  115.                 }
  116.                 case 4:
  117.                 {  
  118.                     ShowPlayerDialog(playerid,fs_CONTROL_EXIT,DIALOG_STYLE_INPUT,"Insert interval","Insert interval ( in seconds ) of time below ...","OK","");
  119.                     return 1;
  120.                 }
  121.             }
  122.         }
  123.         case fs_CONTROL_HOST:
  124.         {
  125.             new str[128],str2[128];
  126.             format(str,sizeof str,"hostname %s",inputtext);
  127.             format(str2,sizeof str2,"Admin %s has changed the hostname to %s",PlayerName(playerid),inputtext);
  128.             SendRconCommand(str);
  129.             SendClientMessageToAll(GRÜN,str2);
  130.             return 1;
  131.         }
  132.         case fs_CONTROL_MODE:
  133.         {
  134.             new str[128];
  135.             format(str,sizeof str,"Admin %s has changed the GameModeMode to %s",PlayerName(playerid),inputtext);
  136.             SetGameModeText(inputtext);
  137.             SendClientMessageToAll(GRÜN,str);
  138.             return 1;
  139.         }
  140.         case fs_CONTROL_MAP:
  141.         {
  142.             new str[128],str2[128];
  143.             format(str,sizeof str,"mapname %s",inputtext);
  144.             format(str2,sizeof str2,"Admin %s has changed the Mapname to %s",PlayerName(playerid),inputtext);
  145.             SendRconCommand(str);
  146.             SendClientMessageToAll(GRÜN,str2);
  147.             return 1;
  148.         }
  149.         case fs_CONTROL_RESTART:
  150.         {
  151.             new z;
  152.             if(sscanf(inputtext,"i",z))
  153.             {
  154.                 SendClientMessage(playerid,ROT,"Only Integers! Not text!");
  155.                 ShowPlayerDialog(playerid,fs_CONTROL_RESTART,DIALOG_STYLE_INPUT,"Insert interval","Insert interval ( in seconds ) of time below ...","OK","");
  156.                 return 0;
  157.             }
  158.             new str[128];
  159.             format(str,sizeof str,"The Server will be restarted in %i seconds!",strval(inputtext));
  160.             SendClientMessageToAll(ROT,str);
  161.             GameTextForAll(str,strval(inputtext)*1000,4);
  162.             SetTimer("Restarttimer",strval(inputtext)*1000,false);
  163.         }
  164.         case fs_CONTROL_EXIT:
  165.         {
  166.             new z1;
  167.             if(sscanf(inputtext,"i",z1))
  168.             {
  169.                 SendClientMessage(playerid,ROT,"Only Integers! Not text!");
  170.                 ShowPlayerDialog(playerid,fs_CONTROL_EXIT,DIALOG_STYLE_INPUT,"Insert interval","Insert interval ( in seconds ) of time below ...","OK","");
  171.                 return 0;
  172.             }
  173.             new str[128];
  174.             format(str,sizeof str,"The Server will be shutten down in %i seconds!",strval(inputtext));
  175.             SendClientMessageToAll(ROT,str);
  176.             GameTextForAll(str,strval(inputtext)*1000,4);
  177.             SetTimer("Shuttimer",strval(inputtext)*1000,false);
  178.         }
  179.         case fs_PLAYER_KICK:
  180.         {
  181.             new str[128];
  182.             format(str,sizeof str,"[AdmCmd] %s has been kicked by %s. Reason: %s",PlayerName(targetid[playerid]),PlayerName(playerid),inputtext);
  183.             SendClientMessageToAll(ROT,str);
  184.             Kick(targetid[playerid]);
  185.         }
  186.         case fs_PLAYER_BAN:
  187.         {
  188.             new str[128];
  189.             format(str,sizeof str,"[AdmCmd] %s has been ip-banned by Admin %s. Reason: %s",PlayerName(targetid[playerid]),PlayerName(playerid),inputtext);
  190.             SendClientMessageToAll(ROT,str);
  191.             Ban(targetid[playerid]);
  192.         }
  193.         case fs_PLAYER:
  194.         {
  195.             switch(listitem)
  196.             {
  197.                 case 0:
  198.                 {
  199.                     new string1[128],string2[128];
  200.                     SetPlayerArmour(targetid[playerid], 100);
  201.                     format(string1, sizeof(string1), "[AdmCmd] Admin %s has given you a protective vest", PlayerName(playerid));
  202.                     format(string2, sizeof(string2), "[AdmCmd] You have given %s a protective  vest",PlayerName(targetid[playerid]));
  203.                     SendClientMessage(playerid, GRÜN, string2);
  204.                     SendClientMessage(targetid[playerid], GRÜN, string1);
  205.                 }
  206.                 case 1:
  207.                 {
  208.                     new string1[128],string2[128];
  209.                     SetPlayerArmour(targetid[playerid], 0);
  210.                     format(string1, sizeof(string1), "[AdmCmd] Admin %s has deleted your protective vest", PlayerName(playerid));
  211.                     format(string2, sizeof(string2), "[AdmCmd] You have deleted %s's protective vest",PlayerName(targetid[playerid]));
  212.                     SendClientMessage(playerid, GRÜN, string2);
  213.                     SendClientMessage(targetid[playerid], GRÜN, string1);
  214.                 }
  215.                 case 2:
  216.                 {
  217.                     new string1[128],string2[128];
  218.                     SetPlayerHealth(targetid[playerid], 100);
  219.                     format(string1, sizeof(string1), "[AdmCmd] Admin %s has given you Full HP", PlayerName(playerid));
  220.                     format(string2, sizeof(string2), "[AdmCmd] You have given %s Full HP",PlayerName(targetid[playerid]));
  221.                     SendClientMessage(playerid, GRÜN, string2);
  222.                     SendClientMessage(targetid[playerid], GRÜN, string1);
  223.                 }
  224.                 case 3:
  225.                 {
  226.                     new string1[128],string2[128];
  227.                     SetPlayerHealth(targetid[playerid], 0);
  228.                     format(string1, sizeof(string1), "[AdmCmd] Admin %s has killed you", PlayerName(playerid));
  229.                     format(string2, sizeof(string2), "[AdmCmd] You have killed %s",PlayerName(targetid[playerid]));
  230.                     SendClientMessage(playerid, GRÜN, string2);
  231.                     SendClientMessage(targetid[playerid], GRÜN, string1);
  232.                 }
  233.                 case 4:
  234.                 {
  235.                     new str[128];
  236.                     format(str,sizeof str,"[AdmCmd] You are now spectating %s",PlayerName(targetid[playerid]));
  237.                     SendClientMessage(playerid,GRÜN,str);
  238.                     if(IsPlayerInAnyVehicle(targetid[playerid]))
  239.                     {
  240.                         TogglePlayerSpectating(playerid,1);
  241.                         PlayerSpectateVehicle(playerid,GetPlayerVehicleID(targetid[playerid]));
  242.                         SetPlayerInterior(playerid,GetPlayerInterior(targetid[playerid]));
  243.                     }  
  244.                     else
  245.                     {
  246.                         TogglePlayerSpectating(playerid,1);
  247.                         PlayerSpectatePlayer(playerid,targetid[playerid]);
  248.                         SetPlayerInterior(playerid,GetPlayerInterior(targetid[playerid]));
  249.                     }  
  250.                 }
  251.                 case 5:
  252.                 {
  253.                     TogglePlayerSpectating(playerid, 0);
  254.                     SetPlayerInterior(playerid, 0);
  255.                     SetCameraBehindPlayer(playerid);
  256.                     SendClientMessage(playerid,GRÜN,"Spectating stopped");
  257.                 }
  258.                 case 6:
  259.                 {
  260.                     new str[128],str2[128];
  261.                     format(str,sizeof str,"[AdmCmd] You have ported yourself to %s",PlayerName(targetid[playerid]));
  262.                     format(str2,sizeof str2,"[AdmCmd] Admin %s has ported himself to you",PlayerName(playerid));
  263.                     SendClientMessage(playerid,GRÜN,str);
  264.                     SendClientMessage(targetid[playerid],GRÜN,str2);
  265.                     new Float:X,Float:Y,Float:Z;
  266.                     GetPlayerPos(targetid[playerid],X,Y,Z);
  267.                     SetPlayerPos(playerid,X,Y+2,Z);
  268.                     SetPlayerInterior(playerid,GetPlayerInterior(targetid[playerid]));
  269.                 }
  270.                 case 7:
  271.                 {
  272.                     new str[128],str2[128];
  273.                     format(str,sizeof str,"[AdmCmd] You have ported %s to yourself",PlayerName(targetid[playerid]));
  274.                     format(str2,sizeof str2,"[AdmCmd] Admin %s has ported you to himself",PlayerName(playerid));
  275.                     new Float:X,Float:Y,Float:Z;
  276.                     GetPlayerPos(playerid,X,Y,Z);
  277.                     SetPlayerPos(targetid[playerid],X,Y+2,Z);
  278.                     SetPlayerInterior(targetid[playerid],GetPlayerInterior(playerid));
  279.                     SendClientMessage(playerid,GRÜN,str);
  280.                     SendClientMessage(playerid,GRÜN,str2);
  281.                 }
  282.                 case 8:
  283.                 {
  284.                     new str[128],str2[128];
  285.                     format(str,sizeof str,"[AdmCmd] You have slapped %s",PlayerName(targetid[playerid]));
  286.                     format(str2,sizeof str2,"[AdmCmd] Admin %s has slapped you",PlayerName(playerid));
  287.                     new Float:X,Float:Y,Float:Z;
  288.                     GetPlayerPos(targetid[playerid],X,Y,Z);
  289.                     SetPlayerPos(targetid[playerid],X,Y,Z+10);
  290.                     SendClientMessage(playerid,GRÜN,str);
  291.                     SendClientMessage(playerid,GRÜN,str2);
  292.                 }
  293.                 case 9:
  294.                 {
  295.                     ShowPlayerDialog(playerid,fs_PLAYER_KICK,DIALOG_STYLE_INPUT,"Kick Player","Insert the reason for kicking the Player below ...","OK","");
  296.                 }
  297.                 case 10:
  298.                 {
  299.                     ShowPlayerDialog(playerid,fs_PLAYER_BAN,DIALOG_STYLE_INPUT,"Ban Player","Insert the reason for banning the Player below ...","OK","");
  300.                 }
  301.                 case 11:
  302.                 {
  303.                     new str[90];
  304.                     format(str,sizeof str,"Nightstick\nKnife\nBat\nSilenced\nDeagle\nShotgun\nMP5\nM4\nSniper\nAK47\nMinigun");
  305.                     ShowPlayerDialog(playerid,fs_PLAYER_GUN,DIALOG_STYLE_LIST,"Choose kind of gun",str,"OK","Quit");
  306.                 }
  307.                 case 12:
  308.                 {
  309.                     new str[128],str2[128];
  310.                     format(str,sizeof str,"[AdmCmd] You have resetted %s's weapons",PlayerName(targetid[playerid]));
  311.                     format(str2,sizeof str2,"[AdmCmd] Admin %s has resetted your weapons",PlayerName(playerid));
  312.                     ResetPlayerWeapons(targetid[playerid]);
  313.                     SendClientMessage(playerid,GRÜN,str);
  314.                     SendClientMessage(targetid[playerid],GRÜN,str2);
  315.                 }
  316.                 case 13:
  317.                 {
  318.                     ShowPlayerDialog(playerid,fs_PLAYER_MONEY,DIALOG_STYLE_INPUT,"Insert amount of money","Insert the amount of the money below ...","OK","Quit");
  319.                 }
  320.             }
  321.         }
  322.         case fs_PLAYER_GUN:
  323.         {
  324.             switch(listitem)
  325.             {
  326.                 case 0:
  327.                 {
  328.                     weaponid[playerid] = 3;
  329.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  330.                 }
  331.                 case 1:
  332.                 {
  333.                     weaponid[playerid] = 4;
  334.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  335.                 }
  336.                 case 2:
  337.                 {
  338.                     weaponid[playerid] = 5;
  339.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  340.                 }
  341.                 case 3:
  342.                 {
  343.                     weaponid[playerid] = 23;
  344.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  345.                 }
  346.                 case 4:
  347.                 {
  348.                     weaponid[playerid] = 24;
  349.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  350.                 }
  351.                 case 5:
  352.                 {
  353.                     weaponid[playerid] = 25;
  354.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  355.                 }
  356.                 case 6:
  357.                 {
  358.                     weaponid[playerid] = 29;
  359.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  360.                 }
  361.                 case 7:
  362.                 {
  363.                     weaponid[playerid] = 31;
  364.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  365.                 }
  366.                 case 8:
  367.                 {
  368.                     weaponid[playerid] = 34;
  369.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  370.                 }
  371.                 case 9:
  372.                 {
  373.                     weaponid[playerid] = 30;
  374.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  375.                 }
  376.                 case 10:
  377.                 {
  378.                     weaponid[playerid] = 38;
  379.                     ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  380.                 }
  381.             }
  382.         }
  383.         case fs_PLAYER_AMMO:
  384.         {
  385.             new integer;
  386.             if(sscanf(inputtext,"i",integer))
  387.             {
  388.                 SendClientMessage(playerid,ROT,"Only Integers! Not text!");
  389.                 ShowPlayerDialog(playerid,fs_PLAYER_AMMO,DIALOG_STYLE_INPUT,"Insert ammo","Insert Ammo of the gun below ...","OK","");
  390.             }
  391.             else
  392.             {
  393.                 new str[128];
  394.                 new str2[128];
  395.                 GivePlayerWeapon(playerid,weaponid[playerid],strval(inputtext));
  396.                 format(str,sizeof str,"[AdmCmd]You have given %s a gun ( weaponid %i ) with %i ammo",PlayerName(targetid[playerid]),weaponid[playerid],strval(inputtext));
  397.                 format(str2,sizeof str2,"[AdmCmd] Admin %s has given you a gun ( weaponid %i ) with %i ammo",PlayerName(playerid),weaponid[playerid],strval(inputtext));
  398.                 SendClientMessage(playerid,GRÜN,str);
  399.                 SendClientMessage(targetid[playerid],GRÜN,str2);
  400.             }
  401.         }
  402.         case fs_PLAYER_MONEY:
  403.         {
  404.             new str[128],str2[128],z3;
  405.             if(sscanf(inputtext,"i",z3))
  406.             {
  407.                 ShowPlayerDialog(playerid,fs_PLAYER_MONEY,DIALOG_STYLE_INPUT,"Insert amount","Insert the amount of money below ...","OK","Quit");
  408.                 SendClientMessage(playerid,ROT,"Only integers! Not text!");
  409.                 return 0;
  410.             }
  411.             format(str,sizeof str,"[AdmCmd] You have given %s %i$",PlayerName(targetid[playerid]),strval(inputtext));
  412.             format(str2,sizeof str2,"[AdmCmd] Admin %s has given you %i$",PlayerName(playerid),strval(inputtext));
  413.             SendClientMessage(playerid,GRÜN,str);
  414.             SendClientMessage(targetid[playerid],GRÜN,str2);
  415.             GivePlayerMoney(targetid[playerid],GetPlayerMoney(targetid[playerid])+strval(inputtext));
  416.         }
  417.     }  
  418.     return 0;
  419. }
  420.  
  421. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  422. {
  423.     new str[128],str2[500];
  424.     if(IsPlayerAdmin(playerid))
  425.     {
  426.         targetid[playerid] = clickedplayerid;
  427.         format(str,sizeof str,"What do U wanna do with %s ?",PlayerName(clickedplayerid));
  428.         format(str2,sizeof str2,"Give Armour\nDelete Armour\nHeal\nKill\nSpectate\nSpec off\nGoto\nGethere\nSlap\nKick\nBan\nGive Gun\nReset Weapons\nGive Money");
  429.         ShowPlayerDialog(playerid,fs_PLAYER,DIALOG_STYLE_LIST,str,str2,"OK","");
  430.     }  
  431.     else
  432.     {
  433.         SendClientMessage(playerid,ROT,"You have to be logged in as RCON-Admin, to manage this player!");
  434.     }  
  435.     return 1;
  436. }
  437.  
  438. /**** OCMD Commands ****/
  439. ocmd:controlpanel(playerid,params[])
  440. {
  441.     #pragma unused params
  442.     if(IsPlayerAdmin(playerid))
  443.         ShowPlayerDialog(playerid,fs_CONTROL,DIALOG_STYLE_LIST,"Server Control Panel","Change Hostname\nChange Gamemodemode\nChange Mapname\nRestart Server\nShut Server down","OK","Quit");
  444.     return 1;
  445. }
  446. /**** ******************/
  447.  
  448. /**** Stock to get one's Player Name ****/
  449. stock PlayerName(playerid)
  450. {
  451.         new GetName[MAX_PLAYER_NAME];
  452.         GetPlayerName(playerid,GetName,sizeof(GetName));
  453.         return GetName;
  454. }
  455.  
  456. /**** ************************************/
  457.  
  458. /**** Timer Publics ****/
  459. public Restarttimer()
  460. {
  461.     SendRconCommand("gmx");
  462.     return 1;
  463. }
  464.  
  465. public Shuttimer()
  466. {
  467.     SendRconCommand("exit");
  468. }
  469. /**** *********************/
  470.  
  471. /**** IsNumeric Stock ****/
  472. stock IsNumeric(const string[])
  473. {
  474.     new length=strlen(string);
  475.     if(length==0)
  476.     {
  477.         return 0;
  478.     }
  479.     for (new i=0; i<length; i++)
  480.     {
  481.         if (!((string[i] <= '9' && string[i] >= '0') || (i==0 && (string[i]=='-' || string[i]=='+'))))
  482.         {
  483.             return false;
  484.         }
  485.     }
  486.     return 0;
  487. }
  488. /**** ************************************************/
  489.  
  490. /**** sscanf Code ****/
  491. stock sscanf(string[], format[], {Float,_}:...)
  492. {
  493.     #if defined isnull
  494.         if (isnull(string))
  495.     #else
  496.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  497.     #endif
  498.         {
  499.             return format[0];
  500.         }
  501.     #pragma tabsize 4
  502.     new
  503.         formatPos = 0,
  504.         stringPos = 0,
  505.         paramPos = 2,
  506.         paramCount = numargs(),
  507.         delim = ' ';
  508.     while (string[stringPos] && string[stringPos] <= ' ')
  509.     {
  510.         stringPos++;
  511.     }
  512.     while (paramPos < paramCount && string[stringPos])
  513.     {
  514.         switch (format[formatPos++])
  515.         {
  516.             case '\0':
  517.             {
  518.                 return 0;
  519.             }
  520.             case 'i', 'd':
  521.             {
  522.                 new
  523.                     neg = 1,
  524.                     num = 0,
  525.                     ch = string[stringPos];
  526.                 if (ch == '-')
  527.                 {
  528.                     neg = -1;
  529.                     ch = string[++stringPos];
  530.                 }
  531.                 do
  532.                 {
  533.                     stringPos++;
  534.                     if ('0' <= ch <= '9')
  535.                     {
  536.                         num = (num * 10) + (ch - '0');
  537.                     }
  538.                     else
  539.                     {
  540.                         return -1;
  541.                     }
  542.                 }
  543.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  544.                 setarg(paramPos, 0, num * neg);
  545.             }
  546.             case 'h', 'x':
  547.             {
  548.                 new
  549.                     num = 0,
  550.                     ch = string[stringPos];
  551.                 do
  552.                 {
  553.                     stringPos++;
  554.                     switch (ch)
  555.                     {
  556.                         case 'x', 'X':
  557.                         {
  558.                             num = 0;
  559.                             continue;
  560.                         }
  561.                         case '0' .. '9':
  562.                         {
  563.                             num = (num << 4) | (ch - '0');
  564.                         }
  565.                         case 'a' .. 'f':
  566.                         {
  567.                             num = (num << 4) | (ch - ('a' - 10));
  568.                         }
  569.                         case 'A' .. 'F':
  570.                         {
  571.                             num = (num << 4) | (ch - ('A' - 10));
  572.                         }
  573.                         default:
  574.                         {
  575.                             return -1;
  576.                         }
  577.                     }
  578.                 }
  579.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  580.                 setarg(paramPos, 0, num);
  581.             }
  582.             case 'c':
  583.             {
  584.                 setarg(paramPos, 0, string[stringPos++]);
  585.             }
  586.             case 'f':
  587.             {
  588.  
  589.                 new changestr[16], changepos = 0, strpos = stringPos;    
  590.                 while(changepos < 16 && string[strpos] && string[strpos] != delim)
  591.                 {
  592.                     changestr[changepos++] = string[strpos++];
  593.                     }
  594.                 changestr[changepos] = '\0';
  595.                 setarg(paramPos,0,_:floatstr(changestr));
  596.             }
  597.             case 'p':
  598.             {
  599.                 delim = format[formatPos++];
  600.                 continue;
  601.             }
  602.             case '\'':
  603.             {
  604.                 new
  605.                     end = formatPos - 1,
  606.                     ch;
  607.                 while ((ch = format[++end]) && ch != '\'') {}
  608.                 if (!ch)
  609.                 {
  610.                     return -1;
  611.                 }
  612.                 format[end] = '\0';
  613.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  614.                 {
  615.                     if (format[end + 1])
  616.                     {
  617.                         return -1;
  618.                     }
  619.                     return 0;
  620.                 }
  621.                 format[end] = '\'';
  622.                 stringPos = ch + (end - formatPos);
  623.                 formatPos = end + 1;
  624.             }
  625.             case 'u':
  626.             {
  627.                 new
  628.                     end = stringPos - 1,
  629.                     id = 0,
  630.                     bool:num = true,
  631.                     ch;
  632.                 while ((ch = string[++end]) && ch != delim)
  633.                 {
  634.                     if (num)
  635.                     {
  636.                         if ('0' <= ch <= '9')
  637.                         {
  638.                             id = (id * 10) + (ch - '0');
  639.                         }
  640.                         else
  641.                         {
  642.                             num = false;
  643.                         }
  644.                     }
  645.                 }
  646.                 if (num && IsPlayerConnected(id))
  647.                 {
  648.                     setarg(paramPos, 0, id);
  649.                 }
  650.                 else
  651.                 {
  652.                     #if !defined foreach
  653.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  654.                         #define __SSCANF_FOREACH__
  655.                     #endif
  656.                     string[end] = '\0';
  657.                     num = false;
  658.                     new
  659.                         name[MAX_PLAYER_NAME];
  660.                     id = end - stringPos;
  661.                     foreach (Player, playerid)
  662.                     {
  663.                         GetPlayerName(playerid, name, sizeof (name));
  664.                         if (!strcmp(name, string[stringPos], true, id))
  665.                         {
  666.                             setarg(paramPos, 0, playerid);
  667.                             num = true;
  668.                             break;
  669.                         }
  670.                     }
  671.                     if (!num)
  672.                     {
  673.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  674.                     }
  675.                     string[end] = ch;
  676.                     #if defined __SSCANF_FOREACH__
  677.                         #undef foreach
  678.                         #undef __SSCANF_FOREACH__
  679.                     #endif
  680.                 }
  681.                 stringPos = end;
  682.             }
  683.             case 's', 'z':
  684.             {
  685.                 new
  686.                     i = 0,
  687.                     ch;
  688.                 if (format[formatPos])
  689.                 {
  690.                     while ((ch = string[stringPos++]) && ch != delim)
  691.                     {
  692.                         setarg(paramPos, i++, ch);
  693.                     }
  694.                     if (!i)
  695.                     {
  696.                         return -1;
  697.                     }
  698.                 }
  699.                 else
  700.                 {
  701.                     while ((ch = string[stringPos++]))
  702.                     {
  703.                         setarg(paramPos, i++, ch);
  704.                     }
  705.                 }
  706.                 stringPos--;
  707.                 setarg(paramPos, i, '\0');
  708.             }
  709.             default:
  710.             {
  711.                 continue;
  712.             }
  713.         }
  714.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  715.         {
  716.             stringPos++;
  717.         }
  718.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  719.         {
  720.             stringPos++;
  721.         }
  722.         paramPos++;
  723.     }
  724.     do
  725.     {
  726.         if ((delim = format[formatPos++]) > ' ')
  727.         {
  728.             if (delim == '\'')
  729.             {
  730.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  731.             }
  732.             else if (delim != 'z')
  733.             {
  734.                 return delim;
  735.             }
  736.         }
  737.     }
  738.     while (delim > ' ');
  739.     return 0;
  740. }
  741. /*************** ****************************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement