Hey guys, got a problem in Unrealscript I need help understanding.
So I'm trying to create an NPC, and I've got a MagpiePawn and MagpieController. But the problem is, the controller isn't appearing although the pawn is!
I can't say I understand why. All that happens instead is that the traditional UT bot appears within the static mesh I've made and it starts shooting at me (even though I don't want any shooting or violence whatsoever in my game!).
For the sake of understanding, here's my code in full, but I think the parts I've highlighted are the relevant ones.
class MagpiePawn extends UTPawn placeable;
var StaticMeshComponent MyMesh;
//var(NPC) SkeletalMeshComponent NPCMesh;
var class<AIController> NPCController;
simulated function PostBeginPlay()
{
super.PostBeginPlay();
SetMeshVisibility(true);
`log("The magpie pawn has spawned!"); //this appears fine, and I believe the pawn works okay
`log(self);
}
defaultproperties
{
bBlockActors=True
bCollideActors=True
NPCController=class'MagpieController'
Begin Object Class=DynamicLightEnvironmentComponent Name=MagpieLightEnvironment
bEnabled=TRUE
End Object
Components.Add(MagpieLightEnvironment)
Begin Object Class=StaticMeshComponent Name=MagpieMesh
StaticMesh=StaticMesh'UN_SimpleMeshes.TexPropCube_Dup'
Materials(0)=Material'EditorMaterials.WidgetMaterial_X'
LightEnvironment=MagpieLightEnvironment
Scale3D=(X=0.25,Y=0.25,Z=0.5)
End Object
Components.Add(MagpieMesh)
MyMesh=MagpieMesh
}
And here's the MagpieController, which I need instead of whatever controller is at work right now:
class MagpieController extends AIController;
var Pawn Crow;
var float AttackDistance;
var float ChaseDistance;
var float MovementSpeed;
simulated function PostBeginPlay()
{
`log("A magpie CONTROLLER has appeared on the map!"); //This message never appears!
if (Crow == none)
{
TargetCrow();
}
}
auto state Searching
{
function Tick (float DeltaTime)
{
if (Crow == none)
{
TargetCrow();
}
if (VSize(Location - Crow.Location) < ChaseDistance)
{
GoToState('ChasingPlayer');
}
}
}
state ChasingPlayer
{
function Tick(float DeltaTime)
{
local vector NewLocation;
if(Crow == none)
{
TargetCrow();
}
while (Crow != none && VSize(NewLocation - Crow.Location) < AttackDistance)
{
NewLocation = Location;
NewLocation += normal(Crow.Location - Location) * MovementSpeed * DeltaTime;
SetLocation(NewLocation);
}
}
}
function TargetCrow()
{
local CrowPlayerController PC;
foreach LocalPlayerControllers(class'CrowPlayerController', PC)
{
if (PC.Pawn != none)
{
Crow = PC.Pawn;
`log("My enemy is:" @ Crow);
}
}
}
function bool CanFireWeapon( Weapon Wpn, byte FireModeNum ) { return FALSE; }
defaultproperties
{
AttackDistance=96
MovementSpeed=256
ChaseDistance=512
}
This is part of my final year project that's due in little more than two weeks, so believe me, the slightest bit of help you could give would make a big difference. Any thoughts?