[Tutorial] public OnPlayerText - malo poigravanja

Započeo CH | FuDo, Avgust 19, 2013, 23:49:27 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

[TUTORIAL] 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 [cenzura]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[128]; // 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.
Poslednja Izmena: Avgust 19, 2013, 23:57:38 POSLE PODNE od FuDo a.k.a Dwayne Dude
[Tutorial] public OnPlayerText - malo poigravanja

Nudim usluge skriptanja, tražim team sa kojim bi radio. PM ili Facebook: www.facebook.com/keton.dirigent

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
Poslednja Izmena: Avgust 20, 2013, 23:17:29 POSLE PODNE od _HarDy_
Moji Radiovi!
TuT||Iz code u MTA

fino,lijepo pojasnjeno


[FS]Rent
[FS] Vremenska prognoza
[TuT] PayDay
[TuT]PayDay sistem[UPDATED]
Moja Biografija

Respect:Mr.Gagi,FlasH,Streetboy,David (Sabljak) A.k.A SABO(T)
ÄŒovjek nije stvoren za poraze, moze biti unisten, ali ne i pobjeÄ'en!


Citat: _HarDy_ poslato Avgust 20, 2013, 23:11:22 POSLE PODNE
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.
[Tutorial] public OnPlayerText - malo poigravanja

Nudim usluge skriptanja, tražim team sa kojim bi radio. PM ili Facebook: www.facebook.com/keton.dirigent

Lijep tutorial,ma da je to lako za srediti,al mi je trebalo hvala brate :)
[TuT]-Vozila na posebnog igrača- http://balkan-samp.com/forum/index.php?topic=78806.0 | [FS]-G.P.S- http://balkan-samp.com/forum/index.php?topic=73768.0
[FS]-Rcon Panel- http://balkan-samp.com/forum/index.php?topic=72595.0 | [GM]-Division Street(stari)- http://balkan-samp.com/forum/index.php?topic=78810.0
Citat: magarac poslato Avgust 28, 2013, 18:58:01 POSLE PODNE
Ma jbt ne zelim ja to...... koji k ce mi takva camera di trci okolo......

<script type="text/javascript">
var bannersnack_embed = {"hash":"bxui659h2","width":400,"height":130,"t":1421676936,"userId":16712396,"bgcolor":"#3D3D3D","wmode":"opaque"};
</script>
<script type="text/javascript" src="http://files.bannersnack.com/iframe/embed.js"></script>