[Tutorial] Pawn Elipse.
#3

Quote:
Originally Posted by rjjj
Посмотреть сообщение
...

O ъnico mйtodo atual de se criar a famosa funзгo SendClientMessageEx (que envia uma mensagem ao jogador, jб formatada) funcionando 100% й atravйs de #defines :
bom trabalho porem sim existe maneira de fazer o SendClientMessage sem precisar de define ...

Estб aqui uma versao alterada por ****** do original codigo do Zeex

pawn Код:
#define BYTES_PER_CELL 4

stock CPF(playerid, color, fstring[], {Float, _}:...)
{
    // This is the number of parameters which are not variable that are passed
    // to this function (i.e. the number of named parameters).
    static const
        STATIC_ARGS = 3;
    // Get the number of variable arguments.
    new
        n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
    if (n)
    {
        new
            message[128],
            arg_start,
            arg_end;
       
        // Load the real address of the last static parameter. Do this by
        // loading the address of the last known static parameter and then
        // adding the value of [FRM].
        #emit CONST.alt        fstring
        #emit LCTRL          5
        #emit ADD
        #emit STOR.S.pri        arg_start
       
        // Load the address of the last variable parameter. Do this by adding
        // the number of variable parameters on the value just loaded.
        #emit LOAD.S.alt        n
        #emit ADD
        #emit STOR.S.pri        arg_end
       
        // Push the variable arguments. This is done by loading the value of
        // each one in reverse order and pushing them. I'd love to be able to
        // rewrite this to use the values of pri and alt for comparison,
        // instead of having to constantly load and reload two variables.
        do
        {
            #emit LOAD.I
            #emit PUSH.pri
            arg_end -= BYTES_PER_CELL;
            #emit LOAD.S.pri      arg_end
        }
        while (arg_end > arg_start);
       
        // Push the static format parameters.
        #emit PUSH.S          fstring
        #emit PUSH.C          128
        #emit PUSH.ADR         message
       
        // Now push the number of arguments passed to format, including both
        // static and variable ones and call the function.
        n += BYTES_PER_CELL * 3;
        #emit PUSH.S          n
        #emit SYSREQ.C         format
       
        // Remove all data, including the return value, from the stack.
        n += BYTES_PER_CELL;
        #emit LCTRL          4
        #emit LOAD.S.alt        n
        #emit ADD
        #emit SCTRL          4
       
        return SendClientMessage(playerid, color, message);
        //return print(message);
    }
    else
    {
        return SendClientMessage(playerid, color, fstring);
        //return print(fstring);
    }
}
Porem nem eu a uso pois ja existe a maneira do define... :3
Reply


Messages In This Thread
Pawn Elipse. - by rjjj - 29.07.2011, 04:13
Re: Pawn Elipse. - by ViniBorn - 29.07.2011, 04:15
Re: Pawn Elipse. - by SlashPT - 29.07.2011, 04:22
Re: Pawn Elipse. - by Rodox_Mortein - 29.07.2011, 04:38
Re: Pawn Elipse. - by rjjj - 29.07.2011, 04:46
Re: Pawn Elipse. - by SlashPT - 29.07.2011, 04:52
Re: Pawn Elipse. - by [S]trong - 29.07.2011, 05:00
Re: Pawn Elipse. - by rjjj - 29.07.2011, 05:05
Re: Pawn Elipse. - by [S]trong - 29.07.2011, 05:21
Re: Pawn Elipse. - by Juninho_Oakley - 22.08.2011, 19:29

Forum Jump:


Users browsing this thread: 3 Guest(s)