Add barns!

This commit is contained in:
SilicaAndPina 2021-02-13 14:29:33 +13:00
parent 62a2e64ea5
commit e32dabb1b4
7 changed files with 267 additions and 13 deletions

View file

@ -530,6 +530,7 @@ namespace HISP.Server
Vet vet = new Vet(id, cost);
Logger.DebugPrint("Registered Vet: " + vet.Id + " selling at: " + vet.PriceMultiplier.ToString(CultureInfo.InvariantCulture));
}
int totalGroomers = gameData.services.groomer.price_multipliers.Count;
for (int i = 0; i < totalGroomers; i++)
{
@ -553,6 +554,19 @@ namespace HISP.Server
Logger.DebugPrint("Registered Farrier: " + farrier.Id);
}
int totalBarns = gameData.services.barn.price_multipliers.Count;
for (int i = 0; i < totalBarns; i++)
{
int id = gameData.services.barn.price_multipliers[i].id;
double tired_cost = gameData.services.barn.price_multipliers[i].tired_cost;
double hunger_cost = gameData.services.barn.price_multipliers[i].hunger_cost;
double thirst_cost = gameData.services.barn.price_multipliers[i].thirst_cost;
Barn barn = new Barn(id, tired_cost, hunger_cost, thirst_cost);
Logger.DebugPrint("Registered Barn: " + barn.Id);
}
// Register Libary Books
int totalBooks = gameData.books.Count;
@ -852,11 +866,21 @@ namespace HISP.Server
Messages.GroomerBestToHisAbilitiesALL = gameData.messages.meta.groomer.groomed_best_all;
Messages.GroomerDontNeed = gameData.messages.meta.groomer.dont_need;
Messages.GroomerHorseCurrentlyAtFormat = gameData.messages.meta.groomer.currently_at;
Messages.GroomerApplyServiceFormat = gameData.messages.meta.groomer.apply_service;
Messages.GroomerApplyServiceForAllFormat = gameData.messages.meta.groomer.apply_all;
// Barn
Messages.BarnHorseFullyFedFormat = gameData.messages.meta.barn.fully_fed;
Messages.BarnCantAffordService = gameData.messages.meta.barn.cant_afford;
Messages.BarnAllHorsesFullyFed = gameData.messages.meta.barn.rested_all;
Messages.BarnServiceNotNeeded = gameData.messages.meta.barn.not_needed;
Messages.BarnHorseStatusFormat = gameData.messages.meta.barn.horse_status;
Messages.BarnHorseMaxed = gameData.messages.meta.barn.horse_maxed;
Messages.BarnLetHorseRelaxFormat = gameData.messages.meta.barn.let_relax;
Messages.BarnLetAllHorsesReleaxFormat = gameData.messages.meta.barn.relax_all;
// Farrier
Messages.FarrierCurrentShoesFormat = gameData.messages.meta.farrier.current_shoes;
Messages.FarrierApplyIronShoesFormat = gameData.messages.meta.farrier.apply_iron;

View file

@ -545,6 +545,114 @@ namespace HISP.Server
}
}
break;
case PacketBuilder.HORSE_BARN_SERVICE:
randomId = 0;
packetStr = Encoding.UTF8.GetString(packet);
randomIdStr = packetStr.Substring(2, packetStr.Length - 4);
if (randomIdStr == "NaN")
break;
try
{
randomId = int.Parse(randomIdStr);
}
catch (Exception)
{
Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet ");
break;
}
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
{
HorseInstance barnHorseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
sender.LoggedinUser.LastViewedHorse = barnHorseInst;
if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y))
{
World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y);
if (tile.Code.StartsWith("BARN-"))
{
string[] barnInfo = tile.Code.Split('-');
int barnId = int.Parse(barnInfo[1]);
Barn barn = Barn.GetBarnById(barnId);
int price = barn.CalculatePrice(barnHorseInst.BasicStats.Tiredness, barnHorseInst.BasicStats.Hunger, barnHorseInst.BasicStats.Thirst); ;
if (sender.LoggedinUser.Money >= price)
{
barnHorseInst.BasicStats.Tiredness = 1000;
barnHorseInst.BasicStats.Hunger = 1000;
barnHorseInst.BasicStats.Thirst = 1000;
sender.LoggedinUser.Money -= price;
byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatBarnHorseFullyFed(barnHorseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(messagePacket);
}
else
{
byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.BarnCantAffordService, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(cantAffordMessage);
break;
}
UpdateArea(sender);
}
}
break;
}
else
{
Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use groomer services on a non existant horse.");
break;
}
case PacketBuilder.HORSE_BARN_SERVICE_ALL:
if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y))
{
World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y);
if (tile.Code.StartsWith("BARN-"))
{
string[] barnInfo = tile.Code.Split('-');
int barnId = int.Parse(barnInfo[1]);
Barn barn = Barn.GetBarnById(barnId);
int totalPrice = 0;
foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList)
{
int price = barn.CalculatePrice(horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst);
if (price > 0)
totalPrice += price;
}
if (totalPrice == 0)
{
byte[] notNeededMessagePacket = PacketBuilder.CreateChat(Messages.BarnServiceNotNeeded, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(notNeededMessagePacket);
break;
}
else if (sender.LoggedinUser.Money >= totalPrice)
{
foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList)
{
horse.BasicStats.Tiredness = 1000;
horse.BasicStats.Thirst = 1000;
horse.BasicStats.Hunger = 1000;
}
byte[] barnedAllHorsesPacket = PacketBuilder.CreateChat(Messages.BarnAllHorsesFullyFed, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(barnedAllHorsesPacket);
sender.LoggedinUser.Money -= totalPrice;
}
else
{
byte[] cannotAffordMessagePacket = PacketBuilder.CreateChat(Messages.BarnCantAffordService, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(cannotAffordMessagePacket);
break;
}
UpdateArea(sender);
}
}
break;
case PacketBuilder.HORSE_GIVE_FEED:
randomId = 0;
packetStr = Encoding.UTF8.GetString(packet);

View file

@ -74,10 +74,12 @@ namespace HISP.Server
public const byte HORSE_VET_SERVICE_ALL = 0x2F;
public const byte HORSE_GROOM_SERVICE_ALL = 0x33;
public const byte HORSE_GROOM_SERVICE = 0x32;
public const byte HORSE_MOUNT = 0x46;
public const byte HORSE_BARN_SERVICE = 0x37;
public const byte HORSE_BARN_SERVICE_ALL = 0x38;
public const byte HORSE_SHOE_IRON = 0x28;
public const byte HORSE_SHOE_STEEL = 0x29;
public const byte HORSE_SHOE_ALL = 0x2E;
public const byte HORSE_MOUNT = 0x46;
public const byte HORSE_DISMOUNT = 0x47;
public const byte HORSE_ESCAPE = 0x1E;
public const byte HORSE_CAUGHT = 0x1D;