Pn Befehl Hilfe

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
  • Ich habe das Problem hier wenn ich /pn Heinz mache dann steht da : Du kannst dir selbst keine PN schicken ... woran liegt das ?!





    ocmd:pn(playerid, params[])
    {
    new pID,text[128];
    new text2[128];
    new plname[128];


    sscanf(params,"is[128]",pID,text);
    GetPlayerName(playerid,plname,sizeof(plname));
    format(text2,sizeof(text2),"Nachricht von %s: %s",plname,text);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,ROT,"Ungültige ID!");
    if(pID == playerid)
    {
    SendClientMessage(playerid,ROT,"Du kannst dir selbst keine PN schicken!");
    return 1;
    }


    else
    {
    SendClientMessage(pID,GELB,text2);
    SendClientMessage(playerid,GELB,"PN erfolgreich versendet!");
    return 1;
    }
    }


  • Also 1. solltest du eine Abfrage machen



    if ( sscanf(params,"us[128]",pID, text) )
    return SCM(-1, "/pn <Spieler> <Nachricht>");


    Außerdem wie du oben siehst habe ich das i zum u gemacht
    i = Integer (Zahlen)
    u = Spieler. So ist die ID sowie der anfang des namens möglich


    Gibst du den Befehl denn richtig ein?
    Du hast wahrscheinlich Spieler ID 0.
    Der standart wert von Variablen in pawn ist 0.


    /e
    ACHJA
    das war das u weil heinz ist keine zahl also macht sscanf eine 0 dahin ;)

    ik bin der vito c:

  • Vielleicht weil du dir dann eine Nachricht selber an dir schickst, es sei denn, der "Heinz" ist jemand anders auf deinen Server.


    Vielleicht liegt der Fehler auch daran:
    if(pID == playerid)


    Versuch das mal:
    if(pID == INVALID_PLAYER_ID)
    {
    SendClientMessage(playerid,FARBE," Du kannst dir selber keine Nachricht schicken!");
    }

  • Du musst statt "i" = ID, "u" = Name/ID nehmen.
    Du bist dann wahrscheinlich ID 0 weil Heinz keine Zahl dann enthält = 0.


    und benutz bei sscanf eine Abfrage ob er auch alle Felder ausgefüllt hat:

    if(sscanf(params, "us[128]", pID, text))return SendClientMessage(playerid, ROT, "Benutze: /pn [name/id] [text]");


    Gruß, Piet

  • Danke an alle hat schonmal geholfen , aber wenn ich /pn 0 Hallo mache kommt immer /pn [ID] [GRUND]


    CODE



    ocmd:pn(playerid, params[])
    {
    new pID,text[128];
    new text2[128];
    new plname[128];


    if (sscanf(params,"us[128]",pID,text)) return SendClientMessage(playerid,GRÜN, "/pn [Spieler] [Nachricht]");
    GetPlayerName(playerid,plname,sizeof(plname));
    format(text2,sizeof(text2),"Nachricht von %s: %s",plname,text);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,ROT,"Ungültige ID!");
    if(pID == playerid)
    {
    SendClientMessage(playerid,ROT,"Du kannst dir selbst keine PN schicken!");
    return 1;
    }


    else
    {
    SendClientMessage(pID,GELB,text2);
    SendClientMessage(playerid,GELB,"PN erfolgreich versendet!");
    return 1;
    }
    }


    Einmal editiert, zuletzt von derpr0 ()

  • @Threadersteller


    Wieso baust du dir den Befehl so komisch unordentlich/unübersichtlich auf ? :(


    Hier hab ihn dir mal vernünftiger geschrieben:




    ocmd:pn(playerid,params[])
    {
    new string[80],string2[80],pnid,pntext;
    if(sscanf("us",pnid,pntext))return SendClientMessage(playerid,-1,"Verwendung: /pn [Name/ID] [PN Text]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,WEIS, " Der Spieler ist nicht Online.");
    if(pID == playerid)return SendClientMessage(playerid,GRAU," Du kannst dir nicht slebst eine PN Schreiben.");
    {
    format(string,sizeof(string)," %s schreibt dir %s",SpielerName(playerid),pntext);
    format(string2,sizeof(string2)," Du schreibst an %s %s",SpielerName(pID),pntext);
    SendClientMessage(pID,WEIS,string);
    SendClientMessage(playerid,WEIS,string);
    }
    return 1;
    }



    // Sollte klar sein.
    stock Spielername(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }

  • @Music4You:
    Das ist richtig bringt aber Übersicht wie ich finde.


    Bei einer If Abfrage wo die Anweisung sofort ausgeführt wird, wird nur die nächste Anweisung angewendet.


    Das heißt die { } sind da bringen aber 0
    Ist so als hättest du einfahc ein Tab mehr.


    Jedoch bündelt das ganze es in einen übersichtlichen Funktionsblock.

    ik bin der vito c:

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich hab echt ka mehr ... Immer wenn ich /pn ... eingebe kommt : Du kannst keine PN an dich senden ?!



    ocmd:pn(playerid,params[])
    {
    new string[80],pID,pText;
    if(sscanf(params,"us",pID,pText))return SendClientMessage(playerid,ROT,"Benutze /pn ");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT, "Der Spieler ist nicht Online.");
    if(pID == playerid)return SendClientMessage(playerid,ROT," Du kannst dir nicht selbst eine PN schreiben.");
    {
    new pName[128];
    GetPlayerName(playerid,pName,sizeof(pName));
    format(string,sizeof(string),"Nachricht von %s: %s",pName,pText);
    SendClientMessage(pID,GELB,string);
    SendClientMessage(playerid,GELB,"Pn erfolgreich versendet.");
    }
    return 1;
    }

  • @Dark.Shadow:
    Mit der übersicht stimmt schon aber eigendlich ist das ein wiederspruch in sich,
    Wenn pID gleich playerid ist, dann soll diese meldung kommen "Du kannst dir nicht slebst eine PN Schreiben."
    ABER
    Gleichzeitig kommt der teil

    format(string,sizeof(string)," %s schreibt dir %s",SpielerName(playerid),pntext);
    format(string2,sizeof(string2)," Du schreibst an %s %s",SpielerName(pID),pntext);
    SendClientMessage(pID,WEIS,string);
    SendClientMessage(playerid,WEIS,string);

    Also eigendlich sehr unlogisch^^ weil beides kommt.
    entweder so.



    ocmd:pn(playerid,params[])
    {
    new string[80],string2[80],pnid,pntext;
    if(sscanf("us",pnid,pntext))return SendClientMessage(playerid,-1,"Verwendung: /pn [Name/ID] [PN Text]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,WEIS, " Der Spieler ist nicht Online.");
    if(pID == playerid)return SendClientMessage(playerid,GRAU," Du kannst dir nicht slebst eine PN Schreiben.");
    format(string,sizeof(string)," %s schreibt dir %s",SpielerName(playerid),pntext);
    format(string2,sizeof(string2)," Du schreibst an %s %s",SpielerName(pID),pntext);
    SendClientMessage(pID,WEIS,string);
    SendClientMessage(playerid,WEIS,string);
    return 1;
    }

    oder so

    ocmd:pn(playerid,params[])
    {
    new string[80],string2[80],pnid,pntext;
    if(sscanf("us",pnid,pntext))return SendClientMessage(playerid,-1,"Verwendung: /pn [Name/ID] [PN Text]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,WEIS, " Der Spieler ist nicht Online.");
    if(pID != playerid)
    {
    format(string,sizeof(string)," %s schreibt dir %s",SpielerName(playerid),pntext);
    format(string2,sizeof(string2)," Du schreibst an %s %s",SpielerName(pID),pntext);
    SendClientMessage(pID,WEIS,string);
    SendClientMessage(playerid,WEIS,string);
    }
    else return SendClientMessage(playerid,GRAU," Du kannst dir nicht slebst eine PN Schreiben.");
    return 1;
    }

  • @Music4You:
    Das ist falsch.
    Les bitte nocheinmal meinen Beitrag.
    Wenn nach der if anweisung if ( .. )
    keine Klammern sind und die Anweisung sofort ausgeführt wird, wird alles danach unabhängig von der if Abfrage durchgeführt.


    Bedeutet:
    if ( xyz == 1 ) return 1;
    {
    print("Hallo");
    return 1;
    }

    returnt 1 und printet nicht hallo.


    Genausowenig wie so
    if ( xyz == 1 ) print("hallo");
    {
    print("Hallo2");
    return 1;
    }

    Hier würde er hallo printen und nicht Hallo2 wenn xyz = 1 ist.


    das bedeutet das script fragt ab ist es so?
    Wenn ja mach das
    und danach mach einfach weiter.
    Ein return beendet natürlich das ganze.



    Bisschen viel aber hoffe es ist verständlich




    derpr0:
    Versuch es mal so

    ocmd:pn(playerid,params[])
    {
    new string[80],pID,pText[128];
    if(sscanf(params,"us[128]",pID,pText)) return SendClientMessage(playerid,ROT,"Benutze /pn [Spieler] [Text]");
    if(pID == INVALID_PLAYER_ID ) return SendClientMessage(playerid,ROT, "Ungültige ID.");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,ROT, "Der Spieler ist nicht Online.");
    if(pID == playerid) return SendClientMessage(playerid,ROT," Du kannst dir nicht selbst eine PN schreiben.");
    {
    new pName[128];
    GetPlayerName(playerid,pName,sizeof(pName));
    format(string,sizeof(string),"Nachricht von %s: %s",pName,pText);
    SendClientMessage(pID,GELB,string);
    SendClientMessage(playerid,GELB,"Pn erfolgreich versendet.");
    }
    return 1;
    }

    ik bin der vito c:

  • Danke für die Antwort hab folgende Errors in der Zeile



    if(pID == INVALID_PLAYER_ID ) ´ return SendClientMessage(playerid,ROT, "Ungültige ID."); //Zeile 1373




    C:\Users\Jonas\Desktop\Selfmade x)\gamemodes\abac.pwn(1373) : error 029: invalid expression, assumed zero
    C:\Users\Jonas\Desktop\Selfmade x)\gamemodes\abac.pwn(1373) : warning 215: expression has no effect
    C:\Users\Jonas\Desktop\Selfmade x)\gamemodes\abac.pwn(1373) : error 001: expected token: ";", but found "return"
    C:\Users\Jonas\Desktop\Selfmade x)\gamemodes\abac.pwn(1374) : warning 225: unreachable code
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.