Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualSammieo

Posted 04 March 2013 - 02:34 PM

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?


#2Sammieo

Posted 03 March 2013 - 02:40 PM

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?


#1Sammieo

Posted 03 March 2013 - 12:13 PM

Hey guys, got a tiny problem 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?

PARTNERS