TenaciousMB
12-02-2011, 07:56 AM
Hi,
I have made a few few threads for help with getting a working custom character into my uni project. I have a week left and for the life of me, I just can't figure out what to do to get the attack animation triggering when attacking.
Please, please, please can someone help me out :/
I just want to outline that I am not a programmer and have been forced into the deepend of this project due to a group member leaving...
Sorry, as I know it is frustrating when people come on here with no previous experience. I have recieved some help from people already but just cant find an answer...
Badguy3Controller:
class Badguy3Controller extends AIController;
var Badguy3 MyBadguy3Pawn;
var Pawn thePlayer;
var Actor theNoiseMaker;
var Vector noisePos;
var () array<NavigationPoint> MyNavigationPoints;
var NavigationPoint MyNextNavigationPoint;
var int actual_node;
var int last_node;
var float perceptionDistance;
var float hearingDistance;
var float attackDistance;
var int attackDamage;
var float distanceToPlayer;
var float distanceToTargetNodeNearPlayer;
var Name AnimSetName;
var bool AttAcking;
var bool followingPath;
var bool noiseHeard;
var Float IdleInterval;
defaultproperties
{
attackDistance = 50
attackDamage = 10
perceptionDistance = 1000
AnimSetName ="ATTACK"
actual_node = 0
last_node = 0
followingPath = true
IdleInterval = 2.5f
}
function SetPawn(Badguy3 NewPawn)
{
MyBadguy3Pawn = NewPawn;
Possess(MyBadguy3Pawn, false);
MyNavigationPoints = MyBadguy3Pawn.MyNavigationPoints;
}
function Possess(Pawn aPawn, bool bVehicleTransition)
{
if (aPawn.bDeleteMe)
{
`Warn(self @ GetHumanReadableName() @ "attempted to possess destroyed Pawn" @ aPawn);
ScriptTrace();
GotoState('Dead');
}
else
{
Super.Possess(aPawn, bVehicleTransition);
Pawn.SetMovementPhysics();
if (Pawn.Physics == PHYS_Walking)
{
Pawn.SetPhysics(PHYS_Falling);
}
}
}
state Idle
{
event SeePlayer(Pawn SeenPlayer)
{
thePlayer = SeenPlayer;
distanceToPlayer = VSize(thePlayer.Location - Pawn.Location);
if (distanceToPlayer < perceptionDistance)
{
Worldinfo.Game.Broadcast(self, "Help, I have the plague!");
GotoState('Chaseplayer');
}
}
Begin:
Worldinfo.Game.Broadcast(self, "!!!!!!! idle !!!!!!!!");
Pawn.Acceleration = vect(0,0,0);
MyBadguy3Pawn.SetAttacking(false);
Sleep(IdleInterval);
Worldinfo.Game.Broadcast(self, "!!!!!!! Going to FollowPath !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
followingPath = true;
actual_node = last_node;
GotoState('FollowPath');
}
state Chaseplayer
{
Begin:
MyBadguy3Pawn.SetAttacking(false);
Pawn.Acceleration = vect(0,0,1);
while (Pawn != none && thePlayer.Health > 0)
{
Worldinfo.Game.Broadcast(self, "I can see you!!");
if (ActorReachable(thePlayer))
{
distanceToPlayer = VSize(thePlayer.Location - Pawn.Location);
if (distanceToPlayer < attackDistance)
{
GotoState('Attack');
break;
}
else //if(distanceToPlayer < 300)
{
MoveToward(thePlayer, thePlayer, 20.0f);
if(Pawn.ReachedDestination(thePlayer))
{
GotoState('Attack');
break;
}
}
}
else
{
MoveTarget = FindPathToward(thePlayer,,perceptionDistance + (perceptionDistance/2));
if (MoveTarget != none)
{
//Worldinfo.Game.Broadcast(self, "Moving toward Player");
distanceToPlayer = VSize(MoveTarget.Location - Pawn.Location);
if (distanceToPlayer < 100)
MoveToward(MoveTarget, thePlayer, 20.0f);
else
MoveToward(MoveTarget, MoveTarget, 20.0f);
//MoveToward(MoveTarget, MoveTarget);
}
else
{
GotoState('Idle');
break;
}
}
}
}
state Attack
{
Begin:
Pawn.Acceleration = vect(0,0,0);
MyBadguy3Pawn.SetAttacking(true);
while(true && thePlayer.Health > 0)
{
Worldinfo.Game.Broadcast(self, "Attacking Player");
thePlayer.TakeDamage(10, self, Location, vect(0,0,0), class'UTDmgType_Burning');
distanceToPlayer = VSize(thePlayer.Location - Pawn.Location);
if (distanceToPlayer > attackDistance * 2)
{
MyBadguy3Pawn.SetAttacking(false);
GotoState('Chaseplayer');
break;
}
Sleep(1);
}
MyBadguy3Pawn.SetAttacking(false);
}
auto state FollowPath
{
event SeePlayer(Pawn SeenPlayer)
{
thePlayer = SeenPlayer;
distanceToPlayer = VSize(thePlayer.Location - Pawn.Location);
if (distanceToPlayer < perceptionDistance)
{
//Worldinfo.Game.Broadcast(self, "I can see you!!");
noiseHeard = true;
followingPath = false;
GotoState('Chaseplayer');
}
}
Begin:
while(followingPath)
{
MoveTarget = MyNavigationPoints[actual_node];
if(Pawn.ReachedDestination(MoveTarget))
{
WorldInfo.Game.Broadcast(self, "Oooohhh a node!");
actual_node++;
if (actual_node >= MyNavigationPoints.Length)
{
actual_node = 0;
}
last_node = actual_node;
MoveTarget = MyNavigationPoints[actual_node];
}
if (ActorReachable(MoveTarget))
{
//distanceToPlayer = VSize(MoveTarget.Location - Pawn.Location);
//if (distanceToPlayer < perceptionDistance / 3)
// MoveToward(MoveTarget, MyNavigationPoints[actual_node + 1]);
//else
MoveToward(MoveTarget, MoveTarget);
}
else
{
MoveTarget = FindPathToward(MyNavigationPoints[actual_node]);
if (MoveTarget != none)
{
//SetRotation(RInterpTo(Rotation,Rotator(MoveTarget. Location),Delta,90000,true));
MoveToward(MoveTarget, MoveTarget);
}
}
Sleep(1);
}
}
BadGuy3:
class Badguy3 extends UTPawn
placeable;
// members for the custom mesh
var SkeletalMesh defaultMesh;
//var MaterialInterface defaultMaterial0;
var AnimTree defaultAnimTree;
var array<AnimSet> defaultAnimSet;
var AnimNodeSequence defaultAnimSeq;
var PhysicsAsset defaultPhysicsAsset;
var Pawn P; // variable to hold the pawn we bump into
var BadGuyZombieBot MyController;
var float Speed;
var float hearingDistance;
var float perceptionDistance;
var SkeletalMeshComponent MyMesh;
var bool bplayed;
var Name AnimSetName;
var AnimNodeSequence MyAnimPlayControl;
var bool AttAcking;
var () array<NavigationPoint> MyNavigationPoints;
simulated event Bump( Actor Other, PrimitiveComponent OtherComp, Vector HitNormal )
{
`Log("Bump");
Super.Bump( Other, OtherComp, HitNormal );
if ( (Other == None) || Other.bStatic )
return;
P = Pawn(Other); //the pawn we might have bumped into
if ( P != None) //if we hit a pawn
{
if (P.Health >0) //as long as pawns health is more than 1
{
P.Health --; //take away the pawns health
}
}
if (P.Health <1) //as long as pawns health is more than 1
{
P.Destroy(); //kills the player
}
}
simulated function PostBeginPlay()
{
super.PostBeginPlay();
//if (Controller == none)
// SpawnDefaultController();
SetPhysics(PHYS_Walking);
if (MyController == none)
{
MyController = Spawn(class'BadGuyZombieBot', self);
//MyController.SetPawn(self);
}
}
function SetAttacking(bool atacar)
{
AttAcking = atacar;
}
simulated function SetCharacterClassFromInfo(class<UTFamilyInfo> Info)
{
Mesh.SetSkeletalMesh(defaultMesh);
//Mesh.SetMaterial(0,defaultMaterial0);
Mesh.SetPhysicsAsset(defaultPhysicsAsset);
Mesh.AnimSets=defaultAnimSet;
Mesh.SetAnimTreeTemplate(defaultAnimTree);
}
defaultproperties
{
Speed=80
GroundSpeed=80
perceptionDistance =50
hearingDistance =50
AnimSetName="ATTACK"
AttAcking=true
defaultMesh=SkeletalMesh'PLG_ENEMIES.PLG_ENIM_INFM ALE'
defaultAnimTree=AnimTree'PLG_ENEMIES.PLG_ENIM_INFM ALE_ANIMTREE'
defaultAnimSet(0)=AnimSet'PLG_ENEMIES.PLG_INFMALE_ WALK'
//defaultPhysicsAsset=PhysicsAsset'Enemies.scribble_ meshh_Physics'
SoundGroupClass=class'UTPawnSoundGroup_Liandri'
Begin Object Name=WPawnSkeletalMeshComponent
Scale=1
SkeletalMesh=SkeletalMesh'PLG_ENEMIES.PLG_ENIM_INF MALE'
AnimSets(0)=AnimSet'PLG_ENEMIES.PLG_INFMALE_WALK'
AnimTreeTemplate=AnimTree'PLG_ENEMIES.PLG_ENIM_INF MALE_ANIMTREE'
End Object
}
Thanks in advance...
I have made a few few threads for help with getting a working custom character into my uni project. I have a week left and for the life of me, I just can't figure out what to do to get the attack animation triggering when attacking.
Please, please, please can someone help me out :/
I just want to outline that I am not a programmer and have been forced into the deepend of this project due to a group member leaving...
Sorry, as I know it is frustrating when people come on here with no previous experience. I have recieved some help from people already but just cant find an answer...
Badguy3Controller:
class Badguy3Controller extends AIController;
var Badguy3 MyBadguy3Pawn;
var Pawn thePlayer;
var Actor theNoiseMaker;
var Vector noisePos;
var () array<NavigationPoint> MyNavigationPoints;
var NavigationPoint MyNextNavigationPoint;
var int actual_node;
var int last_node;
var float perceptionDistance;
var float hearingDistance;
var float attackDistance;
var int attackDamage;
var float distanceToPlayer;
var float distanceToTargetNodeNearPlayer;
var Name AnimSetName;
var bool AttAcking;
var bool followingPath;
var bool noiseHeard;
var Float IdleInterval;
defaultproperties
{
attackDistance = 50
attackDamage = 10
perceptionDistance = 1000
AnimSetName ="ATTACK"
actual_node = 0
last_node = 0
followingPath = true
IdleInterval = 2.5f
}
function SetPawn(Badguy3 NewPawn)
{
MyBadguy3Pawn = NewPawn;
Possess(MyBadguy3Pawn, false);
MyNavigationPoints = MyBadguy3Pawn.MyNavigationPoints;
}
function Possess(Pawn aPawn, bool bVehicleTransition)
{
if (aPawn.bDeleteMe)
{
`Warn(self @ GetHumanReadableName() @ "attempted to possess destroyed Pawn" @ aPawn);
ScriptTrace();
GotoState('Dead');
}
else
{
Super.Possess(aPawn, bVehicleTransition);
Pawn.SetMovementPhysics();
if (Pawn.Physics == PHYS_Walking)
{
Pawn.SetPhysics(PHYS_Falling);
}
}
}
state Idle
{
event SeePlayer(Pawn SeenPlayer)
{
thePlayer = SeenPlayer;
distanceToPlayer = VSize(thePlayer.Location - Pawn.Location);
if (distanceToPlayer < perceptionDistance)
{
Worldinfo.Game.Broadcast(self, "Help, I have the plague!");
GotoState('Chaseplayer');
}
}
Begin:
Worldinfo.Game.Broadcast(self, "!!!!!!! idle !!!!!!!!");
Pawn.Acceleration = vect(0,0,0);
MyBadguy3Pawn.SetAttacking(false);
Sleep(IdleInterval);
Worldinfo.Game.Broadcast(self, "!!!!!!! Going to FollowPath !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
followingPath = true;
actual_node = last_node;
GotoState('FollowPath');
}
state Chaseplayer
{
Begin:
MyBadguy3Pawn.SetAttacking(false);
Pawn.Acceleration = vect(0,0,1);
while (Pawn != none && thePlayer.Health > 0)
{
Worldinfo.Game.Broadcast(self, "I can see you!!");
if (ActorReachable(thePlayer))
{
distanceToPlayer = VSize(thePlayer.Location - Pawn.Location);
if (distanceToPlayer < attackDistance)
{
GotoState('Attack');
break;
}
else //if(distanceToPlayer < 300)
{
MoveToward(thePlayer, thePlayer, 20.0f);
if(Pawn.ReachedDestination(thePlayer))
{
GotoState('Attack');
break;
}
}
}
else
{
MoveTarget = FindPathToward(thePlayer,,perceptionDistance + (perceptionDistance/2));
if (MoveTarget != none)
{
//Worldinfo.Game.Broadcast(self, "Moving toward Player");
distanceToPlayer = VSize(MoveTarget.Location - Pawn.Location);
if (distanceToPlayer < 100)
MoveToward(MoveTarget, thePlayer, 20.0f);
else
MoveToward(MoveTarget, MoveTarget, 20.0f);
//MoveToward(MoveTarget, MoveTarget);
}
else
{
GotoState('Idle');
break;
}
}
}
}
state Attack
{
Begin:
Pawn.Acceleration = vect(0,0,0);
MyBadguy3Pawn.SetAttacking(true);
while(true && thePlayer.Health > 0)
{
Worldinfo.Game.Broadcast(self, "Attacking Player");
thePlayer.TakeDamage(10, self, Location, vect(0,0,0), class'UTDmgType_Burning');
distanceToPlayer = VSize(thePlayer.Location - Pawn.Location);
if (distanceToPlayer > attackDistance * 2)
{
MyBadguy3Pawn.SetAttacking(false);
GotoState('Chaseplayer');
break;
}
Sleep(1);
}
MyBadguy3Pawn.SetAttacking(false);
}
auto state FollowPath
{
event SeePlayer(Pawn SeenPlayer)
{
thePlayer = SeenPlayer;
distanceToPlayer = VSize(thePlayer.Location - Pawn.Location);
if (distanceToPlayer < perceptionDistance)
{
//Worldinfo.Game.Broadcast(self, "I can see you!!");
noiseHeard = true;
followingPath = false;
GotoState('Chaseplayer');
}
}
Begin:
while(followingPath)
{
MoveTarget = MyNavigationPoints[actual_node];
if(Pawn.ReachedDestination(MoveTarget))
{
WorldInfo.Game.Broadcast(self, "Oooohhh a node!");
actual_node++;
if (actual_node >= MyNavigationPoints.Length)
{
actual_node = 0;
}
last_node = actual_node;
MoveTarget = MyNavigationPoints[actual_node];
}
if (ActorReachable(MoveTarget))
{
//distanceToPlayer = VSize(MoveTarget.Location - Pawn.Location);
//if (distanceToPlayer < perceptionDistance / 3)
// MoveToward(MoveTarget, MyNavigationPoints[actual_node + 1]);
//else
MoveToward(MoveTarget, MoveTarget);
}
else
{
MoveTarget = FindPathToward(MyNavigationPoints[actual_node]);
if (MoveTarget != none)
{
//SetRotation(RInterpTo(Rotation,Rotator(MoveTarget. Location),Delta,90000,true));
MoveToward(MoveTarget, MoveTarget);
}
}
Sleep(1);
}
}
BadGuy3:
class Badguy3 extends UTPawn
placeable;
// members for the custom mesh
var SkeletalMesh defaultMesh;
//var MaterialInterface defaultMaterial0;
var AnimTree defaultAnimTree;
var array<AnimSet> defaultAnimSet;
var AnimNodeSequence defaultAnimSeq;
var PhysicsAsset defaultPhysicsAsset;
var Pawn P; // variable to hold the pawn we bump into
var BadGuyZombieBot MyController;
var float Speed;
var float hearingDistance;
var float perceptionDistance;
var SkeletalMeshComponent MyMesh;
var bool bplayed;
var Name AnimSetName;
var AnimNodeSequence MyAnimPlayControl;
var bool AttAcking;
var () array<NavigationPoint> MyNavigationPoints;
simulated event Bump( Actor Other, PrimitiveComponent OtherComp, Vector HitNormal )
{
`Log("Bump");
Super.Bump( Other, OtherComp, HitNormal );
if ( (Other == None) || Other.bStatic )
return;
P = Pawn(Other); //the pawn we might have bumped into
if ( P != None) //if we hit a pawn
{
if (P.Health >0) //as long as pawns health is more than 1
{
P.Health --; //take away the pawns health
}
}
if (P.Health <1) //as long as pawns health is more than 1
{
P.Destroy(); //kills the player
}
}
simulated function PostBeginPlay()
{
super.PostBeginPlay();
//if (Controller == none)
// SpawnDefaultController();
SetPhysics(PHYS_Walking);
if (MyController == none)
{
MyController = Spawn(class'BadGuyZombieBot', self);
//MyController.SetPawn(self);
}
}
function SetAttacking(bool atacar)
{
AttAcking = atacar;
}
simulated function SetCharacterClassFromInfo(class<UTFamilyInfo> Info)
{
Mesh.SetSkeletalMesh(defaultMesh);
//Mesh.SetMaterial(0,defaultMaterial0);
Mesh.SetPhysicsAsset(defaultPhysicsAsset);
Mesh.AnimSets=defaultAnimSet;
Mesh.SetAnimTreeTemplate(defaultAnimTree);
}
defaultproperties
{
Speed=80
GroundSpeed=80
perceptionDistance =50
hearingDistance =50
AnimSetName="ATTACK"
AttAcking=true
defaultMesh=SkeletalMesh'PLG_ENEMIES.PLG_ENIM_INFM ALE'
defaultAnimTree=AnimTree'PLG_ENEMIES.PLG_ENIM_INFM ALE_ANIMTREE'
defaultAnimSet(0)=AnimSet'PLG_ENEMIES.PLG_INFMALE_ WALK'
//defaultPhysicsAsset=PhysicsAsset'Enemies.scribble_ meshh_Physics'
SoundGroupClass=class'UTPawnSoundGroup_Liandri'
Begin Object Name=WPawnSkeletalMeshComponent
Scale=1
SkeletalMesh=SkeletalMesh'PLG_ENEMIES.PLG_ENIM_INF MALE'
AnimSets(0)=AnimSet'PLG_ENEMIES.PLG_INFMALE_WALK'
AnimTreeTemplate=AnimTree'PLG_ENEMIES.PLG_ENIM_INF MALE_ANIMTREE'
End Object
}
Thanks in advance...