Add missing carryall checks
This commit is contained in:
@@ -160,7 +160,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
protected override void OnFirstRun(Actor self)
|
||||
{
|
||||
// The cargo might have become invalid while we were moving towards it.
|
||||
if (cargo == null || cargo.IsDead || carryable.IsTraitDisabled || !cargo.AppearsFriendlyTo(self))
|
||||
if (cargo == null || cargo.IsDead || carryable.IsTraitDisabled || carryall.Carryable != cargo || !cargo.AppearsFriendlyTo(self))
|
||||
return;
|
||||
|
||||
self.World.AddFrameEndTask(w =>
|
||||
|
||||
@@ -106,30 +106,31 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
readonly Actor cargo;
|
||||
readonly Carryable carryable;
|
||||
readonly CarryallInfo carryallInfo;
|
||||
readonly Carryall carryall;
|
||||
|
||||
public FerryUnit(Actor self, Actor cargo)
|
||||
{
|
||||
this.cargo = cargo;
|
||||
carryable = cargo.Trait<Carryable>();
|
||||
carryallInfo = self.Trait<Carryall>().Info;
|
||||
carryall = self.Trait<Carryall>();
|
||||
}
|
||||
|
||||
protected override void OnFirstRun(Actor self)
|
||||
{
|
||||
if (!cargo.IsDead)
|
||||
QueueChild(new PickupUnit(self, cargo, 0, carryallInfo.TargetLineColor));
|
||||
QueueChild(new PickupUnit(self, cargo, 0, carryall.Info.TargetLineColor));
|
||||
}
|
||||
|
||||
public override bool Tick(Actor self)
|
||||
{
|
||||
if (cargo.IsDead)
|
||||
// Cargo may have become invalid or PickupUnit cancelled.
|
||||
if (carryall.Carryable == null || carryall.Carryable.IsDead)
|
||||
return true;
|
||||
|
||||
var dropRange = carryallInfo.DropRange;
|
||||
var dropRange = carryall.Info.DropRange;
|
||||
var destination = carryable.Destination;
|
||||
if (destination != null)
|
||||
self.QueueActivity(true, new DeliverUnit(self, Target.FromCell(self.World, destination.Value), dropRange, carryallInfo.TargetLineColor));
|
||||
self.QueueActivity(true, new DeliverUnit(self, Target.FromCell(self.World, destination.Value), dropRange, carryall.Info.TargetLineColor));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -256,7 +256,11 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public virtual void UnreserveCarryable(Actor self)
|
||||
{
|
||||
if (Carryable != null && Carryable.IsInWorld && !Carryable.IsDead)
|
||||
Carryable.Trait<Carryable>().UnReserve(Carryable);
|
||||
{
|
||||
var carryable = Carryable.Trait<Carryable>();
|
||||
if (carryable.Carrier == self)
|
||||
carryable.UnReserve(Carryable);
|
||||
}
|
||||
|
||||
Carryable = null;
|
||||
State = CarryallState.Idle;
|
||||
|
||||
Reference in New Issue
Block a user