mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-07 21:55:42 +12:00
Make sell options show up in store.
This commit is contained in:
parent
9e01526bfe
commit
a27d7a3646
8 changed files with 36 additions and 393 deletions
|
@ -1,30 +0,0 @@
|
||||||
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);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -172,7 +172,7 @@ namespace HISP.Game
|
||||||
{
|
{
|
||||||
return ShopBuy25Button.Replace("%ITEMID%", itemId.ToString());
|
return ShopBuy25Button.Replace("%ITEMID%", itemId.ToString());
|
||||||
}
|
}
|
||||||
public static string ForamtSellButton(int randomId)
|
public static string FormatSellButton(int randomId)
|
||||||
{
|
{
|
||||||
return SellButton.Replace("%RANDOMID%", randomId.ToString());
|
return SellButton.Replace("%RANDOMID%", randomId.ToString());
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,11 +74,12 @@ namespace HISP.Game
|
||||||
return playersNearby;
|
return playersNearby;
|
||||||
|
|
||||||
}
|
}
|
||||||
private static string buildShopInfo(Shop shop)
|
private static string buildShopInfo(Shop shop, IInventory shopperInventory)
|
||||||
{
|
{
|
||||||
string message = "";
|
string message = "";
|
||||||
InventoryItem[] itemList = shop.Inventory.GetItemList();
|
InventoryItem[] itemList = shop.Inventory.GetItemList();
|
||||||
|
|
||||||
|
// Get shops stock
|
||||||
message += Messages.ThingsIAmSelling;
|
message += Messages.ThingsIAmSelling;
|
||||||
foreach (InventoryItem item in itemList)
|
foreach (InventoryItem item in itemList)
|
||||||
{
|
{
|
||||||
|
@ -102,6 +103,32 @@ namespace HISP.Game
|
||||||
message += Messages.FormatItemInformationByIdButton(itemInfo.Id);
|
message += Messages.FormatItemInformationByIdButton(itemInfo.Id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check whats avalilble to be sold
|
||||||
|
message += "^R1" + Messages.ThingsYouSellMe;
|
||||||
|
InventoryItem[] shopperItemList = shopperInventory.GetItemList();
|
||||||
|
|
||||||
|
foreach(InventoryItem shopperitem in shopperItemList)
|
||||||
|
{
|
||||||
|
Item.ItemInformation itemInfo = Item.GetItemById(shopperitem.ItemId);
|
||||||
|
|
||||||
|
// Prevent items that cannot be sold to this shopkeeper.
|
||||||
|
if (!shop.CanSell(itemInfo))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
int count = shopperitem.ItemInstances.Count;
|
||||||
|
string countStr = count.ToString();
|
||||||
|
|
||||||
|
|
||||||
|
message += "^R1";
|
||||||
|
message += Messages.FormatShopEntry(itemInfo.IconId, countStr, itemInfo.Name, shop.CalculateSellCost(itemInfo));
|
||||||
|
message += Messages.FormatSellButton(shopperitem.ItemInstances[0].RandomId);
|
||||||
|
message += Messages.FormatSellAllButton(itemInfo.Id);
|
||||||
|
message += Messages.FormatItemInformationButton(shopperitem.ItemInstances[0].RandomId);
|
||||||
|
}
|
||||||
|
|
||||||
|
message += "^R1" + Messages.ExitThisPlace;
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,7 +264,7 @@ namespace HISP.Game
|
||||||
int ShopID = int.Parse(TileArg);
|
int ShopID = int.Parse(TileArg);
|
||||||
Shop shop = Shop.GetShopById(ShopID);
|
Shop shop = Shop.GetShopById(ShopID);
|
||||||
user.LastShoppedAt = shop;
|
user.LastShoppedAt = shop;
|
||||||
message += buildShopInfo(shop);
|
message += buildShopInfo(shop,user.Inventory);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,11 +31,11 @@ namespace HISP.Game
|
||||||
|
|
||||||
public int CalculateBuyCost(Item.ItemInformation item)
|
public int CalculateBuyCost(Item.ItemInformation item)
|
||||||
{
|
{
|
||||||
return Math.Abs(item.SellPrice * (100 / BuyPricePercentage));
|
return (int)Math.Floor((float)item.SellPrice * (100.0 / (float)BuyPricePercentage));
|
||||||
}
|
}
|
||||||
public int CalculateSellCost(Item.ItemInformation item)
|
public int CalculateSellCost(Item.ItemInformation item)
|
||||||
{
|
{
|
||||||
return Math.Abs(item.SellPrice * (100 / SellPricePercentage));
|
return (int)Math.Floor((float)item.SellPrice * (100.0 / (float)SellPricePercentage));
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanSell(Item.ItemInformation item)
|
public bool CanSell(Item.ItemInformation item)
|
||||||
|
|
|
@ -1,161 +0,0 @@
|
||||||
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)
|
|
||||||
{
|
|
||||||
if (addToDatabase)
|
|
||||||
Database.AddItemToInventory(baseShop.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.Infinite = false;
|
|
||||||
inventoryItem.ItemInstances.Add(item);
|
|
||||||
inventoryItems.Add(inventoryItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -73,10 +73,10 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Game\GameExceptions.cs" />
|
<Compile Include="Game\GameExceptions.cs" />
|
||||||
<Compile Include="Game\InventoryItem.cs" />
|
<Compile Include="Game\Inventory\InventoryItem.cs" />
|
||||||
<Compile Include="Game\Quest.cs" />
|
<Compile Include="Game\Quest.cs" />
|
||||||
<Compile Include="Game\Shop.cs" />
|
<Compile Include="Game\Shop.cs" />
|
||||||
<Compile Include="Game\ShopInventory.cs" />
|
<Compile Include="Game\Inventory\ShopInventory.cs" />
|
||||||
<Compile Include="Properties\Resources.Designer.cs">
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
<Compile Include="Server\Database.cs" />
|
<Compile Include="Server\Database.cs" />
|
||||||
<Compile Include="Player\Friends.cs" />
|
<Compile Include="Player\Friends.cs" />
|
||||||
<Compile Include="Server\Gamedata.cs" />
|
<Compile Include="Server\Gamedata.cs" />
|
||||||
<Compile Include="Game\IInventory.cs" />
|
<Compile Include="Game\Inventory\IInventory.cs" />
|
||||||
<Compile Include="Game\DroppedItems.cs" />
|
<Compile Include="Game\DroppedItems.cs" />
|
||||||
<Compile Include="Game\ItemInstance.cs" />
|
<Compile Include="Game\ItemInstance.cs" />
|
||||||
<Compile Include="Server\Logger.cs" />
|
<Compile Include="Server\Logger.cs" />
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
<Compile Include="Game\Meta.cs" />
|
<Compile Include="Game\Meta.cs" />
|
||||||
<Compile Include="Game\Npc.cs" />
|
<Compile Include="Game\Npc.cs" />
|
||||||
<Compile Include="Server\PacketBuilder.cs" />
|
<Compile Include="Server\PacketBuilder.cs" />
|
||||||
<Compile Include="Player\PlayerInventory.cs" />
|
<Compile Include="Game\Inventory\PlayerInventory.cs" />
|
||||||
<Compile Include="Player\PlayerQuests.cs" />
|
<Compile Include="Player\PlayerQuests.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
|
|
@ -1,173 +0,0 @@
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue