class Claws extends KFMeleeGun; #exec OBJ LOAD FILE=KillingFloorWeapons.utx #exec OBJ LOAD FILE=KillingFloorHUD.utx //var() Material ZoomMat; //var color ChargeColor; //var() float HealRate; var int jabs; var float jabTimer ; //TODO - This smells, but I'm not sure what to do about it yet // Bigger fish first function bool CanAttack(Actor Other) { local float enemyDist; local Bot B; if(Bot(Instigator.Controller) != none) { B = Bot(Instigator.Controller); enemyDist = VSize(B.Enemy.Location - Instigator.Location); if (enemyDist < 110 ) { return true; } else return false; } return true ; } /* function TryHit(float hitMinTime, float hitMaxTime, int damage, class hitDamageType, vector momentumOffset) { super.TryHit(hitMinTime, hitMaxTime, damage, hitDamageType, momentumOffset) ; //log("Start timer at: "$level.timeSeconds$" min and max hit values: "$THMin$" "$THMax) ; jabTimer = THMin; jabs = 0 ; } simulated function Tick(float dt) { local Actor Other; local Vector HitNormal, StartTrace, EndTrace, hitLocation ; local rotator Aim ; //log("zero") ; if ( (Level.NetMode == NM_Client) || Instigator == None || Instigator.PlayerReplicationInfo == None) return; // Experience related Weapon Skill if (Pawn(Owner).Controller != none) { FireMode[0].FireRate = (FireMode[0].default.FireRate - KFPlayerReplicationInfo(Pawn(Owner).Controller.PlayerReplicationInfo).ExperienceLevel * FireMode[0].default.FireRate* 0.05 ); FireMode[0].FireAnimRate = (FireMode[0].default.FireAnimRate + KFPlayerReplicationInfo(Pawn(Owner).Controller.PlayerReplicationInfo).ExperienceLevel * FireMode[0].default.FireAnimRate* 0.05 ); } if(Instigator.Weapon == self && Instigator.Health < Instigator.HealthMax) { HealAccum += HealRate*dt; if(HealAccum > 1) { Instigator.Health = Min(Instigator.HealthMax, Instigator.Health+HealAccum); HealAccum -= int(HealAccum); } } //log("one") ; if(jabs >= 2) { bCanHit = false ; jabs = 0 ; } if(bCanHit) { //log("two jabs: "$jabs) ; if((jabs == 0) && (jabTimer <= level.TimeSeconds)) { //log("Hit enabled from"$THMin$" to "$THMax) ; btryHit = true ; jabTimer = THMax ; } else if((jabs == 1) && (jabTimer <= level.TimeSeconds)) bTryHit = true ; else bTryHit = false ; if(btryHit) { jabs++ ; //log("TryHit, jab: "$jabs) ; StartTrace = Instigator.Location; Aim = FireMode[0].AdjustAim(StartTrace, FireMode[0].AimError); EndTrace = StartTrace + weaponRange * Vector(Aim); Other = Trace(HitLocation, HitNormal, EndTrace, StartTrace, true); if (((Pawn(Other) != None) || (KActor(Other) != none)) && (Other != Instigator) ) { HitObject = Other; //log("Successful hit: "$other$" at "$level.TimeSeconds$" hitting with "$dmg) ; if((KActor(Other) != none)) HitObject.TakeDamage(dmg, Instigator, HitLocation, (vector(Aim) + momOffset), hitDamType) ; else { //HitObject.TakeDamage(dmg, Instigator, HitLocation, vect(0,0,0), hitDamType) ; HitObject.TakeDamage(dmg, Instigator, HitLocation, (vector(Aim) + momOffset), hitDamType) ; playServerSound() ; } } } } } simulated event RenderOverlays(Canvas Canvas) { local PlayerController PC; PC = PlayerController(Instigator.Controller); if(PC == None) return; if (PC.DesiredFOV == PC.DefaultFOV || (Level.bClassicView && PC.DesiredFOV == 90)) { Super.RenderOverlays(Canvas); } else { //Black-out either side of the main zoom circle. Canvas.Style = ERenderStyle.STY_Normal; Canvas.SetPos(0, 0); Canvas.DrawTile(Texture'KillingFloorHUD.RedEyesSource', (Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8); Canvas.SetPos(Canvas.SizeX, 0); Canvas.DrawTile(Texture'KillingFloorHUD.RedEyesSource', -(Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8); //The view through the scope itself. Canvas.Style = 255; Canvas.SetPos((Canvas.SizeX - Canvas.SizeY) / 2,0); Canvas.DrawTile(ZoomMat, Canvas.SizeY, Canvas.SizeY, 0.0, 0.0, 512, 512); } } function RegenHealthZombie( float dt ) { if (Pawn(Other) != None && Pawn(Other).Health < Pawn(Other).HealthMax*2 ) { Pawn(Other).Health = Min( Pawn(Other).Health+RegenPerSecond, Pawn(Other).HealthMax*2 ); } } */ defaultproperties { weaponRange=55.000000 FireModeClass(0)=Class'KFMod.ClawsFire' FireModeClass(1)=Class'KFMod.NoFire' SelectForce="SwitchToFlakCannon" AIRating=0.450000 CurrentRating=0.250000 bCanThrow=False Description="Bloody and Sharp. Yikes! " EffectOffset=(X=100.000000,Y=32.000000,Z=-20.000000) DisplayFOV=85.000000 Priority=1 HudColor=(G=0) SmallViewOffset=(X=6.000000,Y=12.000000,Z=-50.000000) CenteredOffsetY=-5.000000 CenteredRoll=3000 CenteredYaw=-1500 GroupOffset=2 PickupClass=Class'KFMod.ClawsPickup' PlayerViewOffset=(X=1.000000,Y=9.500000,Z=-36.000000) PlayerViewPivot=(Pitch=5400) BobDamping=7.000000 AttachmentClass=Class'KFMod.ClawsAttachment' IconCoords=(X1=169,Y1=78,X2=244,Y2=124) ItemName="Fists" //Mesh=SkeletalMesh'KFWeaponModels.Claws' }