[Include] (Race)-Checkpoint Routen Ersteller

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [Include] (Race)-Checkpoint Routen Ersteller

      Guten Abend liebe Brotfische,

      mir war mal wieder langweilig und ich habe ein kleines Include erstellt, mit dessen Hilfe, man extrem schnell & einfach Routen erstellen kann mit Checkpoints.

      Egal ob RaceCheckpoints oder normale Checkpoints nun geht alles zack zack.

      Grundsätzliche Vorteile:
      • Das Include besteht nur aus Makros. Das bedeutet, man hat 0 Performanz einbußen während der Laufzeit. Es lässt sich nur alles leichter erstellen und verwalten.
      • Viele erstellen z.B. dafür immer so counter Variablen: new checkPoint1[MAX_PLAYERS]; und reservieren massig speicher..nur um einen index mitzuzählen. Das entfällt hier komplett, das bedeutet, man spart hier speicher :)
      • Man benötigt viel weniger Code.
      • Wenn man z.B. mit new die zähler Variable setzt, muss man sie auch wieder resetten, hier wird das automatisch gemacht.
      So, um das besser leserlich zu machen, teile ich den Post nun in Checkpoint & Race-Checkpoints auf:

      Checkpoints:
      Spoiler anzeigen

      C-Quellcode

      1. StartCheckpoint<Route>(playerid, start_index, struct[], size);
      2. /*
      3. Route = Die Routenid...wird im unteren erklärt werden
      4. playerid = Die Spielerid dem der Checkpoint angezeigt werden soll
      5. start_index = Der Index, wo die Route starten soll (Standard Fall=0)
      6. struct[] = Hier wurden alle Punkte der Route deklariert.
      7. size = Checkpoint größe :)
      8. */
      9. IsInCheckpoint(playerid, struct[]<Route>);
      10. /*
      11. playerid = Spielerid bei der geprüft wird, in welchem Checkpoint er ist.
      12. struct[] = Wie oben, wo die Routen Punkte deklariert wurden.
      13. Route = Routenid
      14. */
      15. NextCheckpoint(playerid, struct[]<Route>, size);
      16. /*
      17. playerid = Spielerid dem der Checkpoint angezeigt wird.
      18. struct[] = Wie oben, wo die Routen Punkte deklariert wurden.
      19. Route = Routenid
      20. size = Die größe vom Nächsten Checkpoint :)
      21. */
      22. GetRouteCounter<Route>(playerid);
      23. /*
      24. playerid = Spielerid bei der geprüft wird, in welchem Checkpoint er ist.
      25. Route = Routenid
      26. */
      27. ClearCheckpoint<Route>(playerid);
      28. /*
      29. playerid = Spielerid dem der Checkpoint verschwindet & speicher frei gemacht wird.
      30. Route = Routenid
      31. */
      Alles anzeigen


      Beispiel:

      C-Quellcode

      1. //Das hier oben ins Skript
      2. //Sieht bei Race & Normal Checkpoint gleich aus :)
      3. enum //So definiert man Routen :)
      4. {
      5. TEST_ROUTE,
      6. TUT_ROUTE,
      7. KP_ROUTE
      8. };
      9. struct ~Points~ //Das wäre die Route "Points"
      10. {
      11. {0.0, 5.0, 3.0},
      12. {0.0, 10.0, 3.0},
      13. {0.0, 15.0, 3.0},
      14. {0.0, 20.0, 3.0},
      15. {0.0, 25.0, 3.0},
      16. {0.0, 30.0, 3.0},
      17. {0.0, 40.0, 3.0},
      18. {0.0, 50.0, 3.0},
      19. {50.0, 60.0, 3.0}
      20. };
      21. //So startet man die Route:
      22. StartCheckpoint<TEST_ROUTE>(playerid, START_CHECKPOINT, Points, 4.0);
      23. //4.0 = Checkpoint größe (size)
      24. //START_CHECKPOINT ist in der Route eben [0] (damit die Route am Anfang anfängt)
      25. //Und die Routen id hier ist TEST_ROUTE
      26. public OnPlayerEnterCheckpoint(playerid)
      27. {
      28. switch(IsInCheckpoint(playerid,Points<TEST_ROUTE>)) //Prüft ob er überhaupt drinnen ist (wenn nicht wird -1 ausgegeben) FINAL_CHECKPOINT (1) und NORMAL_CHECKPOINT (0) :)
      29. {
      30. case FINAL_CHECKPOINT: //Springt halt hier rein, wenn der Spieler im Finalen Checkpoint ist
      31. {
      32. SendClientMessage(playerid,0xFF0000FF,!"* Finalen Checkpoint von TEST_ROUTE erreicht!");
      33. ClearCheckpoint<TEST_ROUTE>(playerid); //SEHR WICHTIG!! Lässt den Checkpoint verschwinden & räumt den Speicher auf.
      34. }
      35. case NORMAL_CHECKPOINT:
      36. {
      37. new string[64],x = GetRouteCounter<TEST_ROUTE>(playerid); //x = gibt an, im wie vielten Checkpoint er ist. Kann man auch über einen switch laufen lassen, wenn man z.B. für jeden bestimmten Checkpoint verschiedene Aktionen ausführen will.
      38. format(string,sizeof(string),"Checkpoint %d betreten, von TEST_ROUTE",x);
      39. SendClientMessage(playerid,-1,string);
      40. NextCheckpoint(playerid, Points<TEST_ROUTE>, 5.0); //Sagt, dass der Nächste Checkpoint aufgerufen werden soll.
      41. }
      42. }
      43. return 1;
      44. }
      Alles anzeigen




      Race-Checkpoints:
      Spoiler anzeigen


      C-Quellcode

      1. StartRaceCheckpoint<Route>(playerid, type, start_index, struct[], size);
      2. /*
      3. Route = Die Routenid...wird im unteren erklärt werden
      4. playerid = Die Spielerid dem der Checkpoint angezeigt werden soll
      5. type = RaceCheckpoint Type
      6. start_index = Der Index, wo die Route starten soll (Standard Fall=0)
      7. struct[] = Hier wurden alle Punkte der Route deklariert.
      8. size = Checkpoint größe :)
      9. */
      10. IsInRaceCheckpoint(playerid, struct[]<Route>);
      11. /*
      12. playerid = Spielerid bei der geprüft wird, in welchem Checkpoint er ist.
      13. struct[] = Wie oben, wo die Routen Punkte deklariert wurden.
      14. Route = Routenid
      15. */
      16. NextRaceCheckpoint(playerid, struct[]<Route>, size, type);
      17. /*
      18. playerid = Spielerid dem der Checkpoint angezeigt wird.
      19. struct[] = Wie oben, wo die Routen Punkte deklariert wurden.
      20. Route = Routenid
      21. size = Die größe vom Nächsten Checkpoint :)
      22. type = RaceCheckpoint Typ für Nächsten Checkpoint :)
      23. */
      24. GetRaceRouteCounter<Route>(playerid);
      25. /*
      26. playerid = Spielerid bei der geprüft wird, in welchem Checkpoint er ist.
      27. Route = Routenid
      28. */
      29. ClearRaceCheckpoint<Route>(playerid);
      30. /*
      31. playerid = Spielerid dem der Checkpoint verschwindet & speicher frei gemacht wird.
      32. Route = Routenid
      33. */
      Alles anzeigen
      Beispiel:

      C-Quellcode

      1. //Oben im Skript:
      2. enum //So kann man ganz viele Routen definieren
      3. {
      4. TEST_ROUTE,
      5. TUT_ROUTE,
      6. KP_ROUTE
      7. };
      8. struct ~Points~ //Test Route..mit dem Namen "Points"
      9. {
      10. {0.0, 5.0, 3.0},
      11. {0.0, 10.0, 3.0},
      12. {0.0, 15.0, 3.0},
      13. {0.0, 20.0, 3.0},
      14. {0.0, 25.0, 3.0},
      15. {0.0, 30.0, 3.0},
      16. {0.0, 40.0, 3.0},
      17. {0.0, 50.0, 3.0},
      18. {50.0, 60.0, 3.0}
      19. };
      20. //Da wo die Route starten soll:
      21. StartRaceCheckpoint<TEST_ROUTE>(playerid, NORMAL_TYPE, START_CHECKPOINT, Points, 4.0);
      22. //Normal_TYPE kann man im wiki nachlesen
      23. //START_CHECKPOINT ist in der Route eben [0] (damit die Route am Anfang anfängt)
      24. //Und die routenid hier ist TEST_ROUTE
      25. public OnPlayerEnterRaceCheckpoint(playerid)
      26. {
      27. switch(IsInRaceCheckpoint(playerid,Points<TEST_ROUTE>)) //Prüft ob er den letzten Checkpoint erreicht hat..oder nur einen normalen
      28. {
      29. case FINAL_CHECKPOINT: //Hier hätte er den letzten erreicht!
      30. {
      31. SendClientMessage(playerid,0xFF0000FF,"* Finalen Race Checkpoint von TEST_ROUTE erreicht!");
      32. ClearRaceCheckpoint<TEST_ROUTE>(playerid); //Ganz WICHTIG! Zum checkpoint verschwinden lassen & memory free
      33. }
      34. case NORMAL_CHECKPOINT:
      35. {
      36. new string[64],x = GetRaceRouteCounter<TEST_ROUTE>(playerid); //x = gibt an, welchen Checkpoint er betreten hat (beginnt bei 0)...das könnte man auch über einen switch laufen lassen und somit verschiedene aktionen pro checkpoint ausführen lassen :)
      37. format(string,sizeof(string),"Race-Checkpoint %d betreten, von TEST_ROUTE",x);
      38. SendClientMessage(playerid,-1,string);
      39. NextRaceCheckpoint(playerid, Points<TEST_ROUTE>, 5.0, (IsNextFinish(x,Points)) ? FINISH_TYPE : NORMAL_TYPE); //hintere Bedingung prüft ob er kurz vor dem letzten Checkpoint steht, wenn ja soll FINISH_TYPE (diese Flagge da) im Checkpoint angezeigt werden.
      40. }
      41. }
      42. //Falls diese Route nicht gestartet wurde..wird der switch übersprungen :)
      43. //Wichtig, dass man nicht mehrere Routen startet xD
      44. //Und keine Angst, beim login werden die Daten zurückgesetzt!
      45. return 1;
      46. }
      Alles anzeigen


      Schluss:

      Bei Fragen oder Problemen gerne einfach melden :)
      Natürlich freue ich mich jederzeit über ein kleines Feedback ^^
      In den jeweiligen case Szenarien unter OnPlayerEnter(Race)Checkpoint, könnt ihr auch jeweils am ende ein return 1; setzen, damit nachfolgender Code nicht mehr aufgerufen wird :)

      Download:
      Source-Code: Pastebin
      Direkter-Download: MediaFire


      Mit freundlichen Grüßen :thumbup:


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/