From 92aa2dd51a0e7cfb950247e35e7ac5be1fd866ad Mon Sep 17 00:00:00 2001
From: SilicaAndPina <earsyum@gmail.com>
Date: Fri, 5 Feb 2021 13:21:33 +1300
Subject: [PATCH] cleanup dropped items code.

---
 .../Game/Items/DroppedItems.cs                | 85 +++++++------------
 .../HorseIsleServer/Game/Meta.cs              |  4 +-
 .../HorseIsleServer/Server/Database.cs        |  9 +-
 .../HorseIsleServer/Server/GameServer.cs      |  6 +-
 4 files changed, 39 insertions(+), 65 deletions(-)

diff --git a/Horse Isle Server/HorseIsleServer/Game/Items/DroppedItems.cs b/Horse Isle Server/HorseIsleServer/Game/Items/DroppedItems.cs
index e4bebcc..16d1e0b 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Items/DroppedItems.cs	
+++ b/Horse Isle Server/HorseIsleServer/Game/Items/DroppedItems.cs	
@@ -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;
 
diff --git a/Horse Isle Server/HorseIsleServer/Game/Meta.cs b/Horse Isle Server/HorseIsleServer/Game/Meta.cs
index a2d63a1..8663cf9 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Meta.cs	
+++ b/Horse Isle Server/HorseIsleServer/Game/Meta.cs	
@@ -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;
diff --git a/Horse Isle Server/HorseIsleServer/Server/Database.cs b/Horse Isle Server/HorseIsleServer/Server/Database.cs
index 81f8479..4ae4801 100755
--- a/Horse Isle Server/HorseIsleServer/Server/Database.cs	
+++ b/Horse Isle Server/HorseIsleServer/Server/Database.cs	
@@ -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();
diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
index 0e83785..a5f0fe8 100755
--- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs	
+++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs	
@@ -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.");