public virtual void PerformGoal(ref NPC.NPCBase.NPCState state) { StoredItem[] remaining = new StoredItem[0]; state.SetCooldown(1); if (ItemsToStore != null && ItemsToStore.Length != 0) { state.SetIndicator(new Shared.IndicatorState(1, ItemsToStore.FirstOrDefault().Id.Name)); } if (WalkingTo == StorageType.Crate) { if (StorageFactory.CrateLocations[Job.Owner].TryGetValue(CurrentCratePosition, out CrateInventory ci)) { remaining = ci.TryAdd(ItemsToStore).ToArray(); } } else { StorageFactory.StoreItems(Job.Owner, ItemsToStore); } if (remaining.Length > 0) { ItemsToStore = remaining; LastCratePosition.Add(CurrentCratePosition); } else { PandaJobFactory.SetActiveGoal(Job, NextGoal, ref state); } }
public void PerformGoal(ref NPC.NPCBase.NPCState state) { StoredItem[] remaining = new StoredItem[0]; state.JobIsDone = true; state.SetCooldown(_waitTime); if (remaining != null && remaining.Length != 0) { state.SetIndicator(new Shared.IndicatorState(_waitTime, remaining.FirstOrDefault().Id.Name, true, false)); } if (WalkingTo == StorageType.Crate) { if (StorageFactory.CrateLocations[Job.Owner].TryGetValue(CurrentCratePosition, out CrateInventory ci)) { remaining = ci.TryTake(ItemsToGet).Values.ToArray(); } } else { remaining = StorageFactory.TryTakeItemsReturnRemaining(Job.Owner, ItemsToGet); LastCratePosition.Clear(); WalkingTo = StorageType.Crate; } if (remaining.Length != 0) { ItemsToGet = remaining; LastCratePosition.Add(CurrentCratePosition); } else { JobSettings.SetGoal(Job, NextGoal, ref state); } }