Supportsystem funktioniert nicht

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
  • Tag.


    Ich habe wieder angefangen zu Scripten - und diesmal verstehe ich es komischerweise alles recht gut & schnell - jedoch habe ich jetzt ein kleines Problem, bei dem ich um Hilfe bitte. Ich habe gestern ein Ticketsystem geschrieben, indem man geschrieben Tickets von Spielern verarbeiten kann (Livechat), nur bekomme ich folgende Errors:


    Errors
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : error 017: undefined symbol "SupDuty"
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : warning 215: expression has no effect
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : error 001: expected token: ";", but found "]"
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : fatal error 107: too many error messages on one line

    Errors
    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase

    Errors
    4 Errors.


    Im Code selbst stimmt alles, jedoch wüsste ich nicht, dass man SupDuty definieren soll/ muss und wenn doch dann wie?


    Zeilen
    OnPlayerConnect (das gleiche bei OnPlayerDisconnect): SupDuty[playerid]=0;//Errors
    SupDuty Befehl: ocmd:supduty(playerid,params[])
    {
    if(!IstSpielerEinAdmin(playerid,1))return SendClientMessage(playerid,ROT,"Du bist kein Teammitglied!");
    {
    new Name[MAX_PLAYER_NAME],string[128];
    GetPlayerName(playerid,Name,sizeof(Name));
    format(string,sizeof(string),"[ADM]: %s hat sich als Supporter angemeldet. Via /support kannst du mit ihn in Kontakt treten!",Name);
    SendClientMessageToAll(HELLBLAU,string);
    SupDuty[playerid]=1;
    }
    return 1;
    }
    Und der Support Befehl: ocmd:support(playerid,params[])
    {
    new Name[MAX_PLAYER_NAME],string[128],text[128];
    GetPlayerName(playerid,Name,sizeof(Name));
    if(sscanf(params,"s",text))
    {
    return SendClientMessage(playerid,WEISS,"[Verwendung]: /support [Text]");
    }
    if(writtenticket[playerid]==1)
    {
    return SendClientMessage(playerid,ROT,"[Warnung]: Du hast bereits einen Supporter kontaktiert!");
    }
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(SupDuty[i]==1)
    {
    format(string,sizeof(string),"%s (ID:%d) hat ein Support geschrieben: %s",Name,playerid,text);
    SendClientMessage(i,WEISS,string);
    writtenticket[playerid]=1;
    }
    else if(SupDuty[i]==0)
    {
    SendClientMessage(playerid,ROT,"[Warnung]: Derzeit ist kein Supporter anwesend!");
    }
    }
    return 0;
    }

    Zeilen
    Das waren nun alle Zeilen, wo SupDuty vorkommt. Errorzeile markiert


    Ich hoffe ihr könnt mir weiterhelfen!


    MfG


    //Edit: PAWN Quelltext fail behoben
    //Edit: Bessere erklärung
    //Edit: Name geändert aufgrund s.o.

    Einmal editiert, zuletzt von Sebrawr ()

  • Wenn ich "new SupDuty;" einfüge, kommen weitere Errors:

    Errors
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : error 028: invalid subscript (not an array or too many subscripts): "SupDuty"
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : warning 215: expression has no effect
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : error 001: expected token: ";", but found "]"
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Administrator\Desktop\CR.pwn(335) : fatal error 107: too many error messages on one line

    Errors
    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase

    Errors
    4 Errors.


    News
    new Text3D:label[MAX_PLAYERS];
    new engine,lights,alarm,doors,bonnet,boot,objective;
    new writtenticket[MAX_PLAYERS];
    new yoursupport[MAX_PLAYERS];
    new insupport[MAX_PLAYERS];
    new SupDuty;

  • 17: undefined symbol "SupDuty"


    Zeile 335


    error 017: undefined symbol


    Dieser Fehler sagt aus, dass eine Variable nicht richtig definiert (deklariert) wurde.
    Hier mal folgende Beispiele:


    public OnGameModeInit() {
    SendClientMessage(playerid,-1,"Text"); //undefined symbol "playerid" da playerid nicht als Parameter übergeben wird.
    }


    Oder folgendes:


    public OnPlayerConnect() {
    format(string,128,"Willkommen SupDuty",name); //undefined symbol "string" & "name", da beide Variablen nicht deklariert wurden.
    }


    Indem man "new" verwendet, wird sowas gelöst ;)
    Sprich:


    new name[24],string[128];
    GetPlayerName(playerid,name,24);
    format(string,128,"Willkommen SupDuty",name);



    Zeile 335



    Dafür gibt es mehrere Gründe. Die geläufigsten sind allerdings, dass ein Semikolon ";" am Ende der Zeile vergessen wurde, oder du versuchst in einer Abfrage einen Wert zuzuweisen (z.B. if(1 = 2) anstatt if(1 == 2)).


    expected token: ";", but found "]"


    Zeile 335


    Es wurde ein anderes Zeichen gefunden als erwartet


    Das zuerst genannte Symbol fehlt in dieser oder der Zeile darüber.
    Füge das zuerst genannte Zeichen an der richtigen Stelle neu ein
    (typischerweise ein ";" am Satzende oder eine nicht geschlossene eckige Klammer
    bei einer Variable, bspw "variable[10")


    Zeile 335


    error 29: invalid expression, assumed zero


    Du hast in einer Zeile etwas freigelasse, wo eigentlich etwas hingehörte.
    Du hast wahrscheinlich ",," also zwischen 2 Kommas, nichts hingeschrieben.
    Beispiel:


    GameTextForPlayer(playerid,"Da fehlt was",,);



    Alles auf dem Fehlerkärbär einfach ma Benutzen ;D


    http://forum.sa-mp.de/index.php?form=Explain

  • Wenn ich "new SupDuty[MAX_PLAYERS];" hinzufüge, habe ich zwar keine Errors mehr, aber wenn ich nun Ingame "/support TestText" eingebe, wird gespammt, dass kein Supporter anwesend ist. Und wieso sollte ich auch bei SupDuty alle Spieler durchgehen? SupDuty ist in meinem falle auch nur /aduty wie bei anderen (oder irre ich mich mit "alle Spieler durchgehen"?).


    @feni12:
    Fehlerklärbär hat mir nicht geholfen..
    1. Ich weiß ja gerade nicht, wie ich SupDuty deklarieren soll (?)
    2. Habe kein ";" vergessen

    Zeilen
    insupport[playerid]=0;
    yoursupport[playerid]=0;
    writtenticket[playerid]=0;
    SupDuty[playerid]=0;

    3. s.o.
    4. s.o.


    Wie ich schon schrieb, am Code ist nichts Falsch - ausser ich übersehe sein mehreren Stunden was. Trotzdem danke, gelöst wurde es jedoch noch nicht.


    MfG

  • Niko: Du meinst im /support Befehl? Bringt dort nämlich nichts

    @feni12: Das bringt nichts, dann wird "Es ist kein Supporter anwesend!" gespammt, sobald ich "/support Das ist ein Test Text" eingebe


    //Edit: Ausversehen durchgestrichen
    //Edit2: Edit 1 eingefügt

  • Dann Versuch das nur bei


    InSupport[MAX_PLAYERS]
    writtenticket[MAX_PLAYERS];
    yoursupport[MAX_PLAYERS];


    //Edit


    Ich weiß ja nun nicht wie genau dein /support Befehl Ausschaut aber so Müsste er gehen...



    ocmd:support(playerid, params[])
    {
    new Name[MAX_PLAYER_NAME],string[128],text[128];
    GetPlayerName(playerid,Name,sizeof(Name));
    if(sscanf(params,"s",text))
    {
    return SendClientMessage(playerid,COLOR_GRAU,"Verwende /support [Text/Frage]");
    }
    if(writtenticket[playerid] == 1)
    {
    return SendClientMessage(playerid,COLOR_RED,"Du hast bereits einem Supporter geschrieben");
    }
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(SupDuty[i] == 1)
    {
    format(string,sizeof(string),"%s(ID:%d) hat ein Support geschrieben. Text: %s",Name,playerid,text);
    SendClientMessage(i,COLOR_GOLD,string);
    writtenticket[playerid] = 1;
    }
    else if(SupDuty[i] == 0)
    {
    SendClientMessage(playerid,COLOR_RED,"Es ist kein Supporter anwesend!");
    }
    }
    return 0;
    }

    Einmal editiert, zuletzt von feni12 ()

  • new SupDuty[MAX_PLAYERS]; stimmte schon, nur ist in der for-loop bei /support ein Logikfehler drin.
    So sollte es aussehen:
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(SupDuty[i]==1)
    {
    format(string,sizeof(string),"%s (ID:%d) hat ein Support geschrieben: %s",Name,playerid,text);
    SendClientMessage(i,WEISS,string);
    writtenticket[playerid]=1;
    return 1;
    }
    }
    SendClientMessage(playerid,ROT,"[Warnung]: Derzeit ist kein Supporter anwesend!");

    Ich bin Dittis Signatur.