Započeo Dragi
•15. Jan. 2025.[Tutorial] Privatne poruke u PAWN-u
2,673
pregleda
4
postova
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
15 / 250 XP
Početnik(0)
470
Postovi:
48
Teme:
Pridružio se:Feb. 2015
15. Jan. 2025.
Privatne poruke u PAWN-u
Uvod
Ovo je standardan i prost sistem privatnih poruka s njihovim logovanjem. Sve se radi u jednoj komandi. Mozete uraditi refaktorisanje koda za metodu logovanja, ja nisam jer je ovo tutorial. (Takav sistem mozete naci u Dimijevim modovima.)
Potrebne biblioteke:
Potrebne boje:
Komanda za slanje privatne poruke drugom onlajn igracu:
Ovo sve moze da se skrati izbacivanjem komentara (ne preporucujem nikad, jer posle mesec dana kad se vratite, samo citate komentare i skontate kod, bez mnogo razmisljanja), upotrebom K&R stajla, posebnom LOG univerzalnom funkcijom. Validacija se moze napisati na drugaciji nacin. Ja najvise volim SCM i return 1; lepo da napisem, kako Bog zapoveda. A vi mozete i ovako, kako vecina i radi:
Fotografija iz igre:

Fotografije unutar LOG datoteke:

Zakljucak
Nadam se da ste naucili nesto novo danas. Ako niste, procitajte i razmislite dobro, ponovo. Hvala na citanju.
Mozete pogledati, takodje, tutorial na malo drugaciji fazon od @Vasic :
https://gtablkn.gg/forum/tutorijali-u-vezi-sa-mpa/private-messages#post-644631
Uvod
Ovo je standardan i prost sistem privatnih poruka s njihovim logovanjem. Sve se radi u jednoj komandi. Mozete uraditi refaktorisanje koda za metodu logovanja, ja nisam jer je ovo tutorial. (Takav sistem mozete naci u Dimijevim modovima.)
Potrebne biblioteke:
Potrebne boje:
#define ADMINFS_MSG_COLOR 0xFF444499
#define PM_INCOMING_COLOR 0xFFFF22AA
#define PM_OUTGOING_COLOR 0xFFCC2299
Komanda za slanje privatne poruke drugom onlajn igracu:
CMD:pm(playerid, params[])
{
new Message; // Deklaracija niza za poruku koja ce biti poslana
new gMessage; // Deklaracija niza za poruku koju korisnik unosi
new targetId; // Deklaracija varijable za ID primaoca
new pName[MAX_PLAYER_NAME + 1]; // Deklaracija niza za ime posiljaoca + 1 za null terminator
new iName[MAX_PLAYER_NAME + 1]; // Deklaracija niza za ime primaoca
// Validacija ulaznih parametara
if (sscanf(params, "us", targetId, gMessage))
{
// Slanje poruke o pravilnoj upotrebi komande
SendClientMessage(playerid, ADMINFS_MSG_COLOR, "UPOTREBA: /pm ");
return 1; // Izadji ovde
}
// Provera da li je primalac na serveru
if (!IsPlayerConnected(targetId))
{
// Slanje poruke da primalac nije na serveru
SendClientMessage(playerid, ADMINFS_MSG_COLOR, "Korisnik nije na serveru.");
return 1; // Izadji ovde
}
// Sprecavanje slanja poruke samom sebi
if (playerid == targetId)
{
// Slanje poruke o nemogucnosti slanja poruke samom sebi
SendClientMessage(playerid, ADMINFS_MSG_COLOR, "Ne mozete poslati sami sebi poruku!");
return 1; // Izadji ovde
}
// Dohvatanje imena igraca
GetPlayerName(targetId, iName, sizeof(iName)); // Dohvatanje imena primaoca
GetPlayerName(playerid, pName, sizeof(pName)); // Dohvatanje imena posiljaoca
// Logovanje poruke sa vremenskim oznakama
new hours, minutes, seconds, string; // Deklaracija varijabli za vreme i string za log
new Year, Month, Day; // Deklaracija varijabli za datum
gettime(hours, minutes, seconds); // Dohvatanje trenutnog vremena
getdate(Year, Month, Day); // Dohvatanje trenutnog datuma
// Formatiranje stringa za log
format(string, sizeof(string), "%d/%d/%d | %02d:%02d:%02d | %s -> %s : %s\r\n",
Day, Month, Year, hours, minutes, seconds, pName, iName, gMessage);
// Otvaranje fajla u "append only" modu
new File:hFile = fopen("PMHistory.log", io_append);
// Proveri da li je fajl otvoren
if (hFile)
{
// Uspesno otvoren fajl
fwrite(hFile, string); // Upisivanje loga u fajl
fclose(hFile); // Zatvaranje fajla
}
else
{
// Greska, vracena nularica, print u konzoli i slanje errora posiljaocu
print("Nije moguce otvoriti datoteku: \"PMHistory.log\". CMD:pm");
SendClientMessage(playerid, PM_OUTGOING_COLOR, "Desila se greska prilikom slanja PMa. Obratite se skripteru."); // Slanje poruke
return 1; // Izadji ovde
}
// Formatiranje i slanje odlazne poruke posiljaocu
format(Message, sizeof(Message), "(( PM poslat %s (ID:%d): %s ))", iName, targetId, gMessage); // Formatiranje poruke
SendClientMessage(playerid, PM_OUTGOING_COLOR, Message); // Slanje poruke
// Formatiranje i slanje dolazne poruke primaocu
format(Message, sizeof(Message), "(( PM od %s (ID:%d): %s ))", pName, playerid, gMessage); // Formatiranje poruke
SendClientMessage(targetId, PM_INCOMING_COLOR, Message); // Slanje poruke
// Primaocu se pusta zvuk obavestenja o novoj poruci
PlayerPlaySound(targetId, 1085, 0.0, 0.0, 0.0);
return 1; // Izadji ovde
}
Ovo sve moze da se skrati izbacivanjem komentara (ne preporucujem nikad, jer posle mesec dana kad se vratite, samo citate komentare i skontate kod, bez mnogo razmisljanja), upotrebom K&R stajla, posebnom LOG univerzalnom funkcijom. Validacija se moze napisati na drugaciji nacin. Ja najvise volim SCM i return 1; lepo da napisem, kako Bog zapoveda. A vi mozete i ovako, kako vecina i radi:
// Provera i slanje poruke da primalac nije na serveru
if (!IsPlayerConnected(targetId)) return SendClientMessage(playerid, ADMINFS_MSG_COLOR, "Korisnik nije na serveru.");
Fotografija iz igre:

Fotografije unutar LOG datoteke:

Zakljucak
Nadam se da ste naucili nesto novo danas. Ako niste, procitajte i razmislite dobro, ponovo. Hvala na citanju.
Mozete pogledati, takodje, tutorial na malo drugaciji fazon od @Vasic :
https://gtablkn.gg/forum/tutorijali-u-vezi-sa-mpa/private-messages#post-644631
ITS Student - Information Technology
Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,086
Postovi:
58
Teme:
Pridružio se:Feb. 2022
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
15 / 250 XP
Početnik(0)
470
Postovi:
48
Teme:
Pridružio se:Feb. 2015
15. Jan. 2025.
markosimic wrote on January 15, 2025, 1:00 pm:
Jedina zamerka je pawncmd, mogao si staviti zcmd jer je ipak samo include.
Lepo.
Lepo.
Hvalaa. U pravu si. 😄 A, mogao sam. Nisam hteo niti jednu biblioteku. Ni pawncmd ni sscanf, vec na suvo, ali da ne bih zbunio ljude s strtok, strval, strlen, strcmp...
Realno, kad bih pravio neku FS s 2-3 komande ukljucujuci i PM, ne bih garant koristio niti jednu biblioteku osim a_samp i gl_common.inc.
Imao sam pawncmd u vec integrisan na serveru, pa zbog toga.
ITS Student - Information Technology
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava
