Raised This Month: $32 Target: $400
 8% 

return of the knife model through the native


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Vaim
Member
Join Date: Feb 2019
Old 01-16-2021 , 17:16   return of the knife model through the native
Reply With Quote #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.
Vaim is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 01-16-2021 , 19:24   Re: return of the knife model through the native
Reply With Quote #2

It will be much easier to use a better plugin with a full API that can handle the job - https://forums.alliedmods.net/showthread.php?t=293632
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
Vaim
Member
Join Date: Feb 2019
Old 01-17-2021 , 02:34   Re: return of the knife model through the native
Reply With Quote #3

Wow, cool plugin) Thank you. Maybe you have a similar plugin where you can replace AK, M4, DGl, AWP, USP? by the same principle


i saw your XP plugin, very cool
https://forums.alliedmods.net/showthread.php?t=308540
Vaim is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 01-17-2021 , 07:37   Re: return of the knife model through the native
Reply With Quote #4

I have one for AWP - https://forums.alliedmods.net/showthread.php?t=293454
You can use it for other weapons as well if you change the code a bit.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
Vaim
Member
Join Date: Feb 2019
Old 01-17-2021 , 08:33   Re: return of the knife model through the native
Reply With Quote #5

Please tell me if you put on the server several such systems as your plugin, for example knife, awp, ak and so on. Will they not conflict with each other? And if it's not difficult for you, can you tell me how to make my sma files correctly? For my experience, otherwise I can’t understand what I’m doing wrong.

P.S. Thank you very much.
Vaim is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 01-17-2021 , 10:09   Re: return of the knife model through the native
Reply With Quote #6

They won't conflict. Example here - https://forums.alliedmods.net/showpo...1&postcount=51
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 14:26.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode