Anti SpawnKill (15 Linija)

PabloK Započeo PabloK
pre 5 godina
2,574
pregleda
11
postova
PabloK
Shot Caller
pre 5 godina
Anti SpawnKill


Šta ćemo da naučimo u ovom tutorialu?
Naučićemo kako da napravimo efikasnu Anti SpawnKill zaštitu.


Da li ova zaštita čini igrača besmrtnim?
Ne, ovo je Anti SpawnKill a ne Anti SpawnDeath zaštita, ovo znači da drugi igrač ne može ubiti drugog igrača oružjem, igrač normalno može da umre ako padne sa velike visine i slično.


Kako ćemo to da uradimo?
Jednostavno, objašnjenje je na dnu 🙂
new AntiSpawnKill;

// Koliko dugo igrac ne sme da primi damage (milisekunde)
#define ANTI_SPAWN_KILL_TIME (3000)

public OnPlayerSpawn(playerid)
{
// -> Dodaj vrednost ANTI_SPAWN_KILL_TIME na GetTickCount()
AntiSpawnKill = GetTickCount() + ANTI_SPAWN_KILL_TIME;
return 1;
}

public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
// Blokiraj damage ako SpawnKill vreme nije proslo
if(hittype == BULLET_HIT_TYPE_PLAYER) {
if(GetTickCount() < AntiSpawnKill) return 0;
}
return 1;
}

//
// Šta smo tačno uradili?
//
// Definisali smo vreme u toku kog igrac ne moze biti ubijen (milisekunde)
// #define ANTI_SPAWN_KILL_TIME (3000)
//
// GetTickCount() uzima broj Tickova, znaci 1 tick po 1 milisekundi,
// ...sto znaci da ako dodamo 3000ms na GetTickCount() da ce igrac,
// ...tek za 3 sekunde moci da bude ranjen od strane drugog igraca.
// AntiSpawnKill = GetTickCount() + ANTI_SPAWN_KILL_TIME;
//
// Proverili smo da li je meta igrač a ne vozilo i slično
// if(hittype == BULLET_HIT_TYPE_PLAYER)
//
// Proverili smo da li je trenutni GetTickCount() veći od zbira
// ...starog GetTickCount()-a i zbira ANTI_SPAWN_KILL_TIME
// Ako nije, blokiraj damage tako što ćemo poslati return 0;
//



Zašto ovako?
Kao što vidite, nema niti jedan tajmer niti postavljanje HP-a na cellmin, prosto igrač može da umre prirodno ali ne može biti ubijen što i jeste poenta ove zaštite na RolePlay serverima, uživajte!
Garadooo
Forum Don
pre 5 godina
ne mogu ti dati vise od dvice.
PabloK
Shot Caller
pre 5 godina
Galardo wrote on May 8, 2020, 10:13 pm:
ne mogu ti dati vise od dvice.

Mnogo'e 😄
Kova_Maps1
Shot Caller
pre 5 godina
mnogo korisno ako radi fino

volio bih da razumijem to sto pises i kako si dosao do toga, cini se komplikovano mnogo
Garadooo
Forum Don
pre 5 godina
Kova_Maps1 wrote on May 10, 2020, 6:29 pm:
mnogo korisno ako radi fino

volio bih da razumijem to sto pises i kako si dosao do toga, cini se komplikovano mnogo

citas sa razumijevanjem,a ne kao sto vecina uci napamet...
PabloK
Shot Caller
pre 5 godina
Kova_Maps1 wrote on May 10, 2020, 6:29 pm:
mnogo korisno ako radi fino

volio bih da razumijem to sto pises i kako si dosao do toga, cini se komplikovano mnogo

GetTickCount();

Ta funkcija vraća vreme u milisekundama od onog trenutka kada je računar upaljen.

Znači, hajde da kažemo da si upalio računar pre 10 minuta, GetTickCount() bi vratio (10 * 60000 (minut u ms))

I sada, logično je da ako varijabli dodelimo GetTickCount() i onda posle recimo 5 sekundi pozovemo if uslov za GetTickCount() pod OnPlayerWeaonShot - on bi imao vrednost veću za 5000 nego što je imao tada a kao što znaš (valjda), varijabla čuva vrednosti, znači varijabla se ne menja sama od sebe.

A recimo, da smo pozvali taj if posle 2 sekunde, GetTickCount() bi vratio vrednost manju 1000ms nego što si dodelio varijabli jer u ovom slučaju smo dodali 3000 na prethodni GetTickCount:
ntiSpawnKill = GetTickCount() + ANTI_SPAWN_KILL_TIME; // Varijabla sada ima vrednost ( 15 (minuta) * 60000 (minut u ms) )


Najbolje je da sam isprobaš kako GetTickCount(); funkcionise tako sto ces uraditi ovo:
printf("Vrednost je %dms", GetTickCount());


https://wiki.sa-mp.com/wiki/GetTickCount
ShadowMortar
Shot Caller
pre 5 godina
Ja bih preporučio UNIX timestamp bolje, zato što:
https://wiki.sa-mp.com/wiki/GetTickCount
Ali ovako, u redu je i može pomoći mnogima jer danas skoro svi nažalost copy-pasteaju  😢
Makenzi Dosao Da Kaze Nes
Wheel Man
pre 5 godina
Shadow. wrote on May 17, 2020, 3:03 pm:
Ja bih preporučio UNIX timestamp bolje, zato što:
https://wiki.sa-mp.com/wiki/GetTickCount
Ali ovako, u redu je i može pomoći mnogima jer danas skoro svi nažalost copy-pasteaju  😢

Brate, iz razloga sam stavio GetTickCount, gettime ce na 4.4 (mozda i na 4.9, ne drzi me za rec, nisam siguran) zaokruziti na 4 i onda je igrac automatski izgubio pola sekunde (ili sekundu) zbog toga

Postoji i tickcount funkcija koja broji vreme od startovanja servera, svejedno je meni jer koristim fixes i svoju razliku za GetTickCount tako da nemam problema 😄

https://wiki.sa-mp.com/wiki/Tickcount

Drago mi je da neko cita tutoriale, bar to, hvala 😄
Qwery
Rookie
pre 5 godina
Dosta dobro,pomocice novajlijama 😉
Scripter Vladimir
Underboss
pre 5 godina
Paaa, korisno pocetnicima
Simić
Shot Caller
pre 5 godina
ODlican tutorijal, pomocice ce Skripterima koji oce da otvor svoj RP server  🙂

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava