U ovom topiku možete staviti vaše korisne skripte i kodove (ne komande).
Sa ovom funkcijom možete "prisiliti" bilo kojeg igraća na korištenje komande ako ta komanda postoji u gamemodu ili filterskripti:
Funkcija:
stock ForcePlayerCommand(playerid, command[]) // Emilio "Correlli" Lovrić
{
if(!IsPlayerConnected(playerid)) return false;
new
playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
CallRemoteFunctionEx("OnPlayerCommandText", "is", playerid, "/%s", command);
printf("Forcing player command: Player: \"%s (%i)\", Command: \"/%s\"", playername, playerid, command);
return true;
}
Primjer:
public OnPlayerCommandText(playerid, cmdtext[])
{
// ova će komanda pozvati komandu /command
if(strcmp("/mycmd", cmdtext, true) == 0) return ForcePlayerCommand(playerid, "command");
// ovo je test komanda koja će izbaciti obićnu poruku "testMsg."
if(strcmp("/command", cmdtext, true) == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "testMsg.");
return false;
}
/* ime komande morate koristiti bez "/"
ovo je primjer ako želimo pozvati komandu /kick koja ima parametre: ime, razlog */
ForcePlayerCommand(playerid, "kick Marko psovanje");
Trebat će vam CallRemoteFunctionEx funkcija:
// ovaj varijabl će vam trebati za CallRemoteFunctionEx funkciju.
new
FALSE = 0;
CallRemoteFunctionEx funkcija:
#if !defined CallRemoteFunctionEx
#define CallRemoteFunctionEx(%0,%1,%2,%3,%4) \ // Emilio "Correlli" Lovrić
do \
{ \
new \
string[64]; \
format(string, sizeof(string), %3, %4); \
CallRemoteFunction(%0, %1, %2, string); \
} \
while(FALSE)
#endif
Sa ovom funkcijom možete promijeniti ime vašeg servera:
Funkcija:
stock SetServerName(name[]) // Emilio "Correlli" Lovrić
{
SendRconCommandEx("hostname %s", name);
printf("Setting server name to: \"%s\"", name);
return true;
}
Primjer:
SetServerName("SA-MP v0.3a server");
Sa ovom funkcijom možete promijeniti text gamemoda koji je trenutno na vašem serveru:
Funkcija:
stock SetServerGamemode(gamemode[]) // Emilio "Correlli" Lovrić
{
SendRconCommandEx("gamemodetext %s", gamemode);
printf("Setting server gamemode name to: \"%s\"", gamemode);
return true;
}
Primjer:
SetServerGamemode("San Andreas Role-Play");
Sa ovom funkcijom možete promijeniti ime mape vašeg servera:
Funkcija:
stock SetServerMap(map[]) // Emilio "Correlli" Lovrić
{
SendRconCommandEx("mapname %s", map);
printf("Setting server map name to: \"%s\"", map);
return true;
}
Primjer:
SetServerMap("Liberty City");
Za funkcije SetServerName, SetServerGamemode & SetServerMap trebat će vam SendRconCommandEx funkcija:
/* ovaj varijabl će vam trebati za SendRconCommandEx funkciju.
UPOZORENJE: ako već imate ovaj varijabl definiran od prije (CallRemoteFunctionEx funkcija), onda nema potrebe da ga stavljate još jednom. */
new
FALSE = 0;
SendRconCommandEx funkcija:
#if !defined SendRconCommandEx
#define SendRconCommandEx(%0,%1) \ // Emilio "Correlli" Lovrić
do \
{ \
new \
string[64]; \
if(strlen(%0) > 0) \
{ \
format(string, sizeof(string), %0, %1); \
SendRconCommand(string); \
} \
} \
while(FALSE)
#endif
Eto napokon je ponovno otvorena, inace mislim da se nasla metoda(pomocu AMX opcode) da ne trebas macro stavljati da moze primiti x parametara te iste parametre koristi na format. Imas to tamo kod Y_Less optimization topic, al svejedno i ovo ce raditi(a bit ce i sigurno razumljivije nego opcodovi :D). Evo jedna za pocetak:
#define is_even(%1) !((%1) & 1)
#define is_odd(%1) !is_even(%1)
Zasto bi trebali broj bitwise AND-ati da bismo vidjeli jeli paran tj. neparan, razlog:
svi parni brojevi imaju bit koji je prvi s desne strane(tzv. LSB) vrijednosti 0, a neparni 1.
Inace se koristi (x % 2), ali to je sporije od ovoga ;)
Svidja mi se ovo za tjeranje igraca na neku komandu. Sinula mi je ideja. :P
Eto posto nitko nije postao vec otprilike 2 mjeseca moram ja ovaj topic malo ozivit(nadam se da ce bit aktivan kao i prije):
/**
* Orginal algorithm:
* --------------------------
* str[x] += (3^x) * (x % 15)
* --------------------------
* Objasnjenje:
* # x => trenutna pozicija u stringu
* # Dodaje (3^x) * (x % 15) na slovo koje je trenutno na poziciji x u stringu(zato nam treba charset)
* # Takoder se moze vidjeti jako vazna slabost ovdje: ulazna duzina stringa ce biti jednaka izlaznoj duzini stringa
*/
stock Decrypt(str[])
{
new
result[128];
for(new i = 0, j = strlen(str), z = 0; i < j; i++)
{
for(new x = 0; charset[x] < sizeof(charset); x++)
{
new
target = charset[x] + (((3^i) * (i % 15)));
if(((target > 0xFF) ? target-256 : target) == str[i])
{
result[z++] = charset[x];
}
}
}
return result;
}
[quote author=Luka P. link=topic=4245.msg69131#msg69131 date=1276697770]
Nisam znao jel ima nativna funkcija za ovo, pa sam napravio svoju :P
...
Ali recimo meni je lakše naći ID kada koristim GivePlayerWeapon, to koristim za /givegun [player] [ime oruzja] [municija]
[/quote]
to se zove lose skriptanje, bolji nacin je:
new const
g_WeaponTable[46][] =
{
"ime prvog oruzja",
"ime drugog oruzja",
// i tako sve
}
stock GetWeaponIDByName(const name[])
{
new
id = -1;
for(new i = 0; i < sizeof(g_WeaponTable); i++)
{
if(!strcmp(name, g_WeaponTable[i]))
{
id = i;
}
}
return id;
}
stock GetPlayerFirstName(playerid)
{
new namestring[2][MAX_PLAYER_NAME];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
split(name, namestring, '_');
return namestring[0];
}
stock GetPlayerLastName(playerid)
{
new namestring[2][MAX_PLAYER_NAME];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
split(name, namestring, '_');
return namestring[1];
}
stock GetPlayerNameEx(playerid)//Brise "_" u imenu igraca
{
new string[24];
GetPlayerName(playerid,string,24);
new str[24];
strmid(str,string,0,strlen(string),24);
for(new i = 0; i < MAX_PLAYER_NAME; i++)
{
if (str[i] == '_') str[i] = ' ';
}
return str;
}
stock SendMessageToAdmins(bool:client,sender,color,msg[])
{
foreach (Player, i)
{
if(IsPlayerAdmin(i))
{
new string[128];
if(client == true)
{
new pName[MAX_PLAYER_NAME+1];
GetPlayerName(i,pName,sizeof(pName));
format(string,sizeof(string),"%s(%d): %s",pName,sender,msg);
SendClientMessage(i,color,string);
}
else
{
format(string,sizeof(string),"%s",msg);
SendClientMessage(i,color,string);
}
}
}
}
Korištenje: SendMessageToAdmins(bool:client,sender,color,msg[]);
bool:Client - ako je true onda će se adminima poslati msg(poruka) s imenom i IDom sendera, a ako je na false onda ce se poslati samo msg(poruka)
sender - id igraca koji je poslao poruku, koristi se samo ako je Client na true
color - boja u kojoj ce tekst biti poslan adminima
msg[] - poruka koja se šalje adminima
PRIMJERI:
SendMessageToAdmins(true,playerid,0xF95D5DAA,"Test kod")
rezultat: Ime_Prezime(0): Test kod
SendMessageToAdmins(false,0,0xF95D5DAA,"Test kod")
rezultat: Test kod
NAPOMENA: Za ovu funkciju je potreban foreach include koji mozete skinuti OVDJE (http://forum.sa-mp.com/showthread.php?t=92679) .
- Eto vidim da je neaktivan ovaj topic pa da ga malo ozivim eto nekih osnovnih funkcija kojim si mozete skratiti posao.
stock DajHelte(playerid,Float:Helti)
{
new
Float:Helti;
GetPlayerHealth( playerid,Helti );
SetPlayerHealth( playerid, Helti + Helti );
}
UzmiHelte(playerid,- Helti);stock UzmiHelte( playerid,Float:Helti )
{
new
Float:Helti;
GetPlayerHealth( playerid,Helti );
SetPlayerHealth( playerid, Helti - Helti );
}
primjer....cmd:mojakomanda(playerid,params[])
{
UzmiHelte(playerid,50);
SCM(playerid,siva,"Odluzelo ti se 50 helti..");
return 1;
}
ImeIgraca(id igraca);stock ImeIgraca(playerid)
{
new
Ime[ MAX_PLAYER_NAME ];
GetPlayerName( playerid,Ime, MAX_PLAYER_NAME );
return Ime;
}
primjer...format(string, sizeof string,"Igracevo ime je %s",ImeIgraca(id));
SCM(playerid,gf,string);
ClearChat(); - 50 SCMstock ClearChat()
{
for( new i = 0; i < 50; i++ )
{
SendClientMessageToAll( siva, " " );
}
return 1;
}
DodajScore(playerid, +iznos);stock DodajScore( playerid, valuta )
{
SetPlayerScore (playerid, GetPlayerScore( playerid ) + Valuta );
return 1;
}
Evo jedne macro funkcije koje koristim za ekonomiju u serveru, zelio bi se zahvaliti Don Correlli-u koji mi je pomogao...new
VALUE = 5;
#define returnValue( %0 ) %0 * VALUE
stock SetNewValue( valuta ) return VALUE = valuta;
// Primjer primjene.....
SetNewValue( 8 );
printf("%i", returnValue( 6 )); // vrati 48 ( prije toga stavimo VALUE kao 8, znaÄi 8 * 6 = 48. )
JeUvodi(playerid);
- Ovo sam jos davno radio neznam dali ce raditi na 0.3b ali vrijedi pokusati ovo samo gleda jeli igrac na Z poziciji tj. u moru i napravljene su aree u kojem je more..Trebat ce vam Y_lessova funkcija IsPlayerInArea
stock JeUvodi(playerid)
{
new
Float:X,Float:Y,Float:doljegore;
GetPlayerPos(playerid,X,Y,doljegore);
if ((IsPlayerInArea(playerid, 2032.1371, 1841.2656, 1703.1653, 1467.1099) && doljegore <= 9.0484)
|| (IsPlayerInArea(playerid, 2109.0725, 2065.8232, 1962.5355, 10.8547) && doljegore <= 10.0792)
|| (IsPlayerInArea(playerid, -492.5810, -1424.7122, 2836.8284, 2001.8235) && doljegore <= 41.06)
|| (IsPlayerInArea(playerid, -2675.1492, -2762.1792, -413.3973, -514.3894) && doljegore <= 4.24)
|| (IsPlayerInArea(playerid, -453.9256, -825.7167, -1869.9600, -2072.8215) && doljegore <= 5.72)
|| (IsPlayerInArea(playerid, 1281.0251, 1202.2368, -2346.7451, -2414.4492) && doljegore <= 9.3145)
|| (IsPlayerInArea(playerid, 2012.6154, 1928.9028, -1178.6207, -1221.4043) && doljegore <= 18.45)
|| (IsPlayerInArea(playerid, 2326.4858, 2295.7471, -1400.2797, -1431.1266) && doljegore <= 22.615)
|| (IsPlayerInArea(playerid, 2550.0454, 2513.7588, 1583.3751, 1553.0753) && doljegore <= 9.4171)
|| (IsPlayerInArea(playerid, 1102.3634, 1087.3705, -663.1653, -682.5446) && doljegore <= 112.45)
|| (IsPlayerInArea(playerid, 1287.7906, 1270.4369, -801.3882, -810.0527) && doljegore <= 87.123)
|| (doljegore < 1.5))
{
return 1;
}
return 0;
}
stock IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy) // BY Y_Less
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if (x > minx && x < maxx && y > miny && y < maxy) return 1;
return 0;
}
SetPlayerPosEx(playerid, X,Y,Z,Int,VW);stock SetPlayerPosEx(playerid,Float:X,Float:Y,Float:Z,interior,VirtualWorld)
{
new
vozilo = GetPlayerVehicleID(playerid);
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
SetPlayerVirtualWorld(playerid,VirtualWorld);
SetPlayerPos(playerid, X, Y, Z);
SetVehiclePos(car, X, Y, Z);
PutPlayerInVehicle(playerid, vozilo, 0);
SetPlayerInterior(playerid,interior);
}
else
{
SetPlayerPos(playerid, X, Y, Z);
}
return 1;
}
if(JeBicikl(carid))stock JeBicikl(carid)
{
if( GetVehicleModel( carid ) == 481 || GetVehicleModel( carid ) == 509 || GetVehicleModel( carid ) == 510 )
{
return 1;
}
return 0;
}
IgracIgracu(playerid,playerid2);stock IgracIgracu(playerid, playerid2)
{
new
Float: X, Float: Y, Float Z;
GetPlayerPos(playerid,X,Y,Z);
SetPlayerPos(playerid2,X+2,Y,Z);
return 1;
}
1. de facto u programiranju/skriptanju u vezi ime varijabla, funkcija, i svega sta nije tekst je da bude pisano na Engleskom jer je to internacionalni jezik.
2.
stock DodajScore( playerid, valuta )
{
SetPlayerScore (playerid, GetPlayerScore( playerid ) + Valuta );
return 1;
}
ovdje ce izbacit error jer si koristio "Valuta"(veliko 'V') umjesto "valuta"
3. Ovdje se moze maknut overhead pozivanja funkcije jer je trivialna
stock JeBicikl(carid)
{
if( GetVehicleModel( carid ) == 481 || GetVehicleModel( carid ) == 509 || GetVehicleModel( carid ) == 510 )
{
return 1;
}
return 0;
}
bolje:
#define IsBike(%1) (GetVehicleModel(%1) == 481 || GetVehicleModel(%1) == 509 || GetVehicleModel(%1) == 510)
4. Ime funkcije "IgracIgracu" ne govori bas puno, bolje bi ime bilo "SetPlayerPosToPlayer" ili slicno.
5. "JeUvodi" je nesigurna funkcija po tome sto ne mozes tocno pokriti sva podrucja, pa ce nekad vracat krivi rezultat.
6. funkcija SetPlayerPosEx nema bas logike jer ce napravit sto treba kad je igrac vozac al kad nije onda ce mu samo postavit poziciju, pa eto dobre verzije:
stock SetPlayerPosEx(playerid, Float: x, Float: y, Float: z, interior, virtualWorld)
{
if(SetPlayerVirtualWorld(playerid, virtualWorld))
{ // player is connected
if(SetPlayerInterior(playerid, interior))
{
new
vehicle = GetPlayerVehicleID(playerid);
if(vehicle)
{
return SetVehiclePos(vehicle, x, y, z);
}
else
{
return SetPlayerPos(playerid, x, y, z);
}
}
}
return 0;
}
nisam testirao al trebala bi radit.
Dobro hvala na ispravku velikih slova. Drugo, sta se tice jezika znas i sam da neki neznaju osnove engleskog jezika
A sta se tice SetPlayerPosEx sam planiro al mi se nije dalo dodavati da ako je u vozilu da linka vozilo sa INT i da teleportira i vozilo
Svida mi se ova ideja
#define IsBike(%1) (GetVehicleModel(%1) == 481 || GetVehicleModel(%1) == 509 || GetVehicleModel(%1) == 510)
Evo jedne funkcije, nije nesto al mozete si ubrzati freeze i unfreeze jer znam kad ja radim onda uvjek trazim toggleplayercont. jer nikako da zapamtim kako se tocno pise ^^
stock Freeze(playerid,bool:zaleden)
{
if(zaleden == true)
{
// FREEZE
TogglePlayerControllable(playerid,0);
}
else if(zaleden == false)
{
// UNFREEZE
TogglePlayerControllable(playerid,1);
}
return false;
}
Znaci primjena, ako nekog zelite freezati onda stavite Freeze(playerid,1); a za unfreeze Freeze(playerid,0);
Freeze(playerid,1); // ZALEDEN (FREEZE)
Freeze(playerid,0); // ODLEDEN (UNFREEZE)
Citat: Luka P. poslato Septembar 26, 2010, 18:29:02 POSLE PODNE
Citat: taft poslato Septembar 26, 2010, 12:35:53 POSLE PODNE
Evo jedne funkcije, nije nesto al mozete si ubrzati freeze i unfreeze jer znam kad ja radim onda uvjek trazim toggleplayercont. jer nikako da zapamtim kako se tocno pise ^^
stock Freeze(playerid,bool:zaleden)
{
if(zaleden == true)
{
// FREEZE
TogglePlayerControllable(playerid,0);
}
else if(zaleden == false)
{
// UNFREEZE
TogglePlayerControllable(playerid,1);
}
return false;
}
Znaci primjena, ako nekog zelite freezati onda stavite Freeze(playerid,1); a za unfreeze Freeze(playerid,0);
Freeze(playerid,1); // ZALEDEN (FREEZE)
Freeze(playerid,0); // ODLEDEN (UNFREEZE)
#define Freeze TogglePlayerControllable
#define Freeze(%1,%2) TogglePlayerControllable((%1), !(%2))
tvoje bi radilo obrnuto, znaci kad netko hoce Freeze(playerid, 1); onda bi ga unfreezao.
evo i funkcije pa mozete koristiti sta hocete(i da pokazem kako lakse napraviti nego sta je onaj taft):
stock Freeze(playerid, bool: freeze)
{
return TogglePlayerControllable(playerid, !freeze);
}
i btw. @taft; tvoj kod bi uvijek vracao false...
hvala bullet, hvala luka...Samo luka ja sam ubiti htio ovo sta je bullet napravio a to je ovo obrnuto "#define Freeze(%1,%2) TogglePlayerControllable((%1), !(%2))" hvala
Da malo refresham..
Od garsina:
Detekcija dali je igrac pauzao igru
new LastPlayerUpdate[MAX_PLAYERS];
#define IsPlayerPaused(%1,%2) GetTickCount() > (LastPlayerUpdate[%1] + (%2 * 1000))//vraca pauzirano vrijeme u sekundama
// Primjer
public OnPlayerUpdate(playerid)
{
LastPlayerUpdate[playerid] = GetTickCount();
return 1;
}
//U Timeru ili slicno
if(IsPlayerPaused(playerid, 300) && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)
{
Kick(playerid);
}
Macro funkcija:
formatEx ( playerid , string[] , len ) ;
#define DULJINA_FORMATA 128
#define SCM(%0,%1,%2) SendClientMessage(%2,%1,%0)
#define BOJA 0x00FF14FF
#define formatEx(%0,%1,%2) \
do \
{ \
new \
string[DULJINA_FORMATA]; \
format(string, sizeof string, %1, %2); \
SCM(string, BOJA, %0); \
} \
while(false)
by [H]265
S ovom funkcijom si skratite muke...Standardni primjer
new
string[128]
;
format(string , sizeof string, "neka poruka" len );
SendClientMessage(playerid, nekaBoja, string);
a sa ovom funkcijom ce to ovako izgledati....
formatEx(playerid, "%s" ime );
I TO JE SVE! Evo jedan primjer u praksi
public OnPlayerSpawn(playerid)
{
new
ime[24]
;
GetPlayerName(playerid, ime, 24);
formatEx(playerid, "Spawno si se %s", ime);
return true;
}
Takoder sam napravio ako trebate format za SVE online igrace
#define DULJINA_FORMATA2 128
#define formatExToAll(%0,%1) \
do \
{ \
new \
string[DULJINA_FORMATA2]; \
format(string, sizeof string, %0, %1); \
ScmToAll(BOJA, string); \
} \
while(false)
formatExToAll(string[] , len );
primjer:
public OnPlayerConnect(playerid)
{
new
ime[24]
;
GetPlayerName(playerid, ime, 24);
formatExToAll("|- %s se prikljucio na server -|" , ime);
return true;
}
U slucaju da dobite ovakav warning
warning 205: redundant code: constant expression is zero
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Warning.
Onda na vrh stavite
new stock
bool:FALSE = false;
Eto toliko od mene, nista posebno ali zasto si ne olaksati?
Evo jedan REFRESH...
Evo nesto sto moze skratit muke:
#define SendMessage(%0,%1) SendClientMessage(%0,0xFFFFFFFF,%1)
To dodate na vrh...
Znaci kako su dosli ovo novo "embed" boja (npr: {FF0000} - crvena) meni je bilo gl*po pisat:
CitatSendClientMessage(id,COLOR_XXX,"{FF0000}pfdhfgdihgfihd");
COLOR_XXX - Naime, to je samo visak jer sam odma na pocetku dodao {FF0000}...
Tako da s ovim defajnom dodajete poruku ovako:
SendMessage(id,"Text");
Ovo sam samo dodao tako da malo refresham, kasnije cu dodat jos koju ali malo jacu....
I bilo bi lijepo da i vi koju stavite :)
Evo za AntiDriveBy :)
Pod public OnPlayerDeath dodajte ovo:
if(killerid != INVALID_PLAYER_ID)
{
if(GetPlayerState(killerid) == 2)
{
SendClientMessage(killerid, ZELENA, "=====================================================");
SendClientMessage(killerid, CRVENA, "DRIVE BY UBISTVO!");
SendClientMessage(killerid, CRVENA, "TO JE ZABRANJENO | NEMOJ TO RADITI");
SendClientMessage(killerid, ZELENA, "=====================================================");
GetPlayerHealth(playa, shealth);
SetPlayerHealth(playa, shealth-5);
GetPlayerPos(playa, slx, sly, slz);
SetPlayerPos(playa, slx, sly, slz+5);
PlayerPlaySound(playa, 1130, slx, sly, slz+5);
return 1;
}
}
Odmah ispod OnPlayerDeath dodajte sledece:
new playa;
new Float:slx, Float:sly, Float:slz;]
I ako cete koristiti ovakav naziv boje kao ja ,trebate to definirati | Skroz gore kod define-a dodajte ovo:
#define CRVENA 0xAA3333AA
#define ZELENA 0x33AA33AA
Znaci kada igrac ubije igraca iz auta , taj igrac automatski dobija /slap komandu ;D
Citat: joXy poslato Januar 30, 2011, 01:55:32 PRE PODNE
if(killerid != 255)
{
// ...
}
INVALID_PLAYER_ID u 0.3 verziji SA:MP-a je definiran kao 0xFFFF (65535), a ne kao 255 (0.2 verzija). Šta želim reći jest da 255 nije više nevažeći ID ako koristiš 0.3 verziju, zato ti je bolje da koristiš definicije poput INVALID_PLAYER_ID.
I Å¡ta će ti uopÄe funkcija GetPlayerName i sa time i varijabl giveplayer kad ne koristiÅ¡ toga nigdje?
Hvala na savetu i ispravci :)
Citat: Emilijo L. (Correlli) poslato Januar 30, 2011, 02:02:05 PRE PODNE
I Å¡ta će ti uopÄe funkcija GetPlayerName i sa time i varijabl giveplayer kad ne koristiÅ¡ toga nigdje?
To sam uzeo iz komande /slap - pa je umaklo :o
To ti je zato jer s novim SA:MP 0.3 dolazi podrska za viÅ¡e od 200 igraÄa pa je sad 255 pravi ID igraća, sad je on moguć pa su morali promijeniti ovo. Ali bi bilo bolje da koristis INVALID_PLAYER_ID nego 255 ili 65535
Citat: LordShigi poslato Januar 30, 2011, 12:08:06 POSLE PODNE
To ti je zato jer s novim SA:MP 0.3 dolazi podrska za viÅ¡e od 200 igraÄa pa je sad 255 pravi ID igraća, sad je on moguć pa su morali promijeniti ovo. Ali bi bilo bolje da koristis INVALID_PLAYER_ID nego 255 ili 65535
Fixano :)
//uzima igracevu brzinu
stock GetPlayerSpeed(playerid,bool:kmh)
{
new Float:Vx,Float:Vy,Float:Vz,Float:R;
if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Vx,Vy,Vz); else GetPlayerVelocity(playerid,Vx,Vy,Vz);
R = floatsqroot(floatabs(floatpower(Vx + Vy + Vz,2)));
return kmh?floatround(R * 100 * 1.61):floatround(R * 100);
}
Citat: SlicK poslato Februar 02, 2011, 22:51:02 POSLE PODNE
//uzima igracevu brzinu
stock GetPlayerSpeed(playerid,bool:kmh)
{
new Float:Vx,Float:Vy,Float:Vz,Float:R;
if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Vx,Vy,Vz); else GetPlayerVelocity(playerid,Vx,Vy,Vz);
R = floatsqroot(floatabs(floatpower(Vx + Vy + Vz,2)));
return kmh?floatround(R * 100 * 1.61):floatround(R * 100);
}
Mozes li mi pojasniti ovo
bool:kmh ???
Mislim da ovo nije tvoje... A pise: U ovom topiku možete staviti
vaše korisne skripte i kodove (ne komande). ali lepo je sto si stavio
Citat: eXtreme poslato Februar 03, 2011, 12:10:08 POSLE PODNE
Citat: SlicK poslato Februar 02, 2011, 22:51:02 POSLE PODNE
//uzima igracevu brzinu
stock GetPlayerSpeed(playerid,bool:kmh)
{
new Float:Vx,Float:Vy,Float:Vz,Float:R;
if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Vx,Vy,Vz); else GetPlayerVelocity(playerid,Vx,Vy,Vz);
R = floatsqroot(floatabs(floatpower(Vx + Vy + Vz,2)));
return kmh?floatround(R * 100 * 1.61):floatround(R * 100);
}
Mozes li mi pojasniti ovo
bool:kmh ???
Mislim da ovo nije tvoje... A pise: U ovom topiku možete staviti vaše korisne skripte i kodove (ne komande). ali lepo je sto si stavio
"bool:kmh" znaci ako stavis "true" onda ce ti uzimati po km/h,a ako stavis "false" uzimat ce mp/h
Citat: SlicK poslato Februar 03, 2011, 13:16:42 POSLE PODNE
Citat: eXtreme poslato Februar 03, 2011, 12:10:08 POSLE PODNE
Citat: SlicK poslato Februar 02, 2011, 22:51:02 POSLE PODNE
//uzima igracevu brzinu
stock GetPlayerSpeed(playerid,bool:kmh)
{
new Float:Vx,Float:Vy,Float:Vz,Float:R;
if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Vx,Vy,Vz); else GetPlayerVelocity(playerid,Vx,Vy,Vz);
R = floatsqroot(floatabs(floatpower(Vx + Vy + Vz,2)));
return kmh?floatround(R * 100 * 1.61):floatround(R * 100);
}
Mozes li mi pojasniti ovo
bool:kmh ???
Mislim da ovo nije tvoje... A pise: U ovom topiku možete staviti vaše korisne skripte i kodove (ne komande). ali lepo je sto si stavio
"bool:kmh" znaci ako stavis "true" onda ce ti uzimati po km/h,a ako stavis "false" uzimat ce mp/h
Ne nego on misli da to nije tvoje jer pise kilometers per hour
Citat: Lukaâ,,¢ poslato Februar 13, 2011, 00:01:01 PRE PODNE
Evo napravio sam getstr macro. Isti princip kao getarg, samo što će izvući string u neku var.
#define getstr(%0,%1); { for(new _x=0; _x < sizeof(%1); _x++) { %1[_x] = getarg(%0, _x); } }
Primjer:
stock mojafunkcija(...)
{
new string[128];
getstr(6, string);
printf("argument broj 6 = %s", string);
return 1;
}
Probao sam neradi :o
Evo napravio sam nesto za loop sad neznam da li radi :-\
#define loop(%0,%1) for(new %1; %1 < %0; %1++)
Koriscenje:
loop(MAX_PLAYERS,i)
{
Ban(i);
}
Veoma lep primer :)
Sta je sad ovo:
Da li vam je lakse loop(MAX_PLAYERS ili MAX_HOUSE itd.,i)
ili
for(new i = 0; i < MAX_PLAYERS ili MAX_HOUSE itd.; i++)
???
Po mnogima su hydre najbolji avioni, najbrzi... jedina mana im je mozda sto mogu da pucaju i tako prave veliki DM na serveru
Citatpublic OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(IsPlayerInAnyVehicle(playerid))
{
new
vid = GetPlayerVehicleID(playerid);
if(GetVehicleModel(vid) == 520 && newkeys & 1)
SetPlayerHealth(playerid, 0;
}
return 1;
}
Ako ubacite ovo, i puknete hydrom server ce vas automatski ubiti tj postavice vam HP na 0, sto znaci da mozete da uzivate u ogromnoj brzini hydre na vasem serveru, a da ne brinete da ce biti deathmatcha :D
Ovo vam nece raditi.
Jel ti znas sta si uradio i sta za cega koji callback sluzi?
Ovaj public proverava koje si dugme na tastaturi ili na misu kliknuo, a ovde stoji samo ako je igrac u vozilu, sto znaci da ces umreti kad udjes u vozilo, a ne kad pucas iz hidre.
Da bi vam to radilo morate ovo uraditi:
// PRESSED(keys)
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0))
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(IsPlayerInAnyVehicle(playerid))
{
new
vid = GetPlayerVehicleID(playerid);
if(GetVehicleModel(vid) == 520 && PRESSED(KEY_FIRE))
{
SetPlayerHealth(playerid, 0;
SCM(playerid,0xFFFFFFFF,"Nesmes pucati iz Hidre, bices ubijen!");
}
}
return 1;
}[/code
Haha, ove prosle su bezveze, meni je bolja ova( Naime, s ovom skriptom ako neko opali, avion ce se srusiti xD ):
Pod OnPlayerKeyStateChange dodate ovo:
if(IsPlayerInAnyVehicle(playerid))
{
new Float:x, Float:y, Float:z, Float:hp;
new v = GetPlayerVehicleID(playerid);
if(GetVehicleModel(v) == 520)
{
if((newkeys == 4))
{
GetPlayerVelocity(playerid,x,y,z);
SetPlayerVelocity(playerid,x,y,z-20);
GetVehicleHealth(v,hp);
SetVehicleHealth(v,100);
SendClientMessage(playerid,0xff0000,"OBOREN!{FFFFFF} Opucao si te su te radari otkrili i srusili!");
}
}
}
JackAss:
Gresis.
testirao sam, i umres samo kad puknes iz aviona ne kada udjes u njega :)
Citat: Gotti747 poslato Februar 23, 2011, 11:00:16 PRE PODNE
JackAss:
Gresis.
testirao sam, i umres samo kad puknes iz aviona ne kada udjes u njega :)
Pa u tome i jeste fora.. lol
Evo nesto gdje s jednom define funkcijom mjenjate verziju moda, ugl skuzit cete kako radi :)
Prvo morate definirati "Verzija"
#define Verzija"1.0" //Ovo 1.0 mjenjate verziju gamemoda
Onda recimo pod OnGameModeInit dodate nesto ovakvo
SendRconCommand("hostname Moj Ruzni server V"Verzija"");
Ovako vam nitko nemoze promjeniti ime servera, jer je to "upucano" u gamemode i ako netko promjeni nakon 5 sec se vrati na staro, usput dodaje se ovo "VERZIJA"
Na kraju to vam izadje ovako
Ime servera: Moj Ruzni server V 1.0
SetGameModeText("LoL "Verzija"");
Evo onaj text "Mode" sto pise u SAMP klijentu
Text( playerid, "~w~Dobrodosli na Moj rzni server~n~~g~~h~V "Verzija"",6) && (CreateInfo(playerid));
(ovako sam ja sebi napravio sam, vi se snadjite :) )
I sad ce vam na pocetku izaci Dobrodosli na Moj ruzni server V1.0
Ovo je korisna komanda (naravno tko nema u GM makar većina ima) Clearchat - ovo je dobro pogotovo za neke nove koji neznaju da ovo postoji :)
1. NaÄ'ite callback
public OnPlayerCommandText(playerid, cmdtext[])
2. Ispod njega dodajte sljedeću komandu
if(strcmp(cmd, "/cls", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] >= 1)
{
for(new i = 0; i <= 200; i++)
{
SendClientMessageToAll(COLOR_RED," ");
}
GetPlayerName(playerid, sendername, sizeof(sendername));
SendClientMessageToAll(COLOR_LIGHTGREEN, "");
format(string, sizeof(string), "Admin %s je oÄistio chat!", sendername);
SendClientMessageToAll(COLOR_LIGHTGREEN, string);
return 1; }
}
I evo joÅ¡ neka za poÄetnike kada vam onako sporo trÄi lik kao curica stavite ovaj kod da bi vam trÄao normalno tj. poznatije kao "CJ trÄanje"
NaÄ'ite callback
public OnGameModeInit()
I ispod njega dodajte
UsePlayerPedAnims();
Citat: Hutch Dano poslato Mart 19, 2011, 15:29:06 POSLE PODNE
Ovo je korisna komanda (naravno tko nema u GM makar većina ima) Clearchat - ovo je dobro pogotovo za neke nove koji neznaju da ovo postoji :)
1. NaÄ'ite callback
public OnPlayerCommandText(playerid, cmdtext[])
2. Ispod njega dodajte sljedeću komandu
if(strcmp(cmd, "/cls", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] >= 1)
{
for(new i = 0; i <= 200; i++)
{
SendClientMessageToAll(COLOR_RED," ");
}
GetPlayerName(playerid, sendername, sizeof(sendername));
SendClientMessageToAll(COLOR_LIGHTGREEN, "");
format(string, sizeof(string), "Admin %s je oÄistio chat!", sendername);
SendClientMessageToAll(COLOR_LIGHTGREEN, string);
return 1; }
}
I evo joÅ¡ neka za poÄetnike kada vam onako sporo trÄi lik kao curica stavite ovaj kod da bi vam trÄao normalno tj. poznatije kao "CJ trÄanje"
NaÄ'ite callback
public OnGameModeInit()
I ispod njega dodajte
UsePlayerPedAnims();
Svejedno mogao si koristiti posle pAdmin
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll salje poruku svima na serveru u ovom slucaju praznu tako da ce ocistiti chat ...:P
CitatSvejedno mogao si koristiti posle pAdmin
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll(COLOR_GREY," ");
SendClientMessageToAll salje poruku svima na serveru u ovom slucaju praznu tako da ce ocistiti chat ...:P
Ne kužim , hoćeš reć da moj kod nevalja?
@[CE]Don_Nxidza, nemozes pricat nista kad je bolje od tebe napravio i efikasnije..
Zar nije jednostavnije napravit ovako nesto
#define ClearChat(%1,%2) for(new c; c < %2; c++) SendClientMessage(%1,0xFFFFFFAA," ")
CMD:brisemdupe(playerid, params[])
{
ClearChat(playerid, 15);
return 1;
}
Citat: Vilko | ♦ ♣ ♥ ♠» poslato Mart 20, 2011, 15:32:49 POSLE PODNE
Zar nije jednostavnije napravit ovako nesto
#define ClearChat(%1,%2) for(new c; c < %2; c++) SendClientMessage(%1,0xFFFFFFAA," ")
CMD:brisemdupe(playerid, params[])
{
ClearChat(playerid, 15);
return 1;
}
Pa dobro , ja sam sebi složio onako. Kao da je meni bitno , glavno da komanda radi za admine i da briÅ¡e s uÄinkovitošću.
Citat: Hutch Dano poslato Mart 20, 2011, 15:35:41 POSLE PODNE
Citat: Vilko | ♦ ♣ ♥ ♠» poslato Mart 20, 2011, 15:32:49 POSLE PODNE
Zar nije jednostavnije napravit ovako nesto
#define ClearChat(%1,%2) for(new c; c < %2; c++) SendClientMessage(%1,0xFFFFFFAA," ")
CMD:brisemdupe(playerid, params[])
{
ClearChat(playerid, 15);
return 1;
}
Pa dobro , ja sam sebi složio onako. Kao da je meni bitno , glavno da komanda radi za admine i da briÅ¡e s uÄinkovitošću.
Pa dobro ja ti samo govorim brzi i jednostavniji nacin!
Izbrisani bespotrebni postovi sljedeći put dijelim bannove.
Opomena za:joXy,Hutch Dano,eXtreme.
Ovdje se samo postaju korisne skripte/kodovi nema rasprava i svaÄ'e.
stock Freeze(playerid,on=0)
{
switch(on)
{
case 0: TogglePlayerControllable(playerid,0);
case 1: TogglePlayerControllable(playerid,1);
}
}
Sa 0 se unfreezuje, sa 1 freezuje
Source - http://wiki.sa-mp.com/wiki/Stocks
Citat: Luka P. poslato April 04, 2011, 14:49:39 POSLE PODNE
Gl.upost tko god da je to pisao, jer se to može napraviti puno jednostavnije i brže.
#define Freeze(%0,%1) TogglePlayerControllable((%0),(!(%1)))
Upravu si... Ima nekoliko stranica iza isto ovo... I ovo je puno brze i efikasnije :-\
a šta Fali TogglePlayerControllable?
Citat: bake_pg poslato April 04, 2011, 15:47:19 POSLE PODNE
a šta Fali TogglePlayerControllable?
Nefali nista ali je onako bolje i brze ???
Citat: $--L84S--$ poslato April 04, 2011, 16:48:44 POSLE PODNE
Citat: bake_pg poslato April 04, 2011, 15:47:19 POSLE PODNE
a šta Fali TogglePlayerControllable?
Nefali nista ali je onako bolje i brze ???
Nije brze, ali je bolje, tj. bolje je za korisnika da nemora pisati vise..
stock NovaPozicija(playerid,bool:WithVehicle,Float:x,Float:y,Float:z,Float:rot) //stock SetPlayerPosEx(playerid,bool:WithVehicle,Float:x,Float:y,Float:z,Float:rot)
{
//by BloodMaster
if(WithVehicle == true && IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
new bu = GetPlayerVehicleID(playerid);
SetVehiclePos(bu,x,y,z);
SetVehicleZAngle(bu,rot);
PutPlayerInVehicle(playerid,bu,0);
return 1;
}
else
{
SetPlayerPos(playerid,x,y,z);
SetPlayerFacingAngle(playerid,rot);
return 1;
}
return 1;
}
Evo da razjasnim:
playerid - Id Igraca koji se teleporta
WithVehicle - Ukoliko je igrac u vozilu, dali ce se i to vozilo portati (true = hoce, false = nece)
x,y,z - Koordinate porta
rot - Rotacija
NPR:
NovaPozicija(playerid,true,5000.56,1005.55,111.5,90);
Ako nije jasno, pitajte na PM pa cu razjasnit ovdje....
Citat: Luka P. poslato April 04, 2011, 14:49:39 POSLE PODNE
Gl.upost tko god da je to pisao, jer se to može napraviti puno jednostavnije i brže.
#define Freeze(%0,%1) TogglePlayerControllable((%0),(!(%1)))
Pa moze i onako
Citat: Luka P. poslato April 04, 2011, 22:07:23 POSLE PODNE
Pa baš i nije to, to je obrnuta funkcija od TogglePlayerControllable. Kada bi željeli da imamo kraće za napisati, onda bi samo koristili:
#define Freeze TogglePlayerControllable
Nisi me skuzio izgleda, bolje je za korisnika i sve, ALI je losije optimizirano, tj. naravno da je bolja default funkcija (ne-editana bi se reklo) nego definat za drugu funkciju. Ne mislim da je losije optimizirano u stilu da stavis string sa 1024 celija, nego jednostavno da je malo losije optimizirano.
Evo jos jedna od mene:
stock SendClientMessageInRangeOfPoint(str[],boja,radius,Float:x,Float:y,Float:z)
{
//by BloodMaster
new players = GetMaxPlayers();
for(new i=0; i<players; i++)
{
if(IsPlayerInRangeOfPoint(i,radius,x,y,z) SendClientMessage(i,boja,str);
}
return 1;
}
Naime, ova funkcija ce poslati poruku svima koju su na odredjenoj koordinati...
str[] - Sto ce pisati
boja - Boja texta
radius - do koje udaljenosti od xyz ce se slati poruka
x,y,z - Koordinate
Evo primjer:
SendClientMessageInRangeOfPoint("Dobar dan, vi ste dosli na poziciju",COLOR_WHITE,5,1115.5,541.44,43.515);
ps- Ovo sam ja bubno koordinate, vi stavite svoje i da, onaj stock dodajete na kraj moda :)
Imam jedno pitanje za tebe...
Gde si pokupio ovaj mutavi str[]
Znam da moze tako al svaka tvoja korisna ima ovo str[], bilo bi logicnije text[]
To moze da zbuni mnoge...
Skracenica od string...
Ovo sam vec negde video ProxDetectorEx (http://forum.sa-mp.com/showpost.php?p=1044953&postcount=1634)
Evo nesto kao /me komanda
Prvo morate imati ovo:
stock SendClientMessageInRangeOfPoint(str[],boja,radius,Float:x,Float:y,Float:z)
{
//by BloodMaster
new players = GetMaxPlayers();
for(new i=0; i<players i++)
{
if(IsPlayerInRangeOfPoint(i,radius,x,y,z) SendClientMessage(i,boja,str);
}
return 1;
}
A zatim ovo:
stock PlayerDoing(playerid,text[]/*Pusa eXtreme*/)
{
//by BloodMaster
if(!IsPlayerConnected(playerid)) return 1;
new ime[20],string[128],Float:x,Float:y,Float:z;
GetPlayerName(playerid,ime,20);
format(string,sizeof string,"* %s %s",ime,text);
GetPlayerPos(playerid,x,y,z);
SendClientMessageInRangeOfPoint(string,C623CF,15,x,y,z);
return 1;
}
Evo jedan primjer:
PlayerDoing(playerid,"ulazi u vozilo."); //To npr dodate u OnPlayerEnterVehicle
i u igri ce pisati ovako:
*Netko_Netkic ulazi u vozilo.
Nece naravno pisati netko netkic vec ime koje taj igrac koristi... Kul, ha?
Citat: Luka P. poslato April 13, 2011, 20:42:28 POSLE PODNE
Brže je, ne da mi se sada testirati, ali je oÄito da je brže kada ne pozivaÅ¡ funkciju u svakoj iteraciji for-loopa.
Istina, uopce nisam obracao paznju. Nemoras ni testat, tako je.
Hvala ti
Evo jedna jednostavna skripta koju sam sada napravio. Za loto :)
#include "a_samp"
#include "foreach"
#define ScmToAll SendClientMessageToAll
#define zuta 0xFFFF00FF
// NAVIGACIJA
#define LOTO_SAT 18 // 18 sati, popodne > [ 0 - 24 ]
#define LOTO_MINUTA 0 // minuta > [ 0 - 59 ]
#define LOTO_SEC 0 // sekunda > [ 0 - 59 ]
#define MAX_DOBITAK 15000000 // MAXIMALNO MOGUCE DOBIT, $15,000,000
public OnGameModeInit()
{
SetTimer("Timer",1000,1);
return true;
}
forward Timer();
public Timer()
{
new
Sati,
Minute,
Sec,
string[128]
;
gettime(Sati,Minute,Sec);
foreach(Player,i)
{
if(Sati == LOTO_SAT && Minute == LOTO_MINUTA && Sec == LOTO_SEC)
{
SetPVarInt(i,"LotoID",random(MAX_PLAYERS));
if(IsPlayerConnected(GetPVarInt(i,"LotoID")))
{
OnPlayerWinLoto();
}
else
{
format(string, sizeof string,"LOTO: Danasnji izvuceni ID je '%d'. Nitko nije osvojio loto.",GetPVarInt(i,"LotoID"));
ScmToAll(zuta,string);
}
}
}
return true;
}
stock OnPlayerWinLoto()
{
new
string[128]
;
foreach(Player,i)
{
SetPVarInt(i,"LotoDobitak",random(MAX_DOBITAK));
format(string, sizeof string,"LOTO: %s[%d] je osvojio na lutriji $%d. Cestitamo.",GetName(GetPVarInt(i,"LotoID")),GetPVarInt(i,"LotoID"),GetPVarInt(i,"LotoDobitak"));
ScmToAll(zuta,string);
GivePlayerMoney(GetPVarInt(i,"LotoID"),GetPVarInt(i,"LotoDobitak"));
format(string, sizeof string,"~g~CESTITAMO~n~w~Osvojili ste loto od~n~~g~$%d",GetPVarInt(i,"LotoDobitak"));
GameTextForPlayer(GetPVarInt(i,"LotoID"),string,5000,4);
}
return true;
}
stock GetName(id)
{
new
IME[MAX_PLAYER_NAME]
;
GetPlayerName(id, IME, MAX_PLAYER_NAME);
return IME;
}
Citat: [Banana$]ReadMe.txt poslato April 26, 2011, 16:23:24 POSLE PODNE
Dakle ja radim Wild Wild West OWAA, gdje nece biti NameTagova,
p
Jednostavno ispod OnPlayerSpawn stavite:
for(new i = 0; i < MAX_PLAYERS; i++) ShowPlayerNameTagForPlayer(playerid, i, false);
stock IsAnyPlayerInVehicle(vehicleid)
{
for(new i=0;i<MAX_VEHICLES;i++) if(IsPlayerInVehicle(i,vehicleid)) return 1;
return 0;
}
- Provjerava dali je bilo koji igrac u vozilu vehicleid
netacan stock, nije za max_vehicles, nego za max_players
IsPlayerInVehicle (http://wiki.sa-mp.com/wiki/IsPlayerInVehicle)
Pravilno:
#include <foreach>
stock IsAnyPlayerInVehicle(vehicleid)
{
foreach(Player, i) if(IsPlayerInVehicle(i, vehicleid)) return 1;
return 0;
}
zasto foreach? zbog brzeg loop-a
Ops, fulo sam. Hvala na ispravci. Koristim ja inace foreach ali ovdje nestavljam s njim jer ga nekoriste svi a zelim da svi mogu koristiti.
Evo jedne funkcije koju možete koristiti kao loop poruku...
Spam(playerid,broj_poruka,poruka[])
{
#define SCM(%0,%1,%2) SendClientMessage(%0,%1,%2)
for (new i = 0; i < broj_poruka; i++)
{
static
LEN = 1;
new
string[64];
format(string, sizeof string, "%s - %d",poruka,LEN);
SCM(playerid, 0xFFFFFF, string);
printf("%d,%s",LEN,poruka);
LEN++;
}
return true;
}
evo jedne funkcije koju sam izvadio iz moda koju editujem
Naime, s tom funkcijom mozete stavljati rotaciju igraca, znaci ova funkcija se zove SetPlayerPos2 i koristi parametre: X,Y,Z,Rot
Znaci s ovim mozete u svojoj funkcij za teleport igraca koristit i onaj parametar zadnji iz savedpostions zvan rotacija :D
evo
SetPlayerPos2(playerid, Float:X, Float:Y, Float:Z, Float:Ang, text[])
{
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,X,Y,Z);
SetPlayerFacingAngle(playerid, Ang);
SetCameraBehindPlayer(playerid);
new cmdtext[256];
strmid(cmdtext,text,1,strlen(text));
if(!tele[playerid]){
tele[playerid] = 1;
SetTimerEx("Tele", 3000, 0, "d", playerid);
}
ResetPlayerWeapons(playerid);
SetPlayerWorldBounds(playerid, 6666.6666, -6666.6666, 6666.6666, -6666.6666);
}
ostalo:
na vrh
forward Tele(playerid);
ispod ove funkcije
public Tele(playerid) tele[playerid] = 0;
Mislim da bi to trebalo biti sve, ako jos nesto fali recite (nije moja funkcija!)
stock Port(playerid, Float:x, Float:y, Float:z)
{
new
Float:ox,
Float:oy,
Float:oz;
GetPlayerPos(playerid, ox, oy, oz);
printf("x: %f, y: %f, z: %f\nox: %f, oy: %f, oz: %f\n\trez: %f", x, y, z, ox, oy, oz, (((ox + oy + oz) >= (x + y + z)) ? ((ox + oy + oz) - (x + y + z)) : ((x + y + z) - (ox + oy + oz))));
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SetPlayerPos(playerid, x, y, z);
SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z);
return true;
}
Opis
Ovo je koda koju sam poslao za prijavu u CH developer team.
Ja sam licno napravio kodu i dosta je brza.
Sta ona radi? Ona portuje igraca na odredjenu poziciju ali prethodno uzima njegovu staru poziciju i printa...
PS.
Ukoliko posaljete moju kodu Zoranu kao svoju, onda ste dobili veliki - od mene
Zahvale
Luka P.
/* stock */ PlayerToPlayer(playerid,playerid2,Float:distance)
{
if(!IsPlayerConnected(playerid) || !IsPlayerConnected(playerid2)) return 0;
new Float:x,Float:y,Float:z; GetPlayerPos(playerid2,x,y,z);
if(IsPlayerInRangeOfPoint(playerid,distance,x,y,z)) return 1;
else return 0;
}
Provjerava jeli playerid u blizini playerid2, u okrugu distance
Edit: Hvala eXtreme-u na ispravci
Citat: [AG] BloodMaster poslato Maj 20, 2011, 21:36:24 POSLE PODNE
/* stock */ PlayerToPlayer(playerid,playerid2,distance)
{
if(!IsPlayerConnected(playerid) || !IsPlayerConnected(playerid2)) return 0;
new Float:x,Float:y,Float:z; GetPlayerPos(playerid2,x,y,z);
if(IsPlayerInRangeOfPoint(playerid,distance,x,y,z)) return 1;
else return 0;
}
Provjerava jeli playerid u blizini playerid2, u okrugu distance
/* stock */ PlayerToPlayer(playerid,playerid2,Float:distance)
{
if(!IsPlayerConnected(playerid) || !IsPlayerConnected(playerid2)) return 0;
new Float:x,Float:y,Float:z; GetPlayerPos(playerid2,x,y,z);
if(IsPlayerInRangeOfPoint(playerid,distance,x,y,z)) return 1;
else return 0;
}
Evo dosao sam na jednu lijepu ideju. Vidim da svi koriste neke streamere i dobro sam pregledao neke. I vidim da vecina radi na IsPlayerInRangeOfPoint i CreatePlayerObject funkcijama a CreateObject se ne pojavljuje.
Zato sam svima odlucio skratiti muke i napraviti ovo:
#if defined CreateDynamicObject
#undef CreateObject
#define CreateObject CreateDynamicObject
#else if defined CreateStreamObject
#undef CreateObject
#define CreateObject CreateStreamObject
#endif
P.S. Ovo ce raditi samo ako koristite Incognito-v streamer ili MidoStreamer
EDIT: E da, zaboravio napisati cemu sluze xD. Naime, ukoliko koristite CreateDynamicObject, a imate vec puno CreateObject, necete ove CreateObject morati mjenjati, oni ce automatski biti streamani...
EDIT2: Sad mi se ovo cini beskorisno, zaboravio sam na CTRL + H xD
Citat: BloadEDIT2: Sad mi se ovo cini beskorisno, zaboravio sam na CTRL + H xD
Samo jedno pitanje za tebe:
Citat: [AG] BloodMaster poslato Maj 20, 2011, 22:46:21 POSLE PODNE
Odes na neki konverter...
primjer: http://gtamap.delux-host.com/converter/ (http://gtamap.delux-host.com/converter/)
Citat: eXtreme poslato Maj 20, 2011, 22:45:04 POSLE PODNE
(http://slike.hr/slike/s/screenshot1_1fddf.png)
CTRL + H
Netocno, CreateObject i CreateDynamicObject imaju razlicite argumente...
Citat: [AG] eXtreme poslato Maj 30, 2011, 22:15:08 POSLE PODNE
Citat: BloadEDIT2: Sad mi se ovo cini beskorisno, zaboravio sam na CTRL + H xD
Samo jedno pitanje za tebe:
Citat: [AG] BloodMaster poslato Maj 20, 2011, 22:46:21 POSLE PODNE
Odes na neki konverter...
primjer: http://gtamap.delux-host.com/converter/ (http://gtamap.delux-host.com/converter/)
Citat: eXtreme poslato Maj 20, 2011, 22:45:04 POSLE PODNE
http://slike.hr/slike/s/screenshot1_1fddf.png (http://slike.hr/slike/s/screenshot1_1fddf.png)
CTRL + H
Netocno, CreateObject i CreateDynamicObject imaju razlicite argumente...
To sam ja bio fulo
Znam zato sam i to stavio, CreateDynamicObject ima mogucnost raznih argumenata, ako nestavis naprimer distancu on ce staviti sam... Tako da je moguce...
Citat: [AG] eXtreme poslato Maj 31, 2011, 13:36:18 POSLE PODNE
Znam zato sam i to stavio, CreateDynamicObject ima mogucnost raznih argumenata, ako nestavis naprimer distancu on ce staviti sam... Tako da je moguce...
svejedno je bolje otici na ConvertFFS i konvertat u CreateDynamicObject jer koristi drugacije parametre
Citat: [AG] System32 poslato Maj 31, 2011, 19:16:58 POSLE PODNE
Citat: [AG] eXtreme poslato Maj 31, 2011, 13:36:18 POSLE PODNE
Znam zato sam i to stavio, CreateDynamicObject ima mogucnost raznih argumenata, ako nestavis naprimer distancu on ce staviti sam... Tako da je moguce...
svejedno je bolje otici na ConvertFFS i konvertat u CreateDynamicObject jer koristi drugacije parametre
Sto se mucis s tim online konverterima.
http://wiki.sa-mp.com/wiki/Multi_Object_Converter (http://wiki.sa-mp.com/wiki/Multi_Object_Converter)
Citat: [AG] eXtreme poslato Maj 16, 2011, 23:33:37 POSLE PODNE
stock Port(playerid, Float:x, Float:y, Float:z)
{
new
Float:ox,
Float:oy,
Float:oz;
GetPlayerPos(playerid, ox, oy, oz);
printf("x: %f, y: %f, z: %f\nox: %f, oy: %f, oz: %f\n\trez: %f", x, y, z, ox, oy, oz, (((ox + oy + oz) >= (x + y + z)) ? ((ox + oy + oz) - (x + y + z)) : ((x + y + z) - (ox + oy + oz))));
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SetPlayerPos(playerid, x, y, z);
SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z);
return true;
}
sto tacno predstavlja "rez"? je li razliku, tj predjeni put?
ako "rez" pokazuje udaljenost izmedju stare i nove pozicije, ova funkcija je totalno pogresna
jesi je uopste testirao?
cao, evo jedne "funkcije" odnosno skripte s kojom provjerava ako igrac pise sa upaljenim caps lockom i ako napise nesto u text boxu velik slovima u chatu ce to pisati malim
Dodajte ovo pod OnPlayerText
for(new i=0; i<MAX_WORDS; i++)
{
if(IsPlayerConnected(i))
{
while (text[++i])
{
if ('A' <= text[i] <= 'Z') text[i] |= 0x20;
}
}
}
bolje da ga napravis kao stock i pozivas gdje treba, tako da ne moras par puta kopirati isti kod pod OnPlayerText , /b, kao i ostale chat komande koju vecina servera ima
Citat: [BU] Gigi_Falcone poslato Jun 03, 2011, 11:23:11 PRE PODNE
bolje da ga napravis kao stock i pozivas gdje treba, tako da ne moras par puta kopirati isti kod pod OnPlayerText , /b, kao i ostale chat komande koju vecina servera ima
jel to nesto vako?
stock CapsLock()
{
for(new i=0; i<MAX_WORDS; i++)
{
if(IsPlayerConnected(i))
{
while (text[++i])
{
if ('A' <= text<i> <= 'Z') text<i> |= 0x20;
}
}
}
}
xD ako nevalja reci!
stock CapsLock(text[])
{
for(new i=0; i<MAX_WORDS; i++)
{
while (text[++i])
{
if ('A' <= text <= 'Z') text |= 0x20;
}
}
}
ahaa, ok tnx
Sto ne treba ici i IsPlayerConnected u loopu?
Citat: [AG] Paradox poslato Jun 03, 2011, 12:22:00 POSLE PODNE
Yep, that's it. :)
Aj have litle problem ju not rid rules
Procitaj glavna pravila foruma (Mada znam da si ih vec citao) ... Brisem post!
Citat: [AG] System32 poslato Jun 03, 2011, 12:55:17 POSLE PODNE
ahaa, ok tnx
Sto ne treba ici i IsPlayerConnected u loopu?
zato sto loopujes kroz slova a ne kroz igrace
Citat: [AG] System32 poslato Jun 03, 2011, 12:55:17 POSLE PODNE
ahaa, ok tnx
Sto ne treba ici i IsPlayerConnected u loopu?
A sta bi ti? IsWordConnected??
Citat: [BU] Gigi_Falcone poslato Jun 02, 2011, 16:12:23 POSLE PODNE
Citat: [AG] eXtreme poslato Maj 16, 2011, 23:33:37 POSLE PODNE
stock Port(playerid, Float:x, Float:y, Float:z)
{
new
Float:ox,
Float:oy,
Float:oz;
GetPlayerPos(playerid, ox, oy, oz);
printf("x: %f, y: %f, z: %f\nox: %f, oy: %f, oz: %f\n\trez: %f", x, y, z, ox, oy, oz, (((ox + oy + oz) >= (x + y + z)) ? ((ox + oy + oz) - (x + y + z)) : ((x + y + z) - (ox + oy + oz))));
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SetPlayerPos(playerid, x, y, z);
SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z);
return true;
}
sto tacno predstavlja "rez"? je li razliku, tj predjeni put?
ako "rez" pokazuje udaljenost izmedju stare i nove pozicije, ova funkcija je totalno pogresna
jesi je uopste testirao?
Tek sad vidim ovo, ajde napravi fix da vidim kako bi ti to uradio... Je pokazuje udaljenost od stare pozicije i nove pozicije i radi dobro :-\ Ako treba video da ti snimim...
Edit: Jos nisi napravio?
evo jedna funkcija s kojom netrebate vise stavljati u komandi recimo new pName[MAX_PLAYERS]; nego samo u fformatu dodate GetName(playerid ili recimo ako ste definirali za nekog drugog igraca, npr.id)
Funkcija by Y_Less ;)
stock GetName(playerid)
{
new
pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
return pName;
}
Kad smo vec kod tog, evo jos jedna dobra:
Float:GetHealth(playerid) { new Float:h; GetPlayerHealth(playerid,h); return h; }
jednostavno, returna koliko igrac ima healtha...
Evo i GivePlayerHealth:
#define GivePlayerHealth(%0, %1) SetPlayerHealth(%0, GetHealth(playerid)+%1)
Citat: _eXtreme_ poslato Jun 04, 2011, 10:22:18 PRE PODNE
Citat: [BU] Gigi_Falcone poslato Jun 02, 2011, 16:12:23 POSLE PODNE
Citat: [AG] eXtreme poslato Maj 16, 2011, 23:33:37 POSLE PODNE
stock Port(playerid, Float:x, Float:y, Float:z)
{
new
Float:ox,
Float:oy,
Float:oz;
GetPlayerPos(playerid, ox, oy, oz);
printf("x: %f, y: %f, z: %f\nox: %f, oy: %f, oz: %f\n\trez: %f", x, y, z, ox, oy, oz, (((ox + oy + oz) >= (x + y + z)) ? ((ox + oy + oz) - (x + y + z)) : ((x + y + z) - (ox + oy + oz))));
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SetPlayerPos(playerid, x, y, z);
SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z);
return true;
}
sto tacno predstavlja "rez"? je li razliku, tj predjeni put?
ako "rez" pokazuje udaljenost izmedju stare i nove pozicije, ova funkcija je totalno pogresna
jesi je uopste testirao?
Tek sad vidim ovo, ajde napravi fix da vidim kako bi ti to uradio... Je pokazuje udaljenost od stare pozicije i nove pozicije i radi dobro :-\ Ako treba video da ti snimim...
Edit: Jos nisi napravio?
sad sam vidio tvoj odgovor, do 10 cu postat moju funkciju, sada nesto radim
btw postacu i cmd sa kojom sam testirao ovo tvoje i vidjeces da nije dobro...
Ok izgleda da treba da napravim video evo stize za pola sata...
Evo objasnjenje zasto tvoja skripta ne radi:
http://pastebin.com/PjxSyxJ3
Sacuvaj ovaj kod kao filterskriptu, u njemu je tvoja modifikovana funkcija da ne prikazuje radnju u konzoli nego direktno igracu, ostalo nista nije dirano
Freezuj se sa komandom /freeze a zatim se portuj po navedenom sablonu sa komandom /port [0 do 8]
(http://www.dodaj.rs/f/Z/vo/4EADtaPn/dokaz.png)
Portuj se ovako ( 2 puta u 0 da bi se resetovala razlika):
0,8,1,0 ( na slici predstavlja O,H,A,O)
Portom od 0 do 8 ima 100.0 jedinica, iz 8 do 1 ima isto 100,0 jedinica, dok iz 1 u 0 po tvojoj skripti ima 200.0 jedinica, sto matematicki nije tacno
Racunanje hipotenuze kod pravouglog trougla se radi pomocu Pitagorine teoreme:
(http://upload.wikimedia.org/math/5/6/a/56a04a849a1772efc82b68e21880cef4.png)
Odnosno u ovom slucaju, udaljenost izmedju 1 i 0 bi trebala biti 141,4213562373095
Takodje kada se portujes iz 6 u 4 (na slici iz F u D) po tvojoj funkciji pise da je 0.0, dok udaljenost treba da bude isto 141,4213562373095
Ok, sad napravi fix da svi na forumu vide kako treba?
Eto:
stock Port(playerid,Float:nX,Float:nY,Float:nZ)
{
new Float:oX,Float:oY,Float:oZ;//old position
new Float:tX,Float:tY,Float:tZ,Float:tDist;//temporary position
new string[128];
GetPlayerPos(playerid,oX,oY,oZ);
tX = nX - oX;
tY = nY - oY;
tZ = nZ - oZ;
tDist = floatsqroot(floatpower(tX,2) + floatpower(tY,2) + floatpower(tZ,2));
SetPlayerPos(playerid, nX, nY, nZ);
format(string,sizeof(string),"x: %f, y: %f, z: %f | ox: %f, oy: %f, oz: %f | trez: %f",nX,nY,nZ,oX,oY,oZ,tDist);
SendClientMessage(playerid,-1,string);
return 1;
}
Moze i krace da se napise, al ovako je jasnije za procitati
Poz.
Evo nešto od mene. :P
Npr.
kada radite ovo:
#define SCM SendClientMessage
Većina misli da je to jedino šta možeš napravit da skratiš kao tu funkciju,ali ti to možeš i za neke druge funkcije.
Npr.
#define STP SetPlayerPos
Nadam se da ste me skužili šta hoću reć. :P
zbog cega skracujete funkcije tako?
pa nije valjda toliko tesko otkucati 5 slova vise? :)
Citat: [BU] Gigi_Falcone poslato Jun 07, 2011, 00:08:37 PRE PODNE
zbog cega skracujete funkcije tako?
pa nije valjda toliko tesko otkucati 5 slova vise? :)
Cool mi je tako , jer kad mi doÄ'e frend kod mene i vidi GF pa moj pa se uživi.. xD :P
Citat: [BU] Gigi_Falcone poslato Jun 06, 2011, 21:05:23 POSLE PODNE
Eto:
stock Port(playerid,Float:nX,Float:nY,Float:nZ)
{
new Float:oX,Float:oY,Float:oZ;//old position
new Float:tX,Float:tY,Float:tZ,Float:tDist;//temporary position
new string[128];
GetPlayerPos(playerid,oX,oY,oZ);
tX = nX - oX;
tY = nY - oY;
tZ = nZ - oZ;
tDist = floatsqroot(floatpower(tX,2) + floatpower(tY,2) + floatpower(tZ,2));
SetPlayerPos(playerid, nX, nY, nZ);
format(string,sizeof(string),"x: %f, y: %f, z: %f | ox: %f, oy: %f, oz: %f | trez: %f",nX,nY,nZ,oX,oY,oZ,tDist);
SendClientMessage(playerid,-1,string);
return 1;
}
Moze i krace da se napise, al ovako je jasnije za procitati
Super svaka cast! Samo malo da uredis i bilo bi to to... Nisam se setio wikija niti icega ali nema veze...
Evo da malo oživim topic ;D
3 Macro funkcije s kojima si skratite vrijeme...
// by [H]265
#define Sec(%0) (( %0 ) * ( 1000 ))
#define Min(%0) (( %0 ) * ( 1000*60 ))
#define Sati(%0) (( %0 ) * ( 1000*60*60 ))
npr.
SetTimerEx(...,Min(5),false...
Uživajte
u to brate ja se bas mucim koliko je jedan sat milisekundi xS
Citat: [H]265 poslato Jun 08, 2011, 15:23:37 POSLE PODNE
Evo da malo oživim topic ;D
3 Macro funkcije s kojima si skratite vrijeme...
// by [H]265
#define Sec(%0) (( %0 ) * ( 1000 ))
#define Min(%0) (( %0 ) * ( 1000*60 ))
#define Sati(%0) (( %0 ) * ( 1000*60*60 ))
npr.
SetTimerEx(...,Min(5),false...
Uživajte
Super ideja, i dobro odradjeno!
Evo jedne funkcije...
#define MAX_KICKS (5)
#define SetPVarIntEx(%0,%1,%2,%3) SetPVarInt(%0, %1, GetPVarInt(%0, %1) %2 %3) // by [H]265
#define KickEx(%0) \
do \
{ \
SetPVarIntEx(%0,"pKicks",+,1); \
Kick(%0); \
} \
while(FALSE) // by[H]265
new stock
bool:FALSE = false;
KicksCheck(id) // by [H]265
{
if(GetPVarInt(id,"pKicks") >= MAX_KICKS)
{
BanEx(id,"Previse kickova");
}
return true;
}
Ispod OnPlayerConnect stavite ovako:
public OnPlayerConnect(playerid)
{
KicksCheck(playerid);
return true;
}
ZnaÄi tamo di koristite kick(playerid); sada morate koristiti Kick(playerid);
NAPOMENA: Morate staviti u svoj saving sustav da sprema pKicks varijablu kako bi nakon kicka moglo pamtiti koliko kickova imate inaÄe nemate koristi od ove funkcije...
NAPOMENA 2: Funkciju KickEx NE SMIJETE return-ati npr.
public OnPlayerConnect....
{
return KickEx(playerid);
}
razlog: macro funkcije se ne mogu return-ati!
Evo još jedna funkcija...
IsPlayerFreeFalling(playerid)
{
if(GetPlayerAnimationIndex(playerid))
{
new
animlib[32],
animname[32];
GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
GivePlayerWeapon(playerid, 46, 1);
}
return true;
}
Ako igraÄ 'pada' s neba dobit će padobran :)
Lepo ali za ovu poslednju si trebao da das zasluge bar, wikipediji.
[code]
HPROX(id,const iString[],color = 0xFFFFF, Float:Distance)
{
new
Float:Pos[4];
foreach(Player, i)
{
GetPlayerPos(id, Float:Pos[1], Float:Pos[2], Float:Pos[3]);
if(IsPlayerInRangeOfPoint(i, Float:Distance, Float:Pos[1], Float:Pos[2], Float:Pos[3]))
{
SendClientMessage(i,color,iString);
}
else return false;
}
return true;
}
U praksi...
public OnPlayerText(playerid, text[])
{
HPROX(playerid,text,0xFFFFF,15.0);
return true;
}
Parametri:
playerid - Od tog igraca ce uzeti poziciju i nju ce provoditi tj. poruka ce biti vidljiva u rangu kordinata ovog igraca...
iString - format text-a
color - boja texta
Float:Distance - Range, znaÄi neki krug vidljivosti poruke
NAPOMENA: Funkcija nije testirana.
Citat: _eXtreme_ poslato Jun 13, 2011, 17:47:16 POSLE PODNE
Lepo ali za ovu poslednju si trebao da das zasluge bar, wikipediji.
Å ta priÄaÅ¡ ti, kakve zasluge, za Å¡ta?
Onda bi trebao davati zasluge za svaku funkciju koju je SA:MP dev. ekipa kreirala zar ne?
[/code]
Da ispravim ovu BloodMasterovu funkciju, posto je donekle korisna:
Citat: [TG] BloodMaster poslato April 13, 2011, 20:20:47 POSLE PODNE
stock SendClientMessageInRangeOfPoint(str[],boja,radius,Float:x,Float:y,Float:z)
{
//by BloodMaster
new players = GetMaxPlayers();
for(new i=0; i<players i++)
{
if(IsPlayerInRangeOfPoint(i,radius,x,y,z) SendClientMessage(i,boja,str);
}
return 1;
}
Luka potpuno si u pravu u vezi GetMaxPlayers zato sto to 2 usporava brzinu cele funkcije.
Ovako je ispravno:
stock SendClientMessageInRangeOfPoint(const str[], boja, Float:radius, Float:X, Float:Y, Float:Z)
{
new players = GetMaxPlayers();
for(new i = 0; i < players; i++)
{
if(IsPlayerInRangeOfPoint(i, radius, X, Y, Z))
{
SendClientMessage(i, boja, string);
}
}
return false;
}
Greske:
radius ne Float:radius da
for(new i=0; i<players i++) ne for(new i = 0; i < players; i++) da (zaboravio si ; )
evo jedne funkcije da vam olaksa posao s teleportom s vozilom :D
isto se koristi kao SetPlayerPos odnosno ima iste parametre samo sto je funkcija SetPlayerPosWithVehicle
stock SetPlayerPosWithVehicle(playerid, Float:X, Float:Y, Float:Z)
{
new cartype = GetPlayerVehicleID(playerid);
SetPlayerPos(playerid, X, Y, Z);
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
LinkVehicleToInterior(cartype, GetPlayerInterior(playerid));
SetVehiclePos(cartype,X,Y,Z);
PutPlayerInVehicle(playerid,cartype,0);
}
}
SetPlayerPosWithVehicle(playerid, Float:X, Float:Y, Float:Z, Float:kut = 0, vw = 0, int = 0)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
new cartype = GetPlayerVehicleID(playerid);
LinkVehicleToInterior(cartype, int);
SetVehicleVirtualWorld(cartype,vw);
SetVehiclePos(cartype,X,Y,Z);
SetVehicleZAngle(cartype,kut);
new aa= GetMaxPlayers();
for(new i=0; i<aa; i++; )
{
if(IsPlayerInVehicle(i,cartype))
{
SetPlayerInterior(i,int);
SetPlayerVirtualWorld(i,vw);
}
}
return 1;
}
new cartype = GetPlayerVehicleID(playerid);
SetPlayerPos(playerid, X, Y, Z);
SetPlayerFacingAngle(playerid,kut);
SetPlayerInterior(playerid,int);
SetPlayerVirtualWorld(playerid,vw);
return 1;
}
Malo ljepse? :D
ljepse ako os int,vw itd.
2 macro funkcije:
/*
MACRO FNC - H_FNC: FNC(parametri)
by: [H]265
_______________________________
Umjesto public FNC(parametri) pa onda forward FNC(parametri)
samo H_FNC: FNC(parametri)
*/
#define H_FNC:%0(%1) \
forward%0(%1); public%0(%1)
/*
MACRO FNC - H_CB: FNC(parametri)
by: [H]265
_______________________________
Umjesto foward(paramteri) samo H_CB: FNC(paramteri)
*/
#define H_CB:%0(%1) \
forward%0(%1); // MACRO FNC by: [H]265
npr. umjesto ovoga
SetTimer("Timer",1000,true);
forward Timer();
public Timer()
{
return true;
}
samo ovo...
SetTimer("Timer",1000,true);
H_FNC: Timer()
{
return true;
}
takoÄ'er ako radite neku funkciju koju ćete pozivati iz timera od sada nemorate forwardati nego samo ovako:
forward FNC();
// novi nacin
H_CB: FNC()
NAPOMENA: NE stavljajte na kraju ';'
NAPOMENA: Testirao sam savjet od luke, usporedio sam ga sa MAX_PLAYERS, i MAX_PLAYERS sa GetMaxPlayers bez new players = GetMaxPlayers, ugl. sve upucuje da je GetMaxPlayers brži tako da super :)
ALIII!!
Gledajte ove rezultate:
# foreach - 268
# GetMaxPlayers - 2966
Tako da ipak se isplati foreach više :)
Moji rezultati (10000 puta "izmucena" koda):
GetMaxPlayers | Direktno: 20 milisec
GetMaxPlayers | Po Lukinom: 11 milisec
Foreach | 3 milisec
Evo jedna funkcija koju sam razvio kad me iziritiralo stalno doubleside, ps. ovo radi samo na staklima:
stock _ALT_CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:distance = 200.0)
{
//by BloodMaster
if(modelid == 1649 || modelid == 3851)
{
CreateDynamicObject(modelid, x, y, z, rx+180, ry, rz,worldid,interiorid,playerid,distance);
CreateDynamicObject(modelid, x, y, z, rx, ry, rz, worldid ,interiorid,playerid,distance);
return 1;
}
return CreateDynamicObject(modelid, x, y, z, rx, ry, rz, worldid ,interiorid,playerid,distance);
}
#if defined _ALS_CreateDynamicObject
#undef CreateDynamicObject
#else
#define _ALS_CreateDynamicObject
#endif
#define CreateDynamicObject _ALT_CreateDynamicObject
Istina, stakla necete moci micati (MoveDynObject), ali makar na static mapama se necete morati brinuti.
HINT: Ako koristite u MTA double side na staklima, tako ce biti i u sa:mp-u
P.S. Ovo se dodaje prije prvog callbacka!! (ili pri pocetku samog moda)
Mene zanima nesto, ako je Login/Register system dosta star, i jako zeza ?
Mislim nekad ga pokaze kad treba login nekad ne, valja li ga menjati ?
[quote author=[OG]SteXi.ılllı. link=topic=4245.msg206818#msg206818 date=1309816847]
Mene zanima nesto, ako je Login/Register system dosta star, i jako zeza ?
Mislim nekad ga pokaze kad treba login nekad ne, valja li ga menjati ?
[/quote]
Valja :D
Ok, hvala posto koristim faction-game EDIT a to je Edit Balkan-Undergrounda(prvog) pa je login star vise od 1 godine :S
[quote author=[OG]SteXi.ılllı. link=topic=4245.msg206818#msg206818 date=1309816847]
Mene zanima nesto, ako je Login/Register system dosta star, i jako zeza ?
Mislim nekad ga pokaze kad treba login nekad ne, valja li ga menjati ?
[/quote]
Pogrešna tema. Vjerojatno ti je problem do ovoga: http://wiki.sa-mp.com/wiki/TogglePlayerSpectating
BTW: Evo jedne macro funkcije kojom možete napraviti kompaktibilnost sa YCMD & ZCMD
/*
[H]265 - MACRO CODE
*/
#define YCMD:%1(%0) \
H265:%1(%0) // KOMAKTIBILNA FUNKCIJA ( H265 )
#define CMD:%1(%0)\
H265:%1(%0,_h_e_l_p_ ) if ( _h_e_l_p_ ) return 0; else
#define COMMAND%0(%1) \
CMD%0(%1)
ZAÅ TO? - Zato da se nemorate muÄiti ako ćete prebacivati iz ZCMD-a u YCMD možete ostaviti samo includajte YCMD a maknite ZCMD iz include-a
@ [H] 265, gde ovo dodam?
IsPlayerFreeFalling(playerid)
{
if(GetPlayerAnimationIndex(playerid))
{
new
animlib[32],
animname[32];
GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
GivePlayerWeapon(playerid, 46, 1);
}
return true;
}
Na kraj skripte.
koristiš npr.
if(IsPlayerFreeFalling(playerid))
{
// ako pada s neba
}
else if(!IsPlayerFreeFalling(playerid))
{
// ako ne pada s neba
}
TakoÄ'er možeÅ¡ staviti u jedan lokalni timer npr. ovako:
if(IsPlayerFreeFalling(i))
{
// ako pada s neba
}
else if(!IsPlayerFreeFalling(i))
{
// ako ne pada s neba
}
Ako je ishod toÄan ( true ) igraÄ Ä‡e dobiti padobran. A ako nije uskriptaj Å¡ta hoćeÅ¡ :)
Evo jednog macroa da si olakšate posao:
// Dodati novu varijablu negdje na poÄetku skripte
new
fMsg[128];
// Macro
#define SFM(%0,%1,%2,%3) format(fMsg, 128, %2, %3); SendClientMessage(%0, %1, fMsg)
Primjer:
public OnPlayerConnect(playerid) {
SFM(playerid, COLOR_RED, "Dobrodosao na server, %!", GetName(playerid));
return 1;
}
ouuu very nice, ti si paraox?
evo i za SendClientMessageToAll
// Dodati novu varijablu negdje na poÄetku skripte
new
fMsg[128];
k
// Macro
#define SFM(%0,%1,%2,%3) format(fMsg, 128, %2, %3); SendClientMessageToAll(%1, fMsg)
Citat: System32 poslato Jul 17, 2011, 22:48:34 POSLE PODNE
ouuu very nice, ti si paraox?
Da, jesam. :D
Citat: System32 poslato Jul 17, 2011, 22:48:34 POSLE PODNE
evo i za SendClientMessageToAll
// Dodati novu varijablu negdje na početku skripte
new
fMsg[128];
k
// Macro
#define SFM(%0,%1,%2,%3) format(fMsg, 128, %2, %3); SendClientMessageToAll(%1, fMsg)
Malo si zeznuo macro. Ide ovako:
#define SFMTA(%0,%1,%2) format(fMsg, 128, %1, %2); SendClientMessageToAll(%0, fMsg)
Citat: Goose poslato Jul 17, 2011, 22:55:19 POSLE PODNE
Citat: System32 poslato Jul 17, 2011, 22:48:34 POSLE PODNE
ouuu very nice, ti si paraox?
Da, jesam. :D
Citat: System32 poslato Jul 17, 2011, 22:48:34 POSLE PODNE
evo i za SendClientMessageToAll
// Dodati novu varijablu negdje na poÄetku skripte
new
fMsg[128];
k
// Macro
#define SFM(%0,%1,%2,%3) format(fMsg, 128, %2, %3); SendClientMessageToAll(%1, fMsg)
Malo si zeznuo macro. Ide ovako:
#define SFMTA(%0,%1,%2) format(fMsg, 128, %1, %2); SendClientMessageToAll(%0, fMsg)
kako? Pa jel prvi parametar playerid a toga u SendClientMessageToAll nema
Citat: System32 poslato Jul 17, 2011, 23:03:28 POSLE PODNE
kako? Pa jel prvi parametar playerid a toga u SendClientMessageToAll nema
Da, ali ti imaš tu 4 argumenta u macru. A treba ih samo 3.
BTW, usporedi svoj i moj macro pa ćeÅ¡ uoÄit razlike. :)
Citat: Goose poslato Jul 17, 2011, 23:21:01 POSLE PODNE
Citat: System32 poslato Jul 17, 2011, 23:03:28 POSLE PODNE
kako? Pa jel prvi parametar playerid a toga u SendClientMessageToAll nema
Da, ali ti imaš tu 4 argumenta u macru. A treba ih samo 3.
BTW, usporedi svoj i moj macro pa ćeÅ¡ uoÄit razlike. :)
a jebiga, zajebo se, svakom se omakne ;)
Mario ta funkcija odnosno macro vec postoji u ovoj temi.
@Paradox & System32
1. Parametar definicije '%' će moći imati samo jedan argument? - Imaš moj tutorial o optional argumentima.
2. Nije baš dobro to raditi sa macro funkcijom jer se ne smije returnati
3. Da se nemora dodavati 'new' na skripti evo naÄina:
4. Već postoji moja formatEx funkcija u ovom topicu ali nema optional argument i bolje bi bilo napraviti normalno to nego sa macro funkcijom
#define SFM(%0,%1,%2) \
do \
{ \
new \
string[128]; \
format(string, sizeof string, %1, %2); \
SendClientMessage(%0, string, %2); \
} \
while(FALSE)
Ali kao što sam rekao nije dobro jer stane samo jedna definicija u parametar i ne smije se returnati funkcija.
5. Ako znaš raditi sa macro funkcijama znaš i sam da macro u PAWNCC komapjleru se ponaša ovako
#define SCM(%0,%1,%2) format(string, sizeof string, %1, %2); SendClientMessage(%0,%1,string)
Ispisuje ovako:
format(string, sizeof string, [], len); SendClientMessage(playerid,{hex},[]) < OFC - izbaciti će puno errora
Citat: _Stranger poslato Jul 17, 2011, 23:31:42 POSLE PODNE
Mario ta funkcija odnosno macro vec postoji u ovoj temi.
Sorry, ali nisam ju našao.
@H265
Pogrješio si u tome da može imati samo jedan argumenat, može ih imati koliko želiš (karikirano).
Evo ti jedan primjer:
public OnPlayerSpawn(playerid) {
new
Name[MAX_PLAYER_NAME] = "Goose",
Age = 15,
Origin[9] = "Hrvatske";
SFM(playerid, 0xFF0000AA, "Dobrodošao na server, %s! Ti imaš %i godina. Dolaziš iz %s.", Name, Age, Origin);
return 1;
}
I tim primjer dokazujem da možeš imati više argumenata.
Da ipak nisam u pravu nisam nikad radio sa macro funkcijama sa viÅ¡e argumenata niti sam testirao. Mislio sam da i za macro funkciju postoji odeÄ'eni naÄin kako to napraviti jer uvijek sam radio sa normalnim funkcijama jer kao Å¡to sam rekao naredbe takog tipa ( SendClientMessage ) se Äesto return-aju, a macro funkcije se ne mogu return-ati
stock PostaviIgraca(playerid, Float:X, Float:Y, Float:Z, Int)
{
SetPlayerPos(playerid, X, Y, Z);
SetPlayerInterior(playerid, Int);
return 1;
}
Kako koristiti?
Pa umesto da koristite u nekoj komandi itd,
SetPlayerPos(playerid, X,Y,Z);
SetPlayerInt(playerid,IDInta);
vi jednostavo stavite PostaviIgraca(playerid,X,Y,Z,IDInta);
Primer:
CMD:a(playerid,params[])
{
PostaviIgraca(playerid,1321.312,123.312,312.12,12);
return true;
}
Takodje,mozete staviti i VirtualWorld..
Malo promenite ovaj stock,da izgleda ovako:
stock PostaviIgraca(playerid, Float:X, Float:Y, Float:Z, Int, VW)
{
SetPlayerPos(playerid, X, Y, Z);
SetPlayerInterior(playerid, Int);
SetPlayerVirtualWorld(playerid, VW);
return 1;
}
I onda bi koristenje izgledalo :
CMD:a(playerid,params[])
{
PostaviIgraca(playerid, 131.321, 321.312, 414.01, 2, 1);
return true;
}
Napomena: Ove koordinate sam lupao bezveze..
(Nesta slicno mi je danas zatrebalo za jedan system koji radim)
EDIT: - bespotrebno
Extra, cak si postao ovo u 4 ujutro xD
mozda budum i ja napravil digitron :D
Citat: Luka P. poslato Jul 21, 2011, 14:28:55 POSLE PODNE
Citat: [H265]Primjer:
printf(" 2 + 5 = %d ", Izracunaj(2,+,5)); return 7
printf(" 2 - 5 = %d ", Izracunaj(2,-,5)); return -3
printf(" 2 x 5 = %d ", Izracunaj(2,*,5)); return 10
printf(" 5 / 2 = %d ", Izracunaj(2,/,5)); return 2 (ide na cijeli broj)
Koja je svrha te funkcije?
printf(" 2 + 5 = %d ", (2+5));
printf(" 2 - 5 = %d ", (2-5));
printf(" 2 x 5 = %d ", (2*5));
printf(" 5 / 2 = %.2f ", Float:(2/5));
Omg pa najobicniji kalkulator ... lik je samo pokazo
@Luka P. - Imaš pravo :D (bilo je 4 ujutro)
Callback by BloodMaster:stock _ALT_CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:distance = 200.0)
{
if(modelid == 1649 || modelid == 3851)
{
CreateDynamicObject(modelid, x, y, z, rx+180, ry, rz,worldid,interiorid,playerid,distance);
CreateDynamicObject(modelid, x, y, z, rx, ry, rz, worldid ,interiorid,playerid,distance);
return 1;
}
return CreateDynamicObject(modelid, x, y, z, rx, ry, rz, worldid ,interiorid,playerid,distance);
}
Sa ovime ne morate da okrecete objekte koji trebaju biti dupli nego samo ih dodate sa ovim callback-om.
@No Name, nije to vec tu u temi postano, tj. taj stock (btw. to nije callback :) )?
Neće raditi, prekopirao si samo stock a ne i hook...
edit:
stock _ALT_CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:distance = 200.0)
{
//by BloodMaster
if(modelid == 1649 || modelid == 3851)
{
CreateDynamicObject(modelid, x, y, z, rx+180, ry, rz,worldid,interiorid,playerid,distance);
CreateDynamicObject(modelid, x, y, z, rx, ry, rz, worldid ,interiorid,playerid,distance);
return 1;
}
return CreateDynamicObject(modelid, x, y, z, rx, ry, rz, worldid ,interiorid,playerid,distance);
}
#if defined _ALS_CreateDynamicObject
#undef CreateDynamicObject
#else
#define _ALS_CreateDynamicObject
#endif
#define CreateDynamicObject _ALT_CreateDynamicObject
PoÄeo sam sa pisanjem ove skripte
#include "a_samp"
#include "YSI\y_hooks"
#define H_FNC:%0(%1) \
forward%0(%1); public%0(%1) // by [H]265
#define Sec(%0) \
((%0)*(1000)) // by [H]265
new
bool:inVozilo[MAX_PLAYERS char] = false,
LOCAL_TIMER;
Hook:PINC_OnGameModeInit() return \
LOCAL_TIMER = SetTimer("Checker", Sec(1), true);
Hook:P2INC_OnGameModeExit() return \
KillTimer(LOCAL_TIMER);
Hook:P3INC_OnPlayerConnect(playerid) return \
inVozilo{playerid} = false;
Hook:P4INC_OnPlayerStateChange(playerid,newstate,oldstate) { if(newstate == PLAYER_STATE_DRIVER) return \
inVozilo{playerid} = true; }
Hook:P5INC_OnPlayerExitVehicle(playerid, vehicleid) return \
inVozilo{playerid} = false;
stock SafePutPlayerInVehicle(playerid, vehicleid, seatid) { PutPlayerInVehicle(playerid, vehicleid, seatid); return \
inVozilo{playerid} = true; }
stock SafeRemovePlayerFromVehicle(playerid) { RemovePlayerFromVehicle(playerid); return \
inVozilo{playerid} = false; }
stock bool:IsPlayerInAnyVehicleEx(playerid) {
new
statePlayer = GetPlayerState(playerid);
if(statePlayer == PLAYER_STATE_ONFOOT || statePlayer == PLAYER_STATE_NONE || statePlayer == PLAYER_STATE_WASTED || statePlayer == PLAYER_STATE_SPAWNED) return \
inVozilo{playerid} = false;
else if(statePlayer == PLAYER_STATE_DRIVER || statePlayer == PLAYER_STATE_PASSENGER || statePlayer == PLAYER_STATE_SPECTATING) {
if(IsPlayerInAnyVehicle(playerid)) return \
inVozilo{playerid} = true; }
H_FNC: Checker() {
foreach(Player, s) {
if(IsPlayerInAnyVehicleEx(s) == true) return \
inVozilo{s} = true;
else if(IsPlayerInAnyVehicleEx(s) == false) return \
inVozilo{s} = false; } }
Ovo je više INC nego korisne skripte i kodovi naime skripta nije gotova ali ako netko ima volje neka dovrši mislim da svatko zna da postji GTA bug sa enter/exit iz vozila stoga sam htio napraviti Safe checker ugl. oni koji znaju ako trebaju neka dovrše ja imam svoju staru verziju koju ću koristiti
Provjerava igraÄev armor i vraća vrijednost(float value)/koliÄinu armora.
stock Float:GetArmour(playerid)
{
new Float:armor; GetPlayerArmour(playerid, armor);
return armor;
}
Provjerava naziv oružja i vraća vrijednost(string)/naziv oruzja.
stock GetWeapon(gunid)
{
new gunname[32];
GetWeaponName(gunid,gunname,sizeof(gunname));
return gunname;
}
Broji odreÄ'ene znakove unutar teksta. Recimo ako želite provjeriti koliko je igraÄ upisao odreÄ'enih znakova unutar teksta ova funkcija će vam vratiti vrijednost (integer, brojevnu vrijednost) koliko znakova se nalazi unutar teksta - ovo sam napravio kad sam izraÄ'ivao antiadvertising skriptu ali mi nije trebalo.
stock PrebrojiZnakove(text[], str[])
{
new val;
for(new g = 0; g < strlen(text)+1; g++) if(text[g] == str) val++;
return val;
}
Seif je negdje 'okaÄio' ovakvu istu funkciju (bar mislim)... ali ja sam pri koriÅ¡tenu shvatio da u njoj nije bilo baÅ¡ 'sve'. Nedostajali su IDovi oruzja za slot 5 (m4 i ak47) te je neÅ¡to joÅ¡ pogrijeÅ¡io (neznam toÄno). Uglavnom, ispravljeno.. eto..
stock GetWeaponSlot(weaponid)
{
switch (weaponid)
{
case 0,1: return 0;
case 2..9: return 1;
case 22..24: return 2;
case 25..27: return 3;
case 28,29,32: return 4;
case 30,31: return 5;
case 33,34: return 6;
case 35..38: return 7;
case 16..18,39: return 8;
case 41..43: return 9;
case 10..15: return 10;
case 44..46: return 11;
case 40: return 12;
default: return -1;
}
return -1;
}
Eto malo, od mene. Ako kome posluži dobro, a ako ne opet dobro :-*
zic mortale, u ovoj funkciji za weapon name, jel to recimo da mi izbaci ime oruzija, primjer ja u mojoj komandi /givegun printam adminu poruku da je dao tom i tom igracu id tog i tog oruzija, sad ako sam mu dao gun id 38 s tvojom funkcijom bi njemu printalo da mu je dao minigun?
Citat: System32 poslato Avgust 04, 2011, 20:06:53 POSLE PODNE
zic mortale, u ovoj funkciji za weapon name, jel to recimo da mi izbaci ime oruzija, primjer ja u mojoj komandi /givegun printam adminu poruku da je dao tom i tom igracu id tog i tog oruzija, sad ako sam mu dao gun id 38 s tvojom funkcijom bi njemu printalo da mu je dao minigun?
Bi
sta bi? :O
Bi, printalo bi mu "minigun"...
aha, hahahha hvala
stock SetBitEx(biteType, iVar, playerid = INVALID_PLAYER_ID, bool:plus, value) {
switch(biteType) { case 2: {
if(value == true) return Bit2_Set(iVar, playerid, Bit2_Get(iVar, playerid) + value); // +
else Bit2_Set(iVar, playerid, Bit2_Get(iVar, playerid) - value); // -
} case 4: {
if(value == true) return Bit4_Set(iVar, playerid, Bit4_Get(iVar, playerid) + value); // +
else Bit4_Set(iVar, playerid, Bit4_Get(iVar, playerid) - value); // -
} case 8: {
if(value == true) return Bit8_Set(iVar, playerid, Bit8_Get(iVar, playerid) + value); // +
else Bit8_Set(iVar, playerid, Bit8_Get(iVar, playerid) - value); // -
} case 16: {
if(value == true) return Bit16_Set(iVar, playerid, Bit16_Get(iVar, playerid) + value); // +
else Bit16_Set(iVar, playerid, Bit16_Get(iVar, playerid) - value); // -
} } }
ili
#define BitSetEx%0(%1, %2, %3, %4) %0_Set(%1, %2, %0_Get(%1, %2) %3 %4)
Eto to sam napravio za one koje koriste Bit support ( 2, 4, 8, 16 bit ) - bit 1 NE PODRAZAVA jer je on 1/0 tj. true/false to ne moze povecavati vrjednost
@H265: I što radi taj tvoj kod?xD
To je za ćuvanje memorije PAWNCC kompajlera
Za INC koji podrzava (16,8,4,2,1 bit) npr.
var[MAX_PLAYERS char]; < taj kod je 8 bitni to cuva DUPLO manje memorije od 16 bita ali je MAX INPUT = 255 dok je 16 bit = 65505 (0xFFFF)
A kada koristite var samo nes ko true/false tj. 1/0 onda koristite Bit1: Bit1_Set jer ce te sacuvati tako puno memorije koje bi inace sa 16 bit izgubili PUNO PUNO vise a ovaj moj kod je ADD-ON
nte boze kojin ti jezikon pricas :O
Citat: System32 poslato Avgust 09, 2011, 08:48:21 PRE PODNE
nte boze kojin ti jezikon pricas :O
:D xd ako trebaš objašnjenje reci nije mi problem objasniti detaljnije.
nego sto nego trebam :D
pevaj sreco
http://forum.sa-mp.com/showthread.php?t=275142
- Primjer, ovo je ADD-ON za ovaj INC koji je napravio Ryder i taj inc je bolji od yless-ovog YSI-ybit's jer podrzava 16, 8, 4, 2 i 1 bit dok ybit's podrzava SAMO 1 bit i sad stvar je u tome sto kad koristis npr. varijablu
new var[MAX_PLAYERS] samo za 1/0 npr.
OnPlayerConnect
{
var[playerid] = 1;
}
OnPlayerDiscconnect
{
var[playerid] = 0;
}
Sto nema logike jer je to MALO ISKORISTENO a puno memorije 'IZGUBLJENO' to je isto ko da uzmes cijeli VPS kako bi stavio jedan HTML predlozak na cijeli VPS, ako me razumjes ugl. u ovom primjeru je koristen 16 bit varijabla = 65535 ili ti 0xFFFF (hex kod) inace 65535 je INVALID_PLAYER_ID isto kao 0xFFFF samo je ovo hex kod za to
jednom recenicom, ulozio si vise memorije a premalo iskoristio
ugl. da se vratim na temu, kada trebas koristiti samo za 0/1 (turn on / turn off) koristis 1-bit ugl. u ovom topicu sto sam ti postao imas definicije ako ne znas....
malo prouci mozes sacuvati puno memorije, to je optimizacija a ne ono kada string nije 101 nego 100
aha kuzim, i sta sad trebas onda sve varijable uredivati, mislim prelagodit ryderovom incu i tvom adonu?
Pa krenes to je isto kao da iz PVarova prebacujes u normalne varijable
BTW: Ispravak normalne varijable su 32 bit ne 16
#define funkcija%0(%1) forward%0(%1);\
public%0(%1)
Macro funkcija by Seif_
npr.
forward poruka();
public poruka()
{
print("Poruka:>:>:>:<");
}
sa ovom funkcijom izgleda ovako:
funkcija poruka()
{
print("Poruka:>:>:>:<");
}
@Kizla - ta funkcija već postoji u ovom topicu koju sam ja napravio
EDIT: Eto našao sam je:
/*
MACRO FNC - H_FNC: FNC(parametri)
by: [H]265
_______________________________
Umjesto public FNC(parametri) pa onda forward FNC(parametri)
samo H_FNC: FNC(parametri)
*/
#define H_FNC:%0(%1) \
forward%0(%1); public%0(%1)
/*
MACRO FNC - H_CB: FNC(parametri)
by: [H]265
_______________________________
Umjesto foward(paramteri) samo H_CB: FNC(paramteri)
*/
#define H_CB:%0(%1) \
forward%0(%1); // MACRO FNC by: [H]265
Znaci mesto "public nesto()" ide "funkcija nesto()"
I obrisem forwarde?
Citat: [CRP] Pacijent_ poslato Avgust 10, 2011, 15:34:03 POSLE PODNE
Znaci mesto "public nesto()" ide "funkcija nesto()"
I obrisem forwarde?
Da jer ti funkicija sadrzi taj public i forward. Tacnije ovako nesto
funkcija nesto()E ona ti je jednaka kao i
foraward nesto();
public nesto()Tako sam ja skontao
[H]265 stvarno mi nije jasno kako za to mozes da kazes da je tvoje, ti mozes reci da si je ti vamo postavio i preimenova + nemoj mi sad s*ati kako si je ti napisao pre seifa ili bilo koga jer to nije tacno , nismo vamo svi glupi pa da mislis da mozes da se kitis tudjim kodama i jos napises da si ti napravio -.-
Citat: Gagi_Corleone poslato Avgust 10, 2011, 15:58:06 POSLE PODNE
Citat: [CRP] Pacijent_ poslato Avgust 10, 2011, 15:34:03 POSLE PODNE
Znaci mesto "public nesto()" ide "funkcija nesto()"
I obrisem forwarde?
Da jer ti funkicija sadrzi taj public i forward. Tacnije ovako nesto
funkcija nesto()
E ona ti je jednaka kao i
foraward nesto();
public nesto()
Tako sam ja skontao
Dobro si skonto :)
Citat: _Stranger poslato Avgust 10, 2011, 20:51:46 POSLE PODNE
[H]265 stvarno mi nije jasno kako za to mozes da kazes da je tvoje, ti mozes reci da si je ti vamo postavio i preimenova + nemoj mi sad s*ati kako si je ti napisao pre seifa ili bilo koga jer to nije tacno , nismo vamo svi [cenzura]i pa da mislis da mozes da se kitis tudjim kodama i jos napises da si ti napravio -.-
Da se tu ne prepucavam imas PM, nadam se da si shvatio ;)
#define randomEx(%1,%0) \
((random((%0)-(%1))+(%1))) // by [H]265primjer:
GivePlayerMoney(playerid, randomEx(500,100)); // Igrac ce dobiti minimalno 100, a maximlano 500 $$$ ili nesto izmeduEvo jedne funkcije sigurno su je svi zatrebali, randomEx(max,min) sto vam je super kada dajete random pickup 'novaca' sada mozete odrediti minimalnu vrjednost i maximalnu :)
#define YesNo(%0) ((%0) == (1)) ? ("Yes") : ("No") // by [03]Garisno
new example = random(500);
printf("Is RCON admin: %s", YesNo(IsPlayerAdmin(playerid)));
Ako je igrac bio admin reci ce: Is RCON admin: Yes
u drugom slucaju (igrac nije bio admin) reci ce: Is RCON admin: No
------------------------------
#define Answer(%0,%1,%2) (%0) == (1) ? (%1) : (%2) //by [03]Garisno
// Ista upotreba kao i YesNo samo ovdije ima vise odgovora,,
new example = random(500);
printf("Is RCON admin: %s", Answer(IsPlayerAdmin(playerid), "Da, on je Admin.", "Ne,on nije Admin."));
// ako je igrac bio admin reci ce: Is RCON admin: Da, on je Admin.
// drugacije ce reci: Is RCON admin: Ne,on nije Admin.
- nevaljano.
@h Ovo neće raditi...
Recimo da server ima 3 igraÄa sa ID-evima: 5,9,11...
A tvoj loop će izvrtiti "3" Å¡to nije nijedan igraÄev ID...
lol da imaš pravo nisam se uopce sjetio toga ^^ sve jedno se vracamo na to da moram koristiti normalan loop sa for petljom, ako necu koristiti static loping, a ne ovim cache - om
Ma iskreno nisam se ni zamarao puno nego sam samo htio napraviti taj cache ne znam dal ce ovo dobro compileati jer sam pisao ovdje kad sam stisnuo 'nova poruka' ^^ sve u svemu editao sam ;)
Rjesenje problema bi bila static syntaxa ali neda mi se sada jeb*at s time tako da cu jednostavno maknuti
Evo pošto me zanimalo kako bi se to dalo izvesti, pošto sam vidio kode tu, preformulirao sam ideju u nešto kompliciranije. Molio bih nekoga da testira jer nisam jos testirao, radio sam sve napamet :S
Ako ne valja, lako se pobrise post >.<
#include "YSI\y_hooks"
new PLAYER_CACHE; // use - u loopu slotova
new CONNECTED[MAX_PLAYERS char]; // use - loop playeridova kroz slotove
#define hloop(%0) for(new %0 = 0; %0 < PLAYER_CACHE; %0++) if(CONNECTED{%0} == 0) continue; %0 = CONNECTED{%0}-1;
Hook:C1_OnPlayerConnect(playerid) return CONNECTED{PLAYER_CACHE} = playerid+1, PLAYER_CACHE++;
Hook:C2_OnPlayerDisconnect(playerid, reason) return CONNECTED{FindCacheValue(playerid)} = 0, ReduceCheck();
stock FindCacheValue(value) // pronalazi slot cija je vrijednost jednaka (=) value, ('value-1' radimo zbog onplayerconnecta)
{
for(new a = 0; a < PLAYER_CACHE; a++) if(CONNECTED{a} == value-1) return a;
}
stock ReduceCheck() // pronalazi slot koji se ne koristi, uvrstava zadnji slot (zadnji connectani) u taj prazni, i smanjuje broj slotova za 1
{
for(new a = 0; a < PLAYER_CACHE; a++) if(CONNECTED{a} == 0) CONNECTED{a} = CONNECTED[PLAYER_CACHE-1], break;
PLAYER_CACHE--;
return 1;
}
for loop je malo kompliciran za shvatit, ako vrijednost slota (PLAYER_CACHE) iznosi 0 onda loop preskace izvrsavanje loopa za tu vrijednost varijable (varijabla se u loopovima povecava). Zatim, ako vrijednost slota ne iznosi 0, onda se vrijednosna varijabla pretvara u playerid odnosno id igraca koji je konektan na serveru (pojavio se - onplayerconnect, a nije izasao - onplayerdisconnect).
Mislim da ce to dobro raditi jedino mora se paziti da loop ide OD -1 pa nadalje jer '0' je valjani ID, nisam testirao kod ali mi se svida nacin... Takoder koristis char varijablu (MAX 255), a u slucaju da bude vise od 255 online?
Ja nisam razmisljao o takvoj izvedbi nego malo jednostavnijoj a to je sa static syntaxom sto automatski krece sa loopom, ali nema veze zasto raditi nesto sto vec postoji a bolje od toga ne moze (yless xd)
stock intFloat(Float:var, const index[], integ) { /* [H]265 */
if(index[0] == '/' || index[0] == ':') return \
floatround(integ/var);
else if(index[0] == '*' || index[0] == 'x') return \
floatround(integ*var);
else if(index[0] == '+') return \
floatround(integ+var);
else if(index[0] == '-') return \
floatround(integ-var);
return false;
}
Evo jedne korisne funkcije kojom mozete djeliti/mnoziti/zbrjati/oduzimati integer sa floatom i na kraju returna integer
Primjer:
new
Float:var0 = 1.5,
var1 = 1800;
printf("1800 / 1.5 = %d ",intFloat(var0, "/", var1)); // isprat ce 1200
printf("1800 : 1.5 = %d ",intFloat(var0, ":", var1)); // isprat ce 1200 (primjer sa : )
Posto returna integer zaokruzje CIJELI broj, a ne float 1. nesto pa nije bas korisno za + ili - floata ali eto ja sam stavio...
U principu ova funkcija nema nikakve druge koristi jer sve sto napravite ovdje mozete i ovako
new Float:ok = 1.5;
printf("1800 : 1.5 = %d",floatround(1800/ok); // return 1200
Samo je stvar sto kada koristiti enumatore morate prvo spremiti u 'new' pa zatim raditi u floatround naredbi, ovako samo koristite jer je prefix Float: stavljen... ^^
statement's
/ ili : = podjeli
* ili x = pomnozi
+ = zbroji
- = oduzmi
Citat: [H]265 poslato Avgust 17, 2011, 08:39:37 PRE PODNE
Mislim da ce to dobro raditi jedino mora se paziti da loop ide OD -1 pa nadalje jer '0' je valjani ID, nisam testirao kod ali mi se svida nacin... Takoder koristis char varijablu (MAX 255), a u slucaju da bude vise od 255 online?
Pa na isto ti doÄ'e otprilike, ako krene od 0 a ID ne postoji, onda ce ga samo preskociti i nastaviti dalje.
Koristim char jer sam navikao koristit prema svom serveru, a na njemu mi sigurno preko 255 nece trebat >.<
Ja vjerujem da je ovo relativno brza izvedba loopa kroz igrace, ali nisam siguran... na sliÄnu je 'foru' foreach.
Pa da to se zove 'cache' nacin tj. hvatanje samo ONLINE igraca. Posto ja koristim MySQL meni ne treba ali inace dobro bi bilo za koristiti cache za loop baze
Inace postoji i nesto puno bolje od 'char' - a, to je rBit INC od Rydera, podrzava 16, 8, 4, 2, 1 bit verziju, a char je 8 bitni i naravno to je puno bolji paket od YSI ovog ybit'sa koji podrzava samo 1 bit varijabl
Citat: [H]265 poslato Avgust 17, 2011, 11:25:53 PRE PODNE
Pa da to se zove 'cache' nacin tj. hvatanje samo ONLINE igraca. Posto ja koristim MySQL meni ne treba ali inace dobro bi bilo za koristiti cache za loop baze
Inace postoji i nesto puno bolje od 'char' - a, to je rBit INC od Rydera, podrzava 16, 8, 4, 2, 1 bit verziju, a char je 8 bitni i naravno to je puno bolji paket od YSI ovog ybit'sa koji podrzava samo 1 bit varijabl
Meni to u suÅ¡tini doÄ'e na popriliÄno isto, Å¡tednja na memoriji se zapravo svodi samo na to. Brzina je ista (obicne i char varijable imaju istu brzinu [testirao])... stoga, viÅ¡e treba gledati varijable s velikim brojem Äelija nego da gledaÅ¡ kako ćeÅ¡ uÅ¡tediti sa varijablom sa 50 ili 100 Äelija. Ipak, brzina je po meni važna i glavna stvar.. zato jer se sve svodi na brzinu pri velikom broj igraÄa ili pri velikom broju provjera u timerima (loopovi itd.).
Evo jedna funkcija, ne sjecam se odakle sam je nabavio, ali moze posluziti ( smanjuje .amx size, jer se ne koristi CreateDynamicObject, itd.... )
Funkcija je namjestena za Incognitov streamer plugin...
stock LoadMtaMap(file[])
{
if (!fexist(file)) return 0;
new File:MapFile=fopen(file);
new n, string[400];
new Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz;
new modelid, paintjob, interior, world;
while(fread(MapFile, string))
{
if (!sscanf(string, "p<\">'object''model='d'interior='d'dimension='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f", modelid, interior, world, x, y, z, rx, ry, rz))
{
n++;
//modelid x y z rx ry rz interior world
CreateDynamicObject(modelid, x, y, z, rx, ry, rz);
}
else if (!sscanf(string, "p<\">'vehicle''paintjob='d'model='d'interior='d'dimension='d'posX='f'posY='f'posZ='f'rotZ='f", paintjob, modelid, interior, world, x, y, z, rz))
{
n++;
new col1, col2, colors[20];
sscanf(string, "p<\">'color='s[20] ", colors);
sscanf(colors, "p<,>dd", col1, col2);
new mods[80], mod[MAX_MODS];
sscanf(string, "p<\">'upgrades='s[80] ", mods);
sscanf(mods, "p<,>A<d>(0)["#MAX_MODS"]", mod);
//modelid x y z rz col1 col2 paintjob interior world
new vehicleid = CreateVehicle(modelid, x, y, z, rz, col1, col2, -1);
for (new i; i < MAX_MODS; i++) if (mod[i]) AddVehicleComponent(vehicleid, mod[i]);
ChangeVehiclePaintjob(vehicleid, paintjob);
LinkVehicleToInterior(vehicleid, interior);
SetVehicleVirtualWorld(vehicleid, world);
}
}
fclose(MapFile);
printf("%d objekata ucitano iz mape '%s'", n, file);
return n;
}
Citat: [ED] ZicMortal poslato Avgust 17, 2011, 16:18:06 POSLE PODNE
Meni to u suÅ¡tini doÄ'e na popriliÄno isto, Å¡tednja na memoriji se zapravo svodi samo na to. Brzina je ista (obicne i char varijable imaju istu brzinu [testirao])... stoga, viÅ¡e treba gledati varijable s velikim brojem Äelija nego da gledaÅ¡ kako ćeÅ¡ uÅ¡tediti sa varijablom sa 50 ili 100 Äelija. Ipak, brzina je po meni važna i glavna stvar.. zato jer se sve svodi na brzinu pri velikom broj igraÄa ili pri velikom broju provjera u timerima (loopovi itd.).
Memorija nije problem dok se ne odlucis siriti svoj mod na malo vecu granicu sto znaci da ako ne pazis na memoriju moze doci 'Out of memory' sto znaci da si uzeo svu dozvoljenu memoriju PAWNCC kompajlera zato je pametno stediti memoriju dok mozes tako da ako imas priliku, koristi rBits
stock IgraciUInterioru(interior)
{
new inti;
foreach(Player, i)
{
if(GetPlayerInterior(i) == interior)
{
inti++;
}
}
return inti;
}
Nesto od mene.. Jednostavan stock, da ozivim temu :)
stock _HOOK_SetPlayerPos(playerid, Float:X, Float:Y, Float:Z, Float:Angle, interior, vw, bool:teleVeh)
{
SetPlayerPos(playerid, X, Y, Z); SetPlayerFacingAngle(playerid, Angle);
SetPlayerInterior(playerid, interior); SetPlayerVirtualWorld(playerid, vw);
if(teleVeh == true)
{
if(IsPlayerInAnyVehicle(playerid))
{
LinkVehicleToInterior(GetPlayerVehicleID(playerid), interior);
SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), vw);
SetVehiclePos(GetPlayerVehicleID(playerid), X, Y, Z);
}
}
return true;
}
#if defined _ALS_SetPlayerPos
#undef SetPlayerPos
#else
#define _ALS_SetPlayerPos
#endif
#define SetPlayerPos _HOOK_SetPlayerPos
Nista posebno ali sam htio da vidite (oni koji ne znaju) kako se hooka jer je bzvz raditi novi header npr.
stock SetPlayerPosEx.... ili nes drugo pa ako vec radite ovako nes onda hookajte vec postojece funkcije
@[H]265, Lijepo :D, korisno za anticheat tipa SetPlayerHealth.
Evo danas sam pravio jednu macro funkciju za jedan drugi forum ali cu je postati i ovdje
#define formatEx(%0,%1,%2,%3) \
do \
{ \
new string[%1]; \
format(string, sizeof (string), %2, %3); \
SendClientMessage(%0, 0xFFFFF, string); \
} \
while(FALSE)
umiesto
new string[128];
format(string, sizeof string, "NEKI TEXT, MOJE IME %s",GetName(playerid));
SendClientMessage(playerid, boja, string);
samo ovo!
formatEx(playerid, 128, "NEKI TEXT, MOJE IME %s", GetName(playerid));
Takoder sam ponovno napisao SetBitEx funkciju
stock SetBitEx(const type[],playerid = INVALID_PLAYER_ID, const var[], const index[])
{
new typeCount = strlen(type);
for(new i = 0; i <typeCount; i++)
{
if(playerid != INVALID_PLAYER_ID)
{
if(type[i] == 'Bit2') // BIT2
{
if(index[0] == '+')
{
Bit2_Set(var, playerid, Bit2_Get(var, playerid) + strval(index[1]));
}
else if(index[0] == '-')
{
Bit2_Set(var, playerid, Bit2_Get(var, playerid) - strval(index[1]));
}
}
else if(type[i] == 'Bit4') // BIT4
{
if(index[0] == '+')
{
Bit4_Set(var, playerid, Bit4_Get(var, playerid) + strval(index[1]));
}
else if(index[0] == '-')
{
Bit4_Set(var, playerid, Bit4_Get(var, playerid) - strval(index[1]));
}
}
else if(type[i] == 'Bit8') // BIT8
{
if(index[0] == '+')
{
Bit8_Set(var, playerid, Bit8_Get(var, playerid) + strval(index[1]));
}
else if(index[0] == '-')
{
Bit8_Set(var, playerid, Bit8_Get(var, playerid) - strval(index[1]));
}
}
else if(type[i] == 'Bit16') // BIT16
{
if(index[0] == '+')
{
Bit16_Set(var, playerid, Bit16_Get(var, playerid) + strval(index[1]));
}
else if(index[0] == '-')
{
Bit16_Set(var, playerid, Bit16_Get(var, playerid) - strval(index[1]));
}
}
}
}
return (true);
}
//banana
mozes prevesti na latinicu. >:(
to je bott :/
kako li se uvalio, bože bože ^^
EDIT::
evo jedan kod koji moze pomoc pocetnicima :)
stock GetSetPlayerPos(playerid)
{
new Float:ppos[3], Float:vpos[4];
GetPlayerPos(playerid, ppos[0], ppos[1], ppos[2]);
if(IsPlayerInAnyVehicle(playerid))
{
GetVehiclePos(GetPlayerVehicleID(playerid), vpos[0], vpos[1], vpos[2]);
GetVehicleZAngle(GetPlayerVehicleID(playerid), vpos[3]);
SetPlayerPos(playerid, ppos[0], ppos[1], ppos[2]);
SetVehiclePos(GetPlayerVehicleID(playerid), vpos[0], vpos[1], vpos[2]);
SetVehicleZAngle(GetPlayerVehicleID(playerid), vpos[3]);
PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
return 1;
}
else return SetPlayerPos(playerid, ppos[0], ppos[1], ppos[2]);
}
uzima koordinate igraca i postavlja ga na iste!
primjer:
COMMAND:playerpos(playerid, params[])
{
GetSetPlayerPos(playerid);
SCM(playerid, -1,"postavljen ^^");
return 1;
}
Evo isto to samo na kraći naÄin:
#define GetSetPlayerPos(%0) TogglePlayerControllable(%0,0); TogglePlayerControllable(%0,1);
edit: [cenzura]i postovi će biti izbrisani za 5... 4... 3... 2... 1... obrisani...
Popravio manji bug sa onom mojom starom SetBitEx fnc
stock SetBitEx(const type[],playerid = INVALID_PLAYER_ID, const var[], const index[])
{
new typeCount = strlen(type);
for(new i = 0; i <typeCount; i++)
{
if(playerid != INVALID_PLAYER_ID)
{
if(type[i] == 'Bit2') // BIT2
{
if(index[0] == '+')
{
Bit2_Set(var, playerid, Bit2_Get(var, playerid) + strval(index[1]));
}
else if(index[0] == '-')
{
Bit2_Set(var, playerid, Bit2_Get(var, playerid) - strval(index[1]));
}
}
else if(type[i] == 'Bit4') // BIT4
{
if(index[0] == '+')
{
Bit4_Set(var, playerid, Bit4_Get(var, playerid) + strval(index[1]));
}
else if(index[0] == '-')
{
Bit4_Set(var, playerid, Bit4_Get(var, playerid) - strval(index[1]));
}
}
else if(type[i] == 'Bit8') // BIT8
{
if(index[0] == '+')
{
Bit8_Set(var, playerid, Bit8_Get(var, playerid) + strval(index[1]));
}
else if(index[0] == '-')
{
Bit8_Set(var, playerid, Bit8_Get(var, playerid) - strval(index[1]));
}
}
else if(type[i] == 'Bit16') // BIT16
{
if(index[0] == '+')
{
Bit16_Set(var, playerid, Bit16_Get(var, playerid) + strval(index[1]));
}
else if(index[0] == '-')
{
Bit16_Set(var, playerid, Bit16_Get(var, playerid) - strval(index[1]));
}
}
}
}
return (true);
}
Molio bih ako neko zna kako npr: kad sad neki igrac a da nije taj igraac admin, da on udje u neko bolje i da ga server odma kicka jer sam napravio jednu mapu neka baza samo za admine, ali ne zelim ono tipa kapija i tako jer nije ugledno :D , ako neko zna molio bih da mi kaze...i jos nesto ako neko zna kako mijenjati boju auta u pawnu da mi kaze :D HVALA!!!
Citat: Nermin(CH) poslato Oktobar 05, 2011, 18:30:07 POSLE PODNE
Molio bih ako neko zna kako npr: kad sad neki igrac a da nije taj igraac admin, da on udje u neko bolje i da ga server odma kicka jer sam napravio jednu mapu neka baza samo za admine, ali ne zelim ono tipa kapija i tako jer nije ugledno :D , ako neko zna molio bih da mi kaze...i jos nesto ako neko zna kako mijenjati boju auta u pawnu da mi kaze :D HVALA!!!
Vec si otvorio temu tako da nemoj to ovde traziti. I ovo ne sluzi za to nego za stavljanje nekih korisnih skripti.
Funkcija moze crashati igru svima ili određenom igracu.
stock Crash(playerid,bool:all)
{
if(all == true)
{
GameTextForAll("~CRASH", 10000, 3);
}
else
{
GameTextForPlayer(playerid,"~CRASH", 10000, 3);
}
}
Citat: LordShigi poslato Oktobar 16, 2011, 22:11:04 POSLE PODNE
Funkcija moze crashati igru svima ili odreÄ'enom igracu.
stock Crash(playerid,bool:all)
{
if(all == true)
{
GameTextForAll("~CRASH", 10000, 3);
}
else
{
GameTextForPlayer(playerid,"~CRASH", 10000, 3);
}
}
Koja domišljata ideja... Pošto samo
~ na poÄetku crasha igru... Samo si na kraj bio dodao
}}Al to će biti uklonjeno u 0.3d
Funkcija namjeÅ¡ta odreÄ'enom igraÄu helte i armour u isto vrijeme.
stock SetPlayerHiA(playerid, Float:value)
{
SetPlayerHealth(playerid, value);
SetPlayerArmour(playerid, value);
return 1;
}
Citat: LordShigi poslato Oktobar 16, 2011, 22:11:04 POSLE PODNE
Funkcija moze crashati igru svima ili odreÄ'enom igracu.
stock Crash(playerid,bool:all)
{
if(all == true)
{
GameTextForAll("~CRASH", 10000, 3);
}
else
{
GameTextForPlayer(playerid,"~CRASH", 10000, 3);
}
}
Ne treba ti bool.
Citat: Wang poslato Oktobar 18, 2011, 18:39:12 POSLE PODNE
Citat: LordShigi poslato Oktobar 16, 2011, 22:11:04 POSLE PODNE
Funkcija moze crashati igru svima ili odreÄ'enom igracu.
stock Crash(playerid,bool:all)
{
if(all == true)
{
GameTextForAll("~CRASH", 10000, 3);
}
else
{
GameTextForPlayer(playerid,"~CRASH", 10000, 3);
}
}
Ne treba ti bool.
I just lol'd, bool je napravljen sa zeljom da stvoris jednom igracu crash ili vise igraca crash
Ako je 1 onda ce svima, ako je 0 onda ce samo odredjenom idu
Citat: MicroD poslato Oktobar 18, 2011, 18:41:23 POSLE PODNE
Citat: Wang poslato Oktobar 18, 2011, 18:39:12 POSLE PODNE
Citat: LordShigi poslato Oktobar 16, 2011, 22:11:04 POSLE PODNE
Funkcija moze crashati igru svima ili odreÄ'enom igracu.
stock Crash(playerid,bool:all)
{
if(all == true)
{
GameTextForAll("~CRASH", 10000, 3);
}
else
{
GameTextForPlayer(playerid,"~CRASH", 10000, 3);
}
}
Ne treba ti bool.
I just lol'd, bool je napravljen sa zeljom da stvoris jednom igracu crash ili vise igraca crash
Ako je 1 onda ce svima, ako je 0 onda ce samo odredjenom idu
stock Crash(playerid)
{
if(playerid == INVALID_PLAYER_ID) GameTextForAll("~CRASH", 10000, 3);
else GameTextForPlayer(playerid,"~CRASH", 10000, 3);
}
Citat: Wang poslato Oktobar 18, 2011, 18:54:28 POSLE PODNE
stock Crash(playerid)
{
if(playerid == INVALID_PLAYER_ID) GameTextForAll("~CRASH", 10000, 3);
else GameTextForPlayer(playerid,"~CRASH", 10000, 3);
}
Mene bi bila sramota tako krast neÄiji rad , prvo na službenom SA:MP forumu ukradeÅ¡ od Shigija ovaj kod i tamo ga postaÅ¡ u Useful Functions onda ti je ovaj napisao da je to krivo i postavio ono Å¡to valja i ti kopirao i od njega. Kako jadno :D
Citat: Lemonade Mouth poslato Oktobar 19, 2011, 16:45:34 POSLE PODNE
Citat: Wang poslato Oktobar 18, 2011, 18:54:28 POSLE PODNE
stock Crash(playerid)
{
if(playerid == INVALID_PLAYER_ID) GameTextForAll("~CRASH", 10000, 3);
else GameTextForPlayer(playerid,"~CRASH", 10000, 3);
}
Mene bi bila sramota tako krast neÄiji rad , prvo na službenom SA:MP forumu ukradeÅ¡ od Shigija ovaj kod i tamo ga postaÅ¡ u Useful Functions onda ti je ovaj napisao da je to krivo i postavio ono Å¡to valja i ti kopirao i od njega. Kako jadno :D
Ajde ne trabunjaj [cenzura]osti kad nisi bio s nama na skype-u kad je njemu sinula ta ideja i ne znaÅ¡ o Äemu se radi.Ja sam tamo postavio Crash funkciju ako kome zatreba a tu sam stavio ispravak od onog lika tako da....radije pssst
EDIT:
Citatprvo na službenom SA:MP forumu ukradeš od Shigija
Ovo nije službeni SA:MP forum.
Citat: Wang poslato Oktobar 19, 2011, 16:55:23 POSLE PODNE
Citat: Lemonade Mouth poslato Oktobar 19, 2011, 16:45:34 POSLE PODNE
Citat: Wang poslato Oktobar 18, 2011, 18:54:28 POSLE PODNE
stock Crash(playerid)
{
if(playerid == INVALID_PLAYER_ID) GameTextForAll("~CRASH", 10000, 3);
else GameTextForPlayer(playerid,"~CRASH", 10000, 3);
}
Mene bi bila sramota tako krast neÄiji rad , prvo na službenom SA:MP forumu ukradeÅ¡ od Shigija ovaj kod i tamo ga postaÅ¡ u Useful Functions onda ti je ovaj napisao da je to krivo i postavio ono Å¡to valja i ti kopirao i od njega. Kako jadno :D
Ajde ne trabunjaj [cenzura]osti kad nisi bio s nama na skype-u kad je njemu sinula ta ideja i ne znaÅ¡ o Äemu se radi.Ja sam tamo postavio Crash funkciju ako kome zatreba a tu sam stavio ispravak od onog lika tako da....radije pssst
EDIT:
Citatprvo na službenom SA:MP forumu ukradeš od Shigija
Ovo nije službeni SA:MP forum.
Zabunio sam se , ali svejedno predstavio si kod kao svoj.
Tko kaže da sam ja predstavio kod kao svoj?
Jednostavno sam dao ljudima kod jer mnogima zatreba a nigdje nepiše "By Wang...".
Eto me nakon par mjeseci vidim jako super novih funkcija u 0.3d. Pa evo pojednostavljena za poÄetnike :
stock PlayAudioStreamForAll(link[])
{
foreach(Player,i)
{
PlayAudioStreamForPlayer(i,link);
for(new c; c < 20; c++) SendClientMessage(i,-1," ");
SendClientMessageToAll(-1,"Pjesma pustena svima!");
}
return true;
}
PlayAudioStreamForAll - puÅ¡ta glazbu za sve igraÄe na serveru , primjer koriÅ¡tenja :
CMD:play(playerid,params[])
{
PlayAudioStreamForAll("http://users2.ml.mindenkilapja.hu/users/fuchida/uploads/Green_Day_-_Holiday.mp3");
return true;
}
I funkcija za gašenje pjesme svima :
stock StopAudioStreamForAll()
{
foreach(Player,i)
{
StopAudioStreamForPlayer(i);
SendClientMessageToAll(-1,"Pjesma ugasena svima!");
}
return true;
}
Primjer korištenja :
CMD:stop(playerid,params[])
{
StopAudioStreamForAll();
return true;
}
Citat: matt! poslato Novembar 08, 2011, 18:17:26 POSLE PODNE
Eto me nakon par mjeseci vidim jako super novih funkcija u 0.3d. Pa evo pojednostavljena za poÄetnike :
stock PlayAudioStreamForAll(link[])
{
foreach(Player,i)
{
PlayAudioStreamForPlayer(i,link);
for(new c; c < 20; c++) SendClientMessage(i,-1," ");
SendClientMessageToAll(-1,"Pjesma pustena svima!");
}
return true;
}
PlayAudioStreamForAll - puÅ¡ta glazbu za sve igraÄe na serveru , primjer koriÅ¡tenja :
CMD:play(playerid,params[])
{
PlayAudioStreamForAll("http://users2.ml.mindenkilapja.hu/users/fuchida/uploads/Green_Day_-_Holiday.mp3");
return true;
}
I funkcija za gašenje pjesme svima :
stock StopAudioStreamForAll()
{
foreach(Player,i)
{
StopAudioStreamForPlayer(i);
SendClientMessageToAll(-1,"Pjesma ugasena svima!");
}
return true;
}
Primjer korištenja :
CMD:stop(playerid,params[])
{
StopAudioStreamForAll();
return true;
}
Kako da napravim da neku muziku pusta samo na odredjenom mjestu
Pokusao sam to ali kad dodjem na to mjesto pise mi Audio Streamer : Link koji sam postavio
Sta nisam dobro uradio ?
Citat: [GE] Palic poslato Decembar 22, 2011, 21:49:03 POSLE PODNE
Kako da napravim da neku muziku pusta samo na odredjenom mjestu
Pokusao sam to ali kad dodjem na to mjesto pise mi Audio Streamer : Link koji sam postavio
Sta nisam dobro uradio ?
Ti mozda jesi sve dobro uradio ali pogledaj da ti nije kojim slucajem zvuk radija ugasen. Moras ga pojacati da bi cuo i tu pesmu.
Evo usput sam napravio jednu jednostavnu funkciju koja ce postaviti poziciju vozila a pritom ga ne "zalediti", odnosno zakociti.
SetVehiclePosUsingVelocity ( playerid , Float:x , Float:y, Float:z )
{
if ( IsPlayerInAnyVehicle ( playerid ) )
{
new Float:Vvelocity[3];
GetVehicleVelocity ( GetPlayerVehicleID ( playerid ) , Vvelocity[0] , Vvelocity[1] , Vvelocity[2] );
SetVehiclePos ( GetPlayerVehicleID ( playerid ), x , y , z );
SetVehicleVelocity ( GetPlayerVehicleID ( playerid ) , Vvelocity[0] , Vvelocity[1] , Vvelocity[2] );
}
}
Najjednostavniji anti swear sistem. Prvo Å¡to trebate uraditi jest definirati zabranjene rijeÄi po vaÅ¡em izboru.
new Forbidden[][] =
{
"sisa",
// dodajte rijeci koje zelite...
};
Te ćemo napraviti provjeru da vidimo dali je igraÄ upisao zabranjenu rijeÄ (ovu provjeru možete koristiti u svim komandama,funkcijama,callbackovima itd...)
stock IsInputForbiddenWord(playerid,input[])
{
#pragma unused playerid
for(new c;c<sizeof(Forbidden);c++)
{
if(strfind(input,Forbidden[c])!=-1){}
}
return true;
}
I jedan primjer korištenja u OnPlayerText
public OnPlayerText(playerid,text[])
{
if(IsInputForbiddenWord(playerid,text)) return Kick(playerid);
return true;
}
Evo od mene za zabranjene NICKove.
new ZabranjenaImena[][] = {
"Majmun", "Sekegfge", "Administrator", "Brate_", "Srbija","Hrvatska"
};
itd...
Koriscenje:
public OnPlayerConnect(playerid) {
for(new i = 0; i < sizeof(ZabranjenaImena); i ++ ) {
if(!strcmp(name, i, true)) {
SendClientMessage(playerid, -1, "Greska: Takvo ime nije dozvoljeno!");
SendClientMessage(playerid, -1, "Izbaceni ste sa Servera.");
Kick(playerid);
}
}
return 1;
}
new name[MAX_PLAYER_NAME];
Nisi nigdje definirao "name" , tako da će ljudima izbacit error , fixaj to.
Uh , tek sam sad skužio da si napravio veliku grešku
Promjeni ovo if(!strcmp(name, i, true)) {
U
if(strfind(name,ZabranjenaImena[i])!=-1){
Citat: 20 Dollar Nosebleed poslato Decembar 31, 2011, 17:58:00 POSLE PODNE
Najjednostavniji anti swear sistem. Prvo Å¡to trebate uraditi jest definirati zabranjene rijeÄi po vaÅ¡em izboru.
new Forbidden[][] =
{
"sisa",
// dodajte rijeci koje zelite...
};
Te ćemo napraviti provjeru da vidimo dali je igraÄ upisao zabranjenu rijeÄ (ovu provjeru možete koristiti u svim komandama,funkcijama,callbackovima itd...)
stock IsInputForbiddenWord(playerid,input[])
{
#pragma unused playerid
for(new c;c<sizeof(Forbidden);c++)
{
if(strfind(input,Forbidden[c])!=-1){}
}
return true;
}
I jedan primjer korištenja u OnPlayerText
public OnPlayerText(playerid,text[])
{
if(IsInputForbiddenWord(playerid,text)) return Kick(playerid);
return true;
}
Zašto si stavio #pragma unused playerid? To je nepotrebno.
Isto ti je - bez baca warning - sa nebaca , svejedno ti je kako ćeš staviti :)
A u biti kad sam bolje pogledao kod onda sam vidio da ti niti ne treba playerid u argumentima. ;)
Citat: Get busy living or Get busy dying poslato Decembar 31, 2011, 17:58:00 POSLE PODNE
new Forbidden[][] =
{
"sisa",
// dodajte rijeci koje zelite...
};
Zasto bi deo tela bio zabranjen (http://fotl-clan.ru/Smileys/fotl/sad.gif)
Plus morao sam da se nadovezem na postove iznad uopste ti nije potreban argument playerid u celom tom kodu kad je potrebno u callbacku samo da proveri taj kako is nazvao 'input' string.
Mali refresh, malo koristenje emita ;)
stock Negativan(broj)
{
//Uzima broj
#emit LOAD.S.PRI broj
//Stavlja taj broj u negativno stanje
#emit NEG
//Mice specificni broj iz stacka...
#emit RETN
return 0;
}
stock Nije(broj)
{
//uzima ga...
#emit LOAD.S.PRI broj
//Uzima neki broj koji nije jednak broju koji je zadan
#emit NOT
//vec objasnio
#emit RETN
return 0;
}
stock Povecaj(broj)
{
//uzima
#emit LOAD.S.PRI broj
// Povecava broj za 1
#emit INC.PRI
#emit RETN
return 0;
}
stock Smanji(broj)
{
#emit LOAD.S.PRI broj
//smanjuje odredeni broj za 1
#emit DEC.PRI
#emit RETN
return 0;
}
stock Zbroji(brojA, brojB)
{
#emit LOAD.S.PRI brojA
#emit LOAD.S.ALT brojB
// Zbraja odredene brojeve
#emit ADD
#emit RETN
return 0;
}
stock Oduzmi(brojA, brojB)
{
#emit LOAD.S.PRI brojA
#emit LOAD.S.ALT brojB
//Oduzima odredene brojeve
#emit SUB
#emit RETN
return 0;
}
stock Mnozi(brojA, brojB)
{
#emit LOAD.S.PRI brojA
#emit LOAD.S.ALT brojB
//Mnozi odredene brojeve
#emit SMUL
#emit RETN
return 0;
}
stock Dijeli(brojA, brojB)
{
#emit LOAD.S.PRI brojA
#emit LOAD.S.ALT brojB
// Dijeli odredene brojeve
#emit SDIV
#emit RETN
return 0;
}
i koristite ih npr. ovako:
public OnGameModeInit()
{
printf("Negativan broj od broja 7 je: %d", Negativan(7));
printf("Random broj koji nije broj 4: %d", Nije(4));
printf("Broj koji je za 1 veci od 10: %d", Povecaj(10));
printf("Broj koji je za 1 manji od 15: %d", Smanji(15));
printf("Zbroj broja 7 i 5 je: %d", Zbroji(7, 5));
printf("Razlika broja 9 i 4 je: %d", Oduzmi(9, 4));
printf("Umnozak broja 3 i 13 je: %d", Mnozi(3, 13));
printf("Kolicnik broja 46 i 2 je: %d", Dijeli(46, 2));
return 1;
}
Nadam se da vam se svida :)
Citat: kizla poslato Januar 05, 2012, 11:28:07 PRE PODNE
Mali refresh, malo koristenje emita ;)
stock Negativan(broj)
{
#emit LOAD.S.PRI broj
#emit NEG
#emit RETN
return 0;
}
stock Nije(broj)
{
#emit LOAD.S.PRI broj
#emit NOT
#emit RETN
return 0;
}
stock Povecaj(broj)
{
#emit LOAD.S.PRI broj
#emit INC.PRI
#emit RETN
return 0;
}
stock Smanji(broj)
{
#emit LOAD.S.PRI broj
#emit DEC.PRI
#emit RETN
return 0;
}
stock Zbroji(brojA, brojB)
{
#emit LOAD.S.PRI brojA
#emit LOAD.S.ALT brojB
#emit ADD
#emit RETN
return 0;
}
stock Oduzmi(brojA, brojB)
{
#emit LOAD.S.PRI brojA
#emit LOAD.S.ALT brojB
#emit SUB
#emit RETN
return 0;
}
stock Mnozi(brojA, brojB)
{
#emit LOAD.S.PRI brojA
#emit LOAD.S.ALT brojB
#emit SMUL
#emit RETN
return 0;
}
stock Dijeli(brojA, brojB)
{
#emit LOAD.S.PRI brojA
#emit LOAD.S.ALT brojB
#emit SDIV
#emit RETN
return 0;
}
i koristite ih npr. ovako:
public OnGameModeInit()
{
printf("Negativan broj od broja 7 je: %d", Negativan(7));
printf("Random broj koji nije broj 4: %d", Nije(4));
printf("Broj koji je za 1 veci od 10: %d", Povecaj(10));
printf("Broj koji je za 1 manji od 15: %d", Smanji(15));
printf("Zbroj broja 7 i 5 je: %d", Zbroji(7, 5));
printf("Razlika broja 9 i 4 je: %d", Oduzmi(9, 4));
printf("Umnozak broja 3 i 13 je: %d", Mnozi(3, 13));
printf("Kolicnik broja 46 i 2 je: %d", Dijeli(46, 2));
return 1;
}
Nadam se da vam se svida :)
Mogao bi da objasnis sta koji emit radi, ako si ti pravio kod naravno.
nebi posto kod da nisam ja uradio ;)
edito i napiso kaj koji radi...
Lijepo kizla , baš mi je trebalo to sa #emit , to ni dok sam u C++ radio nisam kužio što radi , sada sam donekle skužio , hvala.
stock ChangeVehicleModel( vehicleid, objectid, Float: offset = 0.0 )
{
AttachObjectToVehicle( CreateObject( objectid, 0.0, 0.0, 0.0, 0, 0, 0 ), vehicleid, 0, 0, 0, 0, 0, 0 + offset );
LinkVehicleToInterior( vehicleid, 12 );
}
by Lorenc_
Primer: Mozete voziti kolica za ducan
(http://www.zaslike.com/files/mj0j9ux8gzrw0mwyein_thumb.jpg) (http://www.zaslike.com/viewer.php?file=mj0j9ux8gzrw0mwyein.jpg)
Ja treba Cod da nemoram ravnati redove.
Citat: | S-RP | Kalibar .300 poslato Januar 18, 2012, 15:57:17 POSLE PODNE
Ja treba Cod da nemoram ravnati redove.
imaš temu za to...
#pragma tabsize 0
//Removes vending machines
RemoveBuildingForPlayer(playerid, 1302, 0.0, 0.0, 0.0, 6000.0);
RemoveBuildingForPlayer(playerid, 1209, 0.0, 0.0, 0.0, 6000.0);
RemoveBuildingForPlayer(playerid, 955, 0.0, 0.0, 0.0, 6000.0);
RemoveBuildingForPlayer(playerid, 1775, 0.0, 0.0, 0.0, 6000.0);
RemoveBuildingForPlayer(playerid, 1776, 0.0, 0.0, 0.0, 6000.0);
Za RP Servere...
Trazim kod da nemoram ravnati redove objekata. Imam #pragma tabsize 0, i moram ravnati redove od objekata
Citat: | S-RP | K@lib@r .300 poslato Februar 09, 2012, 21:57:59 POSLE PODNE
Trazim kod da nemoram ravnati redove objekata. Imam #pragma tabsize 0, i moram ravnati redove od objekata
Nemoguće da moras, to
#pragma tabsize 0 stavi na pocetak moda ispod includea
I po drugi put ti se kaze da ovo nije tema za trazenje, ima tema za to.
Citat: | S-RP | K@lib@r .300 poslato Februar 09, 2012, 21:57:59 POSLE PODNE
Trazim kod da nemoram ravnati redove objekata. Imam #pragma tabsize 0, i moram ravnati redove od objekata
Jel ti kužiš da postoji tema "Trebam nešto" ovo je korisne skripte i kodovi!
Nemoj raditi DP...
takoder ovo NIJE korisno >:(
c/p iz GF-a , strcmp :'(
Evo vam jedna /aodg komanda
Opis : U pitanje je komanda koja omogućava da admin igraÄu odgovori na njegovo pitanje u bilo kojem trenutku
if(strcmp(cmd, "/aodg", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] == 1)
{
SendClientMessage(playerid, COLOR_WHITE, " Niste ovlasteni da koristite ovu komandu.");
return 1;
}
if(gPlayerLogged[playerid] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, " Niste se prijavili!");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_WHITE, "Koriscenje: /aodg [ID Igraca/Dio Imena] [text]");
return 1;
}
giveplayerid = ReturnUser(tmp);
if(PlayerInfo[playerid][pAdmin] >= 1)
{
if (IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(HidePM[giveplayerid] > 0)
{
SendClientMessage(playerid, COLOR_GREY, " ");
return 1;
}
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_WHITE, "Koriscenje: /aodg [ID Igraca/Dio Imena] [text]");
return 1;
}
format(string, sizeof(string), "{FFFFFF}[ID:%d{FFFFFF}] {{FFD200}Admin {FFD200}%s {0000FF}odgovor: {FFFFFF}%s", playerid, sendername, (result));
SendClientMessage(giveplayerid, COLOR_LIGHTRED, string);
format(string, sizeof(string), "{FFFFFF}[ID:{FF00FF}%d{FFFFFF}] {00B9FF}Admin {FFD200}%s: {FFFFFF}%s", giveplayerid, giveplayer, (result));
SendClientMessage(playerid, COLOR_LIGHTRED, string);
return 1;
}
}
else
{
format(string, sizeof(string), "Taj ID:%d Nije Aktivan na serveru.", giveplayerid);
SendClientMessage(playerid, COLOR_GRAD1, string);
}
}
}
return 1;
}
Ovo je tema za komande ! http://balkan-samp.com/forum/index.php?topic=7222.0
To ionako nije korisno , kopirano samo i za GF je jedino.
CMD:adm(playerid,params[])
{
new id, text[128];
if(sscanf(params, "iu", id, text)) return SendClientMessage(playerid, 0xE1E1E1AA, "KORISTI: /adm [ID igraca/Deo imena] [Poruka]");
else if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xE1E1E1AA, " (GRESKA) Korisnik nije online!");
new imekorisnika[32]; new imeadmina[32];
GetPlayerName(playerid, imeadmina, sizeof(imeadmina));
GetPlayerName(id, imekorisnika, sizeof(imekorisnika));
SendClientMessage(playerid, 0xFFFFFFFF, " >> ADM: Poruka poslana igracu %s: %s", imekorisnika, text);
SendClientMessage(id, 0x00FFFFAA, " Admin %s: %s", imeadmina, text);
return 1;
}
Oprostite ako ima gresaka, ja nauceno radim strcmp-om, a posto vecina koristi ZCMD reko da pokusam da napisem nesto korisno i za to :D
Freeze & Unfreeze System
Potrebno: zcmd (include)
stock Freeze(playerid)
{
TogglePlayerControllable(playerid,0);
return 1;
}
stock Unfreeze(playerid)
{
TogglePlayerControllable(playerid,0);
return 1;
}
KOMANDA za test:
CMD:test1(playerid, params[])
{
Freeze(playerid);
SendClientMessage(playerid, -1, "Freeze");
return 1;
}
CMD:test2(playerid, params[])
{
Unfreeze(playerid);
SendClientMessage(playerid, -1, "UnFreeze");
return 1;
}
Nadam se da će nekome poslužit. :)
Malo si se zeznuo. U Unfreeze funkciji u TogglePlayerControllable ide 1 poslije playerid-a, a ne 0.
A i postoji lakÅ¡i naÄin za to:
#define Freeze(%0) TogglePlayerControllable(%0, 0)
#define Unfreeze(%0) TogglePlayerControllable(%0, 1)
Citat: Joey_ poslato Mart 01, 2012, 23:49:32 POSLE PODNE
Malo si se zeznuo. U Unfreeze funkciji u TogglePlayerControllable ide 1 poslije playerid-a, a ne 0.
A i postoji lakÅ¡i naÄin za to:
#define Freeze(%0) TogglePlayerControllable(%0, 0)
#define Unfreeze(%0) TogglePlayerControllable(%0, 1)
Brzina pisanja. ^^
Znam ali dosada ubija ^^
ovo na kraj scripte:
new Text3D:ZaIgraca[MAX_PLAYERS];
stock Napravi3DTextLabelZaIgraca(idigraca, text[],boja, offsetx, offsety, offsetz, radius, vw)
{// idigraca - id igraca kome se stavlja 3dtext | text[] - text koji se ispisuje | boja - boja texta | offsetx/offsety/offsetz - koliko da bude udaljeno od igraca po osama | radius - na kolikoj daljini da se vidi | vw - virtual world u kome se stavlja (uglavnom 0)
ZaIgraca[idigraca] = Create3DTextLabel(text,boja, 0, 0, 0, radius, vw, 1);
Attach3DTextLabelToPlayer(ZaIgraca[idigraca], idigraca, offsetx, offsety, offsetz);
}
stock Makni3DTextLabelZaIgraca(idigraca, textid)
{
Delete3DTextLabel(ZaIgraca[idigraca]);
}
Za korisnike koji se redovno muce sa Attachovanjem 3D Texta za igraca :D
Primer:
CMD:test(playerid,params[])
{
if(IsPlayerConnected(playerid))
{
Napravi3DTextLabelZaIgraca(playerid, "Ovo je test", 0xFF0000AA, 0.0,0.0,0.6,20,0);
}
return 1;
}
Obavezno na OnPlayerDisconnect staviti:
Makni3DTextLabelZaIgraca(playerid, ZaIgraca[playerid]);
Ne znam da li ce raditi, ali nebi trebalo da ima problema sa ovime... (nemam sa kim da testam jer nemam opciju port forwardinga)
Nadam se da sam pomogao :D
Te 2 funkcije već postoje u SA:MP-u i kada već radiš funkcije najbolje bi ti bilo da ih pišeš na engleskom.
Citat: dock poslato Mart 04, 2012, 01:37:08 PRE PODNE
ovo na kraj scripte:
new Text3D:ZaIgraca[MAX_PLAYERS];
stock Napravi3DTextLabelZaIgraca(idigraca, text[],boja, offsetx, offsety, offsetz, radius, vw)
{// idigraca - id igraca kome se stavlja 3dtext | text[] - text koji se ispisuje | boja - boja texta | offsetx/offsety/offsetz - koliko da bude udaljeno od igraca po osama | radius - na kolikoj daljini da se vidi | vw - virtual world u kome se stavlja (uglavnom 0)
ZaIgraca[idigraca] = Create3DTextLabel(text,boja, 0, 0, 0, radius, vw, 1);
Attach3DTextLabelToPlayer(ZaIgraca[idigraca], idigraca, offsetx, offsety, offsetz);
}
stock Makni3DTextLabelZaIgraca(idigraca, textid)
{
Delete3DTextLabel(ZaIgraca[idigraca]);
}
Za korisnike koji se redovno muce sa Attachovanjem 3D Texta za igraca :D
Primer:
CMD:test(playerid,params[])
{
if(IsPlayerConnected(playerid))
{
Napravi3DTextLabelZaIgraca(playerid, "Ovo je test", 0xFF0000AA, 0.0,0.0,0.6,20,0);
}
return 1;
}
Obavezno na OnPlayerDisconnect staviti:
Makni3DTextLabelZaIgraca(playerid, ZaIgraca[playerid]);
Ne znam da li ce raditi, ali nebi trebalo da ima problema sa ovime... (nemam sa kim da testam jer nemam opciju port forwardinga)
Nadam se da sam pomogao :D
Ovo ti je nepotrebno GF :
if(IsPlayerConnected(playerid))
http://wiki.sa-mp.com/wiki/DeletePlayer3DTextLabel
SetPlayerHealth(playerid, 100); //ovo 100 je koliko helta ce dobiti 100 je maximalno
SetPlayerArmour(playerid, 100); //takodje
GivePlayerWeapon(playerid, 30, 100); //30 je id oruzja, u ovom slucaju ak47, a 100 je broj metaka
GivePlayerMoney(playerid, 1000); //ovo 1000 je da dobije igrac 1000 $, ako ocete da mu se oduzme novac stavite - ispred broja
Citat: Marley poslato April 04, 2012, 13:12:35 POSLE PODNE
SetPlayerHealth(playerid, 100); //ovo 100 je koliko helta ce dobiti 100 je maximalno
SetPlayerArmour(playerid, 100); //takodje
GivePlayerWeapon(playerid, 30, 100); //30 je id oruzja, u ovom slucaju ak47, a 100 je broj metaka
GivePlayerMoney(playerid, 1000); //ovo 1000 je da dobije igrac 1000 $, ako ocete da mu se oduzme novac stavite - ispred broja
To nije baš niti korisna skripta niti kod. To su osnove i svatko bi to trebao znati.
Citat: Joey_ poslato April 04, 2012, 13:21:39 POSLE PODNE
Citat: Marley poslato April 04, 2012, 13:12:35 POSLE PODNE
SetPlayerHealth(playerid, 100); //ovo 100 je koliko helta ce dobiti 100 je maximalno
SetPlayerArmour(playerid, 100); //takodje
GivePlayerWeapon(playerid, 30, 100); //30 je id oruzja, u ovom slucaju ak47, a 100 je broj metaka
GivePlayerMoney(playerid, 1000); //ovo 1000 je da dobije igrac 1000 $, ako ocete da mu se oduzme novac stavite - ispred broja
To nije baš niti korisna skripta niti kod. To su osnove i svatko bi to trebao znati.
znam ali ipak ima pocetnika koji ni to neznaju, a cesto pitaju kako da napravim gun shop,drogu,hranu ili nesto slicno xd
Trebaju mi kodovi za ono sto se moze mrdati kamara u sampu kao camhack al bolja je, i ono sto svjetla strecaju od vozila, policijskih kad se upali sirena...
Citati ono sto svjetla strecaju od vozila, policijskih kad se upali sirena...
Nerazumem ovaj deo.
Evo ti to kao camhack http://www.mediafire.com/?2tjea4dzwdzqvca
Citat: ...Nikola... poslato April 04, 2012, 17:05:50 POSLE PODNE
Citati ono sto svjetla strecaju od vozila, policijskih kad se upali sirena...
Nerazumem ovaj deo.
Evo ti to kao camhack http://www.mediafire.com/?2tjea4dzwdzqvca
Camhack vec imam, hvala ali ima neke skripte da se mrda kamera na sampu i jos je bolja, a to sto strecaju svjetla ako si ikad uso na ch ili na lsrp tamo policijska vozila imaju tako da prednja svjetla strecaju
http://www.youtube.com/watch?v=LyC3b6gUijE&feature=related
Citat: dknez15 poslato April 04, 2012, 16:42:53 POSLE PODNE
Trebaju mi kodovi za ono sto se moze mrdati kamara u sampu kao camhack al bolja je, i ono sto svjetla strecaju od vozila, policijskih kad se upali sirena...
Ovdje postas korisne komande , a ne trazis !!
to trazis u temi trebam nesto ...
stock SetHealthToAll(Float:health)
{
foreach(Player,i)
{
SetPlayerHealth(i, health);
}
return true;
}
CMD:sethptoall(playerid, params[])
{
if(IsPlayerAdmin(playerid))
{
new id, hp, pName[MAX_PLAYER_NAME], string[128];
if(sscanf(params, "d", hp)) SendClientMessage(playerid, -1, "koristite: /sethptoall <health>");
SetHealthToAll(hp);
GetPlayerName(id, pName, sizeof(pName));
format(string, sizeof(string), "Admin %s, je postavio svim igraÄima health na: %d%", pName, hp);
SendClientMessageToAll(-1, string);
}
else SendClientMessage(playerid, -1,"ERROR: nisi admin");
return 1;
}
Još da je tvoja :D
znali ko kako da ubacim te kodovo npr da promjenim ime servera i to ako neko zna nek se javi Hitno mi je ???Ili ako neko moze da mi pokaze preko TeamViwera??
Citat: Demir-s poslato Maj 22, 2012, 13:56:50 POSLE PODNE
znali ko kako da ubacim te kodovo npr da promjenim ime servera i to ako neko zna nek se javi Hitno mi je ???Ili ako neko moze da mi pokaze preko TeamViwera??
Citaj pravila, krivo si postao.
Al ako vec pitas, di da promjenis u GM-u ili os ovak opcenito u server.cfg-u?
*Dalje nemoj tu pisati nek mi posalji poruku pa cemo rijesiti ;)
i meni treba preveden JunkBuster da li neko ima? :)
Citat: Edis Macic poslato Jun 15, 2012, 12:56:49 POSLE PODNE
Treba mi JunkBuster preveden jel Neko Ima?!
Citat: Brian Brendell poslato Jun 15, 2012, 13:02:19 POSLE PODNE
i meni treba preveden JunkBuster da li neko ima? :)
Cek jeste vi retardiradi? Ne kontam,jel to radite namerno ili sta?
Evo jedne funkcije koja ce mozda nekima koristit. Funkcija provjerava jel sjedalo u odreÄ'enom autu zauzeto:
stock ZauzetoSjedalo(vozilo, sjedalo)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if(GetPlayerVehicleID(i) == vozilo && GetPlayerVehicleSeat(i) == sjedalo) return 1;
}
return 0;
}
a koristi se npr:
stock PutPlayerInFreeSeat(CarID, PlayerID)
{
for(sjedalo = 0; sjedalo < 4; sjedalo++)
{
if(ZauzetoSjedalo(CarID, sjedalo) == 0)
{
PutPlayerInVehicle(PlayerID, CarID, sjedalo);
break;
}
}
return 1;
}
Nadam se da ce vam raditi (nazalost nemam kako isprobati)..
Evo jedna funkcija da vam skrati posao:
#define CreateListDialog(%1,%2,%3,%4); ShowPlayerDialog(%1, %2, DIALOG_STYLE_LIST, %3, %4, "Izaberi", "Odustani");
Primer:
CreateListDialog(playerid,3," Naslov "," Dugme1\nDugme2 ");
Isto tako mozete i za ostale dialoge da napravite,samo zamenite DIALOG_SYLE i prilagodite parametre :)
//na vrhu
#include <zcmd> //to morate skinuti
#include <sscanf> //ovo takodje morate skinuti
#include <double-o-Files> //i ovo isto morate skinuti
new ADM[MAX_PLAYERS];
new upoz[MAX_PLAYERS];
//komanda
CMD:dwarn(playerid,cmdtext[])
{
if(!ADM[playerid]) return SendClientMessage(playerid,COLOR_GREEN,"Nisi ADM"); //adm promijenite po zelji
new id,powod[64];
if(sscanf(cmdtext,"ADM",id,powod)) return SendClientMessage(playerid,COLOR_GREEN,"Koristi: /dwarn [ID] [Razlog]");
if(id < 0 || id > GetMaxPlayers()) return SendClientMessage(playerid,-1,"Igrac nije konektovan!");
Warn[id]++;
new x[124];
format(x,sizeof(x),"Igrac %s (id: %d) je dobio upozorenje (%d/2) od strane ADM. Razlog:%s",PlayerName(id),id,upoz[id],powod);
SendClientMessageToAll(COLOR_ADMIN,x);
if(Warn[id] == 2)
{
new string[124];
format(string,sizeof(string),"Igrac %s (id: %d) je uklonje sa servera! Razlog:%s",PlayerName(id),id);
SendClientMessageToAll(COLOR_ADMIN,string);
print(string);
Kick(id);
return 1;
}
return 1;
}
CMD:dunwarn(playerid,params[])
{
if(!ADM[playerid]) return SendClientMessage(playerid,COLOR_GREEN,"Nisi ADM");
new id = strval(params);
if(id < 0 || id > GetMaxPlayers()) return SendClientMessage(playerid,COLOR_YELLOW,"Koristi: /dunwarn [ID]");
Warn[id] --;
new string[256];
format(string,sizeof(string),"Discret Admin skida upozorenja (%d/2) igracu %s (id: %d)",Warn[id],PlayerName(playerid),playerid);
SendClientMessageToAll(COLOR_ADMIN,string);
return 1;
}
Samo ime kaze sta rade: 8)
////////////////////////////////////////////////////////////////////////////////
stock GivePlayerHealth(playerid,Float:Health)
{
new Float:health; GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,health+Health);
}
////////////////////////////////////////////////////////////////////////////////
stock GivePlayerArmour(playerid,Float:Armour)
{
new Float:armour; GetPlayerHealth(playerid,armour);
SetPlayerArmour(playerid,armour+Armour);
}
////////////////////////////////////////////////////////////////////////////////
@KopriVa malo bolji nacin:
stock GivePlayerHealth(playerid, Float:Health)
{
new Float:currentHealth;
GetPlayerHealth(playerid, currentHealth);
SetPlayerHealth(playerid, floatadd(currentHealth, Health));
}
stock GivePlayerArmour(playerid, Float:Armour)
{
new Float:currentArmour;
GetPlayerHealth(playerid, currentArmour);
SetPlayerArmour(playerid, floatadd(currentArmour, Armour));
}
- Mali speed test
Rezultati:
Tvoja: 6 ms
Moja: 5 ms
Rezultati:
Tvoja: 5 ms
Moja: 5 ms
Rezultati:
Tvoja: 6 ms
Moja: 5 ms
Test skripta: http://pastebin.com/LFpvYcj4
Evo GivePlayerHealth,GivePlayerArmour i GivePlayerScore funkcije ;)
stock GivePlayerHealth(playerid,Float:Health)
{
new Float:health; GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,health+Health);
}
stock GivePlayerArmour(playerid,Float:Armour)
{
new Float:armour; GetPlayerArmour(playerid,armour);
SetPlayerArmour(playerid,armour+Armour);
}
stock GivePlayerScore(playerid,Float:Score)
{
SetPlayerScore(playerid,GetPlayerScore(playerid)+Score);
}
EDIT: Ovo nije moje nasao sam na Sluzbenom SA:MP forumu..
Citat: ¤¤R0x0r¤¤ poslato Avgust 02, 2012, 14:44:51 POSLE PODNE
Evo GivePlayerHealth,GivePlayerArmour i GivePlayerScore funkcije ;)
stock GivePlayerHealth(playerid,Float:Health)
{
new Float:health; GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,health+Health);
}
stock GivePlayerArmour(playerid,Float:Armour)
{
new Float:armour; GetPlayerArmour(playerid,armour);
SetPlayerArmour(playerid,armour+Armour);
}
stock GivePlayerScore(playerid,Float:Score)
{
SetPlayerScore(playerid,GetPlayerScore(playerid)+Score);
}
http://forum.sa-mp.com/showthread.php?t=151210
biÄ pliz
Citat: [BURPG] TiXoR_ poslato Avgust 02, 2012, 17:03:09 POSLE PODNE
Citat: ¤¤R0x0r¤¤ poslato Avgust 02, 2012, 14:44:51 POSLE PODNE
Evo GivePlayerHealth,GivePlayerArmour i GivePlayerScore funkcije ;)
stock GivePlayerHealth(playerid,Float:Health)
{
new Float:health; GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,health+Health);
}
stock GivePlayerArmour(playerid,Float:Armour)
{
new Float:armour; GetPlayerArmour(playerid,armour);
SetPlayerArmour(playerid,armour+Armour);
}
stock GivePlayerScore(playerid,Float:Score)
{
SetPlayerScore(playerid,GetPlayerScore(playerid)+Score);
}
http://forum.sa-mp.com/showthread.php?t=151210
biÄ pliz
Jesam napisao da je moje?
@Dm0nStâ,¬R, ali nigdje nisi naveo da nije tvoje. ;)
Citat: Joey_ poslato Avgust 02, 2012, 23:45:54 POSLE PODNE
@Dm0nStâ,¬R, ali nigdje nisi naveo da nije tvoje. ;)
EDIT..
Citat: Snooker(stari profil) poslato Jul 27, 2012, 08:48:34 PRE PODNE
@KopriVa malo bolji nacin:
stock GivePlayerHealth(playerid, Float:Health)
{
new Float:currentHealth;
GetPlayerHealth(playerid, currentHealth);
SetPlayerHealth(playerid, floatadd(currentHealth, Health));
}
stock GivePlayerArmour(playerid, Float:Armour)
{
new Float:currentArmour;
GetPlayerHealth(playerid, currentArmour);
SetPlayerArmour(playerid, floatadd(currentArmour, Armour));
}
- Mali speed test
Rezultati:
Tvoja: 6 ms
Moja: 5 ms
Rezultati:
Tvoja: 5 ms
Moja: 5 ms
Rezultati:
Tvoja: 6 ms
Moja: 5 ms
Test skripta: http://pastebin.com/LFpvYcj4
Hvala na ispravljanju,radio sam neki war sistem za nekog lika pa sam ovo na brzinu odradio :D
SetPlayerSkinEx
stock SetPlayerSkinEx(skinid, ...)
{
new nArg = numargs();
for(new i = 1; i < nArg; i++)
{
new playerid = getarg(i);
if(IsPlayerConnected(playerid)) SetPlayerSkin(playerid, skinid);
}
}
Upotreba (primer):
SetPlayerSkinEx(115, 3, 2, 1, 10, 9, 6); // 3, 2, 1, 10, 9, 6 su ID-ovi igraca, a 115 je skinid
Moje misljenje:
Nije najbolja funkcija, ali moze da posluzi u dosta slucajeva.
Mislim da ima ljudi koji ovo traze pa eto da objavim
Trebate sistem da vam ucitava admine i online i offline?
Neznate bez MySQL?
Evo samo ovo uradite:
idite u scriptfiles i napravite file:
admini
ovo stavite ko /makeadmin(zamijenjite vasu cmd sa mojom):
if(strcmp(cmd, "/makeadmin", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Koriscenje: /makeadmin [ID Igraca/Dio Imena] [level(1-3)]");
return 1;
}
new para1;
new level;
para1 = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
level = strval(tmp);
if(PlayerInfo[playerid][pAdmin] >= 1340)
{
if(IsPlayerConnected(para1))
{
if(para1 != INVALID_PLAYER_ID)
{
GetPlayerName(para1, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
PlayerInfo[para1][pAdmin] = level;
printf("AdmCmd: Admin je %s-u dao odredjeni admin level.", sendername, giveplayer, level);
format(string, sizeof(string), " Admin vam je dao/oduzeo admin level ", level, sendername);
SendClientMessage(para1, COLOR_WHITE, string);
format(string, sizeof(string), " Dali/oduzeli ste %s-u admin level .", giveplayer,level);
SendClientMessage(playerid, COLOR_WHITE, string);
dfasfascc(para1,level);
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "{FF0000}[ERROR] {FFFFFF}Niste ovlasteni da koristite tu komandu!");
}
}
return 1;
}
A komandu /admini zamijenite sa :
if (strcmp(cmd, "/admini", true) == 0)
{
if(IsPlayerConnected(playerid))
{
new klok[1300];
new mic;
for(new i = 0; i < 100; i++)
{
new FileName[128];
format(FileName, sizeof(FileName), "admini/Admin_%d.ini", i);
if(fexist(FileName) )
{
mic=1;
Admin[i][adIme]= dini_Get(FileName, "Ime" );
Admin[i][adRank]= dini_Int(FileName, "Rank" );
new blabla[300];
new blabla2[300];
if(IsPlayerConnected(GetPlayerIDS(Admin[i][adIme])))
{
format(blabla, sizeof(blabla),"{80FF00}[ONLINE] %s",Admin[i][adIme]);
strcat(klok, blabla);
strcat(klok, "{ffffff} Rank:");
format(blabla2, sizeof(blabla2), "{FFFF00}%d",Admin[i][adRank]);
strcat(klok,blabla2);
strcat(klok, "\n");
}
else if(!IsPlayerConnected(GetPlayerIDS(Admin[i][adIme])))
{
format(blabla, sizeof(blabla) ,"{FFFF00}[OFFLINE]%s",Admin[i][adIme]);
strcat(klok, blabla);
strcat(klok, "{9c9c9c} Rank:");
format(blabla2, sizeof(blabla2), "{80FF00}%d",Admin[i][adRank]);
strcat(klok,blabla2);
strcat(klok, "\n");
}
}
}
if(mic==0)
{
SendClientMessage(playerid,COLOR_GREEN, "Trenutno nema admina online !");
}
else
{ShowPlayerDialog(playerid,36,DIALOG_STYLE_MSGBOX,"Lista admina",klok,"OK","");
}
}
Dodajte i ovaj stock:
stock dfasfascc(giver,level)
{
adminsteras(giver);
if(level != 0)
{
new giveplayer[MAX_PLAYER_NAME];
GetPlayerName(giver, giveplayer, sizeof(giveplayer));
new lolcina = 1;
for(new mica = 1; mica < 100; mica++)
{
new stringers[600];
format(stringers, sizeof(stringers), "admini/Admin_%d.ini", mica);
if(lolcina == 0){return 1;}
if(!fexist(stringers))
{
lolcina = 0;
strmid(Admin[mica][adIme],giveplayer, 0, strlen(giveplayer), 255);
Admin[mica][adRank]=level;
dini_Create(stringers);
SaveAdmine();
}
}
}
return 1;
}
Nadam se da sam nekom pomogo :)
IsValidSkin(skinid)
{
#define MAX_BAD_SKINS 22
new badSkins[MAX_BAD_SKINS] = { 3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 268, 273, 289 };
if (skinid < 0 || skinid > 299) return false;
for (new i = 0; i < MAX_BAD_SKINS; i++) { if (skinid == badSkins[i]) return false; }
#undef MAX_BAD_SKINS
return 1;
}
#define SendFormatMessage(%0,%1,%2,%3,%4) new %0[128];\
format(%0,128,%3,%4);\
SendClientMessage(%1, %2, %0)
%0 - za new (pre ovoga sam koristio statican new ali su se mesali formati pa sam odlucio staviti ovo...
%1 - id igraca kojem saljete poruku
%2 - boja
%3 - poruka
%4 - varijable ...
kako koristiti (primer):
new ime[MAX_PLAYER_NAME]; GetPlayerName(playerid, ime, sizeof(ime));
SendFormatMessage(string,playerid,0xff0000aa,"Moje ime je: %s", ime);
Ne znam koliko je ovo korisno ali mene nervira kad stalno kucam format itd pa sam napravio ovo :D
Neznam jel netko vec napravio nesto ovako ali stavit cu.Dakle ova funkcija provjerava dal je igrac u blizini nekog objekta,naprimjer:
IsPlayerNearObject(playerid,kapija,10);
-playerid-igracev id
-kapija-id objekta
-10-koliko je udaljen od objekta
Funkcija:
stock IsPlayerNearObject(playerid,objectid,range){
new float:ObjX,float:ObjY,float:ObjZ;
GetObjectPos(objectid,ObjX,ObjY,ObjZ);
IsPlayerInRangeOfPoint(playerid,range,Obj:X,Obj:Y,Obj:Z);
return 1;
}
Citat: SlicK poslato Avgust 26, 2012, 21:42:03 POSLE PODNE
Neznam jel netko vec napravio nesto ovako ali stavit cu.Dakle ova funkcija provjerava dal je igrac u blizini nekog objekta,naprimjer:
IsPlayerNearObject(playerid,kapija,10);
-playerid-igracev id
-kapija-id objekta
-10-koliko je udaljen od objekta
Funkcija:
stock IsPlayerNearObject(playerid,objectid,range){
new float:ObjX,float:ObjY,float:ObjZ;
GetObjectPos(objectid,ObjX,ObjY,ObjZ);
IsPlayerInRangeOfPoint(playerid,range,Obj:X,Obj:Y,Obj:Z);
return 1;
}
Imas malu gresku,ovo ce returnovati 1 i ako jeste i ako nije blizu objekta,evo kako bih ja to uradio:
stock IsPlayerNearObject(playerid,objectid,range) {
new Float:Pos[3];
GetObjectPos(objectid,Pos[0],Pos[1],Pos[2]);
IsPlayerInRangeOfPoint(playerid,range,Pos[0],Pos[1],Pos[2]); {
return true; }
return false;
}
//nije radilo
Ne znam da li ce ovo raditi al kolko znam nivo mora je u sampu na 0.0 visini :D
*EDIT:Ne radi ovo moram srediti :P
*EDIT 2:
evo ga testirano :)
stock IgracUMoru(pl)
{
new Float:p[3];
new animacija[32];
new imeanimacije[32];
GetPlayerPos(pl,p[0],p[1],p[2]);
GetAnimationName(GetPlayerAnimationIndex(pl),animacija,32,imeanimacije,32);
if(strcmp(animacija, "SWIM", true) == 0 && p[2] < 0.0 && !IsPlayerInAnyVehicle(pl)) { return true; }
else return false;
}
Jedini "bug" je to sto ako se u moru sa autom ne pokazuje da je u moru sve dok ne izadjete iz auta... :)
Citat: dock poslato Avgust 29, 2012, 02:30:54 PRE PODNE
//nije radilo
Ne znam da li ce ovo raditi al kolko znam nivo mora je u sampu na 0.0 visini :D
*EDIT:Ne radi ovo moram srediti :P
*EDIT 2:
evo ga testirano :)
stock IgracUMoru(pl)
{
new Float:p[3];
new animacija[32];
new imeanimacije[32];
GetPlayerPos(pl,p[0],p[1],p[2]);
GetAnimationName(GetPlayerAnimationIndex(pl),animacija,32,imeanimacije,32);
if(strcmp(animacija, "SWIM", true) == 0 && p[2] < 0.0 && !IsPlayerInAnyVehicle(pl)) { return true; }
else return false;
}
Jedini "bug" je to sto ako se u moru sa autom ne pokazuje da je u moru sve dok ne izadjete iz auta... :)
Hmmm...Oce to radit i kod one brane u LV-u? :-\
Evo upravo sam testirao radi :D ... ukoliko ima neka voda iznad nivoa mora (nez dal je GP jezero vise od 0.0 :D) jednostavno obrisite deo p[2] < 0.0 jer je nepotreban al neka ga za svaki slucaj :D
Citat: dock poslato Avgust 29, 2012, 02:59:40 PRE PODNE
Evo upravo sam testirao radi :D ... ukoliko ima neka voda iznad nivoa mora (nez dal je GP jezero vise od 0.0 :D) jednostavno obrisite deo p[2] < 0.0 jer je nepotreban al neka ga za svaki slucaj :D
Imas par bazena kraj kuca...
Citat: Sany Boy poslato Avgust 12, 2012, 22:52:21 POSLE PODNE
Mislim da ima ljudi koji ovo traze pa eto da objavim
Trebate sistem da vam ucitava admine i online i offline?
Neznate bez MySQL?
Evo samo ovo uradite:
idite u scriptfiles i napravite file:
admini
ovo stavite ko /makeadmin(zamijenjite vasu cmd sa mojom):
if(strcmp(cmd, "/makeadmin", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Koriscenje: /makeadmin [ID Igraca/Dio Imena] [level(1-3)]");
return 1;
}
new para1;
new level;
para1 = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
level = strval(tmp);
if(PlayerInfo[playerid][pAdmin] >= 1340)
{
if(IsPlayerConnected(para1))
{
if(para1 != INVALID_PLAYER_ID)
{
GetPlayerName(para1, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
PlayerInfo[para1][pAdmin] = level;
printf("AdmCmd: Admin je %s-u dao odredjeni admin level.", sendername, giveplayer, level);
format(string, sizeof(string), " Admin vam je dao/oduzeo admin level ", level, sendername);
SendClientMessage(para1, COLOR_WHITE, string);
format(string, sizeof(string), " Dali/oduzeli ste %s-u admin level .", giveplayer,level);
SendClientMessage(playerid, COLOR_WHITE, string);
dfasfascc(para1,level);
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "{FF0000}[ERROR] {FFFFFF}Niste ovlasteni da koristite tu komandu!");
}
}
return 1;
}
A komandu /admini zamijenite sa :
if (strcmp(cmd, "/admini", true) == 0)
{
if(IsPlayerConnected(playerid))
{
new klok[1300];
new mic;
for(new i = 0; i < 100; i++)
{
new FileName[128];
format(FileName, sizeof(FileName), "admini/Admin_%d.ini", i);
if(fexist(FileName) )
{
mic=1;
Admin[i][adIme]= dini_Get(FileName, "Ime" );
Admin[i][adRank]= dini_Int(FileName, "Rank" );
new blabla[300];
new blabla2[300];
if(IsPlayerConnected(GetPlayerIDS(Admin[i][adIme])))
{
format(blabla, sizeof(blabla),"{80FF00}[ONLINE] %s",Admin[i][adIme]);
strcat(klok, blabla);
strcat(klok, "{ffffff} Rank:");
format(blabla2, sizeof(blabla2), "{FFFF00}%d",Admin[i][adRank]);
strcat(klok,blabla2);
strcat(klok, "\n");
}
else if(!IsPlayerConnected(GetPlayerIDS(Admin[i][adIme])))
{
format(blabla, sizeof(blabla) ,"{FFFF00}[OFFLINE]%s",Admin[i][adIme]);
strcat(klok, blabla);
strcat(klok, "{9c9c9c} Rank:");
format(blabla2, sizeof(blabla2), "{80FF00}%d",Admin[i][adRank]);
strcat(klok,blabla2);
strcat(klok, "\n");
}
}
}
if(mic==0)
{
SendClientMessage(playerid,COLOR_GREEN, "Trenutno nema admina online !");
}
else
{ShowPlayerDialog(playerid,36,DIALOG_STYLE_MSGBOX,"Lista admina",klok,"OK","");
}
}
Dodajte i ovaj stock:
stock dfasfascc(giver,level)
{
adminsteras(giver);
if(level != 0)
{
new giveplayer[MAX_PLAYER_NAME];
GetPlayerName(giver, giveplayer, sizeof(giveplayer));
new lolcina = 1;
for(new mica = 1; mica < 100; mica++)
{
new stringers[600];
format(stringers, sizeof(stringers), "admini/Admin_%d.ini", mica);
if(lolcina == 0){return 1;}
if(!fexist(stringers))
{
lolcina = 0;
strmid(Admin[mica][adIme],giveplayer, 0, strlen(giveplayer), 255);
Admin[mica][adRank]=level;
dini_Create(stringers);
SaveAdmine();
}
}
}
return 1;
}
Nadam se da sam nekom pomogo :)
Ovo je Teške radio, mogao si creditse stavit !
lol,ja sam to uradio -.-
Daj balavac nemoj da seres i lazes bezveze kad si ti nub idi igraj Super Mario ili tako nesto de si naso ovde da nas lazes
Citat: dock poslato Avgust 29, 2012, 02:30:54 PRE PODNE
Jedini "bug" je to sto ako se u moru sa autom ne pokazuje da je u moru sve dok ne izadjete iz auta... :)
stock IgracUMoru(pl)
{
new Float:p[3];
new animacija[32];
new imeanimacije[32];
GetPlayerPos(pl,p[0],p[1],p[2]);
GetAnimationName(GetPlayerAnimationIndex(pl),animacija,32,imeanimacije,32);
if(strcmp(animacija, "SWIM", true) == 0 && p[2] < 0.0) { return true; } // obrises !IsPlayerInAnyVehicle(pl)
else return false;
}
Samo obrises
!IsPlayerInAnyVehicle(pl) i trebalo bi da radi bez problema :)
Ako si u vozilu automatski prikazuje da si u vodi .. nez zas.. zato sam stavio to :D
Citat: dock poslato Septembar 01, 2012, 00:39:54 PRE PODNE
Ako si u vozilu automatski prikazuje da si u vodi .. nez zas.. zato sam stavio to :D
Zato sto si vec ispunio ovaj uslov:
&& p[2] < 0.0
Nije, u autu si na visini 100 recimo izbacuje da si u vodi NE znam zasto ali to stoji sve sa razlogom tu :)
Citat: Sany Boy poslato Avgust 31, 2012, 19:19:58 POSLE PODNE
lol,ja sam to uradio -.-
Kako to onda ima u extreme modu, to je TeÅ¡ke radio, sad bi ti se nagovorio svega al uzdržaću se, idi crtaj Å¡umu i izgubi se, ili skoÄi pa pogini.
2 stocka ... jedan za proveru 2D zone drugi za proveru 3D zone
2D zona proverava kvadrat u zonama koje ste odabrali koordinatama minx,maxx,miny i maxy, visina nije bitna dokle god su X i Y koordinate izmedju min i max tacno je. U suprotnom nije tacno (ovo je testano i radi :) )
stock IgracU2DZoni(playerid,Float:minx,Float:miny,Float:maxx,Float:maxy)
{
new Float:p[3];
GetPlayerPos(playerid, p[0],p[1],p[2]);
if(p[0] >= minx && p[0] <= maxx && p[1] >= miny && p[1] <= maxy)
{
return true;
}
else return false;
}
3D zona je nesto kao KUTIJA, sto je dosta korisnije od 2D zone ali su vam potrebne minz i maxz ukoliko se nadjete u kutiji tacno je, ukoliko ne nije (logicno xD) ... (ovo nije testano :) )
stock IgracU3DZoni(playerid,Float:minx,Float:miny,Float:maxx,Float:maxy,Float:minz,Float:maxz)
{
new Float:p[3];
GetPlayerPos(playerid, p[0],p[1],p[2]);
if(p[0] >= minx && p[0] <= maxx && p[1] >= miny && p[1] <= maxy && p[2] >= minz && p[2] <= maxz)
{
return true;
}
else return false;
}
to je to valjda od mene :D
Citat: dock poslato Septembar 12, 2012, 15:49:50 POSLE PODNE
stock IgracU2DZoni(playerid,Float:minx,Float:miny,Float:maxx,Float:maxy)
{
new Float:p[3];
GetPlayerPos(playerid, p[0],p[1],p[2]);
if(p[0] >= minx && p[0] <= maxx && p[1] >= miny && p[1] <= maxy)
{
return true;
}
else return false;
}
Ovo je Yless-ova funkcija!
Evo od mene jedan stock.Sluzi za dobijanje igracevog imena
stock IgracevoIme(playerid)
{
new
pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
return pName;
}
Poz,evo ovo mi netreba pa da dam /lideri
da vidite listu online lidera
//aktivni lideri
if (strcmp(cmd, "/lideri", true) == 0)
{
if(IsPlayerConnected(playerid))
{
SendClientMessage(playerid, COLOR_RED, " ");
SendClientMessage(playerid, COLOR_RED, "-Trenutno Aktivni Lideri na Serveru-");
foreach (Player, i)
{
if(PlayerInfo[i][pLeader] >= 1 && PlayerInfo[i][pLeader] < 17)
{
new admtext[64];
if(PlayerInfo[i][pLeader] == 1) { admtext = "LS PD"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 2) { admtext = "FBI"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 3) { admtext = "SWAT"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 4) { admtext = "Hitna Pomoc"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 5) { admtext = "Yakuza"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 6) { admtext = "LCN"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 7) { admtext = "Gradonacelnik"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 8) { admtext = "Hitman"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 9) { admtext = "Novinari"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 10) { admtext = "Taxi ORG"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 11) { admtext = "SF PD"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 12) { admtext = "Ruska Mafija"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 13) { admtext = "------------"; } //stavite koju ocete org ili stavite vasu novu org
else if(PlayerInfo[i][pLeader] == 14) { admtext = "------------"; } //stavite koju ocete org ili stavite vasu novu org
else if(PlayerInfo[i][pLeader] == 15) { admtext = "Clovers"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 16) { admtext = "Bloods"; } //stavite koju ocete org
else { admtext = "------------"; }
GetPlayerName(i, sendername, sizeof(sendername));
if(AdminDuty[i] == 0)
{
format(string, 256, "%s ( %s )", sendername, admtext);
SendClientMessage(playerid, COLOR_WHITE, string);
}
else
{
format(string, 256, "%s ( %s )", sendername, admtext);
SendClientMessage(playerid, COLOR_YELLOW, string);
}
}
}
}
return 1;
}
to to :D
Citat: [RX-RP]Djordje_Veljkovic poslato Novembar 17, 2012, 17:11:29 POSLE PODNE
Poz,evo ovo mi netreba pa da dam /lideri
da vidite listu online lidera
//aktivni lideri
if (strcmp(cmd, "/lideri", true) == 0)
{
if(IsPlayerConnected(playerid))
{
SendClientMessage(playerid, COLOR_RED, " ");
SendClientMessage(playerid, COLOR_RED, "-Trenutno Aktivni Lideri na Serveru-");
foreach (Player, i)
{
if(PlayerInfo[i][pLeader] >= 1 && PlayerInfo[i][pLeader] < 17)
{
new admtext[64];
if(PlayerInfo[i][pLeader] == 1) { admtext = "LS PD"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 2) { admtext = "FBI"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 3) { admtext = "SWAT"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 4) { admtext = "Hitna Pomoc"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 5) { admtext = "Yakuza"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 6) { admtext = "LCN"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 7) { admtext = "Gradonacelnik"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 8) { admtext = "Hitman"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 9) { admtext = "Novinari"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 10) { admtext = "Taxi ORG"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 11) { admtext = "SF PD"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 12) { admtext = "Ruska Mafija"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 13) { admtext = "------------"; } //stavite koju ocete org ili stavite vasu novu org
else if(PlayerInfo[i][pLeader] == 14) { admtext = "------------"; } //stavite koju ocete org ili stavite vasu novu org
else if(PlayerInfo[i][pLeader] == 15) { admtext = "Clovers"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 16) { admtext = "Bloods"; } //stavite koju ocete org
else { admtext = "------------"; }
GetPlayerName(i, sendername, sizeof(sendername));
if(AdminDuty[i] == 0)
{
format(string, 256, "%s ( %s )", sendername, admtext);
SendClientMessage(playerid, COLOR_WHITE, string);
}
else
{
format(string, 256, "%s ( %s )", sendername, admtext);
SendClientMessage(playerid, COLOR_YELLOW, string);
}
}
}
}
return 1;
}
to to :D
Citaj naslov teme! Ovo bgm nije kroisno ...
Citat: [RX-RP]Djordje_Veljkovic poslato Novembar 17, 2012, 17:11:29 POSLE PODNE
Poz,evo ovo mi netreba pa da dam /lideri
da vidite listu online lidera
//aktivni lideri
if (strcmp(cmd, "/lideri", true) == 0)
{
if(IsPlayerConnected(playerid))
{
SendClientMessage(playerid, COLOR_RED, " ");
SendClientMessage(playerid, COLOR_RED, "-Trenutno Aktivni Lideri na Serveru-");
foreach (Player, i)
{
if(PlayerInfo[i][pLeader] >= 1 && PlayerInfo[i][pLeader] < 17)
{
new admtext[64];
if(PlayerInfo[i][pLeader] == 1) { admtext = "LS PD"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 2) { admtext = "FBI"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 3) { admtext = "SWAT"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 4) { admtext = "Hitna Pomoc"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 5) { admtext = "Yakuza"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 6) { admtext = "LCN"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 7) { admtext = "Gradonacelnik"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 8) { admtext = "Hitman"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 9) { admtext = "Novinari"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 10) { admtext = "Taxi ORG"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 11) { admtext = "SF PD"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 12) { admtext = "Ruska Mafija"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 13) { admtext = "------------"; } //stavite koju ocete org ili stavite vasu novu org
else if(PlayerInfo[i][pLeader] == 14) { admtext = "------------"; } //stavite koju ocete org ili stavite vasu novu org
else if(PlayerInfo[i][pLeader] == 15) { admtext = "Clovers"; } //stavite koju ocete org
else if(PlayerInfo[i][pLeader] == 16) { admtext = "Bloods"; } //stavite koju ocete org
else { admtext = "------------"; }
GetPlayerName(i, sendername, sizeof(sendername));
if(AdminDuty[i] == 0)
{
format(string, 256, "%s ( %s )", sendername, admtext);
SendClientMessage(playerid, COLOR_WHITE, string);
}
else
{
format(string, 256, "%s ( %s )", sendername, admtext);
SendClientMessage(playerid, COLOR_YELLOW, string);
}
}
}
}
return 1;
}
to to :D
Prvo citaj naslov teme.
Drugo ovo si samo izvuko iz nekog moda.
Evo jedne funkcije koja vam može koristiti...
funkciju u koju upiÅ¡ete neki string (brojeve, slova...) i ona OD svakog unesenog znaka uzima ASCII vrijednost (npr. u ASCII tablici je veliko slovo C, 67) i zbraja je sa ostalim znakovima znaÄi ako unesete velika slova C i D funkcija će returnati 135 (jer je C=67 D=68)... znaÄi, na RP serveru svaki igraÄ ima svoje ime (Primjer: Kristijan_Stipic) funkcija ce uzeti ASCII vrijedost od
K-r-i-s-t-i-j-a-n-_-S-t-i-p-i-c
i time će returnati zbroj svih znakova u stringu ASCII vrijednosti, broj!
stock int:getAscii(tekst[]) // by Slay
{
new
ascii = (0);
for(new i=0;i<strlen(tekst);++i)
{
if(tekst == '\0') break;
ascii += (tekst);
}
return (ascii);
}
PRIMJER:
new
primjerVarijabla[MAX_PLAYERS char] = (0);
primjerVarijabla{playerid} = (getAscii(GetName(playerid))); // OVO JE SAMO PRIMJER KAKO DA VRIJEDNOST PRENESETE U VARIJABLU ZA ONE KOJI NE ZNAJU
jao decki proso sam od 1. pa do 19. stranice,nea koju komandu nisam probo xD
hvala svima!
Evo bilo mi je malo dosadno pa sam se sjetio neÄega Å¡ta može koristiti skripterima za RP servere.
Primjer: Ime_Prezime ti je dao $1000.
Primjetio sam da na većinu servera tako ispisuje ime igraÄa, pa sam mislio da bi viÅ¡e RP bilo kada bi bilo
Ime Prezime ti je dao $1000
ZnaÄi da prikazuje ime bez _
stock getName(playerid)
{
new sNick_[MAX_PLAYER_NAME];
GetPlayerName(playerid, sNick_, MAX_PLAYER_NAME);
for(new iX__ = (0); iX__ < strlen(sNick_); ++ iX__) if(sNick_[iX__] == '_') sNick_[iX__] = (32);
return format(sNick_, MAX_PLAYER_NAME, "%s", sNick_), (sNick_);
}
VAŽNO: Skripteri poÄetnici pripazite sa ovom funkcijom ako će te je koristiti, koristite je SAMO tamo di se ispisuje nick, znaÄi tamo di je vidljivo jer ako je koristite za spremanje user accounta ili loadanje tu će nastati problemi tu nastavite koristiti GetName(playerid) i isto tako ako će te promjeniti iz getName u GetName onda će te imati problema sa loadanjem i spremanjem accounta i sa sscanf-om npr. /mojid ime_prezime - neće vam pronaći taj nick jer sscanf koristi GetName za provjeru U vrijednosti u parametrima... Eto, znaÄi ime funkcije nemojte imati kao GetName, osim ako niste poÄetnik pa znate kako se odnositi u tome sluÄaju.
Još jedan primjer, recimo da mi je nick na serveru Kristijan_Stipic
new string[64];
format(string, (sizeof string), "Moje ime je: %s", getName(playerid));
SendClientMessage(playerid, -1, string);
Server će ispisati poruku:
Moje ime je: Kristijan Stipic
@Slay, evo malo bolje verzije (bez for petlje):
stock getName(playerid)
{
new pName[MAX_PLAYER_NAME], usPos;
GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
usPos = strfind(pName, "_");
if (usPos != -1) pName[usPos] = ' ';
return pName;
}
Vidiš nisam se uopće sjetio strfind funkcije, hvala :)
EDIT: Nisam siguran ali mislim da moraš svejedno prvo formatirati cijeli string pa onda ga tek returnati, nisam na svom kompu pa ne mogu testati...
Ne trebaš, testirao sam ja već. :)
Citat: ZHIVAC poslato Januar 20, 2013, 16:17:01 POSLE PODNE
Pomoce Pocetnicima :D
da l si ti covece normalan? ovo su korisne funkcije a ne tutorijali
Evo vam jedna funkcija koja vam omogućuje npr. preko dialoga kada upišete \n da postavi novi red, a ne da piše \n
Primjer u praksi:
Želite preko dialog inputa staviti 3DText string i ako koristite OVO JE NEKI TEKST\nA OVO JE NOVI RED
U 3Dtextu će biti OVO JE NEKI TEKST\nA OVO JE NOVI RED
A trebalo bi biti:
OVO JE NEKI TEKST
A OVO JE NOVI RED
Razlog zašto je to tako je jednostavan, ASCII vrijednost kada koristite \n je 92 110 a novi red (\n) nije \+n nego \n kao cijela vrijednost isto kao što je LJ jedno slovo, a ne L+J (to su dva slova)
stock postaviNoviRed(string[]) // by Slay_
{
for(new i = (0), s = strlen(string); i < s; ++ i)
{
if(string == 92 && string[i+1] == 110) // isto kao da sam koristio string == '\' && string[i+1] == 'n'
{
string = '\n'; // postavlja pravu vrijednost koju vi želite
string[i+1] = '\r'; // vraÄa na poÄetak linije
}
}
}
Sada ako želite npr. spremiti string u neki file, a taj string želite formatirati, nastat će problem jer korištenjem placeholdera %s će te izgubiti \n i to vam može postaviti problem, slijedeća funkcija će vam riješiti taj problem tako da će placeholder %s pripremiti na korištenje \ u stringu, a \ se u stringu može koristiti samo ako stavite duplu, primjer: \\
stock pripremiNoviRed(string[]) // by Slay_
{
for(new i = (0), s = strlen(string); i < s; ++ i)
{
if(string == '\n' && string[i+1] == '\r')
{
string = '\\';
string[i+1] = 'n'; // sprema string kao \n
}
}
}
Poz!
EDIT: ako nekoga zanima neki drugi znakovi ascii tablice ovo vam može pomoći
http://balkan-samp.com/forum/index.php?topic=66952.0
ili
http://www.asciitable.com/index/asciifull.gif
Citat: StjepanS poslato Mart 17, 2013, 10:02:28 PRE PODNE
Napravio sam da ukoliko imate pancirku u bilo kojem trenutku da vam se objekat pancirke stavi.
public OnPlayerUpdate(playerid)
{
new Float:armour;
for(new i=i;i<MAX_PLAYERS;i++)
{
GetPlayerArmour(i, armour);// Funkcija koja provjerava vas Armour
if(armour > 0.0)// Provjerava da li vam je armour veci od 0
{
SetPlayerAttachedObject(i, 6, 373, 1, 0.286006, -0.034657, -0.158132, 67.128456, 21.916156, 33.972290, 1.000000, 1.000000, 1.000000);// Stavlja objekt pancirke na slotu 6
}
else if(armour == 0.0)// Provjerava da li vam je armour na 0
{
RemovePlayerAttachedObject(i, 6);// Uklanja objekt pancirke na slotu 6
}
}
return 0;
}
Naravno ovaj slot se moze mjenjat po vasem izboru, ali mora i na stvaranju i uklanjanju biti isti!
Nema potrebe za for petljom i loop-om igraca jer sam OnPlayerUpdate je tiimer koji se poziva nekoliko puta u sekundi. U prevodu izbaci for petlju i koristi playerid koji vec imas....
Evo jednog naÄina za dinamiÄne sustave kako da napravite da nemorate upisivati ID kuće i tako stalno morate paziti koji je zadnji ID i sliÄno, ovo može raditi na svemu Å¡to spremate kao integer tj. broj npr. COS sustav ako vozila spremate po IDu i onda u scriptfiles/vozila/ imate
1.ini
2.ini
3.ini
i slicno
ali vam je problem kada radite dinamicno da morate upisivati rucno ID, ovo vam moze pomoci, ova funkcija ce automatski pronaci slobodan slot i returnat ga....
stock getEmptyID(const len, const lokacija[])
{
new id = (-1);
for(new loop = (0), provjera = (-1), Data_[64] = "\0"; loop != len; ++ loop)
{
provjera = (loop+1);
format(Data_, (sizeof Data_), lokacija ,provjera);
if(!fexist(Data_))
{
id = (provjera);
break;
}
}
return (id);
}
ZnaÄi sada jednostavno umjesto da admin koji kreira kuću/biz/vozilo mora upisivati ID u koji će spremiti podatke o neÄemu samo stavite npr.
new houseid = getEmptyID(MAX_HOUSES, "Kuce/%d.ini");
i varijabla houseid ce postati vase rjesenje kao prvi slobodan slot... jer npr.
ako u folderu Kuce imate
1.ini
5.ini
9.ini
znaci ako nejde po redu funkcija ce returnati PRVO slobodno mjesto
2 pa 3 pa 4 pa onda 6, 7, 8 i tek onda 10 pa tako na dalje...
evo jedne kratke funkcije koja proverava da li ima ljudi u vozilu stock CheckPeopleInVehicle(vehicleid)
{
foreach(Player, i)
{
if(IsPlayerInAnyVehicle(i))
{
if(GetPlayerVehicleID(i) == vehicleid && i != GetVehicleDriver(vehicleid))
{
return 1;
}
}
}
return 0;
}
GetVehicleDriver nije nativna funkcija...ako postavljas bez nativnih funkcija onda postavi kod
Evo komanda refresh kako bi se vratili u vw 0
YCMDYCMD:refresh(playerid, params[], help)
{
#pragma unused help
#pragma unused params
SetPlayerVirtualWorld(playerid, 0);
SendClientMessage(playerid, -1, "SERVER: Uspjesno ste osvjezeni - ukoliko imate jos problema obratite se adminima");
return 1;
}
ZCMDCMD:refresh(playerid, params[])
{
#pragma unused params
SetPlayerVirtualWorld(playerid, 0);
SendClientMessage(playerid, -1, "SERVER: Uspjesno ste osvjezeni - ukoliko imate jos problema obratite se adminima");
return 1;
}
STRCMP (njega ne preporucujem jer je najsporiji sistem komandi)if(strcmp(cmd, "/refresh", true) == 0)
{
SetPlayerVirtualWorld(playerid, 0);
SendClientMessage(playerid, -1, "SERVER: Uspjesno ste osvjezeni - ukoliko imate jos problema obratite se adminima");
return 1;
}
EDIT: izvinjavam se ucinilo mi se da sam stavio u pdf korisne komande :)
Evo nesto od mene.
Upitanju je VehicleRangeDetector
forward LooDDetectorV(Float:radi, playerid, vehicleid);
public LooDDetectorV(Float:radi, playerid, vehicleid)
{
if(IsPlayerConnected(playerid))
{
new Float:posx, Float:posy, Float:posz;
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
//radi = 2.0; //Trigger Radius
GetVehiclePos(vehicleid, posx, posy, posz);
tempposx = (oldposx -posx);
tempposy = (oldposy -posy);
tempposz = (oldposz -posz);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
}
//Komande su beskorisne,i mozda ce odmognuti nekome
brate pretjera ga ti ako ti je to korisno... i ko to nezna napraviti 2 funkcije?
procitaj naslov teme, dao si 2 bezkorisne i nepravilne komande
Citat: David (Sabljak) A.k.A SABO(T) poslato Jul 19, 2013, 20:10:17 POSLE PODNE
Citat: Willyâ,,¢ poslato Jul 19, 2013, 12:49:54 POSLE PODNE
Evo dve jednostavne komande...
CMD:heal(playerid, params [])
SendClientMessage(playerid,-1 "Izlecili ste se!");
SetPlayerHealth(playerid,100)
CMD:kill(playerid, params [])
SendClientMessage,-1 "Ubili ste se!");
SetPlayerHealth(playerid,0)
i ako ovo uspjies compilat dam ti moderatora :D
LOL :/
btw, da postavim neku funkciju nisam nikad, mozda i ima ova nisam gledo
stock izracunajPostotak(Float:postotak, broj)
{
new Float:kolicina;
kolicina = ((postotak / 100) * (broj));
return kolicina;
}
jednostavno ali eto da postam sta bilo (spamerski post:D)
Veoma koristan kod u sluÄaju pozicioniranja igraÄa.
stock V_SetPos(playerid, Float:x, Float:y, Float:z, Float:a)
{
if(IsPlayerInAnyVehicle(playerid)) { SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z); SetVehicleZAngle(GetPlayerVehicleID(playerid), a); }
else { SetPlayerPos(playerid, x, y, z); SetPlayerFacingAngle(playerid, a); }
return 1;
}
Mali pokazatelj. YCMD:gethere(playerid, params[], help)
{
#pragma unused help
new igr, Float:X, Float:Y, Float:Z, Float:A; GetPlayerPos(playerid, X, Y, Z); GetPlayerFacingAngle(playerid, A);
if(sscanf(params, "")) returm SendClientMessage(playerid, -1, "/gethere [ID/Ime]");
V_SetPos(igr, X, Y, Z+2, A);
return 1;
}
Citat: Vegas. poslato Januar 16, 2014, 23:55:34 POSLE PODNE
Veoma koristan kod u sluÄaju pozicioniranja igraÄa.
stock V_SetPos(playerid, Float:x, Float:y, Float:z, Float:a)
{
if(IsPlayerInAnyVehicle(playerid)) { SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z); SetVehicleZAngle(GetPlayerVehicleID(playerid), a); }
else { SetPlayerPos(playerid, x, y, z); SetPlayerFacingAngle(playerid, a); }
return 1;
}
Mali pokazatelj. YCMD:gethere(playerid, params[], help)
{
#pragma unused help
new igr, Float:X, Float:Y, Float:Z, Float:A; GetPlayerPos(playerid, X, Y, Z); GetPlayerFacingAngle(playerid, A);
if(sscanf(params, "")) returm SendClientMessage(playerid, -1, "/gethere [ID/Ime]");
V_SetPos(igr, X, Y, Z+2, A);
return 1;
}
Ovo bi trebalo postavit igracevo vozilo na koordinate a igraca izbacit iz vozila ? Ili ?
Izvini ako sam te pogresno razumio :D ;)
stock v_SetPos(playerid, Float:x, Float:y, Float:z, Float:a, inte = 0, world = 0, bool:iVehicle = false)
{
if( iVehicle )
{
if( IsPlayerInAnyVehicle( playerid ) )
{
new
veh = GetPlayerVehicleID( playerid );
iSeat = GetPlayerVehicleSeat( playerid );
;
SetVehiclePos( veh, x, y, z );
SetVehicleZAngle( veh, a );
if( inte != 0 )
{
LinkVehicleToInterior( veh, inte );
}
if( world != 0 )
{
SetVehicleVirtualWorld( veh, world );
}
PutPlayerInVehicle( playerid, iSeat );
}
}
else
{
SetPlayerPos( playerid, x, y, z );
SetPlayerInterior( playerid, inte );
SetPlayerVirtualWorld( playerid, world );
}
return 1;
}
Jednostavan headshot sistem za 0.3z
new JeDobioVuglu[MAX_PLAYERS];
forward OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
if(bodypart == HIT_HEAD) // Glava
{
if(PlayerInfo[playerid][AdminNaDušnostiVarijabla] != 1) // Admin protekcija
{
if(AkoJeHitman(issuerid)) // Ako je pripadnik odreÄ'ene organizacije
{
switch(weaponid)
{
case 22,23,24,25,26,27,28,29,30,31,32,33,34: // tip Oružija
{
SetPlayerHealth(playerid, 0);
JeDobioVuglu[playerid] = 1;
}
}
}
else
{
switch(weaponid) // Ako je Snajper
{
case 34:
{
SetPlayerHealth(playerid, 0);
JeDobioVuglu[playerid] = 1;
}
}
}
}
}
if(PlayerInfo[issuerid][JeAdmin] == 1 && PlayerInfo[playerid][AdminNaDužnosti] == 1) // Ako je admin na dužnosti
{
return 0;
}
return 1;
}
Funkcija ako je hitmen
forward AkoJeHitman(playerid);
public AkoJeHitman(playerid)
{
if(IsPlayerConnected(playerid)) // ako je konektovan
{
new leader = PlayerInfo[playerid][pLeader]; // lider
new member = PlayerInfo[playerid][pMember]; // member
if(member==ID ORGANIZACIJE) // ako je member organizacije te i te
{
return 1;
}
else if(leader==ID ORGANIZACIJE) // ako je lider organizacije te i te
{
return 1;
}
}
return 0;
}
AkoJeHitman - zanimljiva funkcija
Citat: Blaeks poslato Februar 17, 2014, 18:33:21 POSLE PODNE
AkoJeHitman - zanimljiva funkcija
Primera radi...
Eto dodata je i primer funkcija ako je hitmen.
...Niko...
lijepo od tebe,ali svakako ne preporucam ovaj kod.
Cemo carijabla i zbog cega je ona integer,ako vec ima potrebe za njom:
JeDobioVuglu
Citat: ×§lเשà¸,, poslato Februar 19, 2014, 09:59:08 PRE PODNE
...Niko...
lijepo od tebe,ali svakako ne preporucam ovaj kod.
Cemo carijabla i zbog cega je ona integer,ako vec ima potrebe za njom:
JeDobioVuglu
Pa ona se može upotrebiti dalje (tipa Hitmen) za ugovore, ostavita je ideja pa ko ima maÅ¡te samo nadograÄ'uje
DijelomiÄno istina, može se koristiti dalje, ali na tebi je da daÅ¡ korisnu skriptu ili kod, a ne varijablu koja se može koristiti dalje; To bi igraÄi sami morali raditi, ukoliko žele. Ovako stavljaÅ¡ totalno bespotrebnu varijablu koja neće biti nigdje koriÅ¡tena osim za assignanje integera "1" njoj.
Citat: LuKsA poslato Februar 26, 2014, 15:15:45 POSLE PODNE
DijelomiÄno istina, može se koristiti dalje, ali na tebi je da daÅ¡ korisnu skriptu ili kod, a ne varijablu koja se može koristiti dalje; To bi igraÄi sami morali raditi, ukoliko žele. Ovako stavljaÅ¡ totalno bespotrebnu varijablu koja neće biti nigdje koriÅ¡tena osim za assignanje integera "1" njoj.
Razumem sad, hvala tebi i mr. Blaeksu na savetima
Po što su ovo korisne/skripte kodovi,npr : možeteli nešto napraviti npr.Materijal kako treba to uraditi u modu i povezati samo sa bandom? nezz smijeli se tražiti zahtjevi ovde,ali po što vidim ne piše nigjde ako sam pogrješio delete odma post :D
Citat: RoleX :) poslato Februar 28, 2014, 01:06:16 PRE PODNE
Po što su ovo korisne/skripte kodovi,npr : možeteli nešto napraviti npr.Materijal kako treba to uraditi u modu i povezati samo sa bandom? nezz smijeli se tražiti zahtjevi ovde,ali po što vidim ne piše nigjde ako sam pogrješio delete odma post :D
nisi shvatio razlog otvaranja teme ? ovo nisu tutoriali
Citat: Blaeks poslato Februar 28, 2014, 01:15:23 PRE PODNE
Citat: RoleX :) poslato Februar 28, 2014, 01:06:16 PRE PODNE
Po što su ovo korisne/skripte kodovi,npr : možeteli nešto napraviti npr.Materijal kako treba to uraditi u modu i povezati samo sa bandom? nezz smijeli se tražiti zahtjevi ovde,ali po što vidim ne piše nigjde ako sam pogrješio delete odma post :D
nisi shvatio razlog otvaranja teme ? ovo nisu tutoriali
Dobro po Å¡to baÅ¡ i nisam skontao ali nema veze,pobriÅ¡i nam postove ako hoÄeÅ¡ :D
Evo korisne stvari.Nije skripta,ali je Online Tidy Pawn.Odnosno ureÄ'uje vaÅ¡ kod.Ukoliko imate primjera radi:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/help", true)){
SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: This is the /help command!");
return 1;
}
return 0;
}
VaÅ¡ kod nakon ureÄ'ivanja ce izgledati ovako:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/help", true))
{
SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: This is the /help command!");
return 1;
}
return 0;
}
Link: http://pliva.bu-rp.info/pawn/ (http://pliva.bu-rp.info/pawn/)
Online editor nisam ja napravio,ali odlucio sam ga postaviti na web jer vidim da imaju mnogi problema s tim.
Pozdrav, pomocu ove komande mozete izbrisati vozilo koje ste uzeli na /veh.To ostane na serveru i onda uzmu igraci i bude dosta problema :D Zato sam odlucio postavit ovaj kod :)
CMD:bveh(playerid, params[], help)
{
new vehicle = GetPlayerVehicleID(playerid);
if(PlayerInfo[playerid][pAdmin] < 1) return SCM(playerid, COLOR_GREY,"{FF6600}* {FFFFFF}Ne mozes ti to!"), PlayerPlaySound(playerid, 1085, 0, 0 , 0);
if(!IsACreatedCar(vehicle)) return SendClientMessage(playerid, COLOR_GREY,"{FF6600}* {FFFFFF}Mozes da obrises samo stvorena vozila");
if(IsPlayerInAnyVehicle(playerid))
{
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
new string[256];
format(string, 256, "{FFFFFF}[{FF6600}WARN{FFFFFF}]: %s {FFFFFF}je unistio vozilo: {FF6600}%d.",sendername,GetPlayerVehicleID(playerid));
SendAdminMessage(-1, string);
DestroyVehicle(GetPlayerVehicleID(playerid));
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, COLOR_GREY, "{FF6600}* {FFFFFF}Vozilo unisteno!");
}
return 1;
}
Korisno ukoliko pravite srw da se netko ne može koristit odreÄ'ene nickove sa drugih srwa od admina,da njima ne može naÅ¡tetiti da izgube pozicije.
public OnPlayerConnect(playerid)
{
new ime[MAX_PLAYER_NAME];
GetPlayerName(playerid, ime, sizeof(ime));
if(strcmp(ime, "Ime_Prezime", false)
SendClientMessage(playerid, -1, "INFO: Razlog.:");
Ban(playerid);
return 1;
}
Posto je ProxDetector zastario (inace sluzio je za slanje poruke u odredjenom rangeu), evo vam nesto savremenije :D
stock SendMessageToRange(color, message[], Float:range, Float:X, Float:Y, Float:Z)
{
foreach(Player, i)
{
if(IsPlayerInRangeOfPoint(i, range, X, Y, Z))
SendClientMessage(i, color, message);
}
return true;
}
Potrevan vam je include "foreach", njega mozete skinuti ovdje: KLIKNI ME (http://forum.sa-mp.com/showthread.php?t=92679).
Primjer koristenja:
public OnPlayerText(playerid, text[])
{
new ime[MAX_PLAYER_NAME], string[128], Float:X, Float:Y, Float:Z;
GetPlayerName(playerid, ime, sizeof(ime));
GetPlayerPos(playerid, X, Y, Z);
format(string, sizeof(string), "%s: %s", ime, text);
SendMessageToRange(-1, string, 20.0, X, Y, Z);
return 0;
}
CREDITS: forum.sa-mp.com
Imao sam potrebu da napravim ovo za jedan sistem, deluje kao fina f-ja koju samp team nije ubacio a trebalo je..
#define OUTPUT_SIZE 128
stock strreplace(string[],strsize,what[],withwhat[]) {
new pos = strfind(string,what,true);
new whatsize = strlen(what);
new withwhatsize = strlen(withwhat);
new currentsize = strlen(string);
if(pos != -1) {
if(currentsize - whatsize + withwhatsize <= strsize) {
strdel(string, pos, pos + whatsize);
strins(string, withwhat, pos, strsize);
}
}
new output[OUTPUT_SIZE]; format(output,OUTPUT_SIZE,"%s",string);
return output;
}
Primer koriscenja:
print(strreplace(string,sizeof(string),"jebem","*****"));
u sustini meni je trebalo zbog dinamicnog sistema bandi za DM server gde ima tagova za nickove.. neke bande imaju tag u formatu [F]IME[A] pa da bih mogao da napravim takve tagove dinamicno koristio sam ovo..
Hope it helps somebody
*OUTPUT_SIZE sam stavio na 128 radi testiranja, ukoliko vam nije potreban toliko veliki output size ili vam je premali vi promenite.
Evo ovako da napiÅ¡em jednu skripticu pomoću koje možete ,u ovom mom sluÄaju prijavljivati bugove IG te se to sacuva u fajl jedan .
Prvo idemo includovati sve potrebno
#include <a_samp>
#include <zcmd>
#include <sscanf2>
Zatim definišemo fajl u koji ćemo spremati bugove u ovom slucaju to je scriptfiles ---> Bug Log.txt
#define FAJL_BUG_LOG "Bug Log.txt"
Zatim pravimo komandu jednu sa kojom prijavljujemo bugove !
CMD:prijavibug(playerid,params[])
{
new result[256];
if(sscanf(params, "s[100]", result)) return SendClientMessage(playerid,-1,"[ Koristi ] /prijavibug [tekst]");
SendClientMessage(playerid,-1,"[BUG] Uspješno ste prijavili bug !");
new unos[200];
format(unos, 200, "|| PRIJAVA BUGA || Igrac :%s || Bug: %s", GetName(playerid),result);
UpisiLog(FAJL_BUG_LOG, unos);
return 1;
}
Ovaj stock je najbitniji u cijeloj skripti jer sa njim cemo upisati bug u datoteku !
stock UpisiLog(fajl[], string[])
{
new unos[256];
new sat, minut, sekund, dan, mesec, godina;
gettime(sat, minut, sekund);
getdate(godina, mesec, dan);
format(unos, 256, "[%d/%d/%d - %d:%d:%d] %s\r\n", dan, mesec, godina, sat, minut, sekund, string);
new File:hFile;
hFile = fopen(fajl, io_append);
fwrite(hFile, unos);
fclose(hFile);
}
stock GetName(playerid)
{
new JName[MAX_PLAYER_NAME];
GetPlayerName(playerid,JName,MAX_PLAYER_NAME);
return JName;
}
stock GetPlayerID(const ime[])
{
for(new i; i<MAX_PLAYERS; i++)
{
new ime2[MAX_PLAYER_NAME];
GetPlayerName(i, ime2, sizeof(ime2));
if(strcmp(ime, ime2, true)==0)
{
return i;
}
}
return -1;
}
s foreachom
stock GetPlayerID(const ime[])
{
foreach(Player, i)
{
new ime2[MAX_PLAYER_NAME];
GetPlayerName(i, ime2, sizeof(ime2));
if(strcmp(ime, ime2, true)==0)
{
return i;
}
}
return -1;
}
pomocu ovog koda mozete otkrit id igraca preko njegovog imena, ja sam sebi ovo jos davno napravio, za prodaju imovine, evo kako se moze iskoristiti:
new idigraca = GetPlayerID(KucaInfo[i][kVlasnik]);//ovaj i oznacava id kuce
if(IsPlayerConnected(idigraca))
{
SCM(idigraca, -1, "Admin je prodo vasu kucu");
PlayerInfo[idigraca][pKucaKljuc] = -1;
}
ovo se odnosi kad igracu prodajete imovinu a on je na serveru, i onda cemo izbacit ovu poruku
Citat: Crazyn3ss poslato April 21, 2015, 15:23:37 POSLE PODNE
stock GetPlayerID(const ime[])
{
for(new i; i<MAX_PLAYERS; i++)
{
new ime2[MAX_PLAYER_NAME];
GetPlayerName(i, ime2, sizeof(ime2));
if(strcmp(ime, ime2, true)==0)
{
return i;
}
}
return -1;
}
pomocu ovog koda mozete otkrit id igraca preko njegovog imena, ja sam sebi ovo jos davno napravio, za prodaju imovine, evo kako se moze iskoristiti:
new IME[MAX_PLAYER_NAME];
new idigraca = GetPlayerID(KucaInfo[i][kVlasnik]);//ovaj i oznacava id kuce
if(IsPlayerConnected(idigraca))
{
SCM(idigraca, -1, "Admin je prodo vasu kucu");
PlayerInfo[idigraca][pKucaKljuc] = -1;
}
Zasto for petlja? Ovdje ti je bolje foreach staviti, da ti petlja prolazi kroz sve online igrace, a sa MAX_PLAYERS ti prolazi kroz sve slotove (zavisi koliko si ih definisao).
znam ja to sve, kod mene je foreach, al da sam njega stavio bio bi komenatar zasto foreach kad ga ne koriste svi, al dodat cu sad i tako
Dali mozete mi dati skriptu kad admin pise na /b da je sa zuta boja a gm kad pise sa plava boja
Citat: Sonwebrt poslato Jul 13, 2015, 23:40:36 POSLE PODNE
Dali mozete mi dati skriptu kad admin pise na /b da je sa zuta boja a gm kad pise sa plava boja
CMD:b(playerid, params[])
{
if (isnull(params)) return SendClientMessage(playerid, -1, "{C0C0C0}USAGE: /b < message >");
new Float:X, Float:Y, Float:Z, String[128], Name[25];
GetPlayerPos(playerid, X, Y, Z);
GetPlayerName(playerid, Name, 25);
if(PlayerInfo[playerid][pAdmin] > 0)
{
format(String, 128, "(( [%d] %s: {FFFF00}%s{FFFFFF} ))", playerid, Name, params);
}
else if(PlayerInfo[playerid][pGM] > 0)
{
format(String, 128, "(( [%d] %s: {0080FF}%s{FFFFFF} ))", playerid, Name, params);
}
else
{
format(String, 128, "(( [%d] %s: %s ))", playerid, Name, params);
}
for(new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerInRangeOfPoint(i, X, Y, Z))
{
SendClientMessage(playerid, 0xC0C0C0FF, String);
}
}
return true;
}
Da li moze neko da mi da sistem admin slotova znci kad postavljam admina pise id level i slot to da se sprema u ini formatu tj da vec imaju ini formati i ono se samo upisuje i brise kad skidam i cmd /admini da pise offline i online admini. Hvala unapred :D
Evo da i ja nesto dam :D. Koristen je ZCMD i sscanf2.
CMD:skin(playerid, params[])
{
new skinnumber, skinid, msg[128];
if(sscanf(params, "s", skinid)) return SendClientMessage(playerid, 0xFFFFAA, "INFO: /skin [skinID]");
else if(skinid < 0 || skinid > 299) return SendClientMessage(playerid, 0xFFFFAA, "Nevazeci skin ID.");
else if(IsPlayerAdmin(playerid) == 1) return SendClientMessage(playerid, 0xFFFFAA, "INFO: /skin [skinID]");
else
{
SetPlayerSkin(playerid, skinid);
skinnumber = GetPlayerSkin(playerid);
format(msg, sizeof(msg), "Uspjesno ti je postavljen skin %s.", skinnumber);
SendClientMessage(playerid, -1, msg);
}
return 1;
}
CMD:kick(playerid, params[])
{
new targetid;
if(sscanf(params, "d", targetid)) return SendClientMessage(playerid, 0xFFFFAA, "INFO: /kick [playerid]");
else if(IsPlayerAdmin(playerid) == 1) return SendClientMessage(playerid, 0xFFFFAA, "Nisi admin.");
else
{
Kick(targetid);
}
return 1;
}
CMD:ban(playerid, params[])
{
new targetid;
if(sscanf(params, "d", targetid)) return SendClientMessage(playerid, 0xFFFFAA, "INFO: /ban [playerid]");
else if(IsPlayerAdmin(playerid) == 1) return SendClientMessage(playerid, 0xFFFFAA, "Nisi admin.");
else
{
Ban(targetid);
}
return 1;
}
I ak moze jedno pitanje. Zasto kad ja napravim filterscript i ubacim, udjem u srw i ne rade komande
Evo za muziku bre !
[pawn]YCMD:playmusic(playerid, params[], help)
{
#pragma unused help
new
link[128];
if (sscanf(params, "s[128]", link)) return SCM (playerid, -1, "/playmusic [link]");
else
{
foreach (Player, i)
{
PlayAudioStreamForPlayer(i, link);
}
}
return 1;
}[/pawn]
Briše oružje
forward RemoveWeapon(playerid);
public RemoveWeapon(playerid)
{
ResetPlayerWeapons(playerid);
SendClientMessage(playerid,red,"Your weapons have been removed.");
return 1;
}
Evo jedno resenje za warning loose indetitaion
Ovo upisati na vrhu skripte
[pawn]#Pragma tabsize 0[/pawn]
Citat: Jevtic Script poslato Decembar 31, 2016, 17:07:46 POSLE PODNE
Evo jedno resenje za warning loose indetitaion
Ovo upisati na vrhu skripte
[pawn]#Pragma tabsize 0[/pawn]
Jeste li vi realni kakve vi gluposti ovde stavljate? Kao prvo mogu da dokazem da ne znas ni sta znaci pragma a ni tabsize a ni 0 ta, a i bas je tesko poravnat linije.
Eh, sada, vidim, da svi objavljuju ovde neke kodove ::)
I resio sam i ja da objavim jedan, dakle, ovo je, kada igrac promasi rcon, server ga banuje. Korisno je. :D
Pod OnRconLoginAttempt ubacite ovo:
public OnRconLoginAttempt(ip[], password[], success)
{
if(!success)
{
printf("Krivi RCON login | IP: %s | Password pokusaja %s",ip, password);
new pip[16];
for(new i=0; i<MAX_PLAYERS; i++)
{
GetPlayerIp(i, pip, sizeof(pip));
if(!strcmp(ip, pip, true))
{
SendClientMessage(i, 0xFFFFFFFF, "Adio, Krivi Password!!");
SetTimerEx("KonektBan", 1000, 0, "d", i);
}
}
}
return 1;
}
Zatim, tamo gde su vam forwardovi.
Ako zelite da ga srw kickuje!
forward KonektKick(playerid);
public KonektKick(playerid)
{
Kick(playerid);
return 1;
}
A, ukoliko zelite da igrac dobije ban, stavite ovako.
forward KonektBan(playerid);
public KonektBan(playerid)
{
Ban(playerid);
return 1;
}
Credits: Skripteru Winchester RP (nisam siguran da je tacno ime)
Kod je uzet sa Winchester RP Skripte!
Kada igraÄ pada može iskoristiti animacije da bi preživio pad, pa evo kako bi mogli da sprijeÄite abuse, samo ovo dodajte kod svake animacije.
[pawn]if( GetPlayerAnimationIndex( playerid ) == 1130 ) return SendClientMessage( playerid, "{FF0000}[GREŠKA] {FFFFFF}Ne možeš sada koristiti animacije!" );[/pawn]
Jel ima neko skriptu za pustanje muzike sa yt.. da je preko linka ili da upisem samo ime pjesme :)
Pozdrav svima,
Vidim da je ovaj PF neaktivan i da treba da se malo ukljucimo. Nista toliko tesko ili sa mukom cu vam pokazati dvije jako korisne komande koju dosta njih trazi a ne znaju kako da to urade.
1. Komanda za davanje plaće administraciji ( Mozete i mijenjati za Promotere/Gamemastere itd ) (http://i.imgur.com/eEwyk3t.jpg?1)
[pawn]
CMD:asplaca(playerid, params[])
{
new AS_PLACA, string[100], e_Name[24];
if(sscanf(params,"d",AS_PLACA)) return SendClientMessage( playerid, -1, "{FF8000}[!]: {FFFFFF}/asplaca (kolicina)");
if(!IsPlayerAdmin(playerid)) return SendClientMessage( playerid, -1, "{FF8000}[!]: {FFFFFF}Nemate ovlasti za koristenje ove komande!");
GetPlayerName(playerid, e_Name,sizeof(e_Name));
format( string,sizeof(string), "{FF8000}[ASPLACA] {FFFFFF}Vlasnik: %s je podijelio placu za administraciju u iznosu ($%d)", e_Name, AS_PLACA );
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) if(IsPlayerAdmin(playerid))
{
GivePlayerMoney( i, AS_PLACA);
SendClientMessage( i, -1, string);
}
return 1;
}
[/pawn]
Postavite svoju provjeru dali je korisnik administrator/vlasnik:[pawn]if(!IsPlayerAdmin(playerid)) return SendClientMessage( playerid, -1, "{FF8000}[!]: {FFFFFF}Nemate ovlasti za koristenje ove komande!");[/pawn]
Postavite provjeru dali je igrac admin ili ti administrator kako bi se samo njima slao novac i poslao poruku[pawn] for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) if(IsPlayerAdmin(playerid)) //To se nalazi tu if(IsPlayerAdmin(playerid))[/pawn]
2. Komanda za izbacivanje suputnika u vozilu- Tu vam necu nista objasnjavati, nadam se da znate cemu ovo sluzi
[pawn]
CMD:izbaciputnika( playerid, params[ ] )
{
new vehicleid, vcount, string[40], e_Name[24], playerstate = GetPlayerState( playerid );
GetPlayerName(playerid, e_Name,sizeof(e_Name));
if ( !IsPlayerInAnyVehicle( playerid ) )
return SendClientMessage( playerid,-1, "Niste ni u jednom vozilu" );
if ( playerstate == PLAYER_STATE_PASSENGER )
return SendClientMessage( playerid,-1, "Suputnici ne mogu korisiti ovu komandu!" );
vehicleid = GetPlayerVehicleID( playerid );
foreach(new i: Player)
{
if ( IsPlayerInVehicle( i, vehicleid ) && i != playerid )
{
vcount++;
RemovePlayerFromVehicle( i );
format( string,sizeof(string), "Izbaceni ste iz %s vozila", e_Name );
SendClientMessage( i, -1, string);
}
}
if ( vcount == 0 )
{
SendClientMessage( playerid,-1, "Nema suputnika u tvom vozilu" );
return 1 ;
}
return 1 ;
}
[/pawn]
-
Uskoro stize jos toga ukoliko nadem vremena. Ako vas nesto zanima i zelite da nesto uradim pitajte ovdje !
Odlicno
Hvala, Inace ako imate kakva pitanja, ili trebate komande bla bla pitajte ovdje. Dok imam vremena uradim nesto na brzinu
Jedan kod koji sam uradio iz dosade, radio sam nekih 5 min (nisam testirao al trebalo bi raditi)
[pawn]CMD:makechatbubble(playerid, params[])
{
new id,tekst[20],drawdistanca,globalni[128];
if(sscanf(params,"u[24]s[20]i",id,tekst,drawdistanca)) return SendClientMessage(playerid, -1, "/makechatbubble (playername/id) (tekst - max 20 slova) (draw distanca)");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "Korisnik nije na serveru!");
if(strlen(tekst) < 1 || strlen(tekst) > 20) return SendClientMessage(playerid, -1, "Tekst ne moze biti manji od 1 slova ili veci od 20 slova!");
if(drawdistanca < 5 || drawdistanca > 15) return SendClientMessage(playerid, -1, "Draw distanca ne moze biti manja od 5 i veca od 15");
SetPlayerChatBubble(id, tekst, 0xFFFFFFFF, drawdistanca, 86400000);
format(globalni,sizeof(globalni), "IgraÄu %s ste postavili chat bubble sa tekstom %s", GetName(id), tekst);
SendClientMessage(playerid, -1, globalni);
format(globalni,sizeof(globalni), "Administrator %s vam je postavio chat bubble sa tekstom %s!", GetName(playerid), tekst);
SendClientMessage(id, -1, globalni);
return 1;
}[/pawn]
[pawn]GetName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
return name;
}
[/pawn]
Evo kod da vam vas server ne crasha.
------------------------------------------------------------
[pawn]//=======================================[ AntiCrasher by Cyllox ]=======================================//
public OnPlayerUpdate(playerid)
{
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) {
new Float:vec[3];
GetPlayerCameraFrontVector(playerid, vec[0], vec[1], vec[2]);
new bool:possible_crasher = false; for (new i = 0; !possible_crasher && i < sizeof(vec); i++)
if (floatabs(vec) > 10.0) possible_crasher = true;
if (possible_crasher) return 1;
}
[/pawn]
------------------------------------------------------------
Nadam se da ce vam pomoci :)
Kao sto kazu, ProxDetector je malo zastareo, pa sam uradio malo jednostavnije:
Inlcude Foreach mozete skinete ovde: KLINKI (http://forum.sa-mp.com/showthread.php?t=92679)
[pawn]stock RadiusPoruka(Float:Radius, playerid, color, const string[])
{
new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
foreach(new i : Player)
{
if( IsPlayerInRangeOfPoint(i, Radius, Pos[0], Pos[1], Pos[2]))
{
SendClientMessage(i, color, string);
}
}
return false;
}[/pawn]
Citat: RESPOSNE poslato Maj 20, 2017, 12:31:44 POSLE PODNE
Kao sto kazu, ProxDetector je malo zastareo, pa sam uradio malo jednostavnije:
Inlcude Foreach mozete skinete ovde: KLINKI (http://forum.sa-mp.com/showthread.php?t=92679)
[pawn]stock RadiusPoruka(Float:Radius, playerid, color, const string[])
{
new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
foreach(new i : Player)
{
if( IsPlayerInRangeOfPoint(i, Radius, Pos[0], Pos[1], Pos[2]))
{
SendClientMessage(i, color, string);
}
}
return false;
}[/pawn]
[pawn]RadiusPoruka(Float:Radius, playerid, color, const string[])
{
new Float:PosX,Float:PosY,Float:PosZ;
GetPlayerPos(playerid, PosX, PosY, PosZ);
foreach(Player, i)
{
if(IsPlayerInRangeOfPoint(i, Radius, PosX, PosY, PosZ))
{
SendClientMessage(i, color, string);
}
}
return false;
}[/pawn]
Eto poboljsano zbog memorije, gj za ovo :D
Evo uradio sam nesto sto je mnogo bolje i manje pisanje na jednoj linija, u vezi dozvole, logovanja i ostalih errora za komande.
[pawn]PRIMER:
if(PlayerInfo[playerid][pAdmin] < 4) return errorMessage(playerid, 1); // Kao sto je uradjeno pod stockom, samo stavimo mesto teksta id te poruke koju zelite da stavite.
if(UlogovanProvera[playerid] == 0) return errorMessage(playerid, 2); // Sada smo stavili id 2 to je kada je igrac na loginu ili registeru da mu izadje text pod id 2.
stock errorMessage(playerid, id)
{
switch(id)
{
case 01: SendErrorMessage(playerid, "Nemate dozvolu da koristite ovu komandu.");
case 02: SendErrorMessage(playerid, "Morate biti ulogovani da bi ste koristili komandu.");
case 03: SendErrorMessage(playerid, "Morate biti na duznosti da bi ste koristili komandu.");
case 04: SendErrorMessage(playerid, "Odabrani igrac je van mreze.");
}
return 1;
}
[/pawn]
Citat: RESPOSNE poslato Maj 21, 2017, 21:01:07 POSLE PODNE
Evo uradio sam nesto sto je mnogo bolje i manje pisanje na jednoj linija, u vezi dozvole, logovanja i ostalih errora za komande.
[pawn]PRIMER:
if(PlayerInfo[playerid][pAdmin] < 4) return errorMessage(playerid, 1); // Kao sto je uradjeno pod stockom, samo stavimo mesto teksta id te poruke koju zelite da stavite.
if(UlogovanProvera[playerid] == 0) return errorMessage(playerid, 2); // Sada smo stavili id 2 to je kada je igrac na loginu ili registeru da mu izadje text pod id 2.
stock errorMessage(playerid, id)
{
switch(id)
{
case 01: SendErrorMessage(playerid, "Nemate dozvolu da koristite ovu komandu.");
case 02: SendErrorMessage(playerid, "Morate biti ulogovani da bi ste koristili komandu.");
case 03: SendErrorMessage(playerid, "Morate biti na duznosti da bi ste koristili komandu.");
case 04: SendErrorMessage(playerid, "Odabrani igrac je van mreze.");
}
return 1;
}
[/pawn]
Dobra ideja, good job. :)
Citat: Åukmember=1996][/member] link=topic=4245.msg727852#msg727852 date=1495382000]
Citat: RESPOSNE poslato Maj 20, 2017, 12:31:44 POSLE PODNE
Kao sto kazu, ProxDetector je malo zastareo, pa sam uradio malo jednostavnije:
Inlcude Foreach mozete skinete ovde: KLINKI (http://forum.sa-mp.com/showthread.php?t=92679)
[pawn]stock RadiusPoruka(Float:Radius, playerid, color, const string[])
{
new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
foreach(new i : Player)
{
if( IsPlayerInRangeOfPoint(i, Radius, Pos[0], Pos[1], Pos[2]))
{
SendClientMessage(i, color, string);
}
}
return false;
}[/pawn]
[pawn]RadiusPoruka(Float:Radius, playerid, color, const string[])
{
new Float:PosX,Float:PosY,Float:PosZ;
GetPlayerPos(playerid, PosX, PosY, PosZ);
foreach(Player, i)
{
if(IsPlayerInRangeOfPoint(i, Radius, PosX, PosY, PosZ))
{
SendClientMessage(i, color, string);
}
}
return false;
}[/pawn]
Eto poboljsano zbog memorije, gj za ovo :D
Hvala :)
Citat: anDro_ poslato Maj 21, 2017, 21:04:41 POSLE PODNE
Citat: RESPOSNE poslato Maj 21, 2017, 21:01:07 POSLE PODNE
Evo uradio sam nesto sto je mnogo bolje i manje pisanje na jednoj linija, u vezi dozvole, logovanja i ostalih errora za komande.
[pawn]PRIMER:
if(PlayerInfo[playerid][pAdmin] < 4) return errorMessage(playerid, 1); // Kao sto je uradjeno pod stockom, samo stavimo mesto teksta id te poruke koju zelite da stavite.
if(UlogovanProvera[playerid] == 0) return errorMessage(playerid, 2); // Sada smo stavili id 2 to je kada je igrac na loginu ili registeru da mu izadje text pod id 2.
stock errorMessage(playerid, id)
{
switch(id)
{
case 01: SendErrorMessage(playerid, "Nemate dozvolu da koristite ovu komandu.");
case 02: SendErrorMessage(playerid, "Morate biti ulogovani da bi ste koristili komandu.");
case 03: SendErrorMessage(playerid, "Morate biti na duznosti da bi ste koristili komandu.");
case 04: SendErrorMessage(playerid, "Odabrani igrac je van mreze.");
}
return 1;
}
[/pawn]
Dobra ideja, good job. :)
Hvala :)
Uradio sam System Reporta, Svako ko zeli da koristi ovaj system neka prilagodi svom modu.
[pawn]//==============================================================================
// SYSTEM REPORT
// SCRIPTED BY RESPONSE
// VERSION v1.0
//==============================================================================
#include <YSI\y_hooks>
#include <YSI\y_va>
#include <sscanf2>
#include <zcmd>
//==============================================================================
#define MAX_REPORTS 10
//==============================================================================
enum report
{
report_ID,
report_Name[MAX_PLAYER_NAME+1],
report_Text[200],
report_Answer[200],
}
new reportInfo[MAX_REPORTS][report];
//==============================================================================
enum fullReport
{
full_Reports,
}
new fullInfo[fullReport];
//==============================================================================
enum playerReport
{
player_Report,
player_Reported,
player_Reports[200],
}
new playerInfo[MAX_PLAYERS][playerReport];
//==============================================================================
// Moze da stavite komandu CMD: ili YCMD:(TO AKO KORISTITE y_commands);
command(report, playerid, params[])
{
new text[200];
if(playerInfo[playerid][player_Report] == 1) return SendClientMessage(playerid, -1, "Vec imate postavljen report!");
if(fullInfo[full_Reports] == 10) return SendClientMessage(playerid, -1, "Trenutno ne mozete postaviti report!");
if(sscanf(params, "s[200]", text)) return SendClientMessage(playerid, -1, "/report [Text]");
creatingReport(reportingID, text, GetName(playerid));
fullInfo[full_Reports]++;
playerInfo[playerid][player_Reported] = fullInfo[full_Reports];
SendClientMessage(playerid, -1, "Vas report je poslat, administracija ga trenutno obradjuje!");
SendClientMessage(playerid, -1, "Da vidite odgovor na vas report kucajte -> '/viewasnwer'.");
return 1;
}
//==============================================================================
// Moze da stavite komandu CMD: ili YCMD:(TO AKO KORISTITE y_commands);
command(viewanswer, playerid, params[])
{
new id = playerInfo[playerid][player_Reported];
if(playerInfo[playerid][player_Report] == 0) return SendClientMessage(playerid, -1, "Nemate postavljen report!");
format(playerInfo[playerid][player_Reports], 200, reportInfo[id][report_Answer]);
va_SendClientMessage(playerid, -1, "'%s'.", playerInfo[playerid][player_Reports]);
playerInfo[playerid][player_Report] = 0;
playerInfo[playerid][player_Reported] = -1;
format(playerInfo[playerid][player_Reports], 200, "Empty");
fullInfo[full_Reports]--;
return 1;
}
//==============================================================================
stock creatingReport(reportingID, reportingText[200], reportingName[MAX_PLAYER_NAME+1]) // Kreiraj report fajl;
{
reportInfo[reportingID][report_ID] = fullInfo[full_Reports];
format(reportInfo[reportingID][report_Name], MAX_PLAYER_NAME+1, reportingName);
format(reportInfo[reportingID][report_Text], 200, reportingText);
format(reportInfo[reportingID][report_Answer], 200, "Empty");
return 1;
}
//==============================================================================[/pawn]
Citat: RESPOSNE poslato Maj 28, 2017, 20:25:17 POSLE PODNE
Uradio sam System Reporta, Svako ko zeli da koristi ovaj system neka prilagodi svom modu.
[pawn]//==============================================================================
// SYSTEM REPORT
// SCRIPTED BY RESPONSE
// VERSION v1.0
//==============================================================================
#include <YSI\y_hooks>
#include <YSI\y_va>
#include <sscanf2>
#include <zcmd>
//==============================================================================
#define MAX_REPORTS 10
//==============================================================================
enum report
{
report_ID,
report_Name[MAX_PLAYER_NAME+1],
report_Text[200],
report_Answer[200],
}
new reportInfo[MAX_REPORTS][report];
//==============================================================================
enum fullReport
{
full_Reports,
}
new fullInfo[fullReport];
//==============================================================================
enum playerReport
{
player_Report,
player_Reported,
player_Reports[200],
}
new playerInfo[MAX_PLAYERS][playerReport];
//==============================================================================
// Moze da stavite komandu CMD: ili YCMD:(TO AKO KORISTITE y_commands);
command(report, playerid, params[])
{
new text[200];
if(playerInfo[playerid][player_Report] == 1) return SendClientMessage(playerid, -1, "Vec imate postavljen report!");
if(fullInfo[full_Reports] == 10) return SendClientMessage(playerid, -1, "Trenutno ne mozete postaviti report!");
if(sscanf(params, "s[200]", text)) return SendClientMessage(playerid, -1, "/report [Text]");
creatingReport(reportingID, text, GetName(playerid));
fullInfo[full_Reports]++;
playerInfo[playerid][player_Reported] = fullInfo[full_Reports];
SendClientMessage(playerid, -1, "Vas report je poslat, administracija ga trenutno obradjuje!");
SendClientMessage(playerid, -1, "Da vidite odgovor na vas report kucajte -> '/viewasnwer'.");
return 1;
}
//==============================================================================
// Moze da stavite komandu CMD: ili YCMD:(TO AKO KORISTITE y_commands);
command(viewanswer, playerid, params[])
{
new id = playerInfo[playerid][player_Reported];
if(playerInfo[playerid][player_Report] == 0) return SendClientMessage(playerid, -1, "Nemate postavljen report!");
format(playerInfo[playerid][player_Reports], 200, reportInfo[id][report_Answer]);
va_SendClientMessage(playerid, -1, "'%s'.", playerInfo[playerid][player_Reports]);
playerInfo[playerid][player_Report] = 0;
playerInfo[playerid][player_Reported] = -1;
format(playerInfo[playerid][player_Reports], 200, "Empty");
fullInfo[full_Reports]--;
return 1;
}
//==============================================================================
stock creatingReport(reportingID, reportingText[200], reportingName[MAX_PLAYER_NAME+1]) // Kreiraj report fajl;
{
reportInfo[reportingID][report_ID] = fullInfo[full_Reports];
format(reportInfo[reportingID][report_Name], MAX_PLAYER_NAME+1, reportingName);
format(reportInfo[reportingID][report_Text], 200, reportingText);
format(reportInfo[reportingID][report_Answer], 200, "Empty");
return 1;
}
//==============================================================================[/pawn]
Izaci ce vam Error za GetName, evo vam i taj kod, naravno ko nema u modu, a ko ima, nece da pravi nikakve probleme, enjoy! :D
[pawn]stock GetName(playerid)
{
new Ime_Igraca[MAX_PLAYER_NAME];
GetPlayerName(playerid, Ime_Igraca, MAX_PLAYER_NAME);
return Ime_Igraca;
}[/pawn]
Citat: RESPOSNE poslato Maj 28, 2017, 20:31:21 POSLE PODNE
Citat: RESPOSNE poslato Maj 28, 2017, 20:25:17 POSLE PODNE
Uradio sam System Reporta, Svako ko zeli da koristi ovaj system neka prilagodi svom modu.
[pawn]//==============================================================================
// SYSTEM REPORT
// SCRIPTED BY RESPONSE
// VERSION v1.0
//==============================================================================
#include <YSI\y_hooks>
#include <YSI\y_va>
#include <sscanf2>
#include <zcmd>
//==============================================================================
#define MAX_REPORTS 10
//==============================================================================
enum report
{
report_ID,
report_Name[MAX_PLAYER_NAME+1],
report_Text[200],
report_Answer[200],
}
new reportInfo[MAX_REPORTS][report];
//==============================================================================
enum fullReport
{
full_Reports,
}
new fullInfo[fullReport];
//==============================================================================
enum playerReport
{
player_Report,
player_Reported,
player_Reports[200],
}
new playerInfo[MAX_PLAYERS][playerReport];
//==============================================================================
// Moze da stavite komandu CMD: ili YCMD:(TO AKO KORISTITE y_commands);
command(report, playerid, params[])
{
new text[200];
if(playerInfo[playerid][player_Report] == 1) return SendClientMessage(playerid, -1, "Vec imate postavljen report!");
if(fullInfo[full_Reports] == 10) return SendClientMessage(playerid, -1, "Trenutno ne mozete postaviti report!");
if(sscanf(params, "s[200]", text)) return SendClientMessage(playerid, -1, "/report [Text]");
creatingReport(reportingID, text, GetName(playerid));
fullInfo[full_Reports]++;
playerInfo[playerid][player_Reported] = fullInfo[full_Reports];
SendClientMessage(playerid, -1, "Vas report je poslat, administracija ga trenutno obradjuje!");
SendClientMessage(playerid, -1, "Da vidite odgovor na vas report kucajte -> '/viewasnwer'.");
return 1;
}
//==============================================================================
// Moze da stavite komandu CMD: ili YCMD:(TO AKO KORISTITE y_commands);
command(viewanswer, playerid, params[])
{
new id = playerInfo[playerid][player_Reported];
if(playerInfo[playerid][player_Report] == 0) return SendClientMessage(playerid, -1, "Nemate postavljen report!");
format(playerInfo[playerid][player_Reports], 200, reportInfo[id][report_Answer]);
va_SendClientMessage(playerid, -1, "'%s'.", playerInfo[playerid][player_Reports]);
playerInfo[playerid][player_Report] = 0;
playerInfo[playerid][player_Reported] = -1;
format(playerInfo[playerid][player_Reports], 200, "Empty");
fullInfo[full_Reports]--;
return 1;
}
//==============================================================================
stock creatingReport(reportingID, reportingText[200], reportingName[MAX_PLAYER_NAME+1]) // Kreiraj report fajl;
{
reportInfo[reportingID][report_ID] = fullInfo[full_Reports];
format(reportInfo[reportingID][report_Name], MAX_PLAYER_NAME+1, reportingName);
format(reportInfo[reportingID][report_Text], 200, reportingText);
format(reportInfo[reportingID][report_Answer], 200, "Empty");
return 1;
}
//==============================================================================[/pawn]
Izaci ce vam Error za GetName, evo vam i taj kod, naravno ko nema u modu, a ko ima, nece da pravi nikakve probleme, enjoy! :D
[pawn]stock GetName(playerid)
{
new Ime_Igraca[MAX_PLAYER_NAME];
GetPlayerName(playerid, Ime_Igraca, MAX_PLAYER_NAME);
return Ime_Igraca;
}[/pawn]
stock izbriši, stavi samo
[pawn]GetName(playerid)
{
new Ime_Igraca[MAX_PLAYER_NAME];
GetPlayerName(playerid, Ime_Igraca, MAX_PLAYER_NAME);
return Ime_Igraca;
}
[/pawn]
TakoÄ'er rekao sam ti i za bool, gj :)
kakve veze ima to sa stockom vidim spominjes vec par puta ?
to apsolutno nikakve veze nema, stock koristis samo ako funkciju pozivas vise puta ili nikako a suprotno ako je pozivas sigurno.
sve je stvar navike ako je navikao sa stockom neka pise tako, to je isto kao da si ti desnjak i neko ti dodje i natera da pises levom rukom.
Citat: Cadilab poslato Maj 29, 2017, 20:04:01 POSLE PODNE
kakve veze ima to sa stockom vidim spominjes vec par puta ?
to apsolutno nikakve veze nema, stock koristis samo ako funkciju pozivas vise puta ili nikako a suprotno ako je pozivas sigurno.
sve je stvar navike ako je navikao sa stockom neka pise tako, to je isto kao da si ti desnjak i neko ti dodje i natera da pises levom rukom.
stock se većinom koristi samo u includeovima, jer tu ne znaš hoće li onaj koji bude koristio taj include pozivati ikako tu funkciju.
> http://wiki.sa-mp.com/wiki/Stock#stock
Citatstock is used to declare variables and functions which may not be used but which you don't want to generate unused warnings for
@Cadilab
to je do njih kako vec koriste, ono sto ja pokusavam reci
CitatAdding that modifier won't make a difference, it will NEVER make your function faster nor slower. Your piece of code reflects the optimization and the speed of it. For example, calculating something very intensive in your function will obviously make that function "abit" slower than the normal one having nothing just a "printf()" statement for say.
Citat: Cadilab poslato Maj 29, 2017, 20:23:23 POSLE PODNE
to je do njih kako vec koriste, ono sto ja pokusavam reci
CitatAdding that modifier won't make a difference, it will NEVER make your function faster nor slower. Your piece of code reflects the optimization and the speed of it. For example, calculating something very intensive in your function will obviously make that function "abit" slower than the normal one having nothing just a "printf()" statement for say.
Ja samo preporucujem da koriste bez stocka, jer to prikriva warninge, ako ne koristis, a nekad i kad koristis stock, a ne koristis tu funkciju, ne prikazuje ti warning, a nepotrebna ti je, tkd
Pa koliko zna stock ne kvari nista, jeste da neko koristi bez stocka, ali ja sam navikao za stock i to je to. Problem nije nikakav sa stockom ili ne, bitno je da funkcionise kako treba;)
Cemu toliki problemi dali uzimat sa
stock ili bez. S ovim primjerom što je pokazao
@Åuk@ dobit ce te "warn" u slucaju da ne koristis tu "funkciju". Prvu samo ignorira/unused
Citat: Bolex_ poslato Maj 29, 2017, 21:51:11 POSLE PODNE
Cemu toliki problemi dali uzimat sa stock ili bez. S ovim primjerom Å¡to je pokazao @Åuk@ dobit ce te "warn" u slucaju da ne koristis tu "funkciju". Prvu samo ignorira/unused
dap :3
Ev i ja da objavim ingame postavljanje opena nadam se da ce nekom posluzit
Komanda pomocu koje ce te mjenjati hostname ali ja cu vam dati samo za postavljanje opena ingame
[pawn]#define Info(%0,%1) SendClientMessage(%0, -1, "{0B68F4}Info: {FFFFFF}"%1)[/pawn]
[pawn]#define SERVER "{0B68F4}"
#define ZELENA "{408080}"[/pawn]
[pawn]YCMD:server(playerid, params[], help)
{
#pragma unused help
D_Show(playerid, 0, DSL, ""SERVER"Balkan Gaming - Changer",""BELA"Hostname", odaberi, odustani);
return 1;
}[/pawn]
[pawn]Dialog:0(playerid, response, listitem, inputtext[])
{
if(!response) return 1;
D_Show(playerid, 1, DSL, ""SERVER"Balkan Gaming Hostname",""BELA"[1] Open", odaberi, odustani);
return 1;
}[/pawn]
[pawn]Dialog:1(playerid, response, listitem, inputtext[])
{
if(!response) return 1;
switch(listitem)
{
case 0:
{
D_Show(playerid, 2, DSI, ""SERVER"Balkan Gaming Hostname",""BELA"Unesite datum i vrijeme u koliko ce se sati otvoriti server!", unesi, odustani);
}
}
}[/pawn]
[pawn]Dialog:2(playerid, response, listitem, inputtext[])
{
if(!response) return 1;
if(response)
{
new string[500], dan, mjesec, sat, minuta, ezy[500], ezyy[500];
if(sscanf(inputtext, "iiii", dan, mjesec, sat, minuta)) return D_Show(playerid, 348, DSI, ""SERVER"Balkan Gaming Hostname",""BELA"Unesite datum i vrijeme u koliko ce se sati otvoriti server!", unesi, odustani);
if(dan < 0 || dan > 31) return Info(playerid, "U mjesecu ne moze biti vise od 31 dana i manje od 0!");
if(mjesec < 0 || mjesec > 12) return Info(playerid, "U godini ne moze biti vise od 12 mjeseci i manje od 0!");
// ================================================================== //
if(sat < 0 || sat > 24) return Info(playerid, "U danu ne moze biti vise od 24 sata i manje od 0!");
if(minuta < 0 || minuta > 60) return Info(playerid, "U satu ne moze biti vise od 60 minuta i manje od 0!");
format(string, sizeof(string), "hostname BG: Big Open [ %d.%d || %d:%dH ] || Ocekujemo vas!", dan, mjesec, sat ,minuta);
SendRconCommand(string);
// ================================================================== //
format(ezy, sizeof(ezy), ""SERVER"BIG OPEN: "BELA"Veliko Otvorenjo zakazano je za %d.%d u %d:%d sati.", dan, mjesec, sat ,minuta);
format(ezyy, sizeof(ezyy), "Owner "BELA"%s "ZELENA"je zakazao datum za Veliko Otvorenje "BELA"!", GetName(playerid));
SCM(playerid, -1, ezy);
SCM(playerid, zelena, ezyy);
SendRconCommand("password bgamingscript");
// ================================================================== //
}
}[/pawn]
Napomena: Ja sam koristio easyDialog za krieranje dialoga vi mozete staviti ispor OnDialogResponse takoder ako imate dialogid sa 0,1,2 izmjenite jer ce doci do mjesanja dialoga, i ako neku boju nisam gore define mozete je sami definisati
Ako bude kakvih problema javite se ptem PM da sredimo
Citat: нÑÏ...Ñ•Ñ,αиσνιÏ, poslato Jun 02, 2017, 00:31:55 PRE PODNE
Ev i ja da objavim ingame postavljanje opena nadam se da ce nekom posluzit
Komanda pomocu koje ce te mjenjati hostname ali ja cu vam dati samo za postavljanje opena ingame
[pawn]#define Info(%0,%1) SendClientMessage(%0, -1, "{0B68F4}Info: {FFFFFF}"%1)[/pawn]
[pawn]#define SERVER "{0B68F4}"
#define ZELENA "{408080}"[/pawn]
[pawn]YCMD:server(playerid, params[], help)
{
#pragma unused help
D_Show(playerid, 0, DSL, ""SERVER"Balkan Gaming - Changer",""BELA"Hostname", odaberi, odustani);
return 1;
}[/pawn]
[pawn]Dialog:0(playerid, response, listitem, inputtext[])
{
if(!response) return 1;
D_Show(playerid, 1, DSL, ""SERVER"Balkan Gaming Hostname",""BELA"[1] Open", odaberi, odustani);
return 1;
}[/pawn]
[pawn]Dialog:1(playerid, response, listitem, inputtext[])
{
if(!response) return 1;
switch(listitem)
{
case 0:
{
D_Show(playerid, 2, DSI, ""SERVER"Balkan Gaming Hostname",""BELA"Unesite datum i vrijeme u koliko ce se sati otvoriti server!", unesi, odustani);
}
}
}[/pawn]
[pawn]Dialog:2(playerid, response, listitem, inputtext[])
{
if(!response) return 1;
if(response)
{
new string[500], dan, mjesec, sat, minuta, ezy[500], ezyy[500];
if(sscanf(inputtext, "iiii", dan, mjesec, sat, minuta)) return D_Show(playerid, 348, DSI, ""SERVER"Balkan Gaming Hostname",""BELA"Unesite datum i vrijeme u koliko ce se sati otvoriti server!", unesi, odustani);
if(dan < 0 || dan > 31) return Info(playerid, "U mjesecu ne moze biti vise od 31 dana i manje od 0!");
if(mjesec < 0 || mjesec > 12) return Info(playerid, "U godini ne moze biti vise od 12 mjeseci i manje od 0!");
// ================================================================== //
if(sat < 0 || sat > 24) return Info(playerid, "U danu ne moze biti vise od 24 sata i manje od 0!");
if(minuta < 0 || minuta > 60) return Info(playerid, "U satu ne moze biti vise od 60 minuta i manje od 0!");
format(string, sizeof(string), "hostname BG: Big Open [ %d.%d || %d:%dH ] || Ocekujemo vas!", dan, mjesec, sat ,minuta);
SendRconCommand(string);
// ================================================================== //
format(ezy, sizeof(ezy), ""SERVER"BIG OPEN: "BELA"Veliko Otvorenjo zakazano je za %d.%d u %d:%d sati.", dan, mjesec, sat ,minuta);
format(ezyy, sizeof(ezyy), "Owner "BELA"%s "ZELENA"je zakazao datum za Veliko Otvorenje "BELA"!", GetName(playerid));
SCM(playerid, -1, ezy);
SCM(playerid, zelena, ezyy);
SendRconCommand("password bgamingscript");
// ================================================================== //
}
}[/pawn]
Napomena: Ja sam koristio easyDialog za krieranje dialoga vi mozete staviti ispor OnDialogResponse takoder ako imate dialogid sa 0,1,2 izmjenite jer ce doci do mjesanja dialoga, i ako neku boju nisam gore define mozete je sami definisati
Ako bude kakvih problema javite se ptem PM da sredimo
Nista pretesko,
imas gresku u kodu
-
[pawn]return D_Show(playerid,
348, DSI, ""SERVER"Bal[/pawn]
Trebao si provjeru napraviti za sve mjesece kad vec to radis
[pawn]if(dan < 0 || dan > 31) return Info(playerid, "U mjesecu ne moze biti vise od 31 dana i manje od 0!");[/pawn]
Npr da ako stavi mjesec 2, da ne moze vise od 28 dana itd
Moglo se sve oko lagano uraditi u jednoj komandi al et,
i ovo...
[pawn]new string[500];[/pawn]...
Citat: Åukmember=1996][/member] link=topic=4245.msg730661#msg730661 date=1496368756]
Nista pretesko,
imas gresku u kodu
-
[pawn]return D_Show(playerid, 348, DSI, ""SERVER"Bal[/pawn]
Trebao si provjeru napraviti za sve mjesece kad vec to radis
[pawn]if(dan < 0 || dan > 31) return Info(playerid, "U mjesecu ne moze biti vise od 31 dana i manje od 0!");[/pawn]
Npr da ako stavi mjesec 2, da ne moze vise od 28 dana itd
Moglo se sve oko lagano uraditi u jednoj komandi al et,
i ovo...
[pawn]new string[500];[/pawn]...
Nema potrebe praviti provjeru za sve mjesece imas mjesec i dan koji postavljas za open i ja da sam htio uraditi u jednoj komandi uradio bi
Citat: нÑÏ...Ñ•Ñ,αиσνιÏ, poslato Jun 02, 2017, 07:34:11 PRE PODNE
Citat: Åukmember=1996][/member] link=topic=4245.msg730661#msg730661 date=1496368756]
Nista pretesko,
imas gresku u kodu
-
[pawn]return D_Show(playerid, 348, DSI, ""SERVER"Bal[/pawn]
Trebao si provjeru napraviti za sve mjesece kad vec to radis
[pawn]if(dan < 0 || dan > 31) return Info(playerid, "U mjesecu ne moze biti vise od 31 dana i manje od 0!");[/pawn]
Npr da ako stavi mjesec 2, da ne moze vise od 28 dana itd
Moglo se sve oko lagano uraditi u jednoj komandi al et,
i ovo...
[pawn]new string[500];[/pawn]...
Nema potrebe praviti provjeru za sve mjesece imas mjesec i dan koji postavljas za open i ja da sam htio uraditi u jednoj komandi uradio bi
pda, stavis open u drugom mjesecu 31og dana.., ako vec radis, misli na sve
Citat: Åukmember=1996][/member] link=topic=4245.msg731193#msg731193 date=1496490640]
Citat: нÑÏ...Ñ•Ñ,αиσνιÏ, poslato Jun 02, 2017, 07:34:11 PRE PODNE
Citat: Åukmember=1996][/member] link=topic=4245.msg730661#msg730661 date=1496368756]
Nista pretesko,
imas gresku u kodu
-
[pawn]return D_Show(playerid, 348, DSI, ""SERVER"Bal[/pawn]
Trebao si provjeru napraviti za sve mjesece kad vec to radis
[pawn]if(dan < 0 || dan > 31) return Info(playerid, "U mjesecu ne moze biti vise od 31 dana i manje od 0!");[/pawn]
Npr da ako stavi mjesec 2, da ne moze vise od 28 dana itd
Moglo se sve oko lagano uraditi u jednoj komandi al et,
i ovo...
[pawn]new string[500];[/pawn]...
Nema potrebe praviti provjeru za sve mjesece imas mjesec i dan koji postavljas za open i ja da sam htio uraditi u jednoj komandi uradio bi
pda, stavis open u drugom mjesecu 31og dana.., ako vec radis, misli na sve
Jel ti vidis provjeru za mjesec i dan? ako stavi mjesec 2 onda ce logicno staviti i koji je dan a provjera je da ne moze biti vise od 31 dan u mjesecu sto je naravno vece od 28 i logicno je da 2 mjesec ima 28 dana
Citat: нÑÏ...Ñ•Ñ,αиσνιÏ, poslato Jun 04, 2017, 14:47:49 POSLE PODNE
Citat: Åukmember=1996][/member] link=topic=4245.msg731193#msg731193 date=1496490640]
Citat: нÑÏ...Ñ•Ñ,αиσνιÏ, poslato Jun 02, 2017, 07:34:11 PRE PODNE
Citat: Åukmember=1996][/member] link=topic=4245.msg730661#msg730661 date=1496368756]
Nista pretesko,
imas gresku u kodu
-
[pawn]return D_Show(playerid, 348, DSI, ""SERVER"Bal[/pawn]
Trebao si provjeru napraviti za sve mjesece kad vec to radis
[pawn]if(dan < 0 || dan > 31) return Info(playerid, "U mjesecu ne moze biti vise od 31 dana i manje od 0!");[/pawn]
Npr da ako stavi mjesec 2, da ne moze vise od 28 dana itd
Moglo se sve oko lagano uraditi u jednoj komandi al et,
i ovo...
[pawn]new string[500];[/pawn]...
Nema potrebe praviti provjeru za sve mjesece imas mjesec i dan koji postavljas za open i ja da sam htio uraditi u jednoj komandi uradio bi
pda, stavis open u drugom mjesecu 31og dana.., ako vec radis, misli na sve
Jel ti vidis provjeru za mjesec i dan? ako stavi mjesec 2 onda ce logicno staviti i koji je dan a provjera je da ne moze biti vise od 31 dan u mjesecu sto je naravno vece od 28 i logicno je da 2 mjesec ima 28 dana
[pawn]if(mjesec == 2)
{
if(dan <= 0 || dan >= 29)
{
SendClientMessage(playerid, -1, "kurac");
}
else
{
..
}
}[/pawn]
A sta ako pogrijesi dan ? stavi slucajno 30 ? eh, kad vec radis, misli na sve.
Formatiranje broja , urednije razdvajanje.
[pawn]stock formatNum(number) {
new
numStr[32],
numLen,
bool:negativeFlag
;
if(number < 0) {
negativeFlag = true;
number = -number;
}
valstr(numStr, number, false);
for(numLen = strlen(numStr); numLen > 3; numLen -= 3)
strins(numStr, ",", numLen - 3, sizeof(numStr));
if(negativeFlag)
strins(numStr, "-", 0, sizeof(numStr));
return numStr;
}[/pawn]
Primjer:
Bez korištenja
Brojevi:
10
100
1000
10000
100000
1000000
Sa korištenjem
10
100
1,000
10,000
100,000
1,000,000
Zasluge: Lordzy
Citat: Slade poslato Jun 21, 2017, 23:16:28 POSLE PODNE
Formatiranje broja , urednije razdvajanje.
[pawn]stock formatNum(number) {
new
numStr[32],
numLen,
bool:negativeFlag
;
if(number < 0) {
negativeFlag = true;
number = -number;
}
valstr(numStr, number, false);
for(numLen = strlen(numStr); numLen > 3; numLen -= 3)
strins(numStr, ",", numLen - 3, sizeof(numStr));
if(negativeFlag)
strins(numStr, "-", 0, sizeof(numStr));
return numStr;
}[/pawn]
Primjer:
Bez korištenja
Brojevi:
10
100
1000
10000
100000
1000000
Sa korištenjem
10
100
1,000
10,000
100,000
1,000,000
Zasluge: Lordzy
Najs
Evo i ja ovde nesto da objavim.
Uglavnom, ovo je obican stock, koji vam moze dosta pomoci, da ne morate stalno pisati SendClientMessage.
Samo dodate return Ovlascen(playerid);
Define Boje:
[pawn]
#define CRVENA "{F81414}"
#define BELA "{FFFFFF}"
[/pawn]
[pawn]
stock Ovlascen(playerid)
{
SCM(playerid,-1,""CRVENA"[SG] "BELA"Niste ovlasteni za koristenje ove komande");
return 1;
}
[/pawn]
Citat: SejnurHD poslato Jul 10, 2017, 00:47:20 PRE PODNE
Evo i ja ovde nesto da objavim.
Uglavnom, ovo je obican stock, koji vam moze dosta pomoci, da ne morate stalno pisati SendClientMessage.
Samo dodate return Ovlascen(playerid);
Define Boje:
[pawn]
#define CRVENA "{F81414}"
#define BELA "{FFFFFF}"
[/pawn]
[pawn]
stock Ovlascen(playerid)
{
SCM(playerid,-1,""CRVENA"[SG] "BELA"Niste ovlasteni za koristenje ove komande");
return 1;
}
[/pawn]
Moze ovo i pod define
Citat: Åukmember=1996][/member] link=topic=4245.msg742669#msg742669 date=1499715706]
Citat: SejnurHD poslato Jul 10, 2017, 00:47:20 PRE PODNE
Evo i ja ovde nesto da objavim.
Uglavnom, ovo je obican stock, koji vam moze dosta pomoci, da ne morate stalno pisati SendClientMessage.
Samo dodate return Ovlascen(playerid);
Define Boje:
[pawn]
#define CRVENA "{F81414}"
#define BELA "{FFFFFF}"
[/pawn]
[pawn]
stock Ovlascen(playerid)
{
SCM(playerid,-1,""CRVENA"[SG] "BELA"Niste ovlasteni za koristenje ove komande");
return 1;
}
[/pawn]
Moze ovo i pod define
[pawn]#define NoPerm(%0) \
SendClientMessage(%0, -1, "{F81414}[Server] {FFFFFF}Nisi ovlascen.")[/pawn]
[pawn]else return NoPerm( id );[/pawn]
Jel može pomoć ? Novi sam pa ne znam . PoÄeo sam da pravim svoj mod jer mi je tako najlakse skontati , kad imam svoje cmd i to, dal bi neko poslao mod koji ima samo register i login odnosno save/load.Bio bi mu zahvalan? Nije server upste MySQL nego obicni , cuo sam da nije to tesko narpaviti samo ako se neko razumije u to
Citat: Mevlo Kapić poslato Avgust 08, 2017, 13:26:11 POSLE PODNE
Jel može pomoć ? Novi sam pa ne znam . PoÄeo sam da pravim svoj mod jer mi je tako najlakse skontati , kad imam svoje cmd i to, dal bi neko poslao mod koji ima samo register i login odnosno save/load.Bio bi mu zahvalan? Nije server upste MySQL nego obicni , cuo sam da nije to tesko narpaviti samo ako se neko razumije u to
http://balkan-samp.com/forum/index.php?topic=112796.0
@Mevlo Kapić
Citat: [CG] ogi corleone poslato Avgust 08, 2017, 13:48:50 POSLE PODNE
Citat: Mevlo Kapić poslato Avgust 08, 2017, 13:26:11 POSLE PODNE
Jel može pomoć ? Novi sam pa ne znam . PoÄeo sam da pravim svoj mod jer mi je tako najlakse skontati , kad imam svoje cmd i to, dal bi neko poslao mod koji ima samo register i login odnosno save/load.Bio bi mu zahvalan? Nije server upste MySQL nego obicni , cuo sam da nije to tesko narpaviti samo ako se neko razumije u to
http://balkan-samp.com/forum/index.php?topic=112796.0
@Mevlo Kapić
Imas gresku u opisu, nisi fino napisao jednu rijec
Citat: Åukmember=1996][/member] link=topic=4245.msg750053#msg750053 date=1502204508]
Citat: [CG] ogi corleone poslato Avgust 08, 2017, 13:48:50 POSLE PODNE
Citat: Mevlo Kapić poslato Avgust 08, 2017, 13:26:11 POSLE PODNE
Jel može pomoć ? Novi sam pa ne znam . PoÄeo sam da pravim svoj mod jer mi je tako najlakse skontati , kad imam svoje cmd i to, dal bi neko poslao mod koji ima samo register i login odnosno save/load.Bio bi mu zahvalan? Nije server upste MySQL nego obicni , cuo sam da nije to tesko narpaviti samo ako se neko razumije u to
http://balkan-samp.com/forum/index.php?topic=112796.0
@Mevlo Kapić
Imas gresku u opisu, nisi fino napisao jednu rijec
Pošto si citirao oba posta pretpostavljam da sam ja nešto sjebao xD samo šta
Citat: [CG] ogi corleone poslato Avgust 08, 2017, 17:05:06 POSLE PODNE
Citat: Åukmember=1996][/member] link=topic=4245.msg750053#msg750053 date=1502204508]
Citat: [CG] ogi corleone poslato Avgust 08, 2017, 13:48:50 POSLE PODNE
Citat: Mevlo Kapić poslato Avgust 08, 2017, 13:26:11 POSLE PODNE
Jel može pomoć ? Novi sam pa ne znam . PoÄeo sam da pravim svoj mod jer mi je tako najlakse skontati , kad imam svoje cmd i to, dal bi neko poslao mod koji ima samo register i login odnosno save/load.Bio bi mu zahvalan? Nije server upste MySQL nego obicni , cuo sam da nije to tesko narpaviti samo ako se neko razumije u to
http://balkan-samp.com/forum/index.php?topic=112796.0
@Mevlo Kapić
Imas gresku u opisu, nisi fino napisao jednu rijec
Pošto si citirao oba posta pretpostavljam da sam ja nešto sjebao xD samo šta
(http://imgur.com/wQ9bwSN.png)
Luka, gospodar skriptanja :D
Citat: [CG] ogi corleone poslato Avgust 08, 2017, 13:48:50 POSLE PODNE
Citat: Mevlo Kapić poslato Avgust 08, 2017, 13:26:11 POSLE PODNE
Jel može pomoć ? Novi sam pa ne znam . PoÄeo sam da pravim svoj mod jer mi je tako najlakse skontati , kad imam svoje cmd i to, dal bi neko poslao mod koji ima samo register i login odnosno save/load.Bio bi mu zahvalan? Nije server upste MySQL nego obicni , cuo sam da nije to tesko narpaviti samo ako se neko razumije u to
http://balkan-samp.com/forum/index.php?topic=112796.0
@Mevlo Kapić
Hvala dobar je mod .. Rcon Login to mi nece da radi , vec imam pripremljene cmd za rcon
Oprostite na DP(Dupli post) ali ja ovdje ne vidim opciju "uredi" , jel zna neko kako da ovo rijesim http://imgur.com/a/JY6HA
Citat: Mevlo Kapić poslato Avgust 28, 2017, 11:23:07 PRE PODNE
Oprostite na DP(Dupli post) ali ja ovdje ne vidim opciju "uredi" , jel zna neko kako da ovo rijesim http://imgur.com/a/JY6HA
Otvori temu u ovom boardu, ostavi kod i oznaÄi liniju na kojoj ti je problem, poÅ¡to ovo nije tema za pomaganje, nego za prikazivanje korisnih kodova
Citat: Mevlo Kapić poslato Avgust 28, 2017, 11:23:07 PRE PODNE
Oprostite na DP(Dupli post) ali ja ovdje ne vidim opciju "uredi" , jel zna neko kako da ovo rijesim http://imgur.com/a/JY6HA
Otvori novu temu u 'Razgovor u vezi PAWN - skriptanja'
Provera da li je ime rp preko regexa.
[pawn]
stock ProveraRPImena(ime[])
{
new regex:r = regex_new("([A-Z]{1,1})[a-z]{2,9}+_([A-Z]{1,1})[a-z]{2,9}");
new check = regex_check(ime, r);
regex_delete(r);
return check;
}
[/pawn]
note. pawn.regex plugin je u pitanju.
Citat: Muslimovic poslato Avgust 08, 2017, 13:26:11 POSLE PODNE
Jel može pomoć ? Novi sam pa ne znam . PoÄeo sam da pravim svoj mod jer mi je tako najlakse skontati , kad imam svoje cmd i to, dal bi neko poslao mod koji ima samo register i login odnosno save/load.Bio bi mu zahvalan? Nije server upste MySQL nego obicni , cuo sam da nije to tesko narpaviti samo ako se neko razumije u to
Evo ovde, http://balkan-samp.com/forum/index.php?topic=109678.0
[pawn]#define ERROR(%0,%1) \
SendClientMessageEx(%0, -1, "{ff6600}Greska | {FFFFFF} "%1) //primjer koristenja ERROR(playerid, "text");
#define JOB(%0,%1) \
SendClientMessageEx(%0, -1, "{36AB00}(Posao) {FFFFFF} "%1) //primjer koristenja JOB(playerid, "text");
#define USAGE(%0,%1) \
SendClientMessageEx(%0, -1, "{F5052D}(Koristite) {FFFFFF} "%1) //primjer koristenja USAGE(playerid, "text");
#define INFO(%0,%1) \
SendClientMessageEx(%0, -1, "{2e9cd1}(Info) {FFFFFF} "%1) //primjer koristenja INFO(playerid, "text");
//#define PORUKA(%0,%1) \
// SendClientMessageEx(%0, -1, "{BOJA}(Server) {FFFFFF} "%1) //primjer koristenja za daljnje poruke
[/pawn]
Citat: Savana poslato Januar 02, 2018, 09:40:36 PRE PODNE
[pawn]#define ERROR(%0,%1) \
SendClientMessageEx(%0, -1, "{ff6600}Greska | {FFFFFF} "%1) //primjer koristenja ERROR(playerid, "text");
#define JOB(%0,%1) \
SendClientMessageEx(%0, -1, "{36AB00}(Posao) {FFFFFF} "%1) //primjer koristenja JOB(playerid, "text");
#define USAGE(%0,%1) \
SendClientMessageEx(%0, -1, "{F5052D}(Koristite) {FFFFFF} "%1) //primjer koristenja USAGE(playerid, "text");
#define INFO(%0,%1) \
SendClientMessageEx(%0, -1, "{2e9cd1}(Info) {FFFFFF} "%1) //primjer koristenja INFO(playerid, "text");
//#define PORUKA(%0,%1) \
// SendClientMessageEx(%0, -1, "{BOJA}(Server) {FFFFFF} "%1) //primjer koristenja za daljnje poruke
[/pawn]
nisi stavio SendClientMessageEx funkciju
Citat: Savana poslato Januar 02, 2018, 09:40:36 PRE PODNE
[pawn]#define ERROR(%0,%1) \
SendClientMessageEx(%0, -1, "{ff6600}Greska | {FFFFFF} "%1) //primjer koristenja ERROR(playerid, "text");
#define JOB(%0,%1) \
SendClientMessageEx(%0, -1, "{36AB00}(Posao) {FFFFFF} "%1) //primjer koristenja JOB(playerid, "text");
#define USAGE(%0,%1) \
SendClientMessageEx(%0, -1, "{F5052D}(Koristite) {FFFFFF} "%1) //primjer koristenja USAGE(playerid, "text");
#define INFO(%0,%1) \
SendClientMessageEx(%0, -1, "{2e9cd1}(Info) {FFFFFF} "%1) //primjer koristenja INFO(playerid, "text");
//#define PORUKA(%0,%1) \
// SendClientMessageEx(%0, -1, "{BOJA}(Server) {FFFFFF} "%1) //primjer koristenja za daljnje poruke
[/pawn]
ah pardon ..
[pawn]stock SendClientMessageEx(playerid, color, const str[], {Float,_}:...) {
static
args,
start,
end,
string[144]
;
#emit LOAD.S.pri 8
#emit STOR.pri args
if (args > 12)
{
#emit ADDR.pri str
#emit STOR.pri start
for (end = start + (args - 12); end > start; end -= 4)
{
#emit LREF.pri end
#emit PUSH.pri
}
#emit PUSH.S str
#emit PUSH.C 144
#emit PUSH.C string
#emit PUSH.C args
#emit SYSREQ.C format
SendClientMessage(playerid, color, string);
#emit LCTRL 5
#emit SCTRL 4
#emit RETN
}
return SendClientMessage(playerid, color, str);
}[/pawn]
Ne mogu urediti..
Evo kod za forward + public, ja sam si smanjio skriptu za 1800 kodova.. znaci za timere, i neke funkcije tebate frward, a neko nekad zaboravi, pa samo ovo prebacite na vrh..
[pawn]#define PF:%0(%1) forward %0(%1); \
public %0(%1) [/pawn]
stari primjer
[pawn]forward test();
public test(){
return 1;
}
}[/pawn]
novi primjer
te samo upisete
[pawn]PF: (){//
return 1;
}[/pawn]
Citat: Savana poslato Januar 03, 2018, 11:14:54 PRE PODNE
Ne mogu urediti..
Evo kod za forward + public, ja sam si smanjio skriptu za 1800 kodova.. znaci za timere, i neke funkcije tebate frward, a neko nekad zaboravi, pa samo ovo prebacite na vrh..
[pawn]#define PF:%0(%1) forward %0(%1); \
public %0(%1) [/pawn]
stari primjer
[pawn]forward test();
public test(){
return 1;
}
}[/pawn]
novi primjer
te samo upisete
[pawn]PF: (){//
return 1;
}[/pawn]
Ne znam šta je korisno u ovom kodu, al' hajd'. To je starije od kamena, peska, zemlje i Sunca :))
Citat: Savana poslato Januar 03, 2018, 11:14:54 PRE PODNE
Ne mogu urediti..
Evo kod za forward + public, ja sam si smanjio skriptu za 1800 kodova.. znaci za timere, i neke funkcije tebate frward, a neko nekad zaboravi, pa samo ovo prebacite na vrh..
[pawn]#define PF:%0(%1) forward %0(%1); \
public %0(%1) [/pawn]
stari primjer
[pawn]forward test();
public test(){
return 1;
}
}[/pawn]
novi primjer
te samo upisete
[pawn]PF: (){//
return 1;
}[/pawn]
nisi za 1800 kodova nego za 1800 linija prije,
manje linija veca brzina kompilanja vljd
Citat: σgà poslato Januar 03, 2018, 12:44:35 POSLE PODNE
Ne znam šta je korisno u ovom kodu, al' hajd'. To je starije od kamena, peska, zemlje i Sunca :))
je je, zato svaki drugi mod u gamemodes bez macro koda, tolko je staro da nitko ne koristi, haj me ne nasmijavaj