SendFormattedMessage
#1

What is wrong with this define?
pawn Код:
#define SendFormattedMessage(%0,%1,%2,%3) \
{ \
    do \
    { \
        new _string_[128]; \
        format(_string_, sizeof(_string_), %2, %3); \
        SendClientMessage(%0, %1, _string_); \
    } \
    while(false); \
}
Gives me these warnings where i use it
Код:
C:\Users\...\Desktop\...\gamemodes\....pwn(582) : warning 205: redundant code: constant expression is zero
C:\Users\...\Desktop\...\gamemodes\....pwn(582) : warning 217: loose indentation
C:\Users\...\Desktop\...\gamemodes\....pwn(582) : error 036: empty statement
EDIT!

Solved:
pawn Код:
#define SendClientMessageEx(%0,%1,%2,%3) \
do \
{ \
    if(strlen(%2) > 0) \
    { \
        new _string_[128]; \
        format(_string_, sizeof(_string_), %2, %3); \
        SendClientMessage(%0, %1, _string_); \
    } \
} \
while(FALSE)
Reply
#2

pawn Код:
#define BYTES_PER_CELL              4

stock SendClientMessageFormatted(playerid, color, fstring[], {Float, _}:...)
{
    static const STATIC_ARGS = 3;
    new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
    if(n)
    {
        new message[144],arg_start,arg_end;
        #emit CONST.alt        fstring
        #emit LCTRL          5
        #emit ADD
        #emit STOR.S.pri        arg_start

        #emit LOAD.S.alt        n
        #emit ADD
        #emit STOR.S.pri        arg_end
        do
        {
            #emit LOAD.I
            #emit PUSH.pri
            arg_end -= BYTES_PER_CELL;
            #emit LOAD.S.pri      arg_end
        }
        while(arg_end > arg_start);

        #emit PUSH.S          fstring
        #emit PUSH.C          144
        #emit PUSH.ADR         message

        n += BYTES_PER_CELL * 3;
        #emit PUSH.S          n
        #emit SYSREQ.C         format

        n += BYTES_PER_CELL;
        #emit LCTRL          4
        #emit LOAD.S.alt        n
        #emit ADD
        #emit SCTRL          4

        if(playerid == INVALID_PLAYER_ID)
        {
            #pragma unused playerid
            return SendClientMessageToAll(color, message);
        } else {
            return SendClientMessage(playerid, color, message);
        }
    } else {
        if(playerid == INVALID_PLAYER_ID)
        {
            #pragma unused playerid
            return SendClientMessageToAll(color, fstring);
        } else {
            return SendClientMessage(playerid, color, fstring);
        }
    }
}
Use this, hopefully a friend of mine don't mind if i share.

EDIT: Didn't noticed solved, sorry :/
Reply
#3

I wrote this. Nice and easy.
pawn Код:
#define SendFormattedMessage(%0,%1,%2,%3) \
new text[128]; \
format(text,sizeof(text),%2,%3); \
SendClientMessage(%0,%1,text)
Reply
#4

The one i posted possibly made by ****** and Zee (creator of zcmd) should be way better and optimized.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)