Zaključano
Korisne skripte i kodovi
Započeo Obrisan korisnik
•
pre 15 godina
87,705
pregleda
366
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
pre 15 godina
Sa ovom funkcijom možete "prisiliti" bilo kojeg igraća na korištenje komande ako ta komanda postoji u gamemodu ili filterskripti:
Funkcija:
Primjer:
Trebat će vam CallRemoteFunctionEx funkcija:
CallRemoteFunctionEx funkcija:
Sa ovom funkcijom možete promijeniti ime vašeg servera:
Funkcija:
Primjer:
Sa ovom funkcijom možete promijeniti text gamemoda koji je trenutno na vašem serveru:
Funkcija:
Primjer:
Sa ovom funkcijom možete promijeniti ime mape vašeg servera:
Funkcija:
Primjer:
Za funkcije SetServerName, SetServerGamemode & SetServerMap trebat će vam SendRconCommandEx funkcija:
SendRconCommandEx funkcija:
Funkcija:
stock ForcePlayerCommand(playerid, command[]) // Emilio "Correlli" Lovrić
{
if(!IsPlayerConnected(playerid)) return false;
new
playername;
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; \
format(string, sizeof(string), %3, %4); \
CallRemoteFunction(%0, %1, %2, string); \
} \
while(FALSE)
#endifSa 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; \
if(strlen(%0) > 0) \
{ \
format(string, sizeof(string), %0, %1); \
SendRconCommand(string); \
} \
} \
while(FALSE)
#endif
pre 15 godina
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 😄). Evo jedna za pocetak:
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 😉
#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 😉
pre 15 godina
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 += (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;
for(new i = 0, j = strlen(str), z = 0; i < j; i++)
{
for(new x = 0; charset < sizeof(charset); x++)
{
new
target = charset + (((3^i) * (i % 15)));
if(((target > 0xFF) ? target-256 : target) == str)
{
result[z++] = charset;
}
}
}
return result;
}
pre 15 godina
Luka P. wrote on June 16, 2010, 2:16 pm:
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 [ime oruzja]
pre 15 godina
stock GetPlayerFirstName(playerid)
{
new namestring;
new name;
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
split(name, namestring, '_');
return namestring;
}stock GetPlayerLastName(playerid)
{
new namestring;
new name;
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
split(name, namestring, '_');
return namestring;
}stock GetPlayerNameEx(playerid)//Brise "_" u imenu igraca
{
new string;
GetPlayerName(playerid,string,24);
new str;
strmid(str,string,0,strlen(string),24);
for(new i = 0; i < MAX_PLAYER_NAME; i++)
{
if (str == '_') str = ' ';
}
return str;
}
pre 15 godina
stock SendMessageToAdmins(bool:client,sender,color,msg[])
{
foreach (Player, i)
{
if(IsPlayerAdmin(i))
{
new string;
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 .
{
foreach (Player, i)
{
if(IsPlayerAdmin(i))
{
new string;
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 .
pre 15 godina
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)
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)
pre 15 godina
Luka P. wrote on September 26, 2010, 10:35 am:
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)
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. @Slay; tvoj kod bi uvijek vracao false...
pre 15 godina
Da malo refresham..
Od garsina:
Detekcija dali je igrac pauzao igru
new LastPlayerUpdate;
#define IsPlayerPaused(%1,%2) GetTickCount() > (LastPlayerUpdate[%1] + (%2 * 1000))//vraca pauzirano vrijeme u sekundama
// Primjer
public OnPlayerUpdate(playerid)
{
LastPlayerUpdate = GetTickCount();
return 1;
}
//U Timeru ili slicno
if(IsPlayerPaused(playerid, 300) && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)
{
Kick(playerid);
}
Od garsina:
Detekcija dali je igrac pauzao igru
new LastPlayerUpdate;
#define IsPlayerPaused(%1,%2) GetTickCount() > (LastPlayerUpdate[%1] + (%2 * 1000))//vraca pauzirano vrijeme u sekundama
// Primjer
public OnPlayerUpdate(playerid)
{
LastPlayerUpdate = GetTickCount();
return 1;
}
//U Timeru ili slicno
if(IsPlayerPaused(playerid, 300) && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)
{
Kick(playerid);
}
pre 15 godina
Macro funkcija:
formatEx ( playerid , string[] , len ) ;
by 265
S ovom funkcijom si skratite muke...Standardni primjer
a sa ovom funkcijom ce to ovako izgledati....
I TO JE SVE! Evo jedan primjer u praksi
Takoder sam napravio ako trebate format za SVE online igrace
formatExToAll(string[] , len );
primjer:
U slucaju da dobite ovakav warning
Onda na vrh stavite
Eto toliko od mene, nista posebno ali zasto si ne olaksati?
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; \
format(string, sizeof string, %1, %2); \
SCM(string, BOJA, %0); \
} \
while(false)by 265
S ovom funkcijom si skratite muke...Standardni primjer
new
string
;
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
;
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; \
format(string, sizeof string, %0, %1); \
ScmToAll(BOJA, string); \
} \
while(false)formatExToAll(string[] , len );
primjer:
public OnPlayerConnect(playerid)
{
new
ime
;
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?
pre 14 godina
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 😁
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 😁
pre 14 godina
joXy wrote on January 30, 2011, 12:55 am:
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?
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava