Advertisement
JeffryUGP

[FS] Fraktions-Fahrzeug-System Beispielscript (Dini)

Aug 17th, 2015
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.73 KB | None | 0 0
  1. /*============================================================================================================================*
  2. * Credits: Dieser Filterscript "Fraktions-Fahrzeug-System" wurde von Jeffry gemacht!                                          *
  3. *                                                                                                                             *
  4. *                                                                                                                             *
  5. * Made in August 2015.                                                                                                        *
  6. *                                                                                                                             *
  7. * Rechte des Benutzers:                                                                                                       *
  8. *                                                                                                                             *
  9. * -Es ist erlaubt diesen Filterscript zu modifizieren, solange keine Credits entfernt werden.                                 *
  10. * -Es ist erlaubt diesen Filterscript neu zu veröffentlichen, solange keine Credits entfernt werden.                          *
  11. *                                                                                                                             *
  12. * -Es ist nicht erlaubt dies als sein eigenes Werk darzustellen oder zu verkaufen.                                            *
  13. * -Es ist nicht erlaubt Credits zu entfernen.                                                                                 *
  14. *                                                                                                                             *
  15. * Danke.                                                                                                                      *
  16. * Viel Spaß.                                                                                                                  *
  17. *                                                                                                                             *
  18. *=============================================================================================================================*/
  19. #include <a_samp>
  20. #include <Dini>
  21. #include <ocmd>
  22.  
  23. enum playerEnum {
  24.         pFraction
  25. };
  26. new PlayerInfo[MAX_PLAYERS][playerEnum];
  27.  
  28. #define MAX_FRAC_VEHICLES 10
  29. enum fracVehEnum {
  30.     e_modelID,
  31.     Float:e_x,
  32.     Float:e_y,
  33.     Float:e_z,
  34.     Float:e_a,
  35.     e_color1,
  36.     e_color2,
  37.     e_fracID,
  38.     e_vID
  39. };
  40. new fracVehicle[MAX_FRAC_VEHICLES][fracVehEnum];
  41.  
  42. public OnFilterScriptInit()
  43. {
  44.     LoadFracVehicles();
  45.     SetTimer("SaveAllFracVehs", 60000, true); //Timer wird alle 60 Sekunden ausgeführt
  46.     return 1;
  47. }
  48.  
  49. public OnFilterScriptExit()
  50. {
  51.     SaveAllFracVehs();
  52.     //Schleife durch alle Fraktions-Fahrzeuge:
  53.     for(new i=0; i<MAX_FRAC_VEHICLES; i++)
  54.     {
  55.         //Wenn das Fahrzeug existiert
  56.         if(fracVehicle[i][e_modelID] >= 400 && fracVehicle[i][e_modelID] <= 611)
  57.         {
  58.             DestroyVehicle(fracVehicle[i][e_vID]);
  59.         }
  60.     }
  61.     return 1;
  62. }
  63.  
  64. public OnPlayerExitVehicle(playerid, vehicleid)
  65. {
  66.     SaveFracVehCheck(vehicleid);
  67.     return 1;
  68. }
  69.  
  70. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  71. {
  72.     //Eine Schleife durch alle Fraktions-Fahrzeuge
  73.     for(new i=0; i<MAX_FRAC_VEHICLES; i++)
  74.     {
  75.         //Wenn die vehicleid die gleiche ist, wie die des Fraktions-Fahrzeugs
  76.         if(fracVehicle[i][e_vID] == vehicleid)
  77.         {
  78.             //Jetzt brauchen wir die Variable, mit der Dein vorher bereits existierendes Fraktions-System arbeitet.
  79.             //Ich nehme jetzt einfach eine Beispiel-Variable, diese musst Du selbst mit der ersetzen,
  80.             //die Dein System verwendet.
  81.             //Es geht um diese Variable: PlayerInfo[playerid][pFraction]
  82.             if(PlayerInfo[playerid][pFraction] != fracVehicle[i][e_fracID])
  83.             {
  84.                 //Wenn der Spieler nicht in der Fraktion ist, die das Fahrzeug verwenden darf,
  85.                 //dann darf er es nicht betreten.
  86.                 TogglePlayerControllable(playerid, false);
  87.                 TogglePlayerControllable(playerid, true);
  88.                 SendClientMessage(playerid, 0xFF0000FF, "Du bist nicht in der Fraktion, die dieses Fahrzeug verwenden darf.");
  89.             }
  90.             break; //Es gibt ja keine zwei gleichen Fahrzeuge
  91.         }
  92.     }
  93.     return 1;
  94. }
  95.  
  96. LoadFracVehicles()
  97. {
  98.     //Deklaration neuer temporärer Variablen:
  99.     new createdVehs, path[64];
  100.  
  101.     //Schleife durch alle Dateien:
  102.     for(new i=0; i<MAX_FRAC_VEHICLES; i++)
  103.     {
  104.         //Es wird geprüft, ob ein Fahrzeug mit der ID existiert, wenn nicht, wird diese ID übersprungen
  105.         format(path, sizeof(path), "/fracVehicles/%d.ini", i);
  106.         if(!fexist(path)) continue;
  107.  
  108.         //Fahrzeug existiert im fracVehicles-Ordner, wir laden die Daten jetzt aus der Datei.
  109.         fracVehicle[i][e_modelID] = dini_Int(path, "modelID");
  110.         fracVehicle[i][e_x] = floatstr(dini_Get(path, "x"));
  111.         fracVehicle[i][e_y] = floatstr(dini_Get(path, "y"));
  112.         fracVehicle[i][e_z] = floatstr(dini_Get(path, "z"));
  113.         fracVehicle[i][e_a] = floatstr(dini_Get(path, "a"));
  114.         fracVehicle[i][e_color1] = dini_Int(path, "color1");
  115.         fracVehicle[i][e_color2] = dini_Int(path, "color2");
  116.         fracVehicle[i][e_fracID] = dini_Int(path, "fracID");
  117.  
  118.         //Zur Sicherheit fragen wir hier nun ab, ob das angegebene Modell auch existiert,
  119.         //sollte das nicht der Fall sein, dann wird das Fahrzeug nicht erstellt.
  120.         if(fracVehicle[i][e_modelID] >= 400 && fracVehicle[i][e_modelID] <= 611)
  121.         {
  122.             //Nachdem das Fahrzeug geladen wurde, wird es erstellt.
  123.             fracVehicle[i][e_vID] = CreateVehicle(fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], -1);
  124.         }
  125.         else
  126.         {
  127.             //Falls eine nicht existierende Model-ID angegeben wurde, geben wir eine Information aus.
  128.             printf("[Error] Model-ID %d existiert nicht (ID: %d).", fracVehicle[i][e_modelID], i);
  129.         }
  130.  
  131.         //Zur Sicherheit fragen wir noch ab, ob das Fahrzeug-Limit noch nicht überschritten wurde.
  132.         //Existiert ein Fahrzeug mit der höchsten ID, dann kann kein weiteres mehr erstellt werden.
  133.         if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");
  134.  
  135.         //Zur weiteren Sicherheit prüfen wir noch, ob die maximale Anzahl an Fraktions-Fahrzeugen erreicht ist.
  136.         createdVehs++;
  137.         if(createdVehs == MAX_FRAC_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_FRAC_VEHICLES) erreicht.");
  138.     }
  139.     return 1;
  140. }
  141.  
  142. stock SaveFracVehCheck(vehicleid)
  143. {
  144.     //Deklaration neuer temporärer Variablen:
  145.     new path[64];
  146.  
  147.     //Schleife durch alle Fraktions-Fahrzeuge
  148.     for(new i=0; i<MAX_FRAC_VEHICLES; i++)
  149.     {
  150.         //Wenn die vehicleid die gleiche ist, wie die des Fraktions-Fahrzeugs
  151.         if(fracVehicle[i][e_vID] == vehicleid)
  152.         {
  153.             //Es wird der Pfad gesetzt:
  154.             format(path, sizeof(path), "/fracVehicles/%d.ini", i);
  155.  
  156.             //Wir fragen die Position des Fahrzeugs ab:
  157.             GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
  158.             GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
  159.  
  160.             //Und wir speichern die Daten:
  161.             dini_IntSet(path, "modelID", fracVehicle[i][e_modelID]);
  162.             dini_FloatSet(path, "x", fracVehicle[i][e_x]);
  163.             dini_FloatSet(path, "y", fracVehicle[i][e_y]);
  164.             dini_FloatSet(path, "z", fracVehicle[i][e_z]);
  165.             dini_FloatSet(path, "a", fracVehicle[i][e_a]);
  166.             dini_IntSet(path, "color1", fracVehicle[i][e_color1]);
  167.             dini_IntSet(path, "color2", fracVehicle[i][e_color2]);
  168.             dini_IntSet(path, "fracID", fracVehicle[i][e_fracID]);
  169.             return 1; //Es gibt ja keine zwei gleichen Fahrzeuge
  170.         }
  171.     }
  172.     return 0; //Fahrzeug ist kein Fraktions-Fahrzeug
  173. }
  174.  
  175. forward SaveAllFracVehs();
  176. public SaveAllFracVehs()
  177. {
  178.     //Deklaration neuer temporärer Variablen:
  179.     new path[64];
  180.  
  181.     //Schleife durch alle Fraktions-Fahrzeuge:
  182.     for(new i=0; i<MAX_FRAC_VEHICLES; i++)
  183.     {
  184.         //Wenn das Fahrzeug existiert
  185.         if(fracVehicle[i][e_modelID] >= 400 && fracVehicle[i][e_modelID] <= 611)
  186.         {
  187.             //Es wird der Pfad gesetzt:
  188.             format(path, sizeof(path), "/fracVehicles/%d.ini", i);
  189.  
  190.             //Wir fragen die Position des Fahrzeugs ab:
  191.             GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
  192.             GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
  193.  
  194.             //Und wir speichern die Daten:
  195.             dini_IntSet(path, "modelID", fracVehicle[i][e_modelID]);
  196.             dini_FloatSet(path, "x", fracVehicle[i][e_x]);
  197.             dini_FloatSet(path, "y", fracVehicle[i][e_y]);
  198.             dini_FloatSet(path, "z", fracVehicle[i][e_z]);
  199.             dini_FloatSet(path, "a", fracVehicle[i][e_a]);
  200.             dini_IntSet(path, "color1", fracVehicle[i][e_color1]);
  201.             dini_IntSet(path, "color2", fracVehicle[i][e_color2]);
  202.             dini_IntSet(path, "fracID", fracVehicle[i][e_fracID]);
  203.         }
  204.     }
  205.     return 1;
  206. }
  207.  
  208. stock strtok2(const string[], &index) //©Jeffry
  209. {
  210.     new result[20], length = strlen(string), i = index;
  211.     while ((i < length) && (string[i] == ' ')) i++;
  212.     strmid(result,string,i,((index = strfind(string, " ", false, i)) == -1) ? (index = length) : (index) , 20);
  213.     index++;
  214.     return result;
  215. }
  216.  
  217. stock IsNumeric(string[])
  218. {
  219.     for (new i = 0, j = strlen(string); i < j; i++)
  220.     {
  221.         if ((string[i] > '9' || string[i] < '0')) return 0;
  222.     }
  223.     return 1;
  224. }
  225.  
  226. ocmd:fferstellen(playerid, params[])
  227. {
  228.     //Zuerst fragen wir ab, ob wir noch Fahrzeuge erstellen können
  229.     if(GetVehicleModel(MAX_VEHICLES-1) != 0) return SendClientMessage(playerid, 0xFF0000FF, "Es können keine weiteren Fahrzeuge erstellt werden, Limit (MAX_VEHICLES) erreicht.");
  230.  
  231.     //Wir deklarieren die benötigten temporären Variablen.
  232.     new tmp[20], idx, model, fID, color1 = -1, color2 = -1;
  233.  
  234.     //Anschließend teilen wir mit strtok2 die eingegebenen Paramater auf und wandeln sie in eine Zahl um.
  235.     //Falls etwas falsches eingegeben wurde, geben wir eine entsprechende Meldung zurück.
  236.     tmp = strtok2(params, idx);
  237.     if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
  238.     model = strval(tmp);
  239.     //Eine solche Abfrage kann man auch für nachfolgende FraktionsID (fID) machen, falls gewünscht.
  240.     if(model < 400 || model > 611) return SendClientMessage(playerid, 0xFF0000FF, "Error: Model ID existiert nicht.");
  241.     tmp = strtok2(params, idx);
  242.     if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
  243.     fID = strval(tmp);
  244.     tmp = strtok2(params, idx);
  245.     if(strlen(tmp) && IsNumeric(tmp)) color1 = strval(tmp);
  246.     tmp = strtok2(params, idx);
  247.     if(strlen(tmp) && IsNumeric(tmp)) color2 = strval(tmp);
  248.  
  249.     //Sind alle Parameter korrekt übergeben worden, dann suchen wir uns einen freien Index in den wir das Fraktions-Fahrzeug speichern können.
  250.     for(new i=0; i<MAX_FRAC_VEHICLES; i++)
  251.     {
  252.         //Frei:
  253.         if(fracVehicle[i][e_vID] == 0)
  254.         {
  255.             //Daten werden übergeben
  256.             new Float:x, Float:y, Float:z, Float:a;
  257.             GetPlayerPos(playerid, x, y, z);
  258.             GetPlayerFacingAngle(playerid, a);
  259.             fracVehicle[i][e_modelID] = model;
  260.             fracVehicle[i][e_x] = x;
  261.             fracVehicle[i][e_y] = y;
  262.             fracVehicle[i][e_z] = z;
  263.             fracVehicle[i][e_a] = a;
  264.             fracVehicle[i][e_color1] = color1;
  265.             fracVehicle[i][e_color2] = color2;
  266.             fracVehicle[i][e_fracID] = fID;
  267.  
  268.             //und anschließend wird dann das Fahrzeug erstellt und der Spieler in das Fahrzeug gesetzt.
  269.             fracVehicle[i][e_vID] = CreateVehicle(fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], -1);
  270.             PutPlayerInVehicle(playerid, fracVehicle[i][e_vID], 0);
  271.  
  272.             //Zuletzt wird die Datei angelegt und das Fahrzeug gespeichert.
  273.             new path[64];
  274.             format(path, sizeof(path), "/fracVehicles/%d.ini", i);
  275.             dini_Create(path);
  276.             SaveFracVehCheck(fracVehicle[i][e_vID]);
  277.  
  278.             return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gespeichert.");
  279.         }
  280.     }
  281.     return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit für Fraktions-Fahrzeuge erreicht.");
  282. }
  283.  
  284. ocmd:ffloeschen(playerid, params[])
  285. {
  286.     //Wir deklarieren die benötigte temporäre Variable.
  287.     new vid;
  288.  
  289.     //Wenn der Spieler keine Vehicle-ID eingibt wird die gelöscht, in der sich der Spieler befindet,
  290.     //ansonsten die eingegebene ID.
  291.     if(!IsNumeric(params) || !strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nutze: /ffloeschen [Vehicle ID]");
  292.     vid = strval(params);
  293.  
  294.     if(vid <= 0) return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
  295.  
  296.     for(new i=0; i<MAX_FRAC_VEHICLES; i++)
  297.     {
  298.         //Eingegebene ID und die des Fraktions-Fahrzeugs stimmen überein.
  299.         if(fracVehicle[i][e_vID] == vid)
  300.         {
  301.             //Daten werden entfernt
  302.             fracVehicle[i][e_modelID] = 0;
  303.             fracVehicle[i][e_x] = 0.0;
  304.             fracVehicle[i][e_y] = 0.0;
  305.             fracVehicle[i][e_z] = 0.0;
  306.             fracVehicle[i][e_a] = 0.0;
  307.             fracVehicle[i][e_color1] = 0;
  308.             fracVehicle[i][e_color2] = 0;
  309.             fracVehicle[i][e_fracID] = -1;
  310.  
  311.             //und anschließend in der Datenbank gelöscht.
  312.             new path[64];
  313.             format(path, sizeof(path), "/fracVehicles/%d.ini", i);
  314.             dini_Remove(path);
  315.  
  316.             DestroyVehicle(fracVehicle[i][e_vID]);
  317.             fracVehicle[i][e_vID] = 0;
  318.             return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gelöscht.");
  319.         }
  320.     }
  321.     return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
  322. }
  323.  
  324. ocmd:parken(playerid)
  325. {
  326.     if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Du bist in keinem Fahrzeug.");
  327.     new vehicleid = GetPlayerVehicleID(playerid);
  328.     if(SaveFracVehCheck(vehicleid)) return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug geparkt.");
  329.     else return SendClientMessage(playerid, 0xFF0000FF, "Dieses Fahrzeug kann nicht geparkt werden.");
  330. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement