diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json
index c9c1de2..8572670 100755
--- a/DataCollection/gamedata.json
+++ b/DataCollection/gamedata.json
@@ -47,7 +47,6 @@
"messages":{
"welcome_format":"Welcome to the land of Horse Isle, %USERNAME%!!",
"motd_format":"Today's Note: %MOTD%",
- "mail_received":"A message has been sent to you from another player. It is in your inventory now.",
"login_format":"Player %USERNAME% has logged in",
"logout_format":"Player %USERNAME% has disconnected",
"profile_save":"Your profile changes were saved.",
@@ -56,6 +55,7 @@
"click_nothing_message":"Nothing interesting here...",
"playtime_timeout":"You have run out of playtime for now. In one minute you will be disconnected. You gain one minute of playtime every 8 minutes. Please come back later!",
"random_movement":"You are sooo %STAT%. You wander dizzily in a different direction.",
+ "movement_key":[{"stat":"THIRSTY", "msg":"dizzily"},{"stat":"HUNGERY", "msg":"stumble"}],
"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...",
diff --git a/Horse Isle Server/HorseIsleServer/Game/Arena.cs b/Horse Isle Server/HorseIsleServer/Game/Arena.cs
index 4cab3a7..34fdd94 100644
--- a/Horse Isle Server/HorseIsleServer/Game/Arena.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Arena.cs
@@ -5,9 +5,7 @@ using HISP.Server;
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Text;
using System.Threading;
-using System.Threading.Tasks;
namespace HISP.Game
{
@@ -90,49 +88,48 @@ namespace HISP.Game
return "jumpingarena2.swf?BONUS=" + bonus + "&STRENGTH=" + strengthCalculator.Total + "&SPEED=" + speedCalculator.Total + "&ENDURANCE=" + enduranceCalculator.Total + "&JUNK=";
case "CONFORMATION":
int baseScore = conformationCalculator.Total + ((entry.EnteredHorse.BasicStats.Groom > 750) ? 1000 : 500);
- int pos = GetUserPos(entry.EnteredUser);
string swf = "dressagearena.swf?BASESCORE=" + baseScore;
int i = 1;
foreach (ArenaEntry ent in Entries.ToArray())
+ {
swf += "&HN" + i.ToString() + "=" + ent.EnteredUser.Username;
- swf += "&POS="+pos+"&JUNK=";
+ if (ent.EnteredUser.Id == entry.EnteredUser.Id)
+ swf += "&POS=" + i.ToString();
+ i++;
+ }
+ swf += "&JUNK=";
return swf;
case "DRAFT":
int draftAbility = Convert.ToInt32(Math.Round((((double)entry.EnteredHorse.BasicStats.Health * 2.0 + (double)entry.EnteredHorse.BasicStats.Shoes * 2.0) + (double)entry.EnteredHorse.BasicStats.Hunger + (double)entry.EnteredHorse.BasicStats.Thirst) / 6.0 + (double)strengthCalculator.Total + ((double)enduranceCalculator.Total / 2.0)));
- pos = GetUserPos(entry.EnteredUser);
swf = "draftarena.swf?DRAFTABILITY=" + draftAbility;
i = 1;
foreach (ArenaEntry ent in Entries.ToArray())
+ {
swf += "&HN" + i.ToString() + "=" + ent.EnteredUser.Username;
- swf += "&POS="+pos+"&J=";
+ if (ent.EnteredUser.Id == entry.EnteredUser.Id)
+ swf += "&POS=" + i.ToString();
+ i++;
+ }
+ swf += "&J=";
return swf;
case "RACING":
int baseSpeed = Convert.ToInt32(Math.Round((((double)entry.EnteredHorse.BasicStats.Health * 2.0 + (double)entry.EnteredHorse.BasicStats.Shoes * 2.0) + (double)entry.EnteredHorse.BasicStats.Hunger + (double)entry.EnteredHorse.BasicStats.Thirst) / 6.0 + (double)speedCalculator.Total));
- pos = GetUserPos(entry.EnteredUser);
swf = "racingarena.swf?BASESPEED=" + baseSpeed + "&ENDURANCE=" + enduranceCalculator.Total;
i = 1;
foreach (ArenaEntry ent in Entries.ToArray())
+ {
swf += "&HN" + i.ToString() + "=" + ent.EnteredUser.Username;
- swf += "&POS=" + pos + "&JUNK=";
+ if (ent.EnteredUser.Id == entry.EnteredUser.Id)
+ swf += "&POS=" + i.ToString();
+ i++;
+ }
+ swf += "&JUNK=";
return swf;
default:
return "test.swf";
}
}
- public int GetUserPos(User user)
- {
- int pos = 0;
- foreach (ArenaEntry entry in Entries.ToArray())
- {
- pos++;
- if (entry.EnteredUser.Id != user.Id)
- break;
- }
-
-
- return pos;
- }
public void Start()
{
if(Entries.Count <= 0)
@@ -183,6 +180,7 @@ namespace HISP.Game
}
byte[] startingUpEventPacket = PacketBuilder.CreateChat(message, PacketBuilder.CHAT_BOTTOM_RIGHT);
byte[] swfModulePacket = PacketBuilder.CreateSwfModulePacket(swf, PacketBuilder.PACKET_SWF_CUTSCENE);
+ Logger.DebugPrint(entry.EnteredUser.Username + " Loading swf: " + swf);
entry.EnteredUser.LoggedinClient.SendPacket(swfModulePacket);
entry.EnteredUser.LoggedinClient.SendPacket(startingUpEventPacket);
}
diff --git a/Horse Isle Server/HorseIsleServer/Server/GameClient.cs b/Horse Isle Server/HorseIsleServer/Server/GameClient.cs
index a5934eb..3c77562 100755
--- a/Horse Isle Server/HorseIsleServer/Server/GameClient.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/GameClient.cs
@@ -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();
}
}
diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
index 5cb1e65..7c7deea 100755
--- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
@@ -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("-"," "));
diff --git a/Horse Isle Server/HorseIsleServer/Server/PacketBuilder.cs b/Horse Isle Server/HorseIsleServer/Server/PacketBuilder.cs
index 4ff68b7..fa6166d 100755
--- a/Horse Isle Server/HorseIsleServer/Server/PacketBuilder.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/PacketBuilder.cs
@@ -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)