PHP Code:
#include <amxmodx>
#include <zombieplague>
#include <fakemeta>
#define MODEL "zombie_origin2" // name of the model
#define TASK_DELAY 0.5
#define MODELSET_TASK 100
new g_itemzp, Health, Gravity, Model, g_zombie [33]
new g_has_model[33]
new g_model[33][32]
new Float:g_models_counter
public plugin_init()
{
register_plugin("[ZP] Zombie Pack", "1.3", "zombieplague")
g_itemzp = zp_register_extra_item("Zombie Pack", 35, ZP_TEAM_ZOMBIE)
Health = register_cvar("zp_zombiepack_health", "5000"); // Amount of HP
Gravity = register_cvar("zp_zombiepack_gravity", "0.7"); // Amount of Gravity
Model = register_cvar("zp_zombiepack_model", "1")
}
public plugin_precache()
{
new modelpath[100]
formatex(modelpath, sizeof modelpath - 1, "models/player/%s/%s.mdl", MODEL, MODEL)
engfunc(EngFunc_PrecacheModel, modelpath)
}
public zp_extra_item_selected(player, itemplayer)
{
if (itemplayer == g_itemzp)
{
// Health
set_pev(player, pev_health, (pev(player, pev_health) + get_pcvar_float(Health)))
// Gravity
fm_set_user_gravity(player, get_pcvar_float(Gravity))
// Model
/*if (get_pcvar_num(Model))
fm_set_user_model(player, model)*/
if (get_pcvar_num(Model))
set_task(0.1, "cambiar", player)
client_print(player, print_chat, "[ZP] You have bought a Zombie Pack")
}
}
stock fm_set_user_gravity(index, Float:gravity = 1.0) {
set_pev(index, pev_gravity, gravity);
return 1;
}
public clcmd_drop(player)
{
if (g_zombie[player])
return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}
public cambiar(player)
{
if (g_zombie[player])
{
copy(g_model[player], sizeof g_model[] - 1, MODEL)
new currentmodel[32]
fm_get_user_model(player, currentmodel, sizeof currentmodel - 1)
if (!equal(currentmodel, g_model[player]))
{
set_task(1.0 + g_models_counter, "task_set_model", player+MODELSET_TASK)
g_models_counter += TASK_DELAY
}
}
return PLUGIN_HANDLED
}
public event_round_start()
{
for (new player; player <= 32; player++) g_zombie[player] = false;
}
public event_round_end()
{
g_models_counter = 0.0
}
public fw_playerKilled(victim, attacker, shouldgib)
{
if (g_zombie[victim])
{
fm_reset_user_model(victim)
}
}
public task_set_model(player)
{
// Get player player
player -= MODELSET_TASK
// Actually set the player's model
fm_set_user_model(player, g_model[player])
}
public fw_ClientUserInfoChanged(player)
{
if (g_zombie[player] && !zp_get_user_first_zombie(player) && !zp_get_user_zombie(player) && !zp_get_user_nemesis(player) && !zp_get_user_survivor(player))
{
// player doesn't have a custom model
if (!g_has_model[player])
return FMRES_IGNORED;
// Get current model
static currentmodel[32]
fm_get_user_model(player, currentmodel, sizeof currentmodel - 1)
// Check whether it matches the custom model - if not, set it again
if (!equal(currentmodel, g_model[player]))
fm_set_user_model(player, g_model[player])
return FMRES_IGNORED;
}
return FMRES_IGNORED;
}
stock fm_set_user_model(player, const modelname[])
{
// Set new model
engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", modelname)
// Remember this player has a custom model
g_has_model[player] = true
}
stock fm_get_user_model(player, model[], len)
{
// Retrieve current model
engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", model, len)
}
stock fm_reset_user_model(player)
{
// player doesn't have a custom model any longer
g_has_model[player] = false
dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))
}