mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-23 21:25:52 +12:00
Implement workshops and fix more quest weirdnes.
This commit is contained in:
parent
cb00f79d48
commit
d5762c3b07
9 changed files with 352 additions and 112 deletions
|
@ -3390,6 +3390,75 @@ namespace HISP.Server
|
|||
byte[] ChatPacket = PacketBuilder.CreateChat(Messages.BinocularsNothing, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(ChatPacket);
|
||||
}
|
||||
break;
|
||||
case PacketBuilder.ITEM_CRAFT:
|
||||
packetStr = Encoding.UTF8.GetString(packet);
|
||||
string craftIdStr = packetStr.Substring(2, packet.Length - 2);
|
||||
int craftId = 0;
|
||||
// Prevent crashing on non-int string.
|
||||
try
|
||||
{
|
||||
craftId = Int32.Parse(craftIdStr);
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to craft using craft id NaN.");
|
||||
return;
|
||||
}
|
||||
if(Workshop.CraftIdExists(craftId))
|
||||
{
|
||||
Workshop.CraftableItem itm = Workshop.GetCraftId(craftId);
|
||||
if(itm.MoneyCost <= sender.LoggedinUser.Money) // Check money
|
||||
{
|
||||
foreach(Workshop.RequiredItem reqItem in itm.RequiredItems)
|
||||
{
|
||||
if (sender.LoggedinUser.Inventory.HasItemId(reqItem.RequiredItemId))
|
||||
{
|
||||
if (sender.LoggedinUser.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances.Count < reqItem.RequiredItemCount)
|
||||
goto failMissingItem;
|
||||
}
|
||||
else
|
||||
goto failMissingItem;
|
||||
}
|
||||
|
||||
// Finally create the items
|
||||
try
|
||||
{
|
||||
sender.LoggedinUser.Inventory.Add(new ItemInstance(itm.GiveItemId));
|
||||
}
|
||||
catch(InventoryException)
|
||||
{
|
||||
byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.WorkshopNoRoomInInventory, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(inventoryFullMessage);
|
||||
break;
|
||||
}
|
||||
sender.LoggedinUser.Money -= itm.MoneyCost;
|
||||
|
||||
// Remove the required items..
|
||||
foreach(Workshop.RequiredItem reqItem in itm.RequiredItems)
|
||||
for(int i = 0; i < reqItem.RequiredItemCount; i++)
|
||||
sender.LoggedinUser.Inventory.Remove(sender.LoggedinUser.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances[0]);
|
||||
|
||||
byte[] itemCraftSuccess = PacketBuilder.CreateChat(Messages.WorkshopCraftingSuccess, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(itemCraftSuccess);
|
||||
break;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.WorkshopCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(cantAffordMessage);
|
||||
break;
|
||||
}
|
||||
|
||||
failMissingItem:
|
||||
{
|
||||
byte[] missingItemMessage = PacketBuilder.CreateChat(Messages.WorkshopMissingRequiredItem, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(missingItemMessage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case PacketBuilder.ITEM_SELL: // Handles selling an item.
|
||||
int totalSold = 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue