___________________________ Kezdem is..:
Szükséges slotok definálása --> helytakarítás, gyorsabb script:
#undef MAX_PLAYERS
#define MAX_PLAYERS slot
Példa:
#undef MAX_PLAYERS
#define MAX_PLAYERS 32
Epsilon
Max jármû:
#undef MAX_VEHICLES
#define MAX_VEHICLES autók száma
Példa:
#undef MAX_VEHICLES
#define MAX_VEHICLES 800
0.3-as PlayerToPoint azoknak akik ragaszkodnak hozzá.
#define PlayerToPoint(%1,%2,%3) IsPlayerInRangeOfPoint(%2,%1,%3)
A szerveren lehetséges legmagasabb ID és legalacsonyabb ID.
#define MAX_PLAYER_ID (GetMaxPlayers()-1)
#define MIN_PLAYER_ID 0
Integer típusú PVar értékek egyel való növelése / csökkentése :
#define IncreasePVarInt(%1,%2) \\
SetPVarInt( %1, %2, GetPVarInt( %1, %2 ) + 1 )
#define DecreasePVarInt(%1,%2) \\
SetPVarInt( %1, %2, GetPVarInt( %1, %2 ) - 1 )
Használható például jelszó hibázások ellenorzésére, stb..
Kiszámítja a megadott kordináták között a távolságot.
2D-ben, vagy akár 3D-ben is lehet.
[pawn]
stock Float:GetDistance2D(Float:x1, Float:y1, Float:x2, Float:y2)
{
new
Float:distance_x = x1 - x2,
Float:distance_y = y1- y2;
return floatsqroot((distance_x * distance_x) + (distance_y * distance_y));
}
stock Float:GetDistance3D(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
new
Float:distance_x = x1 - x2,
Float:distance_y = y1- y2,
Float:distance_z = z1 - z2;
return floatsqroot((distance_x * distance_x) + (distance_y * distance_y) + (distance_z * distance_z));
}
[/pawn]
Létrehozza a megadott fájlt.
[pawn]
#define fcreate(%1) \\
fclose(fopen(\"%1\", io_write))
[/pawn]
Használata:
fcreate(\"MyText.txt\");
Létrehozza a megadott fájlt.
[pawn]
#define fcreate(%1) \\
fclose(fopen(\"%1\", io_write))
[/pawn]
Használata:
fcreate(\"MyText.txt\");
Objecteknél is jó? :)
WTF ? ;D
És mire is jó?XD
Lehet hülyeséget mondok, de szerintem (a nevébõl ítélve) így nézne ki:
strcopy(const string1[], const string2[], len);
Nem lényeges, ugyanígy gondoltam én is.
:laugh:
Nem azt kérdezte hogy néz ki.
Amúgy nem látom értelmét átdefíniálni a funkciókat.
Objecteknél is jó? :)
Nem. Csak létrehozza a fájlt / fájlokat, viszont ezzel a funkcióval nem tudsz írni bele.
Az fwrite funkcióra gondolsz. http://wiki.sa-mp.com/wiki/Fwrite
[pawn]
#include a_samp
#define Player(%1,%2) pPlayerData[ %1 ][ %2 ]
enum PLAYER_ENUM
{
bool:logged
};
stock
pPlayerData[ MAX_PLAYERS ][ PLAYER_ENUM ]
;
public OnPlayerConnect( playerid )
{
Player( playerid, logged ) = false;
if ( Player( playerid, logged ) == false )
{
Kick( playerid );
return 1;
}
return 1;
}
[/pawn]
stock
GivePlayerScore( iPlayer, iAmount )
{
SetPlayerScore( iPlayer, GetPlayerScore( iPlayer ) + iAmount );
}
stock
DeprivePlayerScore( iPlayer, iAmount )
{
SetPlayerScore( iPlayer, GetPlayerScore( iPlayer ) - iAmount );
}
stock name(id) {
new n[24];
return GetPlayerName(id,n,24);
}
new msg[128];
format(msg,128,\"A neved: %s\",name(playerid));
new bool: FALSE = false;
#define SendFormatMessageToAll(%1,%2,%3) do{new sendfstring[128];format(sendfstring,128,(%2),%3);SendClientMessageToAll((%1),sendfstring);}while(FALSE)
#define SendFormatMessage(%1,%2,%3,%4) do{new sendfstring[128];format(sendfstring,128,(%3),%4);SendClientMessage(%1,(%2),sendfstring);}while(FALSE)
JBauer:
new bool:FALSE = false;
Igen, igazad van azt kifelejtettem, köszönöm, hogy szóltál.
Úgy ahogy gondolom mire ez a \"FALSE\" megoldás, de inkább megkérdezem, hogy tényleg erre-e.
Ez most azér kell, hogy egy {} közé tegye õket, mivel a do while ciklus csak egyszer fut le, mert a \"FALSE\" értéke soha nem lesz igaz, tehát úgy értem, hogy \"jobban\" nézzen ki a kódban?
do
{
new
sendfstring[128];
format(sendfstring, 128, \"my string %s, %d\", \"valamisz*rságide\", 25);
SendClientMessageToAll(0xFF0000AA, sendfstring);
}
while(FALSE)
Úgy ahogy gondolom mire ez a \"FALSE\" megoldás, de inkább megkérdezem, hogy tényleg erre-e.
Ez most azér kell, hogy egy {} közé tegye õket, mivel a do while ciklus csak egyszer fut le, mert a \"FALSE\" értéke soha nem lesz igaz, tehát úgy értem, hogy \"jobban\" nézzen ki a kódban?
do
{
new
sendfstring[128];
format(sendfstring, 128, \"my string %s, %d\", \"valamisz*rságide\", 25);
SendClientMessageToAll(0xFF0000AA, sendfstring);
}
while(FALSE)
Nem azért kell, azért kell mert a fordító nem fogadja másképp el.
Úgy ahogy gondolom mire ez a \"FALSE\" megoldás, de inkább megkérdezem, hogy tényleg erre-e.
Ez most azér kell, hogy egy {} közé tegye õket, mivel a do while ciklus csak egyszer fut le, mert a \"FALSE\" értéke soha nem lesz igaz, tehát úgy értem, hogy \"jobban\" nézzen ki a kódban?
do
{
new
sendfstring[128];
format(sendfstring, 128, \"my string %s, %d\", \"valamisz*rságide\", 25);
SendClientMessageToAll(0xFF0000AA, sendfstring);
}
while(FALSE)
Nem azért kell, azért kell mert a fordító nem fogadja másképp el.
[/quote]
Dehogynem (bár ha félreértelmeztem elnézést :D).
#define SendFormatMessage(%1,%2,%3,%4) new sendfstring[128];format(sendfstring,128,(%3),%4);SendClientMessage(%1,(%2),sendfstring)
Dehogynem (bár ha félreértelmeztem elnézést :D).
#define SendFormatMessage(%1,%2,%3,%4) new sendfstring[128];format(sendfstring,128,(%3),%4);SendClientMessage(%1,(%2),sendfstring)
Az egész dolog nem másért lett kitalálva mintsem a return utasítás használata végett.
Próbáld ki a kódod így alkalmazni:
return SendFormatMessage(playerid, -1, \"%s\", teszt);
Mind a kettõ hibás lesz.
Edit (most írtam, már kirakom, hát ha valakinek hasznos :D):
stock ShiftRGBAToHex(color)
return (color >>> 8);
Átalakítja az RGBA formátumot (0xFFFFFFFF), hexadecimális formátumúvá (FFFFFF).
Használat:
format(string, 144, \"Szín: %x\", ShiftRGBAToHex(0xFFFFFFFF));
Eredmény: \"Szín: FFFFFF\".
Elõzõ dolgokra visszatérve:
new
g_szFormatString[144];
#define PrintFormatWithReturn(%1) \\
print((format(g_szFormatString, sizeof(g_szFormatString), %1), g_szFormatString))
public OnFilterScriptInit()
{
return PrintFormatWithReturn(\"1234 %s hehe %x\", \"asd\", 0xFFFF);
}
Így nem ér sokat, de átlehet írni SendClientMessage-ra is :)
Valamit tanultam :)
Epsilonnak volt egy ilyenje: http://sampforum.hu/index.php?topic=2929.msg34816#msg34816. Pont most küldték, és szerintem eléggé túl van bonyolítva.
Egyszerűbb megoldás:
IsEven(value)
{
return (value % 2);
}
Pörgessük kicsit..
#define players(%0) for(new %0 = 0; %0 <= GetPlayerPoolSize(); %0++) if(IsPlayerConnected(%0))
#define vehicles(%0) for(new %0 = 0; %0 <= GetVehiclePoolSize(); %0++) if(IsValidVehicle(%0))