Ejemplo n.º 1
0
 protected override void Act(float deltaTime)
 {
     // Only continue when the get item sub objectives have been completed.
     if (subObjectives.Any())
     {
         return;
     }
     if (HumanAIController.FindSuitableContainer(character, item, ignoredContainers, ref itemIndex, out Item suitableContainer))
     {
         itemIndex = 0;
         if (suitableContainer != null)
         {
             bool equip = item.HasTag(AIObjectiveFindDivingGear.HEAVY_DIVING_GEAR) || (
                 item.GetComponent <Wearable>() == null &&
                 item.AllowedSlots.None(s =>
                                        s == InvSlotType.Card ||
                                        s == InvSlotType.Head ||
                                        s == InvSlotType.Headset ||
                                        s == InvSlotType.InnerClothes ||
                                        s == InvSlotType.OuterClothes));
             TryAddSubObjective(ref decontainObjective, () => new AIObjectiveDecontainItem(character, item, objectiveManager, targetContainer: suitableContainer.GetComponent <ItemContainer>())
             {
                 Equip       = equip,
                 DropIfFails = true
             },
                                onCompleted: () =>
             {
                 if (equip)
                 {
                     HumanAIController.ReequipUnequipped();
                 }
                 IsCompleted = true;
             },
                                onAbandon: () =>
             {
                 if (equip)
                 {
                     HumanAIController.ReequipUnequipped();
                 }
                 if (decontainObjective != null && decontainObjective.ContainObjective != null && decontainObjective.ContainObjective.CanBeCompleted)
                 {
                     ignoredContainers.Add(suitableContainer);
                 }
                 else
                 {
                     Abandon = true;
                 }
             });
         }
         else
         {
             Abandon = true;
         }
     }
     else
     {
         objectiveManager.GetObjective <AIObjectiveIdle>().Wander(deltaTime);
     }
 }
        protected override void Act(float deltaTime)
        {
            if (item.IgnoreByAI(character))
            {
                Abandon = true;
                return;
            }
            if (item.ParentInventory != null)
            {
                if (item.Container != null && !AIObjectiveCleanupItems.IsValidContainer(item.Container, character, allowUnloading: objectiveManager.HasOrder <AIObjectiveCleanupItems>()))
                {
                    // Target was picked up or moved by someone.
                    Abandon = true;
                    return;
                }
            }
            // Only continue when the get item sub objectives have been completed.
            if (subObjectives.Any())
            {
                return;
            }
            if (HumanAIController.FindSuitableContainer(character, item, ignoredContainers, ref itemIndex, out Item suitableContainer))
            {
                itemIndex = 0;
                if (suitableContainer != null)
                {
                    bool equip = item.GetComponent <Holdable>() != null ||
                                 item.AllowedSlots.None(s =>
                                                        s == InvSlotType.Card ||
                                                        s == InvSlotType.Head ||
                                                        s == InvSlotType.Headset ||
                                                        s == InvSlotType.InnerClothes ||
                                                        s == InvSlotType.OuterClothes);

                    TryAddSubObjective(ref decontainObjective, () => new AIObjectiveDecontainItem(character, item, objectiveManager, targetContainer: suitableContainer.GetComponent <ItemContainer>())
                    {
                        Equip          = equip,
                        TakeWholeStack = true,
                        DropIfFails    = true
                    },
                                       onCompleted: () =>
                    {
                        if (equip)
                        {
                            HumanAIController.ReequipUnequipped();
                        }
                        IsCompleted = true;
                    },
                                       onAbandon: () =>
                    {
                        if (equip)
                        {
                            HumanAIController.ReequipUnequipped();
                        }
                        if (decontainObjective != null && decontainObjective.ContainObjective != null && decontainObjective.ContainObjective.CanBeCompleted)
                        {
                            ignoredContainers.Add(suitableContainer);
                        }
                        else
                        {
                            Abandon = true;
                        }
                    });
                }
                else
                {
                    Abandon = true;
                }
            }
            else
            {
                objectiveManager.GetObjective <AIObjectiveIdle>().Wander(deltaTime);
            }
        }