OnPlayerText i malo poigravanja
Dragi moji skripteri, kao Å¡to naslov kaže, ovo je tutorial o publicu OnPlayerText, i malo poigravanja sa njim. Iako je ovo moj prvi tutorial, nadam se da će pomoći mnogim poÄetnicima. Zamolio bih Vas, da ne ostavljate e komentare poput "ovo je bezveze" i njima sliÄnim. Hvala!
Pa krenimo laganim korakom. Potrebno je samo da Äitate pozorno i sve će raditi kako treba.
NAPOMENA:Potrebno je da znate neke osnove u vezi PAWN skriptanja, kako bi Vam ovo uspjelo.
1. Upoznavanje sa publicom
Kao Å¡to znate, public OnPlayerText služi da, prilikom upisivanja teksta u obiÄni chat, ispisuje tekst koji je upisao. Public potražite u svom novom gamemodu, ili gamemodu koji radite.
public OnPlayerText(playerid, text[])
{
return 0;
}return 1; - Ukoliko Vam stoji ovako, to znaÄi da Vam tekst koji igraÄ upiÅ¡e ispisuje se na chat u formatu "Nick igraÄa: Tekst koji je upisao"
return 0; - Ukoliko Vam stoji ovako, to znaÄi da tekst koji on upiÅ¡e, uopÅ¡te se neće ispisati na chatu, Å¡to nam dozvoljava.. naravno, da improvizujemo malo.
Korištenjem ove funkcije, možemo uraditi mnoge stvari.
2. Korisne stvari
ÄŒesto imate problema sa reklamiranjem na svom serveru? Upadne Vam neki lik i odjednom poÄne dijeliti IP i tako Vam igraÄi napuste server, jer ne znate kako da ih zadržite?
Putem ove funkcije možete zaÅ¡titi svoj server od reklamiranja. Na koji naÄin? Evo, da Vam objasnim.
Najprije, napravimo stock koji će brojati koliko imate taÄki i dvotaÄki u tekstu koji igraÄ upiÅ¡e.
On bi izgledao ovako:
stock substr_count(substring[], string[], bool:ignorecase = false, startpos = 0 )Objašnjenje:
substring[] - dio koji Vam služi da odredite šta treba da se provjeri u tekstu
string[] - dio koji Vam služi da odredite na kojem mjestu želite da tražite
bool:ignorecase = false - dio kojim određujete da li treba provjera
startpos = 0 - pozicija teksta sa kojeg poÄinje provjera
Sada možemo nastaviti sa daljom izradom stocka. Najprije, da Vam pojasnim šta je opcija strfind. Funkcija strfind Vam služi da određeni string ili tekst pronađete u drugom stringu.
Zahvaljujući njemu, u tekstu koji napiÅ¡e VaÅ¡ igraÄ, moguće je potražiti taÄke i dvotaÄke. ViÅ¡e o tome imate na SA-MP Wiki ( uÄite malo engleski, ako ne znate engleski jezik, ostavite se PAWNO skriptanja... ).
Stock bi trebao da izgleda ovako:
stock substr_count(substring[], string[], bool:ignorecase = false, startpos = 0 ) // objašnjeno već gore
{
new ncount, start = strfind( string, substring, ignorecase, startpos ); // newovi potrebni za izradu stocka
while( start > -1 ) // mjesto za poÄetak brojanja
{
start = strfind( string, substring, ignorecase, start + strlen( substring ) ); // poÄetak brojanja
ncount++;
}
return ncount; // vraća koliko je izbrojalo
}Sada kad smo već izradili stock za brojanje, vratimo se na public OnPlayerText. U sljedećim koracima ćemo izraditi upozorenje igraÄu ako on upiÅ¡e tekst koji ne bi trebao.
Pa bi to izgledalo ovako:
public OnPlayerText(playerid, text[])
{
new string; // novi string
if( substr_count( ".", text, true ) >= 3 && substr_count( ":", text, true ) >= 1 ) // sada ide dio za brojanje. Ukoliko pronaÄ‘e taÄku "." tri puta ili vÅ¡e, i uz to ako pronaÄ‘e dvotaÄku ":" jedanput ili viÅ¡e.
{
new tmpe;
tmpe = strfind( text, ":" ); // ako pronaÄ‘e u tekstu dvotaÄku.
if( tmpe != -1 ) // ako je dvotaÄka pronaÄ‘ena jedanput ili viÅ¡e formatira string
{
format( string, sizeof( string ), "{FFFF80}SERVER | {FF4444}Ne reklamiraj! Mozes dobiti ban!"); // formatiranje stringa
SendClientMessage( playerid, 0xFF4444FF, string); // slanje stringa igraÄu
return 0; // povratak, tj. returna 0, odnosno ne Å¡alje nikakvu poruku dalje, tj, ne ispisuje u chat ono Å¡to je igraÄ napisao
}
}
return 1;
}Eto uspjeli smo da napravimo malo zaštite na svom serveru, od reklamiranja drugih IP adresa.
PITANJE: Kako da izradim, da kada igraÄ upiÅ¡e neÅ¡to u chat, da se taj tekst pojavi iznad njega?
Jednostavno, koristimo SetPlayerChatBubble. Ukoliko želite da tekst koji upiÅ¡e igraÄ, pojavi se iznad njega, pratite sljedeće korake.
Objašnjenje za SetPlayerChatBubble
SetPlayerChatBubble je opcija koja Vam služi da upisani tekst se pojavi iznad imena igraÄa.
SetPlayerChatBubble(playerid, text[], color, Float:drawdistance, expiretime)playerid - igraÄ koji upiÅ¡e tekst, pojaviti će se iznad njega
text[] - tekst koji upiše
color - boja teksta
Float:drawdistance - float kojim definirate u kojem radiusu će igraÄi vidjeti upisani tekst
expiretime - vrijeme koliko dugo će chat biti iznad igraÄa ( 1000 - 1 sekunda )
Pa krenimo dalje.
NAPOMENA: Ukoliko ste koristili tutorial iznad gore napisan, onda radite po sljedećim koracima. Ako niste, nemojte.
Sada, prije posljednjeg returna, tj, prije zatvaranja publica OnPlayerText, dodajte sljedeće:
else
{
SetPlayerChatBubble(playerid, text, -1, 25.0, 5000); // -1 je bijela deafult boja, promijenite u željeno. Poslije, 25.0 je radius, objaÅ¡njeno već gore. I broj 5000 je vrijeme koliko dugo je tekst iznad igraÄa. U mom sluÄaju je 5 sekundi.
}Eto ga, završili smo i to. Zasada dosta toga smo uradili, sada Vi pokušajte neke od sljedećih izazova:
- Napravite svoj RCON Admin chat. ( Koristite IsPlayerAdmin ) - lagano.
- Napravite svoj sistem utiÅ¡avanja. Ako je igraÄ utiÅ¡an, ne može pisati - srednje.
- Napravite skriptu kojom će te zabranjivati pisanje zabranjenih rijeÄi ( psovanje i sl. ) - malo teže.
TuT je završen, pokušajte napraviti neke od gore navedenih izazova, ako ne znate, ili ako dobijete neke errore ili warninge, postajte. Takođe, komentari su dobrodošli isto tako.
P.S. Ukoliko ste proÄitali cijeli tutorial, i pronaÅ¡li greÅ¡ke, molim Vas da mi to napomenete. Isto tako, ako mislite da se ovo može poboljÅ¡ati, napomenite, naravno biti ćete dodani u creditse.

