mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-06 13:15:42 +12:00
1372 lines
58 KiB
C#
Executable file
1372 lines
58 KiB
C#
Executable file
using HISP.Game.Horse;
|
|
using HISP.Game.Inventory;
|
|
using HISP.Game.Services;
|
|
using HISP.Player;
|
|
using HISP.Server;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace HISP.Game
|
|
{
|
|
class Meta
|
|
{
|
|
// Meta
|
|
|
|
private static string buildLocationString(int x, int y)
|
|
{
|
|
string areaString = buildAreaString(x, y);
|
|
if (areaString != "")
|
|
areaString = Messages.LocationFormat.Replace("%META%", areaString);
|
|
return areaString;
|
|
}
|
|
private static string buildAreaString(int x, int y)
|
|
{
|
|
string locationString = "";
|
|
|
|
if (World.InArea(x, y))
|
|
locationString += Messages.AreaFormat.Replace("%AREA%", World.GetArea(x, y).Name);
|
|
if (World.InTown(x, y))
|
|
locationString += Messages.TownFormat.Replace("%TOWN%", World.GetTown(x, y).Name);
|
|
if (World.InIsle(x, y))
|
|
locationString += Messages.IsleFormat.Replace("%ISLE%", World.GetIsle(x, y).Name);
|
|
return locationString;
|
|
}
|
|
|
|
|
|
private static string buildNearbyString(int x, int y)
|
|
{
|
|
string playersNearby = "";
|
|
|
|
User[] nearbyUsers = GameServer.GetNearbyUsers(x, y, true, true);
|
|
if (nearbyUsers.Length > 1)
|
|
{
|
|
playersNearby += Messages.Seperator;
|
|
playersNearby += Messages.NearbyPlayers;
|
|
playersNearby += Messages.Seperator;
|
|
|
|
string usersWest = "";
|
|
string usersNorth = "";
|
|
string usersEast = "";
|
|
string usersSouth = "";
|
|
foreach (User nearbyUser in nearbyUsers)
|
|
{
|
|
if (nearbyUser.X < x)
|
|
{
|
|
usersWest += " " + nearbyUser.Username + " ";
|
|
}
|
|
else if (nearbyUser.X > x)
|
|
{
|
|
usersEast += " " + nearbyUser.Username + " ";
|
|
}
|
|
else if (nearbyUser.Y > y)
|
|
{
|
|
usersSouth += " " + nearbyUser.Username + " ";
|
|
}
|
|
else if (nearbyUser.Y < y)
|
|
{
|
|
usersNorth += " " + nearbyUser.Username + " ";
|
|
}
|
|
}
|
|
|
|
if (usersEast != "")
|
|
playersNearby += " " + Messages.East + usersEast + Messages.Seperator;
|
|
if (usersWest != "")
|
|
playersNearby += " " + Messages.West + usersWest + Messages.Seperator;
|
|
if (usersSouth != "")
|
|
playersNearby += " " + Messages.South + usersSouth + Messages.Seperator;
|
|
if (usersNorth != "")
|
|
playersNearby += " " + Messages.North + usersNorth + Messages.Seperator;
|
|
|
|
|
|
|
|
}
|
|
|
|
return playersNearby;
|
|
|
|
}
|
|
private static string buildShopInfo(Shop shop, IInventory shopperInventory)
|
|
{
|
|
string message = "";
|
|
InventoryItem[] itemList = shop.Inventory.GetItemList();
|
|
|
|
// Get shops stock
|
|
message += Messages.ThingsIAmSelling;
|
|
foreach (InventoryItem item in itemList)
|
|
{
|
|
message += "^R1";
|
|
Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
|
|
|
|
int count = item.ItemInstances.Count;
|
|
string countStr = count.ToString();
|
|
if (item.Infinite)
|
|
countStr = Messages.InfinitySign;
|
|
|
|
|
|
message += Messages.FormatShopEntry(itemInfo.IconId, countStr, itemInfo.Name, shop.CalculateBuyCost(itemInfo));
|
|
|
|
message += Messages.FormatBuyItemButton(itemInfo.Id);
|
|
if (count >= 5)
|
|
message += Messages.FormatBuy5ItemButton(itemInfo.Id);
|
|
if (count >= 25)
|
|
message += Messages.FormatBuy25ItemButton(itemInfo.Id);
|
|
|
|
message += Messages.FormatItemInformationByIdButton(itemInfo.Id);
|
|
|
|
}
|
|
|
|
// Check whats avalilble to be sold
|
|
message += "^R1" + Messages.ThingsYouSellMe;
|
|
InventoryItem[] shopperItemList = shopperInventory.GetItemList();
|
|
|
|
foreach(InventoryItem shopperitem in shopperItemList)
|
|
{
|
|
Item.ItemInformation itemInfo = Item.GetItemById(shopperitem.ItemId);
|
|
|
|
// Prevent items that cannot be sold to this shopkeeper.
|
|
if (!shop.CanSell(itemInfo))
|
|
continue;
|
|
|
|
|
|
int count = shopperitem.ItemInstances.Count;
|
|
string countStr = count.ToString();
|
|
|
|
|
|
message += "^R1";
|
|
message += Messages.FormatShopEntry(itemInfo.IconId, countStr, itemInfo.Name, shop.CalculateSellCost(itemInfo));
|
|
message += Messages.FormatSellButton(shopperitem.ItemInstances[0].RandomId);
|
|
message += Messages.FormatSellAllButton(itemInfo.Id);
|
|
message += Messages.FormatItemInformationButton(shopperitem.ItemInstances[0].RandomId);
|
|
}
|
|
|
|
message += "^R1" + Messages.ExitThisPlace;
|
|
return message;
|
|
}
|
|
|
|
|
|
private static string buildWishingWell(User user)
|
|
{
|
|
string message = "";
|
|
bool hasCoins = user.Inventory.HasItemId(Item.WishingCoin);
|
|
if(!hasCoins)
|
|
{
|
|
message += Messages.NoWishingCoins;
|
|
}
|
|
else
|
|
{
|
|
InventoryItem wishingCoins = user.Inventory.GetItemByItemId(Item.WishingCoin);
|
|
int totalCoins = wishingCoins.ItemInstances.Count;
|
|
message += Messages.FormatNumberOfWishingCoins(totalCoins);
|
|
message += Messages.WishingWellMeta;
|
|
}
|
|
|
|
message += Messages.ExitThisPlace;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
|
|
|
|
}
|
|
|
|
private static string buildCommonInfo(int x, int y)
|
|
{
|
|
string message = "";
|
|
message += buildNearbyString(x, y);
|
|
|
|
// Dropped Items
|
|
DroppedItems.DroppedItem[] Items = DroppedItems.GetItemsAt(x, y);
|
|
if (Items.Length == 0)
|
|
message += Messages.NothingMessage;
|
|
else
|
|
{
|
|
message += Messages.ItemsOnGroundMessage;
|
|
foreach(DroppedItems.DroppedItem item in Items)
|
|
{
|
|
Item.ItemInformation itemInfo = item.instance.GetItemInfo();
|
|
message += Messages.FormatGrabItemMessage(itemInfo.Name, item.instance.RandomId, itemInfo.IconId);
|
|
}
|
|
if(Items.Length > 1)
|
|
message += Messages.GrabAllItemsButton;
|
|
}
|
|
return message;
|
|
}
|
|
|
|
private static string buildWornJewelery(User user)
|
|
{
|
|
string message = Messages.JewelrySelected;
|
|
if (user.EquipedJewelry.Slot1 != null)
|
|
message += Messages.FormatJewelrySlot1(user.EquipedJewelry.Slot1.Name, user.EquipedJewelry.Slot1.IconId);
|
|
if (user.EquipedJewelry.Slot2 != null)
|
|
message += Messages.FormatJewelrySlot2(user.EquipedJewelry.Slot2.Name, user.EquipedJewelry.Slot2.IconId);
|
|
if (user.EquipedJewelry.Slot3 != null)
|
|
message += Messages.FormatJewelrySlot3(user.EquipedJewelry.Slot3.Name, user.EquipedJewelry.Slot3.IconId);
|
|
if (user.EquipedJewelry.Slot4 != null)
|
|
message += Messages.FormatJewelrySlot4(user.EquipedJewelry.Slot4.Name, user.EquipedJewelry.Slot4.IconId);
|
|
|
|
if (message == Messages.JewelrySelected)
|
|
message = Messages.NoJewerlyEquipped;
|
|
|
|
return message;
|
|
}
|
|
|
|
private static string buildMultiroom(string id, User user)
|
|
{
|
|
string message = Messages.MultiroomPlayersParticipating;
|
|
foreach(User userOnTile in GameServer.GetUsersOnSpecialTileCode("MULTIROOM-"+id))
|
|
{
|
|
if (userOnTile.Id == user.Id)
|
|
continue;
|
|
message += Messages.FormatMultiroomParticipent(userOnTile.Username);
|
|
}
|
|
if(id[0] == 'P') // Poet
|
|
{
|
|
int lastPoet = Database.GetLastPlayer(id);
|
|
string username = "";
|
|
if(lastPoet != -1)
|
|
username = Database.GetUsername(lastPoet);
|
|
|
|
message += Messages.FormatLastPoet(username);
|
|
}
|
|
message += Messages.ExitThisPlace;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
private static string buildEquippedCompetitionGear(User user)
|
|
{
|
|
string message = Messages.CompetitionGearSelected;
|
|
if (user.EquipedCompetitionGear.Head != null)
|
|
message += Messages.FormatCompetitionGearHead(user.EquipedCompetitionGear.Head.Name, user.EquipedCompetitionGear.Head.IconId);
|
|
if (user.EquipedCompetitionGear.Body != null)
|
|
message += Messages.FormatCompetitionGearBody(user.EquipedCompetitionGear.Body.Name, user.EquipedCompetitionGear.Body.IconId);
|
|
if (user.EquipedCompetitionGear.Legs != null)
|
|
message += Messages.FormatCompetitionGearLegs(user.EquipedCompetitionGear.Legs.Name, user.EquipedCompetitionGear.Legs.IconId);
|
|
if (user.EquipedCompetitionGear.Feet != null)
|
|
message += Messages.FormatCompetitionGearFeet(user.EquipedCompetitionGear.Feet.Name, user.EquipedCompetitionGear.Feet.IconId);
|
|
|
|
if (message == Messages.CompetitionGearSelected)
|
|
message = Messages.NoCompetitionGear;
|
|
|
|
return message;
|
|
|
|
}
|
|
public static string buildLibary()
|
|
{
|
|
return Messages.LibaryMainMenu + Messages.ExitThisPlace + Messages.MetaTerminator;
|
|
}
|
|
private static string buildNpc(User user, int x, int y)
|
|
{
|
|
string message = "";
|
|
Npc.NpcEntry[] entries = Npc.GetNpcByXAndY(x, y);
|
|
foreach (Npc.NpcEntry ent in entries)
|
|
{
|
|
if (ent.AdminOnly && !user.Administrator)
|
|
continue;
|
|
|
|
if (ent.RequiresQuestIdCompleted != 0)
|
|
if (user.Quests.GetTrackedQuestAmount(ent.RequiresQuestIdNotCompleted) <= 0)
|
|
continue;
|
|
|
|
if (ent.RequiresQuestIdNotCompleted != 0)
|
|
if (user.Quests.GetTrackedQuestAmount(ent.RequiresQuestIdCompleted) >= 1)
|
|
continue;
|
|
|
|
message += Messages.FormatNpcStartChatMessage(ent.IconId, ent.Name, ent.ShortDescription, ent.Id);
|
|
if (ent.LongDescription != "")
|
|
message += Messages.FormatNpcInformationButton(ent.Id);
|
|
message += Messages.FormatNpcTalkButton(ent.Id);
|
|
message += "^R1";
|
|
}
|
|
return message;
|
|
}
|
|
public static string buildVenusFlyTrap(User user)
|
|
{
|
|
int moneyLost = GameServer.RandomNumberGenerator.Next(0, 100);
|
|
if (moneyLost > user.Money)
|
|
moneyLost = user.Money;
|
|
user.Money -= moneyLost;
|
|
return Messages.FormatVenusFlyTrapMeta(moneyLost);
|
|
}
|
|
public static string buildInn(Inn inn)
|
|
{
|
|
string message = Messages.InnBuyMeal;
|
|
foreach(Item.ItemInformation item in inn.MealsOffered)
|
|
{
|
|
message += Messages.FormatInnItemEntry(item.IconId, item.Name, inn.CalculateBuyCost(item), item.Id);
|
|
}
|
|
message += Messages.InnBuyRest;
|
|
foreach (Item.ItemInformation item in inn.RestsOffered)
|
|
{
|
|
message += Messages.FormatInnItemEntry(item.IconId, item.Name, inn.CalculateBuyCost(item), item.Id);
|
|
}
|
|
message += Messages.ExitThisPlace;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
public static string SelectPlayerStatFormat(int statValue)
|
|
{
|
|
int curValue = 1000;
|
|
int devisibleBy = Convert.ToInt32(Math.Floor((decimal)curValue / Messages.StatPlayerFormats.Length));
|
|
|
|
for (int i = 0; i < Messages.StatPlayerFormats.Length; i++)
|
|
{
|
|
curValue -= devisibleBy;
|
|
if (statValue >= curValue)
|
|
return Messages.StatPlayerFormats[i];
|
|
|
|
}
|
|
throw new Exception("A mathematically impossible error occured. please check wether the laws of physics still apply.");
|
|
}
|
|
|
|
public static string BuildHorseReleased()
|
|
{
|
|
string message = "";
|
|
message += Messages.HorseReleasedMeta;
|
|
message += Messages.BackToMapHorse;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
|
|
}
|
|
public static string BuildTopHighscores(string gameName)
|
|
{
|
|
Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameName, 20);
|
|
if (scores.Length <= 0)
|
|
return "ERROR: No scores recorded.";
|
|
string message = "";
|
|
|
|
message += Messages.FormatHighscoreHeader(gameName);
|
|
|
|
for (int i = 0; i < scores.Length; i++)
|
|
{
|
|
message += Messages.FormatHighscoreListEntry(i+1, scores[i].Score, Database.GetUsername(scores[i].UserId), scores[i].TimesPlayed);
|
|
}
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildTopTimes(string gameName)
|
|
{
|
|
Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameName, 20);
|
|
if (scores.Length <= 0)
|
|
return "No times recorded.";
|
|
string message = "";
|
|
|
|
message += Messages.FormatBestTimeHeader(gameName);
|
|
|
|
for (int i = 0; i < scores.Length; i++)
|
|
{
|
|
message += Messages.FormatBestTimeListEntry(i+1, scores[i].Score, Database.GetUsername(scores[i].UserId), scores[i].TimesPlayed);
|
|
}
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildMinigameRankingsForUser(User user)
|
|
{
|
|
string message = Messages.HighscoreHeaderMeta;
|
|
foreach(Highscore.HighscoreTableEntry highscore in user.Highscores.HighscoreList)
|
|
{
|
|
if (highscore.Type == "SCORE")
|
|
message += Messages.FormatHighscoreStat(highscore.GameName, Database.GetRanking(highscore.Score, highscore.GameName), highscore.Score, highscore.TimesPlayed);
|
|
else if(highscore.Type == "TIME")
|
|
message += Messages.FormatBestTimeStat(highscore.GameName, Database.GetRanking(highscore.Score, highscore.GameName), highscore.Score, highscore.TimesPlayed);
|
|
}
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildPrivateNotes(User user)
|
|
{
|
|
string message = "";
|
|
message += Messages.FormatPrivateNotes(user.PrivateNotes);
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildNpcInfo(Npc.NpcEntry npcInfo)
|
|
{
|
|
string message = "";
|
|
message += Messages.FormatNpcInformation(npcInfo.Name, npcInfo.LongDescription);
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildItemInfo(Item.ItemInformation itemInfo)
|
|
{
|
|
string message = "";
|
|
message += Messages.FormatItemInformation(itemInfo.Name, itemInfo.Description);
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildTransportInfo(Transport.TransportPoint transportPoint)
|
|
{
|
|
string message = "";
|
|
// Build list of locations
|
|
for (int i = 0; i < transportPoint.Locations.Length; i++)
|
|
{
|
|
int transportLocationId = transportPoint.Locations[i];
|
|
Transport.TransportLocation transportLocation = Transport.GetTransportLocation(transportLocationId);
|
|
message += Messages.FormatTransportMessage(transportLocation.Type, transportLocation.LocationTitle, transportLocation.Cost, transportLocation.Id, transportLocation.GotoX, transportLocation.GotoY);
|
|
}
|
|
message += Messages.ExitThisPlace;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildStatsMenu(User user)
|
|
{
|
|
string message = Messages.FormatStatsBar(user.Username);
|
|
|
|
string areaString = buildAreaString(user.X, user.Y);
|
|
if (areaString != "")
|
|
message += Messages.FormatStatsArea(areaString);
|
|
message += Messages.FormatMoneyStat(user.Money);
|
|
if(!user.Subscribed)
|
|
message += Messages.FormatFreeTime(user.FreeMinutes);
|
|
message += Messages.FormatPlayerDescriptionForStatsMenu(user.ProfilePage);
|
|
message += Messages.FormatExperience(user.Experience);
|
|
message += Messages.FormatHungryStat(Messages.FormatPlayerStat(SelectPlayerStatFormat(user.Hunger), Messages.StatHunger));
|
|
message += Messages.FormatThirstStat(Messages.FormatPlayerStat(SelectPlayerStatFormat(user.Thirst), Messages.StatThirst));
|
|
message += Messages.FormatTiredStat(Messages.FormatPlayerStat(SelectPlayerStatFormat(user.Thirst), Messages.StatTired));
|
|
message += Messages.FormatGenderStat(user.Gender);
|
|
message += Messages.FormatJewelryStat(buildWornJewelery(user));
|
|
message += Messages.FormatCompetitionGearStat(buildEquippedCompetitionGear(user));
|
|
message += Messages.StatsPrivateNotesButton;
|
|
message += Messages.StatsQuestsButton;
|
|
message += Messages.StatsMinigameRankingButton;
|
|
message += Messages.StatsAwardsButton;
|
|
message += Messages.StatsMiscButton;
|
|
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
|
|
return message;
|
|
}
|
|
|
|
public static string BuildHorseList(User user)
|
|
{
|
|
string message = "";
|
|
WildHorse[] horses = WildHorse.GetHorsesAt(user.X, user.Y);
|
|
if(horses.Length > 0)
|
|
{
|
|
message = Messages.HorsesHere;
|
|
foreach(WildHorse horse in horses)
|
|
{
|
|
message += Messages.FormatWildHorse(horse.Instance.Name, horse.Instance.Breed.Name, horse.Instance.RandomId);
|
|
}
|
|
}
|
|
return message;
|
|
}
|
|
public static string BuildAwardList(User user)
|
|
{
|
|
string message = Messages.AwardHeader;
|
|
if (user.Awards.AwardsEarned.Length <= 0)
|
|
message += Messages.NoAwards;
|
|
else
|
|
foreach(Award.AwardEntry award in user.Awards.AwardsEarned)
|
|
message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus);
|
|
|
|
|
|
|
|
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildQuestLog(User user)
|
|
{
|
|
string message = "";
|
|
message += Messages.QuestLogHeader;
|
|
Quest.QuestEntry[] questList = Quest.GetPublicQuestList();
|
|
foreach (Quest.QuestEntry quest in questList)
|
|
{
|
|
string fmsg = "";
|
|
if (user.Quests.GetTrackedQuestAmount(quest.Id) > 0)
|
|
fmsg = Messages.QuestCompleted;
|
|
else
|
|
fmsg = Messages.QuestNotCompleted;
|
|
|
|
foreach(int questId in quest.RequiresQuestIdCompleteStatsMenu)
|
|
{
|
|
if (user.Quests.GetTrackedQuestAmount(questId) > 0)
|
|
continue;
|
|
fmsg = Messages.QuestNotAvalible;
|
|
break;
|
|
}
|
|
|
|
message += Messages.FormatQuestLogQuest(quest.Title, quest.QuestPointsEarned, quest.Difficulty, fmsg);
|
|
}
|
|
|
|
int totalComplete = Quest.GetTotalQuestsComplete(user);
|
|
int totalQuestPoints = Quest.GetTotalQuestPoints();
|
|
|
|
message += Messages.FormatQuestFooter(totalComplete, questList.Length, user.QuestPoints, totalQuestPoints);
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
|
|
return message;
|
|
}
|
|
|
|
|
|
|
|
public static string BuildNearbyList(User user)
|
|
{
|
|
string message = Messages.NearbyPlayersListHeader;
|
|
User[] nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, false, true);
|
|
foreach (User nearbyUser in nearbyUsers)
|
|
{
|
|
if (nearbyUser.Stealth)
|
|
continue;
|
|
|
|
if (nearbyUser.Id == user.Id)
|
|
continue;
|
|
|
|
|
|
int icon = nearbyUser.GetPlayerListIcon();
|
|
string iconFormat = "";
|
|
if (icon != -1)
|
|
iconFormat = Messages.FormatIconFormat(icon);
|
|
|
|
message += Messages.FormatPlayerEntry(iconFormat, nearbyUser.Username, nearbyUser.Id, (DateTime.UtcNow - nearbyUser.LoginTime).Minutes, nearbyUser.X, nearbyUser.Y, nearbyUser.Idle);
|
|
}
|
|
|
|
message += Messages.PlayerListIconInformation;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
|
|
return message;
|
|
}
|
|
|
|
public static string BuildPlayerListAlphabetical()
|
|
{
|
|
string message = Messages.PlayerListAllAlphabeticalHeader;
|
|
GameClient[] clients = GameServer.ConnectedClients;
|
|
List<User> onlineUsers = new List<User>();
|
|
|
|
foreach (GameClient client in clients)
|
|
{
|
|
if (client.LoggedIn)
|
|
{
|
|
if (client.LoggedinUser.Stealth)
|
|
continue;
|
|
onlineUsers.Add(client.LoggedinUser);
|
|
}
|
|
}
|
|
|
|
onlineUsers = onlineUsers.OrderBy(o => o.Username).ToList();
|
|
|
|
foreach (User onlineUser in onlineUsers)
|
|
{
|
|
|
|
int icon = onlineUser.GetPlayerListIcon();
|
|
string iconFormat = "";
|
|
if (icon != -1)
|
|
iconFormat = Messages.FormatIconFormat(icon);
|
|
|
|
message += Messages.FormatPlayerEntry(iconFormat, onlineUser.Username, onlineUser.Id, (DateTime.UtcNow - onlineUser.LoginTime).Minutes, onlineUser.X, onlineUser.Y, onlineUser.Idle);
|
|
}
|
|
|
|
message += Messages.PlayerListIconInformation;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
|
|
return message;
|
|
}
|
|
|
|
public static string BuildPlayerList()
|
|
{
|
|
string message = Messages.PlayerListAllHeader;
|
|
GameClient[] clients = GameServer.ConnectedClients;
|
|
foreach(GameClient client in clients)
|
|
{
|
|
if(client.LoggedIn)
|
|
{
|
|
if (client.LoggedinUser.Stealth)
|
|
continue;
|
|
|
|
int icon = client.LoggedinUser.GetPlayerListIcon();
|
|
string iconFormat = "";
|
|
if (icon != -1)
|
|
iconFormat = Messages.FormatIconFormat(icon);
|
|
|
|
message += Messages.FormatPlayerEntry(iconFormat, client.LoggedinUser.Username, client.LoggedinUser.Id, (DateTime.UtcNow - client.LoggedinUser.LoginTime).Minutes, client.LoggedinUser.X, client.LoggedinUser.Y, client.LoggedinUser.Idle);
|
|
}
|
|
}
|
|
|
|
message += Messages.PlayerListIconInformation;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
|
|
return message;
|
|
}
|
|
|
|
public static string BuildBuddyList(User user)
|
|
{
|
|
string message = Messages.BuddyListHeader;
|
|
foreach(int id in user.Friends.List.ToArray())
|
|
{
|
|
try
|
|
{
|
|
User friend = GameServer.GetUserById(id);
|
|
if (friend.Stealth)
|
|
continue;
|
|
|
|
int icon = friend.GetPlayerListIcon();
|
|
string iconFormat = "";
|
|
if (icon != -1)
|
|
iconFormat = Messages.FormatIconFormat(icon);
|
|
|
|
message += Messages.FormatOnlineBuddyEntry(iconFormat, friend.Username, friend.Id, (DateTime.UtcNow - friend.LoginTime).Minutes, friend.X, friend.Y);
|
|
|
|
}
|
|
catch (KeyNotFoundException) { }
|
|
|
|
}
|
|
message += Messages.BuddyListOfflineBuddys;
|
|
|
|
foreach(int id in user.Friends.List.ToArray())
|
|
{
|
|
if (GameServer.IsUserOnline(id))
|
|
continue;
|
|
|
|
message += Messages.BuddyListOfflineBuddys;
|
|
string username = Database.GetUsername(id);
|
|
int minutes = (DateTime.UtcNow - Converters.UnixTimeStampToDateTime(Database.GetPlayerLastLogin(id))).Minutes;
|
|
|
|
message += Messages.FormatOfflineBuddyEntry(username, id, minutes);
|
|
}
|
|
|
|
message += Messages.PlayerListIconInformation;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
|
|
return message;
|
|
}
|
|
|
|
public static string BuildBreedViewerLibary(HorseInfo.Breed breed)
|
|
{
|
|
string message = Messages.FormatHorseBreedPreview(breed.Name, breed.Description);
|
|
message += Messages.BreedViewerMaximumStats;
|
|
message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Speed * 2, 0, 0, breed.BaseStats.Speed * 2);
|
|
message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Strength * 2, 0, 0, breed.BaseStats.Strength * 2);
|
|
message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Conformation * 2, 0, 0, breed.BaseStats.Conformation * 2);
|
|
message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Agility * 2, 0, 0, breed.BaseStats.Agility * 2);
|
|
message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Endurance * 2, 0, 0, breed.BaseStats.Endurance * 2);
|
|
message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Inteligence * 2, 0, 0, breed.BaseStats.Inteligence * 2);
|
|
message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Personality * 2, 0, 0, breed.BaseStats.Personality * 2);
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildHorseList()
|
|
{
|
|
string message = "";
|
|
foreach(HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList())
|
|
{
|
|
if (breed.Swf == "")
|
|
continue;
|
|
if (breed.Type == "horse")
|
|
message += Messages.FormatHorseBreed(breed.Name, breed.Id);
|
|
else
|
|
message += Messages.FormatHorseRelative(breed.Name, breed.Id);
|
|
}
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildNpcSearch(string search)
|
|
{
|
|
List<Npc.NpcEntry> foundNpcs = new List<Npc.NpcEntry>();
|
|
foreach(Npc.NpcEntry npc in Npc.NpcList)
|
|
{
|
|
if(npc.Name.ToLower().Contains(search.ToLower()))
|
|
{
|
|
if(npc.LibarySearchable)
|
|
{
|
|
if (foundNpcs.Count >= 5)
|
|
break;
|
|
foundNpcs.Add(npc);
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
string message = Messages.LibaryFindNpcSearchNoResults;
|
|
if(foundNpcs.Count >= 1)
|
|
{
|
|
message = Messages.LibaryFindNpcSearchResultsHeader;
|
|
foreach(Npc.NpcEntry npc in foundNpcs)
|
|
{
|
|
string searchResult = Messages.FormatNpcSearchResult(npc.Name, npc.ShortDescription, npc.X, npc.Y);
|
|
Logger.DebugPrint(searchResult);
|
|
message += searchResult;
|
|
}
|
|
}
|
|
if(foundNpcs.Count >= 5)
|
|
{
|
|
message += Messages.LibaryFindNpcLimit5;
|
|
}
|
|
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
|
|
}
|
|
|
|
public static string BuildFindNpcMenu()
|
|
{
|
|
string message = Messages.LibaryFindNpc;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
private static string buildFountain()
|
|
{
|
|
return Messages.FountainMeta;
|
|
}
|
|
private static string buildPond(User user)
|
|
{
|
|
string message = Messages.PondHeader;
|
|
if(!user.Inventory.HasItemId(Item.FishingPole))
|
|
{
|
|
message += Messages.PondNoFishingPole;
|
|
}
|
|
else if(!user.Inventory.HasItemId(Item.Earthworm))
|
|
{
|
|
message += Messages.PondNoEarthWorms;
|
|
}
|
|
else
|
|
{
|
|
message += Messages.PondGoFishing;
|
|
}
|
|
message += Messages.PondDrinkHereIfSafe;
|
|
foreach(HorseInstance horse in user.HorseInventory.HorseList)
|
|
{
|
|
message += Messages.FormatPondDrinkHorseFormat(horse.Name, horse.BasicStats.Thirst, 1000, horse.RandomId);
|
|
}
|
|
message += Messages.ExitThisPlace;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
private static string buildMudHole(User user)
|
|
{
|
|
string message = "";
|
|
if(user.HorseInventory.HorseList.Length > 0)
|
|
{
|
|
int rngHorseIndex = GameServer.RandomNumberGenerator.Next(0, user.HorseInventory.HorseList.Length);
|
|
HorseInstance horse = user.HorseInventory.HorseList[rngHorseIndex];
|
|
horse.BasicStats.Groom = 0;
|
|
message += Messages.FormatMudHoleGroomDestroyed(horse.Name);
|
|
}
|
|
else
|
|
{
|
|
message += Messages.MudHoleNoHorses;
|
|
}
|
|
message += Messages.ExitThisPlace;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
private static string buildPassword()
|
|
{
|
|
return Messages.PasswordEntry + Messages.ExitThisPlace + Messages.MetaTerminator;
|
|
}
|
|
private static string buildBank(User user)
|
|
{
|
|
double moneyMade = 0;
|
|
if (user.BankInterest > user.BankMoney)
|
|
{
|
|
moneyMade = user.BankInterest - user.BankMoney;
|
|
user.BankMoney = user.BankInterest;
|
|
|
|
}
|
|
user.BankInterest = user.BankMoney;
|
|
|
|
string message = "";
|
|
moneyMade = Math.Floor(moneyMade);
|
|
if (moneyMade > 0)
|
|
message += Messages.FormatBankIntrestMadeMeta(Convert.ToUInt64(moneyMade));
|
|
|
|
message += Messages.FormatBankCarryingMeta(user.Money, Convert.ToUInt64(Math.Floor(user.BankMoney)));
|
|
message += Messages.BankWhatToDo;
|
|
message += Messages.FormatBankOptionsMeta(user.Money, Convert.ToUInt64(Math.Floor(user.BankMoney)));
|
|
message += Messages.ExitThisPlace;
|
|
message += Messages.MetaTerminator;
|
|
|
|
|
|
return message;
|
|
}
|
|
|
|
private static string buildVet(Vet vet, User user)
|
|
{
|
|
string message = "";
|
|
int totalPrice = 0;
|
|
foreach (HorseInstance horse in user.HorseInventory.HorseList)
|
|
{
|
|
message += Messages.FormatVetServiceHorseMeta(horse.Name, horse.BasicStats.Health, 1000);
|
|
|
|
if (horse.BasicStats.Health >= 1000)
|
|
message += Messages.VetSerivcesNotNeeded;
|
|
else
|
|
{
|
|
int price = vet.CalculatePrice(horse.BasicStats.Health);
|
|
totalPrice += price;
|
|
|
|
message += Messages.FormatVetApplyServiceMeta(price, horse.RandomId);
|
|
}
|
|
|
|
}
|
|
message += Messages.FormatVetApplyAllServiceMeta(totalPrice);
|
|
message += Messages.ExitThisPlace;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildSpecialTileInfo(User user, World.SpecialTile specialTile)
|
|
{
|
|
string message = "";
|
|
|
|
if (specialTile.Code == null)
|
|
message += buildLocationString(specialTile.X, specialTile.Y);
|
|
|
|
|
|
if (specialTile.Title != null && specialTile.Title != "")
|
|
message += Messages.FormatTileName(specialTile.Title);
|
|
|
|
|
|
if (specialTile.Description != null && specialTile.Description != "")
|
|
message += specialTile.Description;
|
|
|
|
string npc = buildNpc(user, specialTile.X, specialTile.Y);
|
|
message += npc;
|
|
|
|
if (specialTile.Code == null)
|
|
message += buildCommonInfo(specialTile.X, specialTile.Y);
|
|
else
|
|
{
|
|
|
|
user.MetaPriority = true;
|
|
|
|
string TileCode = specialTile.Code;
|
|
|
|
string TileArg = "";
|
|
if (TileCode.Contains("-"))
|
|
{
|
|
TileArg = TileCode.Split('-')[1];
|
|
TileCode = TileCode.Split('-')[0];
|
|
}
|
|
if (TileCode == "EXITABLE")
|
|
message += Messages.ExitThisPlace;
|
|
|
|
if (TileCode == "TRANSPORT")
|
|
{
|
|
Transport.TransportPoint point = Transport.GetTransportPoint(specialTile.X, specialTile.Y);
|
|
message += Meta.BuildTransportInfo(point);
|
|
}
|
|
|
|
if (TileCode == "STRAWPILE")
|
|
{
|
|
if (user.Inventory.HasItemId(Item.Pitchfork))
|
|
message += Messages.HasPitchforkMeta;
|
|
else
|
|
message += Messages.NoPitchforkMeta;
|
|
}
|
|
|
|
if (TileCode == "STORE")
|
|
{
|
|
int ShopID = int.Parse(TileArg);
|
|
Shop shop = Shop.GetShopById(ShopID);
|
|
user.LastShoppedAt = shop;
|
|
message += buildShopInfo(shop,user.Inventory);
|
|
|
|
}
|
|
if(TileCode == "VET")
|
|
{
|
|
int VetId = int.Parse(TileArg);
|
|
Vet vet = Vet.GetVetById(VetId);
|
|
message += buildVet(vet, user);
|
|
}
|
|
if(TileCode == "BANK")
|
|
{
|
|
message += buildBank(user);
|
|
}
|
|
if(TileCode == "WISHINGWELL")
|
|
{
|
|
message += buildWishingWell(user);
|
|
}
|
|
if(TileCode == "VENUSFLYTRAP")
|
|
{
|
|
message += buildVenusFlyTrap(user);
|
|
}
|
|
if(TileCode == "LIBRARY")
|
|
{
|
|
message += buildLibary();
|
|
}
|
|
if(TileCode == "POND")
|
|
{
|
|
message += buildPond(user);
|
|
}
|
|
if(TileCode == "MUDHOLE")
|
|
{
|
|
message += buildMudHole(user);
|
|
}
|
|
if(TileCode == "MULTIROOM")
|
|
{
|
|
user.MetaPriority = false; // acturally want to track updates here >-<
|
|
message += buildMultiroom(TileArg, user);
|
|
}
|
|
if(TileCode == "PASSWORD")
|
|
{
|
|
message += buildPassword();
|
|
}
|
|
if(TileCode == "INN")
|
|
{
|
|
int InnID = int.Parse(TileArg);
|
|
Inn inn = Inn.GetInnById(InnID);
|
|
user.LastVisitedInn = inn;
|
|
message += buildInn(inn);
|
|
}
|
|
if(TileCode == "FOUNTAIN")
|
|
{
|
|
message += buildFountain();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return message;
|
|
}
|
|
public static string BuildHorseEscapedMessage()
|
|
{
|
|
string message = Messages.HorseEvadedCapture;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildHorseCaughtMessage()
|
|
{
|
|
string message = Messages.YouCapturedTheHorse;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildAbuseReportPage()
|
|
{
|
|
string reportReasons = "";
|
|
foreach(AbuseReport.ReportReason reason in AbuseReport.ReportReasons)
|
|
{
|
|
reportReasons += Messages.FormatAbuseReportReason(reason.Id, reason.Name);
|
|
}
|
|
return Messages.FormatAbuseReportMetaPage(reportReasons);
|
|
}
|
|
private static string buildHorseList(User user)
|
|
{
|
|
string message = "";
|
|
int i = 1;
|
|
foreach (HorseInfo.Category category in HorseInfo.HorseCategories)
|
|
{
|
|
HorseInstance[] horsesInCategory = user.HorseInventory.GetHorsesInCategory(category);
|
|
if (horsesInCategory.Length > 0)
|
|
{
|
|
message += category.Meta;
|
|
foreach (HorseInstance instance in horsesInCategory)
|
|
{
|
|
message += Messages.FormatHorseEntry(i, instance.Name, instance.Breed.Name, instance.RandomId, instance.AutoSell > 0);
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
return message;
|
|
|
|
}
|
|
public static string BuildHorseInventory(User user)
|
|
{
|
|
// TODO: calculate max number based on ranch barns owned.
|
|
string message = Messages.FormatHorseHeader(user.HorseInventory.MaxHorses, user.HorseInventory.HorseList.Length);
|
|
|
|
message += buildHorseList(user);
|
|
message += Messages.ViewBaiscStats;
|
|
message += Messages.ViewAdvancedStats;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildPlayerList(User user)
|
|
{
|
|
string message = "";
|
|
message += Messages.PlayerListHeader;
|
|
message += Messages.PlayerListSelectFromFollowing;
|
|
message += Messages.FormatPlayerBuddyList(user.Friends.Count);
|
|
message += Messages.PlayerListOfNearby;
|
|
message += Messages.FormatPlayerList(GameServer.GetNumberOfPlayers() - 1);
|
|
message += Messages.PlayerListOfPlayersAlphabetically;
|
|
|
|
message += Messages.FormatMapAllBuddiesList(Messages.FormatMapLocations(GameServer.GetAllBuddyLocations(user)));
|
|
message += Messages.FormatMapAllPlayersList(Messages.FormatMapLocations(GameServer.GetAllPlayerLocations(user)));
|
|
|
|
message += Messages.PlayerListAbuseReport;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
|
|
return message;
|
|
}
|
|
public static string BuildInventoryInfo(PlayerInventory inv)
|
|
{
|
|
string message = "";
|
|
message += Messages.FormatPlayerInventoryHeaderMeta(inv.Count, Messages.DefaultInventoryMax);
|
|
InventoryItem[] items = inv.GetItemList();
|
|
foreach(InventoryItem item in items)
|
|
{
|
|
Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
|
|
string title = itemInfo.Name;
|
|
if (item.ItemInstances.Count > 1 && itemInfo.PluralName != "")
|
|
title = itemInfo.PluralName;
|
|
|
|
|
|
message += Messages.FormatPlayerInventoryItemMeta(itemInfo.IconId, item.ItemInstances.Count, title);
|
|
|
|
int randomId = item.ItemInstances[0].RandomId;
|
|
if (itemInfo.Type != "QUEST" && itemInfo.Type != "TEXT" && World.CanDropItems(inv.BaseUser.X, inv.BaseUser.Y))
|
|
message += Messages.FormatItemDropButton(randomId);
|
|
|
|
if (itemInfo.Id == Item.Present || itemInfo.Id == Item.DorothyShoes || itemInfo.Id == Item.Telescope)
|
|
message += Messages.FormatItemUseButton(randomId);
|
|
|
|
if (itemInfo.Type == "CLOTHES" || itemInfo.Type == "JEWELRY")
|
|
message += Messages.FormatWearButton(randomId);
|
|
|
|
if (itemInfo.Type == "TEXT")
|
|
message += Messages.FormatItemReadButton(randomId);
|
|
|
|
if (itemInfo.Type == "PLAYERFOOD")
|
|
message += Messages.FormatItemConsumeButton(randomId);
|
|
|
|
if (Item.IsThrowable(itemInfo.Id))
|
|
message += Messages.FormatItemThrowButton(randomId);
|
|
|
|
message += Messages.FormatItemInformationButton(randomId);
|
|
message += "^R1";
|
|
}
|
|
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildHorseFeedMenu(HorseInstance horse, User user)
|
|
{
|
|
string message = "";
|
|
message += Messages.FormatHorseCurrentStatus(horse.Name);
|
|
message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes);
|
|
message += Messages.HorseHoldingHorseFeed;
|
|
foreach(InventoryItem item in user.Inventory.GetItemList())
|
|
{
|
|
Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo();
|
|
if(itemInfo.Type == "HORSEFOOD")
|
|
{
|
|
message += Messages.FormatHorseFeedEntry(itemInfo.IconId, item.ItemInstances.Count, itemInfo.Name, item.ItemInstances[0].RandomId);
|
|
}
|
|
|
|
}
|
|
message += Messages.BackToHorse;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildAutoSellMenu(HorseInstance horse)
|
|
{
|
|
string message = "";
|
|
message += Messages.FormatAutoSellMenu(horse.AutoSell);
|
|
message += Messages.ExitThisPlace;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
|
|
public static string BuildHorseReleaseConfirmationMessage(HorseInstance horse)
|
|
{
|
|
string message = Messages.FormatHorseAreYouSureMessage(horse.RandomId);
|
|
message += Messages.BackToMapHorse;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildHorseCompanionEquipMenu(HorseInstance horse, User user)
|
|
{
|
|
string message = "";
|
|
message += Messages.FormatHorseCompanionMenuHeader(horse.Name);
|
|
if (horse.Equipment.Companion != null)
|
|
message += Messages.FormatHorseCompanionSelected(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name);
|
|
message += Messages.HorseCompanionMenuCurrentlyAvalibleCompanions;
|
|
foreach (InventoryItem item in user.Inventory.GetItemList())
|
|
{
|
|
Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo();
|
|
if(itemInfo.Type == "COMPANION")
|
|
{
|
|
message += Messages.FormatHorseCompanionOption(itemInfo.IconId, item.ItemInstances.Count, itemInfo.Name, item.ItemId);
|
|
}
|
|
}
|
|
message += Messages.BackToHorse;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildAllBasicStats(User user)
|
|
{
|
|
string message = Messages.HorseAllBasicStats;
|
|
foreach(HorseInstance horse in user.HorseInventory.HorseList)
|
|
{
|
|
message += Messages.FormaHorseAllBasicStatsEntry(horse.Name, horse.Color, horse.Breed.Name, horse.Sex, horse.BasicStats.Experience);
|
|
message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes);
|
|
}
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
public static string BuildHorseDescriptionEditMeta(HorseInstance horse)
|
|
{
|
|
string message = Messages.FormatDescriptionEditMeta(horse.Name, horse.Description);
|
|
message += Messages.BackToHorse;
|
|
return message;
|
|
}
|
|
public static string BuildHorseInformation(HorseInstance horse, User user)
|
|
{
|
|
string message = "";
|
|
message += Messages.FormatHorseName(horse.Name);
|
|
message += Messages.FormatHorseDescription(horse.Description);
|
|
message += Messages.FormatHorseHandsHigh(horse.Color, horse.Breed.Name, horse.Sex, Convert.ToInt32(Math.Floor(HorseInfo.CalculateHands(horse.AdvancedStats.Height))));
|
|
message += Messages.FormatHorseExperience(horse.BasicStats.Experience);
|
|
|
|
if (horse.TrainTimer > 0)
|
|
message += Messages.FormatTrainableIn(horse.TrainTimer);
|
|
else
|
|
message += Messages.HorseIsTrainable;
|
|
|
|
if (user.CurrentlyRidingHorse == null)
|
|
message += Messages.FormatMountButton(horse.RandomId);
|
|
else
|
|
message += Messages.FormatDisMountButton(horse.RandomId);
|
|
|
|
message += Messages.FormatFeedButton(horse.RandomId);
|
|
message += Messages.FormatTackButton(horse.RandomId);
|
|
message += Messages.FormatPetButton(horse.RandomId);
|
|
message += Messages.FormatProfileButton(horse.RandomId);
|
|
|
|
if (horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Bridle == null && horse.Equipment.Companion == null)
|
|
{
|
|
string autoSellMessage = Messages.HorseNoAutoSell;
|
|
if (horse.AutoSell > 0)
|
|
autoSellMessage = Messages.FormatAutoSellPrice(horse.AutoSell);
|
|
message += Messages.FormatAutoSell(autoSellMessage);
|
|
if (horse.AutoSell > 0)
|
|
message += Messages.HorseChangeAutoSell;
|
|
else
|
|
message += Messages.HorseSetAutoSell;
|
|
}
|
|
else
|
|
{
|
|
message += Messages.HorseCantAutoSellTacked;
|
|
}
|
|
|
|
message += Messages.FormatHorseCategory(horse.Category);
|
|
message += Messages.HorseStats;
|
|
|
|
// What is energy?
|
|
message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes);
|
|
message += Messages.HorseTacked;
|
|
|
|
if (horse.Equipment.Saddle != null)
|
|
message += Messages.FormatHorseTackEntry(horse.Equipment.Saddle.IconId, horse.Equipment.Saddle.Name, horse.Equipment.Saddle.Id);
|
|
|
|
if (horse.Equipment.SaddlePad != null)
|
|
message += Messages.FormatHorseTackEntry(horse.Equipment.SaddlePad.IconId, horse.Equipment.SaddlePad.Name, horse.Equipment.SaddlePad.Id);
|
|
if (horse.Equipment.Bridle != null)
|
|
message += Messages.FormatHorseTackEntry(horse.Equipment.Bridle.IconId, horse.Equipment.Bridle.Name, horse.Equipment.Bridle.Id);
|
|
|
|
message += Messages.HorseCompanion;
|
|
if (horse.Equipment.Companion != null)
|
|
message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, horse.Equipment.Companion.Id);
|
|
else
|
|
message += Messages.HorseNoCompanion;
|
|
|
|
message += Messages.FormatHorseAdvancedStats(horse.Spoiled, horse.MagicUsed);
|
|
|
|
HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED);
|
|
HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH);
|
|
HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION);
|
|
HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY);
|
|
HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE);
|
|
HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE);
|
|
HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY);
|
|
|
|
message += Messages.FormatHorseAdvancedStat(speedStat.BreedValue, speedStat.CompanionOffset, speedStat.TackOffset, speedStat.MaxValue);
|
|
message += Messages.FormatHorseAdvancedStat(strengthStat.BreedValue, strengthStat.CompanionOffset, strengthStat.TackOffset, strengthStat.MaxValue);
|
|
message += Messages.FormatHorseAdvancedStat(conformationStat.BreedValue, conformationStat.CompanionOffset, conformationStat.TackOffset, conformationStat.MaxValue);
|
|
message += Messages.FormatHorseAdvancedStat(agilityStat.BreedValue, agilityStat.CompanionOffset, agilityStat.TackOffset, agilityStat.MaxValue);
|
|
message += Messages.FormatHorseAdvancedStat(enduranceStat.BreedValue, enduranceStat.CompanionOffset, enduranceStat.TackOffset, enduranceStat.MaxValue);
|
|
message += Messages.FormatHorseAdvancedStat(inteligenceStat.BreedValue, inteligenceStat.CompanionOffset, inteligenceStat.TackOffset, inteligenceStat.MaxValue);
|
|
message += Messages.FormatHorseAdvancedStat(agilityStat.BreedValue, personalityStat.CompanionOffset, personalityStat.TackOffset, personalityStat.MaxValue);
|
|
|
|
message += Messages.FormatHorseBreedDetails(horse.Breed.Name, horse.Breed.Description);
|
|
message += Messages.FormatHorseHeight(Convert.ToInt32(Math.Floor(HorseInfo.CalculateHands(horse.Breed.BaseStats.MinHeight))), Convert.ToInt32(Math.Floor(HorseInfo.CalculateHands(horse.Breed.BaseStats.MaxHeight))));
|
|
|
|
message += Messages.FormatPossibleColors(horse.Breed.Colors);
|
|
|
|
bool canRelease = true;
|
|
if(World.InTown(user.X, user.Y))
|
|
canRelease = false;
|
|
|
|
|
|
if (World.InSpecialTile(user.X, user.Y))
|
|
{
|
|
World.SpecialTile tile = World.GetSpecialTile(user.X, user.Y);
|
|
if (tile.Code != null)
|
|
canRelease = false;
|
|
}
|
|
|
|
if(canRelease)
|
|
message += Messages.HorseReleaseButton;
|
|
|
|
message += Messages.HorseOthers;
|
|
message += buildHorseList(user);
|
|
|
|
message += Messages.BackToMapHorse;
|
|
message += Messages.MetaTerminator;
|
|
|
|
return message;
|
|
|
|
}
|
|
|
|
public static string BuildAllStats(User user)
|
|
{
|
|
string message = Messages.HorseAllStatsHeader;
|
|
foreach(HorseInstance horse in user.HorseInventory.HorseList)
|
|
{
|
|
HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED);
|
|
HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH);
|
|
HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION);
|
|
HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY);
|
|
HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE);
|
|
HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE);
|
|
HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY);
|
|
|
|
message += Messages.FormatAllStatsEntry(horse.Name, horse.Color, horse.Breed.Name, horse.Sex, horse.BasicStats.Experience);
|
|
message += Messages.FormatCompactedBasicStats(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes);
|
|
message += Messages.FormatCompactedAdvancedStats(speedStat.Total, strengthStat.Total, conformationStat.Total, agilityStat.Total, enduranceStat.Total, inteligenceStat.Total, personalityStat.Total);
|
|
}
|
|
message += Messages.HorseAllStatsLegend;
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildMiscStats(User user)
|
|
{
|
|
string message = Messages.StatMiscHeader;
|
|
if (user.TrackedItems.TrackingItems.Length <= 0)
|
|
message += Messages.StatMiscNoneRecorded;
|
|
foreach(Tracking.TrackedItem trackedItem in user.TrackedItems.TrackingItems)
|
|
{
|
|
try
|
|
{
|
|
message += Messages.FormatMiscStatsEntry(Tracking.GetTrackedItemsStatsMenuName(trackedItem.What), trackedItem.Count);
|
|
}
|
|
catch(KeyNotFoundException)
|
|
{
|
|
Logger.ErrorPrint(user.Username + " Has tracked items in db that dont have a value associated.");
|
|
continue;
|
|
}
|
|
}
|
|
message += Messages.BackToMap;
|
|
message += Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildTackMenu(HorseInstance horse, User user)
|
|
{
|
|
string message = Messages.FormatTackedAsFollowedMessage(horse.Name);
|
|
if(horse.Equipment.Saddle != null)
|
|
message += Messages.FormatUnEquipSaddle(horse.Equipment.Saddle.IconId, horse.Equipment.Saddle.Name);
|
|
if (horse.Equipment.SaddlePad != null)
|
|
message += Messages.FormatUnEquipSaddlePad(horse.Equipment.SaddlePad.IconId, horse.Equipment.SaddlePad.Name);
|
|
if (horse.Equipment.Bridle != null)
|
|
message += Messages.FormatUnEquipBridle(horse.Equipment.Bridle.IconId, horse.Equipment.Bridle.Name);
|
|
message += Messages.HorseTackInInventory;
|
|
foreach(InventoryItem item in user.Inventory.GetItemList())
|
|
{
|
|
Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo();
|
|
if (itemInfo.Type == "TACK")
|
|
{
|
|
message += Messages.FormatHorseEquip(itemInfo.IconId, item.ItemInstances.Count, itemInfo.Name, itemInfo.Id);
|
|
}
|
|
}
|
|
|
|
message += Messages.BackToHorse;
|
|
return message;
|
|
}
|
|
public static string BuildChatpoint(User user, Npc.NpcEntry npc, Npc.NpcChat chatpoint)
|
|
{
|
|
bool hideReplys = false;
|
|
if (chatpoint.ActivateQuestId != 0)
|
|
{
|
|
Quest.QuestEntry quest = Quest.GetQuestById(chatpoint.ActivateQuestId);
|
|
if (Quest.ActivateQuest(user, quest, true))
|
|
{
|
|
user.MetaPriority = true;
|
|
if (quest.SetNpcChatpoint != -1)
|
|
Npc.SetDefaultChatpoint(user, npc, quest.SetNpcChatpoint);
|
|
if (quest.GotoNpcChatpoint != -1)
|
|
chatpoint = Npc.GetNpcChatpoint(npc,quest.GotoNpcChatpoint);
|
|
if (quest.SuccessNpcChat != null)
|
|
chatpoint.ChatText = quest.SuccessNpcChat;
|
|
}
|
|
else
|
|
{
|
|
if (quest.GotoNpcChatpoint != -1)
|
|
chatpoint = Npc.GetNpcChatpoint(npc, quest.GotoNpcChatpoint);
|
|
if (quest.FailNpcChat != null)
|
|
chatpoint.ChatText = quest.FailNpcChat;
|
|
|
|
if (quest.HideReplyOnFail)
|
|
hideReplys = true;
|
|
}
|
|
}
|
|
|
|
|
|
string message = "";
|
|
message += Messages.FormatNpcChatpoint(npc.Name, npc.ShortDescription, chatpoint.ChatText);
|
|
foreach(Npc.NpcReply reply in chatpoint.Replies)
|
|
{
|
|
if(reply.RequiresQuestIdCompleted != 0)
|
|
if (user.Quests.GetTrackedQuestAmount(reply.RequiresQuestIdCompleted) <= 0)
|
|
continue;
|
|
if (reply.RequiresQuestIdNotCompleted != 0)
|
|
if (user.Quests.GetTrackedQuestAmount(reply.RequiresQuestIdCompleted) >= 1)
|
|
continue;
|
|
if (hideReplys)
|
|
continue;
|
|
message += Messages.FormatNpcReply(reply.ReplyText, reply.Id);
|
|
}
|
|
message += Messages.BackToMap + Messages.MetaTerminator;
|
|
return message;
|
|
}
|
|
|
|
public static string BuildMetaInfo(User user, int x, int y)
|
|
{
|
|
string message = "";
|
|
message += buildLocationString(x, y);
|
|
message += BuildHorseList(user);
|
|
message += buildNpc(user, x, y);
|
|
|
|
|
|
message += buildCommonInfo(x, y);
|
|
return message;
|
|
}
|
|
|
|
}
|
|
}
|