diff --git a/DataCollection/Useful Info/TODOQ1 b/DataCollection/Useful Info/TODO.txt old mode 100755 new mode 100644 similarity index 100% rename from DataCollection/Useful Info/TODOQ1 rename to DataCollection/Useful Info/TODO.txt diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json index 4af5372..15cfa98 100755 --- a/DataCollection/gamedata.json +++ b/DataCollection/gamedata.json @@ -57,7 +57,7 @@ "prof_reasons":{ "profanity":"Profanity detected.", "personal_info":"No giving out personal info/websites.", - } + }, "private_notes_save":"Saved Private Notes.", "buddy_request":"Attempting to Add Buddy. The other player must click ADD BUDDY as well. (Many players reserve this for just a couple players so don't feel insulted if they do not).", "click_nothing_message":"Nothing interesting here...", @@ -85,7 +85,9 @@ "chat_errors":{ "cant_find_player":"Could not find player to Private chat!", "ads_once_per_minute":"Ads may only be posted once per minute.", - "global_chats_limited":"CHAT NOT SENT: Global chats are limited (+1 earned per 2 minutes). Please chat using CHAT NEAR/ISLAND/BUDDIES when possible." + "global_chats_limited":"CHAT NOT SENT: Global chats are limited (+1 earned per 2 minutes). Please chat using CHAT NEAR/ISLAND/BUDDIES when possible.", + "global_too_long":"CHAT NOT SENT: Global chats are limited to 150 characters. Please try to keep the global chat brief when possible. (Use CTRL+UP arrow to edit)", + "ads_too_long":"CHAT NOT SENT: Ads chats are limited to 150 characters. Please try to keep the ads chat brief when possible. (Use CTRL+UP arrow to edit)" }, "mods_revenge":{ "awareded_others":"You earned $500 from Moderator %USERNAME%'s Splatterball!", @@ -195,7 +197,8 @@ "dropped_item_message":"You dropped an item on the ground.", "grab_but_inv_full":"Your inventory is full! Cannot grab items.", "grab_all_but_inv_full":"You grabbed what you could, but your inventory is full.", - "drop_tile_full":"Cannot drop any more objects here, too many on ground already." + "drop_tile_full":"Cannot drop any more objects here, too many on ground already.", + "other_picked_up":"You reached for it, but someone else must have grabbed it first." }, "shop":{ "cant_afford_1":"You cannot afford that item!", @@ -625,7 +628,7 @@ "description_too_long":"4000 character Max for Ranch description!", "title_contains_violations":"Title NOT SAVED, Chat Violations Present!", - "desc contains violations":"Description NOT SAVED, Chat Violations Present! (%REASON%)", + "desc_contains_violations":"Description NOT SAVED, Chat Violations Present! (%REASON%)", }, "build":{ "build_on_this_spot":"You can build one of the following buildings on this spot:", @@ -768,6 +771,7 @@ "horse_timer":"You have 60 seconds to capture the horse. Good luck!", "horse_escaped":"The Horse Evaded Capture.", "horse_caught":"You Captured the Horse!", + "horse_cannot_catch_max":"You have reached your maximum number of horses. Build a barn on a ranch to have more!", "horse_escaped_anyway":"Your lasso must have slipped?! The horse still got away!!", "too_many_horses":"You cannot manage any more horses.", "horses_menu":"^ATYour Horses^HYou can have up to %MAXHORSE% horses. Here are your %TOTALHORSE%:
", @@ -787,7 +791,7 @@ "name_profanity_detected":"Name NOT SAVED, Chat Violations Present!", "profile_profanity_detected":"Profile NOT SAVED, Chat Violations Present! (%REASON%)" - } + }, "horse_set_new_category":"Horse set as %CATEGORY%", "back_to_horse":"^R1^D5|BACK TO HORSE^R1", "pet_horse":"%MESSAGES%Your horse whinnies lightly. (+%MOOD% mood / -%TIREDNESS% tiredness)", diff --git a/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs b/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs index 70c088e..b6b576c 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs @@ -2,6 +2,7 @@ using HISP.Server; using HISP.Game; using System.Collections.Generic; +using HISP.Game.Inventory; namespace HISP.Game.Items { @@ -42,7 +43,7 @@ namespace HISP.Game.Items public int GetMiscFlag(int no) { - if(MiscFlags.Length <= no) + if (MiscFlags.Length <= no) return 0; else return MiscFlags[no]; @@ -85,10 +86,50 @@ namespace HISP.Game.Items { get { - return new int[4] { StallionTradingCard, MareTradingCard, ColtTradingCard, FillyTradingCard }; + return new int[4] { StallionTradingCard, MareTradingCard, ColtTradingCard, FillyTradingCard }; + } + } + + public static void UseItem(User user, ItemInstance item) + { + if (user.Inventory.HasItem(item.RandomId)) + { + InventoryItem itm = user.Inventory.GetItemByRandomid(item.RandomId); + if (itm.ItemId == Item.DorothyShoes) + { + if (World.InIsle(user.X, user.Y)) + { + World.Isle isle = World.GetIsle(user.X, user.Y); + if (isle.Name == "Prison Isle") + { + byte[] dontWorkHere = PacketBuilder.CreateChat(Messages.RanchDorothyShoesPrisonIsleMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(dontWorkHere); + return; + } + } + + if (user.OwnedRanch == null) // How???? + { + Logger.HackerPrint(user.Username + " Tried to use Dorothy Shoes when they did *NOT* own a ranch."); + user.Inventory.Remove(itm.ItemInstances[0]); + return; + } + byte[] noPlaceLIke127001 = PacketBuilder.CreateChat(Messages.RanchDorothyShoesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(noPlaceLIke127001); + + user.Teleport(user.OwnedRanch.X, user.OwnedRanch.Y); + } + else if (itm.ItemId == Item.Telescope) + { + byte[] birdMap = PacketBuilder.CreateBirdMap(user.X, user.Y); + user.LoggedinClient.SendPacket(birdMap); + } + else + { + Logger.ErrorPrint(user.Username + "Tried to use item with undefined action- ID: " + itm.ItemId); + } } } - public static ItemInformation[] GetAllWishableItems() { List itemInfo = new List(); diff --git a/Horse Isle Server/HorseIsleServer/Game/Messages.cs b/Horse Isle Server/HorseIsleServer/Game/Messages.cs index 681a434..eb154e0 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Messages.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Messages.cs @@ -54,6 +54,9 @@ namespace HISP.Game public static string CantFindPlayerToPrivateMessage; public static string AdsOnlyOncePerMinute; public static string GlobalChatLimited; + public static string GlobalChatTooLong; + public static string AdsChatTooLong; + // Auto Sell public static string AutoSellNotStandingInSamePlace; @@ -396,12 +399,20 @@ namespace HISP.Game public static string RanchUnownedRanchClicked; public static string RanchClickMessageFormat; + public static string RanchNoDorothyShoesMessage; public static string RanchDorothyShoesMessage; public static string RanchDorothyShoesPrisonIsleMessage; public static string RanchCantAffordRanch; public static string RanchRanchBroughtMessageFormat; + public static string RanchSavedRanchDescripton; + public static string RanchSavedTitleTooLongError; + public static string RanchSavedDescrptionTooLongError; + public static string RanchSavedTitleViolationsError; + public static string RanchSavedDescrptionViolationsErrorFormat; + + public static string RanchDefaultRanchTitle; public static string RanchEditDescriptionMetaFormat; @@ -659,6 +670,7 @@ namespace HISP.Game public static string GrabbedAllItemsMessage; public static string DroppedAnItemMessage; public static string DroppedItemTileIsFull; + public static string DroppedItemCouldntPickup; public static string ItemInformationFormat; // Pond @@ -794,7 +806,15 @@ namespace HISP.Game public static string HorseOthers; public static string HorseDescriptionEditFormat; + public static string HorseSavedProfileMessageFormat; + public static string HorseProfileMessageTooLongError; + public static string HorseNameTooLongError; + public static string HorseNameViolationsError; + public static string HorseProfileMessageProfileError; + + + public static string HorseCatchTooManyHorsesMessage; public static string HorseEquipTackMessageFormat; public static string HorseUnEquipTackMessageFormat; public static string HorseStopRidingMessage; diff --git a/Horse Isle Server/HorseIsleServer/Server/ConfigReader.cs b/Horse Isle Server/HorseIsleServer/Server/ConfigReader.cs index 6b64fa0..a413113 100755 --- a/Horse Isle Server/HorseIsleServer/Server/ConfigReader.cs +++ b/Horse Isle Server/HorseIsleServer/Server/ConfigReader.cs @@ -98,13 +98,13 @@ namespace HISP.Server AllUsersSubbed = data == "true"; break; case "enable_corrections": - BadWords = data == "true"; + DoCorrections = data == "true"; break; case "non_violation": DoNonViolations = data == "true"; break; case "enable_word_filter": - DoCorrections = data == "true"; + BadWords = data == "true"; break; case "intrest_rate": IntrestRate = int.Parse(data); diff --git a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs index 040e522..190e0ae 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs @@ -953,6 +953,8 @@ namespace HISP.Server Messages.CantFindPlayerToPrivateMessage = gameData.messages.chat_errors.cant_find_player; Messages.AdsOnlyOncePerMinute = gameData.messages.chat_errors.ads_once_per_minute; Messages.GlobalChatLimited = gameData.messages.chat_errors.global_chats_limited; + Messages.GlobalChatTooLong = gameData.messages.chat_errors.global_too_long; + Messages.AdsChatTooLong = gameData.messages.chat_errors.ads_too_long; // Warp Command @@ -1307,12 +1309,21 @@ namespace HISP.Server Messages.RanchUnownedRanchClicked = gameData.messages.meta.ranch.unowned_ranch_click; Messages.RanchClickMessageFormat = gameData.messages.meta.ranch.click_message; + Messages.RanchNoDorothyShoesMessage = gameData.messages.meta.ranch.no_dorothy_shoes; Messages.RanchDorothyShoesMessage = gameData.messages.meta.ranch.dorothy_message; Messages.RanchDorothyShoesPrisonIsleMessage = gameData.messages.meta.ranch.dorothy_prison_isle; Messages.RanchCantAffordRanch = gameData.messages.meta.ranch.ranch_buy_cannot_afford; Messages.RanchRanchBroughtMessageFormat = gameData.messages.meta.ranch.ranch_brought; - Messages.RanchSavedRanchDescripton = gameData.messages.meta.ranch.saved_ranch; + + Messages.RanchSavedRanchDescripton = gameData.messages.meta.ranch.ranch_info.saved; + Messages.RanchSavedTitleTooLongError = gameData.messages.meta.ranch.ranch_info.title_too_long; + Messages.RanchSavedDescrptionTooLongError = gameData.messages.meta.ranch.ranch_info.description_too_long; + Messages.RanchSavedTitleViolationsError = gameData.messages.meta.ranch.ranch_info.title_contains_violations; + Messages.RanchSavedDescrptionViolationsErrorFormat = gameData.messages.meta.ranch.ranch_info.desc_contains_violations; + + + Messages.RanchDefaultRanchTitle = gameData.messages.meta.ranch.default_title; Messages.RanchEditDescriptionMetaFormat = gameData.messages.meta.ranch.edit_description; Messages.RanchTitleFormat = gameData.messages.meta.ranch.your_ranch_meta; @@ -1692,8 +1703,14 @@ namespace HISP.Server Messages.HorseTackButtonFormat = gameData.messages.meta.horse.horse_inventory.tack_button; Messages.HorsePetButtonFormat = gameData.messages.meta.horse.horse_inventory.pet_button; Messages.HorseProfileButtonFormat = gameData.messages.meta.horse.horse_inventory.profile_button; - Messages.HorseSavedProfileMessageFormat = gameData.messages.meta.horse.saved_profile; + Messages.HorseSavedProfileMessageFormat = gameData.messages.meta.horse.profile.saved; + Messages.HorseProfileMessageTooLongError = gameData.messages.meta.horse.profile.desc_too_long; + Messages.HorseNameTooLongError = gameData.messages.meta.horse.profile.name_too_long; + Messages.HorseNameViolationsError = gameData.messages.meta.horse.profile.name_profanity_detected; + Messages.HorseProfileMessageProfileError = gameData.messages.meta.horse.profile.profile_profanity_detected; + + Messages.HorseCatchTooManyHorsesMessage = gameData.messages.meta.horse.horse_inventory.horse_cannot_catch_max; Messages.HorseNoAutoSell = gameData.messages.meta.horse.horse_inventory.no_auto_sell; Messages.HorseAutoSellPriceFormat = gameData.messages.meta.horse.horse_inventory.auto_sell_format; Messages.HorseAutoSellOthersFormat = gameData.messages.meta.horse.horse_inventory.auto_sell_others; @@ -1868,6 +1885,7 @@ namespace HISP.Server Messages.GrabAllItemsButton = gameData.messages.meta.dropped_items.grab_all; Messages.DroppedAnItemMessage = gameData.messages.dropped_items.dropped_item_message; Messages.DroppedItemTileIsFull = gameData.messages.dropped_items.drop_tile_full; + Messages.DroppedItemCouldntPickup = gameData.messages.dropped_items.other_picked_up; Messages.GrabbedAllItemsMessage = gameData.messages.dropped_items.grab_all_message; Messages.GrabbedItemMessage = gameData.messages.dropped_items.grab_message; Messages.GrabAllItemsMessage = gameData.messages.dropped_items.grab_all_message; diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs index 7cf91d7..8bf17e5 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs @@ -2141,6 +2141,14 @@ namespace HISP.Server Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to catch a horse that doesnt exist."); return; } + + if(sender.LoggedinUser.HorseInventory.HorseList.Length >= sender.LoggedinUser.MaxHorses) + { + byte[] payUsPlz = PacketBuilder.CreateChat(Messages.HorseCatchTooManyHorsesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(payUsPlz); + return; + } + sender.LoggedinUser.CapturingHorseId = randomId; byte[] chatPacket = PacketBuilder.CreateChat(Messages.HorseCaptureTimer, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(chatPacket); @@ -2412,6 +2420,25 @@ namespace HISP.Server { if(sender.LoggedinUser.LastViewedHorse != null) { + string desc = dynamicInput[2]; + string name = dynamicInput[1]; + name.Trim(); + desc.Trim(); + + if(name.Length > 50) + { + byte[] horseNameTooLongPacket = PacketBuilder.CreateChat(Messages.HorseNameTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(horseNameTooLongPacket); + break; + } + + if (desc.Length > 250) + { + byte[] horseNameTooLongPacket = PacketBuilder.CreateChat(Messages.HorseNameTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(horseNameTooLongPacket); + break; + } + sender.LoggedinUser.MetaPriority = true; sender.LoggedinUser.LastViewedHorse.Name = dynamicInput[1]; sender.LoggedinUser.LastViewedHorse.Description = dynamicInput[2]; @@ -2496,6 +2523,20 @@ namespace HISP.Server string desc = dynamicInput[2]; if(sender.LoggedinUser.OwnedRanch != null) { + title.Trim(); + desc.Trim(); + if(title.Length > 100) + { + byte[] tooLongPacket = PacketBuilder.CreateChat(Messages.RanchSavedTitleTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooLongPacket); + break; + } + if (desc.Length > 4000) + { + byte[] tooLongPacket = PacketBuilder.CreateChat(Messages.RanchSavedTitleTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooLongPacket); + break; + } sender.LoggedinUser.OwnedRanch.Title = title; sender.LoggedinUser.OwnedRanch.Description = desc; } @@ -5537,18 +5578,23 @@ namespace HISP.Server case "/ads": channel = Chat.ChatChannel.Ads; break; + case "/a": case "/all": channel = Chat.ChatChannel.All; break; + case "/h": case "/here": channel = Chat.ChatChannel.Here; break; + case "/n": case "/near": channel = Chat.ChatChannel.Near; break; + case "/b": case "/buddy": channel = Chat.ChatChannel.Buddies; break; + case "/i": case "/island": channel = Chat.ChatChannel.Isle; break; @@ -5573,6 +5619,19 @@ namespace HISP.Server message = message.Trim(); + if(channel == Chat.ChatChannel.All && message.Length > 150) + { + byte[] tooLong = PacketBuilder.CreateChat(Messages.GlobalChatTooLong, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooLong); + return; + } + + if (channel == Chat.ChatChannel.Ads && message.Length > 150) + { + byte[] tooLong = PacketBuilder.CreateChat(Messages.AdsChatTooLong, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooLong); + return; + } if (Chat.ProcessCommand(sender.LoggedinUser, message)) { Logger.DebugPrint(sender.LoggedinUser.Username + " Attempting to run command '" + message + "' in channel: " + channel.ToString()); @@ -5858,6 +5917,9 @@ namespace HISP.Server } catch(KeyNotFoundException) { + byte[] pickedUp = PacketBuilder.CreateChat(Messages.DroppedItemCouldntPickup, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(pickedUp); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to grab a non existing object."); return; } @@ -6119,7 +6181,23 @@ namespace HISP.Server break; case PacketBuilder.ITEM_USE: packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, packet.Length - 2); + randomIdStr = packetStr.Substring(2, packet.Length - 4); + + if(randomIdStr == "") // f12 ranch shortcut + { + if (sender.LoggedinUser.Inventory.HasItemId(Item.DorothyShoes)) + { + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByItemId(Item.DorothyShoes); + Item.UseItem(sender.LoggedinUser, itm.ItemInstances[0]); + } + else + { + byte[] noShoesMessage = PacketBuilder.CreateChat(Messages.RanchNoDorothyShoesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(noShoesMessage); + return; + } + } + randomId = 0; try @@ -6134,39 +6212,7 @@ namespace HISP.Server if (sender.LoggedinUser.Inventory.HasItem(randomId)) { InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); - if(itm.ItemId == Item.DorothyShoes) - { - if(World.InIsle(sender.LoggedinUser.X, sender.LoggedinUser.Y)) - { - World.Isle isle = World.GetIsle(sender.LoggedinUser.X, sender.LoggedinUser.Y); - if(isle.Name == "Prison Isle") - { - byte[] dontWorkHere = PacketBuilder.CreateChat(Messages.RanchDorothyShoesPrisonIsleMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(dontWorkHere); - break; - } - } - - if(sender.LoggedinUser.OwnedRanch == null) // How???? - { - Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use Dorothy Shoes when they did *NOT* own a ranch."); - sender.LoggedinUser.Inventory.Remove(itm.ItemInstances[0]); - break; - } - byte[] noPlaceLIke127001 = PacketBuilder.CreateChat(Messages.RanchDorothyShoesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(noPlaceLIke127001); - - sender.LoggedinUser.Teleport(sender.LoggedinUser.OwnedRanch.X, sender.LoggedinUser.OwnedRanch.Y); - } - else if(itm.ItemId == Item.Telescope) - { - byte[] birdMap = PacketBuilder.CreateBirdMap(sender.LoggedinUser.X, sender.LoggedinUser.Y); - sender.SendPacket(birdMap); - } - else - { - Logger.ErrorPrint(sender.LoggedinUser.Username + "Tried to use item with undefined action- ID: " + itm.ItemId); - } + Item.UseItem(sender.LoggedinUser, itm.ItemInstances[0]); } break; case PacketBuilder.ITEM_WEAR: diff --git a/Horse Isle Server/HorseIsleServer/Server/PacketBuilder.cs b/Horse Isle Server/HorseIsleServer/Server/PacketBuilder.cs index 3759332..3388ba7 100755 --- a/Horse Isle Server/HorseIsleServer/Server/PacketBuilder.cs +++ b/Horse Isle Server/HorseIsleServer/Server/PacketBuilder.cs @@ -212,7 +212,7 @@ namespace HISP.Server public const byte ITEM_USE = 0x5F; public const byte ITEM_RAKE = 0x5B; public const byte ITEM_SHOVEL = 0x5A; - + public const byte LOGIN_INVALID_USER_PASS = 0x15; public const byte LOGIN_CUSTOM_MESSAGE = 0x16; public const byte LOGIN_SUCCESS = 0x14;