Makenzi

Makenzi

Hustler

Poslednja aktivnost

pre 7 godina

postova

86

Kreiranih tema

4

XP

240

Pridružio se

nov. 2018

Trenutna aktivnost

Izgleda da Makenzi trenutno ne radi ništa

Odgovorio na Dec 06, 2018
Oko sscanfa
GTA San Andreas Multiplayer / Pitanja & Pomoć
Imas vise varijabli nego specifikatora u cmd 🙄
Odgovorio na Dec 05, 2018
[CP] Fast Food Tezge
GTA San Andreas Multiplayer / Multimedija
• Shomy • wrote on December 5, 2018, 8:41 pm:
Aloe! Jel treba da upotrebljavam visu silu?!

Ma zajebavam se, nisi shvatio, kida 😄
Odgovorio na Dec 05, 2018
Početničke greške & Saveti za početnike [ i neke "ozbiljne" "skriptere" ]
GTA San Andreas Multiplayer / Tutorijali
-= Početničke greške & Saveti za početnike. =-


Pozdrav svima,
u ovom tutorialu ću vas provesti kroz neke najčešće greške koje na često nailazim kada pišem u pdf-u "Razgovor u vezi PAWN - Skriptanja".



1. Brinete za bezopasne warninge, a one najbitnije propuštate misleći " ma to su samo warninzi, može da radi i sa njima, ne bi compile mode da nešto neće da radi... ".
Na primer, ne brinete za warning
warning 225: unreachable code

što znači da jedan deo skripte ispod nekog returna (primer) uopšte nije u funkciji i da tom na tom mestu ne treba return, a brinete se za warning
warning 217: loose indentation

koji je skroz bezopasan ( loose indentation - neki deo koda nije "uredan" tj. nije poravnat, npr 2 tab-a odvojen a ostalo su 1 tab odvojeni ).
2. Ponavljate istu funkciju kroz celu skriptu, a mogli ste samo na jednom mestu da uradite tu funckiju što automatski štedi vreme i optimizuje sam kod.
Nepravilno:
new g_Anti_CMD_Spam; //Sa ovim cemo proveravati komande tj. anti spam komandi...

public OnPlayerConnect(playerid)
{
g_Anti_CMD_Spam = -1;
return 1;
}

CMD:cmd1(playerid, params[])
{
if(gettime() < g_Anti_CMD_Spam) return SendClientMessage(playerid, -1, " Komande mozete koristiti svake 3 sekunde!");
{
g_Anti_CMD_Spam = gettime() + 3; //Povecava ukupno vreme (int) za 3 tj. 3 sekunde.
}
return 1;
}

CMD:cmd2(playerid, params[])
{
if(gettime() < g_Anti_CMD_Spam) return SendClientMessage(playerid, -1, " Komande mozete koristiti svake 3 sekunde!");
{
g_Anti_CMD_Spam = gettime() + 3; //Povecava ukupno vreme (int) za 3 tj. 3 sekunde.
}
return 1;
}

CMD:cmd3(playerid, params[])
{
if(gettime() < g_Anti_CMD_Spam) return SendClientMessage(playerid, -1, " Komande mozete koristiti svake 3 sekunde!");
{
g_Anti_CMD_Spam = gettime() + 3; //Povecava ukupno vreme (int) za 3 tj. 3 sekunde.
}
return 1;
}

CMD:cmd4(playerid, params[])
{
if(gettime() < g_Anti_CMD_Spam) return SendClientMessage(playerid, -1, " Komande mozete koristiti svake 3 sekunde!");
{
g_Anti_CMD_Spam = gettime() + 3; //Povecava ukupno vreme (int) za 3 tj. 3 sekunde.
}
return 1;
}
//...
CMD:cmd500(playerid, params[])
{
if(gettime() < g_Anti_CMD_Spam) return SendClientMessage(playerid, -1, " Komande mozete koristiti svake 3 sekunde!");
{
g_Anti_CMD_Spam = gettime() + 3; //Povecava ukupno vreme (int) za 3 tj. 3 sekunde.
}
return 1;
}

Jace, brze, bolje:
new g_Anti_CMD_Spam; //Sa ovim cemo proveravati komande tj. anti spam komandi...

public OnPlayerConnect(playerid) //Poziva se kada se igrac konektuje na server.
{
g_Anti_CMD_Spam = -1;
return 1;
}

public OnPlayerCommandReceived(playerid, cmd[], params[], flags) //Pawn.CMD
{
    if(gettime() < g_Anti_CMD_Spam)
    {
    SendClientMessage(playerid, -1, " Komande mozete koristiti svake 3 sekunde!");
        return 0;
    }
    return 1;
}

CMD:cmd1(playerid, params[])
{
g_Anti_CMD_Spam = gettime() + 3; //Potpuno isto kao gore samo smo proveru prebacili na callback koji se poziva svaki put kada igrac izvrsi komandu...
return 1;
}

CMD:cmd2(playerid, params[])
{
g_Anti_CMD_Spam = gettime() + 3; //Potpuno isto kao gore samo smo proveru prebacili na callback koji se poziva svaki put kada igrac izvrsi komandu...
return 1;
}

CMD:cmd3(playerid, params[])
{
g_Anti_CMD_Spam = gettime() + 3; //Potpuno isto kao gore samo smo proveru prebacili na callback koji se poziva svaki put kada igrac izvrsi komandu...
return 1;
}

CMD:cmd4(playerid, params[])
{
g_Anti_CMD_Spam = gettime() + 3; //Potpuno isto kao gore samo smo proveru prebacili na callback koji se poziva svaki put kada igrac izvrsi komandu...
return 1;
}
//...
CMD:cmd500(playerid, params[])
{
g_Anti_CMD_Spam = gettime() + 3; //Potpuno isto kao gore samo smo proveru prebacili na callback koji se poziva svaki put kada igrac izvrsi komandu...
return 1;
}

Ovo nije korisno samo u ovom slučaju, na primer neprofesionalni skripter Xunder proverava da li je igrac ulogovan na svakoj cmd a mogao je jednostavno staviti pod isti ovaj callback... ( razumem da zelite neke cmd za koje ne treba provera, zato postoji cmd[] da proverite koja se cmd izvrsava ako je potrebno u callbacku.
3. Računaj!, Stani! Ne beži, i ja obično odma pobegnem čim nanjušim matematiku ali sada je drugačije!
Česta greška koju sam primetio je da kreirate 256 stringove za SendClientMessage, maksimalna dužina poruke za SendClientMessage je 144 tako da koristite veličinu stringa 145 kada formatirate poruku!
I nemojte za boju u SendClientMessage stavljati -1 pa onda posle u poruci boju, već tamo stavite Hex boju jer se i ta boja koja na početku stavite u poruci računa kao string i automatski imate manje karaktera na raspolaganju!
4. Nemojte koristiti arraye tamo gde ne morate, evo zašto:
new Float:pos;
GetPlayerPos(playerid, pos, pos, pos);

Compile speed test ( na 10 arraya ): 2444,2448,2473
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y , z);

Compile speed test ( na 10 Non-Arraya ): 972,975,963
Znači duplo je brže!
5. Nemojte koristiti for loop da prodjete kroz sve konektovane igrače nego koristite YSI y_iterate!
Ako pak ne želite da koristite y_iterate (foreach), ovo je najefikasniji loop da prođete kroz sve konektovane igrače:
for (new slots = GetMaxPlayers(), i; i < slots; i++)
{
    if (!IsPlayerConnected(i))
        continue;
    //kod koji se izvrÅ¡ava za konektovane igrače
}

6. Ukoliko igraču želite poslati poruku i da ga kikujete, pozivanje kika morate odložiti ili igrač neće videti poruku, mislim da je to do delay-a između servera i klijenta ( ping + još nešto malo zbog skripte, ne znam kako da napišem to ).
7. Korištenje streamer-a kada ne morate, na primer imate malo objekata ili pak podloge, ako nemate podlogu u CreateObjectu, velika je šansa da će vozila prolaziti kroz nju jer će ona biti uništena čim igrač izađe iz stream distance COD objekta.
8. Nemojte koristiti PAWNO ! Sada očekujem mnogo osuda, razumem da svako radi kako hoće, no ovo je samo savet i objasnit ću vam detaljno sve (lično iskustvo)...
Na primer, imate pawno koji je veoma spor program i nema tzv. "Auto-Complete" f-ju, sada ćete misliti da sam lenj da kucam ceo kod? Ne, VI ste lenji...
U PAWNO je logično da koristite skraćenice tipa SCM i SCMTA jer morate sve da pišete dok na primer u Sublime Text 2/3 editoru ukucate SCM i automatski će Vam se pojaviti SendClientMessage i samo stisnete enter i eto, cela f-ja...
Zašto to?
Korištenje skraćenica za boje, skraćenice tipa SCM/SCMTA/SPD i tako dalje znatno usporavaju vreme compile-a dok u ST2/3 nema tih skraćenica a isto dobijete...
9. Ovo se suprostavlja svemu ovome što sam pisao jer ovo će jako malo "usporiti" ( ispravite me ako grešim ) vreme kompajla moda, treba da koristite macroe tipa
#define ERROR(%0,%1)    SCMF(%0, 0xFF0000FF, "ERROR | {FFFFFF}"%1)

Zašto? Postoji mnogo razloga, prvi je da je brže nego da formatirate celu poruku ispočetka, drugo ne morate non-stop da pišete iste boje, i treće što lako možete editovati PREFIX iz npr "BOJA"[MOD:RP] Poruka u "BOJA"| "BOJA"MOD:RP "BOJA"| - Poruka
10. Koristite enum-e za definisanje dialoga.
Ne znam da li je ovo brže, predpostavljam da jeste ( ne mora da znači ), ali mnogo je olakšavajuće, vi u jedan enum možete spakovati sve dialoge koje imate u modu a ne za svaki dialog da imate poseban BROJ npr #define DIALOG (356)...
Primer:
enum
{
    DIALOG_REGISTER,
    DIALOG_LOGIN
    //...
};



* Ova lista nije poređana po redu ( od najčešćih ka onim retkim i slično tome! ).
* Ukoliko ste uočili grešku, ispravite mi ili pak pošaljite Vaše mišljenje.
* Ova lista će blagovremeno biti updateovana od strane mene uz Vašu pomoć ( ili ako šta zanimljivo nađem )...!
Odgovorio na Dec 05, 2018
gettime()
GTA San Andreas Multiplayer / Pitanja & Pomoć
rizla wrote on December 5, 2018, 8:37 pm:
e to me interesuje, gledam da smanjim maksimalno upotrebu tajmer sto je vise moguce. Hvala u svakom slucaju

Hvala tebi! :-*
Odgovorio na Dec 05, 2018
[CP] Fast Food Tezge
GTA San Andreas Multiplayer / Multimedija
Ne svidja nam se, mi bi tebe...
If you know what i mean...  😄 😛
Odgovorio na Dec 05, 2018
Oko Login
GTA San Andreas Multiplayer / Pitanja & Pomoć
Izvol'te:
new g_LoginTimer;

public OnPlayerDisconnect(playerid, reason)
{
KillTimer(g_LoginTimer);
return 1;
}

forward Ucitano(playerid);
public Ucitano(playerid)
{
ClearChat(playerid, 25);
SendClientMessage(playerid, -1, "SERVER LOADED...");
if(fexist(UserPath(playerid)))
{
    SetPlayerVirtualWorld(playerid, 0); SetPlayerInterior(playerid, 0);
    InterpolateCameraPos(playerid, -996.689, 869.492, 41.923, -1265.562, 666.918, 42.151, 7000);
InterpolateCameraLookAt(playerid, -1112.462, 867.032, 36.464, -1252.443, 765.840, 35.994, 7000);
ClearChat(playerid, 25);
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
SPD(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,""BELA"LOGIN..",""BELA"Hello and welcome back to Insanity DeathMatch!\nYour account has been found in our database.\n\nHINT: Type your password in 60 seconds or you will get kicked.","Login","Exit");
Uneo_Pass = 1;
nekickaj = 0; OVO
g_LoginTimer = SetTimerEx("g_Kick", 30000, false, "d", playerid);
}
else
{
    SetPlayerVirtualWorld(playerid, 0); SetPlayerInterior(playerid, 0);
    InterpolateCameraPos(playerid,-996.689, 869.492, 41.923, -1265.562, 666.918, 42.151, 7000);
InterpolateCameraLookAt(playerid, -1112.462, 867.032, 36.464, -1252.443, 765.840, 35.994, 7000);
ClearChat(playerid, 25);
SPD(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"REGISTRATION..","Hello and welcome to Insanity DeathMatch SA-MP server!\nIn the blank spot bellow you should type your password.\n\nHINT: It shouldn`t be more than 24 characters or less than 6.","Register","Exit");
}
}

forward g_Kick(playerid);
public g_Kick(playerid)
{
SendClientMessage(playerid, -1, "You are kicked from the server because you didn't logged in on time!");
SetTimerEx("Kick", 465, false, "d", playerid); //Mora ovako ili mu nece pokazati poruku ^.
return 1;
}
//sada ovo dodas ako se uspesno loginao:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_LOGIN)
{
if(!response) return Kick(playerid);
if(response)
{
//Ako je logged in:
KillTimer(g_LoginTimer);
}
}
return 1;
}
Odgovorio na Dec 05, 2018
gettime()
GTA San Andreas Multiplayer / Pitanja & Pomoć
rizla wrote on December 5, 2018, 8:09 pm:
koliko sam razumeo, da taj nacin ne moze posle nekog vremena da pozove funkciju? kao obican tajmer

Buraz, gettime() uzima neki int od nzm kojeg datuma, za svaki datum od npr 1990 ( lupam, ne znam tačno ) ja na integet dodalo po 1 sekundu i sve tako do momenta kada pozoveš f-ju...
U prevodu, ne može, ali možeš da koristiš y_timers ili PawnPlus
Odgovorio na Dec 05, 2018
Oko Login
GTA San Andreas Multiplayer / Pitanja & Pomoć
Daj celu funkciju gde mu pokazuješ dialog pa ću fixati.
Odgovorio na Dec 05, 2018
Oko Login
GTA San Andreas Multiplayer / Pitanja & Pomoć
Балша. wrote on December 5, 2018, 5:34 pm:
Vljd je tacno s tela pisem
// ovo nedje na vrh
new nekickaj;
//ovo nedje na kraj mos
Forward loginkick(playerid);
public loginkick(playerid);
{
if(nekickaj == 0)
{
Kick(playerid);
}
return 1;
}
//ovo kod toga dje ti se pojavljuje dijalog za login
nekickaj = 0;
SetTimerEx("loginkick", 30000, false, "i", playerid); //1000 = 1 sekund
//ovo kod tog sto se pojavi kad ukuca sifru
nekickaj = 1;

Imas dosta greškica, najviše pravopisnih...
public loginkick(playerid);

u
public loginkick(playerid)


dijalog
else { return 1; }

može i:
else return 1;
Odgovorio na Dec 05, 2018
Kako koristiti "gettime()" kao tajmer?
GTA San Andreas Multiplayer / Tutorijali
gettime() funkcija kao tajmer!


Pozdrav svima,
danas ću vas naučiti kako da kreirate tajmer pomoću gettime() funkcije.
Ovde ću Vam pokazati nešto kao Anti Spam, ako ovo želite za komande ( anti cmd spam ) nikako to nemojte raditi ispod svake komande, no više o tome u sledećem tutorialu!

Koraci
1. Prvo kreirate pvar ( player variable ):
new g_EngineSpam;

2. Sada kada se igrac konektuje, refreshujte taj pvar na -1:
public OnPlayerConnect(playerid)
{
    g_EngineSpam = -1;
    return 1;
}

3. Sada kreiramo komandu ( tj. samo onaj deo koji nam trenutno treba )
CMD:engine(playerid, params[])
{
if(gettime() < g_EngineSpam) return SendClientMessage(playerid, -1, "[Anti:Spam] Motor vozila mozete paliti na svake 3 sekunde!");
{
g_EngineSpam = gettime() + 3; // podesava pvar na 3 sekunde od trenutnog vremena.
//kod
}
}



Prošli tutorial: KLIK
Sledeći tutorial: Česte greške početnika. [ Uskoro... ]
3

Novi Član

Nivo 3

Iskustvo 40 / 100 XP
Ukupno XP: 240 60 XP do sledećeg nivoa
6
Dostignuća
240
Ukupno XP
0
Trenutni Niz
0
Najduži Niz

Sva Dostignuća

6 / 20 otključano

Prikaži sve →
🎯
Početak
Početak
Napišite 10 postova na forumu
+25 XP
Aktivni Saradnik
Aktivni Saradnik
Napišite 50 postova na forumu
+50 XP
🏅
Klub Stotina
Klub Stotina
Napišite 100 postova na forumu
+100 XP
🏆
Legenda Foruma
Legenda Foruma
Napišite 500 postova na forumu
+250 XP
👥
Vođa Diskusija
Vođa Diskusija
Kreirajte 10 tema na forumu
+50 XP
🛡️
Uzoran Građanin
Uzoran Građanin
30 dana bez ikakvih upozorenja
+40 XP
🔰
Primerni Član
Primerni Član
90 dana bez ikakvih upozorenja
+100 XP
🚩
Čuvar Zajednice
Čuvar Zajednice
Pošaljite 5 korisnih prijava
+75 XP
📅
Nedeljni Ratnik
Nedeljni Ratnik
Prijavite se 7 dana zaredom
+35 XP
🔥
Posvećeni Fan
Posvećeni Fan
Prijavite se 30 dana zaredom
+150 XP
💬
Prvi Post
Prvi Post
Napišite svoj prvi post na forumu
+10 XP
📝
Pokretač Tema
Pokretač Tema
Kreirajte svoju prvu temu
+15 XP
❤️
Poštovalac
Poštovalac
Dajte svoj prvi lajk na post
+5 XP
👍
Prvo Priznanje
Prvo Priznanje
Primite svoj prvi lajk na post
+5 XP
👤
Identitet Otkriven
Identitet Otkriven
Popunite profil sa avatarom i biografijom
+20 XP

Nedavna XP Aktivnost

+100
Otključano: Primerni Član
pre 1 nedelju
Dostignuće
+40
Otključano: Uzoran Građanin
pre 1 nedelju
Dostignuće
+50
Otključano: Aktivni Saradnik
pre 1 nedelju
Dostignuće
+25
Otključano: Početak
pre 1 nedelju
Dostignuće
+15
Otključano: Pokretač Tema
pre 1 nedelju
Dostignuće
+10
Otključano: Prvi Post
pre 1 nedelju
Dostignuće