Command einfügen

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 nochmals, ich möchte in meinen Script einen neuen Command einfügen.
    und zwar:


    public OnPlayerCommandText( playerid, cmdtext[] )
    {
    if( strcmp( cmdtext, "/meinskin", true) == 0)
    {
    SetPlayerSkin(playerid, 164);
    return 1;
    }
    return 0;
    }


    Wenn ich das zu den CMD´s unten reinmache,
    und kompilieren will kommt ein error
    das onplayercommandtext schon existiert.
    ich suche die stelle, machs unten ran aber dann kommt eine welle von errors und warnings.


    Das Script bis jetzt könnt ihr bei mir erfragen per pm (will nicht veröffentlichen :S )


    Weis jemand wo ungefähr / genau ich das einfügen muss ?(
    Würde mich über Antwort freuen :thumbup:

  • Füg den Command unter die anderen bestehenden :D


    z.B so
    //---------------------------<[ OnPlayerCommandText ]>--------------------------------------------------------
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new string[256];
    new playermoney;
    new sendername[MAX_PLAYER_NAME];
    new giveplayer[MAX_PLAYER_NAME];
    new playername[MAX_PLAYER_NAME];
    new cmd[256];
    new tmp[256];
    new giveplayerid, moneys, idx;
    cmd = strtok(cmdtext, idx);
    //=-=-=-=-=-=-=-=-=-=-=-=-=-[Save / Del Skin]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    if(strcmp(cmd,"/saveskin",true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    new skin = GetPlayerSkin(playerid);
    PlayerInfo[playerid][pSkin] = skin;
    SendClientMessage(playerid, COLOR_GREEN, "Skin gespeichert.");
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "Du bist kein Admin !");
    return 1;
    }
    return 1;
    }
    if( strcmp( cmdtext, "/meinskin", true) == 0)
    {
    SetPlayerSkin(playerid, 164);
    return 1;
    }


    wegen der einrückung kannst du ganz oben im Script
    #pragma tabsize 0
    einfügen :D

  • Super Einstellung Zonk, so bringst dus anderen gleich "richtig" bei. Achtung, kluge Köpfe merken die Ironie.
    1.) Für was zur Hölle braucht man 3 (!) strings mit der Größe 256 ?!
    2.) Dieses #pragma tabsize 0 macht deinen Code unleserlich und sollte NICHT verwenden werden. Richtiges Einrücken ist nicht schwer, gibt genug Tutorials darüber


    Um einen Command zu erstellen, kannst du 2 Möglichkeiten nutzen


    1.) dcmd & sscanf:
    Es gibt schon genug darüber zu lesen, wenn man nach dcmd sucht. Auch in der Wiki ist ein entsprechender Eintrag, in dem sogar beide Methoden kurz dargestellt werden.
    http://wiki.sa-mp.com/wiki/Fast_Commands
    Grunsärtlich erstellst du deine Befehle in OnPlayerCommandText. Die Befehle stehen aber außerhalb dieses Callbacks, innerhalb von OnPlayerCommandText ist also nur eine Art "Weiterleitung". Mit sscanf kannst du dann die Paramter auslesen, die an einen Befehl rangehängt wurden:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(Befehl1 /* Befehlsname, in diesem Fall /Befehl1 */, 7 /* Befehl1 hat 7 Zeichen */, cmdtext);
    dcmd(ZweiterBefehl, 13, cmdtext);
    dcmd(Drei, 4, cmdtext);
    return 1;
    }


    dcmd_Befehl1(playerid, params[]) // Dein eigentlicher Befehl von "Befehl1"
    {
    // SPieler hat /Befehl1 eingeben
    // Parameter auslesen mit sscanf oder strtok
    // Rest vom Code
    }


    dcmd_Drei(playerid, params[]) // Dein eigentlicher Befehl von "Befehl1"
    {
    // SPieler hat /Drei eingeben
    // Parameter auslesen mit sscanf oder strtok
    // Rest vom Code
    }


    [...]


    2. Methode ohne dcmd
    Dabei wird der ganze Code direkt in OnPlayerCommandText geschrieben und mit strtok die Eingaben und Paramter überprüft. Ein Tutorial gibts auch hier irgendwo wahrscheinlich
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new
    string[128], // 1 String mit der Größe 128 reicht ! Man kann diesen string auch für die Paramter oder NAchricht ausgeben formatieren immer wieder verwenden
    idx;
    string = strtok(cmdtext, idx); // Die EIngabe des Spielers bis zum ersten Leerzeichen (kurz: den Befehl) in string speichern
    if(strcmp(cmd,"/Befehl1",true)==0)
    {
    // Spieler hat /Befehl1 eingegben
    // Parameter auslesen usw.
    string = strtok(cmdtext, idx); // Die Eingabe des Spielers ab dem 1. Leerzeichen bis zum 2. (kurz: weitere Parameter) in string speichern
    if(string[0] == 0) return SendClientMessage(playerid, FARBE, "Falsche Eingabe");
    /*
    Weiterführender Code, z.B. mit strval(string); den Inhalt des strings in einen Zahlenwert umwandeln oder den string weiter vergleichen oder den
    String ausgeben, oder einfach keine weiteren Paramter überprüfen, dann kannst du dir das ab dem 2. strtok sparan
    */
    }
    else if(strcmp(cmd,"/Zwei",true)==0)
    {
    // Spieler hat /Zwei eingegben
    // Parameter auslesen usw.
    }
    return 1;
    }

  • public OnPlayerCommandText( playerid, cmdtext[] )


    {
    new string[256];
    new playermoney;
    new sendername[MAX_PLAYER_NAME];
    new giveplayer[MAX_PLAYER_NAME];
    new cmd[256];
    new giveplayerid, moneys, idx;


    cmd = strtok(cmdtext, idx);


    if(strcmp(cmd, "/help", true) == 0) {
    SendClientMessage(playerid, COLOR_DARKBLUE,"Freeroam DM wurde von Oreagel aus mehreren Scripten zusammengebaut.");
    SendClientMessage(playerid, COLOR_DARKBLUE,"Tippe: /objective : um rauszufinden was du zu tun hast.");
    SendClientMessage(playerid, COLOR_DARKBLUE,"Tippe: /Givecash [PlayerID] [Geld] um anderen Spielern Geld zu geben.");
    SendClientMessage(playerid, COLOR_DARKBLUE,"Tippe: /tips : um ein paar Tipps vom Scripter zu bekommen.");
    return 1;
    }
    if(strcmp(cmd, "/objective", true) == 0) {
    SendClientMessage(playerid, COLOR_DARKBLUE,"Dieser Gamemode ist zum chillen, du wirst nie einen Game Over Bildschirm sehen.");
    SendClientMessage(playerid, COLOR_DARKBLUE,"In FreeRoam DM, wenn du einen Spieler tötest, bekommst du sein ganzes Geld.");
    SendClientMessage(playerid, COLOR_DARKBLUE,"D.H: Wenn du viel Geld hast und getötet wirst, bekommt dein Peiniger das Geld.");
    SendClientMessage(playerid, COLOR_DARKBLUE,"Aber: Du musst nicht töten um an Geld zu kommen. Andere Geldquellen sind zb");
    SendClientMessage(playerid, COLOR_DARKBLUE,"Casinos.");
    return 1;
    }
    if(strcmp(cmd, "/tips", true) == 0) {
    SendClientMessage(playerid, COLOR_DARKBLUE,"Du spawnst mit einer Deagle, die dich nicht sehr viel weiterbringt.");
    SendClientMessage(playerid, COLOR_DARKBLUE,"Besorg dir bessere Waffen, halte Ausschau nach dem reichsten Spieler");
    SendClientMessage(playerid, COLOR_DARKBLUE,"und töte ihn. Du wirst immer wieder sterben, denn auch andere Spieler");
    SendClientMessage(playerid, COLOR_DARKBLUE,"haben Wege um an Geld zu kommen. Ganz einfach, oder?");
    return 1;
    }

    if(strcmp(cmd, "/Givecash", true) == 0) {
    new tmp[256];
    tmp = strtok(cmdtext, idx);


    if(!strlen(tmp)) {
    SendClientMessage(playerid, COLOR_WHITE, "Tippe: /Givecash [PlayerID] [GeldMenge]");
    return 1;
    }
    giveplayerid = strval(tmp);

    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) {
    SendClientMessage(playerid, COLOR_WHITE, "Tippe: /givecash [PlayerID] [GeldMenge]");
    return 1;
    }
    moneys = strval(tmp);

    //printf("givecash_command: %d %d",giveplayerid,moneys);



    if (IsPlayerConnected(giveplayerid)) {
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    playermoney = GetPlayerMoney(playerid);
    if (moneys > 0 && playermoney >= moneys) {
    GivePlayerMoney(playerid, (0 - moneys));
    GivePlayerMoney(giveplayerid, moneys);
    format(string, sizeof(string), "You have sent %s(player: %d), $%d.", giveplayer,giveplayerid, moneys);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    format(string, sizeof(string), "You have recieved $%d from %s(player: %d).", moneys, sendername, playerid);
    SendClientMessage(giveplayerid, COLOR_YELLOW, string);
    printf("%s(playerid:%d) has transfered %d to %s(playerid:%d)",sendername, playerid, moneys, giveplayer, giveplayerid);
    }
    else {
    SendClientMessage(playerid, COLOR_YELLOW, "Diesen Betrag kannst du nicht hergeben.");
    }
    }
    else {
    format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    }
    return 1;
    }

    // PROCESS OTHER COMMANDS


    return 0;
    }
    Hoffe mir kann das jemand irgendwie hinzufügen ?(