private bool MoveLoot()
{
if (DateTime.UtcNow < _nextUnloadAction)
{
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLoot.MoveLoot", "will Continue in [ " + Math.Round(_nextUnloadAction.Subtract(DateTime.UtcNow).TotalSeconds, 0) + " ] sec", Logging.Debug);
return false;
}
if (LootIsBeingMoved && AllLootWillFit)
{
if (Cache.Instance.DirectEve.GetLockedItems().Count != 0)
{
if (DateTime.UtcNow.Subtract(_lastUnloadAction).TotalSeconds > 120)
{
Logging.Log("UnloadLootState.MoveLoot", "Moving Loot timed out, clearing item locks", Logging.Orange);
Cache.Instance.DirectEve.UnlockItems();
_lastUnloadAction = DateTime.UtcNow.AddSeconds(-10);
_States.CurrentUnloadLootState = UnloadLootState.Begin;
return false;
}
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLootState.MoveLoot", "Waiting for Locks to clear. GetLockedItems().Count [" + Cache.Instance.DirectEve.GetLockedItems().Count + "]", Logging.Teal);
return false;
}
}
if (DateTime.UtcNow.Subtract(Cache.Instance.LastStackLootHangar).TotalSeconds < 10)
{
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLootState.MoveLoot", "if (DateTime.UtcNow.Subtract(Cache.Instance.LastStackLootHangar).TotalSeconds < 30)", Logging.Teal);
if (!Cache.Instance.CloseLootHangar("UnloadLootState.MoveLoot")) return false;
Logging.Log("UnloadLoot.MoveLoot", "Loot was worth an estimated [" + Statistics.Instance.LootValue.ToString("#,##0") + "] isk in buy-orders", Logging.Teal);
LootIsBeingMoved = false;
AllLootWillFit = false;
_States.CurrentUnloadLootState = UnloadLootState.Done;
return true;
}
if (Cache.Instance.CurrentShipsCargo == null)
{
Logging.Log("UnloadLootState.MoveAmmo", "if (Cache.Instance.CurrentShipsCargo == null)", Logging.Teal);
return false;
}
if (Cache.Instance.CurrentShipsCargo.IsValid)
{
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLootState.MoveLoot", "if (Cache.Instance.CargoHold.IsValid)", Logging.White);
IEnumerable<DirectItem> lootToMove = Cache.Instance.CurrentShipsCargo.Items.ToList();
//IEnumerable<DirectItem> somelootToMove = lootToMove;
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLootState.MoveLoot", "foreach (DirectItem item in lootToMove) (start)", Logging.White);
int y = lootToMove.Count();
int x = 1;
foreach (DirectItem item in lootToMove)
{
if (!Cache.Instance.InvTypesById.ContainsKey(item.TypeId))
continue;
if (item.Volume != 0)
{
if (Settings.Instance.DebugLootValue) Logging.Log("UnloadLoot.Lootvalue","[" + x + "of" + y + "] ItemName [" + item.TypeName + "] ItemTypeID [" + item.TypeId + "] AveragePrice[" + (int)item.AveragePrice() + "]",Logging.Debug);
Statistics.Instance.LootValue += (int)item.AveragePrice() * Math.Max(item.Quantity, 1);
}
x++;
}
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLootState.MoveLoot", "foreach (DirectItem item in lootToMove) (done)", Logging.White);
if (lootToMove.Any() && !LootIsBeingMoved)
{
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLootState.MoveLoot", "if (lootToMove.Any() && !LootIsBeingMoved))", Logging.White);
if (string.IsNullOrEmpty(Settings.Instance.LootHangarTabName)) // if we do NOT have the loot hangar configured.
{
/*
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLootState.Moveloot", "LootHangar setting is not configured, assuming lothangar is local items hangar (and its 999 item limit)", Logging.White);
// Move loot to the loot hangar
int roominHangar = (999 - Cache.Instance.LootHangar.Items.Count);
if (roominHangar > lootToMove.Count())
{
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLootState.Moveloot", "LootHangar has plenty of room to move loot all in one go", Logging.White);
Cache.Instance.LootHangar.Add(lootToMove);
AllLootWillFit = true;
_lootToMoveWillStillNotFitCount = 0;
return;
}
AllLootWillFit = false;
Logging.Log("Unloadloot", "LootHangar is almost full and contains [" + Cache.Instance.LootHangar.Items.Count + "] of 999 total possible stacks", Logging.Orange);
if (roominHangar > 50)
{
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLoot", "LootHangar has more than 50 item slots left", Logging.White);
somelootToMove = lootToMove.Where(i => Settings.Instance.Ammo.All(a => a.TypeId != i.TypeId)).ToList().GetRange(0, 49).ToList();
}
else if (roominHangar > 20)
{
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLoot", "LootHangar has more than 20 item slots left", Logging.White);
somelootToMove = lootToMove.Where(i => Settings.Instance.Ammo.All(a => a.TypeId != i.TypeId)).ToList().GetRange(0, 19).ToList();
}
if (somelootToMove.Any())
{
Logging.Log("UnloadLoot", "Moving [" + somelootToMove.Count() + "] of [" + lootToMove.Count() + "] items into the LootHangar", Logging.White);
Cache.Instance.LootHangar.Add(somelootToMove);
return;
}
if (_lootToMoveWillStillNotFitCount < 7)
{
_lootToMoveWillStillNotFitCount++;
if (!Cache.Instance.StackLootHangar("Unloadloot")) return;
return;
}
Logging.Log("Unloadloot", "We tried to stack the loothangar 7 times and we still could not fit all the LootToMove into the LootHangar [" + Cache.Instance.LootHangar.Items.Count + " items ]", Logging.Red);
_States.CurrentQuestorState = QuestorState.Error;
return;
*/
}
//
// if we are using the corp hangar then just grab all the loot in one go.
//
if (lootToMove.Any() && !LootIsBeingMoved)
{
//Logging.Log("UnloadLoot", "Moving [" + lootToMove.Count() + "] items from CargoHold to LootHangar which has [" + Cache.Instance.LootHangar.Items.Count() + "] items in it now.", Logging.White);
Logging.Log("UnloadLoot.MoveLoot", "Moving [" + lootToMove.Count() + "] items from CargoHold to [" + PutLootHere_Description + "]", Logging.White);
AllLootWillFit = true;
LootIsBeingMoved = true;
PutLootHere.Add(lootToMove);
_nextUnloadAction = DateTime.UtcNow.AddSeconds(5);
return false;
}
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLoot.MoveLoot", "1) if (lootToMove.Any()) is false", Logging.White);
return false;
}
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLoot.MoveLoot", "2) if (lootToMove.Any()) is false", Logging.White);
//
// Stack LootHangar
//
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLoot.MoveLoot", "if (!Cache.Instance.StackLootHangar(UnloadLoot.MoveLoot)) return;", Logging.White);
_nextUnloadAction = DateTime.UtcNow.AddSeconds(Cache.Instance.RandomNumber(4, 6));
if (!Cache.Instance.StackLootHangar("UnloadLoot.MoveLoot")) return false;
_States.CurrentUnloadLootState = UnloadLootState.Done;
return true;
}
if (Settings.Instance.DebugUnloadLoot) Logging.Log("UnloadLoot.MoveLoot", "Cache.Instance.CargoHold is not yet valid", Logging.White);
return false;
}