PHP Code:
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>
#define MAX_ZOMBIE_NAME_CHARS 32
new Array:g_array_zclass_name = Invalid_Array, g_zombie_classes_counter;
#define TASK_HUD 123131
new g_iZOMBIE_CLASS[33] = { -1, -1, ... }, g_forward_zombie_spawn;
public plugin_init()
{
RegisterHam(Ham_Spawn, "player", "Player_Spawned", 1);
g_forward_zombie_spawn = CreateMultiForward("us_zombie_spawned", ET_IGNORE, FP_CELL, FP_CELL);
}
public client_disconnect(id)
{
remove_task(id + TASK_HUD);
}
public plugin_end()
{
ArrayDestroy(g_array_zclass_name);
}
public plugin_precache()
{
g_array_zclass_name = ArrayCreate(MAX_ZOMBIE_NAME_CHARS, 1);
}
public Player_Spawned(id)
{
if(!is_user_alive(id) || !g_zombie_classes_counter) return;
g_iZOMBIE_CLASS[id] = random(g_zombie_classes_counter);
new dummy
ExecuteForward(g_forward_zombie_spawn, dummy, id, g_iZOMBIE_CLASS[id]);
remove_task(TASK_HUD + id);
set_task(0.1, "hud", TASK_HUD + id);
}
public plugin_natives()
{
register_native("register_zombie_class", "native_register_zm_class");
}
public hud(task)
{
new id = task - TASK_HUD
static szZombieName[MAX_ZOMBIE_NAME_CHARS];
ArrayGetString(g_array_zclass_name, g_iZOMBIE_CLASS[id], szZombieName, charsmax(szZombieName));
set_hudmessage(255, 90, 0, 0.02, 0.92, 0, 0.0, 0.3, 0.0, 0.0, 7);
show_hudmessage(id, "Zombie Class: %s", szZombieName);
set_task(0.1, "hud", TASK_HUD + id);
}
public native_register_zm_class(plugin, argc)
{
static szZombieName[MAX_ZOMBIE_NAME_CHARS];
get_string(1, szZombieName, charsmax(szZombieName));
if(!szZombieName[0])
{
server_print("Can not register an empty zombie classname!");
return -1;
}
if(g_iZOMBIE_CLASS[0] == -1)
{
arrayset(g_iZOMBIE_CLASS, 0, sizeof g_iZOMBIE_CLASS);
}
ArrayPushString(g_array_zclass_name, szZombieName);
g_zombie_classes_counter++;
return ( g_zombie_classes_counter-1 ) ;
}