SendClientMessage mit 2 Strings

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 mir mit "ocmd" & "sscanf" einen "/pn" Befehl geschrieben. Wenn ich jetzt einem Spieler eine Nachricht sende, steht im Chat nur die Nachricht. Ich möchte jedoch, dass vor der erhaltenen Nachricht bspw. die SpielerID steht.


    So sieht es jetzt aus: /pn 1 Wunschnachricht = Wunschnachricht (im Chat sichtbar).
    So soll es aussehen: /pn 1 Wunschnachricht = Nachricht von ID ... : Wunschnachricht.

    Ich habe dafür schon einen String erstellt und Formatiert. Wie bekomme ich diesen zusammen mit dem anderen String in das "SendClientMessage".


    Hier der Code:
    ocmd:pn(playerid,params[])
    {
    new pID,text[128],Spieler[128];
    format(Spieler,sizeof(Spieler),"Nachricht von ID %i:",playerid);
    if(sscanf(params,"is[128]",pID,text))return SendClientMessage(playerid,Rot,"Befehl: {0080FF}/pn [SpielerID] [Nachricht]");
    SendClientMessage(pID,Grün,text);
    return 1;
    }



  • Hey,
    also wenn ich es richtig verstanden habe sollte es so funktionieren?


    ocmd:pn(playerid,params[])
    {
    new pID,text[128];
    if(sscanf(params,"is[128]",pID,text))return SendClientMessage(playerid,Rot,"Befehl: {0080FF}/pn [SpielerID] [Nachricht]");
    SendClientMessage(pID,Grün,"Nachricht von ID %i: %s",playerid,text);
    return 1;
    }



    Wenn ich es allerdings falsch verstanden habe würde ich mich freuen wenn du es nochmal genauer erklären könntest.
    Da ich nicht genau wusste wie du es meinst

  • ocmd:pn(playerid,params[])
    {
    new pID,text[128],Spieler[128];
    if(sscanf(params,"is[128]",pID,text))return SendClientMessage(playerid,Rot,"Befehl: {0080FF}/pn [SpielerID] [Nachricht]");
    format(Spieler,sizeof(Spieler),"Nachricht von ID %i:%s",playerid, text);
    SendClientMessage(pID,Grün,Spieler);
    return 1;
    }


    einfach
    format(Spieler,sizeof(Spieler),"Nachricht von ID %i:",playerid);
    zu
    format(Spieler,sizeof(Spieler),"Nachricht von ID %i:%s",playerid, text);


    und die sscanf abfrage vor dem formatieren weil du ja erst abfragen musst ob er das richtige eingegeben hat und dann formatieren


    du hast vergessen den Text in die Formatierung einzubinden


    Mit Freundlichen Grüßen
    Snake ♤


    #edit Fehler behoben
    #edit nochmal den Fehler richtig erklärt

    2 Mal editiert, zuletzt von snake112 ()

  • @snake112:
    Deins wird nicht klappen da du erst das format hast und dann die sccanf abfrage.



    @[SM]Rasbroth:
    Mach es so. Mein erster Versuch ist auch falsch


    ocmd:pn(playerid,params[])
    {
    new pID,text[128],string[128];
    if(sscanf(params,"is[128]",pID,text))return SendClientMessage(playerid,Rot,"Befehl: {0080FF}/pn [SpielerID] [Nachricht]");
    format(string,sizeof(string),"Nachricht von ID %i: %s",playerid, text);
    SendClientMessage(pID,Grün,string);
    return 1;
    }


    Desweiteren sollte der text nicht 128 haben sondern am besten nur 80.
    Da eine Nachricht nur 128 Zeichen haben darf und du ja davor schon einiges hast.
    sprich so
    ocmd:pn(playerid,params[])
    {
    new pID,text[80],string[128];
    if(sscanf(params,"is[80]",pID,text))return SendClientMessage(playerid,Rot,"Befehl: {0080FF}/pn [SpielerID] [Nachricht]");
    if(strlen(text) > 80)return SendClientMessage(playerid,ROT,"Der text darf nur 80 Zeichen beinhalten");
    format(string,sizeof(string),"Nachricht von ID %i: %s",playerid, text);
    SendClientMessage(pID,Grün,string);
    return 1;
    }

  • text[128],string[128]


    Willst du nicht noch mehr Arrays erstellen? :D


    Man kann das auch so machen, ohne 256 cells zu verschwenden:


    ocmd:pn(playerid,params[])
    {
    new pID;
    if(sscanf(params,"is[128]",pID,params))return SendClientMessage(playerid,Rot,"Befehl: {0080FF}/pn [SpielerID] [Nachricht]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,Rot,"Ein Spieler mit dieser ID ist nicht online!"); //Wäre evtl auch ganz nützlich xD
    format(params,145,"Nachricht von ID %i: %s",playerid,params);
    SendClientMessage(pID,Grün,params);
    return 1;
    }


    Ich bin nicht 100%ig sicher ob sscanf da mitspielt, aber eigentlich sollte das gehen ^^


    Bitte keinen Code oder so, nur die Frage beantworten (Danke).


    Natürlich...GetPlayerName


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Kaliber:


    Das mit "IsPlayerConnectet" kann ich doch ohne Speichersystem garnicht verwenden oder ?


    Mein Code sieht jetzt so aus:


    ocmd:pn(playerid,params[])
    {
    new pID,text[128],Spieler[128],name[MAX_PLAYER_NAME];
    if(sscanf(params,"is[128]",pID,text))return SendClientMessage(playerid,Rot,"Befehl: {0080FF}/pn [SpielerID] [Nachricht]");
    GetPlayerName(playerid,name,sizeof(name));
    format(Spieler,sizeof(Spieler),"{FFFF00}Nachricht von ID %i {0080FF}(%s){FFFF00}: {FFFFFF}%s",playerid,name,text);
    SendClientMessage(pID,Grün,Spieler);
    return 1;
    }


    Funktioniert alles, InGame sieht es so aus, wie ich es haben möchte. Alles wunderbar :thumbup:

  • Das mit "IsPlayerConnectet" kann ich doch ohne Speichersystem garnicht verwenden oder ?


    Bitte was? :huh:


    Funktioniert alles, InGame sieht es so aus, wie ich es haben möchte.


    Das ist schön :rolleyes: Es würde auch funktionieren, wenn du die Arrays auf 500 jeweils setzen würdest, ändert nichts daran, dass man dies nicht muss.. :whistling:


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Beitrag von xSnake ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Beitrag von Kaliber ()

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