mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-21 20:25:51 +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
|
@ -560,11 +560,11 @@ namespace HISP.Server
|
|||
craftableItem.GiveItemId = gameData.workshop[i].craftable_items[ii].give_item;
|
||||
craftableItem.MoneyCost = gameData.workshop[i].craftable_items[ii].money_cost;
|
||||
int totalItemsRequired = gameData.workshop[i].craftable_items[ii].required_items.Count;
|
||||
for(int iii = 0; iii < 0; iii++)
|
||||
for(int iii = 0; iii < totalItemsRequired; iii++)
|
||||
{
|
||||
Workshop.RequiredItem requiredItem = new Workshop.RequiredItem();
|
||||
requiredItem.RequiredItemId = totalItemsRequired = gameData.workshop[i].craftable_items[ii].required_items[iii].req_item;
|
||||
requiredItem.RequiredItemId = totalItemsRequired = gameData.workshop[i].craftable_items[ii].required_items[iii].req_quantity;
|
||||
requiredItem.RequiredItemId = gameData.workshop[i].craftable_items[ii].required_items[iii].req_item;
|
||||
requiredItem.RequiredItemCount = gameData.workshop[i].craftable_items[ii].required_items[iii].req_quantity;
|
||||
craftableItem.RequiredItems.Add(requiredItem);
|
||||
}
|
||||
wkShop.CraftableItems.Add(craftableItem);
|
||||
|
@ -761,6 +761,17 @@ namespace HISP.Server
|
|||
Messages.BankDepositedMoneyFormat = gameData.messages.bank.deposit_format;
|
||||
Messages.BankWithdrewMoneyFormat = gameData.messages.bank.withdraw_format;
|
||||
|
||||
// Workshop
|
||||
Messages.WorkshopCraftEntryFormat = gameData.messages.meta.workshop.craft_entry;
|
||||
Messages.WorkshopRequiresFormat = gameData.messages.meta.workshop.requires;
|
||||
Messages.WorkshopRequireEntryFormat = gameData.messages.meta.workshop.require;
|
||||
Messages.WorkshopAnd = gameData.messages.meta.workshop.and;
|
||||
|
||||
Messages.WorkshopNoRoomInInventory = gameData.messages.meta.workshop.no_room;
|
||||
Messages.WorkshopMissingRequiredItem = gameData.messages.meta.workshop.missing_item;
|
||||
Messages.WorkshopCraftingSuccess = gameData.messages.meta.workshop.craft_success;
|
||||
Messages.WorkshopCannotAfford = gameData.messages.meta.workshop.no_money;
|
||||
|
||||
// Horses
|
||||
Messages.AdvancedStatFormat = gameData.messages.meta.horse.stat_format;
|
||||
Messages.BasicStatFormat = gameData.messages.meta.horse.basic_stat_format;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -137,6 +137,7 @@ namespace HISP.Server
|
|||
public const byte ITEM_DRINK = 0x52;
|
||||
public const byte ITEM_BINOCULARS = 0x5C;
|
||||
public const byte ITEM_MAGNIFYING = 0x5D;
|
||||
public const byte ITEM_CRAFT = 0x64;
|
||||
public const byte ITEM_RAKE = 0x5B;
|
||||
public const byte ITEM_SHOVEL = 0x5A;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue