[TuT]Fightstyles im Gym mit Menü kaufen.

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
  • Heyho,
    ich möchte heute kurz erklären, wie man sich ein Fightstyle Kauf-Menü erstellen kann, und dazu noch das Gym.


    Schrit 1:
    Als erstes brauchen wir das Gym. Dazu geht ihr auf einen beliebigen Server, sucht euch das ein beliebiges Gebäude ( Ich empfehle ein Gym zu nehmen. ) und speichert direkt vor der Tür mit /save NAME. Den Namen könnt ihr selbst aussuchen. Dann brauchen wir noch den Punkt, wo man beim rausgehen spawnen soll. Er sollte nicht zu nah am ersten Save sein, da man sich sonst direkt wieder rein teleportiert. Wenn wir das haben können wir Samp erst mal wieder schließen. Jetzt geht ihr in euer Script und fügt ein paar Sachen.
    new gymenter;
    Das kommt unter eure #defines. Falls ihr noch keine habt, macht es unter das #include <a_samp>!
    Hiermit erstellen wir die Variable "gymenter", mit der wir dann den Eingang erstellen.
    Jetzt erstellen wir das Pickup, mit dem wir in das Gebäude gelangen. Dies machen wir im Public OnGameModeInit mit:
    gymenter = CreatePickup(1559, 1, X, Y, Z, 0);
    So erstellen wir das Pickup Gymenter, mit der Variable "gymenter". Die 1559 in den klammern ist die ID des Objektes. 1 ist der Typ des Pickups ( Siehe hier ) in dem Fall ein Pickup, was nie verschwindet.
    bei X, Y, Z tragt ihr eure Positionen aus der savedpositions ein ( C:\Benutzer\Dein Name\Eigene Dokumente\GTA San Andreas Userfiles\SAMP\savedpositions\ ). So sieht das in der "savedpositions" aus: AddPlayerClass(0,1968.6398,2295.7913,16.4559,353.4849,0,0,0,0,0,0); // Gymenter. Die Rot Markierten sind die X, Y, Z Koordinaten.
    Jetzt müssen wir festlegen, wohin uns das Pickup bringt. Dazu muss das unter
    public OnPlayerPickUpPickup(playerid, pickupid)
    if(pickupid == gymenter)
    {
    SetPlayerPos(playerid, X, Y, Z);
    SetPlayerInterior(playerid, INTERIORID);
    SetPlayerVirtualWorld(playerid, 0);
    }
    Als erstes prüft das "if(pickupid == gymenter)" ob das Pickup was der Spieler grade aufsammelt "gymenter" ist.
    SetPlayerPos(playerid, X, Y, Z); setzt die neue Position ( Pos ) fest.
    SetPlayerInterior(playerid, INTERIORID); legt unser Interior fest.
    SetPlayerVirtualWorld(playerid, 0); legt unsere Virtuelle Welt fest, default ist 0, nur sollte man das Interior erneut gebrauchen, kann man z.B. 1 oder 2 benutzen.
    Die X, Y, Z und die Interiorid von dem Interior finden wir Hier !
    Jetzt kompilieren wir das Ganze und starten unseren Server. Nachdem wir connected haben, fahren wir zum Eingang, und wir sehen einen weißen Kegel. Wenn wir ihn betreten, sind wir dann im gewählten Interior, kommen aber nicht wieder raus. Dafür stellen wir uns an die Position, wo unser Ausgang hin soll, uns Speichern wieder mit /save NAME. Dann brauchen wir auch noch den Spawn, in dem man spawnen soll, wenn man das Gebäude betritt ( wieder /save NAME ) . Jetzt bräuchten wir nur noch eine Position, wo wir dann ein kleines Info Icon machen, wo man sich dann den Fightstyle kaufen kann.
    Jetzt können wir das Spiel wieder verlassen und uns wieder mit den "savedpositions" und unserm Script befassen.
    Jetzt machen wir das gleiche wie mit unserem Eingang, nur setzen ein neues New.
    new gymexit;
    dann erstellen wir wieder ein Pickup.
    gymexit = CreatePickup(1559, 1, X, Y, Z, 0)
    Die X, Y, Z finden wir wieder in den Savedpositions
    Dann müssen wir wieder sagen, was passieren soll wenn er das Pickup betritt.
    Das machen wir genau wie oben, setzen nur die SetPlayerPos(playerid, X, Y, Z) auf die Pos, die wir ganz am Anfang als zweites, als Punkt bei dem man spawnen soll, mit "/save NAME" gespeichert hatten. Das Interior machen wir wieder zu 0 und die VirtualWorld auch. Das sieht dann in etwa so aus:
    if(pickupid == gymexit)
    {
    SetPlayerPos(playerid,1962.3436,2294.6033,15.6821);
    SetPlayerInterior(playerid, 0);
    SetPlayerFacingAngle(playerid, 89.5107);
    SetPlayerVirtualWorld(playerid, 0);
    }
    Und wir ändern bei "gymenter" die Position, die wir mit /save NAME als Spawnpunkt im Interior gesaved hatten.
    Jetzt können wir das Pickup erstellen, indem man sich den Fightstyle kaufen können soll.
    Das SetPlayerFacingAngle(playerid, FACING ANGLE); legt unseren Winkel fest, in den der Spieler "gedreht" ist.
    Wir erstellen wieder ein New:
    new gymfightstyleicon;
    Dann müssen wir wieder ein Pickup erstellen.
    Wieder mit:
    gymfightstyleicon = CreatePickup(1239, 1, X, Y, Z, 0);
    Das Objekt 1239 ist ein kleines Info Icon.
    Jetzt müssen wir wieder festlegen, was passieren soll, wenn man das Pickup aufhebt.
    Das machen wir wieder unter dem Public OnPlayerPickUpPickup:
    Version 1:
    Das Fightstyle Menü mit einem Befehl aufrufen.
    if(pickupid ==gymfightstyleicon)
    {
    GameTextForPlayer(playerid,"Benutze '/Meinbefehl' um deinen fightstyle zu ändern!", 3000, 1);
    }
    Das GameTextForPlayer(playerid, "Nachricht", Zeit, Style); zeigt dem Spieler einen Kleinen Text, indem aufgefordert wird, '/Meinbefehl' einzutippen. Bei der Zeit entspricht 1000 einer Sekunde.
    Verion 2:
    Das Fightstyle Menü mit dem Pickup aufrufen:
    if(pickupid == gymfightstyleicon)
    {
    ShowPlayerDialog(playerid,fightstyle,DIALOG_STYLE_LIST,"Fightstyle","Normal\nBoxing\nKungfu\nKneehead\nGrabkick\nElbow","Auswählen","Abbrechen");
    }
    Das ShowPlayerDialog(playerid,fightstyle,DIALOG_STYLE_LIST,"Fightstyle","Normal\nBoxing\nKungfu\nKneehead\nGrabkick\nElbow","Auswählen","Abbrechen"); ruft ein Menü auf, mit dem man dann direkt den Fightstyle auswählen kann. Das fightstlye ist die Variable des Menü's ( später mehr! ). Das DIALOG_STYLE_LIST is der Style des Menüs ( Mehr hier ) dann zeigt das "Normal\nBoxing\nKungfu\nKneehead\nGrabkick\nElbow" die Auswahlen an. "\n" startet eine neue Zeile/Reihe. Das "Auswählen","Abbrechen" sind die beiden Knöpfe unten im Menü.


    Jetzt machen wir das Fightstyle Menü:
    Als erstes müssen wir das Menü definieren. Das machen wir mit:
    #define fightstyle 0
    Das "#define" wird dazu verwendet, etwas zu definieren. "fightstyle" ist der Name den wir dann für das Menü verwenden können. Die "0" ist die ID des Menü's. Falls das euer 2. ist könnt ihr dort eine "1" einfügen, falls es euer drittes ist, "2", usw.
    Dann brauchen wir noch das eigentliche Menü. Dieses machen wir unter
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    mit
    if(dialogid == fightstyle)
    {
    if(response==0) { return 1; }
    if(response==1)
    {
    if(listitem == 0)
    {
    if(GetPlayerMoney(playerid) >= PREIS)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_NORMAL);
    GivePlayerMoney(playerid, -PREIS); // Zieht dem Spieler den Preis ab
    // Hier kann auch noch etwas anderes gemacht werden (Eine Nachricht an den Spieler Senden, etc.)
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE,"SERVER: Du hast nicht genug Geld"); //hier senden wir die Nachricht, das der Jenige nicht genug Geld hat.
    }
    }
    if(listitem == 1)
    {
    if(GetPlayerMoney(playerid) >= PREIS)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_BOXING);
    GivePlayerMoney(playerid, -PREIS); // Zieht dem Spieler den Preis ab
    // Hier kann auch noch etwas anderes gemacht werden (Eine Nachricht an den Spieler Senden, etc.)
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE,"SERVER: Du hast nicht genug Geld"); //hier senden wir die Nachricht, das der Jenige nicht genug Geld hat.
    }
    }
    if(listitem == 2)
    {
    if(GetPlayerMoney(playerid) >= PREIS)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_KUNGFU);
    GivePlayerMoney(playerid, -PREIS); // Zieht dem Spieler den Preis ab
    // Hier kann auch noch etwas anderes gemacht werden (Eine Nachricht an den Spieler Senden, etc.)
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE,"SERVER: Du hast nicht genug Geld"); //hier senden wir die Nachricht, das der Jenige nicht genug Geld hat.
    }
    }
    if(listitem == 3)
    {
    if(GetPlayerMoney(playerid) >= PREIS)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_KNEEHEAD);
    GivePlayerMoney(playerid, -PREIS); // Zieht dem Spieler den Preis ab
    // Hier kann auch noch etwas anderes gemacht werden (Eine Nachricht an den Spieler Senden, etc.)
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE,"SERVER: Du hast nicht genug Geld"); //hier senden wir die Nachricht, das der Jenige nicht genug Geld hat.
    }
    }
    if(listitem == 4)
    {
    if(GetPlayerMoney(playerid) >= PREIS)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_GRABKICK);
    GivePlayerMoney(playerid, -PREIS); // Zieht dem Spieler den Preis ab
    // Hier kann auch noch etwas anderes gemacht werden (Eine Nachricht an den Spieler Senden, etc.)
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE,"SERVER: Du hast nicht genug Geld"); //hier senden wir die Nachricht, das der Jenige nicht genug Geld hat.
    }
    }
    if(listitem == 5)
    {
    if(GetPlayerMoney(playerid) >= PREIS)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_ELBOW);
    GivePlayerMoney(playerid, -PREIS); // Zieht dem Spieler den Preis ab
    // Hier kann auch noch etwas anderes gemacht werden (Eine Nachricht an den Spieler Senden, etc.)
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE,"SERVER: Du hast nicht genug Geld"); //hier senden wir die Nachricht, das der Jenige nicht genug Geld hat.
    }
    }
    }
    }


    Als erstes testet das "if(dialogid == fightstyle)" ob das Menü was angezeigt werden soll, fightstyle ist. Das "if(response==0) { return 1; }" Prüft, ob etwas ausgewählt wird, falls nicht returnt es zu 1. Mit dem "if(response==1)" prüfen wir ob der Jenige etwas auswählt. Dann haben wir noch das "if(listitem == 0)", welches prüft, ob das Aufgelistete Item 1 oder 2, etc. ist. In dem if können wir dann sagen was Passieren soll. Als erstes prüfen wir mit "if(GetPlayerMoney(playerid) >= PREIS)" ob das Geld des Spielers Genügt. Das "else" sagt: "Wenn nicht, dann...".
    Für den Preis machen wir oben wieder ein "#define":
    #define PREIS EuerPreis


    Damit wäre die Version 2 Fertig, zu der Version 1 brauchen wir noch den Befehl.
    Das machen wir unter
    public OnPlayerCommandText(playerid, cmdtext[])
    Und zwar so:
    if (strcmp("/fightstyle", cmdtext, true) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,7.0, X, Y, Z))
    {
    ShowPlayerDialog(playerid,fightstyle,DIALOG_STYLE_LIST,"Fightstyle","Normal\nBoxing\nKungfu\nKneehead\nGrabkick\nElbow","Auswählen","Abbrechen");
    }
    }
    Das if(IsPlayerInRangeOfPoint(playerid,7.0, X, Y, Z) fragt ab, ob der Spieler an dem Punkt ist. Bei X, Y, Z müssen wir die Koordinaten von dem "gymfightstyleicon" einfügen.
    Das "ShowPlayerDialog" hatte ich bereits oben erläutert.


    Damit währen wir dann auch schon Fertig. Jetzt können wir alles Kompilieren, den Server neu starten und testen.



    Bitte beachtet: Dies ist mein erstes Tutorial :thumbup:


    MfG Melle

    3 Mal editiert, zuletzt von {NeRo} ()

  • Das was du gemacht hast ist gzwar hut und schön.
    Jedoch währe es besser wenn du das noch in ein Login/Registersystem einbaust oder ähnliches
    das es wieder geladen wird und gespeichert.
    mfg


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Joa nur da ich das für Anfänger gedacht habe, währe es schätze für sie schwehr zu verstehen, und es sollte nur ein TuT sein, wie man das macht, alle die schon ein Login/Register sys haben, sollten wissen, wie sie das Speichern. Ich würde mich auch sehr über bewertungen mit Punkten freuen ;)

  • Wieso ein GRP Nachbau 8|
    Ich habe versucht das so sauber zu gestalten, wie ich das so im hinschreiben geschafft habe, ich werde das villeicht dann später mal überarbeiten ;)

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

    Ist es GF-Kompatibel =D?

    ...


    Schönes Tutorial. Alles gut erklärt.


    8/10