mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-10 23:25:41 +12:00
oops;.
This commit is contained in:
parent
d12b5dc6a4
commit
99100d91cb
5 changed files with 409 additions and 0 deletions
13
Horse Isle Server/Horse Isle Server/Game/GameExceptions.cs
Normal file
13
Horse Isle Server/Horse Isle Server/Game/GameExceptions.cs
Normal file
|
@ -0,0 +1,13 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace HISP.Game
|
||||
{
|
||||
// Inventory
|
||||
class InventoryException : Exception { };
|
||||
class InventoryFullException : InventoryException { };
|
||||
class InventoryMaxStackException : InventoryException { };
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
|
||||
namespace HISP.Game
|
||||
{
|
||||
|
||||
interface IInventory
|
||||
{
|
||||
|
||||
void Add(ItemInstance item);
|
||||
void Remove(ItemInstance item);
|
||||
int Count
|
||||
{
|
||||
get;
|
||||
}
|
||||
|
||||
InventoryItem[] GetItemList();
|
||||
|
||||
bool HasItem(int randomId);
|
||||
bool HasItemId(int itemId);
|
||||
|
||||
InventoryItem GetItemByItemId(int itemId);
|
||||
|
||||
InventoryItem GetItemByRandomid(int randomId);
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace HISP.Game
|
||||
{
|
||||
class InventoryItem
|
||||
{
|
||||
public InventoryItem()
|
||||
{
|
||||
ItemInstances = new List<ItemInstance>();
|
||||
Infinite = false;
|
||||
ItemId = 0;
|
||||
}
|
||||
|
||||
public int ItemId;
|
||||
public bool Infinite;
|
||||
public List<ItemInstance> ItemInstances;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,175 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using HISP.Game;
|
||||
using HISP.Server;
|
||||
|
||||
namespace HISP.Player
|
||||
{
|
||||
|
||||
class PlayerInventory : IInventory
|
||||
{
|
||||
|
||||
|
||||
public User BaseUser;
|
||||
private List<InventoryItem> inventoryItems;
|
||||
public PlayerInventory(User forUser)
|
||||
{
|
||||
inventoryItems = new List<InventoryItem>();
|
||||
|
||||
BaseUser = forUser;
|
||||
ItemInstance[] instances = Database.GetPlayerInventory(BaseUser.Id).ToArray();
|
||||
foreach(ItemInstance instance in instances)
|
||||
{
|
||||
addItem(instance, false);
|
||||
}
|
||||
}
|
||||
|
||||
public int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
return inventoryItems.Count;
|
||||
}
|
||||
}
|
||||
private void addItem(ItemInstance item, bool addToDatabase)
|
||||
{
|
||||
if (addToDatabase)
|
||||
Database.AddItemToInventory(BaseUser.Id, item);
|
||||
|
||||
foreach (InventoryItem invetoryItem in inventoryItems)
|
||||
{
|
||||
if (invetoryItem.ItemId == item.ItemId)
|
||||
{
|
||||
invetoryItem.ItemInstances.Add(item);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
InventoryItem inventoryItem = new InventoryItem();
|
||||
|
||||
inventoryItem.ItemId = item.ItemId;
|
||||
inventoryItem.ItemInstances.Add(item);
|
||||
inventoryItems.Add(inventoryItem);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public InventoryItem[] GetItemList()
|
||||
{
|
||||
return inventoryItems.OrderBy(o => o.ItemInstances[0].GetItemInfo().SortBy).ToArray();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void Remove(ItemInstance item)
|
||||
{
|
||||
|
||||
Database.RemoveItemFromInventory(BaseUser.Id, item);
|
||||
|
||||
foreach (InventoryItem inventoryItem in inventoryItems)
|
||||
{
|
||||
if(item.ItemId == inventoryItem.ItemId)
|
||||
{
|
||||
foreach(ItemInstance instance in inventoryItem.ItemInstances)
|
||||
{
|
||||
if(instance.RandomId == item.RandomId)
|
||||
{
|
||||
inventoryItem.ItemInstances.Remove(instance);
|
||||
|
||||
if (inventoryItem.ItemInstances.Count <= 0)
|
||||
inventoryItems.Remove(inventoryItem);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Logger.ErrorPrint("Tried to remove item : " + item.RandomId + " from inventory when it was not in it");
|
||||
}
|
||||
|
||||
public bool HasItem(int randomId)
|
||||
{
|
||||
InventoryItem[] items = GetItemList();
|
||||
foreach(InventoryItem item in items)
|
||||
{
|
||||
ItemInstance[] instances = item.ItemInstances.ToArray();
|
||||
foreach(ItemInstance instance in instances)
|
||||
{
|
||||
if (instance.RandomId == randomId)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool HasItemId(int itemId)
|
||||
{
|
||||
InventoryItem[] items = GetItemList();
|
||||
foreach (InventoryItem item in items)
|
||||
{
|
||||
if (item.ItemId == itemId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public InventoryItem GetItemByItemId(int itemId)
|
||||
{
|
||||
InventoryItem[] items = GetItemList();
|
||||
foreach (InventoryItem item in items)
|
||||
{
|
||||
if (item.ItemId == itemId)
|
||||
{
|
||||
return item;
|
||||
}
|
||||
}
|
||||
throw new KeyNotFoundException("id: " + itemId + " not found in inventory");
|
||||
}
|
||||
|
||||
public InventoryItem GetItemByRandomid(int randomId)
|
||||
{
|
||||
InventoryItem[] items = GetItemList();
|
||||
foreach (InventoryItem item in items)
|
||||
{
|
||||
ItemInstance[] instances = item.ItemInstances.ToArray();
|
||||
foreach (ItemInstance instance in instances)
|
||||
{
|
||||
if (instance.RandomId == randomId)
|
||||
return item;
|
||||
}
|
||||
}
|
||||
throw new KeyNotFoundException("random id: " + randomId + " not found in inventory");
|
||||
}
|
||||
|
||||
public void AddIgnoringFull(ItemInstance item)
|
||||
{
|
||||
addItem(item, true);
|
||||
}
|
||||
public void Add(ItemInstance item)
|
||||
{
|
||||
// Check if has max allready
|
||||
if(HasItemId(item.ItemId))
|
||||
{
|
||||
InventoryItem items = GetItemByItemId(item.ItemId);
|
||||
if (items.ItemInstances.Count >= ConfigReader.MAX_STACK)
|
||||
{
|
||||
throw new InventoryMaxStackException();
|
||||
}
|
||||
else if (Count >= Messages.DefaultInventoryMax)
|
||||
{
|
||||
throw new InventoryFullException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
addItem(item, true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,172 @@
|
|||
using HISP.Server;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace HISP.Game
|
||||
{
|
||||
class ShopInventory : IInventory
|
||||
{
|
||||
private Shop baseShop;
|
||||
private List<InventoryItem> inventoryItems;
|
||||
public int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
return inventoryItems.Count;
|
||||
}
|
||||
}
|
||||
public ShopInventory(Shop shopkeeper)
|
||||
{
|
||||
baseShop = shopkeeper;
|
||||
|
||||
ItemInstance[] instances = Database.GetShopInventory(baseShop.Id).ToArray();
|
||||
inventoryItems = new List<InventoryItem>();
|
||||
|
||||
foreach (ItemInstance instance in instances)
|
||||
{
|
||||
addItem(instance, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void addItem(ItemInstance item, bool addToDatabase)
|
||||
{
|
||||
|
||||
|
||||
foreach (InventoryItem invetoryItem in inventoryItems)
|
||||
{
|
||||
if (invetoryItem.ItemId == item.ItemId)
|
||||
{
|
||||
if (invetoryItem.Infinite) // no need to add +1, theres allready infinite quanity.
|
||||
return;
|
||||
|
||||
invetoryItem.ItemInstances.Add(item);
|
||||
|
||||
goto retrn;
|
||||
}
|
||||
}
|
||||
|
||||
InventoryItem inventoryItem = new InventoryItem();
|
||||
|
||||
inventoryItem.ItemId = item.ItemId;
|
||||
inventoryItem.Infinite = false;
|
||||
inventoryItem.ItemInstances.Add(item);
|
||||
inventoryItems.Add(inventoryItem);
|
||||
|
||||
retrn:
|
||||
{
|
||||
if (addToDatabase)
|
||||
Database.AddItemToShopInventory(baseShop.Id, item);
|
||||
return;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public void AddInfinity(Item.ItemInformation itemInfo)
|
||||
{
|
||||
InventoryItem inventoryItem = new InventoryItem();
|
||||
inventoryItem.ItemId = itemInfo.Id;
|
||||
inventoryItem.Infinite = true;
|
||||
|
||||
for(int i = 0; i < 25; i++) // add 25
|
||||
inventoryItem.ItemInstances.Add(new ItemInstance(inventoryItem.ItemId));
|
||||
|
||||
inventoryItems.Add(inventoryItem);
|
||||
}
|
||||
public void Add(ItemInstance item)
|
||||
{
|
||||
addItem(item, true);
|
||||
}
|
||||
|
||||
public InventoryItem GetItemByItemId(int itemId)
|
||||
{
|
||||
InventoryItem[] items = GetItemList();
|
||||
foreach (InventoryItem item in items)
|
||||
{
|
||||
if (item.ItemId == itemId)
|
||||
{
|
||||
return item;
|
||||
}
|
||||
}
|
||||
throw new KeyNotFoundException("id: " + itemId + " not found in shop inventory");
|
||||
}
|
||||
|
||||
public InventoryItem GetItemByRandomid(int randomId)
|
||||
{
|
||||
InventoryItem[] items = GetItemList();
|
||||
foreach (InventoryItem item in items)
|
||||
{
|
||||
ItemInstance[] instances = item.ItemInstances.ToArray();
|
||||
foreach (ItemInstance instance in instances)
|
||||
{
|
||||
if (instance.RandomId == randomId)
|
||||
return item;
|
||||
}
|
||||
}
|
||||
throw new KeyNotFoundException("random id: " + randomId + " not found in shop inventory");
|
||||
}
|
||||
public InventoryItem[] GetItemList()
|
||||
{
|
||||
return inventoryItems.OrderBy(o => o.ItemInstances[0].GetItemInfo().SortBy).OrderBy(o => o.Infinite).ToArray();
|
||||
}
|
||||
|
||||
public bool HasItem(int randomId)
|
||||
{
|
||||
InventoryItem[] items = GetItemList();
|
||||
foreach (InventoryItem item in items)
|
||||
{
|
||||
ItemInstance[] instances = item.ItemInstances.ToArray();
|
||||
foreach (ItemInstance instance in instances)
|
||||
{
|
||||
if (instance.RandomId == randomId)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool HasItemId(int itemId)
|
||||
{
|
||||
InventoryItem[] items = GetItemList();
|
||||
foreach (InventoryItem item in items)
|
||||
{
|
||||
if (item.ItemId == itemId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public void Remove(ItemInstance item)
|
||||
{
|
||||
|
||||
foreach (InventoryItem inventoryItem in inventoryItems)
|
||||
{
|
||||
if (item.ItemId == inventoryItem.ItemId)
|
||||
{
|
||||
foreach (ItemInstance instance in inventoryItem.ItemInstances)
|
||||
{
|
||||
if (instance.RandomId == item.RandomId)
|
||||
{
|
||||
inventoryItem.ItemInstances.Remove(instance);
|
||||
|
||||
if (inventoryItem.ItemInstances.Count <= 0)
|
||||
inventoryItems.Remove(inventoryItem);
|
||||
|
||||
|
||||
if (!inventoryItem.Infinite) // no need to bug the database.
|
||||
Database.RemoveItemFromShopInventory(baseShop.Id, item);
|
||||
else
|
||||
inventoryItem.ItemInstances.Add(new ItemInstance(inventoryItem.ItemId)); // Gen new item in inventory to replace it.
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Logger.ErrorPrint("Tried to remove item : " + item.RandomId + " from inventory when it was not in it");
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue