Race Generator - v.1.0

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • [FS] RaceGenerator by Diego - v.1.0


    Hallo und herzlich Willkommen in meinem Vorstellungsthema zu RaceG.
    Gestern und heute hatte ich oft Langeweile, also habe ich mich mal rangesetzt und meinen RaceGenerator fertig gescriptet. Ich hatte schon vor etwa 2 Monaten die Idee, ein solches Script zu erstellen, habe den Code allerdings erst jetzt wieder ausgegraben.


    Beschreibung
    Der Filterscript stellt eine Art Generator für Checkpoint-basierende Rennen zur Verfügung. Mit dem Script ist es möglich, im Spiel ein Rennen zu erstellen, die zugehörigen Checkpoints zu speichern und das Rennen auch InGame zu veranstalten. Die Anzahl, sowie natürlich auch die Koordinaten der Checkpoints werden dabei in einer externen Datei gespeichert, sodass sie auch nach einem ReConnect oder einem TimeOut zur Verfügung stehen.


    Funktionsumfang

    • Viele Möglichkeiten zur Erstellung von Rennen
    • Bestimmung von Teilnehmern, nicht jeder muss beim Rennen mitmachen
    • Ein Script mit allen Funktionen: Erstellen, Speichern, Laden, Starten, Abbrechen, uvm.
    • Einfache Bedienung über ein Menü
    • Optionale Nutzung von zwei Befehlen (/savecp und /addplayer) für hohe Produktivität
    • Ermöglicht die Erstellung von unendlich vielen Rennen und unbegrenzt vielen CPs
    • Die Anzeige des Gewinners erfolgt automatisch für alle Teilnehmer
    • Kompatibel mit SA-MP 0.2.2 - 0.3a
    • Kompatibel mit dem GodFather
    • und vieles mehr...

    Lizenzbestimmungen

    Das gesamte Werk steht unter einer 'Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0' - Lizenz.

    • Es ist erlaubt...

    ... den Filterscript zu vervielfältigen und zu verbreiten. Dabei muss immer der ursprüngliche Autor genannt werden.
    ... den Filterscript direkt in den Gamemode einzufügen. Dabei muss immer der ursprüngliche Autor genannt werden.

    • Es ist nicht erlaubt...

    ... den Filterscript unter einer anderen Lizenz zu veröffentlichen.
    ... den Filterscript ohne die Erlaubnis des Autors zur bearbeiten.
    ... den Filterscript kommerziell zu nutzen.
    ... den Filterscript zu verkaufen oder zum/zur Verkauf/Vermietung anzubieten.


    Befehle und Menüelemente

    • Neues Rennen || Erstellt ein neues Rennen
    • CP Speichern || Speichert einen Checkpoint an der derzeitigen Position des Spielers
    • Rennen speichern || Speichert das Rennen und schreibt die Daten in die Eventdatei
    • Rennen laden || Lies die Eventdatei aus und importiert die CP-Daten
    • Spieler hinzufügen || Fügt einen Spieler dem Rennen hinzu
    • Rennen starten || Startet das Rennen für die hinzugefügten Spieler
    • Rennen beenden || Bricht das Rennen vorzeitig ab
    • Menü verlassen || Schließt das RaceG Menü
    • /addplayer [SpielderID] || Fügt den Spieler mit der ausgewählten ID dem Rennen hinzu
    • /savecp || Speichert einen Checkpoint an der derzeitigen Position des Spielers

    Erstellung eines Rennens

    • Im Spiel als RCON-Admin einloggen. (Achtung: Um das RaceG-Menü aufrufen zu können, musst du immer als RCON-Admin eingeloggt sein!)
    • Alt-Taste drücken um das RaceG-Menü aufzurufen
    • Neues Rennen auswählen
    • Checkpoints speichern (Erster CP = Start; Letzter CP = Ziel)
    • Rennen speichern auswählen

    Hinweis: Die Datei wird in folgendem Verzeichnis gespeichert: /scriptfiles/RaceG
    Um ein Rennen zu erstellen, muss vorher der Ordner 'RaceG' im scriptfiles-Verzeichnis angelegt werden!


    Veranstaltung eines Rennens

    • Im Spiel als RCON-Admin einloggen. (Achtung: Um das RaceG-Menü aufrufen zu können, musst du immer als RCON-Admin eingeloggt sein!)
    • Alt-Taste drücken um das RaceG-Menü aufzurufen
    • Rennen laden auswählen
    • Teilnehmer hinzufügen, die mitmachen wollen (/addplayer [SpielerID] oder Spieler hinzufuegen im Menü)
    • Rennen starten (Countdown wird automatisch erstellt)
    • Zusätzlich kann das Rennen nun per Rennen beenden im Menü vorzeitig abgebrochen werden


    Sprache

    • Deutsch

    Support
    Bei Problemen, Unklarheiten und Fragen helfe ich gerne direkt hier im Thema oder auch per PN weiter.
    In ICQ, bei Skype, im TS oder per E-Mail leiste ich allerdings keinen Support! Bitte beachtet, dass ich auch noch andere Sachen zutun habe und nicht die ganze Zeit genervt werden möchte.


    Bugreport
    Wenn ihr auf Fehler im Script oder sogar im Spiel stoßt, reportet diese bitte hier im Thema oder schreibt mir eine PN.


    Für kommende Versionen geplant

    • Mehrsprachigkeit Deutsch und Englisch
    • Codeoptimierung
    • Erstellung von mehreren Eventdateien
    • Menüalternative im Fahrzeug

    Screenshots



    Changelog
    ## v. 1.0 Beta 1

    • Erster Release
    • Finaler Betatest

    ## v. 1.0 Beta 2

    • Bug bei Spieler hinzufügen behoben
    • Rechtschreibfehler gefixt
    • Versionsangabe angepasst
    • GameText bei Sieg geändert
    • String bei OnPlayerText behoben
    • Lizenzbestimmungen geupdatet


    Download
    Sourcecode auf pastebin Update!
    RaceG.pwn & RaceG.amx Update!


    Verbesserungsvorschläge, Lob und Kritik ist natürlich erwünscht. Wenn ihr eine Idee habt, wie man den FS verbessern könnte, postet diese einfach in den Thread.
    PS: Die Icons stammen aus dem WoltLab Burning Board 3.1, liegen allerdings auf meinem Server!


    Aber nun wünsche ich viel Spaß mit dem FS!
    Gruß,
    [RSA]Diego

    5 Mal editiert, zuletzt von [RSA]Diego ()

  • Danke! :)
    Da hast du allerdings Recht, die Vorstellung hat fast länger gebraucht, als der FS ansich. :X
    Naja, der Selbige ist ja auch eher simpel, was die Funktionen angeht. :>


    Was ich oben noch vergessen habe:
    Dies ist eine Beta-Version! Das bedeutet, dass es immer noch, wider Erwarten, zu Fehlern und Problemen kommen kann. Für eventuelle Schäden an Server und Script übernehme ich keine Haftung.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • //edit


    herausgefunden wie es geht

    Einmal editiert, zuletzt von Drake_Bell ()

  • Sehr schönes Script, Diego.
    Aber du hast es leider von mir geklaut.
    Hier ein Ausschnitt, das Script entspricht sich fast:
    Meins:
    if (strcmp("/event_saveCP", cmd, true) == 0 && IsPlayerAdmin(playerid))
    {
    if(creating[playerid])
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    new str[256],key[256];
    format(str,256,"%d,%f,%f,%f,%f",0,x,y,z,5.0);
    format(key,256,"%d",dini_Int(filename2[playerid],"CP_Anzahl"));
    dini_Set(filename2[playerid],key,str);
    dini_IntSet(filename2[playerid],"CP_Anzahl",dini_Int(filename2[playerid],"CP_Anzahl")+1);
    SendClientMessage(playerid,COLOR_EVENT,"Checkpoint gespeichert!");
    } else {
    SendClientMessage(playerid,COLOR_RED,"Du erstellst gerade kein rennen!");
    }
    return 1;
    }
    Angeblich deins:

    if (strcmp("/savecp", cmd, true) == 0 && IsPlayerAdmin(playerid))
    {
    if(Rennen_erstellen[playerid])
    {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    new string2[256];
    new s[256];
    format(string2, 256, "%d, %f, %f, %f, %f", 0, X, Y, Z, 4.5);
    format(s, 256, "%d", dini_Int(Textdatei[playerid], "Anzahl der Checkpoints"));
    dini_Set(Textdatei[playerid], s, string2);
    dini_IntSet(Textdatei[playerid], "Anzahl der Checkpoints", dini_Int(Textdatei[playerid], "Anzahl der Checkpoints")+1);
    SendClientMessage(playerid, FARBE_GRUEN, "[RaceG] [Erfolg] Der Checkpoint wurde erfolgreich gespeichert !");
    SendClientMessage(playerid, FARBE_ORANGE, "[RaceG] [Info] Wenn du deinen letzten CP erstellt hast, kannst du das Rennen mit /saverace speichern.");
    }
    else
    {
    SendClientMessage(playerid, FARBE_HELLROT, "[RaceG] [Fehler] Du hast noch kein Rennen erstellt !");
    SendClientMessage(playerid, FARBE_ORANGE, "[RaceG] [Info] Um CPs speichern zu können, musst du vorher ein Rennen erstellen !");
    }
    TogglePlayerControllable(playerid, true);
    return 1;
    }
    Du hast einfach alle Funktionen ins deutsche übersetzt, gut gemacht :)
    Anscheinend hast du noch das alte Eventsystem von mir.
    Dann hast du schnell noch ein Menü geschrieben, die Funktionen in die Public kopiert und fertig.
    Nur damit die Leute zu RSA kommen. Erbärmlich :thumbdown:
    Warum steht nirgendwo ein Copyrighthinweis von MIR?
    Ich finde es echt schade was so passiert in letzter Zeit :(


    Grüße
    Euer Tobias


    EDIT:

    Zitat

    [..] die Vorstellung hat fast länger gebraucht, als der FS ansich. :X

    Ja kopieren geht schon schnell, nicht wahr?

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."

    Einmal editiert, zuletzt von Atrox ()

  • Ähm...aha?
    Ich weiß gerade nicht von welchem Eventsystem du da sprichst. Kopiert habe ich auf jeden Fall nichts.
    Die dini Befehle sind höchstens aus dem Tut hier im Forum (von Marcel) kopiert, mehr auch nicht.
    Wenn du den Racescript meinst, den du mir seiner Zeit geschickt hast, muss ich dich leider enttäuschen. Den hab ich überhaupt nicht mehr, so, wie ich mich errinere, war der aber auch gar nicht von dir. O_o
    Ich habe mich evtl. von der Idee inspirieren lassen - das mag sein. Doch seit wann gibt es so einer Scriptidee einen Copyright-Hinweis?
    Die beiden Befehle sind sich ähnlich, das stimmt. Das liegt aber auch hauptsächlich daran, da ich dieses Script nun mal kenne. (Du selbst hast es ja damals auf RSA verwendet, demnach kenne ich auch die Befehle.)


    Du kannst ja gerne davon ausgehen, dass ich "dein" Script kopiert habe...glaub was du willst. :S

    Zitat

    Nur damit die Leute zu RSA kommen. Erbärmlich :thumbdown:

    Was zum Teufel hat RSA damit zutun? :O
    Zudem haben wir sowas nicht nötig, atm läuft es mehr als gut.

  • Such doch keine Ausreden.

    Zitat

    Ich weiß gerade nicht von welchem Eventsystem du da sprichst.

    Na von dem RSA Script, das ich mal gescriptet hatte. Hast du auch unten geschrieben! ?(

    Zitat

    Die dini Befehle sind höchstens aus dem Tut hier im Forum (von Marcel) kopiert, mehr auch nicht.

    Ach wirklich? Und dann noch mehr aus meinem Script, ich mir da sicher, ich schreibe unten mal mehr Beispiele, die für mich sprechen!



    Zitat

    Wenn du den Racescript meinst, den du mir seiner Zeit geschickt hast, muss ich dich leider enttäuschen. Den hab ich überhaupt nicht mehr, so, wie ich mich errinere, war der aber auch gar nicht von dir. O_o

    Ach du erinnerst dich an das Eventscript, oben wusstest du nichtmal worum es geht ?( 8|
    Da haben wir es schon, ich habe es dir geschickt und lügen brauchst du nicht, der Anfang des Scriptes war tatsächlich von Hris, ich war ja Scripter von TLSA und ich war für die Events zuständig, er gab mir einen kleinen Anfang und er sagte ich soll es weiter ausbauen. Das tat ich.


    Zitat

    Die beiden Befehle sind sich ähnlich, das stimmt. Das liegt aber auch hauptsächlich daran, da ich dieses Script nun mal kenne. (Du selbst hast es ja damals auf RSA verwendet, demnach kenne ich auch die Befehle.)

    Wie meinst du das? Wenn man einen Befehl IG benutzt, kennt man nicht den KOMPLETTEN Quelltext.


    Hier die Beispiele: ;)


    Meins:
    enum Racecheckpointsenum
    {
    typecp,
    Float:xcp,
    Float:ycp,
    Float:zcp,
    Float:sizecp//Die Reinfolge ist auch gleich, Zufall ? NEIN^^
    }
    new Racecheckpoints[128][Racecheckpointsenum];//Sogar der Array ist gleich groß, zufall, oder?


    Deins:
    enum CP_Daten
    {
    CP_Art,
    Float:Pos_X,
    Float:Pos_Y,
    Float:Pos_Z,
    Float:Groesse
    }
    new CP[128][CP_Daten];


    Meins:

    if(raceloaded)
    {
    SendClientMessage(playerid,COLOR_RED,"Es läuft schon ein Rennen!");
    return 1;
    }
    format(filename2[playerid],256,"event_createrace");
    if(dini_Exists(filename2[playerid]))
    {
    SendClientMessage(playerid,COLOR_EVENT,"Rennen wird geladen");
    new output1[256],output2[256],output3[256],output4[256],output5[256];
    new str[32],key[16];
    new Anzahl=dini_Int(filename2[playerid],"CP_Anzahl");
    for(new i=0;i<Anzahl;i++)
    {
    new index;
    format(key,256,"%d",i);
    format(str,256,"%s",dini_Get(filename2[playerid],key));
    SendClientMessage(playerid,COLOR_EVENT,"bla2");
    output1 = strtok(str, index,',');
    output2 = strtok(str, index,',');
    output3 = strtok(str, index,',');
    output4 = strtok(str, index,',');
    output5 = strtok(str, index,',');
    Racecheckpoints[i][typecp] = strval(output1);
    Racecheckpoints[i][xcp] = floatstr(output2);
    Racecheckpoints[i][ycp] = floatstr(output3);
    Racecheckpoints[i][zcp] = floatstr(output4);
    Racecheckpoints[i][sizecp] = floatstr(output5);
    }
    SendClientMessage(playerid,COLOR_EVENT,"Rennen geladen");
    raceloaded=1;
    } else {
    SendClientMessage(playerid,COLOR_RED,"Diese Datei existiert nicht");
    }
    return 1;
    }
    Deins:
    if(Rennen_geladen)
    {
    SendClientMessage(playerid,FARBE_HELLROT,"[RaceG] [Fehler] Es wurde schon ein Rennen geladen !");
    TogglePlayerControllable(playerid, true);
    return 1;
    }
    format(Textdatei[playerid],256,"/RaceG/RaceG.txt");
    if(dini_Exists(Textdatei[playerid]))
    {
    SendClientMessage(playerid,FARBE_ORANGE,"[RaceG] [Info] Eventdatei wird ausgelesen...");
    new Ausgabe_1[256],Ausgabe_2[256],Ausgabe_3[256],Ausgabe_4[256],Ausgabe_5[256];
    new str[32],key[16];
    new Anzahl=dini_Int(Textdatei[playerid],"Anzahl der Checkpoints");
    for(new i=0;i<Anzahl;i++)
    {
    new index;
    format(key,256,"%d",i);
    format(str,256,"%s",dini_Get(Textdatei[playerid],key));
    SendClientMessage(playerid,FARBE_ORANGE,"[RaceG] [Info] Checkpoints werden ausgelesen...");
    Ausgabe_1 = strtok(str, index,',');
    Ausgabe_2 = strtok(str, index,',');
    Ausgabe_3 = strtok(str, index,',');
    Ausgabe_4 = strtok(str, index,',');
    Ausgabe_5 = strtok(str, index,',');
    CP[i][CP_Art] = strval(Ausgabe_1);
    CP[i][Pos_X] = floatstr(Ausgabe_2);
    CP[i][Pos_Y] = floatstr(Ausgabe_3);
    CP[i][Pos_Z] = floatstr(Ausgabe_4);
    CP[i][Groesse] = floatstr(Ausgabe_5);
    }
    SendClientMessage(playerid,FARBE_GRUEN,"[RaceG] [Erfolg] Das Rennen wurde erfolgreich geladen !");
    Rennen_geladen=1;
    }
    else
    {
    SendClientMessage(playerid,FARBE_HELLROT,"[RaceG] [Fehler] Du hast noch kein Rennen erstellt !");
    }
    TogglePlayerControllable(playerid, true);
    return 1;
    }
    Es gibt zu viele Beweise, ich möchte nicht alle auslisten, wer genau hinsieht merkt es, du hast es kopiert!
    Gibst einfach zu! :S
    Danke für die Aufmerksamkeit :)


    Grüße
    Tobias ;)

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."

  • Rofl, was du dir für eine Mühe gibst, wirklich beachtlich.

    Zitat

    Ach du erinnerst dich an das Eventscript, oben wusstest du nichtmal worum es geht ?( 8|


    Eventscript != Racecode.
    RaceG, sowie auch dein alter Racescript sind keine Eventsysteme bzw. -scripte! Schau doch genau hin, was ich geschrieben habe.
    Du sprichst von einem Eventsystem? Ich kenne kein Eventsystem von dir oder von mir.


    Zitat

    Wie meinst du das? Wenn man einen Befehl IG benutzt, kennt man nicht den KOMPLETTEN Quelltext.


    Wieder so eine schöne Aussage...Ich habe doch eindeutig geschrieben, dass ich das Script kenne. Ich kenne die Befehle, sowie auch den Quellcode, den du mir damals geschickt hast.
    Kopiert ist es aber nun in keinster Weise. Die beiden Scripte sind fast völlig unterschiedlich.


    Sehr interessant, du gibst dir ja wirklich prächtig Mühe, das angebliche Kopieren zu beweisen. In Wirklichkeit möchtest du mich doch nur bloßstellen. ;)
    Nagut, dann spiel' ich doch mal mit. Zu den Beispielen, die du ja fein säuberlich aufgeführt hast, habe ich auch noch etwas zu sagen.
    Diesbezüglich habe ich extra nochmal eine Systemwiederherstellung gemacht und mir den dadurch wiederhergestellten Script angeschaut.
    Die Zeilen (Beispiele) aus dem Script, den angeblich du geschrieben haben soltst, konnte ich komischerweise nicht finden...
    Der Script (event.pwn heißt der bei mir ;>) ist auch völlig anders aufgebaut.
    Ich versuche einfach mal deine angeblichen "Beweise" abzuarbeiten:



    Wieder so ein Mysterium. In dem Script, den du mir damals geschickt hast, kommen die obrigen Definitionen so überhaupt nicht vor!
    Die von dir beschriebene Stelle sieht nämlich in Wirklichkeit so aus:

    Code
    enum RCPData
    {
    	 _RCP,
    	 Float:_X,
    	 Float:_Y,
    	 Float:_Z,
    	 Float:_G
    }
    new CheckP[256][Checkpointsenum]; //Wie war das? Gleiche Arraygröße? Nachdem du es angepasst hast, ist sie natürlich gleich groß. ;) In Wirklichkeit hatte sie bei dir eine Größe 256.


    Die Stelle, wo die Eventdatei ausgelesen wird (Rennen Starten im RaceG Menü) sieht ebenfalls völlig anders aus. Die Auslesung erfolgt z.B. auch an einer anderen Stelle.
    Ich kann den tatsächlichen Code auch liebend gerne hier posten, wenn du es noch nicht begreifen willst...


    In meinem Augen deutet alles darauf hin, dass du meinen Script erst im Nachhinein mit anderen Funktionsnamen versehen hast, damit du es so aussehen lassen kannst, als ob ich deinen Code kopiert hätte.
    Wieso strengst du dich so sehr an? Nur damit du mich hier als Lügner hinstellen kannst? Scheint ja eine tolle Genugtuung zu sein. -_-
    Äußerst erbärmlich.


    So, und nun fahr ich in die Stadt, ich hoffe, ich muss nicht noch mehr Bullshit von dir lesen, wenn ich zurück bin. ~_~
    Gruß,
    Diego

  • Na Diego du lügst wieder.
    Keiner macht eine Systemwiederherstellung, woallem nicht, wenn man genau weiß, dass man Recht hat.
    So dann lade ich halt das Script hoch und jeder kann selbst schauen. http://pastebin.com/m3df60e03
    Ach was sehe ich denn?
    Hier ist ein Beweis, dass du lügst !
    Denn auf dem Datum erkennt man, wann das Script zuletzt benutzt wurde!
    http://img685.imageshack.us/img685/760/screenf.png


    Diego gibts doch einfach zu, warum sollte ich denn eigt. lügen?


    Grüße


    Tobias


    EDIT: Hier das Script mit C++ Syntax: http://pastebin.com/m381779da




    Diego nur schade dass du einen FEHLER hast:

    Doch erklär mir mal, wie soll das Script funktionieren:
    enum RCPData
    {
    _RCP,
    Float:_X,
    Float:_Y,
    Float:_Z,
    Float:_G
    }
    new CheckP[256][Checkpointsenum];
    Dann kann ich das Script NICHT compilen !
    Also hast du dir slebst eine Falle gebaut, und zwar schnell und kurz irgendwas verändert.



    Letzer Beweis:
    http://img188.imageshack.us/img188/540/screen2yg.png

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."

    3 Mal editiert, zuletzt von Atrox ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen