KieranM17
09-02-2011, 04:37 AM
Hello,
I am currently having a problem modifying the staff from Dungeon Defense in UT3. I'm trying to make it so that the gun fires different projectiles depending on if it is charged or not. I currently have a system that nearly works. At the moment, I can rapid click to fire LinkPlasma or Hold-Click for 1.5seconds (or longer) then release for ShockBall. However, if I don't fire anything for 1.5 seconds, it also fires a ShockBall instead of LinkPlasma.
The part of the code where I think the problem is is here:
event Tick(float DeltaTime)
{
super.Tick(DeltaTime);
if(PendingFire(0) && `TimeSince(LastReleasedTime) > FireInterval[0])
SendToFiringState(0);
}
Currently, I've had to // out the "if(PendingFire(0) && `TimeSince(LastReleasedTime) > FireInterval[0])" as I get and error that says:
Warning/Error Summary
---------------------
c:\program files (x86)\steam\steamapps\common\unreal tournament 3\UTGame\Src\MPHMutator\MPHWeap_BasicGun.uc(54) : Error, Unknown macro 'TimeSince'.
Failure - 1 error(s), 0 warning(s)
Execution of commandlet took: 1.76 seconds
Any Help?
Thanks,
Kieran
PS. Here is the full code for the weapon, Please ignore the sloppyness. Once I get the gun functioning, then I'll do some tidying!:
class MPHWeap_BasicGun extends UTWeapon;
var float FullChargeTime;
var transient float StoredChargePercent;
var transient float LastReleasedTime;
simulated function BeginFire(Byte FireModeNum)
{
//start charge here
super.BeginFire(FireModeNum);
}
simulated function EndFire(Byte FireModeNum)
{
//stop charge here
GotoState('Active');
super.EndFire(FireModeNum);
}
simulated state Active
{
/** Initialize the weapon as being active and ready to go. */
simulated event BeginState(Name PreviousStateName)
{
// Cache a reference to the AI controller
// if (Role == ROLE_Authority)
// {
// CacheAIController();
// }
// Check to see if we need to go down
if( bWeaponPutDown )
{
PutDownWeapon();
}
else if ( !HasAnyAmmo() )
{
WeaponEmpty();
}
//removed automatic firing upon entering active state
}
/** Override BeginFire so that it will enter the firing state right away. */
simulated function BeginFire(byte FireModeNum)
{
if( !bDeleteMe && Instigator != None )
{
Global.BeginFire(FireModeNum);
}
}
event Tick(float DeltaTime)
{
super.Tick(DeltaTime);
/** WuhTuhFuh! if(PendingFire(0) && `TimeSince(LastReleasedTime) > FireInterval[0]) */
SendToFiringState(0);
}
}
/** Magic Staff's in this state while holding down the Fire button, charges up until release */
simulated state WeaponFiring
{
simulated event BeginState( Name PreviousStateName )
{
//`log("Begin Weapon Firing State!");
TimeWeaponFiring( CurrentFireMode );
//initialize our charge effects
StoredChargePercent=0;
/** ChargeEffect.SetScale(MinChargeEffectScale);
ChargeEffect.ActivateSystem();
ChargeLight.SetLightProperties(0);
ChargeLight.SetEnabled(true);
MyAudioComponent1.FadeIn(1,1);
*/ }
simulated function RefireCheckTimer()
{
// if switching to another weapon, abort firing and put down right away
if( bWeaponPutDown )
{
PutDownWeapon();
return;
}
return;
}
event Tick(float DeltaTime)
{
super.Tick(DeltaTime);
//increment our charge value and effects every frame while holding down the fire button
if(StoredChargePercent < 1)
{
StoredChargePercent = FMin(StoredChargePercent + (DeltaTime/FullChargeTime),1);
// ChargeEffect.SetScale(MinChargeEffectScale + (MaxChargeEffectScale-MinChargeEffectScale)*StoredChargePercent);
// ChargeLight.SetLightProperties(ChargeLightOriginal Brightness*StoredChargePercent);
// if(StoredChargePercent > 0.1 && !DunDefPlayer(Instigator).IsPlayingCustomAnim(DunD efPlayer(Instigator).MinStaffChargeAnimation))
// DunDefPlayer(Instigator).PlayCustomAnimUpperBody(D unDefPlayer(Instigator).MinStaffChargeAnimation,0. 3,true);
// if(StoredChargePercent == 1)
// ReachedFullCharge();
}
}
/** Activates full-charge effects */
/** function ReachedFullCharge()
{
MyAudioComponent2.FadeIn(1,1);
MyAudioComponent1.FadeOut(1,0);
FullyChargedEffect.ActivateSystem();
DunDefPlayer(Instigator).PlayCustomAnimUpperBody(D unDefPlayer(Instigator).MaxStaffChargeAnimation,0. 33,true);
DunDefPlayer(Instigator).StopCustomAnim(0.9,DunDef Player(Instigator).MinStaffChargeAnimation);
}
*/
simulated function class<Projectile> GetProjectileClass()
{
if (StoredChargePercent == 1)
{
return WeaponProjectiles[1];
}
else
{
return WeaponProjectiles[0];
}
}
/** Released weapon fire */
simulated event EndState( Name NextStateName )
{ //shoot it!
GetProjectileClass();
FireAmmunition();
//Reset Properties
StoredChargePercent=0;
LastReleasedTime=WorldInfo.TimeSeconds;
//stop all the charge effects
// if(MyAudioComponent1.IsPlaying())
// MyAudioComponent1.FadeOut(0.5,0);
//
// if(MyAudioComponent2.IsPlaying())
// MyAudioComponent2.FadeOut(0.5,0);
//
// ChargeEffect.DeactivateSystem();
// ChargeLight.SetEnabled(false);
// FullyChargedEffect.DeactivateSystem();
// DunDefPlayer(Instigator).StopCustomAnim(0.2,DunDef Player(Instigator).MinStaffChargeAnimation);
// DunDefPlayer(Instigator).StopCustomAnim(0.2,DunDef Player(Instigator).MaxStaffChargeAnimation);
super.EndState(NextStateName);
}
}
simulated function bool ShouldRefire()
{
return false;
}
defaultproperties
{
WeaponColor=(R=255,G=255,B=0,A=255)
FireInterval(0)=+0.25
FireInterval(1)=+0.75
PlayerViewOffset=(X=16.0,Y=-18,Z=-18.0)
Begin Object class=AnimNodeSequence Name=MeshSequenceA
bCauseActorAnimEnd=true
End Object
// Weapon SkeletalMesh
Begin Object Name=FirstPersonMesh
SkeletalMesh=SkeletalMesh'WP_LinkGun.Mesh.SK_WP_Li nkgun_1P'
AnimSets(0)=AnimSet'WP_LinkGun.Anims.K_WP_LinkGun_ 1P_Base'
Animations=MeshSequenceA
Scale=0.9
FOV=60.0
End Object
AttachmentClass=class'UTAttachment_Linkgun'
// Pickup staticmesh
Begin Object Name=PickupMesh
SkeletalMesh=SkeletalMesh'WP_LinkGun.Mesh.SK_WP_Li nkGun_3P'
End Object
FireOffset=(X=12,Y=10,Z=-10)
WeaponFireTypes(0)=EWFT_Projectile
WeaponProjectiles(0)=class'UTProj_LinkPlasma' // UTProj_LinkPowerPlasma if linked (see GetProjectileClass() )
WeaponFireTypes(1)=EWFT_Projectile
WeaponProjectiles(1)=class'UTProj_ShockBall' // UTProj_LinkPowerPlasma if linked (see GetProjectileClass() )
WeaponEquipSnd=SoundCue'A_Weapon_Link.Cue.A_Weapon _Link_RaiseCue'
WeaponPutDownSnd=SoundCue'A_Weapon_Link.Cue.A_Weap on_Link_LowerCue'
WeaponFireSnd(0)=SoundCue'A_Weapon_Link.Cue.A_Weap on_Link_FireCue'
WeaponFireSnd(1)=SoundCue'A_Weapon_Link.Cue.A_Weap on_Link_FireCue'
MaxDesireability=0.7
AIRating=+0.71
CurrentRating=+0.71
bFastRepeater=true
bInstantHit=false
bSplashJump=false
bRecommendSplashDamage=false
bSniping=false
ShouldFireOnRelease(0)=0
ShouldFireOnRelease(1)=0
InventoryGroup=5
GroupWeight=0.5
WeaponRange=900
PickupSound=SoundCue'A_Pickups.Weapons.Cue.A_Picku p_Weapons_Link_Cue'
AmmoCount=50
LockerAmmoCount=100
MaxAmmoCount=220
EffectSockets(0)=MuzzleFlashSocket
EffectSockets(1)=MuzzleFlashSocket
MuzzleFlashSocket=MuzzleFlashSocket
MuzzleFlashPSCTemplate=ParticleSystem'WP_LinkGun.E ffects.P_FX_LinkGun_MF_Primary'
MuzzleFlashAltPSCTemplate=ParticleSystem'WP_LinkGu n.Effects.P_FX_LinkGun_MF_Primary'
bMuzzleFlashPSCLoops=true
MuzzleFlashLightClass=class'UTGame.UTLinkGunMuzzle FlashLight'
bShowAltMuzzlePSCWhenWeaponHidden=TRUE
MuzzleFlashColor=(R=120,G=255,B=120,A=255)
MuzzleFlashDuration=0.33;
IconX=412
IconY=82
IconWidth=40
IconHeight=36
CrossHairCoordinates=(U=384,V=0,UL=64,VL=64)
LockerRotation=(pitch=0,yaw=0,roll=-16384)
IconCoordinates=(U=453,V=467,UL=147,VL=41)
QuickPickGroup=5
QuickPickWeight=0.8
FullChargeTime=1.5
}
I am currently having a problem modifying the staff from Dungeon Defense in UT3. I'm trying to make it so that the gun fires different projectiles depending on if it is charged or not. I currently have a system that nearly works. At the moment, I can rapid click to fire LinkPlasma or Hold-Click for 1.5seconds (or longer) then release for ShockBall. However, if I don't fire anything for 1.5 seconds, it also fires a ShockBall instead of LinkPlasma.
The part of the code where I think the problem is is here:
event Tick(float DeltaTime)
{
super.Tick(DeltaTime);
if(PendingFire(0) && `TimeSince(LastReleasedTime) > FireInterval[0])
SendToFiringState(0);
}
Currently, I've had to // out the "if(PendingFire(0) && `TimeSince(LastReleasedTime) > FireInterval[0])" as I get and error that says:
Warning/Error Summary
---------------------
c:\program files (x86)\steam\steamapps\common\unreal tournament 3\UTGame\Src\MPHMutator\MPHWeap_BasicGun.uc(54) : Error, Unknown macro 'TimeSince'.
Failure - 1 error(s), 0 warning(s)
Execution of commandlet took: 1.76 seconds
Any Help?
Thanks,
Kieran
PS. Here is the full code for the weapon, Please ignore the sloppyness. Once I get the gun functioning, then I'll do some tidying!:
class MPHWeap_BasicGun extends UTWeapon;
var float FullChargeTime;
var transient float StoredChargePercent;
var transient float LastReleasedTime;
simulated function BeginFire(Byte FireModeNum)
{
//start charge here
super.BeginFire(FireModeNum);
}
simulated function EndFire(Byte FireModeNum)
{
//stop charge here
GotoState('Active');
super.EndFire(FireModeNum);
}
simulated state Active
{
/** Initialize the weapon as being active and ready to go. */
simulated event BeginState(Name PreviousStateName)
{
// Cache a reference to the AI controller
// if (Role == ROLE_Authority)
// {
// CacheAIController();
// }
// Check to see if we need to go down
if( bWeaponPutDown )
{
PutDownWeapon();
}
else if ( !HasAnyAmmo() )
{
WeaponEmpty();
}
//removed automatic firing upon entering active state
}
/** Override BeginFire so that it will enter the firing state right away. */
simulated function BeginFire(byte FireModeNum)
{
if( !bDeleteMe && Instigator != None )
{
Global.BeginFire(FireModeNum);
}
}
event Tick(float DeltaTime)
{
super.Tick(DeltaTime);
/** WuhTuhFuh! if(PendingFire(0) && `TimeSince(LastReleasedTime) > FireInterval[0]) */
SendToFiringState(0);
}
}
/** Magic Staff's in this state while holding down the Fire button, charges up until release */
simulated state WeaponFiring
{
simulated event BeginState( Name PreviousStateName )
{
//`log("Begin Weapon Firing State!");
TimeWeaponFiring( CurrentFireMode );
//initialize our charge effects
StoredChargePercent=0;
/** ChargeEffect.SetScale(MinChargeEffectScale);
ChargeEffect.ActivateSystem();
ChargeLight.SetLightProperties(0);
ChargeLight.SetEnabled(true);
MyAudioComponent1.FadeIn(1,1);
*/ }
simulated function RefireCheckTimer()
{
// if switching to another weapon, abort firing and put down right away
if( bWeaponPutDown )
{
PutDownWeapon();
return;
}
return;
}
event Tick(float DeltaTime)
{
super.Tick(DeltaTime);
//increment our charge value and effects every frame while holding down the fire button
if(StoredChargePercent < 1)
{
StoredChargePercent = FMin(StoredChargePercent + (DeltaTime/FullChargeTime),1);
// ChargeEffect.SetScale(MinChargeEffectScale + (MaxChargeEffectScale-MinChargeEffectScale)*StoredChargePercent);
// ChargeLight.SetLightProperties(ChargeLightOriginal Brightness*StoredChargePercent);
// if(StoredChargePercent > 0.1 && !DunDefPlayer(Instigator).IsPlayingCustomAnim(DunD efPlayer(Instigator).MinStaffChargeAnimation))
// DunDefPlayer(Instigator).PlayCustomAnimUpperBody(D unDefPlayer(Instigator).MinStaffChargeAnimation,0. 3,true);
// if(StoredChargePercent == 1)
// ReachedFullCharge();
}
}
/** Activates full-charge effects */
/** function ReachedFullCharge()
{
MyAudioComponent2.FadeIn(1,1);
MyAudioComponent1.FadeOut(1,0);
FullyChargedEffect.ActivateSystem();
DunDefPlayer(Instigator).PlayCustomAnimUpperBody(D unDefPlayer(Instigator).MaxStaffChargeAnimation,0. 33,true);
DunDefPlayer(Instigator).StopCustomAnim(0.9,DunDef Player(Instigator).MinStaffChargeAnimation);
}
*/
simulated function class<Projectile> GetProjectileClass()
{
if (StoredChargePercent == 1)
{
return WeaponProjectiles[1];
}
else
{
return WeaponProjectiles[0];
}
}
/** Released weapon fire */
simulated event EndState( Name NextStateName )
{ //shoot it!
GetProjectileClass();
FireAmmunition();
//Reset Properties
StoredChargePercent=0;
LastReleasedTime=WorldInfo.TimeSeconds;
//stop all the charge effects
// if(MyAudioComponent1.IsPlaying())
// MyAudioComponent1.FadeOut(0.5,0);
//
// if(MyAudioComponent2.IsPlaying())
// MyAudioComponent2.FadeOut(0.5,0);
//
// ChargeEffect.DeactivateSystem();
// ChargeLight.SetEnabled(false);
// FullyChargedEffect.DeactivateSystem();
// DunDefPlayer(Instigator).StopCustomAnim(0.2,DunDef Player(Instigator).MinStaffChargeAnimation);
// DunDefPlayer(Instigator).StopCustomAnim(0.2,DunDef Player(Instigator).MaxStaffChargeAnimation);
super.EndState(NextStateName);
}
}
simulated function bool ShouldRefire()
{
return false;
}
defaultproperties
{
WeaponColor=(R=255,G=255,B=0,A=255)
FireInterval(0)=+0.25
FireInterval(1)=+0.75
PlayerViewOffset=(X=16.0,Y=-18,Z=-18.0)
Begin Object class=AnimNodeSequence Name=MeshSequenceA
bCauseActorAnimEnd=true
End Object
// Weapon SkeletalMesh
Begin Object Name=FirstPersonMesh
SkeletalMesh=SkeletalMesh'WP_LinkGun.Mesh.SK_WP_Li nkgun_1P'
AnimSets(0)=AnimSet'WP_LinkGun.Anims.K_WP_LinkGun_ 1P_Base'
Animations=MeshSequenceA
Scale=0.9
FOV=60.0
End Object
AttachmentClass=class'UTAttachment_Linkgun'
// Pickup staticmesh
Begin Object Name=PickupMesh
SkeletalMesh=SkeletalMesh'WP_LinkGun.Mesh.SK_WP_Li nkGun_3P'
End Object
FireOffset=(X=12,Y=10,Z=-10)
WeaponFireTypes(0)=EWFT_Projectile
WeaponProjectiles(0)=class'UTProj_LinkPlasma' // UTProj_LinkPowerPlasma if linked (see GetProjectileClass() )
WeaponFireTypes(1)=EWFT_Projectile
WeaponProjectiles(1)=class'UTProj_ShockBall' // UTProj_LinkPowerPlasma if linked (see GetProjectileClass() )
WeaponEquipSnd=SoundCue'A_Weapon_Link.Cue.A_Weapon _Link_RaiseCue'
WeaponPutDownSnd=SoundCue'A_Weapon_Link.Cue.A_Weap on_Link_LowerCue'
WeaponFireSnd(0)=SoundCue'A_Weapon_Link.Cue.A_Weap on_Link_FireCue'
WeaponFireSnd(1)=SoundCue'A_Weapon_Link.Cue.A_Weap on_Link_FireCue'
MaxDesireability=0.7
AIRating=+0.71
CurrentRating=+0.71
bFastRepeater=true
bInstantHit=false
bSplashJump=false
bRecommendSplashDamage=false
bSniping=false
ShouldFireOnRelease(0)=0
ShouldFireOnRelease(1)=0
InventoryGroup=5
GroupWeight=0.5
WeaponRange=900
PickupSound=SoundCue'A_Pickups.Weapons.Cue.A_Picku p_Weapons_Link_Cue'
AmmoCount=50
LockerAmmoCount=100
MaxAmmoCount=220
EffectSockets(0)=MuzzleFlashSocket
EffectSockets(1)=MuzzleFlashSocket
MuzzleFlashSocket=MuzzleFlashSocket
MuzzleFlashPSCTemplate=ParticleSystem'WP_LinkGun.E ffects.P_FX_LinkGun_MF_Primary'
MuzzleFlashAltPSCTemplate=ParticleSystem'WP_LinkGu n.Effects.P_FX_LinkGun_MF_Primary'
bMuzzleFlashPSCLoops=true
MuzzleFlashLightClass=class'UTGame.UTLinkGunMuzzle FlashLight'
bShowAltMuzzlePSCWhenWeaponHidden=TRUE
MuzzleFlashColor=(R=120,G=255,B=120,A=255)
MuzzleFlashDuration=0.33;
IconX=412
IconY=82
IconWidth=40
IconHeight=36
CrossHairCoordinates=(U=384,V=0,UL=64,VL=64)
LockerRotation=(pitch=0,yaw=0,roll=-16384)
IconCoordinates=(U=453,V=467,UL=147,VL=41)
QuickPickGroup=5
QuickPickWeight=0.8
FullChargeTime=1.5
}