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)