161 lines
4.8 KiB
Ucode
161 lines
4.8 KiB
Ucode
class NiceHuskGunFire extends ScrnHuskGunFire;
|
|
/*
|
|
var int AmmoInCharge; //current charged amount var() int MaxChargeAmmo; //maximum charge
|
|
|
|
function Timer()
|
|
{
|
|
//local PlayerController Player;
|
|
//consume ammo while charging
|
|
if ( HoldTime > 0.0 && !bNowWaiting && AmmoInCharge < MaxChargeAmmo && Weapon.AmmoAmount(ThisModeNum) > 0 ) {
|
|
Charge();
|
|
// if (AmmoInCharge == MaxChargeAmmo) {
|
|
// Player = Level.GetLocalPlayerController();
|
|
// if (Player != none)
|
|
// Player.ReceiveLocalizedMessage(class'ScrnPlayerMessage',0);
|
|
// }
|
|
}
|
|
super.Timer();
|
|
}
|
|
function Charge()
|
|
{
|
|
local int AmmoShouldConsumed;
|
|
if( HoldTime < MaxChargeTime)
|
|
AmmoShouldConsumed = clamp(round(MaxChargeAmmo*HoldTime/MaxChargeTime), 1, MaxChargeAmmo);
|
|
else
|
|
AmmoShouldConsumed = MaxChargeAmmo;// full charge
|
|
if (AmmoShouldConsumed != AmmoInCharge) {
|
|
if (AmmoShouldConsumed - AmmoInCharge > Weapon.AmmoAmount(ThisModeNum))
|
|
AmmoShouldConsumed = Weapon.AmmoAmount(ThisModeNum) + AmmoInCharge;
|
|
Weapon.ConsumeAmmo(ThisModeNum, AmmoShouldConsumed - AmmoInCharge);
|
|
AmmoInCharge = AmmoShouldConsumed;
|
|
ScrnHuskGun(Weapon).ChargeAmount = GetChargeAmount();
|
|
}
|
|
}
|
|
function float GetChargeAmount()
|
|
{
|
|
return float(AmmoInCharge) / float(MaxChargeAmmo);
|
|
}
|
|
simulated function bool AllowFire()
|
|
{
|
|
return (Weapon.AmmoAmount(ThisModeNum) >= AmmoPerFire);
|
|
}
|
|
*/
|
|
//overrided to restore old damage radius
|
|
//(c) PooSH
|
|
function PostSpawnProjectile(Projectile P)
|
|
{
|
|
local HuskGunProjectile HGP;
|
|
super(KFShotgunFire).PostSpawnProjectile(P);
|
|
HGP = HuskGunProjectile(p);
|
|
if ( HGP != none ) {
|
|
if( AmmoInCharge < MaxChargeAmmo )
|
|
{
|
|
HGP.ImpactDamage *= AmmoInCharge;
|
|
HGP.Damage *= 1.0 + GetChargeAmount(); // up to 2x damage
|
|
HGP.DamageRadius *= 1.0 + 2 * GetChargeAmount();// up 2x the damage radius
|
|
}
|
|
else
|
|
{
|
|
HGP.ImpactDamage *= MaxChargeAmmo; //50*10 = 500
|
|
HGP.Damage *= 2.0; // up from 2x
|
|
HGP.DamageRadius *= 3.0; // down from x3
|
|
}
|
|
AmmoInCharge = 0; //reset charge after spawning a projectile
|
|
ScrnHuskGun(Weapon).ChargeAmount = 0;
|
|
}
|
|
}
|
|
/*
|
|
//copy pasted and cutted out ammo consuming, because we did it in time
|
|
function ModeDoFire()
|
|
{
|
|
local float Rec;
|
|
if (!AllowFire() && HoldTime ~= 0)
|
|
return;
|
|
Spread = Default.Spread;
|
|
Rec = 1;
|
|
|
|
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
|
{
|
|
Spread *= KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.ModifyRecoilSpread(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self, Rec);
|
|
}
|
|
if( !bFiringDoesntAffectMovement )
|
|
{
|
|
if (FireRate > 0.25)
|
|
{
|
|
Instigator.Velocity.x *= 0.1;
|
|
Instigator.Velocity.y *= 0.1;
|
|
}
|
|
else
|
|
{
|
|
Instigator.Velocity.x *= 0.5;
|
|
Instigator.Velocity.y *= 0.5;
|
|
}
|
|
}
|
|
if (!AllowFire() && HoldTime ~= 0)
|
|
return;
|
|
if (MaxHoldTime > 0.0)
|
|
HoldTime = FMin(HoldTime, MaxHoldTime);
|
|
// server
|
|
if (Weapon.Role == ROLE_Authority)
|
|
{
|
|
Charge();
|
|
|
|
DoFireEffect();
|
|
HoldTime = 0; // if bot decides to stop firing, HoldTime must be reset first
|
|
if ( (Instigator == none) || (Instigator.Controller == none) )
|
|
return;
|
|
|
|
if ( AIController(Instigator.Controller) != none )
|
|
AIController(Instigator.Controller).WeaponFireAgain(BotRefireRate, true);
|
|
|
|
Instigator.DeactivateSpawnProtection();
|
|
}
|
|
// client
|
|
if (Instigator.IsLocallyControlled())
|
|
{
|
|
ShakeView();
|
|
PlayFiring();
|
|
FlashMuzzleFlash();
|
|
StartMuzzleSmoke();
|
|
}
|
|
else // server
|
|
{
|
|
ServerPlayFiring();
|
|
}
|
|
Weapon.IncrementFlashCount(ThisModeNum);
|
|
// set the next firing time. must be careful here so client and server do not get out of sync
|
|
if (bFireOnRelease)
|
|
{
|
|
if (bIsFiring)
|
|
NextFireTime += MaxHoldTime + FireRate;
|
|
else
|
|
NextFireTime = Level.TimeSeconds + FireRate;
|
|
}
|
|
else
|
|
{
|
|
NextFireTime += FireRate;
|
|
NextFireTime = FMax(NextFireTime, Level.TimeSeconds);
|
|
}
|
|
Load = AmmoPerFire;
|
|
HoldTime = 0;
|
|
AmmoInCharge = 0;
|
|
if (Instigator.PendingWeapon != Weapon && Instigator.PendingWeapon != none)
|
|
{
|
|
bIsFiring = false;
|
|
Weapon.PutDown();
|
|
}
|
|
// client
|
|
if (Instigator.IsLocallyControlled())
|
|
{
|
|
HandleRecoil(Rec);
|
|
}
|
|
}
|
|
*/
|
|
defaultproperties
|
|
{
|
|
WeakProjectileClass=class'NiceHuskGunProjectile_Weak'
|
|
StrongProjectileClass=class'NiceHuskGunProjectile_Strong'
|
|
AmmoClass=class'NiceHuskGunAmmo'
|
|
ProjectileClass=class'NiceHuskGunProjectile'
|
|
}
|