Funktion wie "SendClientFormatMessage()"

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 suche eine Funktion wie eben oben der name schon sagt.
    Gibt es sowas irgendwo als fertige Funktion?
    Ich möchte mir damit folgendes ersparen:



    new str[128];
    format(str, sizeof(str), "%s sucht folgenden Stock", SpielerName(playerid));
    SendClientMessage(playerid, ROT, str);


    und durch in etwa sowas ersetzen können:
    SendClientFormatMessage(playerid, ROT, "%s sucht folgenden Stock", SpielerName(playerid));


    Habe sowas auch in google schon gesehen, allerdings nciht als funktionsfähigen code.
    würde es zwar gern selbst machen, kenne mich jedoch nicht mit unabhängiger parameterzahl aus.


    Vielen Dank schonmal...

  • Ich wüsste jetzt auch nicht das es sowas gibt... Also ich habe noch nie davon gehört.( DialogHD : Ich glaube nicht das es dafür ein Plugin gibt ^^)

  • Möglich ist es mit einen stock
    hab hier mal einen aber der ist ungetestet


    stock SendClientFormatMessage(playerid, color, string[],string2[]);
    {
    new text[128];
    format(text,128,"%s %s",string,string2);
    SendClientMessage(playerid,color,text);
    return 1;
    }

    Mit freundlichen Grüßen


    Perry_Cox



  • #define SendFormatedMessage(%0,%1,%2,%3) do{new _string[128]; format(_string,sizeof(_string),%2,%3); SendClientMessage(%0,%1,_string);} while(FALSE)
    #define SendFormatedMessageToAll(%0,%1,%2) do{new _string[128]; format(_string,sizeof(_string),%1,%2); SendClientMessageToAll(%0,_string);} while(FALSE)
    new bool:FALSE=false;
    Beachte aber, dass das define so aufgebaut ist das du es nicht direkt returnen kannst.


    Zu den anderen antworten hier sag ich ma lieber garnix

    The fact is, I am right. And if you think I'm wrong, you are wrong.


  • Dann müsste der 3. parameter ein String sein, und das funktioniert dann nicht ^^

  • Hab vor langer Zeit mal eine geschrieben, ist realitiv schlecht gecodet, tut aber das was es soll^^


    stock SendFormatedMessage(playerid,color,string[],{Float,_}:...) //by BlackAce
    {
    if(!(numargs()-1)) return false;
    new i,replace[127]="",curarg=3,l=strlen(string),index;
    for(;i!=l;i++)
    {
    switch(string[i])
    {
    case '%':
    {
    switch(string[i+1])
    {
    case 'd','i':
    {
    strdel(string,i,i+2);
    valstr(replace,getarg(curarg));
    strins(string,replace,i,127);
    curarg++,l+=strlen(replace);
    continue;
    }
    case 'f':
    {
    strdel(string,i,i+2);
    format(replace,22,"%f",Float:getarg(curarg));
    strins(string,replace,i,127);
    curarg++,l+=strlen(replace);
    continue;
    }
    case 's':
    {
    replace="";
    while(getarg(curarg,index)!=0) replace[index]=getarg(curarg,index),index++;
    strdel(string,i,i+2);
    strins(string, replace, i, 127);
    curarg++,l+=strlen(replace),index=0;
    continue;
    }
    }
    }
    }
    }
    return SendClientMessage(playerid,color,string);
    }

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • @BlackAce


    mhm danke ;)
    aber funktioniert nicht ganz so...^^
    buggt ziemlich rum, manche zeichen verschwinden einfach, wo anders sind wieder welche da.7


    Hätte mir dabei eher sowas vorgestellt.
    Wäre so auf 5 parameter begrenzt...
    und man kann eben nur integer reinmachen...
    wie mach ich das, dass ich auch Strings und Floats hernehmen kann ?
    was muss ich statt dem ... schreiben?



    stock SendFormatMessage(playerid,color,text[],...)
    {
    new str[128];
    format(str, sizeof(str), text, getarg(3), getarg(4), getarg(5), getarg(6), getarg(7));
    SendClientMessage(playerid,color,str);
    return 1;
    }

    Einmal editiert, zuletzt von Sry4pwn ()

  • aber funktioniert nicht ganz so...^^
    buggt ziemlich rum, manche zeichen verschwinden einfach, wo anders sind wieder welche da.


    Dann machst du was falsch, bei mir hat die immer funktioniert.


    Das was du davor hast, wird und kann nicht funktionieren ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Hier eine sehr schöne und saubere Lösung:
    new stock
    scm_buf[144];


    native __SendClientMessage(playerid, color, const message[]) = SendClientMessage;
    native __SendClientMessageToAll(color, const message[]) = SendClientMessageToAll;


    #define SendClientMessage(%0,%1,%2,%3) \
    (format(scm_buf, sizeof scm_buf, %2,%3), __SendClientMessage(%0,%1,scm_buf))

    #define SendClientMessageToAll(%0,%1,%2) \
    (format(scm_buf, sizeof scm_buf, %1,%2), __SendClientMessageToAll(%0,scm_buf))


    Du kannst SendClientMessage auch normal verwenden. ODER mit zusätzlichen Formatierungsargumenten, beides funktioniert.



    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof name);


    SendClientMessage(playerid, COLOR_RED, "Hallo %s!", name);


    SendClientMessage(playerid, COLOR_BLUE, "Willkommen auf unserem Server!");