mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-10 23:25:41 +12:00
try and fail at making horses work >_<
This commit is contained in:
parent
60fbc4b3b4
commit
6c01c98a29
5 changed files with 279 additions and 121 deletions
|
@ -173,7 +173,8 @@ namespace HISP.Game.Horse
|
|||
while(wildHorses.Count < 40)
|
||||
{
|
||||
HorseInfo.Breed horseBreed = HorseInfo.Breeds[GameServer.RandomNumberGenerator.Next(0, HorseInfo.Breeds.Count)];
|
||||
|
||||
if (horseBreed.Swf == "")
|
||||
continue;
|
||||
if (horseBreed.SpawnInArea == "none") // no unipegs >_>
|
||||
continue;
|
||||
|
||||
|
|
|
@ -655,6 +655,8 @@ namespace HISP.Game
|
|||
string message = "";
|
||||
foreach(HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList())
|
||||
{
|
||||
if (breed.Swf == "")
|
||||
continue;
|
||||
if (breed.Type == "horse")
|
||||
message += Messages.FormatHorseBreed(breed.Name, breed.Id);
|
||||
else
|
||||
|
|
|
@ -45,7 +45,6 @@ namespace HISP.Player
|
|||
public Inn LastVisitedInn;
|
||||
public HorseInventory HorseInventory;
|
||||
public HorseInstance LastViewedHorse;
|
||||
public HorseInstance Riding;
|
||||
public PlayerQuests Quests;
|
||||
public Highscore Highscores;
|
||||
public Award Awards;
|
||||
|
|
|
@ -275,7 +275,77 @@ namespace HISP.Server
|
|||
string ridingHorseMessage = Messages.FormatHorseRidingMessage(horseInst.Name);
|
||||
byte[] ridingHorseMessagePacket = PacketBuilder.CreateChat(ridingHorseMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(ridingHorseMessagePacket);
|
||||
sender.LoggedinUser.Riding = horseInst;
|
||||
|
||||
// Determine what sprite to use;
|
||||
int incBy = 0;
|
||||
switch(horseInst.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(horseInst.Breed.Type == "zebra")
|
||||
{
|
||||
incBy = 11;
|
||||
}
|
||||
if (horseInst.Breed.Type == "camel")
|
||||
{
|
||||
if (horseInst.Color == "brown")
|
||||
incBy = 13;
|
||||
if (horseInst.Color == "white")
|
||||
incBy = 14;
|
||||
|
||||
}
|
||||
if (horseInst.Breed.Type == "unicorn")
|
||||
{
|
||||
incBy = 15;
|
||||
}
|
||||
if (horseInst.Breed.Type == "pegasus")
|
||||
{
|
||||
incBy = 16;
|
||||
}
|
||||
if(horseInst.Breed.Id == 170) // Unipeg
|
||||
{
|
||||
incBy = 17;
|
||||
}
|
||||
|
||||
incBy *= 5;
|
||||
sender.LoggedinUser.Facing += incBy;
|
||||
|
||||
byte[] rideHorsePacket = PacketBuilder.CreateHorseRidePacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, 10, true);
|
||||
Logger.DebugPrint("packet dump: " +BitConverter.ToString(rideHorsePacket).Replace("-", " "));
|
||||
sender.SendPacket(rideHorsePacket);
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -1403,6 +1473,18 @@ namespace HISP.Server
|
|||
|
||||
|
||||
|
||||
int onHorse = 0;
|
||||
int facing = sender.LoggedinUser.Facing;
|
||||
while (facing >= 5)
|
||||
{
|
||||
facing = facing - 5;
|
||||
onHorse++;
|
||||
}
|
||||
byte direction = 0;
|
||||
int newX = loggedInUser.X;
|
||||
int newY = loggedInUser.Y;
|
||||
bool moveTwo = false;
|
||||
|
||||
if (movementDirection == PacketBuilder.MOVE_ESCAPE)
|
||||
{
|
||||
|
||||
|
@ -1410,9 +1492,6 @@ namespace HISP.Server
|
|||
if (World.InSpecialTile(loggedInUser.X, loggedInUser.Y))
|
||||
{
|
||||
|
||||
int newX = loggedInUser.X;
|
||||
int newY = loggedInUser.Y;
|
||||
|
||||
World.SpecialTile tile = World.GetSpecialTile(loggedInUser.X, loggedInUser.Y);
|
||||
if (tile.ExitX != 0)
|
||||
newX = tile.ExitX;
|
||||
|
@ -1448,74 +1527,70 @@ namespace HISP.Server
|
|||
Direction = PacketBuilder.DIRECTION_DOWN;
|
||||
}
|
||||
|
||||
|
||||
loggedInUser.Facing = Direction + (onHorse * 5);
|
||||
Logger.DebugPrint("Exiting player: " + loggedInUser.Username + " to: " + loggedInUser.X + "," + loggedInUser.Y);
|
||||
byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, Direction, Direction, true);
|
||||
byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, Direction, true);
|
||||
sender.SendPacket(moveResponse);
|
||||
Update(sender);
|
||||
return;
|
||||
}
|
||||
|
||||
if (movementDirection == PacketBuilder.MOVE_UP)
|
||||
{
|
||||
direction = PacketBuilder.DIRECTION_UP;
|
||||
if (Map.CheckPassable(newX, newY - 1))
|
||||
newY -= 1;
|
||||
|
||||
|
||||
|
||||
loggedInUser.Facing = PacketBuilder.DIRECTION_UP;
|
||||
if (Map.CheckPassable(loggedInUser.X, loggedInUser.Y - 1))
|
||||
{
|
||||
loggedInUser.Y -= 1;
|
||||
|
||||
byte[] moveUpResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, sender.LoggedinUser.Facing, PacketBuilder.DIRECTION_UP, true);
|
||||
sender.SendPacket(moveUpResponse);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] moveUpResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, sender.LoggedinUser.Facing, PacketBuilder.DIRECTION_NONE, false);
|
||||
sender.SendPacket(moveUpResponse);
|
||||
}
|
||||
if (loggedInUser.Facing == (direction + (onHorse * 5))&& onHorse != 0) // Double move
|
||||
if (Map.CheckPassable(newX, newY - 1))
|
||||
{
|
||||
newY -= 1;
|
||||
moveTwo = true;
|
||||
}
|
||||
}
|
||||
else if (movementDirection == PacketBuilder.MOVE_LEFT)
|
||||
{
|
||||
loggedInUser.Facing = PacketBuilder.DIRECTION_LEFT;
|
||||
if (Map.CheckPassable(loggedInUser.X - 1, loggedInUser.Y))
|
||||
{
|
||||
loggedInUser.X -= 1;
|
||||
byte[] moveLeftResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_LEFT, true);
|
||||
sender.SendPacket(moveLeftResponse);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] moveLeftResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_NONE, false);
|
||||
sender.SendPacket(moveLeftResponse);
|
||||
}
|
||||
direction = PacketBuilder.DIRECTION_LEFT;
|
||||
if (Map.CheckPassable(newX - 1, newY))
|
||||
newX -= 1;
|
||||
|
||||
|
||||
if (loggedInUser.Facing == (direction + (onHorse * 5)) && onHorse != 0) // Double move
|
||||
if (Map.CheckPassable(newX - 1, newY))
|
||||
{
|
||||
newX -= 1;
|
||||
moveTwo = true;
|
||||
}
|
||||
}
|
||||
else if (movementDirection == PacketBuilder.MOVE_RIGHT)
|
||||
{
|
||||
loggedInUser.Facing = PacketBuilder.DIRECTION_RIGHT;
|
||||
if (Map.CheckPassable(loggedInUser.X + 1, loggedInUser.Y))
|
||||
{
|
||||
loggedInUser.X += 1;
|
||||
byte[] moveLeftResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_RIGHT, true);
|
||||
sender.SendPacket(moveLeftResponse);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] moveLeftResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_NONE, false);
|
||||
sender.SendPacket(moveLeftResponse);
|
||||
}
|
||||
direction = PacketBuilder.DIRECTION_RIGHT;
|
||||
if (Map.CheckPassable(newX + 1, newY))
|
||||
newX += 1;
|
||||
|
||||
|
||||
if (loggedInUser.Facing == (direction + (onHorse * 5)) && onHorse != 0) // Double move
|
||||
if (Map.CheckPassable(newX + 1, newY))
|
||||
{
|
||||
newX += 1;
|
||||
moveTwo = true;
|
||||
}
|
||||
}
|
||||
else if (movementDirection == PacketBuilder.MOVE_DOWN)
|
||||
{
|
||||
loggedInUser.Facing = PacketBuilder.DIRECTION_DOWN;
|
||||
if (Map.CheckPassable(loggedInUser.X, loggedInUser.Y + 1))
|
||||
{
|
||||
loggedInUser.Y += 1;
|
||||
byte[] moveDownResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_DOWN, true);
|
||||
sender.SendPacket(moveDownResponse);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] moveDownResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_NONE, false);
|
||||
sender.SendPacket(moveDownResponse);
|
||||
}
|
||||
direction = PacketBuilder.DIRECTION_DOWN;
|
||||
if (Map.CheckPassable(newX, newY + 1))
|
||||
newY += 1;
|
||||
|
||||
|
||||
if (loggedInUser.Facing == (direction + (onHorse * 5)) && onHorse != 0) // Double move
|
||||
if (Map.CheckPassable(newX, newY + 1))
|
||||
{
|
||||
newY += 1;
|
||||
moveTwo = true;
|
||||
}
|
||||
}
|
||||
else if(movementDirection == PacketBuilder.MOVE_UPDATE)
|
||||
{
|
||||
|
@ -1523,6 +1598,21 @@ namespace HISP.Server
|
|||
return;
|
||||
}
|
||||
|
||||
if(loggedInUser.Y != newY || loggedInUser.X != newX)
|
||||
{
|
||||
loggedInUser.Facing = direction + (onHorse * 5);
|
||||
if (moveTwo)
|
||||
direction += 20;
|
||||
loggedInUser.Y = newY;
|
||||
loggedInUser.X = newX;
|
||||
byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, direction, true);
|
||||
sender.SendPacket(moveResponse);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_NONE, false);
|
||||
sender.SendPacket(moveResponse);
|
||||
}
|
||||
|
||||
Update(sender);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using System.IO;
|
||||
using System.Text;
|
||||
using HISP.Game;
|
||||
using HISP.Game.Horse;
|
||||
using HISP.Game.SwfModules;
|
||||
|
||||
namespace HISP.Server
|
||||
|
@ -96,6 +97,7 @@ namespace HISP.Server
|
|||
public const byte MOVE_ESCAPE = 0x18;
|
||||
public const byte MOVE_UPDATE = 0x0A;
|
||||
|
||||
|
||||
public const byte CHAT_BOTTOM_LEFT = 0x14;
|
||||
public const byte CHAT_BOTTOM_RIGHT = 0x15;
|
||||
public const byte CHAT_DM_RIGHT = 0x16;
|
||||
|
@ -275,6 +277,33 @@ namespace HISP.Server
|
|||
return Packet;
|
||||
}
|
||||
|
||||
public static byte[] CreateHorseRidePacket(int x, int y, int charId, int facing, int direction, bool walk)
|
||||
{
|
||||
// Header information
|
||||
MemoryStream ms = new MemoryStream();
|
||||
ms.WriteByte(PACKET_MOVE);
|
||||
|
||||
ms.WriteByte((byte)(((x - 4) / 64) + 20)); //1
|
||||
ms.WriteByte((byte)(((x - 4) % 64) + 20)); //2
|
||||
|
||||
ms.WriteByte((byte)(((y - 1) / 64) + 20)); //3
|
||||
ms.WriteByte((byte)(((y - 1) % 64) + 20)); //4
|
||||
|
||||
ms.WriteByte((byte)(facing + 20)); //5
|
||||
|
||||
ms.WriteByte((byte)((charId / 64) + 20)); //6
|
||||
ms.WriteByte((byte)((charId % 64) + 20)); //7
|
||||
|
||||
ms.WriteByte((byte)(direction + 20)); //8
|
||||
|
||||
ms.WriteByte((byte)(Convert.ToInt32(walk) + 20)); //9\
|
||||
ms.WriteByte(PACKET_TERMINATOR);
|
||||
ms.Seek(0x00, SeekOrigin.Begin);
|
||||
byte[] packetData = ms.ToArray();
|
||||
ms.Dispose();
|
||||
return packetData;
|
||||
}
|
||||
|
||||
public static byte[] CreateMovementPacket(int x, int y,int charId,int facing, int direction, bool walk)
|
||||
{
|
||||
// Header information
|
||||
|
@ -291,116 +320,153 @@ namespace HISP.Server
|
|||
|
||||
ms.WriteByte((byte)((charId / 64) + 20)); //6
|
||||
ms.WriteByte((byte)((charId % 64) + 20)); //7
|
||||
|
||||
ms.WriteByte((byte)(direction + 20)); //8
|
||||
|
||||
ms.WriteByte((byte)(Convert.ToInt32(walk) + 20)); //9
|
||||
|
||||
// Map Data
|
||||
|
||||
if (direction >= 20)
|
||||
// Map Data
|
||||
bool moveTwo = false;
|
||||
if(direction >= 20)
|
||||
{
|
||||
direction -= 20;
|
||||
moveTwo = true;
|
||||
}
|
||||
|
||||
|
||||
int ystart = y - 4;
|
||||
int xstart = x - 6;
|
||||
|
||||
if (direction == DIRECTION_UP)
|
||||
{
|
||||
for (int relx = 0; relx <= 12; relx++)
|
||||
int totalY = 0;
|
||||
if (moveTwo)
|
||||
totalY = 1;
|
||||
|
||||
for (int relY = totalY; relY >= 0; relY--)
|
||||
{
|
||||
int tileId = Map.GetTileId(xstart + relx, ystart, false);
|
||||
int otileId = Map.GetTileId(xstart + relx, ystart, true);
|
||||
|
||||
if (tileId >= 190)
|
||||
for (int relx = 0; relx <= 12; relx++)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
tileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)tileId);
|
||||
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);
|
||||
|
||||
|
||||
if (otileId >= 190)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
otileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)otileId);
|
||||
}
|
||||
}
|
||||
|
||||
if (direction == DIRECTION_LEFT)
|
||||
{
|
||||
for (int rely = 0; rely <= 9; rely++)
|
||||
int totalX = 0;
|
||||
if (moveTwo)
|
||||
totalX = 1;
|
||||
|
||||
for (int relX = totalX; relX >= 0; relX--)
|
||||
{
|
||||
int tileId = Map.GetTileId(xstart, ystart + rely, false);
|
||||
int otileId = Map.GetTileId(xstart, ystart + rely, true);
|
||||
|
||||
|
||||
|
||||
if (tileId >= 190)
|
||||
for (int rely = 0; rely <= 9; rely++)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
tileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)tileId);
|
||||
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);
|
||||
|
||||
|
||||
if (otileId >= 190)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
otileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)otileId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (direction == DIRECTION_RIGHT)
|
||||
{
|
||||
for (int rely = 0; rely <= 9; rely++)
|
||||
int totalX = 0;
|
||||
if (moveTwo)
|
||||
totalX = 1;
|
||||
|
||||
for (int relX = 0; relX <= totalX; relX++)
|
||||
{
|
||||
int tileId = Map.GetTileId(xstart + 12, ystart + rely, false);
|
||||
int otileId = Map.GetTileId(xstart + 12, ystart + rely, true);
|
||||
|
||||
|
||||
if (tileId >= 190)
|
||||
for (int rely = 0; rely <= 9; rely++)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
tileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)tileId);
|
||||
int tileId = Map.GetTileId(xstart + relX + 12, ystart + rely, false);
|
||||
int otileId = Map.GetTileId(xstart + relX + 12, 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);
|
||||
|
||||
if (otileId >= 190)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
otileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)otileId);
|
||||
}
|
||||
}
|
||||
|
||||
if (direction == DIRECTION_DOWN)
|
||||
{
|
||||
for (int relx = 0; relx <= 12; relx++)
|
||||
int totalY = 0;
|
||||
if (moveTwo)
|
||||
totalY = 1;
|
||||
|
||||
for (int relY = totalY; relY >= 0; relY--)
|
||||
{
|
||||
int tileId = Map.GetTileId(xstart + relx, ystart + 9, false);
|
||||
int otileId = Map.GetTileId(xstart + relx, ystart + 9, true);
|
||||
|
||||
|
||||
if (tileId >= 190)
|
||||
for (int relx = 0; relx <= 12; relx++)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
tileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)tileId);
|
||||
int tileId = Map.GetTileId(xstart + relx, ystart + relY + 9 , false);
|
||||
int otileId = Map.GetTileId(xstart + relx, ystart + relY + 9, 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);
|
||||
|
||||
if (otileId >= 190)
|
||||
{
|
||||
ms.WriteByte((byte)190);
|
||||
otileId -= 100;
|
||||
}
|
||||
ms.WriteByte((byte)otileId);
|
||||
}
|
||||
|
||||
}
|
||||
if (direction == DIRECTION_TELEPORT)
|
||||
{
|
||||
|
@ -436,7 +502,7 @@ namespace HISP.Server
|
|||
byte[] Packet = ms.ToArray();
|
||||
ms.Dispose();
|
||||
|
||||
//Logger.DebugPrint(BitConverter.ToString(Packet).Replace("-", " "));
|
||||
Logger.DebugPrint(BitConverter.ToString(Packet).Replace("-", " "));
|
||||
return Packet;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue