Simpler Teleport Code - Problem.

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 Community,


    Ich habe vor ein Befehl zu machen in dem man /goto [Ort] eingeben muss.
    Wie kann ich überprüfen ob z.B: Ort == bsnt ist, oder z.B. Ort == Lvx ist?


    Ich hatte gedacht das könnte man einfach lösen mit einer Reihe von if Abfragen,


    Code
    if (Ort == ->Problem<- ){ // SetPlayerPos}
    else{ // Nächste If Abfrage}


    Nun weiß ich aber nicht was bei Problem rein soll,
    Hoffe ihr könnt mir helfen :S
    Solche Befehle wie /lvx oder /lspd wo man einfach zu den Ort geportet wird habe ich natürlich schon,
    aber ich möchte ja dass man den Ort durch die 2. Eingabe bestimmt /goto [Ort], falls ihr nen besseren Weg wisst wie ich auf diese weise teleportieren kann könnt ihrs mir natürlich vorschlagen,


  • ocmd:goto(playerid,params[])
    {
    new aktion[10]; // Wir erstellen uns eine Variable, die später den eingegebenen Text enthalten soll, deswegen auch eine Stringvariable.
    if(sscanf(params,"s",aktion))return SendClientMessage(playerid,-1,"> Benutze: /goto [Ort]"); // Hinter dem Komma geben wir nun an, das wenn er zum Beispiel "/goto LS" macht, das LS in "aktion" reingeschrieben werden soll.
    {
    if(strcmp(aktion, "LS", true, strlen(aktion)) == 0)// Mit strcmp vergleichen wir nun, ist die aktion LS? Bzw. steht in der Variable ein "LS" drin?
    {
    //SetPlayerPos etc.
    }
    else if(strcmp(aktion, "SF", true, strlen(aktion)) == 0)// Nein steht nicht drin? Dann ein else einfügen und fragen ob vielleicht SF drin steht?
    {
    //SetPlayerPos etc.
    }
    return 1;
    }
    }

  • thetobbell
    strcmp macht nichts anderes als 2 Strings zu vergleichen.
    Das hat grundsätzlich nichts mit befehlen zu tun. OnPlayerCommandText wird aufgerufen, wenn ein Zeichensatz beginnend mit "/" abgesendet wird. strcmp vergleicht dann nur das eingegebene mit dem Befehl.
    strcmp(cmdtext, "/godmode")
    "cmdtext" ist der eingegebene Text der von OnPlayerCommandText überreicht wird und "/godmode" der zu vergleichende String. Wenn die übereinstimmen passiert halt das was passieren soll.
    Hier der Wiki-Eintrag: "Compares two strings to see if they are the same. "
    Hier: http://wiki.sa-mp.com/wiki/Strcmp


    Deine Abfrage würde somit so aussehen:
    if(strcmp(Ort, "bank")) {...}


    Lg

  • Ah danke Sweety, dann hab ihc Pinguin falsch verstanden,



    if(strcmp(strget(cmdtext,0), "/goto", true) ==0)
    {
    if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid, FGrau, "Benutze: /goto [bsnt; mc; bsn; lvx; home; villa]");
    {
    new string;
    string = strval(strget(cmdtext,1));


    if(strcmp(string, "bsnt"))
    {
    SetPlayerPos(playerid,1023,-974,42);


    return 1;
    }


    }
    }


    Allerdings habe ich hier fehlermeldungen, was habe ich da falsch geamcht an dem code?

  • thetobbell
    Was für eine Fehlermeldung bekommst du? Und in welcher Zeile?


    #edit:
    Es ist kürzer wenn du den Wert direkt beim "new" hinzufügst statt noch eine Extrazeile zu schreiben:
    new string = strval(strget(cmdtext, 1));


    #edit: LeijaT, das hab ich garicht realisiert. Stimmt, wo hast du das strval her?

  • strval macht aus einem String einen Integer, wie soll also eine reine Zahl "bsnt" sein können?


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Jetzt seh ich das auch, ups. für ein String müsste ich dann was benutzen?
    Eher gesagt habe ich dann da jetzt strin = strget(cmdtext,1); stehen, doch das wird bei mir auch als falsch gesagt


    EDIT: Dieser Code will bei mir auch nicht ganz funktionieren, sry für die Anfänger Fehler,
    if(strcmp(strget(cmdtext,0), "/goto", true) ==0)
    {
    if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid, FGrau, "Benutze: /goto [bsnt; bsn; lspd]");
    {
    new string = strget(cmdtext, 1);


    if(strcmp(string, "bsnt"));
    {
    SetPlayerPos(playerid,1023,-974,42);
    return 1;
    }
    return 1;
    }
    }

    3 Mal editiert, zuletzt von thetobbell ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Weil du
    1. Die Variable erstmal Stringfähig machen musst
    2. Du einer stringfähigen Variable so keinen String zuweisen kannst (format)
    3. Ach was solls, 2 müssen reichen :p


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Habe jetzt:
    if(strcmp(strget(cmdtext,0), "/goto", true) ==0)
    {
    if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid, FGrau, "Benutze: /goto [bsnt; mc; bsn; lvx; home; villa]");
    {
    new string[10];
    format(string,sizeof(string),strget(cmdtext, 1));


    if(strcmp(string, "bsnt")==0)
    {
    SetPlayerPos(playerid,1023,-974,42);


    return 1;
    }


    }
    }



    Werde das mal ausprobieren


    EDIT: Jetzt werde ich immer zur bsnt teleportiert egal was ich nach /goto eingebe, warum? Ah hab übersehen ==0 dranzuhängen, jetzt gerade funktionierts ingame, danke für die Hilfe. Werde aber wahrscheinlich nochmal antworten, wenn das gleich nicht mehr geht

    3 Mal editiert, zuletzt von thetobbell ()