Erstellen Befehl funktioniert nicht richtig

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
  • Hey und zwar wollte ich ein Befehl erstellen der sich erstellen nennt, da ich mit einem befehl mehrere sachen erstellen möchte wie bspw. bei /accept [x,y,z]

    der Befehl soll /erstellen [x,y,z] heißen habe mittlerweile "einiges" geschrieben jedoch funktioniert der Befehl im Spiel nicht wie ich es mir wünsche er wird kein Fahrzeug erstellt etc. Das Fahrzeug wird bisher nicht in der DB gespeichert etc. jedoch wollte ich das noch mit einbauen


    mein Befehl bisher:


    Dazu die createPlayerCar funktion




    Dazu das Carenum

    Code
    enum carEnum{
    id_x,
    besitzer[MAX_PLAYER_NAME],
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_r
    }
    new carInfo[50][carEnum];
  • Probiers mal so:


    ast2ufdyxkb1.png


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

  • Hey erstmal danke klappt alles jedoch wollte ich vielleicht noch zwei drei dinge fragen :D hoffe ist in ordnung :D


    Code
     static const info[] = "[ {ECFF00}Information{FFFFFF} ]: /erstellen [Auto]"; // Dann musst es nur an einer Stelle ändern ;)

    was hat es genau damit auf sich? ich mein die Info wird ja nicht bei jedem Befehl /erstellen [Auto] sein etc. hab es oben im Script als #define aber bringt mir im endeffekt auch nichts weil es ja immer eine andere Info ist :D hoffe verstehst was ich mein


    Code
    idx = strfind(params, " ");

    wofür steht das? :D

  • Also zuerst zu der Info Variable:



    Zu dem Code:

    ast2ufdyxkb1.png


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

  • Okay erstmal danke für die Aufklärung und die Lösung meines Problems!


    Also wäre es zum Vorteil dies auch bei meinem accept Befehl umzuändern? von quasi so:



    auf so?:


    Wollte auch noch zu meinem accept invite Befehl was "erzählen" der Befehl funktioniert soweit jedoch wird mein Fraktionsrang in der DB auf 70 gesetzt wie kann das zustande kommen? Kaliber

    und wenn ich bspw. nur /accept eingebe kommt direkt ich wurde in keine fraktion eingeladen aber da sollte es ja eigentlich weitere keywords geben bspw. /accept heal


    /edit sollte natürlich den invite befehl vielleicht auch zeigen :D


    Einmal editiert, zuletzt von RaPTiiC ()

  • Also wäre es zum Vorteil dies auch bei meinem accept Befehl umzuändern? von quasi so:

    Das kommt darauf an...

    In diesem Fall funktioniert es, da keine Weiteren Parameter außer dem Keyword eingegeben werden. Aber falls doch, solltest du das so machen.


    //Und hier dann immer die nächsten keyword hinter invite einfügen?

    Joaa, ansonsten weiß der Nutzer ja nicht, welche Optionen er alle hat :)


    Und anstatt dem return 1 unten würde ich nochmal wie oben erklärt SCM(playerid, WEISS, info); nutzen, damit er direkt weiß, welche keywords es gibt.


    Nur als Info noch:


    C
    if(!strcmp(item, "invite",false)) // Das sorgt dafür, dass nur "invite" geschrieben werden kann. Es wird quasi geprüft, ob die Groß- und Kleinschreibung richtig ist. Für den Nutzer ist das oft nervig, da es ja egal ist, ob er Invite oder invite, invitE schreibt, ist ja alles das Selbe und es soll funktionieren
    
    if(!strcmp(item, "invite")) //<< das sorgt dafür, dass die Groß-und Kleinschreibung ignoriert wird und alles gültig ist ;)


    jedoch wird mein Fraktionsrang in der DB auf 70 gesetzt wie kann das zustande kommen?

    Kann ich dir so nicht sagen, vllt geht etwas beim Speichern schief?

    Dazu müsste ich dein Speichersystem begutachten.



    SetPVarInt(playerid, "getfrak", 0);

    Noch ein Hinweis dazu, lösche das ruhig einfach:


    DeletePVar(playerid, "getfrak");


    Dann sinkt der RAM Verbrauch vom Server ^^

    ast2ufdyxkb1.png


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

  • Vielen Dank für die ganzen Hilfreichen Infos und Tipps


    Jedoch frag ich mich immer noch wieso sobald ich beim accept Befehl InGame /accept eingebe sofort die einladung angenommen wird!? weil wie gesagt gibt ja noch weitere dinge die man accepten kann bspw. /accept dice etc.

  • Jedoch frag ich mich immer noch wieso sobald ich beim accept Befehl InGame /accept eingebe sofort die einladung angenommen wird!? weil wie gesagt gibt ja noch weitere dinge die man accepten kann bspw. /accept dice etc.

    Ah, ja stimmt ich habe nicht bedacht, dass ocmd ja gar nicht \0 in den String packt sondern \1...


    Lösung 1:



    Oder Lösung 2:


    ast2ufdyxkb1.png


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

  • ich glaub Lösung 1 hat mir gerade das gesamte script "zerschossen" Login System fehlt etc. kein Befehl funktioniert

    Dann check mal den Server Log...


    Wurde das Plugin überhaupt geladen? Musst es in den Plugin Order packen und die Server.cfg anpassen...

    ast2ufdyxkb1.png


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

  • Okay Login System funktioniert wieder hätte mal die gesamte Konsole ausschalten sollen :D


    jedoch funktioniert immer noch kein Befehl hatte bei OnPlayerCommandText etwas drin was ausgibt wenn ein Befehl nicht gefunden wurde kam immer bspw. "Befehl wurde nicht gefunden (/accept)"

    hab die Zeile auskommentiert und funktioniert immer noch nicht also jetzt passiert gar nichts mehr :D


    /edit der derzeitige accept Befehl:


  • scheinbar geladen :D

  • Beitrag von Kaliber ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Hmm ne warte ().
  • Du benötigst den Callback OnPlayerCommandText gar nicht mehr. Lösche diesen am Besten.


    Und nutze nur:


    C
    public OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags)
    {
      if (result == -1)
      {
        SCM(playerid, 0xFFFFFFFF, "SERVER: Befehl nicht gefunden.");
        return 0;
      }
      return 1;
    }

    Und du bist sicher, dass du oben im Skript #include <ocmd> quasi rausgeschmissen hast und nur #include <Pawn.CMD>  verwendest?

    ast2ufdyxkb1.png


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

  • Und du hast es kompiliert, die amx am Server getauscht und neu gestartet und es funktioniert weiterhin kein Befehl?!

    ast2ufdyxkb1.png


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

  • Nutze mal crashdetect und könntest du den server.log hier zeigen?


    Kann mir sonst keinen Reim auf die Sache machen.

    ast2ufdyxkb1.png


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