public static MoveItemResult StashItemsAndGold(Game game, List <Item> items, int gold) { var stashes = game.GetEntityByCode(EntityCode.Stash); if (!stashes.Any()) { Log.Error($"{game.Me.Name}: No stash found"); return(MoveItemResult.Failed); } var stash = stashes.Single(); bool result = GeneralHelpers.TryWithTimeout((retryCount) => { if (game.Me.Location.Distance(stash.Location) >= 5) { game.MoveTo(stash); } else { return(game.OpenStash(stash)); } return(false); }, TimeSpan.FromSeconds(4)); if (!result) { Log.Error($"{game.Me.Name}: Failed to open stash while at location {game.Me.Location} with stash at {stash.Location}"); return(MoveItemResult.Failed); } if (gold > 0) { game.MoveGoldToStash(gold); } var moveResult = MoveItemResult.Succes; Thread.Sleep(100); foreach (Item item in items) { if (game.Stash.FindFreeSpace(item) == null) { moveResult = MoveItemResult.NoSpace; continue; } var currentMoveResult = MoveItemToStash(game, item); if (currentMoveResult != MoveItemResult.Succes) { moveResult = currentMoveResult; break; } ; } game.ClickButton(ClickType.CloseStash); Thread.Sleep(100); game.ClickButton(ClickType.CloseStash); return(moveResult); }