mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-07 13:45:42 +12:00
Add telescope, and shortcuts
This commit is contained in:
parent
8714966822
commit
e6b0282245
7 changed files with 206 additions and 110 deletions
|
@ -58,6 +58,7 @@
|
|||
"random_movement":"You are sooo <B>%STAT%</B>. You wander dizzily in a different direction.",
|
||||
"incorrect_password":"Incorrect. You will have to find the correct answer somewhere...",
|
||||
"player_here":"%USERNAME% here",
|
||||
"no_telescope":"You do not have a telescope to use! You try making circles with your hands and placing them in front of one eye, but it is of minimal aid...",
|
||||
"treasure":{
|
||||
"pirate_treasure":"Wow! You found buried treasure worth $%PRIZE%! Gotta love those pirates!",
|
||||
"pot_of_gold":"YEA! You found the fabled pot of gold at the end of the rainbow! It was worth $%PRIZE%!"
|
||||
|
|
|
@ -643,6 +643,9 @@ namespace HISP.Game
|
|||
public static string LongFullLine;
|
||||
public static string MetaTerminator;
|
||||
|
||||
// Shortcuts
|
||||
public static string NoTelescope;
|
||||
|
||||
// Drawing room
|
||||
public static string DrawingLastToDrawFormat;
|
||||
public static string DrawingContentsSavedInSlotFormat;
|
||||
|
|
|
@ -82,6 +82,7 @@ namespace HISP.Player
|
|||
public Inn LastVisitedInn;
|
||||
public HorseInventory HorseInventory;
|
||||
public HorseInstance LastViewedHorse;
|
||||
public int LastRiddenHorse = 0;
|
||||
public HorseInstance CurrentlyRidingHorse;
|
||||
public Tracking TrackedItems;
|
||||
public Ranch OwnedRanch = null;
|
||||
|
|
|
@ -283,6 +283,9 @@ namespace HISP.Server
|
|||
case PacketBuilder.PACKET_NPC:
|
||||
GameServer.OnNpcInteraction(this, Packet);
|
||||
break;
|
||||
case PacketBuilder.PACKET_BIRDMAP:
|
||||
GameServer.OnBirdMapRequested(this, Packet);
|
||||
break;
|
||||
case PacketBuilder.PACKET_SWFMODULE:
|
||||
GameServer.OnSwfModuleCommunication(this, Packet);
|
||||
break;
|
||||
|
|
|
@ -1300,6 +1300,9 @@ namespace HISP.Server
|
|||
Messages.PasswordEntry = gameData.messages.meta.password_input;
|
||||
Messages.VenusFlyTrapFormat = gameData.messages.meta.venus_flytrap_format;
|
||||
|
||||
// Shortcut
|
||||
Messages.NoTelescope = gameData.messages.no_telescope;
|
||||
|
||||
// Inn
|
||||
Messages.InnBuyMeal = gameData.messages.meta.inn.buy_meal;
|
||||
Messages.InnBuyRest = gameData.messages.meta.inn.buy_rest;
|
||||
|
|
|
@ -115,7 +115,25 @@ namespace HISP.Server
|
|||
sender.SendPacket(crossDomainPolicyResponse);
|
||||
}
|
||||
|
||||
public static void OnBirdMapRequested(GameClient sender, byte[] packet)
|
||||
{
|
||||
if (!sender.LoggedIn)
|
||||
{
|
||||
Logger.ErrorPrint(sender.RemoteIp + " Requested Bird Map when not logged in.");
|
||||
return;
|
||||
}
|
||||
|
||||
if(sender.LoggedinUser.Inventory.HasItemId(Item.Telescope))
|
||||
{
|
||||
byte[] birdMapPacket = PacketBuilder.CreateBirdMap(sender.LoggedinUser.X, sender.LoggedinUser.Y);
|
||||
sender.SendPacket(birdMapPacket);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] noTelescopeMessage = PacketBuilder.CreateChat(Messages.NoTelescope, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(noTelescopeMessage);
|
||||
}
|
||||
}
|
||||
public static void OnHorseInteraction(GameClient sender, byte[] packet)
|
||||
{
|
||||
if (!sender.LoggedIn)
|
||||
|
@ -216,9 +234,6 @@ namespace HISP.Server
|
|||
if (horsePetInst.BasicStats.Tiredness - randTiredMinus <= 0)
|
||||
msgs += Messages.HorsePetTooTired;
|
||||
|
||||
|
||||
|
||||
|
||||
horsePetInst.BasicStats.Tiredness -= randTiredMinus;
|
||||
horsePetInst.BasicStats.Mood += randMoodAddition;
|
||||
|
||||
|
@ -1087,6 +1102,21 @@ namespace HISP.Server
|
|||
randomId = 0;
|
||||
packetStr = Encoding.UTF8.GetString(packet);
|
||||
randomIdStr = packetStr.Substring(2, packetStr.Length - 4);
|
||||
|
||||
if(randomIdStr == "") // F7 Shortcut
|
||||
{
|
||||
if(sender.LoggedinUser.CurrentlyRidingHorse != null)
|
||||
{
|
||||
StopRidingHorse(sender);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(sender.LoggedinUser.HorseInventory.HorseIdExist(sender.LoggedinUser.LastRiddenHorse))
|
||||
StartRidingHorse(sender, sender.LoggedinUser.LastRiddenHorse);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
randomId = int.Parse(randomIdStr);
|
||||
|
@ -1099,18 +1129,7 @@ namespace HISP.Server
|
|||
}
|
||||
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
|
||||
{
|
||||
sender.LoggedinUser.CurrentlyRidingHorse = null;
|
||||
|
||||
byte[] stopRidingHorseMessagePacket = PacketBuilder.CreateChat(Messages.HorseStopRidingMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(stopRidingHorseMessagePacket);
|
||||
|
||||
|
||||
sender.LoggedinUser.Facing %= 5;
|
||||
byte[] rideHorsePacket = PacketBuilder.CreateHorseRidePacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, 10, true);
|
||||
sender.SendPacket(rideHorsePacket);
|
||||
sender.LoggedinUser.NoClip = false;
|
||||
|
||||
UpdateUserInfo(sender.LoggedinUser);
|
||||
StopRidingHorse(sender);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1134,100 +1153,7 @@ namespace HISP.Server
|
|||
}
|
||||
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
|
||||
{
|
||||
HorseInstance horseMountInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
|
||||
|
||||
if(horseMountInst.Equipment.Saddle == null || horseMountInst.Equipment.SaddlePad == null || horseMountInst.Equipment.Bridle == null)
|
||||
{
|
||||
byte[] horseNotTackedMessage = PacketBuilder.CreateChat(Messages.HorseCannotMountUntilTackedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(horseNotTackedMessage);
|
||||
break;
|
||||
}
|
||||
|
||||
string ridingHorseMessage = Messages.FormatHorseRidingMessage(horseMountInst.Name);
|
||||
byte[] ridingHorseMessagePacket = PacketBuilder.CreateChat(ridingHorseMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(ridingHorseMessagePacket);
|
||||
|
||||
sender.LoggedinUser.CurrentlyRidingHorse = horseMountInst;
|
||||
|
||||
// Determine what sprite to use;
|
||||
int incBy = 0;
|
||||
switch(horseMountInst.Color)
|
||||
{
|
||||
case "brown":
|
||||
incBy = 1;
|
||||
break;
|
||||
case "cremello":
|
||||
case "white":
|
||||
incBy = 2;
|
||||
break;
|
||||
case "black":
|
||||
incBy = 3;
|
||||
break;
|
||||
case "chestnut":
|
||||
incBy = 4;
|
||||
break;
|
||||
case "bay":
|
||||
incBy = 5;
|
||||
break;
|
||||
case "grey":
|
||||
incBy = 6;
|
||||
break;
|
||||
case "dun":
|
||||
incBy = 7;
|
||||
break;
|
||||
case "palomino":
|
||||
incBy = 8;
|
||||
break;
|
||||
case "roan":
|
||||
incBy = 9;
|
||||
break;
|
||||
case "pinto":
|
||||
incBy = 10;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if(horseMountInst.Breed.Type == "zebra")
|
||||
{
|
||||
incBy = 11;
|
||||
}
|
||||
if(horseMountInst.Breed.Id == 5) // Appaloosa
|
||||
{
|
||||
if(horseMountInst.Color == "brown")
|
||||
incBy = 12;
|
||||
}
|
||||
if (horseMountInst.Breed.Type == "camel")
|
||||
{
|
||||
if (horseMountInst.Color == "brown")
|
||||
incBy = 13;
|
||||
if (horseMountInst.Color == "white")
|
||||
incBy = 14;
|
||||
|
||||
}
|
||||
if (horseMountInst.Breed.Type == "unicorn")
|
||||
{
|
||||
incBy = 15;
|
||||
}
|
||||
if (horseMountInst.Breed.Type == "pegasus")
|
||||
{
|
||||
incBy = 16;
|
||||
sender.LoggedinUser.NoClip = true;
|
||||
}
|
||||
if(horseMountInst.Breed.Id == 170) // Unipeg
|
||||
{
|
||||
incBy = 17;
|
||||
sender.LoggedinUser.NoClip = true;
|
||||
}
|
||||
|
||||
incBy *= 5;
|
||||
sender.LoggedinUser.Facing %= 5;
|
||||
sender.LoggedinUser.Facing += incBy;
|
||||
|
||||
|
||||
byte[] rideHorsePacket = PacketBuilder.CreateHorseRidePacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, 10, true);
|
||||
sender.SendPacket(rideHorsePacket);
|
||||
|
||||
UpdateUserInfo(sender.LoggedinUser);
|
||||
StartRidingHorse(sender, randomId);
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
@ -4112,6 +4038,11 @@ namespace HISP.Server
|
|||
|
||||
sender.LoggedinUser.Teleport(sender.LoggedinUser.OwnedRanch.X, sender.LoggedinUser.OwnedRanch.Y);
|
||||
}
|
||||
if(itm.ItemId == Item.Telescope)
|
||||
{
|
||||
byte[] birdMap = PacketBuilder.CreateBirdMap(sender.LoggedinUser.X, sender.LoggedinUser.Y);
|
||||
sender.SendPacket(birdMap);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + "Tried to use item with undefined action- ID: " + itm.ItemId);
|
||||
|
@ -4935,7 +4866,7 @@ namespace HISP.Server
|
|||
* Get(Some Information)
|
||||
*/
|
||||
|
||||
|
||||
|
||||
public static bool IsUserOnline(int id)
|
||||
{
|
||||
try
|
||||
|
@ -5330,6 +5261,119 @@ namespace HISP.Server
|
|||
/*
|
||||
* Other...
|
||||
*/
|
||||
public static void StartRidingHorse(GameClient sender, int horseRandomId)
|
||||
{
|
||||
HorseInstance horseMountInst = sender.LoggedinUser.HorseInventory.GetHorseById(horseRandomId);
|
||||
|
||||
if (horseMountInst.Equipment.Saddle == null || horseMountInst.Equipment.SaddlePad == null || horseMountInst.Equipment.Bridle == null)
|
||||
{
|
||||
byte[] horseNotTackedMessage = PacketBuilder.CreateChat(Messages.HorseCannotMountUntilTackedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(horseNotTackedMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
string ridingHorseMessage = Messages.FormatHorseRidingMessage(horseMountInst.Name);
|
||||
byte[] ridingHorseMessagePacket = PacketBuilder.CreateChat(ridingHorseMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(ridingHorseMessagePacket);
|
||||
|
||||
sender.LoggedinUser.CurrentlyRidingHorse = horseMountInst;
|
||||
|
||||
// Determine what sprite to use;
|
||||
int incBy = 0;
|
||||
switch (horseMountInst.Color)
|
||||
{
|
||||
case "brown":
|
||||
incBy = 1;
|
||||
break;
|
||||
case "cremello":
|
||||
case "white":
|
||||
incBy = 2;
|
||||
break;
|
||||
case "black":
|
||||
incBy = 3;
|
||||
break;
|
||||
case "chestnut":
|
||||
incBy = 4;
|
||||
break;
|
||||
case "bay":
|
||||
incBy = 5;
|
||||
break;
|
||||
case "grey":
|
||||
incBy = 6;
|
||||
break;
|
||||
case "dun":
|
||||
incBy = 7;
|
||||
break;
|
||||
case "palomino":
|
||||
incBy = 8;
|
||||
break;
|
||||
case "roan":
|
||||
incBy = 9;
|
||||
break;
|
||||
case "pinto":
|
||||
incBy = 10;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (horseMountInst.Breed.Type == "zebra")
|
||||
{
|
||||
incBy = 11;
|
||||
}
|
||||
if (horseMountInst.Breed.Id == 5) // Appaloosa
|
||||
{
|
||||
if (horseMountInst.Color == "brown")
|
||||
incBy = 12;
|
||||
}
|
||||
if (horseMountInst.Breed.Type == "camel")
|
||||
{
|
||||
if (horseMountInst.Color == "brown")
|
||||
incBy = 13;
|
||||
if (horseMountInst.Color == "white")
|
||||
incBy = 14;
|
||||
|
||||
}
|
||||
if (horseMountInst.Breed.Type == "unicorn")
|
||||
{
|
||||
incBy = 15;
|
||||
}
|
||||
if (horseMountInst.Breed.Type == "pegasus")
|
||||
{
|
||||
incBy = 16;
|
||||
sender.LoggedinUser.NoClip = true;
|
||||
}
|
||||
if (horseMountInst.Breed.Id == 170) // Unipeg
|
||||
{
|
||||
incBy = 17;
|
||||
sender.LoggedinUser.NoClip = true;
|
||||
}
|
||||
|
||||
incBy *= 5;
|
||||
sender.LoggedinUser.Facing %= 5;
|
||||
sender.LoggedinUser.Facing += incBy;
|
||||
sender.LoggedinUser.LastRiddenHorse = horseRandomId;
|
||||
|
||||
|
||||
byte[] rideHorsePacket = PacketBuilder.CreateHorseRidePacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, 10, true);
|
||||
sender.SendPacket(rideHorsePacket);
|
||||
|
||||
UpdateUserInfo(sender.LoggedinUser);
|
||||
}
|
||||
public static void StopRidingHorse(GameClient sender)
|
||||
{
|
||||
sender.LoggedinUser.CurrentlyRidingHorse = null;
|
||||
|
||||
byte[] stopRidingHorseMessagePacket = PacketBuilder.CreateChat(Messages.HorseStopRidingMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(stopRidingHorseMessagePacket);
|
||||
|
||||
|
||||
sender.LoggedinUser.Facing %= 5;
|
||||
byte[] rideHorsePacket = PacketBuilder.CreateHorseRidePacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, 10, true);
|
||||
sender.SendPacket(rideHorsePacket);
|
||||
sender.LoggedinUser.NoClip = false;
|
||||
|
||||
UpdateUserInfo(sender.LoggedinUser);
|
||||
}
|
||||
public static bool ProcessMapCodeWithArg(GameClient forClient, World.SpecialTile tile)
|
||||
{
|
||||
string mapCode = tile.Code;
|
||||
|
|
|
@ -26,6 +26,7 @@ namespace HISP.Server
|
|||
public const byte PACKET_SWF_MODULE_FORCE = 0x28;
|
||||
public const byte PACKET_SWF_MODULE_GENTLE = 0x2A;
|
||||
public const byte PACKET_PLACE_INFO = 0x1E;
|
||||
public const byte PACKET_BIRDMAP = 0x76;
|
||||
public const byte PACKET_HORSE = 0x19;
|
||||
public const byte PACKET_AREA_DEFS = 0x79;
|
||||
public const byte PACKET_ITEM_INTERACTION = 0x1E;
|
||||
|
@ -173,6 +174,46 @@ namespace HISP.Server
|
|||
public const byte DIRECTION_TELEPORT = 4;
|
||||
public const byte DIRECTION_NONE = 10;
|
||||
|
||||
|
||||
public static byte[] CreateBirdMap(int playerX, int playerY)
|
||||
{
|
||||
MemoryStream ms = new MemoryStream();
|
||||
|
||||
int xstart = playerX - 24;
|
||||
int ystart = playerY - 15;
|
||||
|
||||
ms.WriteByte(PacketBuilder.PACKET_BIRDMAP);
|
||||
|
||||
for (int rely = 0; rely <= 30; rely++)
|
||||
{
|
||||
for (int relx = 0; relx <= 48; relx++)
|
||||
{
|
||||
int tileId = Map.GetTileId(xstart + relx, ystart + rely, false);
|
||||
int otileId = Map.GetTileId(xstart + relx, ystart + rely, true);
|
||||
|
||||
if (tileId >= 190)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
tileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)tileId);
|
||||
|
||||
if (otileId >= 190)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
otileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)otileId);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
ms.WriteByte(PACKET_TERMINATOR);
|
||||
ms.Seek(0x00, SeekOrigin.Begin);
|
||||
return ms.ToArray();
|
||||
}
|
||||
public static byte[] CreateDrawingUpdatePacket(string Drawing)
|
||||
{
|
||||
MemoryStream ms = new MemoryStream();
|
||||
|
|
Loading…
Add table
Reference in a new issue