Senior Member
Join Date: Dec 2010
Location: Lithuania
|
03-28-2021
, 06:43
Knife model
|
#1
|
Hello. I'm using Crowbar extra item. All works fine and plugin does its job but.. After I buy it I see its model, but after a weapon switch it goes back to a normal knife (but plugin still does it's job, does knocback and etc.) How could I fix it to remain the model if bought?
CODE:
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#define PLUGIN "[ZP] Crowbar"
#define VERSION "1.1"
#define AUTHOR "DoNii"
#define is_valid_connected(%1) (1 <= %1 <= get_maxplayers())
#define ADMIN_FLAG ADMIN_RCON
new const CROWBAR_NAME[] = "\rCrowbar"
const CROWBAR_PRICE = 60
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX_WEAPONS = 4
const m_pActiveItem = 373
new g_HasCrowbar[33];
new g_ItemCrowbar;
// Models
new CROWBAR_MODEL_V[64] = "models/crowbar/crowbar_v.mdl"
new CROWBAR_MODEL_P[64] = "models/crowbar/crowbar_p.mdl"
new const crowbar_sounds[][] =
{
"weapons/crowbar/knife_deploy1.wav",
"weapons/crowbar/knife_hit1.wav",
"weapons/crowbar/knife_hit2.wav",
"weapons/crowbar/knife_hit3.wav",
"weapons/crowbar/knife_hit4.wav",
"weapons/crowbar/knife_hitwall1.wav",
"weapons/crowbar/knife_slash1.wav",
"weapons/crowbar/knife_slash2.wav",
"weapons/crowbar/knife_stab.wav"
}
new const oldknife_sounds[][] =
{
"weapons/knife_deploy1.wav",
"weapons/knife_hit1.wav",
"weapons/knife_hit2.wav",
"weapons/knife_hit3.wav",
"weapons/knife_hit4.wav",
"weapons/knife_hitwall1.wav",
"weapons/knife_slash1.wav",
"weapons/knife_slash2.wav",
"weapons/knife_stab.wav"
}
// Cvars
new g_crowbar_damage;
new g_crowbar_knockback;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("crowbar_get", "admin_get_crowbar", ADMIN_FLAG)
register_forward(FM_EmitSound, "fw_EmitSound");
RegisterHam(Ham_Item_Deploy, "weapon_knife", "fw_HamDeployCrowbarPost", 1)
RegisterHam(Ham_TakeDamage, "player", "fw_HamTakeDamagePre")
RegisterHam(Ham_Spawn, "player", "fw_HamSpawnPost", 1)
g_ItemCrowbar = zp_register_extra_item(CROWBAR_NAME, CROWBAR_PRICE, ZP_TEAM_HUMAN)
// Cvars
g_crowbar_damage = register_cvar("crowbar_damage", "3") // Damage multiplier
g_crowbar_knockback = register_cvar("crowbar_knockback", "30") // Knockback
// Log Cvar
register_cvar("crowbar_version", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
}
public plugin_precache() {
precache_model(CROWBAR_MODEL_V)
precache_model(CROWBAR_MODEL_P)
for (new i=0; i < sizeof crowbar_sounds; i++ )
precache_sound(crowbar_sounds[i])
}
/* ........... Beginning Of Stocks/ Private Functions ........... */
CrowbarModel(id) {
set_pev(id, pev_viewmodel2, CROWBAR_MODEL_V)
set_pev(id, pev_weaponmodel2, CROWBAR_MODEL_P)
}
stock zp_get_user_human(id) {
if(!zp_get_user_survivor(id) && !zp_get_user_zombie(id) && !zp_get_user_nemesis(id))
return true;
return false;
}
stock create_velocity_vector(victim, attacker, Float:velocity[3])
{
if(zp_get_user_zombie(attacker) || !is_user_alive(attacker) || !zp_get_user_zombie(victim))
return 0;
new Float:vicorigin[3];
new Float:attorigin[3];
entity_get_vector(victim , EV_VEC_origin , vicorigin);
entity_get_vector(attacker , EV_VEC_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_HasCrowbar[attacker])
{
velocity[0] = ( origin2[0] * get_pcvar_num(g_crowbar_knockback) * 3000) / get_entity_distance(victim , attacker);
velocity[1] = ( origin2[1] * get_pcvar_num(g_crowbar_knockback) * 3000) / get_entity_distance(victim , attacker);
}
if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
velocity[2] = random_float(200.0 , 275.0);
return 1;
}
/* ........... End Of Stocks/ Private Functions ........... */
public admin_get_crowbar(id, level, cid) {
if (!cmd_access(id, level, cid, 0 ))
return PLUGIN_HANDLED;
if(!is_user_alive(id))
return PLUGIN_HANDLED;
if(!zp_get_user_human(id))
return PLUGIN_HANDLED;
g_HasCrowbar[id] = true
CrowbarModel(id)
return PLUGIN_HANDLED;
}
public zp_user_infected_post(id) {
if(g_HasCrowbar[id])
g_HasCrowbar[id] = false
}
public zp_user_humanized_post(id) {
if(g_HasCrowbar[id])
g_HasCrowbar[id] = false
}
public fw_HamSpawnPost(id) {
if(g_HasCrowbar[id])
g_HasCrowbar[id] = false
}
public zp_extra_item_selected(id, item) {
if(item == g_ItemCrowbar && is_user_alive(id) && zp_get_user_human(id)) {
engclient_cmd(id, "weapon_knife")
CrowbarModel(id)
g_HasCrowbar[id] = true
}
return PLUGIN_HANDLED;
}
public fw_HamDeployCrowbarPost(ent) {
new id = get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
if(pev_valid(ent) != 2 )
return HAM_IGNORED;
if(!is_valid_connected(id))
return HAM_IGNORED;
if(get_pdata_cbase(id, m_pActiveItem ) != ent)
return HAM_IGNORED;
if(!g_HasCrowbar[id])
return HAM_IGNORED;
if(!zp_get_user_human(id))
return HAM_IGNORED;
CrowbarModel(id)
return HAM_IGNORED;
}
public fw_HamTakeDamagePre(victim, inflictor, attacker, Float:damage, damagebit) {
if(!is_valid_connected(attacker))
return HAM_IGNORED;
if(get_user_weapon(attacker) == CSW_KNIFE && g_HasCrowbar[attacker] && zp_get_user_human(attacker)) {
new Float:dmg = damage
dmg *= get_pcvar_num(g_crowbar_damage)
SetHamParamFloat(4, dmg)
new Float:vec[3];
new Float:oldvelo[3];
get_user_velocity(victim, oldvelo);
create_velocity_vector(victim , attacker , vec);
vec[0] += oldvelo[0];
vec[1] += oldvelo[1];
set_user_velocity(victim , vec);
}
return HAM_IGNORED;
}
public fw_EmitSound(id, channel, const sound[])
{
if(!is_user_alive(id) || zp_get_user_zombie(id))
return FMRES_IGNORED
for(new i = 0; i < sizeof crowbar_sounds; i++)
{
if(equal(sound, oldknife_sounds[i]))
{
if (g_HasCrowbar[id])
{
emit_sound(id, channel, crowbar_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
emit_sound(id, channel, oldknife_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
|
|