(7d7010579) Fix ai dialog about not being able to find targets. Use a higher thershold for rescue objectives when it's an order.

This commit is contained in:
Joonas Rikkonen
2019-05-16 06:14:25 +03:00
parent af07862995
commit 9c964b7843
51 changed files with 688 additions and 417 deletions
@@ -11,12 +11,13 @@ namespace Barotrauma
public Func<Item, float> GetItemPriority;
public int MinContainedAmount = 1;
public int targetItemCount = 1;
public string[] ignoredContainerIdentifiers;
public bool checkInventory = true;
//can either be a tag or an identifier
private readonly string[] itemIdentifiers;
private readonly ItemContainer container;
public readonly string[] itemIdentifiers;
public readonly ItemContainer container;
private bool isCompleted;
private AIObjectiveGetItem getItemObjective;
@@ -39,7 +40,6 @@ namespace Barotrauma
public override bool IsCompleted()
{
if (isCompleted) { return true; }
int containedItemCount = 0;
foreach (Item item in container.Inventory.Items)
{
@@ -48,7 +48,7 @@ namespace Barotrauma
containedItemCount++;
}
}
return containedItemCount >= MinContainedAmount;
return containedItemCount >= targetItemCount;
}
public override float GetPriority()
@@ -62,7 +62,6 @@ namespace Barotrauma
protected override void Act(float deltaTime)
{
if (isCompleted) { return; }
//get the item that should be contained
Item itemToContain = null;
foreach (string identifier in itemIdentifiers)
@@ -72,8 +71,13 @@ namespace Barotrauma
}
if (itemToContain == null)
{
if (getItemObjective != null && getItemObjective.IsCompleted())
{
getItemObjective = null;
targetItemCount--;
}
TryAddSubObjective(ref getItemObjective, () =>
new AIObjectiveGetItem(character, itemIdentifiers, objectiveManager)
new AIObjectiveGetItem(character, itemIdentifiers, objectiveManager, checkInventory: checkInventory)
{
GetItemPriority = GetItemPriority,
ignoredContainerIdentifiers = ignoredContainerIdentifiers
@@ -81,14 +85,7 @@ namespace Barotrauma
return;
}
if (container.Item.ParentInventory == character.Inventory)
{
var containedItems = container.Inventory.Items;
//if there's already something in the mask (empty oxygen tank?), drop it
var existingItem = containedItems.FirstOrDefault(i => i != null);
if (existingItem != null)
{
existingItem.Drop(character);
}
{
character.Inventory.RemoveItem(itemToContain);
container.Inventory.TryPutItem(itemToContain, null);
}
@@ -102,7 +99,6 @@ namespace Barotrauma
}
container.Combine(itemToContain);
}
isCompleted = true;
}
public override bool IsDuplicate(AIObjective otherObjective)