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

View file

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

View file

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

View file

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