Помогите, пжпж.
- Код: Выделить всё
#include <amxmodx>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#define PLUGIN "Knife"
#define VERSION "1.0"
#define AUTHOR "BlackCat"
#define MAX_CLIENTS 32
#define VIP ADMIN_LEVEL_A
#define VIPS ADMIN_LEVEL_H
new KNIFE1_V_MODEL[] = "models/kn_csa/v_kn3.mdl"
new KNIFE1_P_MODEL[] = "models/kn_csa/p_kn3.mdl"
new KNIFE2_V_MODEL[] = "models/kn_csa/v_kn1.mdl"
new KNIFE2_P_MODEL[] = "models/kn_csa/p_kn1.mdl"
new KNIFE3_V_MODEL[] = "models/kn_csa2/v_kn2.mdl"
new KNIFE3_P_MODEL[] = "models/kn_csa2/p_kn2.mdl"
new KNIFE4_V_MODEL[] = "models/kn_csa2/v_katana.mdl"
new KNIFE4_P_MODEL[] = "models/kn_csa2/p_katana.mdl"
new KNIFE5_V_MODEL[] = "models/kn_csa3/v_ruyi-stick.mdl"
new KNIFE5_P_MODEL[] = "models/kn_csa3/p_ruyi-stick.mdl"
new KNIFESURV_V_MODEL[] = "models/kn_csa/v_kn3.mdl"
new KNIFESURV_P_MODEL[] = "models/kn_csa/p_kn3.mdl"
new bool:g_has_axe[33]
new bool:g_has_strong[33]
new bool:g_has_combat[33]
new bool:g_has_hammer[33]
new bool:g_has_mumiy[33]
new bool:g_has_survivoraxe[33]
new g_knife_menu, g_nvip_knife_menu, g_vip_knife_menu
new cvar_knock_axe, cvar_jump_axe, cvar_speed_axe, cvar_damage_axe
new cvar_knock_strong, cvar_jump_strong, cvar_speed_strong, cvar_damage_strong
new cvar_knock_combat, cvar_jump_combat, cvar_speed_combat, cvar_damage_combat
new cvar_knock_hammer, cvar_jump_hammer, cvar_speed_hammer, cvar_damage_hammer
new cvar_knock_mumiy, cvar_jump_mumiy, cvar_speed_mumiy, cvar_damage_mumiy
new cvar_knock_surv, cvar_jump_surv, cvar_speed_surv, cvar_damage_surv
native SetUserTh9(id);
native DelUserTh9(id);
new const g_sound_knife[] = { "items/gunpickup2.wav" }
new const axe_sounds[][] =
{
"zm_battle/combat_draw.wav",
"zm_battle/combat_hit_01.wav",
"zm_battle/combat_hit_01.wav",
"zm_battle/combat_hit_wall.wav",
"zm_battle/combat_miss.wav",
"zm_battle/combat_stab.wav"
}
new const strong_sounds[][] =
{
"zm_battle/hammer_draw.wav",
"zm_battle/hammer_stab.wav",
"zm_battle/hammer_stab.wav",
"zm_battle/hammer_stab.wav",
"zm_battle/hammer_slash1.wav",
"zm_battle/hammer_stab.wav"
}
new const combat_sounds[][] =
{
"zm_battle/serp_draw.wav",
"zm_battle/serp_hit1.wav",
"zm_battle/serp_hit1.wav",
"zm_battle/srp_hitwall1.wav",
"zm_battle/serp_slash1.wav",
"zm_battle/serp_stab.wav"
}
new const hammer_sounds[][] =
{
"zm_battle/top_draw.wav",
"zm_battle/combat_hit_01.wav",
"zm_battle/combat_hit_01.wav",
"zm_battle/combat_hit_wall.wav",
"zm_battle/combat_miss.wav",
"zm_battle/combat_stab.wav"
}
new const mumiy_sounds[][] =
{
"zm_battle/ruyi-stick_draw.wav",
"zm_battle/ruyi-stick_hit1.wav",
"zm_battle/ruyi-stick_hit2.wav",
"zm_battle/ruyi-stick_hit_wall.wav",
"zm_battle/ruyi-stick_slash1.wav",
"zm_battle/coilhammer_stab.wav"
}
new const surv_sounds[][] =
{
"zm_battle/combat_draw.wav",
"zm_battle/combat_hit_01.wav",
"zm_battle/combat_hit_01.wav",
"zm_battle/combat_hit_wall.wav",
"zm_battle/combat_miss.wav",
"zm_battle/combat_stab.wav"
}
public plugin_init()
{
register_plugin(PLUGIN , VERSION , AUTHOR);
register_cvar("zp_addon_knife", VERSION, FCVAR_SERVER);
g_knife_menu = menu_create("Выбор ножей","menu_handle")
g_nvip_knife_menu = menu_create("Выбор ножей","menu_handle_nvip")
g_vip_knife_menu = menu_create("Выбор ножей","menu_handle_vip")
register_clcmd("say /knife","knifemenu",ADMIN_ALL,"knife_menu")
register_clcmd("knife","knifemenu",ADMIN_ALL,"knife_menu")
build_menu()
build_menu_nvip()
build_menu_vip()
register_event("CurWeapon","checkWeapon","be","1=1");
register_forward(FM_EmitSound, "CEntity__EmitSound");
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
RegisterHam(Ham_Spawn, "player", "fw_playerspawn_post", 1)
RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg");
/* register_clcmd("zm_knife_strong", "clcmd_knife")
register_clcmd("zm_knife_hammer", "clcmd_knife")
register_clcmd("zm_knife_combat", "clcmd_knife")
register_clcmd("zm_knife_mumiy", "clcmd_mumiy")
register_clcmd("zm_knife_axe", "clcmd_knife") */
cvar_jump_axe = register_cvar("zp_axe_jump", "260.0")
cvar_speed_axe = register_cvar("zp_axe_speed", "240.0")
cvar_damage_axe = register_cvar("zp_axe_damage", "4.3")
cvar_knock_axe = register_cvar("zp_axe_knockback", "0.1")
cvar_jump_strong = register_cvar("zp_strong_jump", "370.0")
cvar_speed_strong = register_cvar("zp_strong_speed", "240.0")
cvar_damage_strong = register_cvar("zp_strong_damage", "4.3")
cvar_knock_strong = register_cvar("zp_strong_knockback", "5.0")
cvar_jump_combat = register_cvar("zp_combat_jump", "260.0")
cvar_speed_combat = register_cvar("zp_combat_speed", "340.0")
cvar_damage_combat = register_cvar("zp_combat_damage", "4.3")
cvar_knock_combat = register_cvar("zp_combat_knockback", "5.0")
cvar_jump_hammer = register_cvar("zp_hammer_jump", "370.0")
cvar_speed_hammer = register_cvar("zp_hammer_speed", "280.0")
cvar_damage_hammer = register_cvar("zp_hammer_damage", "4.3")
cvar_knock_hammer = register_cvar("zp_hammer_knockback", "5.0")
cvar_jump_mumiy = register_cvar("zp_mumiy_jump", "380.0")
cvar_speed_mumiy = register_cvar("zp_mumiy_speed", "290.0")
cvar_damage_mumiy = register_cvar("zp_mumiy_damage", "4.5")
cvar_knock_mumiy = register_cvar("zp_mumiy_knockback", "5.0")
cvar_jump_surv = register_cvar("zp_axe_surv_jump", "280.0")
cvar_speed_surv = register_cvar("zp_axe_surv_speed", "300.0")
cvar_damage_surv = register_cvar("zp_axe_surv_damage", "15.5")
cvar_knock_surv = register_cvar("zp_axe_surv_knockback", "5.0")
}
public client_connect(id)
{
g_has_axe[id] = true
g_has_strong[id] = false
g_has_combat[id] = false
g_has_hammer[id] = false
g_has_mumiy[id] = false
g_has_survivoraxe[id] = false
}
public client_disconnect(id)
{
g_has_axe[id] = false
g_has_strong[id] = false
g_has_combat[id] = false
g_has_hammer[id] = false
g_has_mumiy[id] = false
g_has_survivoraxe[id] = false
}
public plugin_precache()
{
precache_model(KNIFE1_V_MODEL)
precache_model(KNIFE1_P_MODEL)
precache_model(KNIFE2_V_MODEL)
precache_model(KNIFE2_P_MODEL)
precache_model(KNIFE3_V_MODEL)
precache_model(KNIFE3_P_MODEL)
precache_model(KNIFE4_V_MODEL)
precache_model(KNIFE4_P_MODEL)
precache_model(KNIFE5_V_MODEL)
precache_model(KNIFE5_P_MODEL)
precache_model(KNIFESURV_V_MODEL)
precache_model(KNIFESURV_P_MODEL)
/*precache_generic("sprites/zm_knife_strong.txt")
precache_generic("sprites/zm_knife_hammer.txt")
precache_generic("sprites/zm_knife_combat.txt")
precache_generic("sprites/zm_knife_axe.txt")
precache_generic("sprites/weapon_monkeywpnset3.txt")
precache_generic("sprites/zm_cso/640hud7.spr")
precache_generic("sprites/zm_cso/640hud21.spr")
precache_generic("sprites/zm_cso/640hud23.spr")
precache_generic("sprites/zm_cso/640hud38.spr")
precache_generic("sprites/zm_cso/640hud39.spr")
precache_generic("sprites/zm_cso/640hud97.spr")*/
precache_sound(g_sound_knife)
for(new i = 0; i < sizeof axe_sounds; i++)
precache_sound(axe_sounds[i])
for(new i = 0; i < sizeof strong_sounds; i++)
precache_sound(strong_sounds[i])
for(new i = 0; i < sizeof combat_sounds; i++)
precache_sound(combat_sounds[i])
for(new i = 0; i < sizeof hammer_sounds; i++)
precache_sound(hammer_sounds[i])
for(new i = 0; i < sizeof mumiy_sounds; i++)
precache_sound(mumiy_sounds[i])
for(new i = 0; i < sizeof surv_sounds; i++)
precache_sound(surv_sounds[i])
}
public clcmd_knife(id)
{
if(!is_user_alive(id))
return;
engclient_cmd(id, "weapon_knife")
}
build_menu()
{
menu_additem(g_knife_menu, "Комбат \r[\yОбычный\r]", "1")
menu_additem(g_knife_menu, "Кувалда \r[\yГрав+Отброс\r]", "2")
menu_additem(g_knife_menu, "Серп \r[\yСкор+Отброс\r]", "3")
menu_additem(g_knife_menu, "\dКатана \r[\yVIP\r]", "4")
menu_additem(g_knife_menu, "\dRuyi Stick \r[\yVIP+\r]", "5")
menu_additem(g_knife_menu, "\dRuyi Stick \r[\yVIP+\r]", "6")
menu_setprop(g_knife_menu, MPROP_EXITNAME, "Выход")
}
build_menu_nvip()
{
menu_additem(g_nvip_knife_menu, "Комбат \r[\yОбычный\r]", "1")
menu_additem(g_nvip_knife_menu, "Кувалда \r[\yГрав+Отброс\r]", "2")
menu_additem(g_nvip_knife_menu, "Серп \r[\yСкор+Отброс\r]", "3")
menu_additem(g_nvip_knife_menu, "Катана \r[\yVIP\r]", "4")
menu_additem(g_nvip_knife_menu, "\dRuyi Stick \r[\yVIP+\r]", "5")
menu_additem(g_nvip_knife_menu, "\dRuyi Stick \r[\yVIP+\r]", "6")
menu_setprop(g_nvip_knife_menu, MPROP_EXITNAME, "Выход")
}
build_menu_vip()
{
menu_additem(g_vip_knife_menu, "Комбат \r[\yОбычный\r]", "1")
menu_additem(g_vip_knife_menu, "Кувалда \r[\yГрав+Отброс\r]", "2")
menu_additem(g_vip_knife_menu, "Серп \r[\yСкор+Отброс\r]", "3")
menu_additem(g_vip_knife_menu, "Катана \r[\yVIP\r]", "4")
menu_additem(g_vip_knife_menu, "Ruyi Stick \r[\yVIP+\r]", "5")
menu_additem(g_vip_knife_menu, "\dRuyi Stick \r[\yVIP+\r]", "6")
menu_setprop(g_vip_knife_menu, MPROP_EXITNAME, "Выход")
}
public knifemenu(id)
{
if (zp_has_round_started())
return;
if (!zp_has_round_started())
{
if (get_user_flags(id) & VIP)
{
menu_display(id, !(get_user_flags(id) & VIP) ? g_knife_menu : g_nvip_knife_menu, 0)
}
if (get_user_flags(id) & VIPS)
{
menu_display(id, !(get_user_flags(id) & VIPS) ? g_knife_menu : g_vip_knife_menu, 0)
}
}
}
public menu_handle_nvip(id, menu, item)
{
if(item < 0)
return PLUGIN_CONTINUE
new cmd[2];
new access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new choice = str_to_num(cmd)
switch (choice)
{
case 1: buy_knife1(id)
case 2: buy_knife2(id)
case 3: buy_knife3(id)
case 4: buy_knife4(id)
case 5: buy_knife5(id)
case 6: buy_knife6(id)
}
return PLUGIN_HANDLED;
}
public menu_handle_vip(id, menu, item)
{
if(item < 0)
return PLUGIN_CONTINUE
new cmd[2];
new access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new choice = str_to_num(cmd)
switch (choice)
{
case 1: buy_knife1(id)
case 2: buy_knife2(id)
case 3: buy_knife3(id)
case 4: buy_knife4(id)
case 5: buy_knife5(id)
case 6: buy_knife6(id)
}
return PLUGIN_HANDLED;
}
public menu_handle(id, menu, item)
{
if(item < 0)
return PLUGIN_CONTINUE
new cmd[2];
new access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new choice = str_to_num(cmd)
switch (choice)
{
case 1: buy_knife1(id)
case 2: buy_knife2(id)
case 3: buy_knife3(id)
case 4: buy_knife4(id)
case 5: buy_knife5(id)
case 6: buy_knife6(id)
}
return PLUGIN_HANDLED;
}
public buy_knife1(id)
{
g_has_axe[id] = true
g_has_strong[id] = false
g_has_combat[id] = false
g_has_hammer[id] = false
g_has_mumiy[id] = false
g_has_survivoraxe[id] = false
DelUserTh9(id)
//set_sprite(id)
message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
write_byte(29)
message_end()
checkWeapon(id)
engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public buy_knife2(id)
{
g_has_axe[id] = false
g_has_strong[id] = true
g_has_combat[id] = false
g_has_hammer[id] = false
g_has_mumiy[id] = false
g_has_survivoraxe[id] = false
DelUserTh9(id)
//set_sprite(id)
message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
write_byte(29)
message_end()
checkWeapon(id)
engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public buy_knife3(id)
{
g_has_axe[id] = false
g_has_strong[id] = false
g_has_combat[id] = true
g_has_hammer[id] = false
g_has_mumiy[id] = false
g_has_survivoraxe[id] = false
DelUserTh9(id)
//set_sprite(id)
message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
write_byte(29)
message_end()
checkWeapon(id)
engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public buy_knife4(id)
{
if (get_user_flags(id) & VIP)
{
g_has_axe[id] = false
g_has_strong[id] = false
g_has_combat[id] = false
g_has_hammer[id] = true
g_has_mumiy[id] = false
g_has_survivoraxe[id] = false
DelUserTh9(id)
//set_sprite(id)
message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
write_byte(29)
message_end()
checkWeapon(id)
engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
else
{
knifemenu(id)
ChatColor(id, "")
}
}
public buy_knife5(id)
{
if (get_user_flags(id) & VIPS)
{
g_has_axe[id] = false
g_has_strong[id] = false
g_has_combat[id] = false
g_has_hammer[id] = false
g_has_mumiy[id] = true
g_has_survivoraxe[id] = false
DelUserTh9(id)
//set_sprite(id)
message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
write_byte(29)
message_end()
checkWeapon(id)
engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
else
{
knifemenu(id)
ChatColor(id, "")
}
}
public buy_knife6(id)
{
if (get_user_flags(id) & VIPS)
{
g_has_axe[id] = false
g_has_strong[id] = false
g_has_combat[id] = false
g_has_hammer[id] = false
g_has_mumiy[id] = false
g_has_survivoraxe[id] = false
SetUserTh9(id)
//set_sprite(id)
message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
write_byte(29)
message_end()
checkWeapon(id)
engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
else
{
knifemenu(id)
ChatColor(id, "")
}
}
public fw_UseStationary_Post(entity, caller, activator, use_type)
{
if (use_type == 0 && is_user_connected(caller))
checkWeapon(caller)
}
public zp_user_infected_post(id)
{
//set_sprite(id)
}
public checkWeapon(id)
{
if(get_user_weapon(id) != CSW_KNIFE)
return;
if (g_has_axe[id] || g_has_strong[id] || g_has_combat[id] || g_has_hammer[id] || g_has_mumiy[id] || g_has_survivoraxe[id])
{
checkModel(id)
}
return;
}
public checkModel(id)
{
if (zp_get_user_zombie(id))
{
//set_sprite(id)
return;
}
if(get_user_weapon(id) != CSW_KNIFE)
return;
if (g_has_axe[id])
{
set_pev(id, pev_viewmodel2, KNIFE1_V_MODEL)
set_pev(id, pev_weaponmodel2, KNIFE1_P_MODEL)
}
else if (g_has_strong[id])
{
set_pev(id, pev_viewmodel2, KNIFE2_V_MODEL)
set_pev(id, pev_weaponmodel2, KNIFE2_P_MODEL)
}
else if (g_has_combat[id])
{
set_pev(id, pev_viewmodel2, KNIFE3_V_MODEL)
set_pev(id, pev_weaponmodel2, KNIFE3_P_MODEL)
}
else if (g_has_hammer[id])
{
set_pev(id, pev_viewmodel2, KNIFE4_V_MODEL)
set_pev(id, pev_weaponmodel2, KNIFE4_P_MODEL)
}
else if (g_has_mumiy[id])
{
set_pev(id, pev_viewmodel2, KNIFE5_V_MODEL)
set_pev(id, pev_weaponmodel2, KNIFE5_P_MODEL)
}
else if(g_has_survivoraxe[id])
{
set_pev(id, pev_viewmodel2, KNIFESURV_V_MODEL)
set_pev(id, pev_weaponmodel2, KNIFESURV_P_MODEL)
}
//set_sprite(id)
}
public fw_playerspawn_post(id)
{
if(!is_user_alive(id))
return;
//if(g_has_survivoraxe[id])
{
//g_has_axe[id] = true
//g_has_strong[id] = false
//g_has_combat[id] = false
//g_has_hammer[id] = false
//g_has_mumiy[id] = false
//g_has_survivoraxe[id] = false
//set_sprite(id)
}
return;
}
public CEntity__EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
{
if (!is_user_connected(id))
return HAM_IGNORED
if (zp_get_user_zombie(id))
return HAM_IGNORED
if (sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
{
if (sample[14] == 'd')
{
if(g_has_axe[id])
emit_sound(id, channel, axe_sounds[0], volume, attn, flags, pitch)
if(g_has_strong[id])
emit_sound(id, channel, strong_sounds[0], volume, attn, flags, pitch)
if(g_has_combat[id])
emit_sound(id, channel, combat_sounds[0], volume, attn, flags, pitch)
if(g_has_hammer[id])
emit_sound(id, channel, hammer_sounds[0], volume, attn, flags, pitch)
if(g_has_mumiy[id])
emit_sound(id, channel, mumiy_sounds[0], volume, attn, flags, pitch)
if(g_has_survivoraxe[id])
emit_sound(id, channel, surv_sounds[0], volume, attn, flags, pitch)
}
else if (sample[14] == 'h')
{
if (sample[17] == 'w')
{
if(g_has_axe[id])
emit_sound(id, channel, axe_sounds[3], volume, attn, flags, pitch)
if(g_has_strong[id])
emit_sound(id, channel, strong_sounds[3], volume, attn, flags, pitch)
if(g_has_combat[id])
emit_sound(id, channel, combat_sounds[3], volume, attn, flags, pitch)
if(g_has_hammer[id])
emit_sound(id, channel, hammer_sounds[3], volume, attn, flags, pitch)
if(g_has_mumiy[id])
emit_sound(id, channel, mumiy_sounds[3], volume, attn, flags, pitch)
if(g_has_survivoraxe[id])
emit_sound(id, channel, surv_sounds[3], volume, attn, flags, pitch)
}
else
{
if(g_has_axe[id])
emit_sound(id, channel, axe_sounds[random_num(1,2)], volume, attn, flags, pitch)
if(g_has_strong[id])
emit_sound(id, channel, strong_sounds[random_num(1,2)], volume, attn, flags, pitch)
if(g_has_combat[id])
emit_sound(id, channel, combat_sounds[random_num(1,2)], volume, attn, flags, pitch)
if(g_has_hammer[id])
emit_sound(id, channel, hammer_sounds[random_num(1,2)], volume, attn, flags, pitch)
if(g_has_mumiy[id])
emit_sound(id, channel, mumiy_sounds[random_num(1,2)], volume, attn, flags, pitch)
if(g_has_survivoraxe[id])
emit_sound(id, channel, surv_sounds[random_num(1,2)], volume, attn, flags, pitch)
}
}
else
{
if (sample[15] == 'l')
{
if(g_has_axe[id])
emit_sound(id, channel, axe_sounds[4], volume, attn, flags, pitch)
if(g_has_strong[id])
emit_sound(id, channel, strong_sounds[4], volume, attn, flags, pitch)
if(g_has_combat[id])
emit_sound(id, channel, combat_sounds[4], volume, attn, flags, pitch)
if(g_has_hammer[id])
emit_sound(id, channel, hammer_sounds[4], volume, attn, flags, pitch)
if(g_has_mumiy[id])
emit_sound(id, channel, mumiy_sounds[4], volume, attn, flags, pitch)
if(g_has_survivoraxe[id])
emit_sound(id, channel, surv_sounds[4], volume, attn, flags, pitch)
}
else
{
if(g_has_axe[id])
emit_sound(id, channel, axe_sounds[5], volume, attn, flags, pitch)
if(g_has_strong[id] )
emit_sound(id, channel, strong_sounds[5], volume, attn, flags, pitch)
if(g_has_combat[id] )
emit_sound(id, channel, combat_sounds[5], volume, attn, flags, pitch)
if(g_has_hammer[id])
emit_sound(id, channel, hammer_sounds[5], volume, attn, flags, pitch)
if(g_has_mumiy[id])
emit_sound(id, channel, mumiy_sounds[5], volume, attn, flags, pitch)
if(g_has_survivoraxe[id])
emit_sound(id, channel, surv_sounds[5], volume, attn, flags, pitch)
}
}
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
public fw_PlayerPreThink(id)
{
if(!is_user_alive(id) || zp_get_user_zombie(id))
return FMRES_IGNORED
new temp[2], weapon = get_user_weapon(id, temp[0], temp[1])
if (weapon == CSW_KNIFE && g_has_axe[id])
{
set_user_maxspeed(id,get_pcvar_float(cvar_speed_axe))
if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
{
new flags = pev(id, pev_flags)
new waterlvl = pev(id, pev_waterlevel)
if (!(flags & FL_ONGROUND))
return FMRES_IGNORED
if (flags & FL_WATERJUMP)
return FMRES_IGNORED
if (waterlvl > 1)
return FMRES_IGNORED
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)
fVelocity[2] += get_pcvar_num(cvar_jump_axe)
set_pev(id, pev_velocity, fVelocity)
set_pev(id, pev_gaitsequence, 6)
}
}
if(weapon == CSW_KNIFE && g_has_strong[id])
{
set_user_maxspeed(id,get_pcvar_float(cvar_speed_strong))
if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
{
new flags = pev(id, pev_flags)
new waterlvl = pev(id, pev_waterlevel)
if (!(flags & FL_ONGROUND))
return FMRES_IGNORED
if (flags & FL_WATERJUMP)
return FMRES_IGNORED
if (waterlvl > 1)
return FMRES_IGNORED
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)
fVelocity[2] += get_pcvar_num(cvar_jump_strong)
set_pev(id, pev_velocity, fVelocity)
set_pev(id, pev_gaitsequence, 6)
}
}
if(weapon == CSW_KNIFE && g_has_combat[id])
{
if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
{
new flags = pev(id, pev_flags)
new waterlvl = pev(id, pev_waterlevel)
if (!(flags & FL_ONGROUND))
return FMRES_IGNORED
if (flags & FL_WATERJUMP)
return FMRES_IGNORED
if (waterlvl > 1)
return FMRES_IGNORED
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)
fVelocity[2] += get_pcvar_num(cvar_jump_combat)
set_pev(id, pev_velocity, fVelocity)
set_pev(id, pev_gaitsequence, 6)
}
set_user_maxspeed(id,get_pcvar_float(cvar_speed_combat))
}
if (weapon == CSW_KNIFE && g_has_hammer[id])
{
if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
{
new flags = pev(id, pev_flags)
new waterlvl = pev(id, pev_waterlevel)
if (!(flags & FL_ONGROUND))
return FMRES_IGNORED
if (flags & FL_WATERJUMP)
return FMRES_IGNORED
if (waterlvl > 1)
return FMRES_IGNORED
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)
fVelocity[2] += get_pcvar_num(cvar_jump_hammer)
set_pev(id, pev_velocity, fVelocity)
set_pev(id, pev_gaitsequence, 6)
}
set_user_maxspeed(id, get_pcvar_float(cvar_speed_hammer))
}
if (weapon == CSW_KNIFE && g_has_mumiy[id])
{
if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
{
new flags = pev(id, pev_flags)
new waterlvl = pev(id, pev_waterlevel)
if (!(flags & FL_ONGROUND))
return FMRES_IGNORED
if (flags & FL_WATERJUMP)
return FMRES_IGNORED
if (waterlvl > 1)
return FMRES_IGNORED
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)
fVelocity[2] += get_pcvar_num(cvar_jump_mumiy)
set_pev(id, pev_velocity, fVelocity)
set_pev(id, pev_gaitsequence, 6)
}
set_user_maxspeed(id, get_pcvar_float(cvar_speed_mumiy))
}
if(weapon == CSW_KNIFE && g_has_survivoraxe[id])
{
if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
{
new flags = pev(id, pev_flags)
new waterlvl = pev(id, pev_waterlevel)
if (!(flags & FL_ONGROUND))
return FMRES_IGNORED
if (flags & FL_WATERJUMP)
return FMRES_IGNORED
if (waterlvl > 1)
return FMRES_IGNORED
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)
fVelocity[2] += get_pcvar_num(cvar_jump_surv)
set_pev(id, pev_velocity, fVelocity)
set_pev(id, pev_gaitsequence, 6)
}
set_user_maxspeed(id, get_pcvar_float(cvar_speed_surv))
}
return FMRES_IGNORED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(!is_user_connected(attacker))
return HAM_IGNORED
if(zp_get_user_zombie(attacker))
return HAM_IGNORED
if(get_user_weapon(attacker) == CSW_KNIFE)
{
if (g_has_axe[attacker])
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_axe))
new Float:vec[3];
new Float:oldvelo[3];
pev(victim, pev_velocity, oldvelo);
create_velocity_vector(victim , attacker , vec);
vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_axe);
vec[1] += oldvelo[1] + 0;
set_pev(victim, pev_velocity, vec);
}
else if (g_has_strong[attacker])
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_strong))
new Float:vec[3];
new Float:oldvelo[3];
pev(victim, pev_velocity, oldvelo);
create_velocity_vector(victim , attacker , vec);
vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_strong);
vec[1] += oldvelo[1] + 0;
set_pev(victim, pev_velocity, vec);
}
else if (g_has_combat[attacker])
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_combat))
new Float:vec[3];
new Float:oldvelo[3];
pev(victim, pev_velocity, oldvelo);
create_velocity_vector(victim , attacker , vec);
vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_combat);
vec[1] += oldvelo[1] + 0;
set_pev(victim, pev_velocity, vec);
}
else if (g_has_hammer[attacker])
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_hammer))
new Float:vec[3];
new Float:oldvelo[3];
pev(victim, pev_velocity, oldvelo);
create_velocity_vector(victim , attacker , vec);
vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_hammer);
vec[1] += oldvelo[1] + 0;
set_pev(victim, pev_velocity, vec);
}
else if (g_has_mumiy[attacker])
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_mumiy))
new Float:vec[3];
new Float:oldvelo[3];
pev(victim, pev_velocity, oldvelo);
create_velocity_vector(victim , attacker , vec);
vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_mumiy);
vec[1] += oldvelo[1] + 0;
set_pev(victim, pev_velocity, vec);
}
else if(g_has_survivoraxe[attacker])
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_surv))
new Float:vec[3];
new Float:oldvelo[3];
pev(victim, pev_velocity, oldvelo);
create_velocity_vector(victim , attacker , vec);
vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_surv);
vec[1] += oldvelo[1] + 0;
set_pev(victim, pev_velocity, vec);
}
more_blood(victim)
}
return HAM_IGNORED
}
public message_DeathMsg(msg_id, msg_dest, id)
{
static szTruncatedWeapon[33], iattacker, ivictim
get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
iattacker = get_msg_arg_int(1)
ivictim = get_msg_arg_int(2)
if(!is_user_connected(iattacker) || iattacker == ivictim)
return PLUGIN_CONTINUE
if (!zp_get_user_zombie(iattacker))
{
if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
{
if(g_has_axe[iattacker])
set_msg_arg_string(4, "axe")
}
if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
{
if(g_has_strong[iattacker])
set_msg_arg_string(4, "hatchet")
}
if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
{
if(g_has_combat[iattacker])
set_msg_arg_string(4, "mastercombat")
}
if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
{
if(g_has_hammer[iattacker])
set_msg_arg_string(4, "hammer")
}
if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
{
if(g_has_hammer[iattacker])
set_msg_arg_string(4, "mumiy")
}
if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
{
if(g_has_survivoraxe[iattacker])
set_msg_arg_string(4, "survivoraxe")
}
if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
{
if(!g_has_axe[iattacker] && !g_has_strong[iattacker] && !g_has_combat[iattacker] && !g_has_hammer[iattacker] && !g_has_mumiy[iattacker] && !g_has_survivoraxe[iattacker] && !zp_get_user_zombie(iattacker))
set_msg_arg_string(4, "knife")
}
}
if (zp_get_user_zombie(iattacker))
{
if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
{
if(g_has_axe[iattacker] || g_has_strong[iattacker] || g_has_combat[iattacker] || g_has_hammer[iattacker] || g_has_mumiy[iattacker] || g_has_survivoraxe[iattacker])
set_msg_arg_string(4, "Claws")
}
}
return PLUGIN_CONTINUE
}
stock fm_set_user_health( index, health )
health > 0 ? set_pev(index, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, index)
stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
if(!zp_get_user_zombie(victim) || !is_user_alive(attacker))
return 0;
new Float:vicorigin[3];
new Float:attorigin[3];
pev(victim, pev_origin , vicorigin);
pev(attacker, pev_origin , attorigin);
new Float:origin2[3]
origin2[0] = vicorigin[0] - attorigin[0];
origin2[1] = vicorigin[1] - attorigin[1];
new Float:largestnum = 0.0;
if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);
origin2[0] /= largestnum;
origin2[1] /= largestnum;
if (g_has_axe[attacker])
{
velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_axe) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_axe) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
}
else if (g_has_strong[attacker])
{
velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_strong) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_strong) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
}
else if (g_has_combat[attacker])
{
velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_combat) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_combat) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
}
else if (g_has_hammer[attacker])
{
velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_hammer) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_hammer) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
}
else if (g_has_mumiy[attacker])
{
velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_mumiy) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_mumiy) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
}
else if(g_has_survivoraxe[attacker])
{
velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_surv) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_surv) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
}
if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
velocity[2] = random_float(200.0 , 275.0);
return 1;
}
public zp_user_humanized_post(id,survivor)
{
if(!zp_get_user_survivor(id))
{
if(g_has_survivoraxe[id])
{
g_has_axe[id] = true
g_has_strong[id] = false
g_has_combat[id] = false
g_has_hammer[id] = false
g_has_mumiy[id] = false
g_has_survivoraxe[id] = false
//set_sprite(id)
}
}
else if(zp_get_user_survivor(id))
{
g_has_axe[id] = false
g_has_strong[id] = false
g_has_combat[id] = false
g_has_hammer[id] = false
g_has_mumiy[id] = false
g_has_survivoraxe[id] = true
//set_sprite(id)
}
}
stock fm_set_user_maxspeed(index, Float:speed = -1.0)
{
engfunc(EngFunc_SetClientMaxspeed, index, speed);
set_pev(index, pev_maxspeed, speed);
return 1;
}
more_blood(id)
{
static iOrigin[3]
get_user_origin(id, iOrigin)
message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin)
write_byte(TE_BLOODSTREAM)
write_coord(iOrigin[0])
write_coord(iOrigin[1])
write_coord(iOrigin[2]+10)
write_coord(random_num(-360, 360))
write_coord(random_num(-360, 360))
write_coord(-10)
write_byte(70)
write_byte(random_num(50, 100))
message_end()
for (new j = 0; j < 4; j++)
{
message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin)
write_byte(TE_WORLDDECAL)
write_coord(iOrigin[0]+random_num(-100, 100))
write_coord(iOrigin[1]+random_num(-100, 100))
write_coord(iOrigin[2]-36)
write_byte(random_num(190, 197))
message_end()
}
}
public sprite(const player, const string_msg[], byte_1, byte_2, byte_3, byte_4, byte_5, byte_6, byte_7, byte_8)
{
message_begin( MSG_ONE, get_user_msgid("WeaponList"), .player = player );
{
write_string(string_msg);
write_byte(byte_1);
write_byte(byte_2);
write_byte(byte_3);
write_byte(byte_4);
write_byte(byte_5);
write_byte(byte_6);
write_byte(byte_7);
write_byte(byte_8);
}
message_end();
}
/*public set_sprite(id)
{
if(!is_user_alive(id))
{
return;
}
if(zp_get_user_zombie(id))
{
sprite(id, "weapon_knife", -1, -1, -1, -1, 2, 1, 29, 0)
return;
}
if(g_has_axe[id])
{
sprite(id, "zm_knife_axe", -1, -1, -1, -1, 2, 1, 29, 0)
return;
}
if(g_has_strong[id])
{
sprite(id, "zm_knife_strong", -1, -1, -1, -1, 2, 1, 29, 0)
return;
}
if(g_has_combat[id])
{
sprite(id, "zm_knife_combat", -1, -1, -1, -1, 2, 1, 29, 0)
return;
}
if(g_has_hammer[id])
{
sprite(id, "zm_knife_hammer", -1, -1, -1, -1, 2, 1, 29, 0)
return;
}
if(g_has_mumiy[id])
{
sprite(id, "zm_knife_mumiy", -1, -1, -1, -1, 2, 1, 29, 0)
return;
}
if(g_has_survivoraxe[id])
{
sprite(id, "zm_knife_axe", -1, -1, -1, -1, 2, 1, 29, 0)
return;
}
}*/
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!team", "^3")
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
- Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <zombieplague>
#define PLUGIN "[ZP] Extra: CSO Weapon"
#define VERSION "1.0"
#define AUTHOR "KORD_12.7"
#pragma ctrlchar '\'
#pragma compress 1
//**********************************************
//* Weapon Settings. *
//**********************************************
#define WEAPON_NAME "weapon_thanatos9"
#define WEAPON_REFERANCE "weapon_knife"
#define WEAPON_MODEL_VIEW "models/v_thanatos9_fix.mdl"
#define WEAPON_MODEL_PLAYER "models/p_th9Pack.mdl"
#define WEAPON_DAMAGE random_float(100.0, 150.0)
#define WEAPON_DAMAGE_MODE random_float(100.0, 130.0)
#define WEAPON_DISTANCE_ATTACK 90.0
#define WEAPON_DISTANCE_ATTACK_MODE 85.0
#define WEAPON_KNOCKBACK 2.0
#define SOUND_DRAW "weapons/thanatos9_drawa.wav"
#define SOUND_SHOOT "weapons/thanatos9_shootb_loop.wav"
#define SOUND_SLASH "weapons/thanatos9_shoota1.wav"
#define SOUND_SLASH2 "weapons/thanatos9_shoota2.wav"
#define SOUND_HIT "weapons/katana_hit1.wav"
#define SOUND_HIT_WALL "weapons/strong_knife_hitwall.wav"
#define SOUND_HIT_WALL2 "weapons/tomahawk_wall.wav"
#define WEAPON_HUD_TXT "sprites/weapon_thanatos9.txt"
#define WEAPON_HUD_SPR1 "sprites/640hud79.spr"
#define WEAPON_HUD_SPR2 "sprites/640hud7.spr"
#define ANIM_EXTENSION "knife"
enum
{
ANIM_DRAW_A,
ANIM_SHOOT_B_LOOP,
ANIM_SHOOT_B_START,
ANIM_SHOOT_B_END,
ANIM_IDLE_B,
ANIM_IDLE_A,
ANIM_DRAW_B,
ANIM_SLASH_A,
ANIM_SLASH_A2,
ANIM_CHANGE_B,
ANIM_CHANGE_A
};
//**********************************************
//* Some macroses. *
//**********************************************
#define GET_SHOOTS(%0) get_pdata_int(%0, m_fInCheckShoots, extra_offset_weapon)
#define SET_SHOOTS(%0,%1) set_pdata_int(%0, m_fInCheckShoots, %1, extra_offset_weapon)
#define GET_STATE(%0) get_pdata_int(%0, m_fWeaponState, extra_offset_weapon)
#define SET_STATE(%0,%1) set_pdata_int(%0, m_fWeaponState, %1, extra_offset_weapon)
#define MDLL_Spawn(%0) dllfunc(DLLFunc_Spawn, %0)
#define MDLL_Touch(%0,%1) dllfunc(DLLFunc_Touch, %0, %1)
#define SET_MODEL(%0,%1) engfunc(EngFunc_SetModel, %0, %1)
#define SET_ORIGIN(%0,%1) engfunc(EngFunc_SetOrigin, %0, %1)
#define PRECACHE_MODEL(%0) engfunc(EngFunc_PrecacheModel, %0)
#define PRECACHE_SOUND(%0) engfunc(EngFunc_PrecacheSound, %0)
#define PRECACHE_GENERIC(%0) engfunc(EngFunc_PrecacheGeneric, %0)
#define MODEL_INDEX(%0) engfunc(EngFunc_ModelIndex,%0)
#define MESSAGE_BEGIN(%0,%1,%2,%3) engfunc(EngFunc_MessageBegin, %0, %1, %2, %3)
#define MESSAGE_END() message_end()
#define WRITE_ANGLE(%0) engfunc(EngFunc_WriteAngle, %0)
#define WRITE_BYTE(%0) write_byte(%0)
#define WRITE_COORD(%0) engfunc(EngFunc_WriteCoord, %0)
#define WRITE_STRING(%0) write_string(%0)
#define WRITE_SHORT(%0) write_short(%0)
#define INSTANCE(%0) ((%0 == -1) ? 0 : %0)
#define BitSet(%0,%1) (%0 |= (1 << (%1 - 1)))
#define BitClear(%0,%1) (%0 &= ~(1 << (%1 - 1)))
#define BitCheck(%0,%1) (%0 & (1 << (%1 - 1)))
//**********************************************
//* PvData Offsets. *
//**********************************************
// Linux extra offsets
#define extra_offset_weapon 4
#define extra_offset_player 5
new g_bitIsConnected;
#define m_rgpPlayerItems_CWeaponBox 34
#define m_fInCheckShoots 39
#define m_pPlayer 41
#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47
#define m_flTimeWeaponIdle 48
#define m_iDirection 60
#define m_fWeaponState 74
#define m_LastHitGroup 75
#define m_flNextAttack 83
#define m_iLastZoom 109
#define m_fResumeZoom 110
#define m_iFOV 363
#define m_pActiveItem 373
#define m_szAnimExtention 492
#define IsValidPev(%0) (pev_valid(%0) == 2)
#define THINK_ATTACK 2151636
#define set_time(%0,%1,%2) \
\
remove_task(%0+THINK_ATTACK); \
set_task(%2,%1,%0+THINK_ATTACK)
new IsKnife[33];
new iBlood[2];
enum
{
STATE_NONE = 0,
STATE_MODE = 1
}
Weapon_OnPrecache()
{
PRECACHE_SOUNDS_FROM_MODEL(WEAPON_MODEL_VIEW);
PRECACHE_MODEL(WEAPON_MODEL_VIEW);
PRECACHE_MODEL(WEAPON_MODEL_PLAYER);
PRECACHE_SOUND(SOUND_DRAW);
PRECACHE_SOUND(SOUND_SHOOT);
PRECACHE_SOUND(SOUND_SLASH);
PRECACHE_SOUND(SOUND_SLASH2);
PRECACHE_SOUND(SOUND_HIT);
PRECACHE_SOUND(SOUND_HIT_WALL);
PRECACHE_SOUND(SOUND_HIT_WALL2);
PRECACHE_GENERIC(WEAPON_HUD_TXT);
PRECACHE_GENERIC(WEAPON_HUD_SPR1);
PRECACHE_GENERIC(WEAPON_HUD_SPR2);
iBlood[0] = PRECACHE_MODEL("sprites/bloodspray.spr");
iBlood[1] = PRECACHE_MODEL("sprites/blood.spr");
}
Weapon_OnDeploy(const iItem, const iPlayer)
{
#pragma unused iItem, iPlayer
remove_task(iPlayer+THINK_ATTACK);
Weapon_DefaultDeploy(iPlayer, WEAPON_MODEL_VIEW, WEAPON_MODEL_PLAYER, GET_STATE(iItem) ? ANIM_DRAW_B:ANIM_DRAW_A, ANIM_EXTENSION);
engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_DRAW, 1.0, ATTN_NORM, 0, PITCH_NORM);
set_pdata_float(iItem, m_flTimeWeaponIdle, 2.0, extra_offset_weapon);
set_pdata_float(iPlayer, m_flNextAttack, 1.0, extra_offset_player);
Weapon_ShowSprite(iPlayer);
}
Weapon_OnHolster(const iItem, const iPlayer)
{
#pragma unused iItem, iPlayer
remove_task(iPlayer+THINK_ATTACK);
set_pev(iItem, pev_iuser1, 0);
set_pev(iItem, pev_iuser2, 0);
set_pev(iItem, pev_fuser1, 0.0);
}
Weapon_OnIdle(const iItem, const iPlayer)
{
#pragma unused iItem, iPlayer
static iState;pev(iItem, pev_iuser1, iState);
static iState2;pev(iItem, pev_iuser2, iState2);
static Float:iTime;pev(iItem, pev_fuser1, iTime);
if (iState2 && get_pdata_float(iItem, m_flNextPrimaryAttack, extra_offset_weapon) <= 0.0)
{
Weapon_SendAnim(iPlayer, ANIM_CHANGE_A);
set_pdata_float(iItem, m_flTimeWeaponIdle, 3.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextPrimaryAttack, 3.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextSecondaryAttack, 3.5, extra_offset_weapon);
set_pev(iItem, pev_iuser1, 0);
set_pev(iItem, pev_iuser2, 0);
SET_STATE(iItem, STATE_NONE);
}
ExecuteHamB(Ham_Weapon_ResetEmptySound, iItem);
if (get_pdata_int(iItem, m_flTimeWeaponIdle, extra_offset_weapon) > 0.0)
{
return;
}
switch (GET_STATE(iItem))
{
case STATE_NONE:
{
Weapon_SendAnim(iPlayer, ANIM_IDLE_A);
set_pdata_float(iItem, m_flTimeWeaponIdle, 10.0, extra_offset_weapon);
}
case STATE_MODE:
{
Weapon_SendAnim(iPlayer, ANIM_IDLE_B);
set_pdata_float(iItem, m_flTimeWeaponIdle, 10.0, extra_offset_weapon);
}
}
}
Weapon_OnPrimaryAttack(const iItem, const iPlayer)
{
#pragma unused iItem, iPlayer
switch (GET_STATE(iItem))
{
case STATE_NONE:
{
static szAnimation[64];
formatex(szAnimation, charsmax(szAnimation), "ref_shoot_%s", ANIM_EXTENSION);
switch (GET_SHOOTS(iItem))
{
case 0:
{
Weapon_SendAnim(iPlayer, ANIM_SLASH_A);
set_pdata_float(iItem, m_flTimeWeaponIdle, 2.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextPrimaryAttack, 2.0, extra_offset_weapon);
set_pdata_float(iItem, m_flNextSecondaryAttack, 2.0, extra_offset_weapon);
engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_SLASH, 1.0, ATTN_NORM, 0, PITCH_NORM);
set_time(iPlayer, "WeaponSlash", 0.95);
SET_SHOOTS(iItem, 1);
}
case 1:
{
Weapon_SendAnim(iPlayer, ANIM_SLASH_A2);
set_pdata_float(iItem, m_flTimeWeaponIdle, 2.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextPrimaryAttack, 2.0, extra_offset_weapon);
set_pdata_float(iItem, m_flNextSecondaryAttack, 2.0, extra_offset_weapon);
engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_SLASH2, 1.0, ATTN_NORM, 0, PITCH_NORM);
set_time(iPlayer, "WeaponSlash", 0.95);
SET_SHOOTS(iItem, 0);
}
}
Player_SetAnimation(iPlayer, szAnimation);
}
case STATE_MODE:
{
if (pev(iItem, pev_iuser1) || pev(iItem, pev_iuser2))
{
return;
}
Weapon_SendAnim(iPlayer, ANIM_SHOOT_B_START);
set_pdata_float(iItem, m_flTimeWeaponIdle, 0.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextPrimaryAttack, 0.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextSecondaryAttack, 0.5, extra_offset_weapon);
set_pev(iItem, pev_iuser1, 1);
set_pev(iItem, pev_fuser1, get_gametime() + 6.0);
}
}
}
public Weapon_OnSecondaryAttack(const iItem, const iPlayer)
{
#pragma unused iItem, iPlayer
Weapon_SendAnim(iPlayer, GET_STATE(iItem) ? ANIM_CHANGE_A:ANIM_CHANGE_B)
SET_STATE(iItem, GET_STATE(iItem) == STATE_NONE ? STATE_MODE:STATE_NONE);
set_pdata_float(iItem, m_flTimeWeaponIdle, !GET_STATE(iItem) ? 3.5:4.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextPrimaryAttack, !GET_STATE(iItem) ? 3.5:4.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextSecondaryAttack, !GET_STATE(iItem) ? 3.5:4.5, extra_offset_weapon);
}
//*********************************************************************
//* Don't modify the code below this line unless *
//* you know _exactly_ what you are doing!!! *
//*********************************************************************
public plugin_precache()
{
Weapon_OnPrecache();
register_clcmd(WEAPON_NAME, "Cmd_WeaponSelect");
//register_message(get_user_msgid("DeathMsg"), "MsgHook_Death");
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHam(Ham_Item_AddToPlayer, WEAPON_REFERANCE, "HamHook_Item_AddToPlayer", false);
RegisterHam(Ham_Item_Deploy, WEAPON_REFERANCE, "HamHook_Item_Deploy_Post", true);
RegisterHam(Ham_Item_Holster, WEAPON_REFERANCE, "HamHook_Item_Holster", false);
RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_REFERANCE, "HamHook_Item_WeaponIdle", false);
RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_REFERANCE, "HamHook_Item_PrimaryAttack", false);
RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_REFERANCE, "HamHook_Item_SecondaryAttack", false);
RegisterHam(Ham_Item_PostFrame, WEAPON_REFERANCE, "HamHook_Item_PostFrame", false);
RegisterHam(Ham_Spawn, "player", "HamHook_Player_Spawn", true);
RegisterHam(Ham_Killed, "player", "HamHook_Player_Killed", false);
register_forward(FM_UpdateClientData, "FakeMeta_UpdateClientData_Post", true);
register_forward(FM_ClientCommand , "FakeMeta_ClientCommand", false)
register_clcmd("Th9", "native_set_user_thanatos");
register_clcmd("Th9D", "native_delete_user_thanatos");
}
public plugin_natives()
{
register_native("SetUserTh9", "native_set_user_thanatos", true);
register_native("DelUserTh9", "native_delete_user_thanatos", true) ;
}
public native_set_user_thanatos(iPlayer)
{
IsKnife[iPlayer] = true;
Weapon_Select(iPlayer);
}
public native_delete_user_thanatos(iPlayer)
{
IsKnife[iPlayer] = false;
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, iPlayer);
WRITE_STRING(WEAPON_REFERANCE);
WRITE_BYTE(-1);
WRITE_BYTE(-1);
WRITE_BYTE(-1);
WRITE_BYTE(-1);
WRITE_BYTE(2);
WRITE_BYTE(1);
WRITE_BYTE(29);
WRITE_BYTE(0);
MESSAGE_END();
new iItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
if (pev_valid(iItem))ExecuteHamB(Ham_Item_Deploy, iItem);
}
//**********************************************
//* Block client weapon. *
//**********************************************
public FakeMeta_UpdateClientData_Post(const iPlayer, const iSendWeapons, const CD_Handle)
{
static iActiveItem;iActiveItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
if(zp_get_user_zombie(iPlayer) || !IsKnife[iPlayer])
{
return FMRES_IGNORED;
}
if (!IsValidPev(iActiveItem) || get_user_weapon(iPlayer) != CSW_KNIFE)
{
return FMRES_IGNORED;
}
if (!IsKnife[iPlayer])
{
return FMRES_IGNORED;
}
set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001);
return FMRES_IGNORED;
}
public FakeMeta_ClientCommand(iPlayer)
{
if (!is_user_alive(iPlayer))
{
return FMRES_IGNORED;
}
static cCmd[32];read_argv(0, cCmd, 31);
static iItem;iItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
if (!IsValidPev(iItem) || get_user_weapon(iPlayer) != CSW_KNIFE)
{
return FMRES_IGNORED;
}
if (!pev(iItem, pev_iuser1))
{
return FMRES_IGNORED;
}
if (equal(cCmd,"weapon_", 7) || equal(cCmd,"lastinv"))
{
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
//**********************************************
//* Item (weapon) hooks. *
//**********************************************
#define _call.%0(%1,%2) \
\
Weapon_On%0 \
( \
%1, \
%2 \
)
public HamHook_Item_AddToPlayer(const iItem, const iPlayer)Weapon_ShowSprite(iPlayer)
public HamHook_Item_Deploy_Post(const iItem)
{
new iPlayer;
if (!CheckItem(iItem, iPlayer))
{
return HAM_IGNORED;
}
_call.Deploy(iItem, iPlayer);
return HAM_IGNORED;
}
public HamHook_Item_Holster(const iItem)
{
new iPlayer;
if (!CheckItem(iItem, iPlayer))
{
return HAM_IGNORED;
}
set_pev(iPlayer, pev_viewmodel, 0);
set_pev(iPlayer, pev_weaponmodel, 0);
_call.Holster(iItem, iPlayer);
return HAM_SUPERCEDE;
}
public HamHook_Item_WeaponIdle(const iItem)
{
static iPlayer;
if (!CheckItem(iItem, iPlayer))
{
return HAM_IGNORED;
}
_call.Idle(iItem, iPlayer);
return HAM_SUPERCEDE;
}
public HamHook_Item_PrimaryAttack(const iItem)
{
static iPlayer;
if (!CheckItem(iItem, iPlayer))
{
return HAM_IGNORED;
}
_call.PrimaryAttack(iItem, iPlayer);
return HAM_SUPERCEDE;
}
public HamHook_Item_SecondaryAttack(const iItem)
{
static iPlayer;
if (!CheckItem(iItem, iPlayer))
{
return HAM_IGNORED;
}
_call.SecondaryAttack(iItem, iPlayer);
return HAM_SUPERCEDE;
}
public HamHook_Item_PostFrame(const iItem)
{
static iPlayer;
if (!CheckItem(iItem, iPlayer))
{
return HAM_IGNORED;
}
static Float:iTime;pev(iItem, pev_fuser1, iTime);
static iState;pev(iItem, pev_iuser1, iState);
static iState2;pev(iItem, pev_iuser2, iState2);
if (iState && !iState2 && get_pdata_float(iItem, m_flNextPrimaryAttack, extra_offset_weapon) <= 0.0 && iTime <= get_gametime())
{
Weapon_SendAnim(iPlayer, ANIM_SHOOT_B_END);
set_pdata_float(iItem, m_flTimeWeaponIdle, 0.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextPrimaryAttack, 0.5, extra_offset_weapon);
set_pdata_float(iItem, m_flNextSecondaryAttack, 0.5, extra_offset_weapon);
//set_pev(iItem, pev_iuser1, 0);
set_pev(iItem, pev_iuser2, 1);
engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_SHOOT, 0.0, 0.0, SND_STOP, PITCH_NORM);
}
if (iState && !iState2 && get_pdata_float(iItem, m_flNextPrimaryAttack, extra_offset_weapon) <= 0.0)
{
Weapon_SendAnim(iPlayer, ANIM_SHOOT_B_LOOP);
set_pdata_float(iItem, m_flTimeWeaponIdle, 1.0, extra_offset_weapon);
set_pdata_float(iPlayer, m_flNextAttack, 0.16, extra_offset_player);
set_pdata_float(iItem, m_flNextSecondaryAttack, 0.16, extra_offset_weapon);
PrimarySlash_Attack(iPlayer, iItem, .bStab = true);
engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_SHOOT, 0.8, ATTN_NORM, 0, PITCH_NORM);
}
return HAM_IGNORED;
}
public HamHook_Player_Spawn(iPlayer)
{
if(is_user_alive(iPlayer))
{
if (IsKnife[iPlayer])
{
Weapon_Select(iPlayer);
}
}
}
public HamHook_Player_Killed(const iPlayer)
{
IsKnife[iPlayer] = false;
}
//**********************************************
//* Doing some weapon stuff. *
//**********************************************
public WeaponSlash(iPlayer)
{
iPlayer -= THINK_ATTACK;
new iItem;
if (!CheckItem2(iPlayer, iItem))
{
return;
}
new Float:flRightBase = -10.0;
for (new i = 0; i < 10; i++)
{
PrimarySlash_Attack(iPlayer, iItem, .flRightScale = flRightBase += 10.0);
}
}
//**********************************************
//* Attack function. *
//**********************************************
PrimarySlash_Attack(const iPlayer, const iItem, const Float: flRightScale = 1.0, const Float: flUpScale = 1.0, const bool: bStab = false)
{
new Float: Origin[3];
new Float: vecEnd[3];
new Float: vecScr[3];
new Float: flFraction;
new iTrace;
new iVictim;
SET_SHOOTS(iItem, GET_SHOOTS(iItem) == 1 ? 0:1);
Weapon_GetGunPosition(iPlayer, Origin, vecScr, 0.0, flRightScale, flUpScale);
angle_vector(vecScr, ANGLEVECTOR_FORWARD, vecScr);
xs_vec_mul_scalar(vecScr, (bStab ? WEAPON_DISTANCE_ATTACK_MODE : WEAPON_DISTANCE_ATTACK), vecEnd);
xs_vec_add(Origin, vecEnd, vecEnd);
engfunc(EngFunc_TraceLine, Origin, vecEnd, DONT_IGNORE_MONSTERS, iPlayer, (iTrace = create_tr2()));
get_tr2(iTrace, TR_flFraction, flFraction);
if (flFraction >= 1.0)
{
engfunc(EngFunc_TraceHull, Origin, vecEnd, DONT_IGNORE_MONSTERS, HULL_HEAD, iPlayer, iTrace);
get_tr2(iTrace, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
iVictim = INSTANCE(get_tr2(iTrace, TR_pHit));
if (!iVictim || ExecuteHamB(Ham_IsBSPModel, iVictim))
{
FindHullIntersection(Origin, iTrace, Float: {-16.0, -16.0, -18.0}, Float: {16.0, 16.0, 18.0}, iPlayer);
}
}
}
get_tr2(iTrace, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
iVictim = INSTANCE(get_tr2(iTrace, TR_pHit));
new Float:iDamage = (bStab ? WEAPON_DAMAGE_MODE:WEAPON_DAMAGE)
if(iVictim > 0 && pev(iVictim, pev_takedamage) != DAMAGE_NO && pev(iVictim, pev_solid) != SOLID_NOT)
{
if(ExecuteHamB(Ham_IsPlayer, iVictim))
{
emit_sound(iPlayer, CHAN_ITEM, SOUND_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM);
if(!zp_get_user_zombie(iVictim))
{
return;
}
new Float:vecViewAngle[3]; pev(iPlayer, pev_v_angle, vecViewAngle);
new Float:vecForward[3]; angle_vector(vecViewAngle, ANGLEVECTOR_FORWARD, vecForward);
FakeKnockBack(iVictim, vecForward, WEAPON_KNOCKBACK);
get_tr2(iTrace, TR_vecEndPos, vecEnd);
Create_Blood(vecEnd, iBlood[0], iBlood[1], 76, 10);
static iHitGroup;
switch ((iHitGroup = get_tr2(iTrace, TR_iHitgroup)))
{
case HIT_HEAD:iDamage *= 2;
case HIT_CHEST:iDamage *= 1;
case HIT_STOMACH:iDamage *= 1.25;
case HIT_LEFTARM,HIT_RIGHTARM:iDamage *= 1;
case HIT_LEFTLEG,HIT_RIGHTLEG:iDamage *= 0.75;
}
set_pdata_int(iVictim, m_LastHitGroup, iHitGroup, extra_offset_player);
}
ExecuteHamB(Ham_TakeDamage, iVictim, iItem, iPlayer, iDamage, DMG_CLUB | DMG_NEVERGIB);
}
else
{
emit_sound(iPlayer, CHAN_ITEM, bStab ? SOUND_HIT_WALL2:SOUND_HIT_WALL, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
}
free_tr2(iTrace);
}
public FakeKnockBack(iPlayer, Float: vecDirection[3], Float:flKnockBack)
{
set_pdata_float(iPlayer, 108, 1.0, 5);
static Float:vecVelocity[3]; pev(iPlayer, pev_velocity, vecVelocity);
if (pev(iPlayer, pev_flags) & FL_DUCKING)
{
flKnockBack *= 0.7;
}
vecVelocity[0] = vecDirection[0] * 500.0 * flKnockBack;
vecVelocity[1] = vecDirection[1] * 500.0 * flKnockBack;
vecVelocity[2] = 400.0;
set_pev(iPlayer, pev_velocity, vecVelocity);
return 1;
}
//**********************************************
//* Create and check our custom weapon. *
//**********************************************
Weapon_SendAnim(const iPlayer, const iAnim)
{
set_pev(iPlayer, pev_weaponanim, iAnim);
MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0.0, 0.0, 0.0}, iPlayer);
WRITE_BYTE(iAnim);
WRITE_BYTE(0);
MESSAGE_END();
}
stock Weapon_DefaultDeploy(const iPlayer, const szViewModel[], const szWeaponModel[], const iAnim, const szAnimExt[])
{
set_pev(iPlayer, pev_viewmodel2, szViewModel);
set_pev(iPlayer, pev_weaponmodel2, szWeaponModel);
set_pev(iPlayer, pev_fov, 90.0);
set_pdata_int(iPlayer, m_iFOV, 90, extra_offset_player);
set_pdata_int(iPlayer, m_fResumeZoom, 0, extra_offset_player);
set_pdata_int(iPlayer, m_iLastZoom, 90, extra_offset_player);
set_pdata_string(iPlayer, m_szAnimExtention * 4, szAnimExt, -1, extra_offset_player * 4);
Weapon_SendAnim(iPlayer, iAnim);
}
stock Create_Blood(const Float:vStart[3], const iModel, const iModel2, const iColor, const iScale)
{
MESSAGE_BEGIN(MSG_BROADCAST, SVC_TEMPENTITY, vStart, 0);
WRITE_BYTE(TE_BLOODSPRITE);
WRITE_COORD(vStart[0])
WRITE_COORD(vStart[1])
WRITE_COORD(vStart[2])
WRITE_SHORT(iModel);
WRITE_SHORT(iModel2);
WRITE_BYTE(iColor);
WRITE_BYTE(iScale);
MESSAGE_END();
}
public client_putinserver(id)
{
BitSet(g_bitIsConnected, id);
}
public client_disconnected(id)
{
BitClear(g_bitIsConnected, id);
}
bool: CheckItem(const iItem, &iPlayer)
{
if (!IsValidPev(iItem))
{
return false;
}
iPlayer = get_pdata_cbase(iItem, m_pPlayer, extra_offset_weapon);
if (!BitCheck(g_bitIsConnected, iPlayer) || !IsValidPev(iPlayer) || zp_get_user_zombie(iPlayer) || !IsKnife[iPlayer])
{
return false;
}
return true;
}
bool: CheckItem2(const iPlayer, &iItem)
{
if (!BitCheck(g_bitIsConnected, iPlayer) || !IsValidPev(iPlayer) || zp_get_user_zombie(iPlayer) || get_user_weapon(iPlayer) != CSW_KNIFE)
{
return false;
}
iItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
if (!IsValidPev(iItem))
{
return false;
}
return true;
}
//**********************************************
//* Some usefull stocks. *
//**********************************************
stock Weapon_GetGunPosition(const iPlayer, Float: fOrigin[3], Float: fAngles[3], Float: add_forward = 0.0, Float: add_right = 0.0, Float: add_up = 0.0)
{
static Float: Forward[3], Float: Right[3], Float: Up[3];
if (IsValidPev(iPlayer)) ExecuteHamB(Ham_Player_GetGunPosition, iPlayer, fOrigin);
pev(iPlayer, pev_angles, fAngles);
pev(iPlayer, pev_v_angle, fAngles);
global_get(glb_v_forward, Forward);
global_get(glb_v_right, Right);
global_get(glb_v_up, Up);
xs_vec_mul_scalar(Forward, add_forward, Forward);
xs_vec_mul_scalar(Right, add_right, Right);
xs_vec_mul_scalar(Up, add_up, Up);
fOrigin[0] = fOrigin[0] + Forward[0] + Right[0] + Up[0];
fOrigin[1] = fOrigin[1] + Forward[1] + Right[1] + Up[1];
fOrigin[2] = fOrigin[2] + Forward[2] + Right[2] + Up[2];
}
stock FindHullIntersection(const Float: vecSrc[3], &iTrace, const Float: vecMins[3], const Float: vecMaxs[3], const iEntity)
{
new iTempTrace;
new Float: flFraction;
new Float: flThisDistance;
new Float: vecEnd[3];
new Float: vecEndPos[3];
new Float: vecHullEnd[3];
new Float: vecMinMaxs[2][3];
new Float: flDistance = 999999.0;
xs_vec_copy(vecMins, vecMinMaxs[0]);
xs_vec_copy(vecMaxs, vecMinMaxs[1]);
get_tr2(iTrace, TR_vecEndPos, vecHullEnd);
xs_vec_sub(vecHullEnd, vecSrc, vecHullEnd);
xs_vec_mul_scalar(vecHullEnd, 2.0, vecHullEnd);
xs_vec_add(vecHullEnd, vecSrc, vecHullEnd);
engfunc(EngFunc_TraceLine, vecSrc, vecHullEnd, DONT_IGNORE_MONSTERS, iEntity, (iTempTrace = create_tr2()));
get_tr2(iTempTrace, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
free_tr2(iTrace);
iTrace = iTempTrace;
return;
}
for (new j, k, i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
{
for (k = 0; k < 2; k++)
{
vecEnd[0] = vecHullEnd[0] + vecMinMaxs[i][0];
vecEnd[1] = vecHullEnd[1] + vecMinMaxs[j][1];
vecEnd[2] = vecHullEnd[2] + vecMinMaxs[k][2];
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, DONT_IGNORE_MONSTERS, iEntity, iTempTrace);
get_tr2(iTempTrace, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
get_tr2(iTempTrace, TR_vecEndPos, vecEndPos);
xs_vec_sub(vecEndPos, vecSrc, vecEndPos);
if ((flThisDistance = xs_vec_len(vecEndPos)) < flDistance)
{
free_tr2(iTrace);
iTrace = iTempTrace;
flDistance = flThisDistance;
}
}
}
}
}
}
stock Player_SetAnimation(const iPlayer, const szAnim[])
{
#define ACT_RANGE_ATTACK1 28
// Linux extra offsets
#define extra_offset_animating 4
// CBaseAnimating
#define m_flFrameRate 36
#define m_flGroundSpeed 37
#define m_flLastEventCheck 38
#define m_fSequenceFinished 39
#define m_fSequenceLoops 40
// CBaseMonster
#define m_Activity 73
#define m_IdealActivity 74
// CBasePlayer
#define m_flLastAttackTime 220
new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;
if ((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1)
{
iAnimDesired = 0;
}
new Float: flGametime = get_gametime();
set_pev(iPlayer, pev_frame, 0.0);
set_pev(iPlayer, pev_framerate, 1.0);
set_pev(iPlayer, pev_animtime, flGametime);
set_pev(iPlayer, pev_sequence, iAnimDesired);
set_pdata_int(iPlayer, m_fSequenceLoops, bLoops, extra_offset_animating);
set_pdata_int(iPlayer, m_fSequenceFinished, 0, extra_offset_animating);
set_pdata_float(iPlayer, m_flFrameRate, flFrameRate, extra_offset_animating);
set_pdata_float(iPlayer, m_flGroundSpeed, flGroundSpeed, extra_offset_animating);
set_pdata_float(iPlayer, m_flLastEventCheck, flGametime , extra_offset_animating);
set_pdata_int(iPlayer, m_Activity, ACT_RANGE_ATTACK1, extra_offset_player);
set_pdata_int(iPlayer, m_IdealActivity, ACT_RANGE_ATTACK1, extra_offset_player);
set_pdata_float(iPlayer, m_flLastAttackTime, flGametime , extra_offset_player);
}
public Cmd_WeaponSelect(iPlayer)
{
engclient_cmd(iPlayer, WEAPON_REFERANCE);
return PLUGIN_HANDLED;
}
public MsgHook_Death(const iMsgID, const iMsgDest, const iMsgEntity)
{
static szWeapon[64];get_msg_arg_string(4, szWeapon, charsmax(szWeapon));
static iPlayer;
static iItem;
if (strcmp(szWeapon, "knife"))
{
return PLUGIN_CONTINUE;
}
iPlayer = get_msg_arg_int(1);
iItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
if (!IsValidPev(iItem) || !IsKnife[iPlayer])
{
return PLUGIN_CONTINUE;
}
set_msg_arg_string(4, "hammer");
return PLUGIN_CONTINUE
}
public zp_user_infected_post(iPlayer)
{
remove_task(iPlayer+THINK_ATTACK);
IsKnife[iPlayer] = false;
Weapon_ShowSprite(iPlayer);
}
public Weapon_Select(const iPlayer)
{
engclient_cmd(iPlayer, WEAPON_REFERANCE);
IsKnife[iPlayer] = true;
emessage_begin(MSG_ONE, get_user_msgid("CurWeapon"), _, iPlayer);
ewrite_byte(1);
ewrite_byte(CSW_KNIFE);
ewrite_byte(-1);
emessage_end();
Weapon_ShowSprite(iPlayer);
new iItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
if (pev_valid(iItem))
{
ExecuteHamB(Ham_Item_Deploy, iItem);
}
}
public Weapon_ShowSprite(const iPlayer)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, iPlayer);
WRITE_STRING(IsKnife[iPlayer] ? WEAPON_NAME:WEAPON_REFERANCE);
WRITE_BYTE(-1);
WRITE_BYTE(-1);
WRITE_BYTE(-1);
WRITE_BYTE(-1);
WRITE_BYTE(2);
WRITE_BYTE(1);
WRITE_BYTE(29);
WRITE_BYTE(0);
MESSAGE_END();
}
PRECACHE_SOUNDS_FROM_MODEL(const szModelPath[])
{
new iFile;
if ((iFile = fopen(szModelPath, "rt")))
{
new szSoundPath[64];
new iNumSeq, iSeqIndex;
new iEvent, iNumEvents, iEventIndex;
fseek(iFile, 164, SEEK_SET);
fread(iFile, iNumSeq, BLOCK_INT);
fread(iFile, iSeqIndex, BLOCK_INT);
for (new k, i = 0; i < iNumSeq; i++)
{
fseek(iFile, iSeqIndex + 48 + 176 * i, SEEK_SET);
fread(iFile, iNumEvents, BLOCK_INT);
fread(iFile, iEventIndex, BLOCK_INT);
fseek(iFile, iEventIndex + 176 * i, SEEK_SET);
for (k = 0; k < iNumEvents; k++)
{
fseek(iFile, iEventIndex + 4 + 76 * k, SEEK_SET);
fread(iFile, iEvent, BLOCK_INT);
fseek(iFile, 4, SEEK_CUR);
if (iEvent != 5004)
{
continue;
}
fread_blocks(iFile, szSoundPath, 64, BLOCK_CHAR);
if (strlen(szSoundPath))
{
strtolower(szSoundPath);
PRECACHE_SOUND(szSoundPath);
}
}
}
}
fclose(iFile);
}
P.S: не обращайте внимание на табуляцию