diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json index 23a024d..8a68d87 100755 --- a/DataCollection/gamedata.json +++ b/DataCollection/gamedata.json @@ -290,6 +290,13 @@ "horse_relative_format":"^I252^T7A Horse Relative, the %NAME%:^D4c%ID%|VIEW^R1", "maximum_stats":"MAXIMUM STATS:
^AA", "breed_preview_format":"Viewing %NAME%:
%DESCRIPTION%^D4|RETURN TO BREED LIST^R2^H", + "locations":{ + "known_islands":"^HHorse Isle Known Islands", + "known_towns":"^HHorse Isle Communities", + "isle_entry":"^I233^T7 %ISLENAME% ^B1M%MAPXY%^R1", + "town_entry":"^I210^T7 %TOWNNAME% ^B1M%MAPXY%^R1", + "location_description":"^H %AREADESC%" + }, "minigames":{ "singleplayer":"^HSingle Player Mini-Games
These typically earn you money, some can earn you objects", "twoplayer":"^HTwo Player Mini-Games
These all require another player to start the game.", diff --git a/Horse Isle Server/HorseIsleServer/Game/Messages.cs b/Horse Isle Server/HorseIsleServer/Game/Messages.cs index fb4fb1d..466f4fc 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Messages.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Messages.cs @@ -185,6 +185,13 @@ namespace HISP.Game public static string MaxJewelryMessage; public static string RemoveJewelry; + // Locations (Libary) + public static string LocationKnownIslands; + public static string LocationKnownTowns; + public static string LocationIslandFormat; + public static string LocationTownFormat; + public static string LocationDescriptionFormat; + // Minigames (Libary) public static string MinigameSingleplayer; public static string MinigameTwoplayer; @@ -526,8 +533,18 @@ namespace HISP.Game // Click public static string NothingInterestingHere; - - + public static string FormatLocationDescription(string description) + { + return LocationDescriptionFormat.Replace("%AREADESC%", description); + } + public static string FormatIslandLocation(string isleName, string mapXy) + { + return LocationIslandFormat.Replace("%ISLENAME%", isleName).Replace("%MAPXY%",mapXy); + } + public static string FormatTownLocation(string townName, string mapXy) + { + return LocationTownFormat.Replace("%TOWNNAME%", townName).Replace("%MAPXY%",mapXy); + } public static string FormatMinigameEntry(string gameName, string mapXy) { return MinigameEntryFormat.Replace("%GAMENAME%",gameName).Replace("%MAPXY%",mapXy); diff --git a/Horse Isle Server/HorseIsleServer/Game/Meta.cs b/Horse Isle Server/HorseIsleServer/Game/Meta.cs index c82ef8f..aa7c346 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Meta.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Meta.cs @@ -419,7 +419,33 @@ namespace HISP.Game message += Messages.MetaTerminator; return message; } - + public static string BuildLocationsLibary() + { + string message = ""; + message += Messages.LocationKnownIslands; + foreach(World.Waypoint waypoint in World.Waypoints.OrderBy(o => o.Name).ToArray()) + { + if(waypoint.Type == "ISLE") + { + string mapxy = Messages.FormatMapLocation(waypoint.PosX, waypoint.PosY); + message += Messages.FormatIslandLocation(waypoint.Name, mapxy); + message += Messages.FormatLocationDescription(waypoint.Description); + } + } + message += Messages.LocationKnownTowns; + foreach(World.Waypoint waypoint in World.Waypoints.OrderBy(o => o.Name).ToArray()) + { + if(waypoint.Type == "TOWN") + { + string mapxy = Messages.FormatMapLocation(waypoint.PosX, waypoint.PosY); + message += Messages.FormatTownLocation(waypoint.Name, mapxy); + message += Messages.FormatLocationDescription(waypoint.Description); + } + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } public static string BuildHorseReleased() { string message = ""; diff --git a/Horse Isle Server/HorseIsleServer/Game/World.cs b/Horse Isle Server/HorseIsleServer/Game/World.cs index c843fc8..ab50de5 100755 --- a/Horse Isle Server/HorseIsleServer/Game/World.cs +++ b/Horse Isle Server/HorseIsleServer/Game/World.cs @@ -6,7 +6,28 @@ namespace HISP.Game public class World { - public struct Isle + private static Waypoint getWaypoint(string find) + { + foreach(Waypoint waypoint in Waypoints) + { + if(waypoint.Name == find) + return waypoint; + } + + throw new KeyNotFoundException("Waypoint with name "+find+" not found."); + + } + + public struct Waypoint + { + public string Name; + public int PosX; + public int PosY; + public string Type; + public string Description; + public string[] WeatherTypesAvalible; + } + public class Isle { public int StartX; public int EndX; @@ -14,14 +35,25 @@ namespace HISP.Game public int EndY; public int Tileset; public string Name; + + public Waypoint GetWaypoint() + { + return getWaypoint(this.Name); + } + } - public struct Town + public class Town { public int StartX; public int EndX; public int StartY; public int EndY; public string Name; + + public Waypoint GetWaypoint() + { + return getWaypoint(this.Name); + } } public struct Area { @@ -66,12 +98,14 @@ namespace HISP.Game } public static Time ServerTime = new Time(); + public static List Waypoints = new List(); public static List Isles = new List(); public static List Towns = new List(); public static List Areas = new List(); public static List Zones = new List(); public static List SpecialTiles = new List(); + public static void TickWorldClock() { ServerTime.Minutes += 1; diff --git a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs index 0fd2041..1c3149d 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs @@ -89,6 +89,20 @@ namespace HISP.Server World.Isles.Add(isle); } + int totalWaypoints = gameData.places.waypoints.Count; + for(int i = 0; i < totalWaypoints; i++) + { + World.Waypoint waypoint = new World.Waypoint(); + waypoint.Name = gameData.places.waypoints[i].name; + waypoint.PosX = gameData.places.waypoints[i].pos_x; + waypoint.PosY = gameData.places.waypoints[i].pos_y; + waypoint.Type = gameData.places.waypoints[i].type; + waypoint.Description = gameData.places.waypoints[i].description; + waypoint.WeatherTypesAvalible = gameData.places.waypoints[i].weather_avalible.ToObject(); + Logger.DebugPrint("Registered Waypoint: "+waypoint.PosX.ToString()+", "+waypoint.PosY.ToString() +" TYPE: "+waypoint.Type); + World.Waypoints.Add(waypoint); + } + // Register Special Tiles int totalSpecialTiles = gameData.places.special_tiles.Count; for (int i = 0; i < totalSpecialTiles; i++) @@ -588,6 +602,13 @@ namespace HISP.Server Messages.StatMiscNoneRecorded = gameData.messages.meta.misc_stats.no_stats_recorded; Messages.StatMiscEntryFormat = gameData.messages.meta.misc_stats.stat_format; + // Locations (Libary) + Messages.LocationKnownIslands = gameData.messages.meta.libary.locations.known_islands; + Messages.LocationKnownTowns = gameData.messages.meta.libary.locations.known_towns; + Messages.LocationIslandFormat = gameData.messages.meta.libary.locations.isle_entry; + Messages.LocationTownFormat = gameData.messages.meta.libary.locations.town_entry; + Messages.LocationDescriptionFormat = gameData.messages.meta.libary.locations.location_description; + // Minigame (Libary) Messages.MinigameSingleplayer = gameData.messages.meta.libary.minigames.singleplayer; Messages.MinigameTwoplayer = gameData.messages.meta.libary.minigames.twoplayer; diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs index ee0bd6d..b446ac0 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs @@ -1294,14 +1294,19 @@ namespace HISP.Server metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMinigamesLibary()); sender.SendPacket(metaPacket); break; + case "20": // Minigame Rankings + sender.LoggedinUser.MetaPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMinigameRankingsForUser(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; case "21": // Private Notes sender.LoggedinUser.MetaPriority = true; metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPrivateNotes(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; - case "20": // Minigame Rankings + case "22": // View Locations (Libary) sender.LoggedinUser.MetaPriority = true; - metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMinigameRankingsForUser(sender.LoggedinUser)); + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildLocationsLibary()); sender.SendPacket(metaPacket); break; case "24": // Award List