Add Actor.Guard
This commit is contained in:
@@ -27,12 +27,18 @@ namespace OpenRA.Mods.RA
|
|||||||
if (order.OrderString == "Guard")
|
if (order.OrderString == "Guard")
|
||||||
{
|
{
|
||||||
var target = Target.FromActor(order.TargetActor);
|
var target = Target.FromActor(order.TargetActor);
|
||||||
|
|
||||||
|
GuardTarget(self, target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GuardTarget(Actor self, Target target)
|
||||||
|
{
|
||||||
self.SetTargetLine(target, Color.Yellow);
|
self.SetTargetLine(target, Color.Yellow);
|
||||||
|
|
||||||
var range = WRange.FromCells(target.Actor.Info.Traits.Get<GuardableInfo>().Range);
|
var range = WRange.FromCells(target.Actor.Info.Traits.Get<GuardableInfo>().Range);
|
||||||
self.QueueActivity(false, new AttackMove.AttackMoveActivity(self, self.Trait<IMove>().MoveFollow(self, target, range)));
|
self.QueueActivity(false, new AttackMove.AttackMoveActivity(self, self.Trait<IMove>().MoveFollow(self, target, range)));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public string VoicePhraseForOrder(Actor self, Order order)
|
public string VoicePhraseForOrder(Actor self, Order order)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -372,5 +372,17 @@ namespace OpenRA.Mods.RA.Scripting
|
|||||||
|
|
||||||
factory.Trait<ProductionQueue>().ResolveOrder(factory, Order.StartProduction(factory, unit, (int)amount));
|
factory.Trait<ProductionQueue>().ResolveOrder(factory, Order.StartProduction(factory, unit, (int)amount));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void Guard(Actor guard, Actor target)
|
||||||
|
{
|
||||||
|
if (target.HasTrait<Guardable>())
|
||||||
|
{
|
||||||
|
var gt = guard.TraitOrDefault<Guard>();
|
||||||
|
|
||||||
|
if (gt != null)
|
||||||
|
gt.GuardTarget(guard, Target.FromActor(target));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,6 +187,10 @@ Actor.ReturnToBase = function(actor, airfield)
|
|||||||
actor:QueueActivity(OpenRA.New("ReturnToBase", { actor, airfield }))
|
actor:QueueActivity(OpenRA.New("ReturnToBase", { actor, airfield }))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Actor.Guard = function(actor, target)
|
||||||
|
Internal.Guard(actor, target)
|
||||||
|
end
|
||||||
|
|
||||||
Actor.Patrol = function(actor, waypoints, wait, loop)
|
Actor.Patrol = function(actor, waypoints, wait, loop)
|
||||||
Utils.Do(waypoints, function(wpt)
|
Utils.Do(waypoints, function(wpt)
|
||||||
Actor.AttackMove(actor, wpt.Location, 3)
|
Actor.AttackMove(actor, wpt.Location, 3)
|
||||||
|
|||||||
Reference in New Issue
Block a user