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