ZMBIO.RO

CSO Metatronic Zombie for zombie plague
[Image: 5ea788a63f636.png]
This plugin has sounds, sprites and models included in the archive  + Source code.

Source Code Native Zp:

Code:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <engine>
#include <fun>

// ZP NATIVE
#include <zombieplague>

#define PLUGIN "[CSO] Metatronic Zombie (Z-NOID)"
#define VERSION "1.0" // The Version For Zombie The Hero M4M3TS Version, Manual Class
#define AUTHOR "Asep Khairul Anam"

// Player Model In The "cstrike/models/player/metatronic_zombie/metatronic_zombie.mdl"
#define PLAYER_MODEL "metatronic_zombie"

// View Models
#define V_KNIFE_MODEL "models/asep/v_knife_metatronic.mdl"
#define V_GRENADE_MODEL_MERAH "models/asep/v_bomb_metatronic_merah.mdl"
#define V_GRENADE_MODEL_IJO "models/asep/v_bomb_metatronic_ijo.mdl"

// Buff Sprites
#define BUFFSPR_MODEL "sprites/zb_skill_hpbuff.spr"
#define BUFFSPR_CLASSNAME "buffspr_skill"
#define BUFFSPR_SCALE 1.0
#define BUFFSPR_ORIGIN_X 0.0
#define BUFFSPR_ORIGIN_Y 0.0
#define BUFFSPR_ORIGIN_Z 50.0

// Heal Sprites
#define SPR_MODEL "sprites/zb_skill_hp.spr"
#define SPR_CLASSNAME "buffspr_skill"
#define SPR_SCALE 1.0
#define SPR_ORIGIN_X 0.0
#define SPR_ORIGIN_Y 0.0
#define SPR_ORIGIN_Z 50.0

// Zombie Configuration
#define ZOMBIE_SPEED 250
#define ZOMBIE_GRAVITY 100

// Zombie Configuration (Skill)
#define ZOMBIE_SKILL_1_TIME 5 // Time GodMode + Regeneration
#define ZOMBIE_SKILL_1_COUNT 5 // Count Regen
#define ZOMBIE_SKILL_1_REGEN 100 // Health Regen
#define ZOMBIE_SKILL_2_FAKE_HEALTH 1000 // Fake Health Count
#define DELAY_SKILL_1 50 // Delay To Use The Skill Again
#define DELAY_SKILL_2 30 // Delay To Use The Skill Again

// Task
#define TASK_SKILL 10221
#define TASK_DELAY 10222

enum _:METATRONIC_SKILL
{
SKILL_READY = 0,
SKILL_USE,
SKILL_DELAY,
SKILL_DO
}

enum _:METATRONIC_ANIMATION
{
V_ANIM_SKILL_1 = 2,
P_ANIM_SKILL_1 = 150
}

enum _:METATRONIC_SOUND
{
SKILL_1 = 0,
SKILL_2,
PAIN_HURT,
PAIN_DEATH_1,
PAIN_DEATH_2,
PAIN_HEAL
}

enum _:METATRONIC_ENT
{
ENT_HEAD_SPR_HP_BUFF = 0,
ENT_HEAD_SPR_HP
}

new const MetatronicSound[][] =
{
"asep/metatronic_skill.wav",
"asep/metatronic_revival.wav",
"asep/metatronic_pain_hurt.wav",
"asep/metatronic_pain_death1.wav",
"asep/metatronic_pain_death2.wav",
"asep/metatronic_heal.wav"
}

new g_head_spr_ent[33][2]
new class_metatronic[33]
new g_skill1[33]
new g_skill1_regen_count[33]
new g_skill2[33]
new g_skill2_fake_health[33]
new Float:g_speed_hud[33]
new sync_hud[2]
new g_godmode_temp[33]
new g_HamBot
new index_metatronic

public plugin_init()
{
// Register Plugins .....
register_plugin(PLUGIN, VERSION, AUTHOR)

// Forward Event
register_event("DeathMsg", "Event_Death", "a")
register_event("CurWeapon","Event_CurWeapon","be","1=1")
register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0")

// Forward Log Event
register_logevent("Event_RoundEnd", 2, "1=Round_End")

// Forward Fakemeta
register_forward(FM_CmdStart , "Forward_CmdStart")

// Forward Ham
RegisterHam(Ham_TakeDamage, "player", "Forward_TakeDamage")

// Forward Think Entity
register_think(BUFFSPR_CLASSNAME, "Forward_Buffspr_Think")
register_think(SPR_MODEL, "Forward_Spr_Think")

// Create Sync Hud
sync_hud[0] = CreateHudSyncObj(12)
sync_hud[1] = CreateHudSyncObj(13)
}

public plugin_precache()
{
for(new i = 0; i < sizeof(MetatronicSound); i++)
precache_sound(MetatronicSound[i])

precache_model(V_KNIFE_MODEL)
precache_model(V_GRENADE_MODEL_MERAH)
precache_model(V_GRENADE_MODEL_IJO)

precache_model(BUFFSPR_MODEL)
precache_model(SPR_MODEL)

precache_viewmodel_sound(V_GRENADE_MODEL_MERAH)
precache_viewmodel_sound(V_GRENADE_MODEL_IJO)

new player_models[101]
formatex(player_models, charsmax(player_models), "models/player/%s/%s.mdl", PLAYER_MODEL, PLAYER_MODEL)
index_metatronic = precache_model(player_models)
}

public plugin_natives()
{
register_native("make_metatronic", "make_metatronic", 1)
register_native("metatronic_reset_value", "metatronic_reset_value", 1)
}

public client_putinserver(id)
{
if(!g_HamBot && is_user_bot(id))
{
g_HamBot = 1
set_task(0.1, "Do_RegisterHam", id)
}
}

public Do_RegisterHam(id)
{
RegisterHamFromEntity(Ham_TakeDamage, id, "Forward_TakeDamage")
}

public zp_user_humanized_post(id) metatronic_reset_value(id)
public Event_RoundEnd(id) metatronic_reset_value(id)
public Event_RoundStart(id) metatronic_reset_value(id)
public Event_Death()
{
new id = read_data(2)
if(zp_get_user_zombie(id) && class_metatronic[id])
{
engfunc(EngFunc_EmitSound, id, CHAN_ITEM, MetatronicSound[random_num(PAIN_DEATH_1, PAIN_DEATH_2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
metatronic_reset_value(id)
}
}

public Event_CurWeapon(id)
{
if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return

if(g_skill1[id] != SKILL_USE) set_user_maxspeed(id, float(ZOMBIE_SPEED))
else if(g_skill2[id] != SKILL_USE) set_user_maxspeed(id, float(ZOMBIE_SPEED))
switch(read_data(2))
{
case CSW_KNIFE:
{
set_pev(id, pev_viewmodel2, V_KNIFE_MODEL)
set_pev(id, pev_weaponmodel2, "")
}
case CSW_SMOKEGRENADE: set_pev(id, pev_viewmodel2, V_GRENADE_MODEL_MERAH)
case CSW_HEGRENADE: set_pev(id, pev_viewmodel2, V_GRENADE_MODEL_IJO)
}

}

public Forward_TakeDamage(victim, inflictor, attacker, Float:damage, dmgtype)
{
if(!is_user_connected(victim) || !is_user_connected(attacker))
return HAM_IGNORED
if(!zp_get_user_zombie(victim) || zp_get_user_zombie(attacker))
return HAM_IGNORED
if(!class_metatronic[victim])
return HAM_IGNORED

engfunc(EngFunc_EmitSound, victim, CHAN_BODY, MetatronicSound[PAIN_HURT], 1.0, ATTN_NORM, 0, PITCH_NORM)

if(g_skill1[victim] == SKILL_USE)
return HAM_SUPERCEDE

if(g_skill1[victim] == SKILL_USE && damage >= get_user_health(victim) && !g_godmode_temp[victim])
{
g_skill1[victim] = SKILL_DO
g_godmode_temp[victim] = 2
return HAM_SUPERCEDE
}

if(g_skill1[victim] == SKILL_DO && damage >= get_user_health(victim) && g_godmode_temp[victim] > 0)
{
g_godmode_temp[victim]--
return HAM_SUPERCEDE
}

if(g_skill2[victim] == SKILL_USE)
{
if(g_skill2_fake_health[victim] > 0)
{
g_skill2_fake_health[victim] -= floatround(damage)
g_speed_hud[victim] = 0.05
ExecuteHam(Ham_TakeDamage, victim, attacker, attacker, 0.0, dmgtype)
}
else if(g_skill2_fake_health[victim] <= 0)
{
g_skill2[victim] = SKILL_DELAY
g_skill2_fake_health[victim] = 0
g_speed_hud[victim] = 1.0
metatronic_remove_headspr(victim, ENT_HEAD_SPR_HP_BUFF)
set_task(float(DELAY_SKILL_2), "action_skill2_delay", victim+TASK_DELAY)
}

return HAM_SUPERCEDE
}

return HAM_HANDLED
}

public show_metatronic_hud(id)
{
static Temp_Skill_1[128], Temp_Skill_2[128]
static Red[2], Blue[2], Green[2]
if(g_skill1[id] == SKILL_READY)
{
Red[0] = 200
Green[0] = 200
Blue[0] = 200

formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Not Avaible")
}
else if(g_skill1[id] == SKILL_USE)
{
Red[0] = 200
Green[0] = 200
Blue[0] = 0

formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Using")
}
else if(g_skill1[id] == SKILL_DELAY)
{
Red[0] = 255
Green[0] = 0
Blue[0] = 0

formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Delayed")
}
else if(g_skill1[id] == SKILL_DO)
{
Red[0] = 0
Green[0] = 255
Blue[0] = 0

formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Avaible !!")
}

if(g_skill2[id] == SKILL_READY)
{
Red[1] = 0
Green[1] = 255
Blue[1] = 0

formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "[ R ] - Fake Health || Ready")
}
else if(g_skill2[id] == SKILL_USE)
{
Red[1] = 0
Green[1] = 180
Blue[1] = 200

formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "---- FAKE HEALTH: %i ----", g_skill2_fake_health[id])
}
else if(g_skill2[id] == SKILL_DELAY)
{
Red[1] = 255
Green[1] = 0
Blue[1] = 0

formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "[ R ] - Fake Health || Delay ...")
}

set_hudmessage(Red[0], Green[0], Blue[0], -1.0, -0.79, 0, 2.0, 10.0)
ShowSyncHudMsg(id, sync_hud[0], Temp_Skill_1)

set_hudmessage(Red[1], Green[1], Blue[1], -1.0, -0.76, 0, 2.0, 10.0)
ShowSyncHudMsg(id, sync_hud[1], Temp_Skill_2)
}

public Forward_CmdStart(id, UC_Handle, seed)
{
if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return

static Float:CurrentTime, Float:g_hud_delay[33]
CurrentTime = get_gametime()

if(CurrentTime - g_speed_hud[id] > g_hud_delay[id])
{
show_metatronic_hud(id)

if(pev(id, pev_solid) == SOLID_NOT)
set_pev(id, pev_solid, SOLID_BBOX)

if(g_skill1[id] == SKILL_USE && g_skill1_regen_count[id] > 0)
{
set_user_health(id, get_user_health(id) + ZOMBIE_SKILL_1_REGEN)
engfunc(EngFunc_EmitSound, id, CHAN_ITEM, MetatronicSound[SKILL_2], 1.0, ATTN_NORM, 0, PITCH_NORM)

g_skill1_regen_count[id]--
}

if(g_speed_hud[id] < 1.0)
g_speed_hud[id] = 1.0

g_hud_delay[id] = CurrentTime
}

if(g_skill1[id] == SKILL_READY && get_user_health(id) <= 100)
g_skill1[id] = SKILL_DO

static PressedButton
PressedButton = get_uc(UC_Handle, UC_Buttons)

if(PressedButton & IN_USE)
{
if(g_skill1[id] != SKILL_DO)
return

set_uc(UC_Handle, UC_Buttons, IN_ATTACK2)
set_task(0.001, "action_skill_1", id+TASK_SKILL)
}
else if(PressedButton & IN_RELOAD)
{
if(g_skill2[id] != SKILL_READY)
return

set_task(0.001, "action_skill_2", id+TASK_SKILL)
}

}

public make_metatronic(id)
{
if(!zp_get_user_zombie(id))
return

class_metatronic[id] = true

show_metatronic_hud(id)
metatronic_reset_var_skill(id)

fm_strip_user_weapons(id)
fm_give_item(id, "weapon_knife")

zp_override_user_model(id, PLAYER_MODEL)
set_pdata_int(id, 491, index_metatronic, 5)

set_user_maxspeed(id, float(ZOMBIE_SPEED))
set_user_gravity(id, float(ZOMBIE_GRAVITY)/100.0)

remove_task(id)
}

public action_skill_1(id)
{
id -= TASK_SKILL

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill1[id] != SKILL_DO)
return

g_skill1[id] = SKILL_USE
g_skill1_regen_count[id] = ZOMBIE_SKILL_1_COUNT

set_pdata_float(id, 83, 1.03, 5)

set_weapon_anim(id, V_ANIM_SKILL_1)
set_pev(id, pev_sequence, P_ANIM_SKILL_1)
set_pev(id, pev_framerate, 0.5)
engfunc(EngFunc_EmitSound, id, CHAN_WEAPON, MetatronicSound[SKILL_1], 1.0, ATTN_NORM, 0, PITCH_NORM)

new Float:fOrigin[3]
pev(id, pev_origin, fOrigin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DLIGHT)
engfunc(EngFunc_WriteCoord, fOrigin[0])
engfunc(EngFunc_WriteCoord, fOrigin[1])
engfunc(EngFunc_WriteCoord, fOrigin[2])
write_byte(30) // radius
write_byte(150)    // r
write_byte(150)  // g
write_byte(255)   // b
write_byte(40) // life in 10's
write_byte(40)  // decay rate in 10's
message_end()

// Create Head SPR (By Dias)
Create_Head_Sprites(id, ENT_HEAD_SPR_HP, SPR_CLASSNAME, SPR_MODEL, 0.75, 20.0, 5.0, 255.0, SPR_ORIGIN_X, SPR_ORIGIN_Y, SPR_ORIGIN_Z, 1, 0, 180, 220)

set_task(1.0, "action_reset_ability", id+TASK_SKILL)
set_task(float(ZOMBIE_SKILL_1_TIME), "reset_action_skill_1", id+TASK_SKILL)
}

public action_reset_ability(id)
{
id -= TASK_SKILL

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill1[id] != SKILL_USE)
return

set_pev(id, pev_framerate, 1.0)
}

public reset_action_skill_1(id)
{
id -= TASK_SKILL

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill1[id] != SKILL_USE)
return

g_skill1[id] = SKILL_DELAY
metatronic_remove_headspr(id, ENT_HEAD_SPR_HP)

set_task(float(DELAY_SKILL_1), "action_skill1_delay", id+TASK_DELAY)
}

public action_skill1_delay(id)
{
id -= TASK_DELAY

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill1[id] != SKILL_DELAY)
{
remove_task(id+TASK_DELAY)
return
}

g_skill1[id] = SKILL_READY
}

public action_skill_2(id)
{
id -= TASK_SKILL

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill2[id] != SKILL_READY)
return

g_skill2[id] = SKILL_USE
g_skill2_fake_health[id] = ZOMBIE_SKILL_2_FAKE_HEALTH
engfunc(EngFunc_EmitSound, id, CHAN_WEAPON, MetatronicSound[PAIN_HEAL], 1.0, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_EmitSound, id, CHAN_ITEM, MetatronicSound[SKILL_2], 1.0, ATTN_NORM, 0, PITCH_NORM)

Create_Head_Sprites(id, ENT_HEAD_SPR_HP_BUFF,  BUFFSPR_CLASSNAME, BUFFSPR_MODEL, 0.5, 0.0, 0.0, 255.0, BUFFSPR_ORIGIN_X, BUFFSPR_ORIGIN_Y, BUFFSPR_ORIGIN_Z, 1, 0, 180, 220)
}

public action_skill2_delay(id)
{
id -= TASK_DELAY

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill2[id] != SKILL_DELAY)
{
remove_task(id+TASK_DELAY)
return
}

g_skill2[id] = SKILL_READY
g_skill2_fake_health[id] = 0
}

public Create_Head_Sprites(id, num, const Classname[], const Sprite[], Float:Scale, Float:Frame, Float:Time, Float:Transparent, Float:Forward, Float:Right, Float:Up, ColorActivate, Red, Green, Blue)
{
// Thanks To Dias ...

static Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite"))
if(!pev_valid(Ent))
return

g_head_spr_ent[id][num] = Ent

static Float:Origin[3]
pev(id, pev_origin, Origin)

Origin[0] += Forward
Origin[2] += Up

set_pev(Ent, pev_origin, Origin)

set_pev(Ent, pev_takedamage, DAMAGE_NO)
set_pev(Ent, pev_solid, SOLID_NOT)
set_pev(Ent, pev_movetype, MOVETYPE_FOLLOW)

set_pev(Ent, pev_classname, Classname)
engfunc(EngFunc_SetModel, Ent, Sprite)

set_pev(Ent, pev_renderfx, kRenderFxNone)
set_pev(Ent, pev_rendermode, kRenderTransAdd)
set_pev(Ent, pev_renderamt, Transparent)

new Color[3]
Color[0] = Red
Color[1] = Green
Color[2] = Blue

if(ColorActivate)
set_pev(Ent, pev_rendercolor, Color)

set_pev(Ent, pev_owner, id)
set_pev(Ent, pev_scale, Scale)

if(Time > 0.0)
set_pev(Ent, pev_fuser1, get_gametime() + Time)

set_pev(Ent, pev_fuser2, Forward)
set_pev(Ent, pev_fuser3, Right)
set_pev(Ent, pev_fuser4, Up)

set_pev(Ent, pev_frame, 0.0)
set_pev(Ent, pev_iuser1, floatround(Frame))

set_pev(Ent, pev_nextthink, get_gametime() + 0.01)
}

public Forward_Buffspr_Think(ent)
{
if(!pev_valid(ent))
return

static Float:Origin[3], owner
owner = pev(ent, pev_owner)
pev(owner, pev_origin, Origin)

Origin[0] += pev(ent, pev_fuser2)
Origin[1] += pev(ent, pev_fuser3)
Origin[2] += pev(ent, pev_fuser4)

engfunc(EngFunc_SetOrigin, ent, Origin)
set_pev(ent, pev_nextthink, get_gametime() + 0.000001)
}

public Forward_Spr_Think(ent)
{
if(!pev_valid(ent))
return

static Float:Origin[3], owner
static Float:fFrame

owner = pev(ent, pev_owner)
pev(owner, pev_origin, Origin)
pev(ent, pev_frame, fFrame)

fFrame += 1.0
if(fFrame > 20.0) fFrame = 0.0

Origin[0] += pev(ent, pev_fuser2)
Origin[1] += pev(ent, pev_fuser3)
Origin[2] += pev(ent, pev_fuser4)

set_pev(ent, pev_frame, fFrame)
engfunc(EngFunc_SetOrigin, ent, Origin)
set_pev(ent, pev_nextthink, get_gametime() + 0.001)

static Float:fTimeRemove
pev(ent, pev_fuser1, fTimeRemove)
if(get_gametime() >= pev(ent, pev_fuser1) || g_skill1[owner] != SKILL_USE)
{
engfunc(EngFunc_RemoveEntity, ent)
return
}
}

public metatronic_reset_value(id)
{
class_metatronic[id] = false
metatronic_reset_var_skill(id)
}

public metatronic_reset_var_skill(id)
{
g_skill1[id] = 0
g_skill2[id] = 0
g_skill1_regen_count[id] = 0
g_skill2_fake_health[id] = 0
g_speed_hud[id] = 1.0

if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP])
g_head_spr_ent[id][ENT_HEAD_SPR_HP] = 0
}
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF])
g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF] = 0
}
}

public metatronic_remove_headspr(id, num)
{
if(num == ENT_HEAD_SPR_HP)
{
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP])
g_head_spr_ent[id][ENT_HEAD_SPR_HP] = 0
}
}
else if(num == ENT_HEAD_SPR_HP_BUFF)
{
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF])
g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF] = 0
}
}
else if(num == 2)
{
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP])
g_head_spr_ent[id][ENT_HEAD_SPR_HP] = 0
}
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF])
g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF] = 0
}
}
}

stock set_weapon_anim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = id)
write_byte(anim)
write_byte(pev(id, pev_body))
message_end()
}

stock precache_viewmodel_sound(const model[]) // I Get This From BTE
{
new file, i, k
if((file = fopen(model, "rt")))
{
new szsoundpath[64], NumSeq, SeqID, Event, NumEvents, EventID
fseek(file, 164, SEEK_SET)
fread(file, NumSeq, BLOCK_INT)
fread(file, SeqID, BLOCK_INT)

for(i = 0; i < NumSeq; i++)
{
fseek(file, SeqID + 48 + 176 * i, SEEK_SET)
fread(file, NumEvents, BLOCK_INT)
fread(file, EventID, BLOCK_INT)
fseek(file, EventID + 176 * i, SEEK_SET)

// The Output Is All Sound To Precache In ViewModels (GREAT :V)
for(k = 0; k < NumEvents; k++)
{
fseek(file, EventID + 4 + 76 * k, SEEK_SET)
fread(file, Event, BLOCK_INT)
fseek(file, 4, SEEK_CUR)

if(Event != 5004)
continue

fread_blocks(file, szsoundpath, 64, BLOCK_CHAR)

if(strlen(szsoundpath))
{
strtolower(szsoundpath)
engfunc(EngFunc_PrecacheSound, szsoundpath)
}
}
}
}
fclose(file)
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1057\\ f0\\ fs16 \n\\ par }
*/


Source CSO: 


Code:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <engine>
#include <fun>

// ZP NATIVE
#include <zombieplague>

#define PLUGIN "[CSO] Metatronic Zombie (Z-NOID)"
#define VERSION "1.0" // The Version For Zombie The Hero M4M3TS Version, Manual Class
#define AUTHOR "Asep Khairul Anam"

// Player Model In The "cstrike/models/player/metatronic_zombie/metatronic_zombie.mdl"
#define PLAYER_MODEL "metatronic_zombie"

// View Models
#define V_KNIFE_MODEL "models/asep/v_knife_metatronic.mdl"
#define V_GRENADE_MODEL_MERAH "models/asep/v_bomb_metatronic_merah.mdl"
#define V_GRENADE_MODEL_IJO "models/asep/v_bomb_metatronic_ijo.mdl"

// Buff Sprites
#define BUFFSPR_MODEL "sprites/zb_skill_hpbuff.spr"
#define BUFFSPR_CLASSNAME "buffspr_skill"
#define BUFFSPR_SCALE 1.0
#define BUFFSPR_ORIGIN_X 0.0
#define BUFFSPR_ORIGIN_Y 0.0
#define BUFFSPR_ORIGIN_Z 50.0

// Heal Sprites
#define SPR_MODEL "sprites/zb_skill_hp.spr"
#define SPR_CLASSNAME "buffspr_skill"
#define SPR_SCALE 1.0
#define SPR_ORIGIN_X 0.0
#define SPR_ORIGIN_Y 0.0
#define SPR_ORIGIN_Z 50.0

// Zombie Configuration
#define ZOMBIE_SPEED 250
#define ZOMBIE_GRAVITY 100

// Zombie Configuration (Skill)
#define ZOMBIE_SKILL_1_TIME 5 // Time GodMode + Regeneration
#define ZOMBIE_SKILL_1_COUNT 5 // Count Regen
#define ZOMBIE_SKILL_1_REGEN 100 // Health Regen
#define ZOMBIE_SKILL_2_FAKE_HEALTH 1000 // Fake Health Count
#define DELAY_SKILL_1 50 // Delay To Use The Skill Again
#define DELAY_SKILL_2 30 // Delay To Use The Skill Again

// Task
#define TASK_SKILL 10221
#define TASK_DELAY 10222

enum _:METATRONIC_SKILL
{
SKILL_READY = 0,
SKILL_USE,
SKILL_DELAY,
SKILL_DO
}

enum _:METATRONIC_ANIMATION
{
V_ANIM_SKILL_1 = 2,
P_ANIM_SKILL_1 = 150
}

enum _:METATRONIC_SOUND
{
SKILL_1 = 0,
SKILL_2,
PAIN_HURT,
PAIN_DEATH_1,
PAIN_DEATH_2,
PAIN_HEAL
}

enum _:METATRONIC_ENT
{
ENT_HEAD_SPR_HP_BUFF = 0,
ENT_HEAD_SPR_HP
}

new const MetatronicSound[][] =
{
"asep/metatronic_skill.wav",
"asep/metatronic_revival.wav",
"asep/metatronic_pain_hurt.wav",
"asep/metatronic_pain_death1.wav",
"asep/metatronic_pain_death2.wav",
"asep/metatronic_heal.wav"
}

new g_head_spr_ent[33][2]
new class_metatronic[33]
new g_skill1[33]
new g_skill1_regen_count[33]
new g_skill2[33]
new g_skill2_fake_health[33]
new Float:g_speed_hud[33]
new sync_hud[2]
new g_godmode_temp[33]
new g_HamBot
new index_metatronic

public plugin_init()
{
// Register Plugins .....
register_plugin(PLUGIN, VERSION, AUTHOR)

// Forward Event
register_event("DeathMsg", "Event_Death", "a")
register_event("CurWeapon","Event_CurWeapon","be","1=1")
register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0")

// Forward Log Event
register_logevent("Event_RoundEnd", 2, "1=Round_End")

// Forward Fakemeta
register_forward(FM_CmdStart , "Forward_CmdStart")

// Forward Ham
RegisterHam(Ham_TakeDamage, "player", "Forward_TakeDamage")

// Forward Think Entity
register_think(BUFFSPR_CLASSNAME, "Forward_Buffspr_Think")
register_think(SPR_MODEL, "Forward_Spr_Think")

// Create Sync Hud
sync_hud[0] = CreateHudSyncObj(12)
sync_hud[1] = CreateHudSyncObj(13)
}

public plugin_precache()
{
for(new i = 0; i < sizeof(MetatronicSound); i++)
precache_sound(MetatronicSound[i])

precache_model(V_KNIFE_MODEL)
precache_model(V_GRENADE_MODEL_MERAH)
precache_model(V_GRENADE_MODEL_IJO)

precache_model(BUFFSPR_MODEL)
precache_model(SPR_MODEL)

precache_viewmodel_sound(V_GRENADE_MODEL_MERAH)
precache_viewmodel_sound(V_GRENADE_MODEL_IJO)

new player_models[101]
formatex(player_models, charsmax(player_models), "models/player/%s/%s.mdl", PLAYER_MODEL, PLAYER_MODEL)
index_metatronic = precache_model(player_models)
}

public plugin_natives()
{
register_native("make_metatronic", "make_metatronic", 1)
register_native("metatronic_reset_value", "metatronic_reset_value", 1)
}

public client_putinserver(id)
{
if(!g_HamBot && is_user_bot(id))
{
g_HamBot = 1
set_task(0.1, "Do_RegisterHam", id)
}
}

public Do_RegisterHam(id)
{
RegisterHamFromEntity(Ham_TakeDamage, id, "Forward_TakeDamage")
}

public zp_user_humanized_post(id) metatronic_reset_value(id)
public Event_RoundEnd(id) metatronic_reset_value(id)
public Event_RoundStart(id) metatronic_reset_value(id)
public Event_Death()
{
new id = read_data(2)
if(zp_get_user_zombie(id) && class_metatronic[id])
{
engfunc(EngFunc_EmitSound, id, CHAN_ITEM, MetatronicSound[random_num(PAIN_DEATH_1, PAIN_DEATH_2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
metatronic_reset_value(id)
}
}

public Event_CurWeapon(id)
{
if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return

if(g_skill1[id] != SKILL_USE) set_user_maxspeed(id, float(ZOMBIE_SPEED))
else if(g_skill2[id] != SKILL_USE) set_user_maxspeed(id, float(ZOMBIE_SPEED))
switch(read_data(2))
{
case CSW_KNIFE:
{
set_pev(id, pev_viewmodel2, V_KNIFE_MODEL)
set_pev(id, pev_weaponmodel2, "")
}
case CSW_SMOKEGRENADE: set_pev(id, pev_viewmodel2, V_GRENADE_MODEL_MERAH)
case CSW_HEGRENADE: set_pev(id, pev_viewmodel2, V_GRENADE_MODEL_IJO)
}

}

public Forward_TakeDamage(victim, inflictor, attacker, Float:damage, dmgtype)
{
if(!is_user_connected(victim) || !is_user_connected(attacker))
return HAM_IGNORED
if(!zp_get_user_zombie(victim) || zp_get_user_zombie(attacker))
return HAM_IGNORED
if(!class_metatronic[victim])
return HAM_IGNORED

engfunc(EngFunc_EmitSound, victim, CHAN_BODY, MetatronicSound[PAIN_HURT], 1.0, ATTN_NORM, 0, PITCH_NORM)

if(g_skill1[victim] == SKILL_USE)
return HAM_SUPERCEDE

if(g_skill1[victim] == SKILL_USE && damage >= get_user_health(victim) && !g_godmode_temp[victim])
{
g_skill1[victim] = SKILL_DO
g_godmode_temp[victim] = 2
return HAM_SUPERCEDE
}

if(g_skill1[victim] == SKILL_DO && damage >= get_user_health(victim) && g_godmode_temp[victim] > 0)
{
g_godmode_temp[victim]--
return HAM_SUPERCEDE
}

if(g_skill2[victim] == SKILL_USE)
{
if(g_skill2_fake_health[victim] > 0)
{
g_skill2_fake_health[victim] -= floatround(damage)
g_speed_hud[victim] = 0.05
ExecuteHam(Ham_TakeDamage, victim, attacker, attacker, 0.0, dmgtype)
}
else if(g_skill2_fake_health[victim] <= 0)
{
g_skill2[victim] = SKILL_DELAY
g_skill2_fake_health[victim] = 0
g_speed_hud[victim] = 1.0
metatronic_remove_headspr(victim, ENT_HEAD_SPR_HP_BUFF)
set_task(float(DELAY_SKILL_2), "action_skill2_delay", victim+TASK_DELAY)
}

return HAM_SUPERCEDE
}

return HAM_HANDLED
}

public show_metatronic_hud(id)
{
static Temp_Skill_1[128], Temp_Skill_2[128]
static Red[2], Blue[2], Green[2]
if(g_skill1[id] == SKILL_READY)
{
Red[0] = 200
Green[0] = 200
Blue[0] = 200

formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Not Avaible")
}
else if(g_skill1[id] == SKILL_USE)
{
Red[0] = 200
Green[0] = 200
Blue[0] = 0

formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Using")
}
else if(g_skill1[id] == SKILL_DELAY)
{
Red[0] = 255
Green[0] = 0
Blue[0] = 0

formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Delayed")
}
else if(g_skill1[id] == SKILL_DO)
{
Red[0] = 0
Green[0] = 255
Blue[0] = 0

formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Avaible !!")
}

if(g_skill2[id] == SKILL_READY)
{
Red[1] = 0
Green[1] = 255
Blue[1] = 0

formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "[ R ] - Fake Health || Ready")
}
else if(g_skill2[id] == SKILL_USE)
{
Red[1] = 0
Green[1] = 180
Blue[1] = 200

formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "---- FAKE HEALTH: %i ----", g_skill2_fake_health[id])
}
else if(g_skill2[id] == SKILL_DELAY)
{
Red[1] = 255
Green[1] = 0
Blue[1] = 0

formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "[ R ] - Fake Health || Delay ...")
}

set_hudmessage(Red[0], Green[0], Blue[0], -1.0, -0.79, 0, 2.0, 10.0)
ShowSyncHudMsg(id, sync_hud[0], Temp_Skill_1)

set_hudmessage(Red[1], Green[1], Blue[1], -1.0, -0.76, 0, 2.0, 10.0)
ShowSyncHudMsg(id, sync_hud[1], Temp_Skill_2)
}

public Forward_CmdStart(id, UC_Handle, seed)
{
if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return

static Float:CurrentTime, Float:g_hud_delay[33]
CurrentTime = get_gametime()

if(CurrentTime - g_speed_hud[id] > g_hud_delay[id])
{
show_metatronic_hud(id)

if(pev(id, pev_solid) == SOLID_NOT)
set_pev(id, pev_solid, SOLID_BBOX)

if(g_skill1[id] == SKILL_USE && g_skill1_regen_count[id] > 0)
{
set_user_health(id, get_user_health(id) + ZOMBIE_SKILL_1_REGEN)
engfunc(EngFunc_EmitSound, id, CHAN_ITEM, MetatronicSound[SKILL_2], 1.0, ATTN_NORM, 0, PITCH_NORM)

g_skill1_regen_count[id]--
}

if(g_speed_hud[id] < 1.0)
g_speed_hud[id] = 1.0

g_hud_delay[id] = CurrentTime
}

if(g_skill1[id] == SKILL_READY && get_user_health(id) <= 100)
g_skill1[id] = SKILL_DO

static PressedButton
PressedButton = get_uc(UC_Handle, UC_Buttons)

if(PressedButton & IN_USE)
{
if(g_skill1[id] != SKILL_DO)
return

set_uc(UC_Handle, UC_Buttons, IN_ATTACK2)
set_task(0.001, "action_skill_1", id+TASK_SKILL)
}
else if(PressedButton & IN_RELOAD)
{
if(g_skill2[id] != SKILL_READY)
return

set_task(0.001, "action_skill_2", id+TASK_SKILL)
}

}

public make_metatronic(id)
{
if(!zp_get_user_zombie(id))
return

class_metatronic[id] = true

show_metatronic_hud(id)
metatronic_reset_var_skill(id)

fm_strip_user_weapons(id)
fm_give_item(id, "weapon_knife")

zp_override_user_model(id, PLAYER_MODEL)
set_pdata_int(id, 491, index_metatronic, 5)

set_user_maxspeed(id, float(ZOMBIE_SPEED))
set_user_gravity(id, float(ZOMBIE_GRAVITY)/100.0)

remove_task(id)
}

public action_skill_1(id)
{
id -= TASK_SKILL

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill1[id] != SKILL_DO)
return

g_skill1[id] = SKILL_USE
g_skill1_regen_count[id] = ZOMBIE_SKILL_1_COUNT

set_pdata_float(id, 83, 1.03, 5)

set_weapon_anim(id, V_ANIM_SKILL_1)
set_pev(id, pev_sequence, P_ANIM_SKILL_1)
set_pev(id, pev_framerate, 0.5)
engfunc(EngFunc_EmitSound, id, CHAN_WEAPON, MetatronicSound[SKILL_1], 1.0, ATTN_NORM, 0, PITCH_NORM)

new Float:fOrigin[3]
pev(id, pev_origin, fOrigin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DLIGHT)
engfunc(EngFunc_WriteCoord, fOrigin[0])
engfunc(EngFunc_WriteCoord, fOrigin[1])
engfunc(EngFunc_WriteCoord, fOrigin[2])
write_byte(30) // radius
write_byte(150)    // r
write_byte(150)  // g
write_byte(255)   // b
write_byte(40) // life in 10's
write_byte(40)  // decay rate in 10's
message_end()

// Create Head SPR (By Dias)
Create_Head_Sprites(id, ENT_HEAD_SPR_HP, SPR_CLASSNAME, SPR_MODEL, 0.75, 20.0, 5.0, 255.0, SPR_ORIGIN_X, SPR_ORIGIN_Y, SPR_ORIGIN_Z, 1, 0, 180, 220)

set_task(1.0, "action_reset_ability", id+TASK_SKILL)
set_task(float(ZOMBIE_SKILL_1_TIME), "reset_action_skill_1", id+TASK_SKILL)
}

public action_reset_ability(id)
{
id -= TASK_SKILL

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill1[id] != SKILL_USE)
return

set_pev(id, pev_framerate, 1.0)
}

public reset_action_skill_1(id)
{
id -= TASK_SKILL

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill1[id] != SKILL_USE)
return

g_skill1[id] = SKILL_DELAY
metatronic_remove_headspr(id, ENT_HEAD_SPR_HP)

set_task(float(DELAY_SKILL_1), "action_skill1_delay", id+TASK_DELAY)
}

public action_skill1_delay(id)
{
id -= TASK_DELAY

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill1[id] != SKILL_DELAY)
{
remove_task(id+TASK_DELAY)
return
}

g_skill1[id] = SKILL_READY
}

public action_skill_2(id)
{
id -= TASK_SKILL

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill2[id] != SKILL_READY)
return

g_skill2[id] = SKILL_USE
g_skill2_fake_health[id] = ZOMBIE_SKILL_2_FAKE_HEALTH
engfunc(EngFunc_EmitSound, id, CHAN_WEAPON, MetatronicSound[PAIN_HEAL], 1.0, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_EmitSound, id, CHAN_ITEM, MetatronicSound[SKILL_2], 1.0, ATTN_NORM, 0, PITCH_NORM)

Create_Head_Sprites(id, ENT_HEAD_SPR_HP_BUFF,  BUFFSPR_CLASSNAME, BUFFSPR_MODEL, 0.5, 0.0, 0.0, 255.0, BUFFSPR_ORIGIN_X, BUFFSPR_ORIGIN_Y, BUFFSPR_ORIGIN_Z, 1, 0, 180, 220)
}

public action_skill2_delay(id)
{
id -= TASK_DELAY

if(!is_user_alive(id))
return
if(!zp_get_user_zombie(id) || !class_metatronic[id])
return
if(g_skill2[id] != SKILL_DELAY)
{
remove_task(id+TASK_DELAY)
return
}

g_skill2[id] = SKILL_READY
g_skill2_fake_health[id] = 0
}

public Create_Head_Sprites(id, num, const Classname[], const Sprite[], Float:Scale, Float:Frame, Float:Time, Float:Transparent, Float:Forward, Float:Right, Float:Up, ColorActivate, Red, Green, Blue)
{
// Thanks To Dias ...

static Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite"))
if(!pev_valid(Ent))
return

g_head_spr_ent[id][num] = Ent

static Float:Origin[3]
pev(id, pev_origin, Origin)

Origin[0] += Forward
Origin[2] += Up

set_pev(Ent, pev_origin, Origin)

set_pev(Ent, pev_takedamage, DAMAGE_NO)
set_pev(Ent, pev_solid, SOLID_NOT)
set_pev(Ent, pev_movetype, MOVETYPE_FOLLOW)

set_pev(Ent, pev_classname, Classname)
engfunc(EngFunc_SetModel, Ent, Sprite)

set_pev(Ent, pev_renderfx, kRenderFxNone)
set_pev(Ent, pev_rendermode, kRenderTransAdd)
set_pev(Ent, pev_renderamt, Transparent)

new Color[3]
Color[0] = Red
Color[1] = Green
Color[2] = Blue

if(ColorActivate)
set_pev(Ent, pev_rendercolor, Color)

set_pev(Ent, pev_owner, id)
set_pev(Ent, pev_scale, Scale)

if(Time > 0.0)
set_pev(Ent, pev_fuser1, get_gametime() + Time)

set_pev(Ent, pev_fuser2, Forward)
set_pev(Ent, pev_fuser3, Right)
set_pev(Ent, pev_fuser4, Up)

set_pev(Ent, pev_frame, 0.0)
set_pev(Ent, pev_iuser1, floatround(Frame))

set_pev(Ent, pev_nextthink, get_gametime() + 0.01)
}

public Forward_Buffspr_Think(ent)
{
if(!pev_valid(ent))
return

static Float:Origin[3], owner
owner = pev(ent, pev_owner)
pev(owner, pev_origin, Origin)

Origin[0] += pev(ent, pev_fuser2)
Origin[1] += pev(ent, pev_fuser3)
Origin[2] += pev(ent, pev_fuser4)

engfunc(EngFunc_SetOrigin, ent, Origin)
set_pev(ent, pev_nextthink, get_gametime() + 0.000001)
}

public Forward_Spr_Think(ent)
{
if(!pev_valid(ent))
return

static Float:Origin[3], owner
static Float:fFrame

owner = pev(ent, pev_owner)
pev(owner, pev_origin, Origin)
pev(ent, pev_frame, fFrame)

fFrame += 1.0
if(fFrame > 20.0) fFrame = 0.0

Origin[0] += pev(ent, pev_fuser2)
Origin[1] += pev(ent, pev_fuser3)
Origin[2] += pev(ent, pev_fuser4)

set_pev(ent, pev_frame, fFrame)
engfunc(EngFunc_SetOrigin, ent, Origin)
set_pev(ent, pev_nextthink, get_gametime() + 0.001)

static Float:fTimeRemove
pev(ent, pev_fuser1, fTimeRemove)
if(get_gametime() >= pev(ent, pev_fuser1) || g_skill1[owner] != SKILL_USE)
{
engfunc(EngFunc_RemoveEntity, ent)
return
}
}

public metatronic_reset_value(id)
{
class_metatronic[id] = false
metatronic_reset_var_skill(id)
}

public metatronic_reset_var_skill(id)
{
g_skill1[id] = 0
g_skill2[id] = 0
g_skill1_regen_count[id] = 0
g_skill2_fake_health[id] = 0
g_speed_hud[id] = 1.0

if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP])
g_head_spr_ent[id][ENT_HEAD_SPR_HP] = 0
}
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF])
g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF] = 0
}
}

public metatronic_remove_headspr(id, num)
{
if(num == ENT_HEAD_SPR_HP)
{
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP])
g_head_spr_ent[id][ENT_HEAD_SPR_HP] = 0
}
}
else if(num == ENT_HEAD_SPR_HP_BUFF)
{
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF])
g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF] = 0
}
}
else if(num == 2)
{
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP])
g_head_spr_ent[id][ENT_HEAD_SPR_HP] = 0
}
if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF]))
{
remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF])
g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF] = 0
}
}
}

stock set_weapon_anim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = id)
write_byte(anim)
write_byte(pev(id, pev_body))
message_end()
}

stock precache_viewmodel_sound(const model[]) // I Get This From BTE
{
new file, i, k
if((file = fopen(model, "rt")))
{
new szsoundpath[64], NumSeq, SeqID, Event, NumEvents, EventID
fseek(file, 164, SEEK_SET)
fread(file, NumSeq, BLOCK_INT)
fread(file, SeqID, BLOCK_INT)

for(i = 0; i < NumSeq; i++)
{
fseek(file, SeqID + 48 + 176 * i, SEEK_SET)
fread(file, NumEvents, BLOCK_INT)
fread(file, EventID, BLOCK_INT)
fseek(file, EventID + 176 * i, SEEK_SET)

// The Output Is All Sound To Precache In ViewModels (GREAT :V)
for(k = 0; k < NumEvents; k++)
{
fseek(file, EventID + 4 + 76 * k, SEEK_SET)
fread(file, Event, BLOCK_INT)
fseek(file, 4, SEEK_CUR)

if(Event != 5004)
continue

fread_blocks(file, szsoundpath, 64, BLOCK_CHAR)

if(strlen(szsoundpath))
{
strtolower(szsoundpath)
engfunc(EngFunc_PrecacheSound, szsoundpath)
}
}
}
}
fclose(file)
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1057\\ f0\\ fs16 \n\\ par }
*/



[Image: 14141414.png]


[Image: 1451252.png]


[Image: 14141414141.png]




[Image: Counter-Strike-Logo-Resized.png]
[Image: 61964c-9a2d4019738b4cbaa8d9a71fee4f4930.webp]
arata nice
Super tare
[Image: whanq.jpg]
Users browsing this thread: