Delayed Attacks: Difference between revisions
Tannerbondy (talk | contribs) No edit summary |
Tannerbondy (talk | contribs) m (→Weapon Script) |
||
Line 38: | Line 38: | ||
} | } | ||
</pre> | </pre> | ||
Next add the ItemPostFrame function if you don't already have one, if you do, just copy the content and place it with in your existing | Next add the '''ItemPostFrame''' function if you don't already have one, if you do, just copy the content and place it with in your existing '''ItemPostFrame''' function. | ||
{{note|If you are planning to add a preparing animation, you may uncomment the animation comments and comment out the other m_flDelayedAttackTime}} | {{note|If you are planning to add a preparing animation, you may uncomment the animation comments and comment out the other '''m_flDelayedAttackTime'''}} | ||
<pre> | <pre> | ||
void WeaponClassBlah::ItemPostFrame( void ) | void WeaponClassBlah::ItemPostFrame( void ) | ||
Line 74: | Line 74: | ||
} | } | ||
</pre> | </pre> | ||
{{Note|Remember to replace | {{Note|Remember to replace '''WeaponClassBlah''' to your weapon class otherwise it won't compile.}} |
Revision as of 19:55, 15 January 2009
Overview
If you were wandering how to make one of your weapons have a delayed attack this may help you out. This tutorial will show you how to set up the Delayed Attack function to your weapon whether it's melee or fire arms. This should work with both Multiplayer and Singleplayer mods.
Header
So add these new voids with in your weapon class.

void DelayedAttack( void ); void ItemPostFrame( void ); void PrimaryAttack( void ) { return; }
Now you may want to add these two in your weapon class.
private: bool m_bDelayedAttack; float m_flDelayedAttackTime;
If your Weapon doesn't have a constructor, add this after the DECLARE_CLASS.
WeaponClassBlah();
Weapon Script
Add two more headers within your weapon script if you haven't already.
#include "player.h" #include "basecombatcharacter.h" #include "in_buttons.h"
Add the new variables with in your constructor.
WeaponClassBlah::WeaponClassBlah() { m_bDelayedAttack = false; m_flDelayedAttackTime = 0.0f; }
Next add the ItemPostFrame function if you don't already have one, if you do, just copy the content and place it with in your existing ItemPostFrame function.

void WeaponClassBlah::ItemPostFrame( void ) { CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if ( pOwner == NULL ) return; if ( (pOwner->m_nButtons & IN_ATTACK) && !m_bDelayedAttack) { //Animation Comments //SendWeaponAnim( ACT_VM_HAULBACK ); //m_flDelayedAttackTime = gpGlobals->curtime + SequenceDuration() + 1.0f; m_flDelayedAttackTime = gpGlobals->curtime + 1.0f; m_bDelayedAttack = true; DelayedAttack(); } BaseClass::ItemPostFrame(); }
The rest should be easy to follow, all you have to do is place your primary fire code with in it.

void WeaponClassBlah::DelayedAttack( void ) { if (m_bDelayedAttack && gpGlobals->curtime > m_flDelayedAttackTime) { //Replace this Comment with Weapon Attack Function BaseClass::PrimaryAttack(); m_bDelayedAttack = false; } }
