[Tut] Koriscenje y_va (iz YSI packa)

Započeo // xunder, Decembar 03, 2015, 23:06:00 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

      Uvod
Ovo je tutorial u kome objasnjavam y_va include koji dolazi u sklopu "Y Server Includes" koje je napravio Y-Less. Od tuda de to "Y" xD.
No da se vratim na temu.

      Za sta sluzi?
Ono sto vas zanima je to da skrati kod, i da vise ne morate svaki put formatirati i slati outpute. :P
Tako da umjesto ovoga

new str[128], playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof playername);
format(str, 128, "Vase ime je: %s", playername);
SendClientMessage(playerid, color, str);

dobijate ovo

new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof playername);
SCMF(playerid, color, "Vase ime je: %s", playername);


      KORISCENJE
Koriscenje je veoma lako.
Znam da mnogi od vas preskacu neke dijelove teksta pa da ne pisem bez veze idemo ovako

Prvo vam treba include, downloadujte YSI pack i stavite u pawno>includes,
potom u skripti stavite #include <YSI\y_va> ili #include "YSI\y_va".
Naravno bice vam potrebno i a_samp include (no to svi znaju hehe).
Pa da krenemo sa definisanjem SCMF funkcije

stock SCMF(id, color, const fmt[], va_args<>) /*koristite va_args<> kao zamjenu za sve parametre koje koristite u f-ji*/{
new str[128]; //naravno moramo kreirati string da bi napravili format
va_format(str, sizeof str, fmt, va_start<3>); //ovde se mora koristiti va_format a umjesto {Float, _}:... koristimo va_start<x>
return SendClientMessage(id, color, str); //saljemo formatiranu poruku
}

va_start<X> - Kako dobiti ovo "X". Lakooo :P
Dakle imamo ovo

SendClientMessage(id, color, string);
Dakle `id` = 1 (va_start<1>)
`color` = 2 (va_start<2>)
`string` = 3 (va_start<3>)

Dakle koliko ima parametara toliki je broj X.

      Primjeri neki

* ORGINALNI POST SA Y_VA TOPICA OD Y-LESSA

stock SendClientMessageToAllEx(colour, const fmat[], va_args<>)
{
    new
        str[145];
    va_format(str, sizeof (str), fmat, va_start<2>);
    return SendClientMessageToAll(colour, str);
}

stock SendPlayerMessageToPlayerEx(playerid, senderid, const fmat[], va_args<>)
{
    new
        str[145];
    va_format(str, sizeof (str), fmat, va_start<3>);
    return SendPlayerMessageToPlayer(playerid, senderid, str);
}

stock SendPlayerMessageToAllEx(senderid, const fmat[], va_args<>)
{
    new
        str[145];
    va_format(str, sizeof (str), fmat, va_start<2>);
    return SendPlayerMessageToAll(senderid, str);
}

stock GameTextForPlayerEx(playerid, const fmat[], time, style, va_args<>)
{
    new
        str[145];
    va_format(str, sizeof (str), fmat, va_start<4>);
    return GameTextForPlayer(playerid, str, time, style);
}

stock GameTextForAllEx(const fmat[], time, style, va_args<>)
{
    new
        str[145];
    va_format(str, sizeof (str), fmat, va_start<3>);
    return GameTextForAll(str, time, style);
}

stock printEx(const fmat[], va_args<>)
{
    new
        str[145];
    va_format(str, sizeof (str), fmat, va_start<1>);
    return print(str);
}


      BZVZ
Tu su jos i va_strlen i va_getstring, ali to nekom drugom prilikom