From 8bc36363702eb63c05e743a6f7799276fbb56437 Mon Sep 17 00:00:00 2001
From: SilicaAndPina
Date: Mon, 18 Apr 2022 20:46:44 +1200
Subject: [PATCH] Change mailmap
---
.mailmap | 14 +-
HorseIsleServer/LibHISP/Game/Meta.cs | 6174 ++++++++++++-------------
HorseIsleServer/LibHISP/Game/Quest.cs | 2 +-
3 files changed, 3095 insertions(+), 3095 deletions(-)
diff --git a/.mailmap b/.mailmap
index 2e15f89..7164d16 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1,7 +1,7 @@
-SilicaAndPina SilicaAndPina
-SilicaAndPina Bluzume <39113159+KuromeSan@users.noreply.github.com>
-SilicaAndPina SilicaPi
-SilicaAndPina SilicaPi
-SilicaAndPina Silica
-SilicaAndPina AtelierWindows
-SilicaAndPina KuromeSan
\ No newline at end of file
+Li SilicaAndPina
+Li Bluzume <39113159+KuromeSan@users.noreply.github.com>
+Li SilicaPi
+Li SilicaPi
+Li Silica
+Li AtelierWindows
+Li KuromeSan
\ No newline at end of file
diff --git a/HorseIsleServer/LibHISP/Game/Meta.cs b/HorseIsleServer/LibHISP/Game/Meta.cs
index 8907bd8..47f22f9 100644
--- a/HorseIsleServer/LibHISP/Game/Meta.cs
+++ b/HorseIsleServer/LibHISP/Game/Meta.cs
@@ -1,3088 +1,3088 @@
-using HISP.Game.Horse;
-using HISP.Game.Inventory;
-using HISP.Game.Services;
-using HISP.Player;
-using HISP.Server;
-using HISP.Game.Items;
-using HISP.Game.Chat;
-using HISP.Game.Events;
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Drawing;
-
-namespace HISP.Game
-{
- public class Meta
- {
- private static bool overwrite = false;
-
- 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 buildPlayersHere(User fromUser, int x, int y)
- {
- string playersHere = "";
- User[] playersAt = GameServer.GetUsersAt(x, y, true, true);
- if(playersAt.Length > 1)
- {
- playersHere += Messages.PlayersHere;
- int count = 0;
- foreach(User playerAt in playersAt)
- {
- if (playerAt.Id == fromUser.Id)
- continue;
- string buttons = "";
- buttons += Messages.FormatPlayerHereProfileButton(playerAt.Id);
- buttons += Messages.FormatPlayerHereSocialButtton(playerAt.Id);
- buttons += Messages.FormatPlayerHereTradeButton(playerAt.Id);
- if (fromUser.Friends.IsFriend(playerAt.Id))
- buttons += Messages.FormatPlayerHereTagButton(playerAt.Id);
- else
- buttons += Messages.FormatPlayerHereBuddyButton(playerAt.Id);
- buttons += Messages.FormatPmButton(playerAt.Username);
-
- playersHere += Messages.FormatPlayerHereMenu(playerAt.GetPlayerListIcon(), playerAt.Username,buttons);
- count++;
- }
-
- if(count >= 2)
- {
- SocialType stype = SocialType.GetSocialType("GROUP");
- foreach(SocialType.Social social in stype.Socials)
- {
- playersHere += Messages.FormatSocialButton(social.Id, social.ButtonName);
- }
- playersHere += Messages.R1;
- }
-
- if (count <= 0)
- return "";
- }
-
- return playersHere;
- }
-
- private static string buildNearbyString(int x, int y, bool showNearbyPlayersHeader=true)
- {
- string playersNearby = "";
-
- User[] nearbyUsers = GameServer.GetNearbyUsers(x, y, true, true);
- int count = 0;
- if (nearbyUsers.Length > 1)
- {
- if(showNearbyPlayersHeader)
- {
- playersNearby += Messages.NearbyPlayers;
- }
-
- string usersWest = "";
- string usersNorth = "";
- string usersEast = "";
- string usersSouth = "";
-
- foreach (User nearbyUser in nearbyUsers)
- {
- if (nearbyUser.X == x && nearbyUser.Y == y) // not yourself
- continue;
-
- int xDiff = x - nearbyUser.X;
- int yDiff = y - nearbyUser.Y;
- double angle = (Math.Atan2(yDiff, xDiff) * 180.0 / Math.PI);
- angle -= 45;
- angle = (angle % 360 + 360) % 360;
-
- if (angle >= 270 && angle <= 360 )
- usersWest += nearbyUser.Username + " ";
- else if (angle >= 90 && angle <= 180)
- usersEast += nearbyUser.Username + " ";
- else if (angle >= 180 && angle <= 270)
- usersSouth += nearbyUser.Username + " ";
- else if (angle >= 0 && angle <= 90)
- usersNorth += nearbyUser.Username + " ";
-
-
- count++;
- }
-
- 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;
-
-
-
- }
- if(count <= 0)
- {
- return "";
- }
- 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 += Messages.R1;
- Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
-
- int count = item.ItemInstances.Length;
- 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 += Messages.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.Length;
- string countStr = count.ToString();
-
-
- message += Messages.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 += Messages.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.Length;
- message += Messages.FormatNumberOfWishingCoins(totalCoins);
- message += Messages.WishingWellMeta;
- }
-
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
-
-
- }
-
- private static string buildCommonInfo(User user, int x, int y)
- {
- user.HorseWindowOpen = false;
- string message = "";
- message += buildPlayersHere(user, x, y);
- bool playersHere = (GameServer.GetUsersAt(x, y, true, true).Length >= 1);
- message += buildNearbyString(x, y, playersHere);
-
- // 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, bool other)
- {
- string message = "";
-
- // Insert LGBT Patch here
-
- string pronoun = "";
-
- if (other)
- {
- if (user.Gender == "FEMALE")
- {
- pronoun = Messages.PronounFemaleShe;
- }
-
- if (user.Gender == "MALE")
- {
- pronoun = Messages.PronounMaleHe;
- }
- }
-
- if (!other)
- message += Messages.JewelrySelected;
- else
- message += Messages.FormatOtherJewelerySelected(pronoun);
-
- bool hasMsg = false;
-
- if (user.EquipedJewelry.Slot1 != null)
- {
- message += Messages.FormatJewelrySlot1(user.EquipedJewelry.Slot1.Name, user.EquipedJewelry.Slot1.IconId, other);
- hasMsg = true;
- }
- if (user.EquipedJewelry.Slot2 != null)
- {
- message += Messages.FormatJewelrySlot2(user.EquipedJewelry.Slot2.Name, user.EquipedJewelry.Slot2.IconId, other);
- hasMsg = true;
- }
- if (user.EquipedJewelry.Slot3 != null)
- {
- message += Messages.FormatJewelrySlot3(user.EquipedJewelry.Slot3.Name, user.EquipedJewelry.Slot3.IconId, other);
- hasMsg = true;
- }
- if (user.EquipedJewelry.Slot4 != null)
- {
- message += Messages.FormatJewelrySlot4(user.EquipedJewelry.Slot4.Name, user.EquipedJewelry.Slot4.IconId, other);
- hasMsg = true;
- }
-
- if (!hasMsg)
- {
- if (!other)
- message = Messages.NoJewerlyEquipped;
- else
- message = Messages.FormatOtherNoJewelery(pronoun);
- }
-
-
-
- return message;
- }
-
- private static string buildMultiroom(string id, User user)
- {
-
- string message = Messages.MultiroomPlayersParticipating;
-
- Multiroom room = Multiroom.GetMultiroom(user.X, user.Y);
- room.Join(user);
-
- foreach (User userOnTile in room.JoinedUsers)
- {
- if (userOnTile.Id == user.Id)
- continue;
-
- message += Messages.FormatMultiroomParticipent(userOnTile.Username);
- }
-
- message += Messages.R1;
-
- if(id == null) // Generic
- {
- // Do nothing
- }
- else if (id[0] == 'P') // Poet
- {
- int lastPoet = Database.GetLastPlayer(id);
- string username = "";
- if (lastPoet != -1)
- username = Database.GetUsername(lastPoet);
-
- message += Messages.FormatLastPoet(username);
- }
- else if (id[0] == 'D') // Drawning room
- {
- int lastDraw = Database.GetLastPlayer(id);
- string username = "";
- if (lastDraw != -1)
- username = Database.GetUsername(lastDraw);
-
- message += Messages.FormatLastToDraw(username);
- }
-
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildEquippedCompetitionGear(User user, bool other = false)
- {
- string message = "";
-
- if (!other)
- message = Messages.CompetitionGearSelected;
-
- // Insert LGBT Patch Here
-
- string pronoun = Messages.PronounYouYour;
- string pronoun2 = Messages.PronounYouYour;
- if (other)
- {
- if (user.Gender == "FEMALE")
- {
- pronoun = Messages.PronounFemaleShe;
- pronoun2 = Messages.PronounFemaleHer;
- }
- else if (user.Gender == "MALE")
- {
- pronoun = Messages.PronounMaleHe;
- pronoun2 = Messages.PronounMaleHis;
- }
-
- message = Messages.FormatOtherCompetitionGear(pronoun);
- }
-
- bool hasMsg = false;
-
- if (user.EquipedCompetitionGear.Head != null)
- {
- message += Messages.FormatCompetitionGearHead(user.EquipedCompetitionGear.Head.Name, pronoun2, user.EquipedCompetitionGear.Head.IconId, other);
- hasMsg = true;
- }
- if (user.EquipedCompetitionGear.Body != null)
- {
- message += Messages.FormatCompetitionGearBody(user.EquipedCompetitionGear.Body.Name, pronoun2, user.EquipedCompetitionGear.Body.IconId, other);
- hasMsg = true;
- }
- if (user.EquipedCompetitionGear.Legs != null)
- {
- message += Messages.FormatCompetitionGearLegs(user.EquipedCompetitionGear.Legs.Name, pronoun2, user.EquipedCompetitionGear.Legs.IconId, other);
- hasMsg = true;
- }
- if (user.EquipedCompetitionGear.Feet != null)
- {
- message += Messages.FormatCompetitionGearFeet(user.EquipedCompetitionGear.Feet.Name, pronoun2, user.EquipedCompetitionGear.Feet.IconId, other);
- hasMsg = true;
- }
-
- if (!hasMsg)
- {
- if (!other)
- message = Messages.NoCompetitionGear;
- else
- message = Messages.FormatOtherNoCompetitionGear(pronoun);
- }
-
- return message;
-
- }
-
- private static string buildHorseListIndependantlyOfUserInstance(int userId)
- {
- string message = "";
- int i = 1;
-
-
- foreach (HorseInfo.Category category in HorseInfo.HorseCategories)
- {
- HorseInstance[] horsesInCategory = Database.GetPlayerHorsesInCategory(userId, category.Name).OrderBy(o => o.Name).ToArray();
- if (horsesInCategory.Length > 0)
- {
- message += category.MetaOthers;
- 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 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.RequiresQuestIdCompleted) <= 0)
- continue;
-
- if (ent.RequiresQuestIdNotCompleted != 0)
- if (user.Quests.GetTrackedQuestAmount(ent.RequiresQuestIdNotCompleted) >= 1)
- continue;
-
- message += Messages.FormatNpcStartChatMessage(ent.IconId, ent.Name, ent.ShortDescription, ent.Id);
- if(ent.Chatpoints.Length > 0)
- {
- if (ent.LongDescription != "")
- message += Messages.FormatNpcInformationButton(ent.Id);
- message += Messages.FormatNpcTalkButton(ent.Id);
- }
- else
- {
- message += Messages.NpcNoChatpoints;
- }
- message += Messages.R1;
- }
- return message;
- }
- public static string buildVenusFlyTrap(User user)
- {
- int moneyLost = GameServer.RandomNumberGenerator.Next(0, 100);
- if (moneyLost > user.Money)
- moneyLost = user.Money;
- user.TakeMoney(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 BuildTradeAdd(Trade trade)
- {
- string message = Messages.FormatTradeWhatToOffer(trade.OtherTrade.Trader.Username);
- message += Messages.TradeOfferMoney;
- message += Messages.TradeOfferHorse;
- foreach(HorseInstance horse in trade.Trader.HorseInventory.HorseList.OrderBy(o => o.Name))
- {
- if (horse.Leaser > 0)
- continue;
-
- if (horse.Category != "TRADING")
- continue;
-
- bool tacked = (horse.Equipment.Saddle != null || horse.Equipment.SaddlePad != null || horse.Equipment.Bridle != null || horse.Equipment.Companion != null);
- message += Messages.FormatTradeOfferHorse(horse.Name, tacked, horse.RandomId);
- }
-
- if(trade.OtherTrade.Trader.Inventory.Count >= trade.OtherTrade.Trader.MaxItems)
- {
- message += Messages.TradeOfferItemOtherPlayerInvFull;
- }
- else
- {
- message += Messages.TradeOfferItem;
- foreach(InventoryItem item in trade.Trader.Inventory.GetItemList())
- {
- Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
- if (itemInfo.Type == "QUEST" || itemInfo.Type == "TEXT" || itemInfo.Id == Item.DorothyShoes)
- continue;
- message += Messages.FormatTradeOfferItem(itemInfo.IconId, itemInfo.Name, item.ItemInstances.Length, item.ItemId);
- }
- }
-
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
-
- }
- public static string BuildSocialMenu(bool onHorse)
- {
- string message = "";
- foreach(SocialType sType in SocialType.SocialTypes)
- {
- if (sType.Type == "GROUP")
- continue;
- if (sType.Type == "HORSE")
- if (!onHorse)
- continue;
-
- message += Messages.FormatSocialMenuType(sType.Type);
- foreach(SocialType.Social social in sType.Socials)
- {
- message += Messages.FormatSocialButton(social.Id, social.ButtonName);
- }
- message += Messages.R1;
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
-
- public static string BuildTradeAddItem(int totalItems)
- {
- string message = "";
- message += Messages.FormatTradeOfferItemSubmenu(totalItems);
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildTradeAddMoney(int curMoney)
- {
- string message = "";
- message += Messages.FormatTradeOfferMoneySubmenu(curMoney);
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildTrade(Trade trade)
- {
-
- string message = "";
- message += Messages.FormatTradeWithPlayer(trade.OtherTrade.Trader.Username);
-
-
-
- if (trade.Stage == "DONE" && trade.OtherTrade.Stage == "DONE")
- message += Messages.TradeFinalReview;
- else if (trade.Stage == "DONE")
- message += Messages.TradeWaitingForOtherDone;
- else if (trade.OtherTrade.Stage == "DONE")
- message += Messages.TradeOtherPlayerIsDone;
-
-
- message += Messages.FormatTradeYourOffering(trade.OtherTrade.Trader.Username);
- if (trade.MoneyOffered == 0 && trade.ItemsOffered.Length == 0 && trade.HorsesOffered.Length == 0)
- message += Messages.TradeOfferingNothing;
- if (trade.MoneyOffered > 0)
- message += Messages.FormatTradeMoneyOffer(trade.MoneyOffered);
- if(trade.HorsesOffered.Length > 0)
- foreach(HorseInstance horse in trade.HorsesOffered)
- message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId);
- if(trade.ItemsOffered.Length > 0)
- foreach(ItemInstance[] item in trade.ItemsOffered)
- {
- Item.ItemInformation itemInfo = item[0].GetItemInfo();
- string name = itemInfo.Name;
- if (item.Length > 1)
- name = itemInfo.PluralName;
-
- message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name);
- }
-
- if(trade.Stage == "OPEN")
- message += Messages.TradeAddItems;
-
- message += Messages.FormatTradeOtherOffering(trade.OtherTrade.Trader.Username);
- if (trade.OtherTrade.MoneyOffered == 0 && trade.OtherTrade.ItemsOffered.Length == 0 && trade.OtherTrade.HorsesOffered.Length == 0)
- message += Messages.TradeOfferingNothing;
- if (trade.OtherTrade.MoneyOffered > 0)
- message += Messages.FormatTradeMoneyOffer(trade.OtherTrade.MoneyOffered);
- if (trade.OtherTrade.HorsesOffered.Length > 0)
- foreach (HorseInstance horse in trade.OtherTrade.HorsesOffered)
- message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId);
- if (trade.OtherTrade.ItemsOffered.Length > 0)
- foreach (ItemInstance[] item in trade.OtherTrade.ItemsOffered)
- {
- Item.ItemInformation itemInfo = item[0].GetItemInfo();
- string name = itemInfo.Name;
- if (item.Length > 1)
- name = itemInfo.PluralName;
-
- message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name);
- }
-
- if (trade.Stage == "OPEN")
- message += Messages.TradeWhenDoneClick;
- if (((trade.Stage == "DONE" || trade.Stage == "ACCEPTED") && (trade.OtherTrade.Stage == "DONE" || trade.Stage == "ACCEPTED")) )
- message += Messages.TradeAcceptTrade;
-
- message += Messages.TradeCancelAnytime;
-
- return message;
- }
-
- public static string buildTackPeiceLibary(Item.ItemInformation item)
- {
- string message = "";
- message += Messages.FormatTackSetPeice(item.Name, item.Description);
- return message;
- }
-
- public static string BuildTackLibary()
- {
- string message = "";
-
- foreach (Tack.TackSet set in Tack.TackSets.OrderBy(o => o.SortPosition()).ToArray())
- {
- string[] setSwfs = set.GetSwfNames();
- string swf = "breedviewer.swf?terrain=book2&breed=tackonly";
- if (setSwfs.Length >= 1)
- swf += "&saddle=" + setSwfs[0];
- if (setSwfs.Length >= 2)
- swf += "&saddlepad=" + setSwfs[1];
- if (setSwfs.Length >= 3)
- swf += "&bridle=" + setSwfs[2];
- swf += "&j=";
-
- message += Messages.FormatTackSetView(set.IconId, set.SetName, swf);
-
- // Write all peices
- try
- {
- message += buildTackPeiceLibary(set.GetSaddle());
- message += buildTackPeiceLibary(set.GetSaddlePad());
- message += buildTackPeiceLibary(set.GetBridle());
- }
- catch (Exception e)
- {
- Logger.ErrorPrint(e.Message);
- }
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildMinigamesLibary()
- {
- string message = "";
- message += Messages.MinigameSingleplayer;
- foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title))
- {
- if (tile.TypeFlag == "1PLAYER")
- {
- string mapXy = Messages.FormatMapLocation(tile.X, tile.Y);
- message += Messages.FormatMinigameEntry(tile.Title, mapXy);
- }
- }
- message += Messages.MinigameTwoplayer;
- foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title))
- {
- if (tile.TypeFlag == "2PLAYER")
- {
- string mapXy = Messages.FormatMapLocation(tile.X, tile.Y);
- message += Messages.FormatMinigameEntry(tile.Title, mapXy);
- }
- }
- message += Messages.MinigameMultiplayer;
- foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title))
- {
- if (tile.TypeFlag == "MULTIPLAYER")
- {
- string mapXy = Messages.FormatMapLocation(tile.X, tile.Y);
- message += Messages.FormatMinigameEntry(tile.Title, mapXy);
- }
- }
- message += Messages.MinigameCompetitions;
- foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title))
- {
- if (tile.TypeFlag == "ARENA")
- {
- string mapXy = Messages.FormatMapLocation(tile.X, tile.Y);
- message += Messages.FormatMinigameEntry(tile.Title, mapXy);
- }
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildRealTimeQuiz(RealTimeQuiz.Participent participent)
- {
- // Uber Priority xD
- participent.UserInstance.MinorPriority = true;
- participent.UserInstance.MajorPriority = true;
- return Messages.FormatEventRealTimeQuizMeta(participent.CorrectAnswers, participent.MistakenAnswers, participent.OnQuestion.BaseCategory.Name, participent.OnQuestion.Question);
- }
- public static string BuildCompanionLibary()
- {
- string message = "";
- foreach (Item.ItemInformation itm in Item.Items.OrderBy(o => o.GetMiscFlag(0)).ToArray())
- {
- if (itm.Type == "COMPANION" && itm.EmbedSwf != null)
- {
- string swf = "breedviewer.swf?terrain=book2&breed=tackonly&companion=" + itm.EmbedSwf + "&j=";
- message += Messages.FormatCompanionViewButton(itm.IconId, itm.Name, swf);
- message += Messages.FormatCompanionEntry(itm.Description);
- }
- }
- message += Messages.BackToMap;
- 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 BuildRanchSearchResults(string search)
- {
- string message = "";
- message += Messages.LibaryFindRanchResultsHeader;
- int totalResults = 0;
- foreach(Ranch ranch in Ranch.Ranches)
- {
- if(ranch.OwnerId != -1)
- {
- string ranchOwnerName = Database.GetUsername(ranch.OwnerId);
- if(ranchOwnerName.ToLower().Contains(search.ToLower()))
- {
- message += Messages.FormatRanchSearchResult(ranchOwnerName, ranch.X, ranch.Y);
- totalResults++;
- }
- }
- if (totalResults >= 10)
- break;
- }
- if (totalResults == 0)
- message += Messages.LibaryFindRanchResultsNoResults;
-
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildRanchSearchLibary()
- {
- string message = "";
- message += Messages.LibaryFindRanch;
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildAwardsLibary()
- {
- string message = "";
- message += Messages.AwardsAvalible;
- foreach (Award.AwardEntry award in Award.GlobalAwardList.OrderBy(o => o.Sort).ToArray())
- {
- message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus, award.Description);
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildBookReadLibary(Book book)
- {
- string message = "";
- message = Messages.FormatBookReadMeta(book.Author, book.Title, book.Text);
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildBooksLibary()
- {
- string message = "";
- message += Messages.BooksOfHorseIsle;
- foreach (Book libaryBook in Book.LibaryBooks.OrderBy(o => o.Title).ToArray())
- {
- message += Messages.FormatBookEntry(libaryBook.Title, libaryBook.Author, libaryBook.Id);
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
-
- 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." + Messages.BackToMap + Messages.MetaTerminator;
- 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 BuildTopWinners(string gameName)
- {
- Highscore.HighscoreTableEntry[] scores = Database.GetTopWinners(gameName, 20);
- if (scores.Length <= 0)
- return "ERROR: No wins recorded." + Messages.BackToMap + Messages.MetaTerminator;
- string message = "";
-
- message += Messages.FormatWinlooseHeader(gameName);
-
- for (int i = 0; i < scores.Length; i++)
- {
- message += Messages.FormatWinlooseListEntry(i + 1, scores[i].Wins, scores[i].Looses, 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, false);
- if (scores.Length <= 0)
- return "ERROR: No times recorded. "+Messages.BackToMap+Messages.MetaTerminator;
- 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, true), 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 BuildRanchTraining(User user)
- {
- string message = "";
- message += Messages.RanchTrainAllAttempt;
- int horsesTrained = 0;
- foreach(HorseInstance horse in user.HorseInventory.HorseList)
- {
- if(horse.BasicStats.Mood < 200)
- {
- message += Messages.FormatRanchTrainBadMood(horse.Name);
- }
- if(horse.TrainTimer == 0)
- {
- horse.AdvancedStats.Speed += 1;
- horse.AdvancedStats.Strength += 1;
- horse.AdvancedStats.Conformation += 1;
- horse.AdvancedStats.Agility += 1;
- horse.AdvancedStats.Endurance += 1;
- horse.BasicStats.Experience += 1;
- horse.TrainTimer = 720;
- horsesTrained++;
- message += Messages.FormatRanchTrain(horse.Name, 1, 1, 1, 1, 1, 1);
- }
- else
- {
- message += Messages.FormatRanchTrainFail(horse.Name, horse.TrainTimer);
- }
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
-
- public static string BuildTransportInfo(User user, 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);
- string costFormat = Messages.FormatTransportCost(transportLocation.Cost);
- if(transportLocation.Type == "WAGON")
- {
- if (user.OwnedRanch != null)
- {
- if (user.OwnedRanch.GetBuildingCount(7) > 0) // Wagon
- {
- costFormat = Messages.TransportWagonFree;
- }
- }
- }
-
-
- message += Messages.FormatTransportMessage(transportLocation.Type, transportLocation.LocationTitle, costFormat, transportLocation.Id, transportLocation.GotoX, transportLocation.GotoY);
- }
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildStatsMenu(User user, bool other=false)
- {
- string message = Messages.FormatStatsBar(user.Username);
-
- string areaString = buildAreaString(user.X, user.Y);
- if (areaString != "")
- message += Messages.FormatStatsArea(areaString);
- if(!other)
- 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.Tiredness), Messages.StatTired));
- message += Messages.FormatGenderStat(user.Gender);
- message += Messages.FormatJewelryStat(buildWornJewelery(user, other));
- message += Messages.FormatCompetitionGearStat(buildEquippedCompetitionGear(user, other));
-
- if(!other)
- {
- message += Messages.StatsPrivateNotesButton;
- message += Messages.StatsQuestsButton;
- message += Messages.StatsMinigameRankingButton;
- message += Messages.StatsAwardsButton;
- message += Messages.StatsMiscButton;
- }
- else
- {
- // Insert LGBT Patch here
-
- string pronoun = "";
- if (other)
- {
- if (user.Gender == "FEMALE")
- pronoun = Messages.PronounFemaleHer;
-
- if (user.Gender == "MALE")
- pronoun = Messages.PronounMaleHis;
- }
-
- message += Messages.FormatOtherHorsesMeta(pronoun);
-
- message += buildHorseList(user, false);
-
- message += Messages.FormatAwardHeaderOthers(user.Username);
- 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 BuildWildHorseList(User user)
- {
- string message = "";
- WildHorse[] horses = WildHorse.GetHorsesAt(user.X, user.Y);
- if (horses.Length > 0)
- {
- message = Messages.HorsesHere;
- foreach (WildHorse horse in horses)
- {
- bool vowel = (horse.Instance.Breed.Name[0].ToString().ToLower() == "a" || horse.Instance.Breed.Name[0].ToString().ToLower() == "i" || horse.Instance.Breed.Name[0].ToString().ToLower() == "u" || horse.Instance.Breed.Name[0].ToString().ToLower() == "e" || horse.Instance.Breed.Name[0].ToString().ToLower() == "o");
- message += Messages.FormatWildHorse(horse.Instance.Name, horse.Instance.Breed.Name, horse.Instance.RandomId, vowel);
- }
- }
- 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 currentUser)
- {
- string message = "";
- message += Messages.NearbyPlayersListHeader;
- User[] nearbyUsers = GameServer.GetNearbyUsers(currentUser.X, currentUser.Y, false, true);
- foreach (User nearbyUser in nearbyUsers)
- {
- if (nearbyUser.Stealth)
- continue;
-
- if (nearbyUser.Id == currentUser.Id)
- continue;
-
-
- bool isYou = (nearbyUser.Id == currentUser.Id);
-
- int icon = nearbyUser.GetPlayerListIcon();
- string iconFormat = "";
- if (icon != -1)
- iconFormat = Messages.FormatIconFormat(icon);
-
- message += Messages.FormatPlayerEntry(iconFormat, nearbyUser.Username, nearbyUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - nearbyUser.LoginTime).TotalMinutes)), nearbyUser.X, nearbyUser.Y, nearbyUser.Idle, currentUser.MutePlayer.IsUserMuted(nearbyUser), isYou);
- }
-
- message += Messages.PlayerListIconInformation;
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
-
- return message;
- }
-
- public static string BuildPlayerListAlphabetical(User currentUser)
- {
- string message = Messages.PlayerListAllAlphabeticalHeader;
- GameClient[] clients = GameClient.ConnectedClients;
- List onlineUsers = new List();
-
- 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)
- {
-
- bool isYou = (onlineUser.Id == currentUser.Id);
- int icon = onlineUser.GetPlayerListIcon();
- string iconFormat = "";
- if (icon != -1)
- iconFormat = Messages.FormatIconFormat(icon);
-
- message += Messages.FormatPlayerEntry(iconFormat, onlineUser.Username, onlineUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - onlineUser.LoginTime).TotalMinutes)), onlineUser.X, onlineUser.Y, onlineUser.Idle, currentUser.MutePlayer.IsUserMuted(onlineUser), isYou);
- }
-
- message += Messages.PlayerListIconInformation;
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
-
- return message;
- }
-
- public static string BuildPlayerList(User currentUser)
- {
- string message = Messages.PlayerListAllHeader;
- GameClient[] clients = GameClient.ConnectedClients;
- foreach (GameClient client in clients)
- {
- if (client.LoggedIn)
- {
- if (client.LoggedinUser.Stealth)
- continue;
-
- bool isYou = (client.LoggedinUser.Id == currentUser.Id);
-
- int icon = client.LoggedinUser.GetPlayerListIcon();
- string iconFormat = "";
- if (icon != -1)
- iconFormat = Messages.FormatIconFormat(icon);
-
- message += Messages.FormatPlayerEntry(iconFormat, client.LoggedinUser.Username, client.LoggedinUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - client.LoggedinUser.LoginTime).TotalMinutes)), client.LoggedinUser.X, client.LoggedinUser.Y, client.LoggedinUser.Idle, currentUser.MutePlayer.IsUserMuted(client.LoggedinUser), isYou);
- }
- }
-
- 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, Convert.ToInt32(Math.Round((DateTime.UtcNow - friend.LoginTime).TotalMinutes)), friend.X, friend.Y);
-
- }
- catch (KeyNotFoundException) { }
-
- }
- message += Messages.BuddyListOfflineBuddys;
-
-
- foreach (int id in user.Friends.List.ToArray())
- {
- if (GameServer.IsUserOnline(id))
- continue;
-
- string username = Database.GetUsername(id);
- int minutes = Convert.ToInt32(Math.Round(DateTime.UtcNow.Subtract(Util.UnixTimeStampToDateTime(Database.GetPlayerLastLogin(id))).TotalMinutes));
-
- 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 BuildHorseBreedListLibary()
- {
- 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 foundNpcs = new List();
- 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;
- }
- public static string BuildWhisperSearchResults(WildHorse[] results)
- {
- string message = Messages.WhispererSearchingAmoungHorses;
- if (results.Length <= 0)
- {
- message = Messages.WhispererNoneFound;
- }
- else
- {
- List locations = new List();
- foreach (WildHorse result in results)
- {
- Point location = new Point();
- location.X = result.X;
- location.Y = result.Y;
- locations.Add(location);
- }
- string mapxys = Messages.FormatMapLocations(locations.ToArray());
- message += Messages.FormatWhispererHorseFoundMeta(mapxys);
- }
- 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 buildHorseWhisperer()
- {
- string message = "";
- foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList())
- {
- if (breed.Swf == "")
- continue;
- if (breed.SpawnInArea == "none")
- continue;
- message += Messages.FormatWhispererHorseBreedButton(breed.Name, breed.Id);
- }
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
-
- private static string buildBank(User user)
- {
- double moneyMade = 0;
- if (user.BankInterest > user.BankMoney)
- {
- moneyMade = user.BankInterest - user.BankMoney;
- if (moneyMade > 100000000)
- moneyMade = 100000000;
- user.BankMoney += moneyMade;
-
- }
-
- 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;
- }
- public static string BuildMinigamePlayers()
- {
- string message = Messages.CityHallTop25MinigamePlayers;
- int placing = 1;
- foreach (int userId in Database.GetMinigamePlayers())
- {
- string username = Database.GetUsername(userId);
- int totalMinigames = Database.GetPlayerTotalMinigamesPlayed(userId);
-
- message += Messages.FormatCityHallTopMinigamePlayers(placing, totalMinigames, username);
- placing++;
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildMostExperienedHoses()
- {
- string message = Messages.CityHallTop25ExperiencedHorses;
-
- int placing = 1;
- foreach (HorseInstance horse in Database.GetMostExperiencedHorses())
- {
- message += Messages.FormatCityHallTopExperiencedHorses(placing, horse.BasicStats.Experience, Database.GetUsername(horse.Owner), horse.Name);
- placing++;
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildExperiencedPlayers()
- {
- string message = Messages.CityHallTop25ExperiencedPlayers;
- int placing = 1;
- foreach (int userId in Database.GetExperiencedPlayers())
- {
- string username = Database.GetUsername(userId);
- int exp = Database.GetExperience(userId);
-
- message += Messages.FormatCityHallTopExperiencedPlayersEntry(placing, exp, username);
- placing++;
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildAdventurousPlayers()
- {
- string message = Messages.CityHallTop25AdventurousPlayers;
- int placing = 1;
- foreach (int userId in Database.GetAdventurousPlayers())
- {
- string username = Database.GetUsername(userId);
- int questPoints = Database.GetPlayerQuestPoints(userId);
-
- message += Messages.FormatCityHallTopAdventurousPlayersEntry(placing, questPoints, username);
- placing++;
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildMostSpoiledHorses()
- {
- string message = Messages.CityHallTop100SpoiledHorses;
- foreach(HorseInstance horse in Database.GetMostSpoiledHorses())
- {
- message += Messages.FormatCityHallTopSpoiledHorseEntry(horse.Spoiled, Database.GetUsername(horse.Owner), horse.Name);
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildRichestPlayers()
- {
- string message = Messages.CityHallTop25Players;
- int placing = 1;
- foreach(int userId in Database.GetRichestPlayers())
- {
- string username = Database.GetUsername(userId);
- double totalMoney = Math.Floor(Database.GetPlayerMoney(userId) + Database.GetPlayerBankMoney(userId));
-
- message += Messages.FormatCityHallTopPlayerEntry(placing, totalMoney, username);
- placing++;
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildMultiHorses(User user, string swf)
- {
- string message = Messages.OtherPlayersHere;
- Multiroom room = Multiroom.GetMultiroom(user.X, user.Y);
- room.Join(user);
-
- foreach (User userOnTile in room.JoinedUsers)
- {
- if (userOnTile.Id == user.Id)
- continue;
-
- message += Messages.FormatMultiroomParticipent(userOnTile.Username);
- }
-
- message += Messages.R1;
-
- message += Messages.MultiHorseSelectOneToJoinWith;
- int placing = 1;
- foreach (HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToArray())
- {
- if (horse.Leaser > 0)
- continue;
-
- HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED, user);
- HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH, user);
- HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION, user);
- HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY, user);
- HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE, user);
- HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE, user);
- HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY, user);
-
- message += Messages.FormatMultiHorses(placing, horse.Name, horse.Breed.Name, swf + ".swf?ID=" + horse.RandomId + "&PL=" + user.Username + "&SP=" + speedStat.Total + "&ST=" + strengthStat.Total + "&CO=" + conformationStat.Total + "&AG=" + agilityStat.Total + "&EN=" + enduranceStat.Total + "&IN=" + inteligenceStat.Total + "&PE=" + personalityStat.Total + "&");
- }
-
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
-
- }
- private static string buildHorseGame(User user, string swf)
- {
- string message = Messages.HorseGamesSelectHorse;
- int placing = 1;
- foreach(HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToArray())
- {
- if (horse.Leaser > 0)
- continue;
-
-
- HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED, user);
- HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH, user);
- HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION, user);
- HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY, user);
- HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE, user);
- HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE, user);
- HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY, user);
-
-
- message += Messages.FormatHorseGamesEntry(placing, horse.Name, swf + ".swf?ID=" + horse.RandomId + "&SP=" + speedStat.Total + "&ST=" + strengthStat.Total + "&CO=" + conformationStat.Total + "&AG=" + agilityStat.Total + "&EN=" + enduranceStat.Total + "&IN=" + inteligenceStat.Total + "&PE=" + personalityStat.Total + "&");
- }
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildMostValuedRanches()
- {
- string message = Messages.CityHallTop25Ranches;
- int total = 1;
-
- foreach(Ranch ranch in Ranch.Ranches.OrderByDescending(o => o.InvestedMoney).ToList())
- {
- if (ranch.OwnerId == -1)
- continue;
-
-
- message += Messages.FormatCityHallTopRanchEntry(total, Database.GetUsername(ranch.OwnerId), ranch.InvestedMoney, Messages.FormatMapLocation(ranch.X, ranch.Y));
-
- if (total > 26)
- break;
-
- total++;
- }
-
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
-
- public static string BuildTopAutoSellHorses()
- {
- string message = Messages.CityHallCheapestAutoSells;
- HorseInstance[] horses = Database.GetCheapestHorseAutoSell();
- foreach(HorseInstance horse in horses)
- {
- message += Messages.FormatCityHallCheapAutoSellEntry(horse.AutoSell, Database.GetUsername(horse.Owner), horse.Name, horse.Color, horse.Breed.Name, horse.BasicStats.Experience);
- }
- message += Messages.CityHallMostExpAutoSells;
- HorseInstance[] horsesExp = Database.GetBiggestExpAutoSell();
- foreach (HorseInstance horse in horsesExp)
- {
- message += Messages.FormatCityHallBestExpAutoSellEntry(horse.BasicStats.Experience, Database.GetUsername(horse.Owner), horse.Name, horse.AutoSell, horse.Color, horse.Breed.Name);
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildRanchEdit(Ranch ranch)
- {
- return Messages.FormatRanchEditDescriptonMeta(ranch.Title, ranch.Description) + Messages.BackToMap + Messages.MetaTerminator;
- }
- public static string BuildRanchSellConfirmation()
- {
- return Messages.RanchSellAreYouSure + Messages.BackToMap + Messages.MetaTerminator;
- }
- public static string BuildRanchUpgrade(Ranch ranch)
- {
- string message = "";
- Ranch.RanchUpgrade currentUpgrade = ranch.GetRanchUpgrade();
- bool canUpgrade = Ranch.RanchUpgrade.RanchUpgradeExists(currentUpgrade.Id + 1);
-
- string upgrade = "";
- if(canUpgrade)
- {
- Ranch.RanchUpgrade nextUpgrade = Ranch.RanchUpgrade.GetRanchUpgradeById(currentUpgrade.Id + 1);
- upgrade = Messages.FormatNextUpgrade(nextUpgrade.Title, nextUpgrade.Cost);
- }
- message += Messages.FormatCurrentUpgrade(currentUpgrade.Title, currentUpgrade.Description, upgrade, ranch.GetSellPrice());
- message += Messages.BackToMap;
- return message;
- }
- public static string BuildRanchBuildingsAvalible(Ranch ranch, int slot)
- {
- string message = "";
- if(ranch.GetBuilding(slot-1) != null)
- {
- Ranch.RanchBuilding building = ranch.GetBuilding(slot - 1);
- message += Messages.FormatBuildingAlreadyPlaced(building.Title, building.Id, building.GetTeardownPrice());
- }
- else
- {
- message += Messages.RanchCanBuildOneOfTheFollowingInThisSpot;
- foreach (Ranch.RanchBuilding building in Ranch.RanchBuilding.RanchBuildings)
- {
- message += Messages.FormatBuildingEntry(building.Title, building.Cost, building.Id);
- }
- }
-
- message += Messages.BackToMap;
- return message;
- }
- public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchUpgrade upgrade)
- {
- string message = "";
- message += Messages.FormatViewBuilding(upgrade.Title, upgrade.Description);
-
- message += Messages.BackToMap;
- return message;
- }
- public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchBuilding building)
- {
- string message = "";
- message += Messages.FormatViewBuilding(building.Title, building.Description);
- if(building.Id == 1 || building.Id == 10 || building.Id == 11) // Barn, Big Barn, Gold Barn
- {
- int ranchOwner = ranch.OwnerId; // TOCTOU BAD
-
- if (ranchOwner != -1)
- {
- string horsesList = buildHorseListIndependantlyOfUserInstance(ranchOwner);
- message += Messages.FormatBarn(horsesList);
- }
- }
- message += Messages.BackToMap;
- return message;
- }
- private static string buildRanch(User user, int ranchId)
- {
-
- string message = "";
-
- if(!Ranch.RanchExists(ranchId)) // Ghost ranchs exist.. apparently?
- {
- user.MajorPriority = false;
- return BuildMetaInfo(user, user.X, user.Y);
- }
-
- Ranch ranch = Ranch.GetRanchById(ranchId);
- bool mine = (ranch.OwnerId == user.Id);
- string swfModule = ranch.GetSwf(mine);
-
- byte[] moduleSwf = PacketBuilder.CreateSwfModulePacket(swfModule, PacketBuilder.PACKET_SWF_MODULE_FORCE);
- user.LoggedinClient.SendPacket(moduleSwf);
-
- if (mine) // This is My DS.
- {
- GameServer.CheckMail(user);
- user.DoRanchActions();
-
- string title = ranch.Title;
- if (title == "" || title == null)
- title = Messages.RanchDefaultRanchTitle;
- message += Messages.FormatRanchTitle(Database.GetUsername(ranch.OwnerId), title);
- message += Messages.BuildingRestHere;
-
- int numbBarns = ranch.GetBuildingCount(1);
- int numbWaterWell = ranch.GetBuildingCount(2);
- int numbGrainSilo = ranch.GetBuildingCount(3);
- int numbTrainingPen = ranch.GetBuildingCount(6);
- int numbWagon = ranch.GetBuildingCount(7);
- int numbWindmill = ranch.GetBuildingCount(8);
- int numbGarden = ranch.GetBuildingCount(9);
- int numbBigBarn = ranch.GetBuildingCount(10);
- int numbGoldBarn = ranch.GetBuildingCount(11);
-
-
- if (numbBarns > 0)
- message += Messages.FormatBuildingBarn(numbBarns, numbBarns * 4);
- if (numbBigBarn > 0)
- message += Messages.FormatBuildingBarn(numbBigBarn, numbBigBarn * 8);
- if (numbGoldBarn > 0)
- message += Messages.FormatBuildingBarn(numbGoldBarn, numbGoldBarn * 12);
- if (numbBarns > 0 || numbBigBarn > 0 || numbGoldBarn > 0)
- message += Messages.RanchHorsesFullyRested;
- if (numbWaterWell > 0)
- message += Messages.BuildingWaterWell;
- if (numbGrainSilo > 0)
- message += Messages.BuildingGrainSilo;
- if (numbWindmill > 0)
- message += Messages.FormatBuildingWindmill(numbWindmill, 5000 * numbWindmill);
- if (numbGarden > 0)
- message += Messages.BuildingVegatableGarden;
- if (numbWagon > 0)
- message += Messages.BuildingWagon;
- if (numbTrainingPen > 0)
- message += Messages.BuildingTrainingPen;
-
- message += Messages.FormatRanchYoursDescription(ranch.Description);
- }
- else if(ranch.OwnerId == -1) // No mans sky
- {
-
- message += Messages.FormatRanchUnownedMeta(ranch.Value);
- if (user.OwnedRanch == null)
- {
- if (user.Subscribed)
- message += Messages.RanchYouCouldPurchaseThisRanch;
- else
- message += Messages.RanchSubscribersOnly;
- }
- else
- {
- message += Messages.RanchYouAllreadyOwnARanch;
- }
- }
- else
- {
- string title = ranch.Title;
- if (title == "" || title == null)
- title = Messages.RanchDefaultRanchTitle;
-
- message += Messages.FormatRanchTitle(Database.GetUsername(ranch.OwnerId), title);
- message += Messages.FormatRanchDescOthers(ranch.Description);
- }
-
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
-
- return message;
- }
- public static string BuildAuctionHorseList(User user)
- {
- string message = Messages.AuctionListHorse;
- foreach(HorseInstance horse in user.HorseInventory.HorseList)
- {
- if (horse.Leaser > 0)
- continue;
- if (horse.Category != "TRADING")
- continue;
-
- bool tacked = (horse.Equipment.Saddle != null || horse.Equipment.SaddlePad != null || horse.Equipment.Bridle != null || horse.Equipment.Companion != null);
-
- message += Messages.FormatAuctionHorseListEntry(horse.Name, tacked, horse.RandomId);
- }
-
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildAuction(User user, Auction auction)
- {
- Multiroom room = Multiroom.GetMultiroom(user.X, user.Y);
- room.Join(user);
-
- string message = "";
- message += Messages.AuctionsRunning;
- foreach(Auction.AuctionEntry entry in auction.AuctionEntries.ToArray())
- {
- message += Messages.FormatAuctionHorseEntry(Database.GetUsername(entry.OwnerId), entry.Horse.Color, entry.Horse.Breed.Name, entry.Horse.Gender, entry.Horse.BasicStats.Experience, entry.Completed ? "" : Messages.FormatAuctionViewHorseButton(entry.Horse.RandomId));
- if (!entry.Completed)
- message += Messages.FormatAuctionGoingTo(entry.TimeRemaining, Database.GetUsername(entry.HighestBidder), entry.HighestBid, entry.RandomId);
- else
- {
- if (entry.HighestBidder == entry.OwnerId)
- message += Messages.AuctionNotSold;
- else
- message += Messages.FormatAuctionSoldTo(Database.GetUsername(entry.HighestBidder), entry.HighestBid);
- }
- }
- User[] users = room.JoinedUsers.ToArray();
- List usernames = new List();
- foreach(User userInst in users)
- {
- usernames.Add(userInst.Username);
- }
- message += Messages.FormatAuctionPlayersHere(string.Join(", ", usernames.ToArray()));
- message += Messages.AuctionAHorse;
-
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildWorkshop(User user)
- {
- Workshop shop = Workshop.GetWorkshopAt(user.X, user.Y);
- string message = "";
- foreach (Workshop.CraftableItem craft in shop.CraftableItems)
- {
- Item.ItemInformation itmInfo = Item.GetItemById(craft.GiveItemId);
- message += Messages.FormatWorkshopCraftEntry(itmInfo.IconId, itmInfo.Name, craft.MoneyCost, itmInfo.Id, craft.Id);
- // Get requirements
- List Requirements = new List();
- foreach (Workshop.RequiredItem reqItem in craft.RequiredItems)
- {
-
- Item.ItemInformation requiredItemInfo = Item.GetItemById(reqItem.RequiredItemId);
- string requirementTxt;
- if (reqItem.RequiredItemCount <= 1)
- requirementTxt = Messages.FormatWorkshopRequireEntry(reqItem.RequiredItemCount, requiredItemInfo.Name);
- else
- requirementTxt = Messages.FormatWorkshopRequireEntry(reqItem.RequiredItemCount, requiredItemInfo.PluralName);
- Requirements.Add(requirementTxt);
- }
- message += Messages.FormatWorkshopRequirements(string.Join(Messages.WorkshopAnd, Requirements.ToArray()));
- }
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildGroomer(User User, Groomer groomer)
- {
- string message = "";
- int totalPrice = 0;
- int count = 0;
- foreach(HorseInstance horse in User.HorseInventory.HorseList)
- {
- message += Messages.FormatHorseGroomCurrentlyAt(horse.Name, horse.BasicStats.Groom, 1000);
- if(horse.BasicStats.Groom < groomer.Max)
- {
- int price = groomer.CalculatePrice(horse.BasicStats.Groom);
- totalPrice += price;
- count++;
- message += Messages.FormatGroomerApplyService(price, horse.RandomId);
- }
- }
- message += Messages.FormatGroomerApplyAllService(count, totalPrice);
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildVet(User user, Vet vet)
- {
- 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);
- }
-
- }
- if (user.HorseInventory.HorseList.Length > 0)
- message += Messages.FormatVetApplyAllServiceMeta(totalPrice);
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildBarn(User user, Barn barn)
- {
- string message = "";
- int totalPrice = 0;
- foreach (HorseInstance horse in user.HorseInventory.HorseList)
- {
- message += Messages.FormatBarnHorseStatus(horse.Name, horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst);
-
- int price = barn.CalculatePrice(horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst);
- if(price > 0)
- {
- totalPrice += price;
- message += Messages.FormatBarnLetHorseRelax(price, horse.RandomId);
- }
- else
- {
- message += Messages.BarnHorseMaxed;
- }
-
- }
- message += Messages.FormatBarnLetAllHorsesReleax(totalPrice);
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildFarrier(User user, Farrier farrier)
- {
- string message = "";
- int totalPrice = 0;
- int maxShoes = 1000;
- foreach (HorseInstance horse in user.HorseInventory.HorseList)
- {
- message += Messages.FormatFarrierCurrentShoes(horse.Name, horse.BasicStats.Shoes, maxShoes);
- if (horse.BasicStats.Shoes < farrier.IronShoesAmount)
- message += Messages.FormatFarrierApplyIron(farrier.IronCost, farrier.IronShoesAmount, horse.RandomId);
-
- if (horse.BasicStats.Shoes < farrier.SteelShoesAmount)
- {
- totalPrice += farrier.SteelCost;
- message += Messages.FormatFarrierApplySteel(farrier.SteelCost, farrier.SteelShoesAmount, horse.RandomId);
- }
-
- }
- if(totalPrice > 0)
- message += Messages.FormatFarrierApplySteelToAll(totalPrice, farrier.SteelShoesAmount);
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildRiddlerRiddle(User user)
- {
- string message = "";
- if (Riddler.HasCompletedAllRiddles(user)) {
- message = Messages.RiddlerAnsweredAll;
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- else
- {
- Riddler riddle = Riddler.GetRandomRiddle(user);
- user.LastRiddle = riddle;
-
- message += Messages.FormatRiddlerRiddle(riddle.Riddle);
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- }
-
-
- public static string BuildHorseEscapedMessage()
- {
- string message = Messages.HorseEvadedCapture;
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildHorseEscapedAnyway()
- {
- string message = Messages.HorseEscapedAnyway;
- 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, bool youView=true)
- {
- string message = "";
- int i = 1;
- foreach (HorseInfo.Category category in HorseInfo.HorseCategories)
- {
- HorseInstance[] horsesInCategory = user.HorseInventory.GetHorsesInCategory(category).OrderBy(o => o.Name).ToArray();
- if (horsesInCategory.Length > 0)
- {
- if (youView)
- message += category.Meta;
- else
- message += category.MetaOthers;
- 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)
- {
- string message = Messages.FormatHorseHeader(user.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 BuildPlayerListMenu(User user)
- {
- string message = "";
-
- int friendsOnline = 0;
- foreach(int friendId in user.Friends.List)
- {
- if (GameServer.IsUserOnline(friendId))
- friendsOnline++;
- }
-
- message += Messages.PlayerListHeader;
- message += Messages.PlayerListSelectFromFollowing;
- message += Messages.FormatPlayerBuddyList(friendsOnline);
- 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 BuildMailLetter(Mailbox.Mail mailMessage, int itemRandomId)
- {
- DateTime time = Util.UnixTimeStampToDateTime(mailMessage.Timestamp);
- string amOrPm = "am";
- string[] months = new string[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
- string minutes = time.Minute.ToString();
- if (minutes.Length <= 1)
- minutes = "0" + minutes;
- int hours = time.Hour;
- if (hours == 0)
- {
- amOrPm = "am";
- hours = 12;
- }
- if (hours > 12)
- {
- hours -= 12;
- amOrPm = "pm";
- }
-
-
- string date = months[time.Month-1] + " " + time.Day + ", " + time.Year + " " + hours + ":" + minutes + amOrPm;
- string message = Messages.FormatMailReadMessage(Database.GetUsername(mailMessage.FromUser), date, mailMessage.Subject, mailMessage.Message, itemRandomId);
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildMailList(User user, InventoryItem mailMessageForPlayer)
- {
- string message = Messages.MailSelectFromFollowing;
- foreach(ItemInstance inst in mailMessageForPlayer.ItemInstances)
- {
- Mailbox.Mail mail = user.MailBox.GetMessageByRandomId(inst.Data);
- message += Messages.FormatMailEntry(mail.Subject, Database.GetUsername(mail.FromUser), inst.RandomId);
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildInventoryInfo(PlayerInventory inv)
- {
- string message = "";
- message += Messages.FormatPlayerInventoryHeaderMeta(inv.Count, inv.BaseUser.MaxItems);
- InventoryItem[] items = inv.GetItemList();
- foreach(InventoryItem item in items)
- {
- Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
- string title = itemInfo.Name;
- if (item.ItemInstances.Length > 1 && itemInfo.PluralName != "")
- title = itemInfo.PluralName;
-
-
- message += Messages.FormatPlayerInventoryItemMeta(itemInfo.IconId, item.ItemInstances.Length, title);
-
- int randomId = item.ItemInstances[0].RandomId;
- if (itemInfo.Type != "QUEST" && itemInfo.Type != "TEXT" && !(itemInfo.Id == Item.DorothyShoes || itemInfo.Id == Item.Telescope) && World.CanDropItems(inv.BaseUser.X, inv.BaseUser.Y))
- message += Messages.FormatItemDropButton(randomId);
-
- if (itemInfo.Id == Item.DorothyShoes || itemInfo.Id == Item.Telescope)
- message += Messages.FormatItemUseButton(randomId);
-
- if (itemInfo.Id == Item.Present)
- message += Messages.FormatItemOpenButton(randomId);
-
- if (itemInfo.Type == "CLOTHES" || itemInfo.Type == "JEWELRY")
- message += Messages.FormatWearButton(randomId);
-
- if (itemInfo.Type == "TEXT")
- message += Messages.FormatItemReadButton(item.ItemId);
-
- if (itemInfo.Type == "PLAYERFOOD")
- message += Messages.FormatItemConsumeButton(randomId);
-
- if (Item.IsThrowable(itemInfo.Id))
- message += Messages.FormatItemThrowButton(itemInfo.Id);
-
- message += Messages.FormatItemInformationButton(randomId);
- message += Messages.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();
- bool isHorseFood = false;
- if (itemInfo.Effects.Length >= 2)
- isHorseFood = (itemInfo.Effects[1].EffectsWhat == "MOOD" && itemInfo.Effects[0].EffectsWhat == "HUNGER");
- if (itemInfo.Type == "HORSEFOOD" || isHorseFood)
- {
- message += Messages.FormatHorseFeedEntry(itemInfo.IconId, item.ItemInstances.Length, 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.Length, 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.Gender, 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)
- {
- bool isMyHorse = horse.Owner == user.Id;
- user.HorseWindowOpen = true;
-
- string message = "";
- if (isMyHorse)
- message += Messages.FormatHorseNameYours(horse.Name);
- else
- message += Messages.FormatHorseNameOthers(horse.Name, Database.GetUsername(horse.Owner));
-
- message += Messages.FormatHorseDescription(horse.Description);
- message += Messages.FormatHorseHandsHigh(horse.Color, horse.Breed.Name, horse.Gender, HorseInfo.CalculateHands(horse.AdvancedStats.Height, false));
- message += Messages.FormatHorseExperience(horse.BasicStats.Experience);
-
-
- if (horse.TrainTimer > 0)
- message += Messages.FormatTrainableIn(horse.TrainTimer);
- else
- message += Messages.HorseIsTrainable;
-
- if(horse.Leaser != 0)
- {
- message += Messages.FormatHorseIsLeased(horse.LeaseTime);
- }
-
- if (isMyHorse)
- {
- if (user.CurrentlyRidingHorse == null)
- message += Messages.FormatMountButton(horse.RandomId);
- else
- message += Messages.FormatDisMountButton(horse.RandomId);
-
-
- message += Messages.FormatFeedButton(horse.RandomId);
- if (horse.Leaser == 0)
- {
- message += Messages.FormatTackButton(horse.RandomId);
- }
- message += Messages.FormatPetButton(horse.RandomId);
- if (horse.Leaser == 0)
- {
- 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;
- }
- }
- else
- {
- message += Messages.R1;
- }
- }
- else
- {
- if (horse.AutoSell > 0)
- message += Messages.FormatAutoSellOthers(horse.AutoSell);
- }
-
-
- if (horse.Leaser == 0)
- {
-
- if (isMyHorse)
- message += Messages.FormatHorseCategory(horse.Category, Messages.HorseMarkAsCategory);
- else
- message += Messages.FormatHorseCategory(horse.Category, "");
- }
-
- message += Messages.HorseStats;
-
- // Energy == Tiredness
- 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);
-
- if(horse.Leaser == 0)
- {
- message += Messages.HorseCompanion;
- if (horse.Equipment.Companion != null)
- if (isMyHorse)
- message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, Messages.HorseCompanionChangeButton, horse.Equipment.Companion.Id);
- else
- message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, "", horse.Equipment.Companion.Id);
- else
- if (isMyHorse)
- 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(personalityStat.BreedValue, personalityStat.CompanionOffset, personalityStat.TackOffset, personalityStat.MaxValue);
-
- message += Messages.FormatHorseBreedDetails(horse.Breed.Name, horse.Breed.Description);
- message += Messages.FormatHorseHeight(HorseInfo.CalculateHands(horse.Breed.BaseStats.MinHeight, false), HorseInfo.CalculateHands(horse.Breed.BaseStats.MaxHeight, false));
-
- message += Messages.FormatPossibleColors(horse.Breed.Colors);
- if (horse.Leaser == 0)
- {
- if (isMyHorse)
- {
- 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.FormatHorseReleaseButton(horse.Breed.Type.ToUpper());
- }
- }
-
-
- message += Messages.HorseOthers;
- if (isMyHorse)
- message += buildHorseList(user);
- else
- message += buildHorseListIndependantlyOfUserInstance(horse.Owner);
-
- 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.Gender, 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.OrderBy(o => Tracking.GetTrackedItemsStatsMenuName(o.What)))
- {
- 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);
- if (horse.Breed.Type == "llama")
- message += Messages.HorseLlamaTackInInventory;
- else if (horse.Breed.Type == "camel")
- message += Messages.HorseCamelTackInInventory;
- else
- message += Messages.HorseTackInInventory;
-
- foreach(InventoryItem item in user.Inventory.GetItemList())
- {
- Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
- if (itemInfo.Type == "TACK")
- {
- if (horse.Breed.Type == "camel" && itemInfo.GetMiscFlag(1) != 1)
- continue;
- else if (horse.Breed.Type == "llama" && itemInfo.GetMiscFlag(1) != 2)
- continue;
- else if (!(horse.Breed.Type == "llama" || horse.Breed.Type == "camel") && itemInfo.GetMiscFlag(1) != 0)
- continue;
- message += Messages.FormatHorseEquip(itemInfo.IconId, item.ItemInstances.Length, itemInfo.Name, itemInfo.Id);
- }
- }
-
- message += Messages.BackToHorse;
- return message;
- }
- public static string BuildNpcChatpoint(User user, Npc.NpcEntry npc, Npc.NpcChat chatpoint)
- {
- bool hideReplys = false;
- if (chatpoint.ActivateQuestId != 0)
- {
- Quest.QuestEntry quest = Quest.GetQuestById(chatpoint.ActivateQuestId);
- user.MajorPriority = true;
-
- Quest.QuestResult result = Quest.ActivateQuest(user, quest, true);
- if (result.QuestCompleted)
- {
- if (result.SetChatpoint != -1)
- Npc.SetDefaultChatpoint(user, npc, result.SetChatpoint);
-
- if (result.GotoChatpoint != -1)
- chatpoint = Npc.GetNpcChatpoint(npc, result.GotoChatpoint);
-
- if (result.NpcChat != null && result.NpcChat.Trim() != "")
- chatpoint.ChatText = result.NpcChat;
- }
- else
- {
- if (result.GotoChatpoint != -1)
- chatpoint = Npc.GetNpcChatpoint(npc, result.GotoChatpoint);
-
+using HISP.Game.Horse;
+using HISP.Game.Inventory;
+using HISP.Game.Services;
+using HISP.Player;
+using HISP.Server;
+using HISP.Game.Items;
+using HISP.Game.Chat;
+using HISP.Game.Events;
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Drawing;
+
+namespace HISP.Game
+{
+ public class Meta
+ {
+ private static bool overwrite = false;
+
+ 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 buildPlayersHere(User fromUser, int x, int y)
+ {
+ string playersHere = "";
+ User[] playersAt = GameServer.GetUsersAt(x, y, true, true);
+ if(playersAt.Length > 1)
+ {
+ playersHere += Messages.PlayersHere;
+ int count = 0;
+ foreach(User playerAt in playersAt)
+ {
+ if (playerAt.Id == fromUser.Id)
+ continue;
+ string buttons = "";
+ buttons += Messages.FormatPlayerHereProfileButton(playerAt.Id);
+ buttons += Messages.FormatPlayerHereSocialButtton(playerAt.Id);
+ buttons += Messages.FormatPlayerHereTradeButton(playerAt.Id);
+ if (fromUser.Friends.IsFriend(playerAt.Id))
+ buttons += Messages.FormatPlayerHereTagButton(playerAt.Id);
+ else
+ buttons += Messages.FormatPlayerHereBuddyButton(playerAt.Id);
+ buttons += Messages.FormatPmButton(playerAt.Username);
+
+ playersHere += Messages.FormatPlayerHereMenu(playerAt.GetPlayerListIcon(), playerAt.Username,buttons);
+ count++;
+ }
+
+ if(count >= 2)
+ {
+ SocialType stype = SocialType.GetSocialType("GROUP");
+ foreach(SocialType.Social social in stype.Socials)
+ {
+ playersHere += Messages.FormatSocialButton(social.Id, social.ButtonName);
+ }
+ playersHere += Messages.R1;
+ }
+
+ if (count <= 0)
+ return "";
+ }
+
+ return playersHere;
+ }
+
+ private static string buildNearbyString(int x, int y, bool showNearbyPlayersHeader=true)
+ {
+ string playersNearby = "";
+
+ User[] nearbyUsers = GameServer.GetNearbyUsers(x, y, true, true);
+ int count = 0;
+ if (nearbyUsers.Length > 1)
+ {
+ if(showNearbyPlayersHeader)
+ {
+ playersNearby += Messages.NearbyPlayers;
+ }
+
+ string usersWest = "";
+ string usersNorth = "";
+ string usersEast = "";
+ string usersSouth = "";
+
+ foreach (User nearbyUser in nearbyUsers)
+ {
+ if (nearbyUser.X == x && nearbyUser.Y == y) // not yourself
+ continue;
+
+ int xDiff = x - nearbyUser.X;
+ int yDiff = y - nearbyUser.Y;
+ double angle = (Math.Atan2(yDiff, xDiff) * 180.0 / Math.PI);
+ angle -= 45;
+ angle = (angle % 360 + 360) % 360;
+
+ if (angle >= 270 && angle <= 360 )
+ usersWest += nearbyUser.Username + " ";
+ else if (angle >= 90 && angle <= 180)
+ usersEast += nearbyUser.Username + " ";
+ else if (angle >= 180 && angle <= 270)
+ usersSouth += nearbyUser.Username + " ";
+ else if (angle >= 0 && angle <= 90)
+ usersNorth += nearbyUser.Username + " ";
+
+
+ count++;
+ }
+
+ 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;
+
+
+
+ }
+ if(count <= 0)
+ {
+ return "";
+ }
+ 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 += Messages.R1;
+ Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
+
+ int count = item.ItemInstances.Length;
+ 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 += Messages.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.Length;
+ string countStr = count.ToString();
+
+
+ message += Messages.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 += Messages.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.Length;
+ message += Messages.FormatNumberOfWishingCoins(totalCoins);
+ message += Messages.WishingWellMeta;
+ }
+
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+
+
+ }
+
+ private static string buildCommonInfo(User user, int x, int y)
+ {
+ user.HorseWindowOpen = false;
+ string message = "";
+ message += buildPlayersHere(user, x, y);
+ bool playersHere = (GameServer.GetUsersAt(x, y, true, true).Length >= 1);
+ message += buildNearbyString(x, y, playersHere);
+
+ // 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, bool other)
+ {
+ string message = "";
+
+ // Insert LGBT Patch here
+
+ string pronoun = "";
+
+ if (other)
+ {
+ if (user.Gender == "FEMALE")
+ {
+ pronoun = Messages.PronounFemaleShe;
+ }
+
+ if (user.Gender == "MALE")
+ {
+ pronoun = Messages.PronounMaleHe;
+ }
+ }
+
+ if (!other)
+ message += Messages.JewelrySelected;
+ else
+ message += Messages.FormatOtherJewelerySelected(pronoun);
+
+ bool hasMsg = false;
+
+ if (user.EquipedJewelry.Slot1 != null)
+ {
+ message += Messages.FormatJewelrySlot1(user.EquipedJewelry.Slot1.Name, user.EquipedJewelry.Slot1.IconId, other);
+ hasMsg = true;
+ }
+ if (user.EquipedJewelry.Slot2 != null)
+ {
+ message += Messages.FormatJewelrySlot2(user.EquipedJewelry.Slot2.Name, user.EquipedJewelry.Slot2.IconId, other);
+ hasMsg = true;
+ }
+ if (user.EquipedJewelry.Slot3 != null)
+ {
+ message += Messages.FormatJewelrySlot3(user.EquipedJewelry.Slot3.Name, user.EquipedJewelry.Slot3.IconId, other);
+ hasMsg = true;
+ }
+ if (user.EquipedJewelry.Slot4 != null)
+ {
+ message += Messages.FormatJewelrySlot4(user.EquipedJewelry.Slot4.Name, user.EquipedJewelry.Slot4.IconId, other);
+ hasMsg = true;
+ }
+
+ if (!hasMsg)
+ {
+ if (!other)
+ message = Messages.NoJewerlyEquipped;
+ else
+ message = Messages.FormatOtherNoJewelery(pronoun);
+ }
+
+
+
+ return message;
+ }
+
+ private static string buildMultiroom(string id, User user)
+ {
+
+ string message = Messages.MultiroomPlayersParticipating;
+
+ Multiroom room = Multiroom.GetMultiroom(user.X, user.Y);
+ room.Join(user);
+
+ foreach (User userOnTile in room.JoinedUsers)
+ {
+ if (userOnTile.Id == user.Id)
+ continue;
+
+ message += Messages.FormatMultiroomParticipent(userOnTile.Username);
+ }
+
+ message += Messages.R1;
+
+ if(id == null) // Generic
+ {
+ // Do nothing
+ }
+ else if (id[0] == 'P') // Poet
+ {
+ int lastPoet = Database.GetLastPlayer(id);
+ string username = "";
+ if (lastPoet != -1)
+ username = Database.GetUsername(lastPoet);
+
+ message += Messages.FormatLastPoet(username);
+ }
+ else if (id[0] == 'D') // Drawning room
+ {
+ int lastDraw = Database.GetLastPlayer(id);
+ string username = "";
+ if (lastDraw != -1)
+ username = Database.GetUsername(lastDraw);
+
+ message += Messages.FormatLastToDraw(username);
+ }
+
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildEquippedCompetitionGear(User user, bool other = false)
+ {
+ string message = "";
+
+ if (!other)
+ message = Messages.CompetitionGearSelected;
+
+ // Insert LGBT Patch Here
+
+ string pronoun = Messages.PronounYouYour;
+ string pronoun2 = Messages.PronounYouYour;
+ if (other)
+ {
+ if (user.Gender == "FEMALE")
+ {
+ pronoun = Messages.PronounFemaleShe;
+ pronoun2 = Messages.PronounFemaleHer;
+ }
+ else if (user.Gender == "MALE")
+ {
+ pronoun = Messages.PronounMaleHe;
+ pronoun2 = Messages.PronounMaleHis;
+ }
+
+ message = Messages.FormatOtherCompetitionGear(pronoun);
+ }
+
+ bool hasMsg = false;
+
+ if (user.EquipedCompetitionGear.Head != null)
+ {
+ message += Messages.FormatCompetitionGearHead(user.EquipedCompetitionGear.Head.Name, pronoun2, user.EquipedCompetitionGear.Head.IconId, other);
+ hasMsg = true;
+ }
+ if (user.EquipedCompetitionGear.Body != null)
+ {
+ message += Messages.FormatCompetitionGearBody(user.EquipedCompetitionGear.Body.Name, pronoun2, user.EquipedCompetitionGear.Body.IconId, other);
+ hasMsg = true;
+ }
+ if (user.EquipedCompetitionGear.Legs != null)
+ {
+ message += Messages.FormatCompetitionGearLegs(user.EquipedCompetitionGear.Legs.Name, pronoun2, user.EquipedCompetitionGear.Legs.IconId, other);
+ hasMsg = true;
+ }
+ if (user.EquipedCompetitionGear.Feet != null)
+ {
+ message += Messages.FormatCompetitionGearFeet(user.EquipedCompetitionGear.Feet.Name, pronoun2, user.EquipedCompetitionGear.Feet.IconId, other);
+ hasMsg = true;
+ }
+
+ if (!hasMsg)
+ {
+ if (!other)
+ message = Messages.NoCompetitionGear;
+ else
+ message = Messages.FormatOtherNoCompetitionGear(pronoun);
+ }
+
+ return message;
+
+ }
+
+ private static string buildHorseListIndependantlyOfUserInstance(int userId)
+ {
+ string message = "";
+ int i = 1;
+
+
+ foreach (HorseInfo.Category category in HorseInfo.HorseCategories)
+ {
+ HorseInstance[] horsesInCategory = Database.GetPlayerHorsesInCategory(userId, category.Name).OrderBy(o => o.Name).ToArray();
+ if (horsesInCategory.Length > 0)
+ {
+ message += category.MetaOthers;
+ 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 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.RequiresQuestIdCompleted) <= 0)
+ continue;
+
+ if (ent.RequiresQuestIdNotCompleted != 0)
+ if (user.Quests.GetTrackedQuestAmount(ent.RequiresQuestIdNotCompleted) >= 1)
+ continue;
+
+ message += Messages.FormatNpcStartChatMessage(ent.IconId, ent.Name, ent.ShortDescription, ent.Id);
+ if(ent.Chatpoints.Length > 0)
+ {
+ if (ent.LongDescription != "")
+ message += Messages.FormatNpcInformationButton(ent.Id);
+ message += Messages.FormatNpcTalkButton(ent.Id);
+ }
+ else
+ {
+ message += Messages.NpcNoChatpoints;
+ }
+ message += Messages.R1;
+ }
+ return message;
+ }
+ public static string buildVenusFlyTrap(User user)
+ {
+ int moneyLost = GameServer.RandomNumberGenerator.Next(0, 100);
+ if (moneyLost > user.Money)
+ moneyLost = user.Money;
+ user.TakeMoney(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 BuildTradeAdd(Trade trade)
+ {
+ string message = Messages.FormatTradeWhatToOffer(trade.OtherTrade.Trader.Username);
+ message += Messages.TradeOfferMoney;
+ message += Messages.TradeOfferHorse;
+ foreach(HorseInstance horse in trade.Trader.HorseInventory.HorseList.OrderBy(o => o.Name))
+ {
+ if (horse.Leaser > 0)
+ continue;
+
+ if (horse.Category != "TRADING")
+ continue;
+
+ bool tacked = (horse.Equipment.Saddle != null || horse.Equipment.SaddlePad != null || horse.Equipment.Bridle != null || horse.Equipment.Companion != null);
+ message += Messages.FormatTradeOfferHorse(horse.Name, tacked, horse.RandomId);
+ }
+
+ if(trade.OtherTrade.Trader.Inventory.Count >= trade.OtherTrade.Trader.MaxItems)
+ {
+ message += Messages.TradeOfferItemOtherPlayerInvFull;
+ }
+ else
+ {
+ message += Messages.TradeOfferItem;
+ foreach(InventoryItem item in trade.Trader.Inventory.GetItemList())
+ {
+ Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
+ if (itemInfo.Type == "QUEST" || itemInfo.Type == "TEXT" || itemInfo.Id == Item.DorothyShoes)
+ continue;
+ message += Messages.FormatTradeOfferItem(itemInfo.IconId, itemInfo.Name, item.ItemInstances.Length, item.ItemId);
+ }
+ }
+
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+
+ }
+ public static string BuildSocialMenu(bool onHorse)
+ {
+ string message = "";
+ foreach(SocialType sType in SocialType.SocialTypes)
+ {
+ if (sType.Type == "GROUP")
+ continue;
+ if (sType.Type == "HORSE")
+ if (!onHorse)
+ continue;
+
+ message += Messages.FormatSocialMenuType(sType.Type);
+ foreach(SocialType.Social social in sType.Socials)
+ {
+ message += Messages.FormatSocialButton(social.Id, social.ButtonName);
+ }
+ message += Messages.R1;
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+
+ public static string BuildTradeAddItem(int totalItems)
+ {
+ string message = "";
+ message += Messages.FormatTradeOfferItemSubmenu(totalItems);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildTradeAddMoney(int curMoney)
+ {
+ string message = "";
+ message += Messages.FormatTradeOfferMoneySubmenu(curMoney);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildTrade(Trade trade)
+ {
+
+ string message = "";
+ message += Messages.FormatTradeWithPlayer(trade.OtherTrade.Trader.Username);
+
+
+
+ if (trade.Stage == "DONE" && trade.OtherTrade.Stage == "DONE")
+ message += Messages.TradeFinalReview;
+ else if (trade.Stage == "DONE")
+ message += Messages.TradeWaitingForOtherDone;
+ else if (trade.OtherTrade.Stage == "DONE")
+ message += Messages.TradeOtherPlayerIsDone;
+
+
+ message += Messages.FormatTradeYourOffering(trade.OtherTrade.Trader.Username);
+ if (trade.MoneyOffered == 0 && trade.ItemsOffered.Length == 0 && trade.HorsesOffered.Length == 0)
+ message += Messages.TradeOfferingNothing;
+ if (trade.MoneyOffered > 0)
+ message += Messages.FormatTradeMoneyOffer(trade.MoneyOffered);
+ if(trade.HorsesOffered.Length > 0)
+ foreach(HorseInstance horse in trade.HorsesOffered)
+ message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId);
+ if(trade.ItemsOffered.Length > 0)
+ foreach(ItemInstance[] item in trade.ItemsOffered)
+ {
+ Item.ItemInformation itemInfo = item[0].GetItemInfo();
+ string name = itemInfo.Name;
+ if (item.Length > 1)
+ name = itemInfo.PluralName;
+
+ message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name);
+ }
+
+ if(trade.Stage == "OPEN")
+ message += Messages.TradeAddItems;
+
+ message += Messages.FormatTradeOtherOffering(trade.OtherTrade.Trader.Username);
+ if (trade.OtherTrade.MoneyOffered == 0 && trade.OtherTrade.ItemsOffered.Length == 0 && trade.OtherTrade.HorsesOffered.Length == 0)
+ message += Messages.TradeOfferingNothing;
+ if (trade.OtherTrade.MoneyOffered > 0)
+ message += Messages.FormatTradeMoneyOffer(trade.OtherTrade.MoneyOffered);
+ if (trade.OtherTrade.HorsesOffered.Length > 0)
+ foreach (HorseInstance horse in trade.OtherTrade.HorsesOffered)
+ message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId);
+ if (trade.OtherTrade.ItemsOffered.Length > 0)
+ foreach (ItemInstance[] item in trade.OtherTrade.ItemsOffered)
+ {
+ Item.ItemInformation itemInfo = item[0].GetItemInfo();
+ string name = itemInfo.Name;
+ if (item.Length > 1)
+ name = itemInfo.PluralName;
+
+ message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name);
+ }
+
+ if (trade.Stage == "OPEN")
+ message += Messages.TradeWhenDoneClick;
+ if (((trade.Stage == "DONE" || trade.Stage == "ACCEPTED") && (trade.OtherTrade.Stage == "DONE" || trade.Stage == "ACCEPTED")) )
+ message += Messages.TradeAcceptTrade;
+
+ message += Messages.TradeCancelAnytime;
+
+ return message;
+ }
+
+ public static string buildTackPeiceLibary(Item.ItemInformation item)
+ {
+ string message = "";
+ message += Messages.FormatTackSetPeice(item.Name, item.Description);
+ return message;
+ }
+
+ public static string BuildTackLibary()
+ {
+ string message = "";
+
+ foreach (Tack.TackSet set in Tack.TackSets.OrderBy(o => o.SortPosition()).ToArray())
+ {
+ string[] setSwfs = set.GetSwfNames();
+ string swf = "breedviewer.swf?terrain=book2&breed=tackonly";
+ if (setSwfs.Length >= 1)
+ swf += "&saddle=" + setSwfs[0];
+ if (setSwfs.Length >= 2)
+ swf += "&saddlepad=" + setSwfs[1];
+ if (setSwfs.Length >= 3)
+ swf += "&bridle=" + setSwfs[2];
+ swf += "&j=";
+
+ message += Messages.FormatTackSetView(set.IconId, set.SetName, swf);
+
+ // Write all peices
+ try
+ {
+ message += buildTackPeiceLibary(set.GetSaddle());
+ message += buildTackPeiceLibary(set.GetSaddlePad());
+ message += buildTackPeiceLibary(set.GetBridle());
+ }
+ catch (Exception e)
+ {
+ Logger.ErrorPrint(e.Message);
+ }
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildMinigamesLibary()
+ {
+ string message = "";
+ message += Messages.MinigameSingleplayer;
+ foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title))
+ {
+ if (tile.TypeFlag == "1PLAYER")
+ {
+ string mapXy = Messages.FormatMapLocation(tile.X, tile.Y);
+ message += Messages.FormatMinigameEntry(tile.Title, mapXy);
+ }
+ }
+ message += Messages.MinigameTwoplayer;
+ foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title))
+ {
+ if (tile.TypeFlag == "2PLAYER")
+ {
+ string mapXy = Messages.FormatMapLocation(tile.X, tile.Y);
+ message += Messages.FormatMinigameEntry(tile.Title, mapXy);
+ }
+ }
+ message += Messages.MinigameMultiplayer;
+ foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title))
+ {
+ if (tile.TypeFlag == "MULTIPLAYER")
+ {
+ string mapXy = Messages.FormatMapLocation(tile.X, tile.Y);
+ message += Messages.FormatMinigameEntry(tile.Title, mapXy);
+ }
+ }
+ message += Messages.MinigameCompetitions;
+ foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title))
+ {
+ if (tile.TypeFlag == "ARENA")
+ {
+ string mapXy = Messages.FormatMapLocation(tile.X, tile.Y);
+ message += Messages.FormatMinigameEntry(tile.Title, mapXy);
+ }
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildRealTimeQuiz(RealTimeQuiz.Participent participent)
+ {
+ // Uber Priority xD
+ participent.UserInstance.MinorPriority = true;
+ participent.UserInstance.MajorPriority = true;
+ return Messages.FormatEventRealTimeQuizMeta(participent.CorrectAnswers, participent.MistakenAnswers, participent.OnQuestion.BaseCategory.Name, participent.OnQuestion.Question);
+ }
+ public static string BuildCompanionLibary()
+ {
+ string message = "";
+ foreach (Item.ItemInformation itm in Item.Items.OrderBy(o => o.GetMiscFlag(0)).ToArray())
+ {
+ if (itm.Type == "COMPANION" && itm.EmbedSwf != null)
+ {
+ string swf = "breedviewer.swf?terrain=book2&breed=tackonly&companion=" + itm.EmbedSwf + "&j=";
+ message += Messages.FormatCompanionViewButton(itm.IconId, itm.Name, swf);
+ message += Messages.FormatCompanionEntry(itm.Description);
+ }
+ }
+ message += Messages.BackToMap;
+ 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 BuildRanchSearchResults(string search)
+ {
+ string message = "";
+ message += Messages.LibaryFindRanchResultsHeader;
+ int totalResults = 0;
+ foreach(Ranch ranch in Ranch.Ranches)
+ {
+ if(ranch.OwnerId != -1)
+ {
+ string ranchOwnerName = Database.GetUsername(ranch.OwnerId);
+ if(ranchOwnerName.ToLower().Contains(search.ToLower()))
+ {
+ message += Messages.FormatRanchSearchResult(ranchOwnerName, ranch.X, ranch.Y);
+ totalResults++;
+ }
+ }
+ if (totalResults >= 10)
+ break;
+ }
+ if (totalResults == 0)
+ message += Messages.LibaryFindRanchResultsNoResults;
+
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildRanchSearchLibary()
+ {
+ string message = "";
+ message += Messages.LibaryFindRanch;
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildAwardsLibary()
+ {
+ string message = "";
+ message += Messages.AwardsAvalible;
+ foreach (Award.AwardEntry award in Award.GlobalAwardList.OrderBy(o => o.Sort).ToArray())
+ {
+ message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus, award.Description);
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildBookReadLibary(Book book)
+ {
+ string message = "";
+ message = Messages.FormatBookReadMeta(book.Author, book.Title, book.Text);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildBooksLibary()
+ {
+ string message = "";
+ message += Messages.BooksOfHorseIsle;
+ foreach (Book libaryBook in Book.LibaryBooks.OrderBy(o => o.Title).ToArray())
+ {
+ message += Messages.FormatBookEntry(libaryBook.Title, libaryBook.Author, libaryBook.Id);
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+
+ 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." + Messages.BackToMap + Messages.MetaTerminator;
+ 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 BuildTopWinners(string gameName)
+ {
+ Highscore.HighscoreTableEntry[] scores = Database.GetTopWinners(gameName, 20);
+ if (scores.Length <= 0)
+ return "ERROR: No wins recorded." + Messages.BackToMap + Messages.MetaTerminator;
+ string message = "";
+
+ message += Messages.FormatWinlooseHeader(gameName);
+
+ for (int i = 0; i < scores.Length; i++)
+ {
+ message += Messages.FormatWinlooseListEntry(i + 1, scores[i].Wins, scores[i].Looses, 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, false);
+ if (scores.Length <= 0)
+ return "ERROR: No times recorded. "+Messages.BackToMap+Messages.MetaTerminator;
+ 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, true), 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 BuildRanchTraining(User user)
+ {
+ string message = "";
+ message += Messages.RanchTrainAllAttempt;
+ int horsesTrained = 0;
+ foreach(HorseInstance horse in user.HorseInventory.HorseList)
+ {
+ if(horse.BasicStats.Mood < 200)
+ {
+ message += Messages.FormatRanchTrainBadMood(horse.Name);
+ }
+ if(horse.TrainTimer == 0)
+ {
+ horse.AdvancedStats.Speed += 1;
+ horse.AdvancedStats.Strength += 1;
+ horse.AdvancedStats.Conformation += 1;
+ horse.AdvancedStats.Agility += 1;
+ horse.AdvancedStats.Endurance += 1;
+ horse.BasicStats.Experience += 1;
+ horse.TrainTimer = 720;
+ horsesTrained++;
+ message += Messages.FormatRanchTrain(horse.Name, 1, 1, 1, 1, 1, 1);
+ }
+ else
+ {
+ message += Messages.FormatRanchTrainFail(horse.Name, horse.TrainTimer);
+ }
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+
+ public static string BuildTransportInfo(User user, 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);
+ string costFormat = Messages.FormatTransportCost(transportLocation.Cost);
+ if(transportLocation.Type == "WAGON")
+ {
+ if (user.OwnedRanch != null)
+ {
+ if (user.OwnedRanch.GetBuildingCount(7) > 0) // Wagon
+ {
+ costFormat = Messages.TransportWagonFree;
+ }
+ }
+ }
+
+
+ message += Messages.FormatTransportMessage(transportLocation.Type, transportLocation.LocationTitle, costFormat, transportLocation.Id, transportLocation.GotoX, transportLocation.GotoY);
+ }
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildStatsMenu(User user, bool other=false)
+ {
+ string message = Messages.FormatStatsBar(user.Username);
+
+ string areaString = buildAreaString(user.X, user.Y);
+ if (areaString != "")
+ message += Messages.FormatStatsArea(areaString);
+ if(!other)
+ 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.Tiredness), Messages.StatTired));
+ message += Messages.FormatGenderStat(user.Gender);
+ message += Messages.FormatJewelryStat(buildWornJewelery(user, other));
+ message += Messages.FormatCompetitionGearStat(buildEquippedCompetitionGear(user, other));
+
+ if(!other)
+ {
+ message += Messages.StatsPrivateNotesButton;
+ message += Messages.StatsQuestsButton;
+ message += Messages.StatsMinigameRankingButton;
+ message += Messages.StatsAwardsButton;
+ message += Messages.StatsMiscButton;
+ }
+ else
+ {
+ // Insert LGBT Patch here
+
+ string pronoun = "";
+ if (other)
+ {
+ if (user.Gender == "FEMALE")
+ pronoun = Messages.PronounFemaleHer;
+
+ if (user.Gender == "MALE")
+ pronoun = Messages.PronounMaleHis;
+ }
+
+ message += Messages.FormatOtherHorsesMeta(pronoun);
+
+ message += buildHorseList(user, false);
+
+ message += Messages.FormatAwardHeaderOthers(user.Username);
+ 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 BuildWildHorseList(User user)
+ {
+ string message = "";
+ WildHorse[] horses = WildHorse.GetHorsesAt(user.X, user.Y);
+ if (horses.Length > 0)
+ {
+ message = Messages.HorsesHere;
+ foreach (WildHorse horse in horses)
+ {
+ bool vowel = (horse.Instance.Breed.Name[0].ToString().ToLower() == "a" || horse.Instance.Breed.Name[0].ToString().ToLower() == "i" || horse.Instance.Breed.Name[0].ToString().ToLower() == "u" || horse.Instance.Breed.Name[0].ToString().ToLower() == "e" || horse.Instance.Breed.Name[0].ToString().ToLower() == "o");
+ message += Messages.FormatWildHorse(horse.Instance.Name, horse.Instance.Breed.Name, horse.Instance.RandomId, vowel);
+ }
+ }
+ 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 currentUser)
+ {
+ string message = "";
+ message += Messages.NearbyPlayersListHeader;
+ User[] nearbyUsers = GameServer.GetNearbyUsers(currentUser.X, currentUser.Y, false, true);
+ foreach (User nearbyUser in nearbyUsers)
+ {
+ if (nearbyUser.Stealth)
+ continue;
+
+ if (nearbyUser.Id == currentUser.Id)
+ continue;
+
+
+ bool isYou = (nearbyUser.Id == currentUser.Id);
+
+ int icon = nearbyUser.GetPlayerListIcon();
+ string iconFormat = "";
+ if (icon != -1)
+ iconFormat = Messages.FormatIconFormat(icon);
+
+ message += Messages.FormatPlayerEntry(iconFormat, nearbyUser.Username, nearbyUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - nearbyUser.LoginTime).TotalMinutes)), nearbyUser.X, nearbyUser.Y, nearbyUser.Idle, currentUser.MutePlayer.IsUserMuted(nearbyUser), isYou);
+ }
+
+ message += Messages.PlayerListIconInformation;
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+
+ return message;
+ }
+
+ public static string BuildPlayerListAlphabetical(User currentUser)
+ {
+ string message = Messages.PlayerListAllAlphabeticalHeader;
+ GameClient[] clients = GameClient.ConnectedClients;
+ List onlineUsers = new List();
+
+ 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)
+ {
+
+ bool isYou = (onlineUser.Id == currentUser.Id);
+ int icon = onlineUser.GetPlayerListIcon();
+ string iconFormat = "";
+ if (icon != -1)
+ iconFormat = Messages.FormatIconFormat(icon);
+
+ message += Messages.FormatPlayerEntry(iconFormat, onlineUser.Username, onlineUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - onlineUser.LoginTime).TotalMinutes)), onlineUser.X, onlineUser.Y, onlineUser.Idle, currentUser.MutePlayer.IsUserMuted(onlineUser), isYou);
+ }
+
+ message += Messages.PlayerListIconInformation;
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+
+ return message;
+ }
+
+ public static string BuildPlayerList(User currentUser)
+ {
+ string message = Messages.PlayerListAllHeader;
+ GameClient[] clients = GameClient.ConnectedClients;
+ foreach (GameClient client in clients)
+ {
+ if (client.LoggedIn)
+ {
+ if (client.LoggedinUser.Stealth)
+ continue;
+
+ bool isYou = (client.LoggedinUser.Id == currentUser.Id);
+
+ int icon = client.LoggedinUser.GetPlayerListIcon();
+ string iconFormat = "";
+ if (icon != -1)
+ iconFormat = Messages.FormatIconFormat(icon);
+
+ message += Messages.FormatPlayerEntry(iconFormat, client.LoggedinUser.Username, client.LoggedinUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - client.LoggedinUser.LoginTime).TotalMinutes)), client.LoggedinUser.X, client.LoggedinUser.Y, client.LoggedinUser.Idle, currentUser.MutePlayer.IsUserMuted(client.LoggedinUser), isYou);
+ }
+ }
+
+ 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, Convert.ToInt32(Math.Round((DateTime.UtcNow - friend.LoginTime).TotalMinutes)), friend.X, friend.Y);
+
+ }
+ catch (KeyNotFoundException) { }
+
+ }
+ message += Messages.BuddyListOfflineBuddys;
+
+
+ foreach (int id in user.Friends.List.ToArray())
+ {
+ if (GameServer.IsUserOnline(id))
+ continue;
+
+ string username = Database.GetUsername(id);
+ int minutes = Convert.ToInt32(Math.Round(DateTime.UtcNow.Subtract(Util.UnixTimeStampToDateTime(Database.GetPlayerLastLogin(id))).TotalMinutes));
+
+ 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 BuildHorseBreedListLibary()
+ {
+ 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 foundNpcs = new List();
+ 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;
+ }
+ public static string BuildWhisperSearchResults(WildHorse[] results)
+ {
+ string message = Messages.WhispererSearchingAmoungHorses;
+ if (results.Length <= 0)
+ {
+ message = Messages.WhispererNoneFound;
+ }
+ else
+ {
+ List locations = new List();
+ foreach (WildHorse result in results)
+ {
+ Point location = new Point();
+ location.X = result.X;
+ location.Y = result.Y;
+ locations.Add(location);
+ }
+ string mapxys = Messages.FormatMapLocations(locations.ToArray());
+ message += Messages.FormatWhispererHorseFoundMeta(mapxys);
+ }
+ 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 buildHorseWhisperer()
+ {
+ string message = "";
+ foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList())
+ {
+ if (breed.Swf == "")
+ continue;
+ if (breed.SpawnInArea == "none")
+ continue;
+ message += Messages.FormatWhispererHorseBreedButton(breed.Name, breed.Id);
+ }
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+
+ private static string buildBank(User user)
+ {
+ double moneyMade = 0;
+ if (user.BankInterest > user.BankMoney)
+ {
+ moneyMade = user.BankInterest - user.BankMoney;
+ if (moneyMade > 100000000)
+ moneyMade = 100000000;
+ user.BankMoney += moneyMade;
+
+ }
+
+ 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;
+ }
+ public static string BuildMinigamePlayers()
+ {
+ string message = Messages.CityHallTop25MinigamePlayers;
+ int placing = 1;
+ foreach (int userId in Database.GetMinigamePlayers())
+ {
+ string username = Database.GetUsername(userId);
+ int totalMinigames = Database.GetPlayerTotalMinigamesPlayed(userId);
+
+ message += Messages.FormatCityHallTopMinigamePlayers(placing, totalMinigames, username);
+ placing++;
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildMostExperienedHoses()
+ {
+ string message = Messages.CityHallTop25ExperiencedHorses;
+
+ int placing = 1;
+ foreach (HorseInstance horse in Database.GetMostExperiencedHorses())
+ {
+ message += Messages.FormatCityHallTopExperiencedHorses(placing, horse.BasicStats.Experience, Database.GetUsername(horse.Owner), horse.Name);
+ placing++;
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildExperiencedPlayers()
+ {
+ string message = Messages.CityHallTop25ExperiencedPlayers;
+ int placing = 1;
+ foreach (int userId in Database.GetExperiencedPlayers())
+ {
+ string username = Database.GetUsername(userId);
+ int exp = Database.GetExperience(userId);
+
+ message += Messages.FormatCityHallTopExperiencedPlayersEntry(placing, exp, username);
+ placing++;
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildAdventurousPlayers()
+ {
+ string message = Messages.CityHallTop25AdventurousPlayers;
+ int placing = 1;
+ foreach (int userId in Database.GetAdventurousPlayers())
+ {
+ string username = Database.GetUsername(userId);
+ int questPoints = Database.GetPlayerQuestPoints(userId);
+
+ message += Messages.FormatCityHallTopAdventurousPlayersEntry(placing, questPoints, username);
+ placing++;
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildMostSpoiledHorses()
+ {
+ string message = Messages.CityHallTop100SpoiledHorses;
+ foreach(HorseInstance horse in Database.GetMostSpoiledHorses())
+ {
+ message += Messages.FormatCityHallTopSpoiledHorseEntry(horse.Spoiled, Database.GetUsername(horse.Owner), horse.Name);
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildRichestPlayers()
+ {
+ string message = Messages.CityHallTop25Players;
+ int placing = 1;
+ foreach(int userId in Database.GetRichestPlayers())
+ {
+ string username = Database.GetUsername(userId);
+ double totalMoney = Math.Floor(Database.GetPlayerMoney(userId) + Database.GetPlayerBankMoney(userId));
+
+ message += Messages.FormatCityHallTopPlayerEntry(placing, totalMoney, username);
+ placing++;
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildMultiHorses(User user, string swf)
+ {
+ string message = Messages.OtherPlayersHere;
+ Multiroom room = Multiroom.GetMultiroom(user.X, user.Y);
+ room.Join(user);
+
+ foreach (User userOnTile in room.JoinedUsers)
+ {
+ if (userOnTile.Id == user.Id)
+ continue;
+
+ message += Messages.FormatMultiroomParticipent(userOnTile.Username);
+ }
+
+ message += Messages.R1;
+
+ message += Messages.MultiHorseSelectOneToJoinWith;
+ int placing = 1;
+ foreach (HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToArray())
+ {
+ if (horse.Leaser > 0)
+ continue;
+
+ HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED, user);
+ HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH, user);
+ HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION, user);
+ HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY, user);
+ HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE, user);
+ HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE, user);
+ HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY, user);
+
+ message += Messages.FormatMultiHorses(placing, horse.Name, horse.Breed.Name, swf + ".swf?ID=" + horse.RandomId + "&PL=" + user.Username + "&SP=" + speedStat.Total + "&ST=" + strengthStat.Total + "&CO=" + conformationStat.Total + "&AG=" + agilityStat.Total + "&EN=" + enduranceStat.Total + "&IN=" + inteligenceStat.Total + "&PE=" + personalityStat.Total + "&");
+ }
+
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+
+ }
+ private static string buildHorseGame(User user, string swf)
+ {
+ string message = Messages.HorseGamesSelectHorse;
+ int placing = 1;
+ foreach(HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToArray())
+ {
+ if (horse.Leaser > 0)
+ continue;
+
+
+ HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED, user);
+ HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH, user);
+ HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION, user);
+ HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY, user);
+ HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE, user);
+ HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE, user);
+ HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY, user);
+
+
+ message += Messages.FormatHorseGamesEntry(placing, horse.Name, swf + ".swf?ID=" + horse.RandomId + "&SP=" + speedStat.Total + "&ST=" + strengthStat.Total + "&CO=" + conformationStat.Total + "&AG=" + agilityStat.Total + "&EN=" + enduranceStat.Total + "&IN=" + inteligenceStat.Total + "&PE=" + personalityStat.Total + "&");
+ }
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildMostValuedRanches()
+ {
+ string message = Messages.CityHallTop25Ranches;
+ int total = 1;
+
+ foreach(Ranch ranch in Ranch.Ranches.OrderByDescending(o => o.InvestedMoney).ToList())
+ {
+ if (ranch.OwnerId == -1)
+ continue;
+
+
+ message += Messages.FormatCityHallTopRanchEntry(total, Database.GetUsername(ranch.OwnerId), ranch.InvestedMoney, Messages.FormatMapLocation(ranch.X, ranch.Y));
+
+ if (total > 26)
+ break;
+
+ total++;
+ }
+
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+
+ public static string BuildTopAutoSellHorses()
+ {
+ string message = Messages.CityHallCheapestAutoSells;
+ HorseInstance[] horses = Database.GetCheapestHorseAutoSell();
+ foreach(HorseInstance horse in horses)
+ {
+ message += Messages.FormatCityHallCheapAutoSellEntry(horse.AutoSell, Database.GetUsername(horse.Owner), horse.Name, horse.Color, horse.Breed.Name, horse.BasicStats.Experience);
+ }
+ message += Messages.CityHallMostExpAutoSells;
+ HorseInstance[] horsesExp = Database.GetBiggestExpAutoSell();
+ foreach (HorseInstance horse in horsesExp)
+ {
+ message += Messages.FormatCityHallBestExpAutoSellEntry(horse.BasicStats.Experience, Database.GetUsername(horse.Owner), horse.Name, horse.AutoSell, horse.Color, horse.Breed.Name);
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildRanchEdit(Ranch ranch)
+ {
+ return Messages.FormatRanchEditDescriptonMeta(ranch.Title, ranch.Description) + Messages.BackToMap + Messages.MetaTerminator;
+ }
+ public static string BuildRanchSellConfirmation()
+ {
+ return Messages.RanchSellAreYouSure + Messages.BackToMap + Messages.MetaTerminator;
+ }
+ public static string BuildRanchUpgrade(Ranch ranch)
+ {
+ string message = "";
+ Ranch.RanchUpgrade currentUpgrade = ranch.GetRanchUpgrade();
+ bool canUpgrade = Ranch.RanchUpgrade.RanchUpgradeExists(currentUpgrade.Id + 1);
+
+ string upgrade = "";
+ if(canUpgrade)
+ {
+ Ranch.RanchUpgrade nextUpgrade = Ranch.RanchUpgrade.GetRanchUpgradeById(currentUpgrade.Id + 1);
+ upgrade = Messages.FormatNextUpgrade(nextUpgrade.Title, nextUpgrade.Cost);
+ }
+ message += Messages.FormatCurrentUpgrade(currentUpgrade.Title, currentUpgrade.Description, upgrade, ranch.GetSellPrice());
+ message += Messages.BackToMap;
+ return message;
+ }
+ public static string BuildRanchBuildingsAvalible(Ranch ranch, int slot)
+ {
+ string message = "";
+ if(ranch.GetBuilding(slot-1) != null)
+ {
+ Ranch.RanchBuilding building = ranch.GetBuilding(slot - 1);
+ message += Messages.FormatBuildingAlreadyPlaced(building.Title, building.Id, building.GetTeardownPrice());
+ }
+ else
+ {
+ message += Messages.RanchCanBuildOneOfTheFollowingInThisSpot;
+ foreach (Ranch.RanchBuilding building in Ranch.RanchBuilding.RanchBuildings)
+ {
+ message += Messages.FormatBuildingEntry(building.Title, building.Cost, building.Id);
+ }
+ }
+
+ message += Messages.BackToMap;
+ return message;
+ }
+ public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchUpgrade upgrade)
+ {
+ string message = "";
+ message += Messages.FormatViewBuilding(upgrade.Title, upgrade.Description);
+
+ message += Messages.BackToMap;
+ return message;
+ }
+ public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchBuilding building)
+ {
+ string message = "";
+ message += Messages.FormatViewBuilding(building.Title, building.Description);
+ if(building.Id == 1 || building.Id == 10 || building.Id == 11) // Barn, Big Barn, Gold Barn
+ {
+ int ranchOwner = ranch.OwnerId; // TOCTOU BAD
+
+ if (ranchOwner != -1)
+ {
+ string horsesList = buildHorseListIndependantlyOfUserInstance(ranchOwner);
+ message += Messages.FormatBarn(horsesList);
+ }
+ }
+ message += Messages.BackToMap;
+ return message;
+ }
+ private static string buildRanch(User user, int ranchId)
+ {
+
+ string message = "";
+
+ if(!Ranch.RanchExists(ranchId)) // Ghost ranchs exist.. apparently?
+ {
+ user.MajorPriority = false;
+ return BuildMetaInfo(user, user.X, user.Y);
+ }
+
+ Ranch ranch = Ranch.GetRanchById(ranchId);
+ bool mine = (ranch.OwnerId == user.Id);
+ string swfModule = ranch.GetSwf(mine);
+
+ byte[] moduleSwf = PacketBuilder.CreateSwfModulePacket(swfModule, PacketBuilder.PACKET_SWF_MODULE_FORCE);
+ user.LoggedinClient.SendPacket(moduleSwf);
+
+ if (mine) // This is My DS.
+ {
+ GameServer.CheckMail(user);
+ user.DoRanchActions();
+
+ string title = ranch.Title;
+ if (title == "" || title == null)
+ title = Messages.RanchDefaultRanchTitle;
+ message += Messages.FormatRanchTitle(Database.GetUsername(ranch.OwnerId), title);
+ message += Messages.BuildingRestHere;
+
+ int numbBarns = ranch.GetBuildingCount(1);
+ int numbWaterWell = ranch.GetBuildingCount(2);
+ int numbGrainSilo = ranch.GetBuildingCount(3);
+ int numbTrainingPen = ranch.GetBuildingCount(6);
+ int numbWagon = ranch.GetBuildingCount(7);
+ int numbWindmill = ranch.GetBuildingCount(8);
+ int numbGarden = ranch.GetBuildingCount(9);
+ int numbBigBarn = ranch.GetBuildingCount(10);
+ int numbGoldBarn = ranch.GetBuildingCount(11);
+
+
+ if (numbBarns > 0)
+ message += Messages.FormatBuildingBarn(numbBarns, numbBarns * 4);
+ if (numbBigBarn > 0)
+ message += Messages.FormatBuildingBarn(numbBigBarn, numbBigBarn * 8);
+ if (numbGoldBarn > 0)
+ message += Messages.FormatBuildingBarn(numbGoldBarn, numbGoldBarn * 12);
+ if (numbBarns > 0 || numbBigBarn > 0 || numbGoldBarn > 0)
+ message += Messages.RanchHorsesFullyRested;
+ if (numbWaterWell > 0)
+ message += Messages.BuildingWaterWell;
+ if (numbGrainSilo > 0)
+ message += Messages.BuildingGrainSilo;
+ if (numbWindmill > 0)
+ message += Messages.FormatBuildingWindmill(numbWindmill, 5000 * numbWindmill);
+ if (numbGarden > 0)
+ message += Messages.BuildingVegatableGarden;
+ if (numbWagon > 0)
+ message += Messages.BuildingWagon;
+ if (numbTrainingPen > 0)
+ message += Messages.BuildingTrainingPen;
+
+ message += Messages.FormatRanchYoursDescription(ranch.Description);
+ }
+ else if(ranch.OwnerId == -1) // No mans sky
+ {
+
+ message += Messages.FormatRanchUnownedMeta(ranch.Value);
+ if (user.OwnedRanch == null)
+ {
+ if (user.Subscribed)
+ message += Messages.RanchYouCouldPurchaseThisRanch;
+ else
+ message += Messages.RanchSubscribersOnly;
+ }
+ else
+ {
+ message += Messages.RanchYouAllreadyOwnARanch;
+ }
+ }
+ else
+ {
+ string title = ranch.Title;
+ if (title == "" || title == null)
+ title = Messages.RanchDefaultRanchTitle;
+
+ message += Messages.FormatRanchTitle(Database.GetUsername(ranch.OwnerId), title);
+ message += Messages.FormatRanchDescOthers(ranch.Description);
+ }
+
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+
+ return message;
+ }
+ public static string BuildAuctionHorseList(User user)
+ {
+ string message = Messages.AuctionListHorse;
+ foreach(HorseInstance horse in user.HorseInventory.HorseList)
+ {
+ if (horse.Leaser > 0)
+ continue;
+ if (horse.Category != "TRADING")
+ continue;
+
+ bool tacked = (horse.Equipment.Saddle != null || horse.Equipment.SaddlePad != null || horse.Equipment.Bridle != null || horse.Equipment.Companion != null);
+
+ message += Messages.FormatAuctionHorseListEntry(horse.Name, tacked, horse.RandomId);
+ }
+
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildAuction(User user, Auction auction)
+ {
+ Multiroom room = Multiroom.GetMultiroom(user.X, user.Y);
+ room.Join(user);
+
+ string message = "";
+ message += Messages.AuctionsRunning;
+ foreach(Auction.AuctionEntry entry in auction.AuctionEntries.ToArray())
+ {
+ message += Messages.FormatAuctionHorseEntry(Database.GetUsername(entry.OwnerId), entry.Horse.Color, entry.Horse.Breed.Name, entry.Horse.Gender, entry.Horse.BasicStats.Experience, entry.Completed ? "" : Messages.FormatAuctionViewHorseButton(entry.Horse.RandomId));
+ if (!entry.Completed)
+ message += Messages.FormatAuctionGoingTo(entry.TimeRemaining, Database.GetUsername(entry.HighestBidder), entry.HighestBid, entry.RandomId);
+ else
+ {
+ if (entry.HighestBidder == entry.OwnerId)
+ message += Messages.AuctionNotSold;
+ else
+ message += Messages.FormatAuctionSoldTo(Database.GetUsername(entry.HighestBidder), entry.HighestBid);
+ }
+ }
+ User[] users = room.JoinedUsers.ToArray();
+ List usernames = new List();
+ foreach(User userInst in users)
+ {
+ usernames.Add(userInst.Username);
+ }
+ message += Messages.FormatAuctionPlayersHere(string.Join(", ", usernames.ToArray()));
+ message += Messages.AuctionAHorse;
+
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildWorkshop(User user)
+ {
+ Workshop shop = Workshop.GetWorkshopAt(user.X, user.Y);
+ string message = "";
+ foreach (Workshop.CraftableItem craft in shop.CraftableItems)
+ {
+ Item.ItemInformation itmInfo = Item.GetItemById(craft.GiveItemId);
+ message += Messages.FormatWorkshopCraftEntry(itmInfo.IconId, itmInfo.Name, craft.MoneyCost, itmInfo.Id, craft.Id);
+ // Get requirements
+ List Requirements = new List();
+ foreach (Workshop.RequiredItem reqItem in craft.RequiredItems)
+ {
+
+ Item.ItemInformation requiredItemInfo = Item.GetItemById(reqItem.RequiredItemId);
+ string requirementTxt;
+ if (reqItem.RequiredItemCount <= 1)
+ requirementTxt = Messages.FormatWorkshopRequireEntry(reqItem.RequiredItemCount, requiredItemInfo.Name);
+ else
+ requirementTxt = Messages.FormatWorkshopRequireEntry(reqItem.RequiredItemCount, requiredItemInfo.PluralName);
+ Requirements.Add(requirementTxt);
+ }
+ message += Messages.FormatWorkshopRequirements(string.Join(Messages.WorkshopAnd, Requirements.ToArray()));
+ }
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildGroomer(User User, Groomer groomer)
+ {
+ string message = "";
+ int totalPrice = 0;
+ int count = 0;
+ foreach(HorseInstance horse in User.HorseInventory.HorseList)
+ {
+ message += Messages.FormatHorseGroomCurrentlyAt(horse.Name, horse.BasicStats.Groom, 1000);
+ if(horse.BasicStats.Groom < groomer.Max)
+ {
+ int price = groomer.CalculatePrice(horse.BasicStats.Groom);
+ totalPrice += price;
+ count++;
+ message += Messages.FormatGroomerApplyService(price, horse.RandomId);
+ }
+ }
+ message += Messages.FormatGroomerApplyAllService(count, totalPrice);
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildVet(User user, Vet vet)
+ {
+ 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);
+ }
+
+ }
+ if (user.HorseInventory.HorseList.Length > 0)
+ message += Messages.FormatVetApplyAllServiceMeta(totalPrice);
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildBarn(User user, Barn barn)
+ {
+ string message = "";
+ int totalPrice = 0;
+ foreach (HorseInstance horse in user.HorseInventory.HorseList)
+ {
+ message += Messages.FormatBarnHorseStatus(horse.Name, horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst);
+
+ int price = barn.CalculatePrice(horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst);
+ if(price > 0)
+ {
+ totalPrice += price;
+ message += Messages.FormatBarnLetHorseRelax(price, horse.RandomId);
+ }
+ else
+ {
+ message += Messages.BarnHorseMaxed;
+ }
+
+ }
+ message += Messages.FormatBarnLetAllHorsesReleax(totalPrice);
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildFarrier(User user, Farrier farrier)
+ {
+ string message = "";
+ int totalPrice = 0;
+ int maxShoes = 1000;
+ foreach (HorseInstance horse in user.HorseInventory.HorseList)
+ {
+ message += Messages.FormatFarrierCurrentShoes(horse.Name, horse.BasicStats.Shoes, maxShoes);
+ if (horse.BasicStats.Shoes < farrier.IronShoesAmount)
+ message += Messages.FormatFarrierApplyIron(farrier.IronCost, farrier.IronShoesAmount, horse.RandomId);
+
+ if (horse.BasicStats.Shoes < farrier.SteelShoesAmount)
+ {
+ totalPrice += farrier.SteelCost;
+ message += Messages.FormatFarrierApplySteel(farrier.SteelCost, farrier.SteelShoesAmount, horse.RandomId);
+ }
+
+ }
+ if(totalPrice > 0)
+ message += Messages.FormatFarrierApplySteelToAll(totalPrice, farrier.SteelShoesAmount);
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildRiddlerRiddle(User user)
+ {
+ string message = "";
+ if (Riddler.HasCompletedAllRiddles(user)) {
+ message = Messages.RiddlerAnsweredAll;
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ else
+ {
+ Riddler riddle = Riddler.GetRandomRiddle(user);
+ user.LastRiddle = riddle;
+
+ message += Messages.FormatRiddlerRiddle(riddle.Riddle);
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ }
+
+
+ public static string BuildHorseEscapedMessage()
+ {
+ string message = Messages.HorseEvadedCapture;
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildHorseEscapedAnyway()
+ {
+ string message = Messages.HorseEscapedAnyway;
+ 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, bool youView=true)
+ {
+ string message = "";
+ int i = 1;
+ foreach (HorseInfo.Category category in HorseInfo.HorseCategories)
+ {
+ HorseInstance[] horsesInCategory = user.HorseInventory.GetHorsesInCategory(category).OrderBy(o => o.Name).ToArray();
+ if (horsesInCategory.Length > 0)
+ {
+ if (youView)
+ message += category.Meta;
+ else
+ message += category.MetaOthers;
+ 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)
+ {
+ string message = Messages.FormatHorseHeader(user.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 BuildPlayerListMenu(User user)
+ {
+ string message = "";
+
+ int friendsOnline = 0;
+ foreach(int friendId in user.Friends.List)
+ {
+ if (GameServer.IsUserOnline(friendId))
+ friendsOnline++;
+ }
+
+ message += Messages.PlayerListHeader;
+ message += Messages.PlayerListSelectFromFollowing;
+ message += Messages.FormatPlayerBuddyList(friendsOnline);
+ 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 BuildMailLetter(Mailbox.Mail mailMessage, int itemRandomId)
+ {
+ DateTime time = Util.UnixTimeStampToDateTime(mailMessage.Timestamp);
+ string amOrPm = "am";
+ string[] months = new string[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+ string minutes = time.Minute.ToString();
+ if (minutes.Length <= 1)
+ minutes = "0" + minutes;
+ int hours = time.Hour;
+ if (hours == 0)
+ {
+ amOrPm = "am";
+ hours = 12;
+ }
+ if (hours > 12)
+ {
+ hours -= 12;
+ amOrPm = "pm";
+ }
+
+
+ string date = months[time.Month-1] + " " + time.Day + ", " + time.Year + " " + hours + ":" + minutes + amOrPm;
+ string message = Messages.FormatMailReadMessage(Database.GetUsername(mailMessage.FromUser), date, mailMessage.Subject, mailMessage.Message, itemRandomId);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildMailList(User user, InventoryItem mailMessageForPlayer)
+ {
+ string message = Messages.MailSelectFromFollowing;
+ foreach(ItemInstance inst in mailMessageForPlayer.ItemInstances)
+ {
+ Mailbox.Mail mail = user.MailBox.GetMessageByRandomId(inst.Data);
+ message += Messages.FormatMailEntry(mail.Subject, Database.GetUsername(mail.FromUser), inst.RandomId);
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildInventoryInfo(PlayerInventory inv)
+ {
+ string message = "";
+ message += Messages.FormatPlayerInventoryHeaderMeta(inv.Count, inv.BaseUser.MaxItems);
+ InventoryItem[] items = inv.GetItemList();
+ foreach(InventoryItem item in items)
+ {
+ Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
+ string title = itemInfo.Name;
+ if (item.ItemInstances.Length > 1 && itemInfo.PluralName != "")
+ title = itemInfo.PluralName;
+
+
+ message += Messages.FormatPlayerInventoryItemMeta(itemInfo.IconId, item.ItemInstances.Length, title);
+
+ int randomId = item.ItemInstances[0].RandomId;
+ if (itemInfo.Type != "QUEST" && itemInfo.Type != "TEXT" && !(itemInfo.Id == Item.DorothyShoes || itemInfo.Id == Item.Telescope) && World.CanDropItems(inv.BaseUser.X, inv.BaseUser.Y))
+ message += Messages.FormatItemDropButton(randomId);
+
+ if (itemInfo.Id == Item.DorothyShoes || itemInfo.Id == Item.Telescope)
+ message += Messages.FormatItemUseButton(randomId);
+
+ if (itemInfo.Id == Item.Present)
+ message += Messages.FormatItemOpenButton(randomId);
+
+ if (itemInfo.Type == "CLOTHES" || itemInfo.Type == "JEWELRY")
+ message += Messages.FormatWearButton(randomId);
+
+ if (itemInfo.Type == "TEXT")
+ message += Messages.FormatItemReadButton(item.ItemId);
+
+ if (itemInfo.Type == "PLAYERFOOD")
+ message += Messages.FormatItemConsumeButton(randomId);
+
+ if (Item.IsThrowable(itemInfo.Id))
+ message += Messages.FormatItemThrowButton(itemInfo.Id);
+
+ message += Messages.FormatItemInformationButton(randomId);
+ message += Messages.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();
+ bool isHorseFood = false;
+ if (itemInfo.Effects.Length >= 2)
+ isHorseFood = (itemInfo.Effects[1].EffectsWhat == "MOOD" && itemInfo.Effects[0].EffectsWhat == "HUNGER");
+ if (itemInfo.Type == "HORSEFOOD" || isHorseFood)
+ {
+ message += Messages.FormatHorseFeedEntry(itemInfo.IconId, item.ItemInstances.Length, 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.Length, 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.Gender, 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)
+ {
+ bool isMyHorse = horse.Owner == user.Id;
+ user.HorseWindowOpen = true;
+
+ string message = "";
+ if (isMyHorse)
+ message += Messages.FormatHorseNameYours(horse.Name);
+ else
+ message += Messages.FormatHorseNameOthers(horse.Name, Database.GetUsername(horse.Owner));
+
+ message += Messages.FormatHorseDescription(horse.Description);
+ message += Messages.FormatHorseHandsHigh(horse.Color, horse.Breed.Name, horse.Gender, HorseInfo.CalculateHands(horse.AdvancedStats.Height, false));
+ message += Messages.FormatHorseExperience(horse.BasicStats.Experience);
+
+
+ if (horse.TrainTimer > 0)
+ message += Messages.FormatTrainableIn(horse.TrainTimer);
+ else
+ message += Messages.HorseIsTrainable;
+
+ if(horse.Leaser != 0)
+ {
+ message += Messages.FormatHorseIsLeased(horse.LeaseTime);
+ }
+
+ if (isMyHorse)
+ {
+ if (user.CurrentlyRidingHorse == null)
+ message += Messages.FormatMountButton(horse.RandomId);
+ else
+ message += Messages.FormatDisMountButton(horse.RandomId);
+
+
+ message += Messages.FormatFeedButton(horse.RandomId);
+ if (horse.Leaser == 0)
+ {
+ message += Messages.FormatTackButton(horse.RandomId);
+ }
+ message += Messages.FormatPetButton(horse.RandomId);
+ if (horse.Leaser == 0)
+ {
+ 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;
+ }
+ }
+ else
+ {
+ message += Messages.R1;
+ }
+ }
+ else
+ {
+ if (horse.AutoSell > 0)
+ message += Messages.FormatAutoSellOthers(horse.AutoSell);
+ }
+
+
+ if (horse.Leaser == 0)
+ {
+
+ if (isMyHorse)
+ message += Messages.FormatHorseCategory(horse.Category, Messages.HorseMarkAsCategory);
+ else
+ message += Messages.FormatHorseCategory(horse.Category, "");
+ }
+
+ message += Messages.HorseStats;
+
+ // Energy == Tiredness
+ 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);
+
+ if(horse.Leaser == 0)
+ {
+ message += Messages.HorseCompanion;
+ if (horse.Equipment.Companion != null)
+ if (isMyHorse)
+ message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, Messages.HorseCompanionChangeButton, horse.Equipment.Companion.Id);
+ else
+ message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, "", horse.Equipment.Companion.Id);
+ else
+ if (isMyHorse)
+ 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(personalityStat.BreedValue, personalityStat.CompanionOffset, personalityStat.TackOffset, personalityStat.MaxValue);
+
+ message += Messages.FormatHorseBreedDetails(horse.Breed.Name, horse.Breed.Description);
+ message += Messages.FormatHorseHeight(HorseInfo.CalculateHands(horse.Breed.BaseStats.MinHeight, false), HorseInfo.CalculateHands(horse.Breed.BaseStats.MaxHeight, false));
+
+ message += Messages.FormatPossibleColors(horse.Breed.Colors);
+ if (horse.Leaser == 0)
+ {
+ if (isMyHorse)
+ {
+ 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.FormatHorseReleaseButton(horse.Breed.Type.ToUpper());
+ }
+ }
+
+
+ message += Messages.HorseOthers;
+ if (isMyHorse)
+ message += buildHorseList(user);
+ else
+ message += buildHorseListIndependantlyOfUserInstance(horse.Owner);
+
+ 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.Gender, 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.OrderBy(o => Tracking.GetTrackedItemsStatsMenuName(o.What)))
+ {
+ 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);
+ if (horse.Breed.Type == "llama")
+ message += Messages.HorseLlamaTackInInventory;
+ else if (horse.Breed.Type == "camel")
+ message += Messages.HorseCamelTackInInventory;
+ else
+ message += Messages.HorseTackInInventory;
+
+ foreach(InventoryItem item in user.Inventory.GetItemList())
+ {
+ Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
+ if (itemInfo.Type == "TACK")
+ {
+ if (horse.Breed.Type == "camel" && itemInfo.GetMiscFlag(1) != 1)
+ continue;
+ else if (horse.Breed.Type == "llama" && itemInfo.GetMiscFlag(1) != 2)
+ continue;
+ else if (!(horse.Breed.Type == "llama" || horse.Breed.Type == "camel") && itemInfo.GetMiscFlag(1) != 0)
+ continue;
+ message += Messages.FormatHorseEquip(itemInfo.IconId, item.ItemInstances.Length, itemInfo.Name, itemInfo.Id);
+ }
+ }
+
+ message += Messages.BackToHorse;
+ return message;
+ }
+ public static string BuildNpcChatpoint(User user, Npc.NpcEntry npc, Npc.NpcChat chatpoint)
+ {
+ bool hideReplys = false;
+ if (chatpoint.ActivateQuestId != 0)
+ {
+ Quest.QuestEntry quest = Quest.GetQuestById(chatpoint.ActivateQuestId);
+ user.MajorPriority = true;
+
+ Quest.QuestResult result = Quest.ActivateQuest(user, quest, true);
+ if (result.QuestCompleted)
+ {
+ if (result.SetChatpoint != -1)
+ Npc.SetDefaultChatpoint(user, npc, result.SetChatpoint);
+
+ if (result.GotoChatpoint != -1)
+ chatpoint = Npc.GetNpcChatpoint(npc, result.GotoChatpoint);
+
if (result.NpcChat != null && result.NpcChat.Trim() != "")
- chatpoint.ChatText = result.NpcChat;
-
- if (result.HideRepliesOnFail)
- 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.RequiresQuestIdNotCompleted) >= 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 += BuildWildHorseList(user);
- message += buildNpc(user, x, y);
-
- message += buildCommonInfo(user, x, y);
- return message;
- }
- public static string BuildPawneerOrderFound(HorseInstance instance)
- {
- string message = Messages.FormatPawneerOrderHorseFound(instance.Breed.Name, instance.Color, instance.Gender, instance.AdvancedStats.Height, instance.AdvancedStats.Personality, instance.AdvancedStats.Inteligence);
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildPawneerOrderGenderList(HorseInfo.Breed breed, string color)
- {
- string message = Messages.FormatPawneerOrderSelectGender(color, breed.Name);
- foreach (string gender in breed.GenderTypes())
- message += Messages.FormatPawneerOrderGenderEntry(Util.CapitalizeFirstLetter(gender), gender);
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildPawneerOrderColorList(HorseInfo.Breed breed)
- {
- string message = Messages.FormatPawneerOrderSelectColor(breed.Name);
- foreach (string color in breed.Colors)
- message += Messages.FormatPawneerOrderColorEntry(color);
-
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
-
- }
- public static string BuildPawneerOrderBreedList()
- {
- string message = Messages.PawneerOrderSelectBreed;
- foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList())
- {
- if (breed.Swf == "")
- continue;
- if (breed.SpawnInArea == "none")
- continue;
- message += Messages.FormatPawneerOrderBreedEntry(breed.Name, breed.Id);
- }
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildPawneerConfimation(HorseInstance horse)
- {
- string message = "";
- message += Messages.FormatPawneerConfirmPawn(horse.Breed.Name, horse.RandomId);
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildSanta(User user)
- {
- string message = Messages.SantaHiddenText;
- InventoryItem[] items = user.Inventory.GetItemList();
- foreach (InventoryItem item in items)
- {
- Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
- int randomId = item.ItemInstances[0].RandomId;
- if (itemInfo.Type != "QUEST" && itemInfo.Type != "TEXT" && itemInfo.Type != "COMPANION" && itemInfo.Id != Item.Present)
- message += Messages.FormatSantaItemEntry(itemInfo.IconId, itemInfo.Name, randomId);
- }
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildTrainer(User user, Trainer trainer)
- {
- string message = "";
- message += Messages.FormatTrainerHeaderFormat(trainer.ImprovesStat, trainer.MoneyCost, trainer.ImprovesAmount, trainer.ExperienceGained);
-
-
- foreach (HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToList())
- {
- 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 statCalculator;
- switch (trainer.ImprovesStat.ToUpper())
- {
- case "SPEED":
- statCalculator = speedStat;
- break;
- case "STRENGTH":
- statCalculator = strengthStat;
- break;
- case "AGILITY":
- statCalculator = agilityStat;
- break;
- case "ENDURANCE":
- statCalculator = enduranceStat;
- break;
- case "CONFORMATION":
- statCalculator = conformationStat;
- break;
- default:
- statCalculator = speedStat;
- break;
- }
-
- bool allowed = false;
-
- /*
- * Pinto bug: If you try to train a horse, but doing so would go over the maximum amount
- * Then it just says its maxed trained, and u have to use a ranch.
- */
-
- if (ConfigReader.FixOfficalBugs)
- allowed = (statCalculator.BreedValue < statCalculator.MaxValue);
- else
- allowed = ((statCalculator.BreedValue + trainer.ImprovesAmount) < statCalculator.MaxValue);
-
- if(allowed)
- message += Messages.FormatTrainerTrainInEntry(horse.Name, statCalculator.BreedValue, statCalculator.MaxValue, horse.RandomId);
- else
- message += Messages.FormatTrainerFullyTrained(horse.Name, statCalculator.BreedValue);
-
- }
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildPawneer(User user)
- {
- string message = "";
- if (user.Inventory.HasItemId(Item.PawneerOrder) && (user.HorseInventory.HorseList.Length < user.MaxHorses))
- message += Messages.PawneerOrderMeta;
- message += Messages.PawneerUntackedHorsesICanBuy;
- foreach(HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToList())
- {
- if(horse.Category == "TRADING" && horse.Equipment.Bridle == null && horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Companion == null)
- {
- message += Messages.FormatPawneerHorseEntry(horse.Name, Pawneer.CalculateTotalPrice(horse), horse.RandomId);
- }
- }
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string BuildLeaserOnLeaseInfo(Leaser leaser)
- {
- string mesasge = "";
- mesasge += leaser.OnLeaseText;
- mesasge += Messages.BackToMap;
- mesasge += Messages.MetaTerminator;
- return mesasge;
- }
- private static string buildLeaser(User user, Leaser[] leasers)
- {
- string message = "";
- foreach(Leaser leaser in leasers)
- {
- message += leaser.Info;
- }
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- public static string build2PlayerGame(User user, string swf)
- {
- Multiroom room = Multiroom.GetMultiroom(user.X, user.Y);
- room.Join(user);
-
- if (TwoPlayer.IsPlayerInGame(user))
- {
- string username = "";
- TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(user);
- if (twoPlayerGame.Invitee.Id == user.Id)
- username = twoPlayerGame.Invitee.Username;
- else
- username = twoPlayerGame.Inviting.Username;
- overwrite = true;
-
- return Messages.Format2PlayerGameInProgress(username);
- }
-
- string message = Messages.TwoPlayerOtherPlayer;
- foreach(User userAt in room.JoinedUsers.ToArray())
- {
- if (userAt.Id == user.Id)
- continue;
-
- message += Messages.Format2PlayerPlayerName(userAt.Username);
-
- if(!TwoPlayer.IsPlayerInGame(userAt))
- {
- if (TwoPlayer.IsPlayerInvitingPlayer(user, userAt))
- message += Messages.TwoPlayerSentInvite;
- else
- message += Messages.Format2PlayerInviteButton(userAt.Id);
- if (TwoPlayer.IsPlayerInvitingPlayer(userAt, user))
- message += Messages.Format2PlayerAcceptButton(userAt.Id);
-
- }
- else
- {
- string username = "";
- TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(userAt);
- if (twoPlayerGame.Invitee.Id == userAt.Id)
- username = twoPlayerGame.Invitee.Username;
- else
- username = twoPlayerGame.Inviting.Username;
-
- message += Messages.Format2PlayerPlayingWith(username);
- }
-
- message += Messages.R1;
- }
- message += Messages.ExitThisPlace;
- return message;
- }
- public static string BuildComposeMailMenu()
- {
- string message = Messages.CityHallMailSendMeta;
- message += Messages.BackToMap;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildTownHall(User user)
- {
- GameServer.CheckMail(user);
-
- string message = Messages.CityHallMenu;
- message += Messages.ExitThisPlace;
- message += Messages.MetaTerminator;
- return message;
- }
- private static string buildArena(User user, Arena arena)
- {
- string message = Messages.FormatArenaEventName(arena.Type);
- if(arena.Mode == "TAKINGENTRIES")
- {
- int minutes = World.ServerTime.Minutes % 60;
-
- int lastMinutes = minutes - (minutes % arena.RaceEvery);
- int lastHours = (lastMinutes / 60);
-
- string amOrPm = "am";
- if (lastHours == 0)
- {
- amOrPm = "am";
- lastHours = 12;
- }
- if (lastHours > 12)
- {
- lastHours -= 12;
- amOrPm = "pm";
- }
-
- message += Messages.FormatArenaCurrentlyTakingEntries(lastHours, lastMinutes, amOrPm, arena.RaceEvery - minutes);
- if (arena.Entries.Length + 1 > arena.Slots)
- {
- message += Messages.ArenaCompetitionFull;
- }
- else if (!arena.UserHasHorseEntered(user))
- {
-
- foreach(HorseInstance horseInstance in user.HorseInventory.HorseList)
- {
- if (horseInstance.Leaser > 0)
- continue;
-
- if(horseInstance.Equipment.Saddle != null && horseInstance.Equipment.SaddlePad != null && horseInstance.Equipment.Bridle != null)
- message += Messages.FormatArenaEnterHorseButton(horseInstance.Name, arena.EntryCost, horseInstance.RandomId);
- }
- }
- else
- {
- message += Messages.ArenaYouHaveHorseEntered;
- }
-
- }
- else if(arena.Mode == "COMPETING")
- {
- message += Messages.ArenaCompetitionInProgress;
- }
-
- message += Messages.ArenaCurrentCompetitors;
- foreach(Arena.ArenaEntry entries in arena.Entries)
- {
- message += Messages.FormatArenaCompetingHorseEntry(entries.EnteredUser.Username, entries.EnteredHorse.Name, entries.EnteredHorse.RandomId);
- }
- 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;
- message += Messages.Seperator; //
- }
-
-
- string npc = buildNpc(user, specialTile.X, specialTile.Y);
- message += npc;
-
- if (specialTile.Code == null || specialTile.Code == "")
- message += buildCommonInfo(user, specialTile.X, specialTile.Y);
- else
- {
-
- user.MinorPriority = 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(user, point);
- }
-
- if (TileCode == "STRAWPILE")
- {
- if (user.Inventory.HasItemId(Item.Pitchfork))
- message += Messages.HasPitchforkMeta + Messages.ExitThisPlace + Messages.MetaTerminator;
- else
- message += Messages.NoPitchforkMeta + Messages.ExitThisPlace + Messages.MetaTerminator;
- }
-
- if (TileCode == "STORE")
- {
- int ShopID = int.Parse(TileArg);
- Shop shop = Shop.GetShopById(ShopID);
- user.LastShoppedAt = shop;
- message += buildShopInfo(shop, user.Inventory);
-
- }
- if(TileCode == "TOWNHALL")
- {
- message += buildTownHall(user);
- }
- if (TileCode == "VET")
- {
- message += buildVet(user, Vet.GetVetById(int.Parse(TileArg)));
- }
- if(TileCode == "GROOMER")
- {
- message += buildGroomer(user, Groomer.GetGroomerById(int.Parse(TileArg)));
- }
- if (TileCode == "FARRIER")
- {
- message += buildFarrier(user, Farrier.GetFarrierById(int.Parse(TileArg)));
- }
- if(TileCode == "BARN")
- {
- message += buildBarn(user, Barn.GetBarnById(int.Parse(TileArg)));
- }
- if (TileCode == "BANK")
- {
- message += buildBank(user);
- }
- if (TileCode == "WISHINGWELL")
- {
- message += buildWishingWell(user);
- }
- if(TileCode == "HORSEPAWNEER")
- {
- message += buildPawneer(user);
- }
- if (TileCode == "VENUSFLYTRAP")
- {
- message += buildVenusFlyTrap(user);
- }
- if (TileCode == "RIDDLER")
- {
- message += buildRiddlerRiddle(user);
- }
- if(TileCode == "ARENA")
- {
- message += buildArena(user, Arena.GetAreaById(int.Parse(TileArg)));
- }
- if(TileCode == "AUCTION")
- {
- message += buildAuction(user, Auction.GetAuctionRoomById(int.Parse(TileArg)));
- }
- if(TileCode == "TRAINER")
- {
- message += buildTrainer(user, Trainer.GetTrainerById(int.Parse(TileArg)));
- }
- if(TileCode == "HORSELEASER")
- {
- message += buildLeaser(user, Leaser.GetLeasersById(int.Parse(TileArg)));
- }
- if (TileCode == "LIBRARY")
- {
- message += buildLibary();
- }
- if(TileCode == "MULTIHORSES")
- {
- message += buildMultiHorses(user, TileArg);
- }
- if (TileCode == "POND")
- {
- message += buildPond(user);
- }
- if(TileCode == "2PLAYER")
- {
- string msg = build2PlayerGame(user, TileArg);
- if (!overwrite)
- message += msg;
- else
- message = msg;
-
- overwrite = false;
- }
- if(TileCode == "HORSES")
- {
- message += buildHorseGame(user, TileArg);
- }
- if (TileCode == "WORKSHOP")
- {
- message += buildWorkshop(user);
- }
- if (TileCode == "MUDHOLE")
- {
- message += buildMudHole(user);
- }
- if (TileCode == "RANCH")
- {
- message += buildRanch(user, int.Parse(TileArg));
- }
- if(TileCode == "SANTA")
- {
- message += buildSanta(user);
- }
- if (TileCode == "MULTIROOM")
- {
- message += buildMultiroom(TileArg != "" ? TileArg : null, user);
- }
- if (TileCode == "PASSWORD")
- {
- message += buildPassword();
- }
- if (TileCode == "HORSEWHISPERER")
- {
- message += buildHorseWhisperer();
- }
- 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;
- }
-
-
- }
-}
+ chatpoint.ChatText = result.NpcChat;
+ }
+ else
+ {
+ if (result.GotoChatpoint != -1)
+ chatpoint = Npc.GetNpcChatpoint(npc, result.GotoChatpoint);
+
+ if (result.NpcChat != null && result.NpcChat.Trim() != "")
+ chatpoint.ChatText = result.NpcChat;
+
+ if (result.HideRepliesOnFail)
+ 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.RequiresQuestIdNotCompleted) >= 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 += BuildWildHorseList(user);
+ message += buildNpc(user, x, y);
+
+ message += buildCommonInfo(user, x, y);
+ return message;
+ }
+ public static string BuildPawneerOrderFound(HorseInstance instance)
+ {
+ string message = Messages.FormatPawneerOrderHorseFound(instance.Breed.Name, instance.Color, instance.Gender, instance.AdvancedStats.Height, instance.AdvancedStats.Personality, instance.AdvancedStats.Inteligence);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildPawneerOrderGenderList(HorseInfo.Breed breed, string color)
+ {
+ string message = Messages.FormatPawneerOrderSelectGender(color, breed.Name);
+ foreach (string gender in breed.GenderTypes())
+ message += Messages.FormatPawneerOrderGenderEntry(Util.CapitalizeFirstLetter(gender), gender);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildPawneerOrderColorList(HorseInfo.Breed breed)
+ {
+ string message = Messages.FormatPawneerOrderSelectColor(breed.Name);
+ foreach (string color in breed.Colors)
+ message += Messages.FormatPawneerOrderColorEntry(color);
+
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+
+ }
+ public static string BuildPawneerOrderBreedList()
+ {
+ string message = Messages.PawneerOrderSelectBreed;
+ foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList())
+ {
+ if (breed.Swf == "")
+ continue;
+ if (breed.SpawnInArea == "none")
+ continue;
+ message += Messages.FormatPawneerOrderBreedEntry(breed.Name, breed.Id);
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildPawneerConfimation(HorseInstance horse)
+ {
+ string message = "";
+ message += Messages.FormatPawneerConfirmPawn(horse.Breed.Name, horse.RandomId);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildSanta(User user)
+ {
+ string message = Messages.SantaHiddenText;
+ InventoryItem[] items = user.Inventory.GetItemList();
+ foreach (InventoryItem item in items)
+ {
+ Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId);
+ int randomId = item.ItemInstances[0].RandomId;
+ if (itemInfo.Type != "QUEST" && itemInfo.Type != "TEXT" && itemInfo.Type != "COMPANION" && itemInfo.Id != Item.Present)
+ message += Messages.FormatSantaItemEntry(itemInfo.IconId, itemInfo.Name, randomId);
+ }
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildTrainer(User user, Trainer trainer)
+ {
+ string message = "";
+ message += Messages.FormatTrainerHeaderFormat(trainer.ImprovesStat, trainer.MoneyCost, trainer.ImprovesAmount, trainer.ExperienceGained);
+
+
+ foreach (HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToList())
+ {
+ 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 statCalculator;
+ switch (trainer.ImprovesStat.ToUpper())
+ {
+ case "SPEED":
+ statCalculator = speedStat;
+ break;
+ case "STRENGTH":
+ statCalculator = strengthStat;
+ break;
+ case "AGILITY":
+ statCalculator = agilityStat;
+ break;
+ case "ENDURANCE":
+ statCalculator = enduranceStat;
+ break;
+ case "CONFORMATION":
+ statCalculator = conformationStat;
+ break;
+ default:
+ statCalculator = speedStat;
+ break;
+ }
+
+ bool allowed = false;
+
+ /*
+ * Pinto bug: If you try to train a horse, but doing so would go over the maximum amount
+ * Then it just says its maxed trained, and u have to use a ranch.
+ */
+
+ if (ConfigReader.FixOfficalBugs)
+ allowed = (statCalculator.BreedValue < statCalculator.MaxValue);
+ else
+ allowed = ((statCalculator.BreedValue + trainer.ImprovesAmount) < statCalculator.MaxValue);
+
+ if(allowed)
+ message += Messages.FormatTrainerTrainInEntry(horse.Name, statCalculator.BreedValue, statCalculator.MaxValue, horse.RandomId);
+ else
+ message += Messages.FormatTrainerFullyTrained(horse.Name, statCalculator.BreedValue);
+
+ }
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildPawneer(User user)
+ {
+ string message = "";
+ if (user.Inventory.HasItemId(Item.PawneerOrder) && (user.HorseInventory.HorseList.Length < user.MaxHorses))
+ message += Messages.PawneerOrderMeta;
+ message += Messages.PawneerUntackedHorsesICanBuy;
+ foreach(HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToList())
+ {
+ if(horse.Category == "TRADING" && horse.Equipment.Bridle == null && horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Companion == null)
+ {
+ message += Messages.FormatPawneerHorseEntry(horse.Name, Pawneer.CalculateTotalPrice(horse), horse.RandomId);
+ }
+ }
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildLeaserOnLeaseInfo(Leaser leaser)
+ {
+ string mesasge = "";
+ mesasge += leaser.OnLeaseText;
+ mesasge += Messages.BackToMap;
+ mesasge += Messages.MetaTerminator;
+ return mesasge;
+ }
+ private static string buildLeaser(User user, Leaser[] leasers)
+ {
+ string message = "";
+ foreach(Leaser leaser in leasers)
+ {
+ message += leaser.Info;
+ }
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string build2PlayerGame(User user, string swf)
+ {
+ Multiroom room = Multiroom.GetMultiroom(user.X, user.Y);
+ room.Join(user);
+
+ if (TwoPlayer.IsPlayerInGame(user))
+ {
+ string username = "";
+ TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(user);
+ if (twoPlayerGame.Invitee.Id == user.Id)
+ username = twoPlayerGame.Invitee.Username;
+ else
+ username = twoPlayerGame.Inviting.Username;
+ overwrite = true;
+
+ return Messages.Format2PlayerGameInProgress(username);
+ }
+
+ string message = Messages.TwoPlayerOtherPlayer;
+ foreach(User userAt in room.JoinedUsers.ToArray())
+ {
+ if (userAt.Id == user.Id)
+ continue;
+
+ message += Messages.Format2PlayerPlayerName(userAt.Username);
+
+ if(!TwoPlayer.IsPlayerInGame(userAt))
+ {
+ if (TwoPlayer.IsPlayerInvitingPlayer(user, userAt))
+ message += Messages.TwoPlayerSentInvite;
+ else
+ message += Messages.Format2PlayerInviteButton(userAt.Id);
+ if (TwoPlayer.IsPlayerInvitingPlayer(userAt, user))
+ message += Messages.Format2PlayerAcceptButton(userAt.Id);
+
+ }
+ else
+ {
+ string username = "";
+ TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(userAt);
+ if (twoPlayerGame.Invitee.Id == userAt.Id)
+ username = twoPlayerGame.Invitee.Username;
+ else
+ username = twoPlayerGame.Inviting.Username;
+
+ message += Messages.Format2PlayerPlayingWith(username);
+ }
+
+ message += Messages.R1;
+ }
+ message += Messages.ExitThisPlace;
+ return message;
+ }
+ public static string BuildComposeMailMenu()
+ {
+ string message = Messages.CityHallMailSendMeta;
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildTownHall(User user)
+ {
+ GameServer.CheckMail(user);
+
+ string message = Messages.CityHallMenu;
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ private static string buildArena(User user, Arena arena)
+ {
+ string message = Messages.FormatArenaEventName(arena.Type);
+ if(arena.Mode == "TAKINGENTRIES")
+ {
+ int minutes = World.ServerTime.Minutes % 60;
+
+ int lastMinutes = minutes - (minutes % arena.RaceEvery);
+ int lastHours = (lastMinutes / 60);
+
+ string amOrPm = "am";
+ if (lastHours == 0)
+ {
+ amOrPm = "am";
+ lastHours = 12;
+ }
+ if (lastHours > 12)
+ {
+ lastHours -= 12;
+ amOrPm = "pm";
+ }
+
+ message += Messages.FormatArenaCurrentlyTakingEntries(lastHours, lastMinutes, amOrPm, arena.RaceEvery - minutes);
+ if (arena.Entries.Length + 1 > arena.Slots)
+ {
+ message += Messages.ArenaCompetitionFull;
+ }
+ else if (!arena.UserHasHorseEntered(user))
+ {
+
+ foreach(HorseInstance horseInstance in user.HorseInventory.HorseList)
+ {
+ if (horseInstance.Leaser > 0)
+ continue;
+
+ if(horseInstance.Equipment.Saddle != null && horseInstance.Equipment.SaddlePad != null && horseInstance.Equipment.Bridle != null)
+ message += Messages.FormatArenaEnterHorseButton(horseInstance.Name, arena.EntryCost, horseInstance.RandomId);
+ }
+ }
+ else
+ {
+ message += Messages.ArenaYouHaveHorseEntered;
+ }
+
+ }
+ else if(arena.Mode == "COMPETING")
+ {
+ message += Messages.ArenaCompetitionInProgress;
+ }
+
+ message += Messages.ArenaCurrentCompetitors;
+ foreach(Arena.ArenaEntry entries in arena.Entries)
+ {
+ message += Messages.FormatArenaCompetingHorseEntry(entries.EnteredUser.Username, entries.EnteredHorse.Name, entries.EnteredHorse.RandomId);
+ }
+ 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;
+ message += Messages.Seperator; //
+ }
+
+
+ string npc = buildNpc(user, specialTile.X, specialTile.Y);
+ message += npc;
+
+ if (specialTile.Code == null || specialTile.Code == "")
+ message += buildCommonInfo(user, specialTile.X, specialTile.Y);
+ else
+ {
+
+ user.MinorPriority = 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(user, point);
+ }
+
+ if (TileCode == "STRAWPILE")
+ {
+ if (user.Inventory.HasItemId(Item.Pitchfork))
+ message += Messages.HasPitchforkMeta + Messages.ExitThisPlace + Messages.MetaTerminator;
+ else
+ message += Messages.NoPitchforkMeta + Messages.ExitThisPlace + Messages.MetaTerminator;
+ }
+
+ if (TileCode == "STORE")
+ {
+ int ShopID = int.Parse(TileArg);
+ Shop shop = Shop.GetShopById(ShopID);
+ user.LastShoppedAt = shop;
+ message += buildShopInfo(shop, user.Inventory);
+
+ }
+ if(TileCode == "TOWNHALL")
+ {
+ message += buildTownHall(user);
+ }
+ if (TileCode == "VET")
+ {
+ message += buildVet(user, Vet.GetVetById(int.Parse(TileArg)));
+ }
+ if(TileCode == "GROOMER")
+ {
+ message += buildGroomer(user, Groomer.GetGroomerById(int.Parse(TileArg)));
+ }
+ if (TileCode == "FARRIER")
+ {
+ message += buildFarrier(user, Farrier.GetFarrierById(int.Parse(TileArg)));
+ }
+ if(TileCode == "BARN")
+ {
+ message += buildBarn(user, Barn.GetBarnById(int.Parse(TileArg)));
+ }
+ if (TileCode == "BANK")
+ {
+ message += buildBank(user);
+ }
+ if (TileCode == "WISHINGWELL")
+ {
+ message += buildWishingWell(user);
+ }
+ if(TileCode == "HORSEPAWNEER")
+ {
+ message += buildPawneer(user);
+ }
+ if (TileCode == "VENUSFLYTRAP")
+ {
+ message += buildVenusFlyTrap(user);
+ }
+ if (TileCode == "RIDDLER")
+ {
+ message += buildRiddlerRiddle(user);
+ }
+ if(TileCode == "ARENA")
+ {
+ message += buildArena(user, Arena.GetAreaById(int.Parse(TileArg)));
+ }
+ if(TileCode == "AUCTION")
+ {
+ message += buildAuction(user, Auction.GetAuctionRoomById(int.Parse(TileArg)));
+ }
+ if(TileCode == "TRAINER")
+ {
+ message += buildTrainer(user, Trainer.GetTrainerById(int.Parse(TileArg)));
+ }
+ if(TileCode == "HORSELEASER")
+ {
+ message += buildLeaser(user, Leaser.GetLeasersById(int.Parse(TileArg)));
+ }
+ if (TileCode == "LIBRARY")
+ {
+ message += buildLibary();
+ }
+ if(TileCode == "MULTIHORSES")
+ {
+ message += buildMultiHorses(user, TileArg);
+ }
+ if (TileCode == "POND")
+ {
+ message += buildPond(user);
+ }
+ if(TileCode == "2PLAYER")
+ {
+ string msg = build2PlayerGame(user, TileArg);
+ if (!overwrite)
+ message += msg;
+ else
+ message = msg;
+
+ overwrite = false;
+ }
+ if(TileCode == "HORSES")
+ {
+ message += buildHorseGame(user, TileArg);
+ }
+ if (TileCode == "WORKSHOP")
+ {
+ message += buildWorkshop(user);
+ }
+ if (TileCode == "MUDHOLE")
+ {
+ message += buildMudHole(user);
+ }
+ if (TileCode == "RANCH")
+ {
+ message += buildRanch(user, int.Parse(TileArg));
+ }
+ if(TileCode == "SANTA")
+ {
+ message += buildSanta(user);
+ }
+ if (TileCode == "MULTIROOM")
+ {
+ message += buildMultiroom(TileArg != "" ? TileArg : null, user);
+ }
+ if (TileCode == "PASSWORD")
+ {
+ message += buildPassword();
+ }
+ if (TileCode == "HORSEWHISPERER")
+ {
+ message += buildHorseWhisperer();
+ }
+ 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;
+ }
+
+
+ }
+}
diff --git a/HorseIsleServer/LibHISP/Game/Quest.cs b/HorseIsleServer/LibHISP/Game/Quest.cs
index ba8bb24..d1e29c4 100644
--- a/HorseIsleServer/LibHISP/Game/Quest.cs
+++ b/HorseIsleServer/LibHISP/Game/Quest.cs
@@ -241,7 +241,7 @@ namespace HISP.Game
user.LoggedinClient.SendPacket(ChatPacket);
}
- if (quest.SuccessNpcChat != null && quest.SuccessNpcChat.Trim() != "")
+ if (quest.SuccessNpcChat != null)
{
if (!npcActivation)
{