Private Messages

Započeo Vasic, Jul 22, 2018, 10:27:55 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Private Messages
Tutorial by Vasic


Cao svima, danas cu vam pokazati kako napraviti Private Messages System, ili na nasem jeziku, Privatne Poruke. Sada idemo da vam to pokazemo, predjimo na tutorial.

[1]: Ubacujemo u skriptu Include po imenu ' sscanf2 ' i ' zcmd ', Download Link ovih includea, bice ispod.
[pawn]#include < sscanf2 > //Dodajemo na samom vrhu skripte
#include < zcmd > //Takodje dodajemo na vrhu skripte[/pawn]
[2]: Sada kada smo zavrsili definicije Includea, prelazimo na definicije varijabli.
[pawn]new ZadnjiPoslatPM[MAX_PLAYERS]; //Ovo ce nam sluziti kasnije kada budemo radili komandu /r, komanda /r je skracenica od Reply, dakle, to znaci da kada posaljemo nekom igracu /pm njemu dodje ta poruka, i sl. put, kada ukucate /r ne treba da unosite ID, samo text, jer sami znate sta to znaci Reply.[/pawn]
[3]: E Sada, kada smo zavrsili te definicije, prelazimo pod OnPlayerConnect i OnPlayerDisconnect, da dodamo resetovanje te varijable.
[pawn]
public OnPlayerConnect(playerid)
{
    ZadnjiPoslatPM[playerid] = -1; //Kada igrac se konektuje na server, resetuje varijablu, te nikome ne moze poslati /r jer je se rekonektovao.
    return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
    ZadnjiPoslatPM[playerid] = -1; //Kada se igrac diskonektuje sa servera, resetuje isto varijablu, te nikome ne moze poslati sl. put kada se konektuje /r .
    return 1;
}[/pawn]
[4]: Zavrsili smo definiciju i resetovanje varijabli, vreme je da predjemo na komande!
[pawn]CMD:pm(playerid, params[]) // Ukoliko koristite neki drugi sistem Komandi, npr YSI, koristite u mesto CMD -> YCMD
{
   new id, string[2][156], message[156]; //Dodajemo definiciju sa kojom cemo vrsiti text i ID Igraca.
   if(sscanf(params,"us[128]",id,message)) return SendClientMessage(playerid, -1, "IME:SRW - {FFFFFF}/pm [ID] [Poruka]"); //Dodajemo kada igrac ukuca samo /pm da mu izbaci kako se koristi
   if(id == playerid) return SendClientMessage(playerid, -1, "IME:SRW - {FFFFFF}Ne mozete slati poruku sami sebi."); //Dodajemo definiciju da igrac ne moze poslati PM samom sebi.
   if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "IME:SRW - {FFFFFF}Igrac je offline."); //Dodajemo definiciju da igrac kome saljemo poruku nije na serveru.
   format(string[0], 912, "IME:SRW - {FFFFFF}Privatna Poruka Uspesno Poslata | Primaoc: %s | Poruka: %s", GetName(id), message); //Dodajemo da skripta automatski posalje poruku nama da je poruka uspesno prosledjena.
   format(string[1], 912, "IME:SRW - {FFFFFF}Stigla vam je Privatna Poruka | Posaljilac: %s | Poruka %s", GetName(playerid), message); //Dodajemo opet da skripta isto automatski posalje poruku igracu od koga ste uneli ID.
   SendClientMessage(playerid, -1, string[0]); // Sada dodajemo da skripta posalje taj string[0]
   SendClientMessage(id, -1, string[1]); //Sada isto dodajemo da skripta posalje string[1]
   ZadnjiPoslatPM[id] = playerid; //I Ova definicija sacuvava kome smo zadnjem poslali taj PM.
   return 1;
}[/pawn]
[5]: Kao sto vidite, zavrsili smo komandu /pm, sada prelazimo na komandu /r !
[pawn]CMD:r(playerid, params[]) // Ukoliko koristite neki drugi sistem Komandi, npr YSI, koristite u mesto CMD -> YCMD
{
   new string[2][156], message[156]; //Dodajemo definiciju sa kojom cemo vrsiti text.
   if(ZadnjiPoslatPM[playerid] == -1) return SendClientMessage(playerid, -1, "IME:SRW - {FFFFFF}Jos uvek niste nikome poslali /pm!"); //Ovo je definicija ako nikom nismo poslali pm od kada smo usli na server, prikaze ovu poruku.
   if(ZadnjiPoslatPM[playerid] == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "IME:SRW - {FFFFFF}Igrac kojem ste zadnji put pisali /pm je izasao sa servera."); //Ovo je isto definicija da ako je igrac kome smo zadnjem poslali pm izasao sa servera, prikaze ovu poruku.
   if(sscanf(params,"s[128]",message)) return SendClientMessage(playerid, -1, "IME:SRW - {FFFFFF}/r [Poruka]"); //Ovo je definicija da ako igrac upise samo /r prikaze kako se koristi.
   format(string[0], 128, "IME:SRW - {FFFFFF}Privatna Poruka Uspesno Poslata | Primaoc: %s | Poruka: %s", GetName(ZadnjiPoslatPM[playerid]), message); //Salje poruku nama da je poruka uspesno prosledjena
   format(string[1], 128, "IME:SRW - {FFFFFF}Stigla vam je Privatna Poruka | Posaljilac: %s | Poruka %s", GetName(playerid), message); //Salje poruku igracu kome smo zadnjem poslali /pm
   SendClientMessage(playerid, -1, string[0]); //Salje poruku nama
   SendClientMessage(ZadnjiPoslatPM[playerid], -1, string[1]); //Salje poruku igracu
   ZadnjiPoslatPM[ZadnjiPoslatPM[playerid]] = playerid; //I opet isto dodajemo definiciju kome smo zadnjem poslali pm.
   return 1;
}[/pawn]
[6]: I Mi smo zavrsili PM Sistem. Sada nam je ostalo da vam ostavimo Downlod Linkove Includea.

Poslednja Izmena: Januar 04, 2020, 10:28:56 PRE PODNE od Vasic
• Website: www.vasic.dev
Web Development & Cyber Security

Samo mi objasni sta ce ti ovoliki stringovi?

Mnogo imaš ti još da jedeš kačamak.
skrr
Moj tutorijali: Bazilion indent warninga
WORK? : Smart Project 1.2 , Leskovacki Detmec, Rodjendanski  server


Penzionisani balkanski samp kripter


Citat: nikisb poslato Jul 23, 2018, 11:35:05 PRE PODNE
Samo mi objasni sta ce ti ovoliki stringovi?
Cuj sta ce mi? Pa kad igrac napise poruku, poruka moze sadrzati i do 200-300 znakova texta... Zato sam i postavio. Inace, ko zeli, moze da smanji.
• Website: www.vasic.dev
Web Development & Cyber Security

Citat: VasicFTW poslato Jul 23, 2018, 11:38:22 PRE PODNE
Cuj sta ce mi? Pa kad igrac napise poruku, poruka moze sadrzati i do 200-300 znakova texta... Zato sam i postavio. Inace, ko zeli, moze da smanji.
Ne može poslati jer T "dialog" ne dozvoljava toliko char u njemu + u chat ne može toliko tako da moraš napraviti da pošalje u više poruka tako da je tu bez razloga tolika memorija povučena. ;)

Citat: muma. poslato Jul 23, 2018, 11:56:20 PRE PODNE
Ne može poslati jer T "dialog" ne dozvoljava toliko char u njemu + u chat ne može toliko tako da moraš napraviti da pošalje u više poruka tako da je tu bez razloga tolika memorija povučena. ;)
Pa jbga. Gotovo je sad, neka smanje kada budu ubacivali :D
• Website: www.vasic.dev
Web Development & Cyber Security


Cemu definisanje multi-dimensional arraya kada sve moze stati u jedan
string[2][128] -> string[128]
Eo pa uporedi memoriju

CMD:pm(playerid, params[]) {
new targetid,
buffer[144]; /* http://prntscr.com/k9wvm1 */

if (sscanf(params, "us[100]", targetid, buffer))
return ...;

if (playerid == targetid)
return ...;

if (targetid == INVALID_PLAYER_ID)
return ...;

format(buffer, sizeof buffer, "> [PM] Posiljalac %s: %s", GetName(targetid), buffer);
SendClientMessage(playerid, -1, buffer);

format(buffer, sizeof buffer, "> [PM] Primalac %s: %s", GetName(playerid), buffer);
SendClientMessage(targetid, -1, buffer);

ZadnjiPoslatPM[targetid] = playerid;
return 1;
}

Citat: .ксундер poslato Jul 23, 2018, 15:14:35 POSLE PODNE
Cemu definisanje multi-dimensional arraya kada sve moze stati u jedan
string[2][128] -> string[128]
Eo pa uporedi memoriju

CMD:pm(playerid, params[]) {
new targetid,
buffer[144]; /* http://prntscr.com/k9wvm1 */

if (sscanf(params, "us[100]", targetid, buffer))
return ...;

if (playerid == targetid)
return ...;

if (targetid == INVALID_PLAYER_ID)
return ...;

format(buffer, sizeof buffer, "> [PM] Posiljalac %s: %s", GetName(targetid), buffer);
SendClientMessage(playerid, -1, buffer);

format(buffer, sizeof buffer, "> [PM] Primalac %s: %s", GetName(playerid), buffer);
SendClientMessage(targetid, -1, buffer);

ZadnjiPoslatPM[targetid] = playerid;
return 1;
}

pa jebi ga... Sta da se radi, ko bude koristio neka ispravi, i molim vas vise nemojte mi pisati pogledaj memoriju itd..
• Website: www.vasic.dev
Web Development & Cyber Security