cleanup dropped items code.

This commit is contained in:
SilicaAndPina 2021-02-05 13:21:33 +13:00
parent 92c35eb4b9
commit 92aa2dd51a
4 changed files with 39 additions and 65 deletions

View file

@ -1,35 +1,34 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using HISP.Server; using HISP.Server;
using HISP.Game;
namespace HISP.Game.Items namespace HISP.Game.Items
{ {
public class DroppedItems public class DroppedItems
{ {
public struct DroppedItem public class DroppedItem
{ {
public DroppedItem(ItemInstance itmInstance)
{
if (itmInstance == null)
throw new NullReferenceException("How could this happen?");
Instance = itmInstance;
}
public int X; public int X;
public int Y; public int Y;
public int DespawnTimer; public int DespawnTimer;
public ItemInstance instance; public ItemInstance Instance;
} }
private static int epoch = 0; private static int epoch = 0;
private static List<DroppedItem> droppedItemsList = new List<DroppedItem>(); private static List<DroppedItem> droppedItemsList = new List<DroppedItem>();
public static int GetCountOfItem(Item.ItemInformation item) public static int GetCountOfItem(Item.ItemInformation item)
{ {
DroppedItem[] dropedItems = droppedItemsList.ToArray(); DroppedItem[] droppedItems = droppedItemsList.ToArray();
int count = 0; int count = 0;
foreach(DroppedItem droppedItem in dropedItems) foreach(DroppedItem droppedItem in droppedItems)
{ {
if (droppedItem.instance == null) if(droppedItem.Instance.ItemId == item.Id)
{
RemoveDroppedItem(droppedItem);
continue;
}
if(droppedItem.instance.ItemId == item.Id)
{ {
count++; count++;
} }
@ -40,9 +39,9 @@ namespace HISP.Game.Items
public static DroppedItem[] GetItemsAt(int x, int y) public static DroppedItem[] GetItemsAt(int x, int y)
{ {
DroppedItem[] dropedItems = droppedItemsList.ToArray(); DroppedItem[] droppedItems = droppedItemsList.ToArray();
List<DroppedItem> items = new List<DroppedItem>(); List<DroppedItem> items = new List<DroppedItem>();
foreach(DroppedItem droppedItem in dropedItems) foreach(DroppedItem droppedItem in droppedItems)
{ {
if(droppedItem.X == x && droppedItem.Y == y) if(droppedItem.X == x && droppedItem.Y == y)
{ {
@ -67,7 +66,7 @@ namespace HISP.Game.Items
} }
public static void RemoveDroppedItem(DroppedItem item) public static void RemoveDroppedItem(DroppedItem item)
{ {
int randomId = item.instance.RandomId; int randomId = item.Instance.RandomId;
Database.RemoveDroppedItem(randomId); Database.RemoveDroppedItem(randomId);
droppedItemsList.Remove(item); droppedItemsList.Remove(item);
@ -89,11 +88,11 @@ namespace HISP.Game.Items
public static DroppedItem GetDroppedItemById(int randomId) public static DroppedItem GetDroppedItemById(int randomId)
{ {
DroppedItem[] dropedItems = droppedItemsList.ToArray(); DroppedItem[] droppedItems = droppedItemsList.ToArray();
foreach (DroppedItem item in dropedItems) foreach (DroppedItem item in droppedItems)
{ {
if(item.instance.RandomId == randomId) if(item.Instance.RandomId == randomId)
{ {
return item; return item;
} }
@ -122,14 +121,14 @@ namespace HISP.Game.Items
epoch = new_epoch; epoch = new_epoch;
} }
public static void AddItem(ItemInstance item, int x, int y) public static void AddItem(ItemInstance item, int x, int y, int despawnTimer=1500)
{ {
DroppedItem droppedItem = new DroppedItem(); DroppedItem droppedItem = new DroppedItem(item);
droppedItem.X = x; droppedItem.X = x;
droppedItem.Y = y; droppedItem.Y = y;
droppedItem.DespawnTimer = 1500; droppedItem.DespawnTimer = despawnTimer;
droppedItem.instance = item;
droppedItemsList.Add(droppedItem); droppedItemsList.Add(droppedItem);
Database.AddDroppedItem(droppedItem);
} }
public static void GenerateItems() public static void GenerateItems()
{ {
@ -173,14 +172,8 @@ namespace HISP.Game.Items
continue; continue;
ItemInstance instance = new ItemInstance(item.Id); ItemInstance instance = new ItemInstance(item.Id);
DroppedItem droppedItem = new DroppedItem(); AddItem(instance, tryX, tryY, despawnTimer);
droppedItem.X = tryX; Logger.DebugPrint("Created Item ID: " + instance.ItemId + " in ZONE: " + spawnArea.Name + " at: X: " + tryX + " Y: " + tryY);
droppedItem.Y = tryY;
droppedItem.DespawnTimer = despawnTimer;
droppedItem.instance = instance;
droppedItemsList.Add(droppedItem);
Database.AddDroppedItem(droppedItem);
Logger.DebugPrint("Created Item ID: " + instance.ItemId + " in ZONE: " + spawnArea.Name + " at: X: " + droppedItem.X + " Y: " + droppedItem.Y);
newItems++; newItems++;
break; break;
} }
@ -210,14 +203,8 @@ namespace HISP.Game.Items
continue; continue;
ItemInstance instance = new ItemInstance(item.Id); ItemInstance instance = new ItemInstance(item.Id);
DroppedItem droppedItem = new DroppedItem(); AddItem(instance, spawnOn.X, spawnOn.Y, despawnTimer);
droppedItem.X = spawnOn.X; Logger.DebugPrint("Created Item ID: " + instance.ItemId + " at: X: " + spawnOn.X + " Y: " + spawnOn.Y);
droppedItem.Y = spawnOn.Y;
droppedItem.DespawnTimer = despawnTimer;
droppedItem.instance = instance;
droppedItemsList.Add(droppedItem);
Database.AddDroppedItem(droppedItem);
Logger.DebugPrint("Created Item ID: " + instance.ItemId + " at: X: " + droppedItem.X + " Y: " + droppedItem.Y);
newItems++; newItems++;
break; break;
} }
@ -273,15 +260,9 @@ namespace HISP.Game.Items
if (GetItemsAt(tryX, tryY).Length > 25) // Max here if (GetItemsAt(tryX, tryY).Length > 25) // Max here
continue; continue;
ItemInstance instance = new ItemInstance(item.Id); ItemInstance instance = new ItemInstance(item.Id);
DroppedItem droppedItem = new DroppedItem(); AddItem(instance, tryX, tryY, despawnTimer);
droppedItem.X = tryX; Logger.DebugPrint("Created Item ID: " + instance.ItemId + " at: X: " + tryX + " Y: " + tryY);
droppedItem.Y = tryY;
droppedItem.DespawnTimer = despawnTimer;
droppedItem.instance = instance;
droppedItemsList.Add(droppedItem);
Database.AddDroppedItem(droppedItem);
Logger.DebugPrint("Created Item ID: " + instance.ItemId + " at: X: " + droppedItem.X + " Y: " + droppedItem.Y);
newItems++; newItems++;
break; break;
} }
@ -315,14 +296,8 @@ namespace HISP.Game.Items
continue; continue;
ItemInstance instance = new ItemInstance(item.Id); ItemInstance instance = new ItemInstance(item.Id);
DroppedItem droppedItem = new DroppedItem(); AddItem(instance, tryX, tryY, despawnTimer);
droppedItem.X = tryX; Logger.DebugPrint("Created Item ID: " + instance.ItemId + " at: X: " + tryX + " Y: " + tryY);
droppedItem.Y = tryY;
droppedItem.DespawnTimer = despawnTimer;
droppedItem.instance = instance;
droppedItemsList.Add(droppedItem);
Database.AddDroppedItem(droppedItem);
Logger.DebugPrint("Created Item ID: " + instance.ItemId + " at: X: " + droppedItem.X + " Y: " + droppedItem.Y);
newItems++; newItems++;
break; break;

View file

@ -183,8 +183,8 @@ namespace HISP.Game
message += Messages.ItemsOnGroundMessage; message += Messages.ItemsOnGroundMessage;
foreach(DroppedItems.DroppedItem item in Items) foreach(DroppedItems.DroppedItem item in Items)
{ {
Item.ItemInformation itemInfo = item.instance.GetItemInfo(); Item.ItemInformation itemInfo = item.Instance.GetItemInfo();
message += Messages.FormatGrabItemMessage(itemInfo.Name, item.instance.RandomId, itemInfo.IconId); message += Messages.FormatGrabItemMessage(itemInfo.Name, item.Instance.RandomId, itemInfo.IconId);
} }
if(Items.Length > 1) if(Items.Length > 1)
message += Messages.GrabAllItemsButton; message += Messages.GrabAllItemsButton;

View file

@ -2679,12 +2679,11 @@ namespace HISP.Server
MySqlDataReader reader = sqlCommand.ExecuteReader(); MySqlDataReader reader = sqlCommand.ExecuteReader();
while(reader.Read()) while(reader.Read())
{ {
DroppedItems.DroppedItem droppedItem = new DroppedItems.DroppedItem(); ItemInstance instance = new ItemInstance(reader.GetInt32(3), reader.GetInt32(2));
DroppedItems.DroppedItem droppedItem = new DroppedItems.DroppedItem(instance);
droppedItem.X = reader.GetInt32(0); droppedItem.X = reader.GetInt32(0);
droppedItem.Y = reader.GetInt32(1); droppedItem.Y = reader.GetInt32(1);
droppedItem.DespawnTimer = reader.GetInt32(4); droppedItem.DespawnTimer = reader.GetInt32(4);
ItemInstance instance = new ItemInstance(reader.GetInt32(3),reader.GetInt32(2));
droppedItem.instance = instance;
itemList.Add(droppedItem); itemList.Add(droppedItem);
} }
sqlCommand.Dispose(); sqlCommand.Dispose();
@ -2704,8 +2703,8 @@ namespace HISP.Server
sqlCommand.CommandText = "INSERT INTO DroppedItems VALUES(@x, @y, @randomId, @itemId, @despawnTimer)"; sqlCommand.CommandText = "INSERT INTO DroppedItems VALUES(@x, @y, @randomId, @itemId, @despawnTimer)";
sqlCommand.Parameters.AddWithValue("@x", item.X); sqlCommand.Parameters.AddWithValue("@x", item.X);
sqlCommand.Parameters.AddWithValue("@y", item.Y); sqlCommand.Parameters.AddWithValue("@y", item.Y);
sqlCommand.Parameters.AddWithValue("@randomId", item.instance.RandomId); sqlCommand.Parameters.AddWithValue("@randomId", item.Instance.RandomId);
sqlCommand.Parameters.AddWithValue("@itemId", item.instance.ItemId); sqlCommand.Parameters.AddWithValue("@itemId", item.Instance.ItemId);
sqlCommand.Parameters.AddWithValue("@despawnTimer", item.DespawnTimer); sqlCommand.Parameters.AddWithValue("@despawnTimer", item.DespawnTimer);
sqlCommand.Prepare(); sqlCommand.Prepare();
sqlCommand.ExecuteNonQuery(); sqlCommand.ExecuteNonQuery();

View file

@ -2937,7 +2937,7 @@ namespace HISP.Server
{ {
foreach (DroppedItems.DroppedItem item in droppedItems) foreach (DroppedItems.DroppedItem item in droppedItems)
{ {
sender.LoggedinUser.Inventory.Add(item.instance); sender.LoggedinUser.Inventory.Add(item.Instance);
DroppedItems.RemoveDroppedItem(item); DroppedItems.RemoveDroppedItem(item);
} }
} }
@ -2973,7 +2973,7 @@ namespace HISP.Server
DroppedItems.DroppedItem item = DroppedItems.GetDroppedItemById(randomId); DroppedItems.DroppedItem item = DroppedItems.GetDroppedItemById(randomId);
try try
{ {
sender.LoggedinUser.Inventory.Add(item.instance); sender.LoggedinUser.Inventory.Add(item.Instance);
} }
catch (InventoryException) catch (InventoryException)
{ {
@ -3683,7 +3683,7 @@ namespace HISP.Server
if (sender.LoggedinUser.Inventory.HasItem(value)) if (sender.LoggedinUser.Inventory.HasItem(value))
itemId = sender.LoggedinUser.Inventory.GetItemByRandomid(value).ItemId; itemId = sender.LoggedinUser.Inventory.GetItemByRandomid(value).ItemId;
else if (DroppedItems.IsDroppedItemExist(value)) else if (DroppedItems.IsDroppedItemExist(value))
itemId = DroppedItems.GetDroppedItemById(value).instance.ItemId; itemId = DroppedItems.GetDroppedItemById(value).Instance.ItemId;
if (itemId == -1) if (itemId == -1)
{ {
Logger.HackerPrint(sender.LoggedinUser.Username + " asked for details of non existiant item."); Logger.HackerPrint(sender.LoggedinUser.Username + " asked for details of non existiant item.");