Raised This Month: $51 Target: $400
 12% 

[Help] Shield plugin.


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Lord Canistra
Senior Member
Join Date: Mar 2009
Location: Tallinn, Estonia
Old 03-25-2009 , 14:48   [Help] Shield plugin.
Reply With Quote #1

I'm writing a plugin for Zombie Plague Mod that adds a shield as extra item for zombies. Shield is being given for certain amount of time (8 secs default) and then taken away. So far I've faced a problem I can't solve myself:

When giving player a shield, I change his viewmodel to my one. And after shield's time runs out and it is taken away, I must restore player's viewmodel back to which he had before buying shield. But viewmodels can be different depending on server's settings for different zombie classes. So how can I find out which viewmodel belongs to current player's zombie class?

Code - what I have for now.

Code:
#include <amxmodx>
#include <amxmisc>
#include <zombieplague>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>

new const g_item_name[] = { "Shield" }
new cvar_shield_cost, cvar_shield_duration, g_itemid_shield, g_item_cost, shield_duration
new const model_shield[] = { "models/zombie_plague/v_zp_extra_shield.mdl" }
new const p_model_shield[] = { "models/zombie_plague/p_zp_extra_shield.mdl" }
new const model_claws[] = { "models/zombie_plague/v_knife_zombie.mdl" }
new const zscv[] = { "zp_shield_cost" }

public plugin_precache()
{
	engfunc(EngFunc_PrecacheModel, model_shield)
	engfunc(EngFunc_PrecacheModel, p_model_shield)
	engfunc(EngFunc_PrecacheModel, model_claws)
}

public plugin_init()
{
	register_plugin("[ZP] Extra item :: Zombie Shield", "1.0", "Lord Canistra")
	
	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
	
	new cfgdir[32]
	get_configsdir(cfgdir, sizeof cfgdir-1)
	
	cvar_shield_cost = register_cvar("zp_shield_cost", "8")
	cvar_shield_duration = register_cvar("zp_shield_duration", "8")
	
	if(cvar_exists(zscv) == 0)
	{
		server_cmd("exec %s/zp_extra_shield.cfg", cfgdir)
	}
	
	g_item_cost = get_pcvar_num(cvar_shield_cost)
	shield_duration = get_pcvar_num(cvar_shield_duration)
	
	g_itemid_shield = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_ZOMBIE)
}

public zp_extra_item_selected(player, itemid)
{
	if(itemid == g_itemid_shield)
	{
		fm_strip_user_weapons(player)
		fm_give_item(player, "weapon_knife")
		set_task(0.1, "EquipShield", player)
		set_task(float(shield_duration), "StripShield", player)
		message_begin( MSG_ONE, 108, {0,0,0}, player );
		write_byte(shield_duration);
		write_byte(0);
		message_end();
	}
}

public fw_PlayerKilled(victim)
{
	set_task(0.0001, "RemoveShields")
	remove_task(victim)
}

public RemoveShields()
{
	static sent
	
	while(sent = engfunc(EngFunc_FindEntityByString, sent, "classname", "weapon_shield"))
	{
		engfunc(EngFunc_SetOrigin, sent, Float:{8192.0,8192.0,8192.0})
	}
}

public StripShield(player)
{
	fm_strip_user_weapons(player)
	set_task(0.1, "Equip", player)
}

public Equip(player)
{
	fm_give_item(player, "weapon_knife")
	set_pev(player, pev_viewmodel2, model_claws)
	set_pev(player, pev_weaponmodel2, "")
}

public EquipShield(player)
{
	fm_give_item(player, "weapon_shield")
	set_pev(player, pev_viewmodel2, model_shield)
	set_pev(player, pev_weaponmodel2, p_model_shield)
}
PS forgive me any mistakes in this code or in my english, because this is my first Pawn coding experience and english isn't my native language.
Lord Canistra is offline
MeRcyLeZZ
Veteran Member
Join Date: Dec 2007
Old 03-27-2009 , 15:36   Re: [Help] Shield plugin.
Reply With Quote #2

The knife model is automatically set when the zombie switches back to knife, you shouldn't need to add any code for that.
__________________
MeRcyLeZZ is offline
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 16:43.


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