Possible fix for #14102: Consider airfield available if already reserved for the same actor
This commit is contained in:
@@ -714,7 +714,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
get
|
||||
{
|
||||
yield return new EnterAlliedActorTargeter<BuildingInfo>("Enter", 5,
|
||||
target => AircraftCanEnter(target), target => !Reservable.IsReserved(target));
|
||||
target => AircraftCanEnter(target), target => Reservable.IsAvailableFor(target, self));
|
||||
|
||||
yield return new AircraftMoveOrderTargeter(Info);
|
||||
}
|
||||
@@ -787,7 +787,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
UnReserve();
|
||||
|
||||
var targetActor = order.Target.Actor;
|
||||
if (Reservable.IsReserved(targetActor))
|
||||
if (!Reservable.IsAvailableFor(targetActor, self))
|
||||
{
|
||||
if (!Info.CanHover)
|
||||
self.QueueActivity(new ReturnToBase(self, Info.AbortOnResupply));
|
||||
|
||||
@@ -65,6 +65,12 @@ namespace OpenRA.Mods.Common.Traits
|
||||
return res != null && res.reservedForAircraft != null && !res.reservedForAircraft.MayYieldReservation;
|
||||
}
|
||||
|
||||
public static bool IsAvailableFor(Actor reservable, Actor forActor)
|
||||
{
|
||||
var res = reservable.TraitOrDefault<Reservable>();
|
||||
return res == null || res.reservedForAircraft == null || res.reservedForAircraft.MayYieldReservation || res.reservedFor == forActor;
|
||||
}
|
||||
|
||||
private void UnReserve()
|
||||
{
|
||||
if (reservedForAircraft != null)
|
||||
|
||||
Reference in New Issue
Block a user