Advertisement
Guest User

Eventsystem 3.0 by ErikSon

a guest
Mar 3rd, 2014
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 20.22 KB | None | 0 0
  1. /*                                              Eventsystem by ErikSon                              */
  2.  
  3.  
  4. #include <a_samp>
  5. #include <ocmd>
  6.  
  7. //Farben
  8. #define Schwarz         0x000000FF
  9. #define Rot             0xE10000FF
  10. #define Gelb            0xFFE600FF
  11. #define HBlau           0x00FFFFFF
  12. #define DBlau           0x0000FFFF
  13. #define Blau            0x2E9AFEFF
  14. #define HGruen          0x00FF00FF
  15. #define Orange          0xFFAB00FF
  16. #define Weiss           0xFFFFFFFF
  17. #define Grau            0xDCDCDCFF
  18. #define Gold            0xD4A017AA
  19. #define Lila            0x7800FFFF
  20. #define Pink            0xFF00CDFF
  21. #define Gruen           0x009F32FF
  22.  
  23. //Sonstiges
  24. #define SCM         SendClientMessage
  25. #define SCMToAll    SendClientMessageToAll
  26. new fmex[128];
  27. #define SCMToAllF(%0,%1,%2)  format(fmex,128,%1,%2) && SendClientMessageToAll(%0, fmex)
  28. #define SCMF(%0,%1,%2)  format(fmex,128,%2) && SendClientMessage(%0,%1,fmex)
  29.  
  30.  
  31. //Enums
  32. enum EEvent
  33. {
  34.     Float:ex,
  35.     Float:ey,
  36.     Float:ez,
  37.     EventStart,
  38.     Waffe,
  39.     Schuss,
  40.     Float:Leben,
  41.     Float:Armour,
  42.     Fahrzeug
  43. }
  44. new Event[EEvent];
  45.  
  46. new Waffen[MAX_PLAYERS][2],
  47.     CP[MAX_PLAYERS],
  48.     CPI[50],
  49.     Float:CPX[50],
  50.     Float:CPY[50],
  51.     Float:CPZ[50],
  52.     Float:ox[MAX_PLAYERS],
  53.     Float:oy[MAX_PLAYERS],
  54.     Float:oz[MAX_PLAYERS],
  55.     EventVeh[MAX_PLAYERS],
  56.     OnEvent[MAX_PLAYERS];
  57.    
  58.  
  59.  
  60. new VehName[][] =
  61. {
  62.     "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel",
  63.     "Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus",
  64.     "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam",
  65.     "Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BF Injection",
  66.     "Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus",
  67.     "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie",
  68.     "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral",
  69.     "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder",
  70.     "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van",
  71.     "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale",
  72.     "Oceanic","Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy",
  73.     "Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX",
  74.     "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper",
  75.     "Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking",
  76.     "Blista Compact", "Police Maverick", "Boxville", "Benson", "Mesa", "RC Goblin",
  77.     "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT",
  78.     "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster", "Stunt",
  79.     "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra",
  80.     "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune",
  81.     "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer",
  82.     "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent",
  83.     "Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo",
  84.     "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite",
  85.     "Windsor", "Monster", "Monster", "Uranus", "Jester", "Sultan", "Stratium",
  86.     "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito",
  87.     "Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper",
  88.     "Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400",
  89.     "News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
  90.     "Freight Box", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car",
  91.     "Police Car", "Police Car", "Police Ranger", "Picador", "S.W.A.T", "Alpha",
  92.     "Phoenix", "Glendale", "Sadler", "Luggage", "Luggage", "Stairs", "Boxville",
  93.     "Tiller", "Utility Trailer"
  94. };
  95.  
  96. enum
  97. {
  98.     dEventManager,
  99.     dEventManager2,
  100.     dEWaffe,
  101.     dESchuss,
  102.     dEFahrzeug,
  103.     dELeben,
  104.     dEArmour,
  105.     dECP,
  106.     dEDCP
  107. }
  108.  
  109. //////////////////////////////////////
  110. //////////////////////////////////////
  111. //////////////////////////////////////
  112. //////////////////////////////////////
  113.  
  114.  
  115.  
  116.  
  117.  
  118. public OnFilterScriptInit()
  119. {
  120.     print("\n--------------------------------------");
  121.     print("Eventsystem by ErikSon");
  122.     print("--------------------------------------\n");
  123.     Event[Schuss] = 1;
  124.     Event[Waffe] = 0;
  125.     Event[Fahrzeug] = 0;
  126.     Event[Leben] = 100.00;
  127.     Event[Armour] = 100.00;
  128.     for(new i = 0; i<50; i++)
  129.     {
  130.         CPX[i] = 0;
  131.         CPY[i] = 0;
  132.         CPZ[i] = 0;
  133.         CPI[i] = 0;
  134.     }
  135.     return 1;
  136. }
  137.  
  138. public OnPlayerConnect(playerid)
  139. {
  140.     OnEvent[playerid] = 0;
  141.     if(Event[EventStart] == 1)SCM(playerid,Blau,"**Es läuft zur Zeit ein Event. Tippe '/gotoevent', um dich zum Event zu teleportieren.");
  142.     return 1;
  143. }
  144.  
  145. public OnPlayerDisconnect(playerid, reason)
  146. {
  147.     OnEvent[playerid] = 0;
  148.     return 1;
  149. }
  150.  
  151. public OnPlayerSpawn(playerid)
  152. {
  153.     if(OnEvent[playerid] == 1)
  154.     {
  155.         GetPlayerPos(playerid,ox[playerid],oy[playerid],oz[playerid]);
  156.         for (new i = 0; i < 13; i++)GetPlayerWeaponData(playerid, i, Waffen[playerid][0], Waffen[playerid][1]);
  157.         ResetPlayerWeapons(playerid);
  158.         SetPlayerPos(playerid,Event[ex],Event[ey],Event[ez]);
  159.         SetPlayerArmour(playerid,Event[Armour]);
  160.         SetPlayerHealth(playerid,Event[Leben]);
  161.         GivePlayerWeapon(playerid,Event[Waffe],Event[Schuss]);
  162.         EventVeh[playerid] = CreateVehicle(Event[Fahrzeug],Event[ex],Event[ey],Event[ez],-1,1,1,-1);
  163.         SetVehicleNumberPlate(EventVeh[playerid],"Event");
  164.         OnEvent[playerid] = 1;
  165.         PutPlayerInVehicle(playerid,EventVeh[playerid],0);
  166.     }
  167.     return 1;
  168. }
  169.  
  170. public OnPlayerEnterRaceCheckpoint(playerid)
  171. {
  172.     if(IsPlayerInRangeOfPoint(playerid,7,CPX[CP[playerid]],CPY[CP[playerid]],CPZ[CP[playerid]]))
  173.     {
  174.         CP[playerid] ++;
  175.         if(CPI[CP[playerid]] == 0)
  176.         {
  177.             DisablePlayerRaceCheckpoint(playerid);
  178.             SCMToAllF(Blau,"Spieler '%s' ist am Ziel angekommen!",Name(playerid));
  179.         }
  180.         else
  181.         {
  182.             if(CPI[CP[playerid]+1] == 0)SetPlayerRaceCheckpoint(playerid,1,CPX[CP[playerid]],CPY[CP[playerid]],CPZ[CP[playerid]],CPX[CP[playerid]],CPY[CP[playerid]],CPZ[CP[playerid]],7);
  183.             else SetPlayerRaceCheckpoint(playerid,0,CPX[CP[playerid]],CPY[CP[playerid]],CPZ[CP[playerid]],CPX[CP[playerid] +1],CPY[CP[playerid] +1],CPZ[CP[playerid] +1],7);
  184.         }
  185.     }
  186.     return 1;
  187. }
  188.  
  189.  
  190. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  191. {
  192.     new i,s,w,id;
  193.     switch(dialogid)
  194.     {
  195.         case dEventManager:
  196.         {
  197.             if(response)
  198.             {
  199.                 switch(listitem)
  200.                 {
  201.                     case 0:
  202.                     {
  203.                         GetPlayerPos(playerid,Event[ex],Event[ey],Event[ez]);
  204.                         SCMToAll(Blau,"**Es wurde ein Event gestartet. Tippe '/gotoevent', um dich zum Event zu teleportieren.");
  205.                         Event[EventStart] = 1;
  206.                     }
  207.                     case 1:
  208.                     {
  209.                         ShowPlayerDialog(playerid,dECP,DIALOG_STYLE_LIST,"Checkpoints - erstellen/löschen","Checkpoint erstellen\nCheckpoint löschen","Auswählen","Abbrechen");
  210.                     }
  211.                     case 2:ShowPlayerDialog(playerid,dEFahrzeug,DIALOG_STYLE_INPUT,"Fahrzeug","Tippe die Fahrzeug-ID\ndes Fahrzeuges ein,\ndas jeder Eventteilnehmer\nerhalten soll.\n\nUm kein Fahrzeug einzustellen,\ntippe -1 ein.","Auswählen","Abbrechen");
  212.                     case 3:ShowPlayerDialog(playerid,dEWaffe,DIALOG_STYLE_INPUT,"Waffe","Tippe die Waffen-ID der Waffe ein,\ndie jeder Eventteilnehmer\nerhalten soll.\n\nUm keine Waffe einzustellen,\ntippe -1 ein.","Auswählen","Abbrechen");
  213.                     case 4:ShowPlayerDialog(playerid,dESchuss,DIALOG_STYLE_INPUT,"Munition","Tippe ein, wie viel\nMunition jeder Eventteilnehmer\nfür seine Waffe erhalten soll.\n\nUm keine Munition einzustellen,\ntippe -1 ein.","Auswählen","Abbrechen");
  214.                     case 5:ShowPlayerDialog(playerid,dELeben,DIALOG_STYLE_INPUT,"Leben","Tippe ein, wie viel Leben (HP)\njeder Eventteilnehmer erhalten soll.","Auswählen","Abbrechen");
  215.                     case 6:ShowPlayerDialog(playerid,dEArmour,DIALOG_STYLE_INPUT,"Schutzweste","Tippe ein, wie viel Schutzweste\njeder Eventteilnehmer erhalten soll.","Auswählen","Abbrechen");
  216.                 }
  217.             }
  218.         }
  219.         case dECP:
  220.         {
  221.             if(response)
  222.             {
  223.                 new Float:x,Float:y,Float:z,i;
  224.                 x = 0; y = 0; z = 0;
  225.                 switch(listitem)
  226.                 {
  227.                     case 0:
  228.                     {
  229.                         for(i = 0; i<50; i++)
  230.                         {
  231.                             GetPlayerPos(playerid,x,y,z);
  232.                             id = i;
  233.                             if(CPI[id] == 1)continue;
  234.                             CPX[id] = x;
  235.                             CPY[id] = y;
  236.                             CPZ[id] = z;
  237.                             CPI[id] = 1;
  238.                             i += 50;
  239.  
  240.                             SCMF(playerid,Blau,"Checkpoint (%d) wurde auf der Position '%f , %f , %f' platziert.",id,CPX[id],CPY[id],CPZ[id]);
  241.                         }
  242.                     }
  243.                     case 1:ShowPlayerDialog(playerid,dEDCP,DIALOG_STYLE_INPUT,"Checkpoint löschen","Bitte gebe die Checkpoint-ID ein,\n die du löschen willst.\n\nUm alle Checkpoints zu löschen,\ntippe die Zahl 50 ein.","Löschen","Abbrechen");
  244.                 }
  245.             }
  246.         }
  247.         case dEDCP:
  248.         {
  249.             if(response)
  250.             {
  251.                 if(strval(inputtext) < 0 && strval(inputtext) > 50)return ocmd_event(playerid);
  252.                 if(strval(inputtext) == 50)
  253.                 {
  254.                     for(new i=0; i<50; i++)
  255.                     {
  256.                         CPX[i] = 0;
  257.                         CPY[i] = 0;
  258.                         CPZ[i] = 0;
  259.                         CPI[i] = 0;
  260.                     }
  261.                     SCM(playerid,Rot,"Du hast alle Checkpoints gelöscht.");
  262.                 }
  263.                 CPX[strval(inputtext)] = 0;
  264.                 CPY[strval(inputtext)] = 0;
  265.                 CPZ[strval(inputtext)] = 0;
  266.                 CPI[strval(inputtext)] = 0;
  267.                 SCMF(playerid,Rot,"Du hast den Checkpoint %i gelöscht.",strval(inputtext));
  268.             }
  269.         }
  270.        
  271.         case dEFahrzeug:
  272.         {
  273.             if(response)
  274.             {
  275.                 if(strval(inputtext) == -1)
  276.                 {
  277.                     Event[Fahrzeug] = 0;
  278.                     return ocmd_event(playerid);
  279.                 }
  280.                 else if(!strval(inputtext))
  281.                 {
  282.                     SCM(playerid,Rot,"**Bitte gebe eine Fahrzeug-ID ein!");
  283.                     return ocmd_event(playerid);
  284.                 }
  285.                 else if(strval(inputtext) < 400 || strval(inputtext) > 611)
  286.                 {
  287.                     SCM(playerid,Rot,"**Die Fahrzeug-ID darf nicht kleiner als 400 & nicht größer als 611 sein!");
  288.                     return ocmd_event(playerid);
  289.                 }
  290.                 Event[Fahrzeug] = strval(inputtext);
  291.                 return ocmd_event(playerid);
  292.             }
  293.         }
  294.         case dEWaffe:
  295.         {
  296.             if(response)
  297.             {
  298.                 if(strval(inputtext) == -1)
  299.                 {
  300.                     Event[Waffe] = 0;
  301.                     return ocmd_event(playerid);
  302.                 }
  303.                 else if(!strval(inputtext))
  304.                 {
  305.                     SCM(playerid,Rot,"**Bitte gebe eine Waffen-ID ein!");
  306.                     return ocmd_event(playerid);
  307.                 }
  308.                 else if(strval(inputtext) < 0 || strval(inputtext) > 46)
  309.                 {
  310.                     SCM(playerid,Rot,"**Die Waffen-ID darf nicht kleiner als 0 & nicht größer als 46 sein!");
  311.                     return ocmd_event(playerid);
  312.                 }
  313.                 Event[Waffe] = strval(inputtext);
  314.                 return ocmd_event(playerid);
  315.             }
  316.         }
  317.         case dESchuss:
  318.         {
  319.             if(response)
  320.             {
  321.                 if(!strval(inputtext))
  322.                 {
  323.                     SCM(playerid,Rot,"**Bitte gebe eine Schussmenge ein!");
  324.                     return ocmd_event(playerid);
  325.                 }
  326.                 Event[Schuss] = strval(inputtext);
  327.                 return ocmd_event(playerid);
  328.             }
  329.         }
  330.         case dELeben:
  331.         {
  332.             if(response)
  333.             {
  334.                 if(!strval(inputtext))
  335.                 {
  336.                     SCM(playerid,Rot,"**Bitte gebe eine Lebensangabe ein!");
  337.                     return ocmd_event(playerid);
  338.                 }
  339.                 else if(strval(inputtext) < 0)
  340.                 {
  341.                     SCM(playerid,Rot,"**Die Lebensangabe darf nicht kleiner als 0 sein!");
  342.                     return ocmd_event(playerid);
  343.                 }
  344.                 Event[Leben] = strval(inputtext);
  345.                 return ocmd_event(playerid);
  346.             }
  347.         }
  348.         case dEArmour:
  349.         {
  350.             if(response)
  351.             {
  352.                 if(!strval(inputtext))
  353.                 {
  354.                     SCM(playerid,Rot,"**Bitte gebe eine Schutzwestenangabe ein!");
  355.                     return ocmd_event(playerid);
  356.                 }
  357.                 else if(strval(inputtext) < 0)
  358.                 {
  359.                     SCM(playerid,Rot,"**Die Schutzwestenangabe darf nicht kleiner als 0 sein!");
  360.                     return ocmd_event(playerid);
  361.                 }
  362.                 Event[Armour] = strval(inputtext);
  363.                 return ocmd_event(playerid);
  364.             }
  365.         }
  366.         case dEventManager2:
  367.         {
  368.             if(response)
  369.             {
  370.                 switch(listitem)
  371.                 {
  372.                     case 0:
  373.                     {
  374.                         SCMToAll(Rot,"**Das Event wurde beendet.");
  375.                         Event[EventStart] = 0;
  376.                         for(i=0; i<MAX_PLAYERS; i++)
  377.                         {
  378.                             if(OnEvent[i] == 0)continue;
  379.                             ResetPlayerWeapons(i);
  380.                             DestroyVehicle(EventVeh[i]);
  381.                             SetPlayerPos(i,ox[i],oy[i],oz[i]);
  382.                             SetPlayerHealth(i,100);
  383.                             SetPlayerArmour(i,0);
  384.                             OnEvent[i] = 0;
  385.                             for(w = 0; w<13; w++)
  386.                             {
  387.                                 for(s = 0; s<9999; s++)
  388.                                 GivePlayerWeapon(i,Waffen[i][w],Waffen[i][s]);
  389.                             }
  390.                         }
  391.                     }
  392.                 }
  393.             }
  394.         }
  395.     }
  396.     return 0;
  397. }
  398.  
  399. //Befehle
  400. ocmd:gotoevent(playerid)
  401. {
  402.     if(Event[EventStart] == 0)return SCM(playerid,Rot,"**Es läuft zur Zeit kein Event!");
  403.     GetPlayerPos(playerid,ox[playerid],oy[playerid],oz[playerid]);
  404.     for (new i = 0; i < 13; i++)GetPlayerWeaponData(playerid, i, Waffen[playerid][0], Waffen[playerid][1]);
  405.     ResetPlayerWeapons(playerid);
  406.     SetPlayerPos(playerid,Event[ex],Event[ey],Event[ez]);
  407.     SetPlayerArmour(playerid,Event[Armour]);
  408.     SetPlayerHealth(playerid,Event[Leben]);
  409.     GivePlayerWeapon(playerid,Event[Waffe],Event[Schuss]);
  410.     EventVeh[playerid] = CreateVehicle(Event[Fahrzeug],Event[ex],Event[ey],Event[ez],-1,1,1,-1);
  411.     SetVehicleNumberPlate(EventVeh[playerid],"Event");
  412.     OnEvent[playerid] = 1;
  413.     PutPlayerInVehicle(playerid,EventVeh[playerid],0);
  414.    
  415.     if(CPI[0] == 0)return 1;
  416.     CP[playerid] = 0;
  417.     if(CPI[1] == 0)SetPlayerRaceCheckpoint(playerid,1,CPX[0],CPY[0],CPZ[0],CPX[1],CPY[1],CPZ[1],7);
  418.     else SetPlayerRaceCheckpoint(playerid,0,CPX[0],CPY[0],CPZ[0],CPX[1],CPY[1],CPZ[1],7);
  419.     return 1;
  420. }
  421.  
  422. ocmd:event(playerid)
  423. {
  424.     new string[144];
  425.     if(!IsPlayerAdmin(playerid))return SCM(playerid,Rot,"**Du bist kein RCON-Admin!");
  426.     if(Event[Fahrzeug] == 0) {format(string,144,"Event starten\nCheckpoints\nFahrzeug: Keins\nWaffe: %s\nSchuss: %i\nLeben: %.2f\nSchutzweste: %.2f",Waffenname(Event[Waffe]),Event[Schuss],Event[Leben],Event[Armour]);}
  427.     else if(Event[Fahrzeug] != 0) {format(string,144,"Event starten\nCheckpoints\nFahrzeug: %s\nWaffe: %s\nSchuss: %i\nLeben: %.2f\nSchutzweste: %.2f",VehName[Event[Fahrzeug] -400],Waffenname(Event[Waffe]),Event[Schuss],Event[Leben],Event[Armour]);}
  428.     if(Event[EventStart] == 0)ShowPlayerDialog(playerid,dEventManager,DIALOG_STYLE_LIST,"Eventmanager",string,"Auswählen","Abbrechen");
  429.     else if(Event[EventStart] == 1)ShowPlayerDialog(playerid,dEventManager2,DIALOG_STYLE_LIST,"Eventmanager","Event beenden","Auswählen","Abbrechen");
  430.     return 1;
  431. }
  432.  
  433. ocmd:testit(playerid)
  434. {
  435.     if(!IsPlayerAdmin(playerid))return 1;
  436.     GivePlayerWeapon(playerid,24,999);
  437.     GivePlayerWeapon(playerid,29,999);
  438.     GivePlayerWeapon(playerid,34,999);
  439.     SetPlayerArmour(playerid,90);
  440.     SetPlayerHealth(playerid,95);
  441.     return 1;
  442. }
  443.  
  444.  
  445.  
  446.  
  447. //Stocks
  448. stock Waffenname(id)
  449. {
  450.     new wn[32];
  451.     switch(id)
  452.     {
  453.         case 0:(wn = "Faust");
  454.         case 1:(wn = "Schlagring");
  455.         case 2:(wn = "Golfschläger");
  456.         case 3:(wn = "Schlagstock");
  457.         case 4:(wn = "Messer");
  458.         case 5:(wn = "Baseballschläger");
  459.         case 6:(wn = "Schaufel");
  460.         case 7:(wn = "Billiardschläger");
  461.         case 8:(wn = "Katana");
  462.         case 9:(wn = "Kettensäge");
  463.         case 10:(wn = "Dildo");
  464.         case 11:(wn = "Dildo");
  465.         case 12:(wn = "Dildo");
  466.         case 13:(wn = "Dildo");
  467.         case 14:(wn = "Blumen");
  468.         case 15:(wn = "Stock");
  469.         case 16:(wn = "Granate");
  470.         case 17:(wn = "Rauchgranate");
  471.         case 18:(wn = "Molotov");
  472.         case 22:(wn = "9mm");
  473.         case 23:(wn = "Silencer");
  474.         case 24:(wn = "Desert Eagle");
  475.         case 25:(wn = "Shotgun");
  476.         case 26:(wn = "Sawn-off");
  477.         case 27:(wn = "Combat");
  478.         case 28:(wn = "Uzi");
  479.         case 29:(wn = "MP5");
  480.         case 30:(wn = "Ak47");
  481.         case 31:(wn = "M4");
  482.         case 32:(wn = "Tec 9");
  483.         case 33:(wn = "Gewehr");
  484.         case 34:(wn = "Sniper");
  485.         case 35:(wn = "Raketenwerfer");
  486.         case 36:(wn = "Stinger");
  487.         case 37:(wn = "Flammenwerfer");
  488.         case 38:(wn = "Minigun");
  489.         case 39:(wn = "Rucksackbomben");
  490.         case 40:(wn = "Fernzünder");
  491.         case 41:(wn = "Spray");
  492.         case 42:(wn = "Feuerlöscher");
  493.         case 43:(wn = "Kamera");
  494.         case 44:(wn = "Nachtvisier");
  495.         case 45:(wn = "Nachtvisier");
  496.         case 46:(wn = "Fallschirm");
  497.     }
  498.     return wn;
  499. }
  500.  
  501.  
  502. stock Name(playerid)
  503. {
  504.    new name[MAX_PLAYERS];
  505.    GetPlayerName(playerid,name,sizeof(name));
  506.    return name;
  507. }
  508.  
  509. //sscanf Code
  510.  
  511. stock sscanf(string[], format[], {Float,_}:...)
  512. {
  513.     #if defined isnull
  514.         if (isnull(string))
  515.     #else
  516.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  517.     #endif
  518.         {
  519.             return format[0];
  520.         }
  521.     #pragma tabsize 4
  522.     new
  523.         formatPos = 0,
  524.         stringPos = 0,
  525.         paramPos = 2,
  526.         paramCount = numargs(),
  527.         delim = ' ';
  528.     while (string[stringPos] && string[stringPos] <= ' ')
  529.     {
  530.         stringPos++;
  531.     }
  532.     while (paramPos < paramCount && string[stringPos])
  533.     {
  534.         switch (format[formatPos++])
  535.         {
  536.             case '\0':
  537.             {
  538.                 return 0;
  539.             }
  540.             case 'i', 'd':
  541.             {
  542.                 new
  543.                     neg = 1,
  544.                     num = 0,
  545.                     ch = string[stringPos];
  546.                 if (ch == '-')
  547.                 {
  548.                     neg = -1;
  549.                     ch = string[++stringPos];
  550.                 }
  551.                 do
  552.                 {
  553.                     stringPos++;
  554.                     if ('0' <= ch <= '9')
  555.                     {
  556.                         num = (num * 10) + (ch - '0');
  557.                     }
  558.                     else
  559.                     {
  560.                         return -1;
  561.                     }
  562.                 }
  563.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  564.                 setarg(paramPos, 0, num * neg);
  565.             }
  566.             case 'h', 'x':
  567.             {
  568.                 new
  569.                     num = 0,
  570.                     ch = string[stringPos];
  571.                 do
  572.                 {
  573.                     stringPos++;
  574.                     switch (ch)
  575.                     {
  576.                         case 'x', 'X':
  577.                         {
  578.                             num = 0;
  579.                             continue;
  580.                         }
  581.                         case '0' .. '9':
  582.                         {
  583.                             num = (num << 4) | (ch - '0');
  584.                         }
  585.                         case 'a' .. 'f':
  586.                         {
  587.                             num = (num << 4) | (ch - ('a' - 10));
  588.                         }
  589.                         case 'A' .. 'F':
  590.                         {
  591.                             num = (num << 4) | (ch - ('A' - 10));
  592.                         }
  593.                         default:
  594.                         {
  595.                             return -1;
  596.                         }
  597.                     }
  598.                 }
  599.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  600.                 setarg(paramPos, 0, num);
  601.             }
  602.             case 'c':
  603.             {
  604.                 setarg(paramPos, 0, string[stringPos++]);
  605.             }
  606.             case 'f':
  607.             {
  608.  
  609.                 new changestr[16], changepos = 0, strpos = stringPos;
  610.                 while(changepos < 16 && string[strpos] && string[strpos] != delim)
  611.                 {
  612.                     changestr[changepos++] = string[strpos++];
  613.                     }
  614.                 changestr[changepos] = '\0';
  615.                 setarg(paramPos,0,_:floatstr(changestr));
  616.             }
  617.             case 'p':
  618.             {
  619.                 delim = format[formatPos++];
  620.                 continue;
  621.             }
  622.             case '\'':
  623.             {
  624.                 new
  625.                     end = formatPos - 1,
  626.                     ch;
  627.                 while ((ch = format[++end]) && ch != '\'') {}
  628.                 if (!ch)
  629.                 {
  630.                     return -1;
  631.                 }
  632.                 format[end] = '\0';
  633.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  634.                 {
  635.                     if (format[end + 1])
  636.                     {
  637.                         return -1;
  638.                     }
  639.                     return 0;
  640.                 }
  641.                 format[end] = '\'';
  642.                 stringPos = ch + (end - formatPos);
  643.                 formatPos = end + 1;
  644.             }
  645.             case 'u':
  646.             {
  647.                 new
  648.                     end = stringPos - 1,
  649.                     id = 0,
  650.                     bool:num = true,
  651.                     ch;
  652.                 while ((ch = string[++end]) && ch != delim)
  653.                 {
  654.                     if (num)
  655.                     {
  656.                         if ('0' <= ch <= '9')
  657.                         {
  658.                             id = (id * 10) + (ch - '0');
  659.                         }
  660.                         else
  661.                         {
  662.                             num = false;
  663.                         }
  664.                     }
  665.                 }
  666.                 if (num && IsPlayerConnected(id))
  667.                 {
  668.                     setarg(paramPos, 0, id);
  669.                 }
  670.                 else
  671.                 {
  672.                     #if !defined foreach
  673.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  674.                         #define __SSCANF_FOREACH__
  675.                     #endif
  676.                     string[end] = '\0';
  677.                     num = false;
  678.                     new
  679.                         name[MAX_PLAYER_NAME];
  680.                     id = end - stringPos;
  681.                     foreach (Player, playerid)
  682.                     {
  683.                         GetPlayerName(playerid, name, sizeof (name));
  684.                         if (!strcmp(name, string[stringPos], true, id))
  685.                         {
  686.                             setarg(paramPos, 0, playerid);
  687.                             num = true;
  688.                             break;
  689.                         }
  690.                     }
  691.                     if (!num)
  692.                     {
  693.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  694.                     }
  695.                     string[end] = ch;
  696.                     #if defined __SSCANF_FOREACH__
  697.                         #undef foreach
  698.                         #undef __SSCANF_FOREACH__
  699.                     #endif
  700.                 }
  701.                 stringPos = end;
  702.             }
  703.             case 's', 'z':
  704.             {
  705.                 new
  706.                     i = 0,
  707.                     ch;
  708.                 if (format[formatPos])
  709.                 {
  710.                     while ((ch = string[stringPos++]) && ch != delim)
  711.                     {
  712.                         setarg(paramPos, i++, ch);
  713.                     }
  714.                     if (!i)
  715.                     {
  716.                         return -1;
  717.                     }
  718.                 }
  719.                 else
  720.                 {
  721.                     while ((ch = string[stringPos++]))
  722.                     {
  723.                         setarg(paramPos, i++, ch);
  724.                     }
  725.                 }
  726.                 stringPos--;
  727.                 setarg(paramPos, i, '\0');
  728.             }
  729.             default:
  730.             {
  731.                 continue;
  732.             }
  733.         }
  734.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  735.         {
  736.             stringPos++;
  737.         }
  738.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  739.         {
  740.             stringPos++;
  741.         }
  742.         paramPos++;
  743.     }
  744.     do
  745.     {
  746.         if ((delim = format[formatPos++]) > ' ')
  747.         {
  748.             if (delim == '\'')
  749.             {
  750.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  751.             }
  752.             else if (delim != 'z')
  753.             {
  754.                 return delim;
  755.             }
  756.         }
  757.     }
  758.     while (delim > ' ');
  759.     return 0;
  760. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement