Member
|
01-16-2021
, 17:16
return of the knife model through the native
|
#1
|
Hello.
Please tell me how to correctly return the model to the player?
There is a plugin "injector" which replenishes the player's health when he holds a knife and presses "G" (drop weapons)
after the healing animation has passed, the player has a standard knife again.
Injector.sma
Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#pragma semicolon 1
//Настройки
#define HEAL 25.0
#define MAXHEALTH 100.0
#define VIP_AMMO 2
#define PLR_AMMO 1
#define FLAG ADMIN_LEVEL_H
#define ANIM_USE 0
#define OLD_KN_DRAW 3
#define TIME_ANIM_HEAL 2.0
#define TIME_DRAW_KNF 1.1
#define TASK_HEAL 25071973
#define is_valid_player(%0) (1 <= %0 <= g_maxplayers)
const m_flNextAttack = 83;
new const v_injectorX[] = "models/v_injectorX.mdl";
new const p_injectorX[] = "models/p_injectorX.mdl";
new const v_old_knife[] = "models/v_knife.mdl";
new const p_old_knife[] = "models/p_knife.mdl";
new const heal_sound[] = { "items/medshot4.wav" };
new shpr_ammo[33];
new g_maxplayers;
public plugin_init()
{
register_plugin("Injector X", "1.0", "Deadly|Darkness");
register_clcmd("drop", "use_inj");
RegisterHam(Ham_Spawn, "player", "ham_spawn_post", 1);
RegisterHam(Ham_Item_Holster, "weapon_knife", "fw_Knife_Holstered", 1);
g_maxplayers = get_maxplayers();
}
public plugin_precache()
{
precache_model(v_injectorX);
precache_model(p_injectorX);
precache_model(v_old_knife);
precache_model(p_old_knife);
precache_sound(heal_sound);
}
public ham_spawn_post(id)
{
if(get_user_flags(id) & FLAG)
shpr_ammo[id] = VIP_AMMO;
else shpr_ammo[id] = PLR_AMMO;
}
public use_inj(id)
{
if(!is_user_alive(id))
return;
if(get_user_weapon(id) != CSW_KNIFE || !shpr_ammo[id])
return;
remove_task(id+TASK_HEAL);
set_pdata_float(id, m_flNextAttack, TIME_ANIM_HEAL+0.1, 5);
set_pev(id, pev_viewmodel2, v_injectorX);
set_pev(id, pev_weaponmodel2, p_injectorX);
play_weapon_animation(id, ANIM_USE);
set_task(TIME_ANIM_HEAL, "use_inj2", id+TASK_HEAL);
}
public use_inj2(id)
{
id -= TASK_HEAL;
if(is_user_alive(id))
{
shpr_ammo[id]--;
set_pev(id, pev_viewmodel2, v_old_knife);
set_pev(id, pev_weaponmodel2, p_old_knife);
set_pdata_float(id, m_flNextAttack, TIME_DRAW_KNF, 5);
play_weapon_animation(id, OLD_KN_DRAW);
set_hp(id);
}
}
public fw_Knife_Holstered(weapon)
{
new id = get_pdata_cbase(weapon, 41, 4);
if(!pev_valid(weapon))
return HAM_IGNORED;
if(is_valid_player(id))
remove_task(id+TASK_HEAL);
return HAM_IGNORED;
}
stock set_hp(plr)
{
new hp = pev(plr, pev_health);
if(hp < MAXHEALTH)
{
if(hp + HEAL > MAXHEALTH)
set_pev(plr, pev_health, MAXHEALTH);
else set_pev(plr, pev_health, hp + HEAL);
emit_sound(plr, CHAN_BODY, heal_sound, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
}
stock play_weapon_animation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence);
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player);
write_byte(Sequence);
write_byte(pev(Player, pev_body));
message_end();
}
And there is a second plug-in that replaces the knife models for players, depending on the ftag available to them.
knife_models.sma
Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#define PLUGIN "buy Weapon Model"
#define VERSION "0.1"
#define AUTHOR "RidL"
#define ADMIN_BAN_TEMP (1<<21)
#define ADMIN_FLAG_W (1<<22)
#define ADMIN_FLAG_X (1<<23)
/*---------------EDIT ME------------------*/
new const gsznigModelV[] = "models/buyweaponbs/v_bsknife_nig.mdl" // 1st person view model
new const gsznigModelP[] = "models/buyweaponbs/p_bsknife_nig.mdl" // 3rd person view model
new const gszkerModelV[] = "models/buyweaponbs/v_bsknife_ker.mdl" // 1st person view model
new const gszkerModelP[] = "models/buyweaponbs/p_bsknife_ker.mdl" // 3rd person view model
new const gszbatModelV[] = "models/buyweaponbs/v_bsknife_bat.mdl" // 1st person view model
new const gszbatModelP[] = "models/buyweaponbs/p_bsknife_bat.mdl" // 3rd person view model
/*----------------------------------------*/
new gisznigModelV, gisznigModelP
new giszkerModelV, giszkerModelP
new giszbatModelV, giszbatModelP
new g_round
public plugin_init() {
register_plugin( PLUGIN, VERSION, AUTHOR )
register_event("HLTV","round_start","a","1=0","2=0")
RegisterHam( Ham_Item_Deploy,"weapon_knife","HamItemDeploy_nig", 1 )
RegisterHam( Ham_Item_Deploy,"weapon_knife","HamItemDeploy_ker", 1 )
RegisterHam( Ham_Item_Deploy,"weapon_knife","HamItemDeploy_bat", 1 )
gisznigModelV = engfunc(EngFunc_AllocString,gsznigModelV)
gisznigModelP = engfunc(EngFunc_AllocString,gsznigModelP)
giszkerModelV = engfunc(EngFunc_AllocString,gszkerModelV)
giszkerModelP = engfunc(EngFunc_AllocString,gszkerModelP)
giszbatModelV = engfunc(EngFunc_AllocString,gszbatModelV)
giszbatModelP = engfunc(EngFunc_AllocString,gszbatModelP)
}
public plugin_precache() {
precache_model(gsznigModelV)
precache_model(gsznigModelP)
precache_model(gszkerModelV)
precache_model(gszkerModelP)
precache_model(gszbatModelV)
precache_model(gszbatModelP)
}
public round_start() {
g_round++;
}
public round_restart() {
g_round = 0;
}
public HamItemDeploy_nig(iItem){
static iPlayer;
iPlayer = get_pdata_cbase(iItem, 41, 4)
if(~get_user_flags(iPlayer) & ADMIN_BAN_TEMP) return;
{
set_pev_string( iPlayer, pev_viewmodel2, gisznigModelV )
set_pev_string( iPlayer, pev_weaponmodel2, gisznigModelP )
}
}
public HamItemDeploy_ker(iItem){
static iPlayer;
iPlayer = get_pdata_cbase(iItem, 41, 4)
if(~get_user_flags(iPlayer) & ADMIN_FLAG_X) return;
{
set_pev_string( iPlayer, pev_viewmodel2, giszkerModelV )
set_pev_string( iPlayer, pev_weaponmodel2, giszkerModelP )
}
}
public HamItemDeploy_bat(iItem){
static iPlayer;
iPlayer = get_pdata_cbase(iItem, 41, 4)
if(~get_user_flags(iPlayer) & ADMIN_FLAG_W) return;
{
set_pev_string( iPlayer, pev_viewmodel2, giszbatModelV )
set_pev_string( iPlayer, pev_weaponmodel2, giszbatModelP )
}
}
The problem is that after applying the "injector" the standard knife model is returned, and not installed by the second plugin "knife_models.sma"
My try
Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#pragma semicolon 1
//Настройки
#define HEAL 25.0
#define MAXHEALTH 100.0
#define VIP_AMMO 2
#define PLR_AMMO 1
#define FLAG ADMIN_LEVEL_H
#define ANIM_USE 0
#define OLD_KN_DRAW 3
#define TIME_ANIM_HEAL 2.0
#define TIME_DRAW_KNF 1.1
#define TASK_HEAL 25071973
#define is_valid_player(%0) (1 <= %0 <= g_maxplayers)
const m_flNextAttack = 83;
new const v_injectorX[] = "models/dpinjector/v_injectorX.mdl";
new const p_injectorX[] = "models/dpinjector/p_injectorX.mdl";
new const v_old_knife[] = "models/v_knife.mdl";
new const p_old_knife[] = "models/p_knife.mdl";
new const heal_sound[] = { "items/medshot4.wav" };
new shpr_ammo[33];
new g_maxplayers;
native set_knife_model(id); //------------here---------------//
public plugin_init()
{
register_plugin("Injector X", "1.0", "Deadly|Darkness");
register_clcmd("drop", "use_inj");
RegisterHam(Ham_Spawn, "player", "ham_spawn_post", 1);
RegisterHam(Ham_Item_Holster, "weapon_knife", "fw_Knife_Holstered", 1);
g_maxplayers = get_maxplayers();
}
public plugin_precache()
{
precache_model(v_injectorX);
precache_model(p_injectorX);
precache_model(v_old_knife);
precache_model(p_old_knife);
precache_sound(heal_sound);
}
public ham_spawn_post(id)
{
if(get_user_flags(id) & FLAG)
shpr_ammo[id] = VIP_AMMO;
else shpr_ammo[id] = PLR_AMMO;
}
public use_inj(id)
{
if(!is_user_alive(id))
return;
if(get_user_weapon(id) != CSW_KNIFE || !shpr_ammo[id])
return;
remove_task(id+TASK_HEAL);
set_pdata_float(id, m_flNextAttack, TIME_ANIM_HEAL+0.1, 5);
set_pev(id, pev_viewmodel2, v_injectorX);
set_pev(id, pev_weaponmodel2, p_injectorX);
play_weapon_animation(id, ANIM_USE);
set_task(TIME_ANIM_HEAL, "use_inj2", id+TASK_HEAL);
}
public use_inj2(id)
{
id -= TASK_HEAL;
if(is_user_alive(id))
{
shpr_ammo[id]--;
set_knife_model(id); //------------here---------------//
set_pdata_float(id, m_flNextAttack, TIME_DRAW_KNF, 5);
play_weapon_animation(id, OLD_KN_DRAW);
set_hp(id);
}
}
public fw_Knife_Holstered(weapon)
{
new id = get_pdata_cbase(weapon, 41, 4);
if(!pev_valid(weapon))
return HAM_IGNORED;
if(is_valid_player(id))
remove_task(id+TASK_HEAL);
return HAM_IGNORED;
}
stock set_hp(plr)
{
new hp = pev(plr, pev_health);
if(hp < MAXHEALTH)
{
if(hp + HEAL > MAXHEALTH)
set_pev(plr, pev_health, MAXHEALTH);
else set_pev(plr, pev_health, hp + HEAL);
emit_sound(plr, CHAN_BODY, heal_sound, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
}
stock play_weapon_animation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence);
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player);
write_byte(Sequence);
write_byte(pev(Player, pev_body));
message_end();
}
knife_models.sma
Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#define PLUGIN "buy Weapon Model"
#define VERSION "0.1"
#define AUTHOR "RidL"
#define ADMIN_FLAG_V (1<<21)
#define ADMIN_FLAG_W (1<<22)
#define ADMIN_FLAG_X (1<<23)
/*---------------EDIT ME------------------*/
new const gsznigModelV[] = "models/buyweaponbs/v_bsknife_nig.mdl" // 1st person view model
new const gsznigModelP[] = "models/buyweaponbs/p_bsknife_nig.mdl" // 3rd person view model
new const gszkerModelV[] = "models/buyweaponbs/v_bsknife_ker.mdl" // 1st person view model
new const gszkerModelP[] = "models/buyweaponbs/p_bsknife_ker.mdl" // 3rd person view model
new const gszbatModelV[] = "models/buyweaponbs/v_bsknife_bat.mdl" // 1st person view model
new const gszbatModelP[] = "models/buyweaponbs/p_bsknife_bat.mdl" // 3rd person view model
/*----------------------------------------*/
new gisznigModelV, gisznigModelP
new giszkerModelV, giszkerModelP
new giszbatModelV, giszbatModelP
new g_round
public plugin_natives ( ){
register_native("set_knife_model", "HamItemDeploy_nig", 1)
register_native("set_knife_model", "HamItemDeploy_ker", 1)
register_native("set_knife_model", "HamItemDeploy_bat", 1)
}
public plugin_init() {
register_plugin( PLUGIN, VERSION, AUTHOR )
register_event("HLTV","round_start","a","1=0","2=0")
RegisterHam( Ham_Item_Deploy,"weapon_knife","HamItemDeploy_nig", 1 )
RegisterHam( Ham_Item_Deploy,"weapon_knife","HamItemDeploy_ker", 1 )
RegisterHam( Ham_Item_Deploy,"weapon_knife","HamItemDeploy_bat", 1 )
gisznigModelV = engfunc(EngFunc_AllocString,gsznigModelV)
gisznigModelP = engfunc(EngFunc_AllocString,gsznigModelP)
giszkerModelV = engfunc(EngFunc_AllocString,gszkerModelV)
giszkerModelP = engfunc(EngFunc_AllocString,gszkerModelP)
giszbatModelV = engfunc(EngFunc_AllocString,gszbatModelV)
giszbatModelP = engfunc(EngFunc_AllocString,gszbatModelP)
}
public plugin_precache() {
precache_model(gsznigModelV)
precache_model(gsznigModelP)
precache_model(gszkerModelV)
precache_model(gszkerModelP)
precache_model(gszbatModelV)
precache_model(gszbatModelP)
}
public round_start() {
g_round++;
}
public round_restart() {
g_round = 0;
}
public HamItemDeploy_nig(iItem){
static iPlayer;
iPlayer = get_pdata_cbase(iItem, 41, 4)
if(~get_user_flags(iPlayer) & ADMIN_FLAG_V) return;
{
set_pev_string( iPlayer, pev_viewmodel2, gisznigModelV )
set_pev_string( iPlayer, pev_weaponmodel2, gisznigModelP )
}
}
public HamItemDeploy_ker(iItem){
static iPlayer;
iPlayer = get_pdata_cbase(iItem, 41, 4)
if(~get_user_flags(iPlayer) & ADMIN_FLAG_X) return;
{
set_pev_string( iPlayer, pev_viewmodel2, giszkerModelV )
set_pev_string( iPlayer, pev_weaponmodel2, giszkerModelP )
}
}
public HamItemDeploy_bat(iItem){
static iPlayer;
iPlayer = get_pdata_cbase(iItem, 41, 4)
if(~get_user_flags(iPlayer) & ADMIN_FLAG_W) return;
{
set_pev_string( iPlayer, pev_viewmodel2, giszbatModelV )
set_pev_string( iPlayer, pev_weaponmodel2, giszbatModelP )
}
}
please help to do it correctly, I will be very grateful.
|
|