[Tutorial] public OnPlayerText - malo poigravanja

Započeo CH | FuDo
19. Avg. 2013. Zaključano
2,223
pregleda
7
postova
CH | FuDo
4
Shot Caller
19. Avg. 2013.
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.
_HarDy_
5
Underboss
20. Avg. 2013.
Hvala ti , slabo kontam ovo gore u textu i to ... al fino je objasnjeno .. Veceras cu se malo igrati sa tim..

EDIT : Mogao si staviti da si ovo uzeo sa samp foruma -.- http://forum.sa-mp.com/showthread.php?t=335123
xyzcod2
5
Underboss
21. Avg. 2013.
fino,lijepo pojasnjeno
Faris_Farkias
6
Godfather
🔥30
21. Avg. 2013.
lijep tut. 🙂
CH | FuDo
4
Shot Caller
21. Avg. 2013.
_HarDy_ wrote on August 20, 2013, 9:11 pm:
Hvala ti , slabo kontam ovo gore u textu i to ... al fino je objasnjeno .. Veceras cu se malo igrati sa tim..

EDIT : Mogao si staviti da si ovo uzeo sa samp foruma -.- http://forum.sa-mp.com/showthread.php?t=335123


Da znaš engleski i da si pročitao taj post sa samp foruma, skontao bi bitnu razliku između tog tutoriala i mog tutoriala.

Ostalima hvala.
Falcony
4
Enforcer
21. Avg. 2013.
Lijep tutorial,ma da je to lako za srediti,al mi je trebalo hvala brate 🙂
CH | FuDo
4
Shot Caller
21. Avg. 2013.
Tu smo da pomognemo.. 😄

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha