Räume betreten und verlassen.

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
  • Hallo liebe Community,


    Vorwort:
    heute möchte ich euch mein erstes Tutorial vorstellen. Es ist für die neuen User gedacht, da das betreten von Räumen eigentlich für jede Art von Gamemode wichtig ist. Es ist nicht besonders schwer aber könnte für den ein oder anderen Hilfreich sein und da ich bis jetzt noch nicht so viele Tutorials darüber gesehen habe, werde ich nun eins machen.


    Was wird benötigt?
    Wir benötigen das Programm Pawn, dass kann man auf der sa-mp.com Homepage runterladen, oder auch ganz schnell hier. Dann eventuell einen Colorpicker um ein paar Farben zu ermitteln. Den gibt es zum Beispiel hier. Zudem sollte ein bisschen Grunderfahrung vorhanden sein.


    Einleitung:
    Es ist eigentlich ganz simpel. Jemand der es noch nicht so gut kann, wird wahrscheinlich denken, dass er sowas niemals lernen könnte. Aber wenn man sich den Code mal genauer anguckt und ins deutsche übersetzt, ist die hälfte der Arbeit so gut wie erledigt. Ich werde jetzt mal einen Beispielbefehl schreiben und Ihn dann Stück für Stück zerlegen und erklären.


    Tutorial:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp,"/enter", cmdtext, true, 5) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid, 1.2,1199.2666,-918.3735,43.1214))
    {
    SetPlayerPos(playerid,365.8046,-73.9349,1001.5078);
    SetPlayerFacingAngle(playerid,269.9556);
    SetPlayerInterior(playerid,10);
    GameTextForPlayer(playerid,"Willkommen im Burger Shot North.", 5000, 5);
    }
    else
    {
    SendClientMessage(playerid, 0x00D7FFFF,"** Du befindest dich an keinem {}Eingang{}!");
    }
    return 1;
    }
    return 0;
    }


    Das ist zum Beispiel ein /enter-Befehl für das BSN. Sieht vieleicht schwierig aus, ist es aber nicht.


    if(IsPlayerInRangeOfPoint(playerid, 1.2,1199.2666,-918.3735,43.1214))


    So sieht es leer aus:


    if(IsPlayerInRangeOfPoint(playerid, Float:range, Float:x, Float:y, Float:z)


    Wörtlich übersetz heißt es "IstSpielerInReichtweiterVomPunkt", d.h. hier wird bestimmt, wie nah der Spieler an diesem Punkt seinen muss, damit er in dem Fall /enter eingeben kann. Natürlich kann man diesen Punkt nicht sehen, aber dafür gibt es Pickups (mehr dazu später). Float:range bedeutet, dass hier der Radius bestimmt wird, indem unser Befehl eingegeben werden kann. Float:x, Float:y, Float:z , da kommen unsere Koorinaten rein. Ausführliche Informationen gibt's hier.


    Natürlich kann kein Mensch sich jede Koordinate von ganz San Andreas merken, aber dafür gibt es den SA-MP DeBug. Den findet Ihr in eurem GTA San Andreas Ordner. Einfach doppelklick draufmachen und "Launch Debug" auswählen. Dann geht Ihr zu einer bestimmen stelle und gibt "/save [Name]" ein. Bei dem Namen einfach ein Stichwort, damit Ihr später auch noch wisst, was es für eine Koordinate war. Die Koordinaten findet Ihr in den GTA San Andreas User Files, dann auf SAMP und danach auf savedpositions.txt . Das sieht dann so aus:


    AddPlayerClass(0,2522.0071,-1678.7562,15.4970,88.2046,0,0,0,0,0,0); // Spawn


    Wir benötigen aber nur die ersten 3 Koordinaten. Die 4. ist der Blickwinkel, auch FacingAngle genannt (ebensfalls mehr dazu später).


    SetPlayerPos(playerid,Float:x,Float:y,Float:z);


    Das ist die Position, wo der Spieler hinkommt wenn er /enter eingegeben hat. Die könnte ihr genauso wie oben beschrieben einfach mit dem SA-MP DeBug bestimmen.


    SetPlayerFacingAngle(playerid,Float:ang);


    So, das ist der Blickwinkel, übersetz bedeutet es sowas wie "bestimme den Blickwinkel des Spielers". Er bestimmt (wie der Name schon sagt) die Blickrichtung der Figur. Mehr dazu hier.


    SetPlayerInterior(playerid,interiorid);


    hier wird der Innenraum bestimmt, in den der Spieler kommen soll. Die Liste aller Innenräume gibt es hier.


    GameTextForPlayer(playerid,"Willkommen im Burger Shot North.", 5000, 5);


    Das ist ein einfacher Text der dem Spieler angezeigt wird, wenn er teleportiert wurden ist.


    else
    {
    SendClientMessage(playerid, 0x00D7FFFF,"** Du befindest dich an keinem Eingang!");
    }


    Das bedeutet, wenn der Spieler nicht in der nähe des bestimmten Punktes ist, bekommt er eine Meldung, dass er sich an keinem Eingang befindet.


    Wie ihr sehen könnt, eigentlich total simpel. Theoretisch könnte man es auch in einem Text beschreiben. Wenn der Spieler /enter eingibt, dann wird geprüft ob er sich im Radius befindet, wenn ja dann wird er zum geschünschten Punkt Teleportier, guckt in die Gewählte Richtung und ist ihm gewählten Innenraum. Wenn er sich nicht im Radius befindet, dann bekommt er eine Meldung, dass er sich an keinem Eingang befindet.


    Ich hoffe euch hat mein Tutorial gefallen und auch ein Stück weitergebracht. Über Kritik würde ich mich sehr freuen.


    Mit freundlichen Grüßen
    Dominik


    Teil 2 wird gleich folgen....

    Einmal editiert, zuletzt von Domme7600 ()

  • Enterfunktion mit Befehl ist total out.
    Wenn du mal erklären könntest ,wenn man in der Nähe von Punkt A ist soll man zu Punkt B teleportiert werden...


    Das ist interessanter und bequemer.


    Aber solche Tutorials gibt es schon sehr oft.


    Trotzdem du hast dir viel Mühe gegeben und das ist auch wichtig!

  • So weiter mit Teil 2.

    Der Exit-Befel funktioniert genauso wie der enter Befehl, zerlegen muss ich es glaube ich nicht mehr weil es genau wie oben ist, hier ein Beispiel.


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp,"/exit", cmdtext, true, 4) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,Float:range,Float:x Float:y Float:z)) //Hier wieder die Position vom Ausgang und die Reichweite
    {
    SetPlayerPos(playerid, Float:x Float:y Float:z); // hier kommen jetzt die koordinaten hin, wo der spieler hinkommt wenn er /exit eingibt
    SetPlayerFacingAngle(playerid,Float:angle); // Wieder die Blickrichtung
    SetPlayerInterior(playerid,interiorid; // Hier müsst ihr 0 eingeben, da Interior 0 die "normale Welt" ist
    }
    else
    {
    SendClientMessage(playerid, 0x00D7FFFF,"** Du befindest dich an keinem Ausgang!");
    }
    return 1;
    }
    return 0;
    }


    Probiert es, es ist total simpel. Auch wenn es altmodisch seinen mag aber ich finde es immernoch am besten. Falls ihr fragen habt, bitte hier posten!


    Mit freundlichen Grüßen
    Dominik

  • Hallo!


    Das Tutorial ist sehr schön geschrieben, gefällt mir gut.
    Allerdings benutzt kaum noch ein Server die klassischen /enter & /exit Befehle, sondern entweder automatische Teleports, oder Teleports mit Tastendruck.
    Das ist eigentlich auch garnicht mal so schwer zu scripten, vielleicht erweiterst du damit dein Tutorial ja mal.
    Die SA:MP Spieler sind schließlich faul und niemand möchte /enter eingeben, wenn man auch einfach Enter drücken könnte.
    Aber ansonsten ein gutes Tutorial.


    MfG, FlasH

    Professioneller Webentwickler.

  • if(strcmp,"/enter", cmdtext, true, 5) == 0)


    wofür steht hinterm true diese 5?
    Und beim exit die 4?


    Also hier das unterstrichene --> if(strcmp,"/enter",cmdtext, true ,5) ==0) ??


    /edit: Wenn ich den 1. teil einfüge , also für den BSN kommt dieser error


    C:\Programme\Rockstar Games\Reallife\gamemodes\peg.pwn(110) : error 076: syntax error in the expression, or invalid function call
    C:\Programme\Rockstar Games\Reallife\gamemodes\peg.pwn(110) : error 029: invalid expression, assumed zero
    C:\Programme\Rockstar Games\Reallife\gamemodes\peg.pwn(110) : warning 215: expression has no effect
    C:\Programme\Rockstar Games\Reallife\gamemodes\peg.pwn(110) : error 001: expected token: ";", but found ")"
    C:\Programme\Rockstar Games\Reallife\gamemodes\peg.pwn(110) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    Einmal editiert, zuletzt von #Awesome* ()

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