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!