dcmd - Falls Spieler einen bestimmten Text schreibt...

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, ich habe heute seid ein paar Wochen mal wieder ein bisschen gescriptet. Aber nun leider auch schon den ersten Fehler den ich nicht weg kriege.


    Hier mal mein Command:


    dcmd_beruf(playerid, params[])
    {
    if(Spieler[playerid][pAdmin] > 0)
    {
    new
    pID,
    police[128],
    jobname[128],
    string[128],
    ThePlayer[MAX_PLAYER_NAME],
    TheOtherPlayer[MAX_PLAYER_NAME];
    if(sscanf(params, "ds",pID, jobname))
    {
    SendClientMessage(playerid,COLOR_RED,"Da fehlt doch etwas.");
    SendClientMessage(playerid, COLOR_INFO, "Benutze bitte: /beruf [ID] [Job-Name]");
    SendClientMessage(playerid, COLOR_INFO, "Verf. Jobs: Polizei");
    return 1;
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    GetPlayerName(playerid,ThePlayer,sizeof(ThePlayer));
    GetPlayerName(pID, TheOtherPlayer,sizeof(TheOtherPlayer));
    format(police,sizeof(police),"Polizei");
    if(jobname == police) // --------------Fehlerzeile
    {
    format(string,sizeof(string),"%s hat dich als Polizist angestellt.",ThePlayer);
    SendClientMessage(pID,COLOR_INFO,string);
    format(string,sizeof(string),"Du hast %s als Polizist angestellt.", TheOtherPlayer);
    SendClientMessage(playerid, COLOR_INFO, string);
    Spieler[pID][pCop] = 1;
    return 1;
    }
    else
    {
    return SendClientMessage(playerid, COLOR_RED, "Ungültiger Job.");
    }
    }
    else
    {
    return SendClientMessage(playerid, COLOR_RED, "Du musst ein Admin sein.");
    }
    }


    Ich möchte nun das falls der Admin /beruf ID polizei schreibt, das dann ID demensprechend geändert wird.
    Aber bekomme folgenden Error:


    Zitat

    error 033: array must be indexed (variable "jobname")



    Vielen Dank im Vorraus für eure Antworten :)

    ...

  • Wenn du die Abfrage so gestaltest, bräuchtest du dafür Integer Werte. Entweder du machst es per strcmp (string compare) oder du versuchst es so: if(jobname == 'police')
    strcmp Version wäre ungefähr so:
    if(strcmp("police",jobname,false) == 0) { /* do something here D: */ }


    BTW: Ich würde dir empfehlen die Abfragen anders zu gestalten. So ungefähr bei einem Cmd wo man Admin sein muss.
    dcmd_wtf(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) {
    return SendClientMessage(playerid, 0xFF0000FF, "WTF ô.0");
    }
    new target;
    if(sscanf(params,"u",target)) {
    // Und so weiter halt

  • Achso okay, dann nehm ich gleich die strcmp Version. Dann brauch ich auch die ganzen strings nicht mehr. Danke :thumbup: .


    Das andere versteh ich leider nicht. Was ist daran so anders/besser?
    Meintest du jetzt so?


    dcmd_beruf(playerid, params[])
    {
    if(Spieler[playerid][pAdmin] == 0) { return SendClientMessage(playerid, COLOR_RED, "Du musst ein Admin sein."); }
    new
    pID,
    jobname[128],
    string[128],
    ThePlayer[MAX_PLAYER_NAME],
    TheOtherPlayer[MAX_PLAYER_NAME];
    if(sscanf(params, "ds",pID, jobname))
    {
    SendClientMessage(playerid,COLOR_RED,"Da fehlt doch etwas.");
    SendClientMessage(playerid, COLOR_INFO, "Benutze bitte: /beruf [ID] [Job-Name]");
    SendClientMessage(playerid, COLOR_INFO, "Verf. Jobs: Polizei");
    return 1;
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    GetPlayerName(playerid,ThePlayer,sizeof(ThePlayer));
    GetPlayerName(pID, TheOtherPlayer,sizeof(TheOtherPlayer));
    if(strcmp("police",jobname,false) == 0)
    {
    format(string,sizeof(string),"%s hat dich als Polizist angestellt.",ThePlayer);
    SendClientMessage(pID,COLOR_INFO,string);
    format(string,sizeof(string),"Du hast %s als Polizist angestellt.", TheOtherPlayer);
    SendClientMessage(playerid, COLOR_INFO, string);
    Spieler[pID][pCop] = 1;
    return 1;
    }
    else
    {
    return SendClientMessage(playerid, COLOR_RED, "Ungültiger Job.");
    }
    }
    }

    ...

  • Spart einfach nur Zeilen und bewahrt die Übersichtlichkeit, da man nicht immer nachschauen muss wo die Abfrage aufhört bei der man ein else setzen will.