The three virtues of a programmer: Laziness, Impatience, and Hubris. – Larry Wall
UE2:ReloadableWeaponBase
Introduction
This is a very rough version of a reloadable weapon base class. It is not designed with replication (and thus online play) in mind and it is currently unknown whether it will work properly in an online modification as is. If you need reloadable weapons for a single player modification, then this could be what you're looking for. Again, it is merely a skeleton and has no animation support and will only work with the primary fire mode (FireMode[0]). To use this class, you will need to not only create it/compile it, but you will need to make a sub-class of it, where your sub-class is the actual weapon you will use in-game.
Properties
Visible
- bool bReloading
- True if the weapon has started reloading
- int iReloadWait
- Time interval between reloading a bullet. Set only in your sub-class.
- int iTimeToReload
- Set internally. Do not play around with it.
- bool bClipReload
- Will force the weapon's reloading to behave more like an assault rifle, rather than a shot gun (per clips versus per bullet/shell).
- int iNumberOfClips
- Number of clips the weapon has. Used only if bClipReload is true. Set only in your sub-class.
- bool bSingleReload
- Will force the weapon's reloading to behave more like a shotgun and reload per bullet/shell.
- int iNumberOfBullets
- Number of bullets the weapon has. Set only in your sub-class.
Methods
- (exec) ReloadMe()
- Reloads the weapons ammo.
- Timer()
- Controls the reloading system.
Source Code
class ReloadableWeaponsBase extends Weapon; /* Note: The Reloading features of this custom class will only affect FireMode(0) or Primary Fire As most weapons will only have one fire that will use ammo */ //TODO: ADD DISABLING OF THE ABILITY TO FIRE WHEN RELOADING //TODO: ADD ANIMATION SUPPORT //TODO: ADD SUPPORT BOOLS FOR MORE FIREMODES //New Reloadable Weapon System //Basic Reload Vars var bool bReloading; //True if the weapon has commenced reloading var int iReloadWait; //How much time to wait before each reload is done? SET THIS ONLY IN YOUR CUSTOM WEAPON CLASS var int iTimeToReload; //Internally Set... IGNORE //Clips Reload Vars var bool bClipReload; //Set to true in weapon class if you want the gun to reload like an assault rifle var int iNumberOfClips; //How many clips does this gun have? SET IN WEAPON CLASS //Single Reload Vars var bool bSingleReload; //Set to true in weapon class if you want the gun to reload like a shotgun var int iNumberOfBullets; //How many bullets does this gun have left? SET IN WEAPON CLASS exec function ReloadMe() { iTimeToReload=iReloadWait; //reset the amount of time to wait before you have completely reloaded bReloading=True; //reloading has commenced SetTimer(1.0, True); } function Timer() { Super.Timer(); if(bClipReload) { if(bReloading) //Reloading { if(iTimeToReload != 0) iTimeToReload--; //decrement the wait time if(iTimeToReload == 0) //when iTimeToReload is 0, reload the weapon as long as... { if(iNumberOfClips != 0) //You still have clips left { if ( AmmoClass[0] != None ) AmmoCharge[0] = MaxAmmo(0); //max out the ammo of your primary fire iNumberOfClips--; //Decrement the number of clips we have as we used one up! } bReloading=False; //No longer reloading } } } if(bSingleReload) { if(bReloading) //Reloading { if(iTimeToReload != 0) iTimeToReload--; //decrement time to reload if(iTimeToReload == 0) //if time to reload is 0 (you don't have to wait anymore) { if(iNumberOfBullets != 0) //and if you still have bullets left { AddAmmo(1,0); //give gun 1 ammo and... iNumberOfBullets--; //take away one bullet from the belt } } if(AmmoMaxed(0)) //if you can't put anymore more bullets in... stop reloading { iTimeToReload = iReloadWait; bReloading=False; } } } }
Notes
To reload your weapon, you will have to call 'reloadme' from the console. For gametypes and mods, you should make a custom bind to call this function.