Add all the other arenas / competitions

This commit is contained in:
SilicaAndPina 2021-02-18 12:44:01 +13:00
parent 8f0ed68110
commit 7feec48b0c
5 changed files with 106 additions and 77 deletions

View file

@ -333,7 +333,8 @@ namespace HISP.Server
}
catch (Exception e)
{
Logger.ErrorPrint("Exception occured: " + e.Message);
if(!(e is SocketException))
Logger.ErrorPrint("Exception occured: " + e.Message);
Disconnect();
}
}

View file

@ -944,70 +944,72 @@ namespace HISP.Server
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
{
HorseInstance horseInstance = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y);
if (tile.Code.StartsWith("ARENA-"))
if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y))
{
string[] arenaInfo = tile.Code.Split('-');
int arenaId = int.Parse(arenaInfo[1]);
Arena arena = Arena.GetAreaById(arenaId);
if(!Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y);
if (tile.Code.StartsWith("ARENA-"))
{
if(horseInstance.BasicStats.Thirst <= 300)
string[] arenaInfo = tile.Code.Split('-');
int arenaId = int.Parse(arenaInfo[1]);
Arena arena = Arena.GetAreaById(arenaId);
if (!Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
{
byte[] tooThirsty = PacketBuilder.CreateChat(Messages.ArenaTooThirsty, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(tooThirsty);
break;
}
else if (horseInstance.BasicStats.Hunger <= 300)
{
byte[] tooHungry = PacketBuilder.CreateChat(Messages.ArenaTooHungry, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(tooHungry);
break;
}
else if (horseInstance.BasicStats.Shoes <= 300)
{
byte[] needsFarrier = PacketBuilder.CreateChat(Messages.ArenaNeedsFarrier, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(needsFarrier);
break;
}
else if (horseInstance.BasicStats.Tiredness <= 300)
{
byte[] tooTired = PacketBuilder.CreateChat(Messages.ArenaTooTired, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(tooTired);
break;
}
else if (horseInstance.BasicStats.Health <= 300)
{
byte[] needsVet = PacketBuilder.CreateChat(Messages.ArenaNeedsVet, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(needsVet);
break;
}
if (horseInstance.BasicStats.Thirst <= 300)
{
byte[] tooThirsty = PacketBuilder.CreateChat(Messages.ArenaTooThirsty, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(tooThirsty);
break;
}
else if (horseInstance.BasicStats.Hunger <= 300)
{
byte[] tooHungry = PacketBuilder.CreateChat(Messages.ArenaTooHungry, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(tooHungry);
break;
}
else if (horseInstance.BasicStats.Shoes <= 300)
{
byte[] needsFarrier = PacketBuilder.CreateChat(Messages.ArenaNeedsFarrier, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(needsFarrier);
break;
}
else if (horseInstance.BasicStats.Tiredness <= 300)
{
byte[] tooTired = PacketBuilder.CreateChat(Messages.ArenaTooTired, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(tooTired);
break;
}
else if (horseInstance.BasicStats.Health <= 300)
{
byte[] needsVet = PacketBuilder.CreateChat(Messages.ArenaNeedsVet, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(needsVet);
break;
}
if (sender.LoggedinUser.Money >= arena.EntryCost)
{
arena.AddEntry(sender.LoggedinUser, horseInstance);
sender.LoggedinUser.Money -= arena.EntryCost;
if (sender.LoggedinUser.Money >= arena.EntryCost)
{
arena.AddEntry(sender.LoggedinUser, horseInstance);
sender.LoggedinUser.Money -= arena.EntryCost;
byte[] enteredIntoCompetition = PacketBuilder.CreateChat(Messages.ArenaEnteredInto, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(enteredIntoCompetition);
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
break;
byte[] enteredIntoCompetition = PacketBuilder.CreateChat(Messages.ArenaEnteredInto, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(enteredIntoCompetition);
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
break;
}
else
{
byte[] cantAffordEntryFee = PacketBuilder.CreateChat(Messages.ArenaCantAfford, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(cantAffordEntryFee);
break;
}
}
else
{
byte[] cantAffordEntryFee = PacketBuilder.CreateChat(Messages.ArenaCantAfford, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(cantAffordEntryFee);
break;
byte[] allreadyEntered = PacketBuilder.CreateChat(Messages.ArenaAlreadyEntered, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(allreadyEntered);
}
}
else
{
byte[] allreadyEntered = PacketBuilder.CreateChat(Messages.ArenaAlreadyEntered, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(allreadyEntered);
}
}
}
else
@ -2486,6 +2488,9 @@ namespace HISP.Server
if(Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
{
byte[] waitingOnResults = PacketBuilder.CreateChat(Messages.FormatArenaYourScore(score), PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(waitingOnResults);
Arena enteredArena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser);
enteredArena.SubmitScore(sender.LoggedinUser, score);
}
@ -2888,6 +2893,21 @@ namespace HISP.Server
break;
}
break;
case PacketBuilder.SWFMODULE_ARENA:
if (Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
{
Arena arena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser);
byte[] response = PacketBuilder.CreateForwardedSwfRequest(packet);
foreach (Arena.ArenaEntry entry in arena.Entries.ToArray())
{
if (entry.EnteredUser.Id == sender.LoggedinUser.Id)
continue;
if(entry.EnteredUser.LoggedinClient.LoggedIn)
entry.EnteredUser.LoggedinClient.SendPacket(response);
}
}
break;
default:
Logger.DebugPrint("Unknown moduleid : " + module + " packet dump: " + BitConverter.ToString(packet).Replace("-"," "));

View file

@ -89,6 +89,7 @@ namespace HISP.Server
public const byte HORSE_ESCAPE = 0x1E;
public const byte HORSE_CAUGHT = 0x1D;
public const byte SWFMODULE_ARENA = 0x52;
public const byte SWFMODULE_BRICKPOET = 0x5A;
public const byte SWFMODULE_DRAWINGROOM = 0x5B;
@ -184,7 +185,17 @@ namespace HISP.Server
public const byte DIRECTION_TELEPORT = 4;
public const byte DIRECTION_NONE = 10;
public static byte[] CreateForwardedSwfRequest(byte[] request)
{
MemoryStream ms = new MemoryStream();
ms.WriteByte(PacketBuilder.PACKET_SWFMODULE);
ms.Write(request, 0x2, request.Length - 0x4);
ms.WriteByte(PacketBuilder.PACKET_TERMINATOR);
ms.Seek(0x00, SeekOrigin.Begin);
byte[] response = ms.ToArray();
ms.Dispose();
return response;
}
public static byte[] CreateBirdMap(int playerX, int playerY)
{
MemoryStream ms = new MemoryStream();
@ -899,7 +910,6 @@ namespace HISP.Server
ms.Seek(0x00, SeekOrigin.Begin);
byte[] Packet = ms.ToArray();
ms.Dispose();
Logger.DebugPrint("Sending load "+(char)type + swf + " packet");
return Packet;
}
public static byte[] CreateAnnouncement(string announcement)