OnPlayerCommandPerformed - cmdtext

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
  • Hallöchen popöchen,


    zunächst einmal ist mir vollkommen klar, dass folgender Code Quark ist, nur bin ich mir über die Vorgehensweise noch nicht so ganz im Klaren...


    new Line1[64];
    new Line2[64];


    public OnPlayerCommandPerformed(playerid, cmdtext[], success)
    {
    if(cmdtext == "/ls") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/skate") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/bank1") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/bank2") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/transls") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/sc") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/market") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/film") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/lsmc") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/lsa") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/ammuls") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/beach") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/sf") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/sfa") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/bank3") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/ammusf") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/sfm") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/ct") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/mh") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/jizzy") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/pier") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/golfsf") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/lv") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/satellite") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/aa") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/chilliad") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/gfarm") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/gl") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/pine") TeleportMessages(playerid, cmdtext);
    }


    stock TeleportMessages(playerid, cmdtext[])
    {
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    format(Line2, sizeof(Line2), Line1)
    format(Line1, sizeof(Line1), "%s ~>~ /%s", pName, cmdtext); //cmdtext???

    new string[200];
    format(string, sizeof(string), "%s~n~%s", Line1, Line2);
    TextDrawSetString(TeleportsTD, string);
    return 1;
    }


    Wenn ich es so stehen lasse, bekomme ich jede Menge "array must be indexed (variable "cmdtext")".


    Das System sieht folgendermaßen aus.


    Das hier...
    Manyula ~>~ /LS
    * zunächst leerer String*


    ...wird dazu.
    Testperson ~>~ /Chilliad
    Manyula ~>~ /LS

  • Gehookter Part (Include)
    new Line1[64];
    new Line2[64];


    public OnPlayerCommandPerformed(playerid, cmdtext[], success)
    {
    if(!strcmp(cmdtext, "/ls", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/skate", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/bank1", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/bank2", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/transls", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/sc", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/market", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/film", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/lsmc", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/lsa", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/ammuls", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/beach", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/sf", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/sfa", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/bank3", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/ammusf", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/sfm", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/ct", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/mh", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/jizzy", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/pier", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/golfsf", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/lv", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/satellite", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/aa", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/chilliad", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/gfarm", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/gl", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/pine", true)) TeleportMessages(playerid, cmdtext);
    return MSG_OnPlayerCommandPerformed(playerid, cmdtext, success); //Zeile 35
    }


    forward MSG_OnPlayerCommandPerformed(playerid, cmdtext, success);
    #if defined _ALS_OnPlayerCommandPerformed
    #undef OnPlayerCommandPerformed
    #else
    #define _ALS_OnPlayerCommandPerformed
    #endif
    #define OnPlayerCommandPerformed MSG_OnPlayerCommandPerformed


    Hauptscript
    public OnPlayerCommandPerformed(playerid, cmdtext[], success) //Zeile 1058


    error 035: argument type mismatch (argument 2) //Zeile 35
    function heading differs from prototype //Zeile 1058

  • Beitrag von Akino Kiritani ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Oh, Leichtsinnsfehler...


    Es klappt nun wunderbar, ich bedanke mich!


    -------------------------------------------------------------


    Neues Problem: Ich möchte, dass das Textdraw auf geupdatet wird, wenn ein listitem in einem Dialog ausgeführt wird.
    Nur habe ich leider keine Ahnung, wie ich die stock Funktion da reinbauen soll, wegen "cmdtext[]".


    COMMAND:ls(playerid, params[])
    {
    AddTeleport(playerid, 2492.7268, -1668.3849, 13.3438, WEST, 2492.7268, -1668.3849, 13.3438, WEST, 200, true, true, 0, 0);
    return 1;
    }


    stock UpdateMSG(playerid, cmdtext[])
    {
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    format(Line2, sizeof(Line2), Line1);
    format(Line1, sizeof(Line1), "~b~~h~~h~%s ~>~ ~g~~h~%s", pName, cmdtext);

    new string[100];
    format(string, sizeof(string), "%s~n~%s", Line1, Line2);
    TextDrawSetString(TeleportsTD, string);
    return 1;
    }

    Einmal editiert, zuletzt von Manyula ()

  • Ich verstehs nicht ganz.


    Was soll ich dann für Parameter in den function header schreiben? cmdtext[] UND inputtext[]? Oder nochmal eine separate Funktion, die sich nur in dem einen Parameter unterscheidet?


    EDIT: Bzw. wollte ich es so anstellen, dass ich das Ganze direkt in den CMD packe, und nicht unter das Callback.

  • Ich hab das nun einmal in jeden CMD eingebaut. Das Problem ist nun, dass in der Textausgabe nun beide Zeilen immer geupdatet werden, obwohl nur ein CMD getätigt wurde.


    *leere Zeile*
    *leere Zeile*


    ...wird zu...


    Manyula ~>~ /ls
    Manyula ~>~ /ls


    --------------------------------------------------------------


    EDIT: Ich hab die Lösung gefunden.
    Ich hatte ja nochmals alle Update Funktionen unter dem Callback OnPlayerCommandPerformed, zuzüglich zu denen in den TeleportCMDs.


    Ich bedanke mich für eure Hilfe!

    Einmal editiert, zuletzt von Manyula ()


  • Also, mal so nebenbei als Tipp, kannst du das alles auch noch viel einfacher schreiben:


    stock const Commands[][] = {
    "/ls","/skate","/bank1","/bank2","/transls","/sc","/market","/film","/lsmc",
    "/lsa","/ammuls","/beach","/sf","/sfa","/bank3","/ammusf","/sfm","/ct","/mh","/jizzy","/pier",
    "/golfsf","/lv","/satellite","/aa","/chilliad","/gfarm","/gl","/pine"
    };


    public OnPlayerCommandPerformed(playerid, cmdtext[], success)
    {
    for(new i; i<sizeof Commands; i++) if(!strcmp(cmdtext, Commands[i], true)) return TeleportMessages(playerid, cmdtext);
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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