in func_damage add a global check, "is_user_valid(attacker)" at the beginning of the func, so it won't throw an invalid player ID error. And change idinflictor to inflictor.
public func_damage(victim, idinflictor, attacker, Float:damage, damagebits)
{
if (playerlvl[attacker] >= 5 && zp_get_user_human(attacker))
SetHamParamFloat(4 , damage * 1)
if (playerlvl[attacker] >= 15 && zp_get_user_human(attacker))
SetHamParamFloat(4 , damage * 1.1)
if (playerlvl[attacker] >= 20 && zp_get_user_human(attacker))
SetHamParamFloat(4 , damage * 1.3)
if (playerlvl[attacker] >= 30 && zp_get_user_human(attacker))
SetHamParamFloat(4 , damage * 1.5 )
if (playerlvl[attacker] >= 5 && zp_get_user_zombie(attacker))
SetHamParamFloat(4 , damage + 5.0)
if (playerlvl[attacker] >= 10 && zp_get_user_zombie(attacker))
SetHamParamFloat(4 , damage + 20.0)
if (playerlvl[attacker] >= 20 && zp_get_user_zombie(attacker))
SetHamParamFloat(4 , damage + 40.0)
if (playerlvl[attacker] >= 30 && zp_get_user_zombie(attacker))
SetHamParamFloat(4 , damage + 50.0)
} --> public func_damage(victim, inflictor, attacker, Float:damage, damagebits)
{
if(is_user_valid(attacker)) {
if (playerlvl[attacker] >= 5 && zp_get_user_human(attacker))
SetHamParamFloat(4 , damage * 1)
if (playerlvl[attacker] >= 15 && zp_get_user_human(attacker))
SetHamParamFloat(4 , damage * 1.1)
if (playerlvl[attacker] >= 20 && zp_get_user_human(attacker))
SetHamParamFloat(4 , damage * 1.3)
if (playerlvl[attacker] >= 30 && zp_get_user_human(attacker))
SetHamParamFloat(4 , damage * 1.5 )
if (playerlvl[attacker] >= 5 && zp_get_user_zombie(attacker))
SetHamParamFloat(4 , damage + 5.0)
if (playerlvl[attacker] >= 10 && zp_get_user_zombie(attacker))
SetHamParamFloat(4 , damage + 20.0)
if (playerlvl[attacker] >= 20 && zp_get_user_zombie(attacker))
SetHamParamFloat(4 , damage + 40.0)
if (playerlvl[attacker] >= 30 && zp_get_user_zombie(attacker))
SetHamParamFloat(4 , damage + 50.0)
}
return HAM_IGNORED;
}
- 0.6
Don't register natives with "1" parameter, just leave it blank.
- 0.7
in natives, use get_param(parameter_number) instead of variables (id, index)
public native_zx_get_user_level(id)
{
if(!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE , "[ZX] Invaild Player (%d)" , id)
return -1
}
return playerlvl[id]
} -->
do this in every native.
public native_zx_get_user_level(index)
{
index = get_param(1)
if(!is_user_valid(index))
{
log_error(AMX_ERR_NATIVE , "[ZX] Invaild Player (%d)" , index)
return -1
}
return playerlvl[index]
} - 0.8
create a 1.0 frequency set_task and check there everything you need instead of making a lot of tasks.
- 0.9
use formatex instead of format.
- 1.0
your nvault save/retrieve methods are like the old one. Look at my plugin LXS.
Anyways about the methods, it's your choice. Formatex is a requirement. I know there's places where you can't use formatex but you should use it where you can. You didn't understand what I said. You don't need these defines. They're already included in zombieplague.inc /* Teams for zp_register_extra_item() */ #define ZP_TEAM_ZOMBIE (1<<0) #define ZP_TEAM_HUMAN (1<<1) #define ZP_TEAM_NEMESIS (1<<2) #define ZP_TEAM_SURVIVOR (1<<3) #define ZP_TEAM_SNIPER (1<<4) #define ZP_TEAM_ASSASSIN (1<<5)
Natives on style 1 are buggy. Change it to 0 like I said. SteamID doesn't change, only if you use CT Shield.