diff --git a/README.md b/README.md
index 63fff0083..caf98bfe5 100644
--- a/README.md
+++ b/README.md
@@ -149,4 +149,4 @@ These credits can be spent in the 2009Scape Reward Shop. It's important to be cl
Testers are not the only people who can gain credits - other ways of earning credits can be found on [the 2009Scape website](https://2009scape.org/site/game_guide/credits.html).
-Please be patient! The Credit system is not fully complete yet, so it will take a long time for credits to be awarded.
+Please be patient! The Credit system is not fully complete yet, so it will take a long time for credits to be awarded.
\ No newline at end of file
diff --git a/Server/.gitignore b/Server/.gitignore
index f22e9f978..a9a29cad7 100644
--- a/Server/.gitignore
+++ b/Server/.gitignore
@@ -2,6 +2,7 @@ bin/**
out/**
data/logs/**
data/profile/**
+data/playerstats/**
.idea/**
/bin
.DS_Store**
diff --git a/Server/README.md b/Server/README.md
deleted file mode 100644
index 63fff0083..000000000
--- a/Server/README.md
+++ /dev/null
@@ -1,152 +0,0 @@
-[![AGPL-3.0 License][license-shield]][license-url]
-
-
-
-
-
-
-
An open source MMORPG emulation server
-
-
-
-
-
- Community Hosted Server
- ·
- Discord Invite
- · Report Bug
-
-NOTE: Bug reports and support are only accepted by/offered to players of our live hosted server. We will not provide support to those running their own copies.
-
-## Table of Contents
-
-* [Live Server Information](#live-server-information)
-* [History of this Codebase](#history-of-this-codebase)
-* [Our Core Values](#our-core-values)
-* [Contributing](#contributing)
-* [Setup for Content Developers](#content-developers-setting-up-the-project)
- * [GitLab Setup](#gitlab-setup)
- * [Prerequisites](#prerequisites)
- * [Project Setup](#project-setup)
- * [Running the project](#running-the-project)
-* [License](#license)
-* [Contact](#contact)
-
-
-## Live Server Information
-
-Did you know that the 2009Scape Development Team hosts the main branch of this repo that you can connect to and play? Come join a growing community of people that love to grind out skills, quest, and hangout together. A download link for the launcher can be found [here](https://2009scape.org). Connecting to the live server is also one of the easiest ways to identify bugs/typos/missing features. Identifying these issues help developers, whether already on the project, or are even brand new to the project, fix bugs and issues in an expedited rate.
-
-## History of this Codebase
-
-The 2009Scape you see today has gone through a magnitude of changes. Originally starting its life as Arios498, this server saw a lot of people playing it daily, unfortunately, it was for profit and closed source. It was later upgraded to Arios530, targeting the build 530 of runescape with content in and around January 1st, 2009. Development came to a halt when a developer of the closed source project released the source code. The original developers of this server went on to create Kratos 530 back in 2015.
-
-This project was started out of love for the 530 revision. A small group of developers spent thousands of hours improving on the existing source that was left to the curb. Over the past year, this project has seen many developers coming and going, fixing bugs that they find either through their own server, or bugs that they find in the live game that is currently hosted. We do not accept donations of any kind. The smiles and wonderful compliments are more than enough to keep us going! Content and bugfixes are always number one on our list, and we try our best to answer any questions that you may have, provided you have read through this readme and frequently asked questions on the discord.
-
-## Our Core Values
-
-In the current climate of RuneScape Private Servers in general, we believe it's important to wear our core values on our sleeves and defend them with everything we have! Below are what we hold as our core, most important values:
-
-* **We do NOT believe in profiting off an RSPS.** To many of us here at the 2009Scape team, what we care about most is preserving the wonderful work of the Gower brothers in the most true-to-spirit manner possible. We do NOT do this to make a profit, and in fact **we outright refuse donations.** This is a labor of love and passion for everyone involved, a love for real RS2! This is perhaps the single most central value we have. If you want to "donate" to us, do so with your time and your dedication. That is what we desire most.
-
-
-* **Authenticity is central to the work**. As a remake, one of the most important things to us is being true to the Gower spirit. What the Gowers brought to us in our childhood is what we are driven to preserve for the remainder of the world.
-
-
-* **Open Source is crucial to the project**. We believe open source remakes to be crucial to preserving what we loved in our childhood, and we believe for-profit and/or closed-source servers are destined to flounder out and fail.
-
-
-* **Be welcoming**. One of our most important goals is to provide a community of friendly and caring people that get along and love to enjoy the game with eachother. For this reason, we do tend to be very strict when it comes to toxicity. We care about quality a whole lot more than quantity!
-
-## Contributing
-
-**Note: All merge requests MUST be made using the defaut MR template. Merge requests that do not use this template will not be accepted.**
-
-**Note: All new contributions MUST be made in Kotlin unless you are updating or fixing a bug in legacy code. More information on Kotlin can be found [here](https://kotlinlang.org/).**
-
-There are many ways everyone can contribute! From the most seasoned programmers to those who do not have the most remote clue how code works! Below are some things that can always use some love from the community.
-
-* **Content Testers**: I'm putting this one up top because of its importance. We, the contributors and developers, aren't perfect. Sometimes, we make mistakes. This is where you come in - If you want a sneak peek at upcoming content, have a knack for breaking things, or just want to contribute to the project without making code changes, you can become a tester! If you are interested in becoming a tester, reach out in the testing channel of the discord. [Why become a tester?](#why-become-a-tester)
-
-
-* **Wiki Editors**: Did you know we have a wiki? Well it's always in need of people to fill it out and stay on top of it. Editing the wiki is one of the easiest ways you can contribute to 2009Scape! If you're an active player and have the will, there's so much you could be helping out with over at the wiki. [Click here to go to the wiki](https://cdn.2009scape.org/wiki/doku.php?id=start).
-
-
-* **JSON editors**: We could always use more JSON editors! Please note that JSON editing **must** be done using the [Thanos Tool](https://gitlab.com/2009scape/tools/rs09-thanos-tool/-/jobs/5153567519/artifacts/file/build/libs/zaros.jar). **This does not run on modern Java** and requires **Java 11** to run (using the usual 'java -jar zaros.jar').
-
-
-* **Authenticity Auditors**: As a remake, authenticity is central to our core values! We could always use someone to go through the game and create large lists of simple tasks that can be done to bring us closer to the authentic 2009 game! The preferred way to do this is one-area-at-a-time. If you want to see an example of some audits we've done in the past, take a look [here](https://gitlab.com/2009scape/2009scape/-/issues/46).
-
-
-* **Code Contributors**: As a remake, we have massive amounts of content that need to be implemented or corrected. If you know how to program or are willing to learn, this is where you could be extremely helpful! We need everything from quests, to dialogue, to mini-games, to skills that still need to be corrected or implemented. This is perhaps one of the most valuable ways someone could help out the project! If you are interested in developing content, reach out in the development channel of the Discord.
-
-## Content Developers: Setting Up the Project.
-### GitLab Setup
-**Note: This allows you to commit changes to the main repo (with approval)! Also, always stay up to date with the most recent updates by pulling into your copy when 2009Scape updates!**
-
-1. Create a GitLab account if you haven't done so already.
-
-2. Follow our Git Basics guide [over on the wiki.](https://gitlab.com/2009scape/2009scape/-/wikis/git-basics)
-
-**If at anytime you have an issue with GitLab please refer to the [GitLab help center](https://gitlab.com/help).**
-
-### Prerequisites
-
-These are mandatory. If you don't install **all** of these programs **in order** prior to
-the project's setup, things won't work. At all.
-
-*For Windows users* - Turn developer mode on first in Windows developer settings.
-
-* [JDK 11](https://adoptium.net) or the Java SE Development Kit Version 11
-* [IntelliJ IDEA Community](https://www.jetbrains.com/idea/download/)
-
-### SSH setup
-
-1. [Set up a key if you don't have one (ed25519)](https://docs.gitlab.com/ee/user/ssh.html#generate-an-ssh-key-pair)
-2. [Add your public key to your gitlab account](https://docs.gitlab.com/ee/user/ssh.html#add-an-ssh-key-to-your-gitlab-account)
-3. [Verify you can connect to git@gitlab.com](https://docs.gitlab.com/ee/user/ssh.html#verify-that-you-can-connect)
-
-### Project Setup
-
-1. If you haven't already, make sure to follow our [Git Basics](https://gitlab.com/2009scape/2009scape/-/wikis/git-basics) guide.
-2. Run `git lfs pull` in the 2009scape folder you cloned as part of that guide. This only has to be done once, ever.
-3. Follow our [IntelliJ IDEA Setup Guide](https://gitlab.com/2009scape/2009scape/-/wikis/Setup-for-IntelliJ-IDEA-IDE)
-
-### Running the project
-
-1. If you followed the IntelliJ setup guide, which you probably should have, just use the provided run configuration.
-***Note: If you choose not to use the provided run scripts or IntelliJ, you *must* run `mvn clean` before it will build correctly.***
-
-#### Linux / OSX
-
-Start the game server with the included run script. Use `./run -h` for more info.
-
-#### Windows
-
-Start the game server with `run-server.bat`
-
-### License
-
-We use the AGPL 3.0 license, which can be found [here](https://www.gnu.org/licenses/agpl-3.0.en.html). Please be sure to read and understand the license. Failure to follow the guidelines outlined in the license will result in legal action. If you know or hear of anyone breaking this license, please send a report, with proof, to Red Bracket#8151, ceikry#2724, or woahscam#8535 on discord or email woahscam@hotmail.com. **We WILL NOT change the license to fit your needs.**
-
-### Contact
-
-**Reminder: There is no official support for setting up your own server. Do not ping/dm developers, or ask in support channels about setting up your server. Support for the live server and 2009Scape single-player is available on the [2009Scape forums](https://forum.2009scape.org/).**
-
-
-[license-shield]: https://img.shields.io/badge/license-AGPL--3.0-informational
-[license-url]: https://www.gnu.org/licenses/agpl-3.0.en.html
-
-### Why become a tester?
-
-Before content hits Live, it has to be tested. We can, but do not want to do this alone, and would love the help! But don't worry, there is something in it for you. Credits! Keep in mind that credits will only be awarded to people who thoroughly test the content and provide detailed reports on them. Like votes or HoF you must claim them in the #claim-to-fame channel on discord or matrix.
-
-* If you test smaller things like bug fixes there is a 2 credit reward.
-* If you test full quests or minigames you will be rewarded 5 credits.
-* If you find a bug in the content you are testing that hasn't already been found you will earn an extra credit.
-
-These credits can be spent in the 2009Scape Reward Shop. It's important to be clear that credits are gained by contributions to the project. We cannot and will not accept donations (of any kind), especially not in exchange for in-game credits or perks.
-
-Testers are not the only people who can gain credits - other ways of earning credits can be found on [the 2009Scape website](https://2009scape.org/site/game_guide/credits.html).
-
-Please be patient! The Credit system is not fully complete yet, so it will take a long time for credits to be awarded.
diff --git a/Server/data/ObjectParser.xml b/Server/data/ObjectParser.xml
index b10a0d445..e132f1f69 100644
--- a/Server/data/ObjectParser.xml
+++ b/Server/data/ObjectParser.xml
@@ -25,4 +25,7 @@
+
+
+
diff --git a/Server/data/botdata/bot_dialogue.json b/Server/data/botdata/bot_dialogue.json
index e79ac6ee9..c225b117e 100644
--- a/Server/data/botdata/bot_dialogue.json
+++ b/Server/data/botdata/bot_dialogue.json
@@ -301,7 +301,7 @@
"Always check announcments",
"We thrivin",
"Ship @name",
- "Dont forget to vote 2009Scape!",
+ "Dont forget to vote 2009scape!",
"Kermit is too legit 2 quit",
"Out here on the range we are having fun",
"I am hank steel",
@@ -367,33 +367,16 @@
"May Guthix bring you balance.",
"May Guthix bring you balance.",
"May Guthix bring you balance.",
- "Thy death was not in vain, for it brought some balance to the world. May Guthix bring you rest.",
- "May you walk the path, and never fall, for Guthix walks beside thee on thy journey. May Guthix bring you peace.",
- "All things must end, as all begin; Only Guthix knows the role thou must play. May Guthix bring you balance.",
- "In life, in death, in joy, in sorrow: May thine experience show thee balance. May Guthix bring you balance.",
- "Thou must do as thou must, no matter what. Thine actions bring balance to this world. May Guthix bring you balance.",
- "The river flows, the sun ignites, May you stand with Guthix in thy fights. May Guthix bring you balance.",
"A journey of a single step, May take thee over a thousand miles. May Guthix bring you balance.",
"Zamorak give me strength!",
"Zamorak give me strength!",
"Zamorak give me strength!",
- "May your bloodthirst never be sated, and may all your battles be glorious. Zamorak bring you strength.",
- "There is no opinion that cannot be proven true...by crushing those who choose to disagree with it. Zamorak give me strength!",
- "Battles are not lost and won; They simply remove the weak from the equation. Zamorak give me strength!",
- "Those who fight, then run away, shame Zamorak with their cowardice. Zamorak give me strength!",
- "Battle is by those who choose to disagree with it. Zamorak give me strength!",
- "Strike fast, strike hard, strike true: The strength of Zamorak will be with you. Zamorak give me strength!",
"The weak deserve to die, so the strong may flourish. This is the creed of Zamorak.",
"This is Saradomin's wisdom.",
"This is Saradomin's wisdom.",
"This is Saradomin's wisdom.",
"Go in peace in the name of Saradomin; may his glory shine upon you like the sun.",
"Thy cause was false, thy skills did lack; See you in Lumbridge when you get back.",
- "Protect your self, protect your friends. Mine is the glory that never ends. This is Saradomin's wisdom.",
- "The darkness in life may be avoided, by the light of wisdom shining. This is Saradomin's wisdom.",
- "Show love to your friends, and mercy to your enemies, and know that the wisdom of Saradomin will follow. This is Saradomin's wisdom.",
- "A fight begun, when the cause is just, will prevail over all others. This is Saradomin's wisdom.",
- "The currency of goodness is honour; It retains its value through scarcity. This is Saradomin's wisdom.",
"For Camelot!",
"Firmly grasp it!",
"My legs!",
@@ -496,21 +479,525 @@
"Shlisshalpshlaap",
"Somebody call for an exterminator?",
"Decisive action. Should work.",
- "R E A D Y T O R A I S E S O M E H E L L",
"Darkness overpowering.",
"Got any questions about propane? Or propane accessories?",
"When someone asks me if I am a god, I say Y E S!!!",
"You run out of Marines?",
- "Goliath Online",
- "I'm escaping to the one place that hasn't been corrupted by Capitalism. Lunar Isle!",
"Selling wildy protection, 100k gp",
- "Can't we get you on Mastermind, @name? Next contestant - @name from Lumbridge. Special subject - the bleedin' obvious.",
- "Oh, you're German! I'm sorry, I thought there was something wrong with you.",
+ "Can't we get you on Mastermind, @name?",
"Listen, don't mention the war! I mentioned it once, but I think I got away with it all right.",
"Cunnilingus and psychiatry brought us to this.",
- "Oh, poor baby. What do you want, a Brimstail's Sampler?",
- "There's an old TzHarrian saying, you fuck up once, you lose two teeth.",
- "The lineup consisted simply of six hydrocoptic marzelvanes so fitted to the ambifacient lunar waneshaft that sidefumbling was prevented."
+ "Ah, the Wilderness... where dreams of riches meet a swift demise.",
+ "Who needs a quest guide? I've got the whole wiki memorized.",
+ "Buying GF 10k coins. Must have at least 70 Agility.",
+ "I swear, the goblins in Goblin Village have it out for me.",
+ "Why do wizards always hang out in towers? Is it a zoning thing?",
+ "I'm training my Construction skill. My house is gonna be lit!",
+ "The GE is like the stock market, but with dragon bones.",
+ "Why do we need a cabbage patch in Draynor? Seriously.",
+ "I've been mining rune essence for hours. My pickaxe hates me.",
+ "@name hit 99 Cooking. Time to open a gourmet restaurant in Varrock.",
+ "I'm convinced the @name is actually a time-traveling wizard.",
+ "Anyone up for a Castle Wars match? I need that decorative armor.",
+ "Accidentally clicked Attack on a guard. Now I'm a wanted criminal.",
+ "Why do we even have a Duel Arena? It's just a fancy boxing ring.",
+ "I've got a stack of burnt lobsters. Anyone want to buy them?",
+ "Greetings, @name! Looking for a quest?",
+ "Just got a rare drop! The RNG gods are smiling upon me!",
+ "Anyone need help with a boss fight? I've got my dragon dagger ready.",
+ "Buying feathers! Will pay top price!",
+ "The Lumbridge cows are my favorite training spot.",
+ "Who needs a teleport? I've got my magic runes stocked.",
+ "@name hit 99 Woodcutting. Time to chop some yews!",
+ "Anyone seen the Wise Old Man lately? I owe him a visit.",
+ "Selling lobsters! Freshly caught from Catherby.",
+ "Swear, the Wilderness is scarier than my nightmares.",
+ "Looking for a clan to join. Any takers?",
+ "I'm an ironman, so no trading for me!",
+ "Anyone up for a Castle Wars match?",
+ "The Grand Exchange prices are crashing. Panic sell!",
+ "Who else remembers the Falador Massacre?",
+ "I'm saving up for a party hat. Wish me luck!",
+ "Barrows runs are my addiction. Those crypts are spooky.",
+ "I'm convinced the Wise Old Man is secretly Zamorak.",
+ "I'm a completionist, so I'm grinding out all the achievements.",
+ "The music in this game is surprisingly epic.",
+ "Tried to trade with a tree... It didn't go well.",
+ "My bank is like a black hole. Items disappear forever.",
+ "I'm convinced the Wise Old Man is just a confused tourist.",
+ "My character's fashion sense? Let's just say it's 'unique.'",
+ "Challenged a cow to a dance-off. It won.",
+ "Why does the Lumbridge Guide always look so lost?",
+ "I'm training Agility, but my real-life agility is zero.",
+ "Tried to fish in the desert. Sandfish are elusive.",
+ "The Grand Exchange is like a chaotic stock market.",
+ "I'm a master at clicking 'Continue' during quests.",
+ "I'm convinced the chickens are plotting world domination.",
+ "I'm a woodcutter, but I've never seen a talking tree.",
+ "I'm a vegetarian, except when it comes to killing dragons.",
+ "Why do wizards wear pointy hats? Is it a fashion statement?",
+ "Challenged a guard to a staring contest. He won.",
+ "I'm collecting cabbage. It's a noble pursuit.",
+ "Accidentally set my cat on fire. It's now a firecat.",
+ "I'm convinced the Wise Old Man is secretly a time traveler.",
+ "I'm a quest completionist, but I still can't find my keys.",
+ "I'm convinced the ducks are spying on us.",
+ "I'm a pro at avoiding the Lumbridge swamp. Too many frogs.",
+ "Hey, can someone lend me 10k? I promise I'll pay it back... eventually.",
+ "Why do I always find the one square where the random event spawns?",
+ "I'm training Prayer by burying bones. It's like a spiritual workout.",
+ "The Wise Old Man's fashion sense is questionable.",
+ "I'm convinced the ducks are secretly plotting world domination.",
+ "Why do wizards wear pointy hats? Is it a dress code?",
+ "I'm collecting cabbage. It's a noble pursuit, really.",
+ "I'm a vegetarian, except when it comes to killing dragons.",
+ "Why does the Lumbridge Guide always look so lost?",
+ "Training Agility, but my real-life agility is zero.",
+ "I'm convinced the Wise Old Man is secretly a time traveler.",
+ "Tried to mine air. It's an untapped resource.",
+ "I'm a quest completionist, but I still can't find my keys.",
+ "Challenged a guard to a staring contest. He won.",
+ "I'm saving up for a party hat. Priorities, you know?",
+ "Why do goblins drop coins? Do they moonlight as accountants?",
+ "I'm convinced the chickens are plotting something.",
+ "Clicked 'Attack' on a chicken. Now I'm a poultry murderer.",
+ "My character's fashion sense? Let's just say it's 'unique.'",
+ "Do you know where I can find the entrance to the Taverley Dungeon?",
+ "Hey, anyone here familiar with the Barrows? I need some tips.",
+ "Is there a bank nearby? My inventory is overflowing with loot",
+ "I'm clueless about clue scrolls",
+ "Where's the best spot to catch sharks? I'm aiming for 99 Fishing.",
+ "Is there a shortcut to the Karamja Volcano?",
+ "Can someone explain the mechanics of the Jad fight in the Fight Caves?",
+ "I'm stuck on the Elemental Workshop quest. Any hints?",
+ "Where can I find a loom to spin flax into bowstrings?",
+ "What's the best gear setup for killing dragons? I want that visage drop!",
+ "I'm trying to unlock the fairy rings",
+ "How do I recharge my amulet of glory?",
+ "Why do goblins drop coins?",
+ "The Grand Exchange is like the stock market",
+ "My real-life agility is more like a lumbering tortoise.",
+ "The Wise Old Man's fashion sense is like Woahs",
+ "I challenged a cow to a dance off, surprisingly smooth mooves.",
+ "Why does the Lumbridge Guide always look lost?",
+ "I'm convinced the ducks in Lumbridge are plotting world domination!",
+ "I accidentally ate my prayer potion I'm blessed with heartburn",
+ "I'm a vegetarian, except when it comes to slaying dragons.",
+ "Why do wizards wear pointy hats? Is it a magical dress code?",
+ "I'm a quest completionist, but I still can't find my keys in real life.",
+ "I challenged a guard to a staring contest. He won.",
+ "I'm saving up for a party hat. Priorities, ya know?",
+ "What's the deal with the Wilderness?",
+ "I'm convinced the chickens are secretly plotting world domination!",
+ "Accidentally clicked 'Attack' on a guard. Now I'm on a watchlist.",
+ "My character's fashion sense? Let's just say it's 'unique'",
+ "Lobsters heal my soul",
+ "Trimmed armor or bust!",
+ "Wilderness: Where friendships go to die",
+ "Buying gf 10k",
+ "Dancing for coins at Lumbridge",
+ "Wearing full rune like a boss",
+ "Teleporting to Camelot for quests",
+ "Fishing for hours at Catherby",
+ "PKing with a rune 2h",
+ "World 1 Falador Park parties",
+ "Staking my bank at the Duel Arena",
+ "Dying to Elvarg's fiery breath sums up my life",
+ "Got the Quest cape finally on my main!",
+ "Wearing a party hat with pride",
+ "Castle Wars: Red vs Blue",
+ "Trading in Varrock Square",
+ "Barrows runs for that sweet loot",
+ "Spending hours in Pest Control is life",
+ "Killing cows for leather armor is a good start",
+ "Farming herbs in Ardougne can be good money",
+ "Clan chat drama LOL",
+ "Mining rune essence endlessly",
+ "Agility courses: A love-hate relationship",
+ "Dueling for honor.... and GP",
+ "Buying runes from Aubury is decent money",
+ "Chasing the Easter Bunny like a scam",
+ "Wearing a skillcape with pride",
+ "Fletching yew longbows for profit",
+ "Going to implings in Puro-Puro",
+ "Castle Wars barricade wars",
+ "Dropping party hats at drop parties like pennies",
+ "Killing lesser demons in Karamja is part of my holy conquest",
+ "@name lures noobs into the Wilderness",
+ "Farming ranarrs for cash",
+ "Getting lost in the Underground Pass",
+ "Selling coal at the Grand Exchange",
+ "Fighting the Kalphite Queen",
+ "Picking flax in Seers' Village",
+ "Begging for free stuff in Lumbridge",
+ "Smithing rune platebodies for profit",
+ "Logging out in Lumbridge Castle",
+ "Hey @name, how do I get to the Grand Exchange?",
+ "Veteran here! @name, what's your favorite quest?",
+ "@name, how do I make money fast?",
+ "Hey @name, what's the best combat style for bossing?",
+ "@name, always carry an emergency teleport!",
+ "New player here! @name, what's the Wilderness like?",
+ "Hey @name, how do I join a clan?",
+ "@name, prioritize Prayer levels!",
+ "@name, what's the best way to train Agility?",
+ "Hey @name, what's your favorite minigame?",
+ "@name, never trust a PKer in Lumbridge!",
+ "@name, how do I get a fire cape?",
+ "Hey @name, what's the fastest way to level up Magic?",
+ "@name, try the Barrows tunnels!",
+ "@name, what's the deal with Pest Control?",
+ "Hey @name, how do I unlock the Fairy Rings?",
+ "@name, remember the old random events?",
+ "@name, should I train Strength or Attack first?",
+ "Hey @name, what's your favorite skillcape?",
+ "@name, can't do the Fight Caves!",
+ "@name, how do I get a pet?",
+ "Hey @name, what's the best food for boss fights?",
+ "@name, Castle Wars or Clan Wars?",
+ "@name, what's a clue scroll?",
+ "Hey @name, how do I defeat Jad?",
+ "@name, use Protect from Melee at KBD!",
+ "@name, should I train Ranged or Magic?",
+ "Hey @name, what's the best way to level up Crafting?",
+ "@name, don't forget your anti-dragon shield!",
+ "@name, what's the Stronghold of Security?",
+ "Hey @name, how do I access the Legends' Guild?",
+ "@name, remember the old PvP worlds?",
+ "@name, how do I get a dragon defender?",
+ "Hey @name, what's the best way to level up Herblore?",
+ "@name, always carry a charged amulet of glory!",
+ "@name, should I train Fishing or Cooking?",
+ "Hey @name, how do I defeat the Chaos Elemental?",
+ "@name, try the TzHaar Fight Pit!",
+ "@name, what's the best way to level up Smithing?",
+ "Hey @name, what's your favorite Slayer master?",
+ "@name, use the Ardougne cloak teleports!",
+ "@name, what's the Legends' Quest about?",
+ "Hey @name, how do I unlock the Ancient Magicks?",
+ "@name, remember the old Pest Control boats?",
+ "@name, what's the best way to level up Construction?",
+ "Hey @name, what's the fastest way to level up Prayer?",
+ "@name, the old Duel Arena stakes!",
+ "@name, what's the Warriors' Guild?",
+ "Hey @name, how do I defeat the Kalphite Queen?",
+ "@name, use the fairy ring code BIP!",
+ "@name, should I train Attack or Defense first?",
+ "Hey @name, what's the best way to level up Thieving?",
+ "@name, don't forget your charged glory amulet!",
+ "@name, what's the Legends' Cape?",
+ "Hey @name, how do I access the Heroes' Guild?",
+ "@name, remember the old Pest Control void gear?",
+ "@name, how do I get a firemaking skillcape?",
+ "Buying gf 10k",
+ "Trimming armor for free!",
+ "Wanna join my clan? We're called The Mighty Cabbages'!",
+ "I'll meet you at the Falador Party Room!",
+ "Dancing for coins in Varrock Square!",
+ "Remember when the Wilderness was dangerous?",
+ "I got a rune scimitar drop from Lesser Demons!",
+ "Lumbridge Swamp is haunted!",
+ "Anyone up for Castle Wars?",
+ "I miss the old random events!",
+ "World 2 is the trading hub!",
+ "I'm going to train my Agility at the Gnome Stronghold!",
+ "I just got 99 Cooking!",
+ "Fishing lobsters at Catherby is life!",
+ "The Legends' Guild is so exclusive!",
+ "Who needs a quest guide? I'll figure it out!",
+ "I'm mining rune essence for hours!",
+ "Barrows armor looks sick!",
+ "I'm stuck in the Underground Pass!",
+ "The Stronghold of Security taught me about account security!",
+ "I'm going to farm herbs in Ardougne!",
+ "I'm getting my fire cape!",
+ "I love the music in RuneScape!",
+ "I'm alching my maple longbows!",
+ "I'm doing the Recipe for Disaster subquests!",
+ "I'm going to train my combat stats at the Rock Crabs!",
+ "I'm going for the Quest Cape!",
+ "I'm going to mine pure essence!",
+ "I'm hunting chinchompas in the Feldip Hills!",
+ "I'm going to train my Woodcutting at Seers' Village!",
+ "I'm going to fish sharks at the Fishing Guild!",
+ "I'm going to train my Thieving at Ardougne Knights!",
+ "I'm going to hunt implings in Puro-Puro!",
+ "I'm going to train my Hunter at the Falconry!",
+ "I'm smithing rune platebodies!",
+ "I'm going to train my Farming at the Tree Gnome Stronghold!",
+ "I'm going to hunt red chinchompas in the Wilderness!",
+ "I'm doing the Underground Pass quest!",
+ "I'm going to fish monkfish in Piscatoris!",
+ "Meet me in Varrock, @name, for an epic trade",
+ "@name, join my clan; we'll conquer the Wilderness together!",
+ "Beware the dragons, @name, they're fiercer than you think",
+ "Crafting runes with @name, the best mage in Gielinor",
+ "Fishing lobsters with @name, the sea's no match for us",
+ "@name, your swordsmanship at Duel Arena is unmatched!",
+ "Questing through dark caves, @name always leads the way",
+ "Share your wisdom, @name, how'd you master those spells?",
+ "Legends speak of @name bravery at the God Wars",
+ "Need more arrows, @name? I've got plenty to spare",
+ "Cooking's a breeze when @name around, no burnt lobsters!",
+ "Mining together, @name and I strike gold every time",
+ "@name, let's barter; your herbs for my potions?",
+ "Training agility with @name, leaping like graceful gazelles",
+ "Heard @name got the best magic beans in town",
+ "Fletching bows with @name, aiming for perfection",
+ "Smithing with @name, our anvils never cool down",
+ "Adventuring with @name, every quest is a thrill",
+ "Battling demons, @name courage inspires us all",
+ "Slaying dragons, @name the hero we need",
+ "Gathering at Falador, @name party room is legendary",
+ "Hunting chinchompas, @name traps are always full",
+ "Farming's fun with @name, our crops never fail",
+ "Brewing potions, @name mixtures are magical",
+ "Casting spells with @name, we're invincible",
+ "Building fires, @name flames warm the coldest nights",
+ "Sailing to Pest Control, @name our fearless captain",
+ "Trading runes, @name deals are the fairest",
+ "Exploring dungeons, @name the light in the darkness",
+ "Charging orbs with @name, our energy knows no bounds",
+ "Dancing in Draynor, @name moves are enchanting",
+ "Playing Gnomeball, @name the star player",
+ "Harvesting willows, @name axe swings true",
+ "Enchanting jewelry, @name touch turns copper to gold",
+ "Summoning familiars, @name spirit wolf leads the pack",
+ "Thieving from stalls, @name hands are lightning-fast",
+ "Crafting runes, @name essence never runs dry",
+ "Fishing at Catherby, @name catch feeds us all",
+ "Cooking feasts, @name dishes delight the gods",
+ "Mining runite, @name pickaxe strikes rich veins",
+ "Bartering at Grand Exchange, @name a trading master",
+ "Training prayer, @name piety moves mountains",
+ "Fighting revenants, @name valor shines bright",
+ "Building homes, @name construction is flawless",
+ "Hunting imps, @name net is always full",
+ "Brewing ale, @name tavern is the town's favorite",
+ "Casting high alchemy, @name turns junk into treasure",
+ "Sailing to Karamja, @name adventures are legendary",
+ "Forging alliances, @name charisma unites clans",
+ "Defeating bosses, @name name echoes in legends",
+ "Are you mewing @name???",
+ "Check out that gyatt @name",
+ "Bruhhhhh @name got that rizz",
+ "@name rizzing up the bots",
+ "Ironman? More like copperboy LOL",
+ "What that gyatt do @name",
+ "He's got the zoomies!",
+ "@name likes pickles and dipped in mayo",
+ "Lmaaooooooo",
+ "Bruh she said she loved me...",
+ "I caught @name rizzing a mewing teacher",
+ "What that mouth do bb",
+ "Ayo tf he say",
+ "Ayo",
+ "Ayo @name a freak lowkey",
+ "Ayo tf",
+ "@name catch me outside howbout that",
+ "Wasssssuuuuppppppp",
+ "Knock knock @name",
+ "Oh boy howdy do i have a surprise for you",
+ "Noooooo",
+ "What do you mean I haven't done anything wtf",
+ "Redrocket redrocket!!!",
+ "I made 20,000 crochet sock puppets for ceikry",
+ "Come on @name",
+ "Are we rading tonight @name?",
+ "Why would he say that",
+ "Penguins are technically reptiles",
+ "Brb smell something burning",
+ "Need pest control partner, you handle the portals, i will afk",
+ "Bruhhhh the skibiddi rizz in my gyatt makes my mewing sesh rough",
+ "@name jajajajaja",
+ "Wait, I can't raid tonight @name",
+ "Brb, pizza's here. Hope they ask why I'm a grown man dressed like an elf",
+ "Sorry, gotta go AFK. My dog just ate my gaming headset.",
+ "Brb, my grandma just fell down the stairs",
+ "Hold on, the baby's crying, aka @name",
+ "Oops, spilled my drink",
+ "Guys, I need to log off, my plants are staging a revolt for not watering them",
+ "AFK a sec, my neighbor's llama is in my backyard again",
+ "My pizza rolls are ready",
+ "Lost track of time, i'm late for my own wedding",
+ "Sorry, can't hear you over the sound of my laundry",
+ "Turn HDR off in windows @name",
+ "Www. no one cares .com",
+ "Hey @name www dot stfu dot com",
+ "Like pitching a tent in a pair of britches",
+ "Mad as a bag of ferrets",
+ "I dont think beavers built the hoover dam",
+ "How do beavers get the concrete for dams?",
+ "@name show me the way",
+ "@name onwards brutha",
+ "@name eats fried rat tails",
+ "@name is a rat",
+ "Why are there so many people farming right now",
+ "@name fuck the police",
+ "@name says the like pickles on their hotdogs",
+ "Fuck the guards, free woah in varrock prison",
+ "Ayo fuck u mean",
+ "Woop woop thats da sound of the beast",
+ "How are you the way that you are",
+ "She sells seashells by the sea shore",
+ "@name certified rat",
+ "@name buys skimmed milk",
+ "Got milk?",
+ "Are you JSON because i want you to get array from me",
+ "@name likes string manipulation",
+ "@name sells legos",
+ "JUST DO IT",
+ "Why are there so many motherfucking options",
+ "Just hit the fucking auto hide thing",
+ "Just play",
+ "Hell no this shit is fuzzy as balls",
+ "@name is fuzzy as balls",
+ "Turn your brightness up @name",
+ "On my pc it runs perfectly",
+ "I know why mine seems a little jumpy",
+ "Stream the window not the monitor",
+ "Discords a bitch",
+ "Why are there so many handsome people at the ge like @name",
+ "I'll make you squeel of fortune",
+ "You will get it in due time @name",
+ "I was one turn away",
+ "It do be pipe time @name",
+ "Sometimes i like to cover myself in vaseline and pretend i'm a slug",
+ "Woah is a greased pig",
+ "Sometimes i dig holes in my backyard and pretend i'm a carrot",
+ "It's pipe time @name",
+ "If i am not pipe timing i am programming",
+ "Yes i have thigh high socks, no you cannot have them",
+ "I scream when i wear my programming socks",
+ "Anyone wanna buy @name's bathwater?",
+ "Anyone wanna buy my used socks?",
+ "@name be getting bags",
+ "What the fuck is this",
+ "Hi i noticed you haven't taken a break in hours @name",
+ "I really am seething rn",
+ "I am so fucking tilted",
+ "Go back to your fucking frogs",
+ "Life is simple as frog farmer",
+ "A q p",
+ "Oooooh that's a first",
+ "Been a minute @name",
+ "Hey @name",
+ "Oh shit it's @name",
+ "Hey @name wyd today?",
+ "Ayo @name",
+ "Wyd @name",
+ "Wbu @name?",
+ "Good fuck em, that's what they get",
+ "Deathknight lookin rat ass mf @name",
+ "@name sucks slugs",
+ "Brb gotta take a shit",
+ "@name will brb went to take a shit",
+ "Tell me when he is coming",
+ "This guy is being incredibly based",
+ "@name is based af",
+ "Taking l's all day today @name",
+ "That sucks massive dongus",
+ "Ah i was about to type that",
+ "Where is stormwind?",
+ "How do i buy gold",
+ "@name sells gold",
+ "@name is a gold digger",
+ "Ayo @name wanna buy some frog legs?",
+ "Brb fucking burnt my pizza rolls",
+ "I swear @name if you need roll again",
+ "@name you are a hunter you don't need plate armor",
+ "Dragonriding is satisfying",
+ "There's an old TzHarrian saying, you fuck up once, you lose two teeth",
+ "FUCK",
+ "@name i am ready when you are",
+ "Anyone selling logs?",
+ "That is hilarious @name",
+ "Alright @name",
+ "I need to go get my quest cape",
+ "500 barrows runs dry",
+ "Back to back to back barrows items, easy game",
+ "@name did you know them?",
+ "@name sucks eggs",
+ "@name eats snails",
+ "Who is that?",
+ "I've gotta go in 20 minutes",
+ "Bonk",
+ "Gtg in 30 minutes",
+ "They left 50 minutes ago",
+ "I think it's just gonna be us",
+ "Who is that?",
+ "Stop following me",
+ "@name stop following me",
+ "I think @name is watching me",
+ "@name wouldn't let me get a hit in at clan wars",
+ "Clan wars and chill?",
+ "Quick mewing sesh",
+ "Don't you stickbug me",
+ "Get stick bugged",
+ "Wtf why are you a dragon",
+ "Fun fact, woah eats eggs whole like a snake",
+ "Ceikys there's a rare over there",
+ "Where is goldshire?",
+ "How long have you played @name?",
+ "Wanna quest?",
+ "TROGDORRRRRR",
+ "Fuck this shit i'm out",
+ "Wait till you get your first 99",
+ "How is that even possible",
+ "That's the max",
+ "@name is trying to max",
+ "Complesionist cape?",
+ "How can you increase your run speed?",
+ "@name where is barrows?",
+ "@name where are rune rocks?",
+ "@name where is yanille?",
+ "@name how long have you played for?",
+ "Yes these quotes were hand typed",
+ "Kermit was here",
+ "World of Warcraft died after Wrath",
+ "Ceikry needs to add talent trees",
+ "How do you get to the wilderness?",
+ "Anyone tryna lure @name?",
+ "@name tried to lure me",
+ "@name bots all the time",
+ "Anyone want chicken tendies",
+ "Brb foods ready",
+ "Brb",
+ "Gotta go get food",
+ "Anyone else from northern alaska?",
+ "Fishing 4 gp",
+ "Looking for gf",
+ "Anyone wanna be my discord kitten?",
+ "Selling discord kittens",
+ "@name is a discord kitten",
+ "Add me on discord",
+ "Are you in the 09discord",
+ "Where are you going @name?",
+ "Idk what i am going to cook today",
+ "What should i eat tonight",
+ "He is in the cave",
+ "Don't forget to save game before logging out",
+ "American horror story died after season 1",
+ "Prequels are better than the sequels",
+ "Disney star wars is the best star wars",
+ "Halo 5 sucked",
+ "Selling xbox live gold and 1600 microsoft points for 50k gp",
+ "Buying gf 25gp and a bucket",
+ "@name i heard evilwaffles bots",
+ "@name hopefully ceikry doesn't find out about evilwaffles",
+ "Honk honk",
+ "Where is the road to mordor?",
+ "Golem lookin ass bitch",
+ "@name rat looking mf",
+ "@name uses sand paper to wipe",
+ "@name said Woah is cute",
+ "You need 25 of 40 to do that",
+ "Over 1000 unique lines of dialogue",
+ "What should i get to eat",
+ "Ge be poppin today",
+ "Where all the woahs at",
+ "Ayo woahscam got that gyatt",
+ "That is one i haven't seen before"
],
"halloween": [
"Trick or treat!!!",
@@ -521,9 +1008,9 @@
"Costume party at my P O H!! Follow me!",
"Trick, then!",
"Brrrainssssssss...",
- "'Cause this is thriller, thriller night, and no one's gonna save you from the beast about to strike!",
- "This is Hallowe'en, this is Hallowe'en, pumpkins scream in the dead of night!",
- "This is Hallowe'en, everybody make a scene, Trick or treat till the neighbors gonna die of fright!",
+ "'Cause this is thriller, thriller night!",
+ "This is Hallowe'en, this is Hallowe'en!",
+ "This is Hallowe'en, everybody make a scene!",
"In this town we call home, everyone hail to the pumpkin song!",
"Watch out for Skeleton Jack!",
"The headless-what-man? Horse? Never heard of those.",
diff --git a/Server/data/botdata/botnames.txt b/Server/data/botdata/botnames.txt
index 3024122cc..22c5715a8 100644
--- a/Server/data/botdata/botnames.txt
+++ b/Server/data/botdata/botnames.txt
@@ -1,766 +1,1992 @@
+-Kevo
+0 S O
+0 4 1 1
+0 4 7
+0 HBK 0
+0 Khan 0
+0 LM
+0 Quest Ptz
+0 Undead 532
+0 hits
+0 s m a n
+0-0000000000
+00 zarour 00
+000eggs
+004 n
+007 Double O
+007Banshee
+00eeeee58
+00eeeeeHC
+00oo00oo00z
+010elpibexx0
014ankh
01690
+017Lucas
01Ares
+01eon
+01ogre
020893
024elyograG
+02RS
+02homestar
+031
+0315
0416347345
+054
+055027584
+05miller5
05venom04
+06 59
0600
+06sz
+07 Account
+07 Adept
+07 Ashley
+07 Clinton
+07 Ezra
+07 Gizzy
+07 Main
+07 Nihilist
+07 Officer
+07 Rz
+07 Sicario
+07 T Bone
+07 iron
+07 kiero X
+07 nice jake
+070623
+07Ashley
+07Ben
+07Geno
+07Jack
+07Lax
+07Panda
+07Paul
+07RS Suck
+07Rockysbudy
+07coco
+07guthix07
+07wan
+080
+0800
+0800952449
+0837
+09
+0920
09Ash
09Ashley
09Ato09
09Chris
09Dans
09Paul
+09Reaper
+09Rhys
+09Rvape
09Skillerino
09TroyScape
09milo456
09scaping
09wan
-0800
-0837
-0920
0BAMA
+0Behind0You0
0CdanC0
+0G
0GCore
0Giesel42O
+0IIll0llIIII
+0JL
0Joker0
+0KAT
0LKI
+0MEGA PVM
+0MG ST3PSIS
+0MW2PVM
+0Manbearpig0
+0MrJ
+0PC
+0Pwnseason
+0S Iluvatar
+0SFX
0Tempest0
+0WEK
0X010
+0_BADASS_0
0anabanthis0
0bD0G
0bankspace
0bby
+0bby Man
0belix
+0bscure0ne
+0ctopus
+0dds r u win
+0desza
0dexy
0dyssey
+0ff Task
0ffline
0g_player
+0gden
0ggyy
+0gie
+0h Hi Mark
+0h4Sure
+0hh
0hmMyGod
+0hp
+0im2old4this
0inke
+0k
+0l
+0l m
+0ld Mate
+0leaguespace
+0li
0livers
0livias
+0lki
+0llieNorth
+0llies
+0lmet
+0lofmeister
0lurker0
0mfgcows
+0mg A Baboon
+0mg A Scimmy
0miseGo
0mnisciens
+0n Time
0nMyWay2Max
+0na
+0nenonen
0neski
0netruememe
0niichan
0njon
+0nlyClouds
+0nmy
0ops
0oqs
0pSe
0pen
+0pen Al
+0pi ates
0pportunity
0riole
0rjan
+0rl
+0rnstein
0rphaned
0samaBdabbin
+0sc4r
0smasher0
+0so
0ssimpwner
+0syb
+0t
0taku
+0taylor
+0verHyped
0verdrinking
0verhaul
+0vershield
0viBeSo
0vyy
+0wnag3s
+0wnage_2017
0wnagedaddy
0wned
0wns
+0wnu1h1t
+0x Good x0
+0x05
+0xBitcoin
0xocube
+0xp Fail
0xygen
+1
+1 0 1 0
+1 1 4
+1 2 2
+1 337
+1 3s
+1 4 11
+1 54
+1 9 7
+1 A M O R
+1 A N D 1
+1 Account
+1 Corin 6 9
+1 DC
+1 Flicki Boi
+1 Free Ryde
+1 Ham
+1 K0 Is Back
+1 Line
+1 Lion Tell
+1 P P 1
+1 Percent
+1 Waffle
+1 and only
+1 is ln of e
+1 kc 1 pet
+1 parhaista
+1 s t Blood
+1-800DILLDOE
+1-GrayStone
+10 Four
+100 Duke
1000 Antz
+1000 Eyes
+1000 Ways
10000Fists
1000PingOnly
100Cl
100Grabb
100g
100kyews
+100m gp
100xcoin
+101000101010
+1017Trev
101e
101evil101
+101rootbeer
+104512
+105
107M
1085
1099s
+10Hz
+10R80
+10b
+10cc
+10lachs
+10mm mafia
+10th Reaper
10v10
10v10v
+10v10v10v
+10x Brew
+1101953119
+1111
+11111111111d
111fishkite1
+112OceanAve
+116
+116 123
1183kenny
+118s
11inchlimp
11l1
+12
+12 49
+12 XP
+12 hours
120u
1212ajs2
+123 Zeus
+123456205
+123Four
123bear5
+123tseemijni
1272172
+1288
12bar
12bar_ty
+12blackeagle
12boo8
12earlycob
+12in
+12millionGP
+12oss
12oz
12th
+13 37
+13 Daas
1300
130SS
130rk
1312AFCA
+1313
+131kg
+1337 af
+1337Trevor
1350
138hans
+13D
13LACK0N3
+13O
13alerion
+13ayek
+13ehh
13ert1
13ig
13igdog
+13kc Corp
+13oneZ
13purecs
+13ruce
+13th Witness
+14 wides
1400
+14060M
+144
1441
+144forever
+1453 FSM
149122089147
+14Fre-e
+14GT
14Words
+15 min Break
+150 kilos
1520sedgwick
+15b name
+15mg
+16 Fly Tell
+16 Fps
1602
+16bumpysnow
16lB
16le
+17 76
+170 IQ
17222
+1780
17Kc
17_FLHXS
+17rune2277
+18 Or Older
+18 Points
+18 girlll
+18-06-2022 x
1800BetsOff
1802M
180555
+181
1817
1827
1845
184910381412
+187
+187 781
1877
187PIGMORGUE
187er
+1889
18cast1935
18hr
18killz
+18s
+19 KAPLAN 05
19088ml
1942
1948
+199
1992
1994
19O7
+19edgebee
+19puxx
+1AB
+1After909
1Alfa
1Ali1Plane
1BGP
1Bio
1Buck1Love
+1C2R
+1C3 W4RR10R
1CuteBot
1Fbs
+1G1D
+1GramIronMan
1Hit2Lum
1Hunnid
+1I1I1IIll1l
+1InchWalrus
+1Iron Reborn
1Kyle
+1Lank
1ManGangBang
+1Mayze
+1NANO
+1NU
1Nikolai
+1Nut Dude
+1O1Barz
+1Ogp
+1P Game
+1Parthannax2
+1RlE
+1ST KC
+1Shadow9Fist
1Shark
+1Stunner ISU
+1Swan
1TapDirtNap
1Tick
+1Tick 2 Slow
1TickShit
+1Unforgiven8
+1_BLEED_BLUE
+1ars
1badprogram
+1bankingnoob
1blackhawk17
+1blk eye r2
1cooking
1da5
+1dan2
1day
+1day iwas pk
1eat
1einad
+1eyeNinja
+1god max1
1grootfeest
1hundrednite
+1imp1jar
1isa
+1itemtbow
1jbone
1john
+1k no zik
+1kDuramax
+1kMaster QXD
1k_0
+1kc myself
1kctobpet
1kill3dsanta
1kk3
+1kkc
1kona
1llmatic
+1llusionss
+1mforest
+1nOnlyBigB
1nVaSioN
+1ndy
+1ne life
1nfiniti
1nsane str5
1nv1s
+1nvercargill
+1o 8
+1ocation
+1please
1powerhydra
+1r0nRyan
1rock23
1savage
+1st Frans
+1st ed mint
+1st son
1stHCwasPKED
1stlrfan
1stnoob7
+1t8w
1tapaturma
1tickspecwep
1trueMortyy
+1ucif3ro
+1v1d a sedan
1w1lll0se
1wayEscape
+1wwdwd2e21ed
1yfe
+1zet
+2 0 1 4
+2 1Savage
+2 2 7 7
+2 2 8 9
+2 3 7 5
+2 9
+2 Big tities
+2 Brothers
+2 Much Tuna
+2 P A C
+2 Rich 4 Dis
+2 Silent 540
+2 Smooth
+2 ball cane
+2 funny bro
+2 grls 1 Jad
2 h p
+2 in
+2 kups
+2 lN
+2 more min
+20 20 vision
+20 Agi irl
+20 On Pump 3
+200
+200 Cook
2000
+2001Arwen
2006nope
+2007scape
+2008Anthony
2009Anthony
+200MXP Cook
+200m for Olm
+200mDefence
+200marchalt
200mslay1day
2011Turmoil
+2013 Rt
+20130406655
+20136
+2027Parzival
+202o2
+204 Wootang
+205alphago
+208
209th
20Four
20I0
20JuanSavag3
+20ms
+21 5
+21 Average
+21 Musketeer
+21 Savage
+2137 gp
+215O
+2173
+21JJ
21SavageX2C
+21unit
+22 69
+22 Geese
+22 Gz
+22 darnoc 22
+22 day fury
220mg
+226559
+227 7
2277
+2277 Beast
+2277 Soon TM
+2277MaybeNvr
+2277kg
+22O5
+22X7
22btc
22harry
+22mario
22whitewolf
+23 x 3
232o2oo
+234071973416
+23463564
+235iii6i666i
+2376Total
+2376ed
23847239571
23CD
+23I
+23coalcare
+24 Hour
24000
+241
241196
+2424
+245
+247 365
+2488
24YO
24l7
+24w
+25 S
25simulator
+26 th
260sheepdog
+265344626546
+26ll98
26pandas
26th
+27 5
+27 M
+271MPN
27ml
2841280
28BagsOfSalt
28goldpieces
290x
+29384652
2996
+29Pons30
29enchant821
29robdead
+2B Nier
+2Broke4Coke
+2C-T-2
+2D E F2
+2D pantsut
2Edgy4Meme
2Far
2Fast2Fuego
2GIRLS
+2GLE
2Girls
+2Goblins1Jug
2Guys1Wyvern
2Guys1dds
2I40
+2InchLift
2InchPnisher
+2JZ GTE
+2JZ Soup
+2JZ-GTE Mk4
+2Jerry
2Lit
2M0X1
2MIN
2Men
2MinNoodles
+2O xp
+2O07
2OO7
+2QC
+2Rare2Die
2Secs
2Sparks
2TH3MAX
+2Tbows51Kc
2Tits
+2TonHoneyBun
+2VX
+2amtossedher
2anmlsglued
2beFrank
+2buttedgoat
2cbrein
2coldkillaa
2cool4u
+2cythe
+2d irl
2danny1
2dslap
+2fastkilzz
2g0ds1cup
2girls1Kyle
+2girls1Tbow
2girls1bed
2girls1troll
2girlz1jbird
2gurls1tick
+2h ur azzzzz
2hopp
+2hot2touch
+2hot2touch2
+2hs
+2id
2kav
+2late2team
+2logx
+2nd Marksman
+2nd Max Cape
+2nd Sucks
2ndpanz
2olon
2oul
2pac
2pacs
+2plush
+2sm0keyyyyyy
+2steps
2th7
2tickin
2tti
2two77
+2uBz
2ual
2ugi
2woke
2x92is99
+2ze
2zick1zussy
+3 Hit V
+3 5 P
+3 50
+3 77
+3 Moons
+3 S I X E S
+3 SwordStyle
+3 T C
+3 arcanes ty
+3 me0
3-age
+30 yo b00mer
+300m MPS
+3019
30FF
30SHOTFOCUS
+30XY
+30thNovember
30zl
+311s
+3155
+315lbs
315squatreps
+3160
316Austin
+32 kay
320m
+33 Dust Cat
335K
+33jf
33zero2
+3400
341all
+34241245321
345138
+34HL6432G6L2
+34T
34rj394thgro
351329
+35ankoumoon
+35cm bicep
+360 Labels
+360backhand
+365 day
+369x
+36ACT
36answersay
+379
37Kg
+37kg
+381N
38CoolestMan
38drivelift
+39 PETS
3BigDoobie
+3D AnimeTits
+3D Dorito
+3E8
+3G
3III
3L1QZaD
+3LetterName
3Miller3
3TicYaMum
+3TickEat
3Ticks
+3WordName
+3a B0ng
3aly
3amf
+3arbeed
+3ash
3awe
+3b
3bay
3bobyshmurda
+3d age boots
+3d354
3dderino
3erzerk
+3h scimitar
3ibal0e9
3inchsoft
+3ioc
3iron5u
+3km
+3lPatron
+3lack 3litz
3lilbirbs
3lit3
3liteSupreme
3lven
+3lyrie
3lys
+3niZ
3nosedmonkey
3nps
3oh5
3pic
3ragesave
+3rd Age Ryan
+3rd Age THC
+3rd Age Toes
+3rd Age Wife
+3rd Hunter
+3rd Mage Owl
+3rd X
+3rdAgeHolds
+3rdAgeHunt
3rdAgeSlayer
+3rdMistake
+3sd
+3sl
3stripe
+3uck
+3uzi
+3verD3ad
3vil
+3vil Giraffe
+3vil Lawyer
+3we
3x3i
3xDestroyer
+3xtra-1arge
3yes
+3zR
+3zi
+4 Bros Info
+4 Man Nex
+4 inch demon
+4 inches now
+40 IQ
+400L
+400s
+403 b
+40699 Crabs
40Atk
40ms
40oz
+412087542131
+413 JokeR
+416MiIf Jade
+41O
+42 Mime 2462
+42 Reasons
+42 skankhunt
+420 Perkele
+420 Sam
+420 kc
+420 lobster
+420-2-Day
420Arch420
420Every
+420Hellz
420LavarBall
+420Pixels
+420cyguy
+420licious
420michael13
420tarmslyng
+42342343342
+42Def
42O42O
42nd
+432andone
43technetium
+44 bot
+4400
+44444444444
+45 fail
+4500c
+4564
+457
45smith2345
478k
+47an
47th
+48H
+48hour
+49 r
+492117837813
+49forcerage
+4ALLYaYa03
4D Entity
4EverAlone
+4HeadScape
4Hymnz
+4IQ Idiot
+4K MrKrabs
+4KT Youngboy
4Kath
+4L O K O
+4LDO
4LeafCIover
+4Lt Goon Bag
4MoistScoops
+4Nick8
+4STER
4Sale399
+4TheGalaxy
4The_Horde
4Tune
+4V2Coldplay
+4_Th3_mAiN
+4are
4asphalt4
4biddin3
4cof
4dan2
+4dapigs
4dosemonster
4ever
4everdry
+4got2pull0ut
4gottenvoid
+4hQ
+4hit pl0x
4holyhydra
+4iend
4lex4nder
+4litraa
4mag1996
4otobemaG
+4pf PvM Lao
+4pf danaw1te
4plate
+4rKsTon3
+4sen
+4th lesson
+4th8
4the
4themininoob
4thunderbolt
+4ur Elise
+4werty4
+5 56
+5 Nine
+5 Oh
+5 mil
+5 ms
+5-Bet Fold
+50 DKP Minus
+500 BJ
+5000men4
+505
+50Dkp_Minus
+50TintenUwMa
50bitsnka
+510
51Highlander
51xp
+528racklover
+5304
+530pm
+53R10U5
53m0g
+54 Slayer
+548
55mg
+562
5639
56667
56771910
+56O
570215
+5771
+57tallfred
+57wraith2076
+5876
58th
59OG
+5ADx
5Aces
+5BY5
+5G fries
5GCovidTower
5H4NKS
+5IRLOIN
+5Id3Track
+5M3H
5M9SNH31KAOI
+5NAX
+5OP
5Orudis5
5UBLlME
+5a9
5alood
+5alve
5ammito
+5dudes1bank
+5eekingdeath
+5eizures
+5g Internet
5gum
5harp5hoota
5hauny
5hayWh1te
+5head
+5inch Floppy
+5is
+5j5
+5kc Zulrah
+5l9
5lNS
+5lap
+5nis
5parrow
5quid
+5st
+5t h
+5th Blessing
+5th hcim LUL
5trm
+5wan
5wattia
+5x3
5xr2
+6 57
+6 9buttholes
+6 Donuts
+6 Drive Fox
+6 Foot 5
+6 I X GOD
+6 M
+6 Mil
+6 Qp
+600 Years
+605
+60min is 1hr
+617
+61V
+6264
+629fm
62steeplist
+6384
+647
+64DD
+64th
6535
6620
+666 317
+666 J
+666 is leet
+666Ds
666Duuvel666
+666drkwizard
+66Cute
+66sick
+675
+67M
67jj6j7
+68 savage
+6822ii
+68pickleman
+69 L OR D 69
+6942O
+69KolaOlli73
+69Skrrt420
+69bbygurl
+69maryj420
6Dukke
+6ESkarmory
6LACKY
6PaperJoint
+6R6
6T9sofine
6TMG
+6Tilbud
6UGG
6cansOfBeer
+6cythe
6dr3w9
+6e
+6enny
+6ess
+6et Schwifty
+6h Logout
+6in9
+6ix
6ixty
6ixx
6jadkiller
+6km
+6lb brownie
6mat
6ong
6p8o6
6pathsofpein
+6qp
+6shooter
+6uapo
+6uh
6utt9lug
6y6y6y2
+7 7 MAFIA
+7 Curry
+7 DeadlySins
+7 Fat Drake
+7 Of Nine
7 Trouts
+7 pets chimp
+7 seconds
7042
+70Point1 lol
70rangeboy
70to120
+710 710 710
+716
718m
71rc
+72005sc
+73 and Kree
734590325839
+737
73Head
73HoundKey
+73gp
742617OOOO27
74ChaosLTUU
+75 IQ
76frozen44
+76ms
+7738
777slayer777
77Dunamis77
77Stingray
+77ms
+782
+784162
79giantfoot
7AYL0R
+7D9
7Esconar7
7Ethereal
+7F9
+7GB
7God
+7H3
7J4FXEL7YFW5
7Lazy7
+7RAC
+7T
+7TF
+7Vick
7Viggie
+7ZP
7abibi
7amowdahli
+7aq
7asty
7ate9
+7axy
7bazillion
7ckng
+7ckng Mad
7claudia7
+7crypto7
7emo
7emp
7emptest
7fisherdog
+7havage
7min
7mins
+7mni
+7om
7ourney
+7out
7rad3
+7raphouse
+7rev
7ridley
7scaryfire
+7th Chamber
7th February
+7uP joAo
7wizard10
7xshadowx7
+8 1 O
+8 3B
+8 Sue Build
+8 alien 8
+8 bit bling
+8 oh 8
8008tator
808Southside
80leavefox
+82 Sue Say
8282
+831pride
832arba
+8485
+849
+84Bandit
+85 N
8502
+852K
+858
+85U
85dakota85
+88 Odd Wand
+8800
8885
+88gg
89devoid1329
+8ASS
+8BootRaw6220
8ElMandinga8
+8J8
8O8O8O8O8O8O
8ass
8balknowsall
+8balled
+8eauty
+8h of sleep
8ind
8l0wm3
8lackMamba24
+8loodrune
+8lue Phat
+8owser
+8qxkf02v
+8tail
+8uD
+8yrs
+9 9 Problems
+9 B 0
+9 DUIS
+9 Tick Brain
+9 mb
+900mexp
+901Grizzlies
+90804
+9092514
90tegguy
+91
+91 Tin Idea
+911_Nate
91414
91CAL
91flip
+92 way there
+920 Bdops
+9227
+9297
+92t
92times2is99
+94 xp
+94AR BTW
95EliasAw
+95LH
+95p7
+96 WINDSTAR
9687
96fastfrog
97DEF
+97ccman97
97fsh
+98 BEDARD
+98 Civic
+982
+98Bn
98max1
+99 Doobies
+99 Grill
+99 Grinding
+99 Mage
+99 Rats
+99 StaKe LvL
+99 Steeze
+99 oz
+99 rwt
+991atatime
+9991499
99BnkStnding
99Juuling
+99Lives
99S2HP
+99Scents
+99Scotting
99Slayer
+99Souls3Days
99Victim
+99_Maxed
99bottin
+99charming
99hh
+99moretimes
+99ox
99problems4
+99ss
+99sweatlvl
99wc500m
+9Bar
+9Barr
+9CX
9D9Skillzz
9Dimensional
+9GAG Reflex
+9JR
9KL00AZIIZ9K
+9O 9
+9PetsSoFar
+9T3
+9TY9_Sailing
+9UNIT
+9cansRavioli
+9ieman
9inchStepBro
+9mm ko
+9mmlesah
+9ne
+9ond
+9till5slave
9ussy
9yearoldpops
+A 2 The Aron
+A 3
+A 45
+A 7 F O L D
+A Articuno
+A Bad IGN
+A Bad Meme
+A Big Hippo
+A Big Leap
+A Blind Man
+A Booty Clap
+A Born King
+A Boss
+A Bozo
+A Bozz
+A Bronze man
+A Butcher
+A Catowl
+A Cityzen
+A Claptrap
+A Classy Boy
+A Crazy Cook
+A Crisp Sock
+A Curry
+A Cute Snail
+A Dreamer
+A Drunk Beer
+A Du Ma
+A F K Scape
+A F KING
+A F M Scape
+A Fat Deer
+A Fat Pike
+A Fat Swede
+A Gauss
+A Girthy Boi
+A Godsword
+A H Fire
+A Half Fool
+A Hofasho
+A I D E N
+A I I e n
+A II D
+A Iron Yoshi
+A J
+A JJug
+A Jack O Lit
+A Jug
+A Kimura
+A L 3 X
+A L C A P WN
+A L E K S
+A L I S H A
+A L T
A Lava Lamp
+A LifeTime
+A Lilypad
+A Little Lit
+A Llama
+A Long Story
+A Loose Seal
+A Mattias
+A Maxed Iron
+A MaxedBeard
A MeatStick
+A Melic Poet
+A Message
+A Moist One
+A Moot
+A Nathan
+A New Area
+A Newbi
+A P R O X
+A Panther
+A Pauled
+A Pixxel
+A Pkr
+A Plush
+A Poothy
+A Pot Head
+A Psy
+A Quest God
+A Quickie
+A R H
+A R Z
+A Raccoon
+A Random 4nr
+A Real Bamf
+A Revuelto
+A Rocky Road
+A Scylla
+A Sly Deity
+A Snorelax
+A Sofa
+A Soft Spoon
+A Solo Slave
+A Soul Rune
+A SpaceFox
+A Spaceman
+A TRX
+A Tonk
+A Towel
+A Tuxedo Guy
+A U G
+A V T U R
A WILDR0NNY
+A White Girl
+A Wiki
+A Wild Nolan
+A Wise Sloth
+A X Y S
+A Yang
+A Yep
+A Zee
+A Zeer
+A Zoo Keeper
+A Zuk
+A Zuzakini
+A aron
+A bit north
+A broke 126
+A capybara
+A cclimation
+A d e b y
+A dam
+A damm
+A dammmm
+A e d o
+A e s i r
+A f r a i d
+A gg
+A lba
+A ll F
+A llan
+A llstar
+A ltar
+A m a nd a
+A n d re
+A nz
+A rdy
+A rmin
+A rmoa
+A rrow
+A stoner guy
+A to teh Jay
+A ug
+A y s a
+A z k e n
+A z t e r
+A-Chronic
+A-F-Kaveman
+A123
A13X
+A15
A1KMAN
A1nz00alGown
A1rhook
+A2
A22Y
+A47 Soldier
+A543
A7MED
+A84
+AAA GG
AAAAAFK
+AAAAAddy
AAIGHT
+AAsamba
+AB Dash
+AB84
ABEC
+ABG Huntr
ABILITEETTI
+ABearCat
ABlazys97
ABlueShirt
+AC Dicing
+AC TEMP IQ
+AC0T
+ACDC
+ACatGirl uwu
+AColdBeer
AComp
ACucumber
ADACardano
+ADAMB73
+ADHDerral
+ADRlAN
+AD_inc
ADankTank
+ADirtyDan
ADrugTaker
+AE2AW
AEKDB
AER0B
+AER1410
AFCA
+AFCA CBS
+AFCA SCHOREM
+AFGard
AFJay
+AFK Always
+AFK Kay
+AFK Liam
+AFK SCO
+AFK Spoon
+AFK twigz
+AFKJOHN
+AFKaas
+AFKarl
+AFKevv
AFKolby
+AFKspiracy
AFTW
+AFX64
AFrickinLion
+AGIT8
AGP3
AGRONOMlST
+AGSpec
+AGWA
AGlassOfH2O
AGorski
AH Energy
+AH64 Apache
AHHSCHMEEEEE
+AHK XD
AHMETJACKSON
AHarmlesKitn
AHlager
AHriMTaLeZ
+AI Fighter
+AI0
+AII 99
+AIchemyz
+AIecko
+AIeksib
AIexmeister
AIixs
+AIlByMyself
+AIm23ARDesti
+AIways sm1le
+AJ R
+AJ Skills
+AJ4J
AJTracey
AJ_24
+AJisHere93
AJsk
+AK Alpha
+AK Sam
AK47
+AK4LF
AK5C
AKI-47
AKK1E
+AKM
+AKSpring
AKinkyMonkey
+AL-Trojans
+AL3CX
+AL7
+ALBlNO
ALEXppresso
ALLCAPS
+ALLEGATlONS
ALLTY4
ALSO
+ALT Lurer
ALargeMudkip
ALevel115
+ALevel126
+ALittleLofty
ALittleLogan
ALonelyKurt
ALonelySpoon
ALonelyTaco
ALv3Magikarp
AMAWM
+AMC Millions
+AMD352
+AMDOSRSIRON2
AMGS65
AMRSY
AMST
+AN07HER
AN0NYM0OOOUS
AN1MAL1ST1SK
ANDERDAPLUG
+ANDR3
+ANDREVVTATE
+ANDROlD 18
+ANGL0 SAX0N
+ANGRY BL0KE
+ANGRY N3RD
ANIKV
ANNA7AR
ANNOYYEED
ANON
+ANRH
ANUBlS
+AOMA Doomfox
+AOT GOAT
+APC L000000L
+APTZ27
+APrince
AQ COCUGU
AQMD
+AQUAMARROCKZ
+AR Brah
+AR Fifteen
AR15ONA
AR1F
+AR53
+ARCANO RS
ARCHER
ARCHIT3CTS
ARESCREED23
ARNGCantrell
ARRIVISTEZ
ARRRot
+ARTHURSHLBY
ARTIZN
+ARZ Ranger
ARandyCat
ASAP
+ASAP Decky
ASDQ
ASH88
+ASIAN CHAD
+ASIANBABIE
ASMR
AScrubIsHere
+ASkillersAlt
ASpacejunky
ASuperDood
ASuperior
+AT-AT
ATAR96
+ATEIROMU
ATLx
+ATR
ATastyPastry
+ATurboVirgin
AU6URY
+AUD1O
AURl
AUSLANDER
AUSTlN
+AUTOart
AUTUMNELEGY
+AUT_Alex
+AUT_KoDeD
+AV1
AVATARRR
+AVE MARlA
AVICll
AVOCAD0O00OO
AVlCII
+AWW CRIKEY
+AX0L0TL
+AXL gun ROSE
+AYRI DMM
AZER
AZNPanda
+A_G_4
A_Wuh
AaaBiiCee
Aaalmost
Aadalyn
+AadreNaline
+Aahatto
+AakieSnaakie
+Aaking
AangTurambar
AardbeiSoep
+Aardwormpie
Aaren
Aargh
Aarhus
+Aarmir
Aaro236
Aaron
+Aaron 23
+Aaron Btw
+Aaron Quiz
+Aaron Samuel
Aaron11700
AaronJMLP
AaronPVM
Aarsworm
+Aarti
Aary
Aaryn
+AashUnce
+Aastradsen
+AatroxLife
+Aauburn
+AavikonGaara
Aayraz
+AbInito
+Abaay
Abacraumbii
+Abaiz
Abaker
Abaqus
+Abariel
+Abbas Elect
Abbey
+Abbey Ruins
+Abbo baker
+Abbyscimmy
+Abc easy as
+Abdallah6
Abdirahman
+Abe lnnkon
+Abe numse
AbeTheHobo
+Abengers
Abernasty
AbiChillii
Abide
+Abido
+Abigayyl
Abismaalinen
Abito
Abiuro
Ablazin
Abnegation
+Abnxy
Abocrate
Abolish
+Abolish NFA
Abool
+Aboriginal
+Aborts
Abortuary
+Aboss
Abou3Fiddy
Abov
Above
AboveAvgGoat
AboveHonor
+Abpor
Abr19
+Abradolf
+Abrafebre
+Abrakadaddy
Abrakadino19
Abree107
Abridgetolum
Abrils
Abritrage
Abruaa
+Abruzi
AbsentPray
Absol
Absol-EX
+Absolut1on
+Absolute POS
+Absolute St8
Absolutism
+Absolver
Absorpt
Absoullutely
+Abstand
Abstergo
+AbstractNay
+Abstractable
AbsurdGreek
+Absurdly Gay
Absynthial
+Abu Chungus
+Abu Salih
+Abuk
+Abulssoni
Abuv
Abyission
AbysmalGrind
+Abyss Laps
+Abyss Whip
AbyssFreaks
AbyssWalkerr
AbyssaI
Abyssal
+Abyssal Roar
+Abyssal Sire
+Abyssal Wook
AbyssalEmu
AbyssalTrout
AbyssalWrath
+Abysse
+Abyzz
Acady
Acai
+Acai Berries
+Acamarine
+Acan D
Acardi
AccessPoint
+Acciainoli
Accio
+Accio Bond
AccioHorcrux
+Accolades
+Accountant 0
Accursio
+Ace Kills
+Ace12209
+Ace123445678
Ace2cool
AceAlexander
AceArcaneon
AceOfSevens
+AceTenSuited
AceTookUOut
Acefalcon3
Acekicker
+Acemachine
Acemanjam
Acenr
Acer
Aces
+Aces x3
+Acesuke
+Acesupersoak
+Acetazolamid
+Acha9
Achaeos
Ache
+Achenar
Achernar
Achievement
Achievements
+Achilles Low
+Achilles XXI
AchillesFist
Acholight
Achuu11
Acid
+Acid Cat420
+Acid Christ
+Acid Dab
+Acid Frick
+Acid II
+Acid Lunatic
+Acid Magick
+Acid Reducer
+AcidBxbies
+AcidHouse
Acide
Acidic
Acidylia
Acir
+Ack Varmland
Acke
+AckeSSBM
Ackman67
Acko
Aclu
+Aclyss
Acolytes
+Acorn Potat
AcornHunter1
+Acoustics
+Acquila
Acquilar
+Act Ov Vodka
Actaeor
+Actan
Action
+Action Dwarf
+Action Movie
Active
+Active Whale
Active-Bombi
ActiveRecord
+ActivelySent
Activeshot
Activis
+Actor
Actt
Actual
+Actual Bald
+Actual Yak
ActualName
Actually
Actw
Acuila
+Acumen OSRS
AcuraIntegra
AcuteSloth
+Ad Pulvurum
Ad0pted
Adachigahara
Adada62
+Adalman
Adam
+Adam pd1
Adam8
AdamBonar
+AdamInAtl
+AdamPwnz
+AdamTehMong
Adamant
Adamanta
+Adamantoise
Adamchrisp
Adammmmmmm
+Adamp1
Adampewpew
+AdamsMain
+Adamskieh
Adamy
Adaptations
+Add Jisuke
Addderall
+AdderLord
Adderall
Addi
+Addicted Tom
+Addicted2Rs
+AddictedIM
+AddictedSoul
+Addlero
Addycusfinch
Addytt1
+Adee3
Adeeb
Adelaw
+Adele
Adelier
+Adeliya
+Ademon66
+Adenocard
Adept
+Adept Brick
+Adeptus W40k
Adeq
Adeus
AdeyP
Adgoar
+Adhd Adam
Adhurim
+Adi Laser
Adic
Adiieu
Adil
Adin
+Adios Punani
+Adiosk8r
AdjacentAce
+Adjudicatior
Adjusted
Adjustmyfan
+Adkille
+Adley
Admetis
Admirable
Admiral
+Admiral Addy
+Admiral Kev
+Admiral Nano
Ado12322
Adogg0323
Adolari
@@ -769,46 +1995,85 @@ AdonisUkko
Adorak
Adorations
Adore
+Adornare
+Adr Iron
Adrean
Adrian
AdrianMMO
Adriatik
Adriatik7
+Adrik
Adriyxs
+Adroid
+Adskip
Adss
Adstar
+Adster98
Aduadu
Adust
+Adusy
+Advance2Max
+Advanced Rat
+AdvancedOwen
+Adventure On
AdversY
+Advvil
+Adwan
+Adyn1
Adz92
Adzyy
+Adzz
+Ae rith
Aeariyion
+Aeckersss
+Aecyra
Aedon
Aedreius
Aeganor
Aegislash
Aegon
Aeikora
+Aejayem
Aelin
+AelitenRS
Aelos
+Aemil
+Aent
Aeon
AeonsOG
+Aequites
+Aerack
+Aerdont
+Aergius
+Aeric Shun
+Aerith 68
+Aerivas
Aerj
Aero
+Aeroaxe
+Aerocity
Aerohead50
Aerolustly
+Aeromi
+Aerosol
AeroxAces
Aerros
+Aeryen
Aerzo
Aestana
Aesthetiix
Aeterni
+Aetharan
+Aetharyn
AetherEra
Aethyrs
Aeugh
+Aev
Aeyriex
Aezolix
+Aff it
Affaires
+Affan Khan
Affect
Affectie
Affidra
@@ -817,95 +2082,191 @@ Affirmed
AfghanisDan
Afghanistan
Aficionado
+Afk Blake
+Afk Jasper
+Afk N Scape
+Afk Ray
+Afk Scape
+Afk To Smoke
+Afk em
+Afk is EZ
AfkBandos
AfkGod
+AfkMachine
+AfkTbh
Afked
AfkforGainz
Afkillz
Afkin
+Afkoelen
Afkstar
Afkwarrio6
Aflamed
+Afnacho1
+Afonso
Afperser
Afrecan
AfricaSavior
Africagamer1
AfricanMelon
Afrie
+Afrikka
+Afriquee
Afro
+Afro Deagle
+AfroFishh
+AfroShay
Afrojofe
+Afroman
+Afromann
Afromouse87
Afrothunder
Aft3rmath
+After Dark
+After3Scoops
+AfterLike
Afterlife
Aftermatter
+Aftermax
Aftex
Aftyr
Afx31
Ag0b
Ag3nte
+AgagaWeeWee
+Aganis
+Agaperik
Agatsuma
+Age Forever
+Age of Hell
Aged
Agenda21
Agent
+Agent 3
+Agent Jass
+Agent Slidt
Agent805
Agent94
AgentFluff2
AgentOrnox
Agentbunny1
+AgenteGanso
Agentlobster
+Aggressox
+Aghiestic67
AgiNagii
Agil
+Agil Tank
Agile
+Agile AI
+Agile Rob
+Agile Tom
AgileAllMile
AgileFlea53
AgileLlama
AgileRj
+Agilities
Agility
Agitare
+Agmaur
Agnar472
Agni
Agnoscere
Agnykai
+Agoge
Agressie
+Agroni
Agronox
Agronyss
+Ags G Maul
+Agsungg
+Agua Diablo
Aguanator
+Agv
+AhaShakes
Ahab
Ahav
Ahegao
AhegaoShawty
+AhegaoxDrool
+Ahero Knitly
AhiPoke
+Ahjin
Ahkscape
Ahkward
+Ahlaundoh
Ahmishcyborg
Ahol
Ahoyhoy
+Ahreams
+Ahri babe
+Ahriah
+Ahrim Job420
+Ahrou
Ahvexx
+Ai Haibara
+Ai activated
+Ai u
+AiMienOortje
+AiNebesvaik
AiXiao
Aiai8
Aian
+AiasIM
+Aiayu
Aid12100
Aidann
+Aidens Iron
Aidios
+Aife
Aigua
+Aiii Guey
Aiikis0
+Aila
Aillwynd
Aimbot77
Aimdur
AimenForFun
AimenForYou
+Ain Zak
+Aina Vapaa
Aintos
Ainu
+Air Aaron
+Air Bison
+Air Cube
+Air Hawkz
+Air Nimbus
+Air Up There
+AirAction
+AirRin
+AirWindSurge
Airborne
+Aircendition
Airexz
Airforcin
Airomatren
+Aironmaen
+Airorider1
+Airplanez
+AirsickMold
+Airskipper
+Airstone
Airstrike
+Airstrikes
Airwalk
Airwipp
+Aishi owo
Aisyah
+Aivery
+Aiwe
+Aixaa
+Aixleft
+Aiyaaaa
Aiyzer
+Aizor
+Aizzz
+Aj Blitz
Ajamian
Ajarn
Ajaxius
@@ -914,99 +2275,193 @@ Ajeh
Ajeti
Ajikk
Ajinz
+Ajt141
+Ajushox
Ajuus
+Ajx
+Ak 4854
Ak5u
+Aka God
AkaSpecs
+Akadian
+Akagi
+Akali
Akalron
+Akarema
+AkaseAkari
Akasha
Akashy
Akatsuki
Akaza
+Akduman
+Akeno
+Akhasa
+Akhavan
Akhotha
Akiha
+Akihiko Main
Akilled
Akimbo Gmaul
+Akira28
Akirakiyomi
+Akka Flakka
Akkaido
+Akkezander27
+Akkhai
Akmore720
+Akn Magic
Akogare
Akolyta
Akomatic
+Akomatk
Akowii
AkraLaDragon
Akropolis
Akshan
Aksu
Aksu596
+AksuRS
Aktii
+Aktivaros
+Aku Megami
AkumaPenguin
Akunte
+Akushizu
Akusti
+Akustic
+Akvarij
Akyba
Akyle
+Al Go Rhythm
+Al e x x
+Al ex G
+Al-Kimiya
AlCaponee
AlFromOhio
+AlIigator
AlMusallam95
Alabandus
+Alabarce
Aladfar
Alak4zam
+Alakazoom
+Alakazzaror
Alameda
Alamittainen
Alan
Alan200414
+Alandar
Alanowsky
Alantiwa
+Alasse
+Alaurise
+AlbaisBack
+Albananaa
Albanoi
+Albatrossse
+Albatrox
+Albert 1888
+Albert Klett
AlbertaDean
+AlbertasRec
Alberthorn
+Alberto
+Alberto P
Albertttt
AlbiBambi
Albin0z
+Albinos10
+AlboBloodZ
Alboy
+AlbusTheDood
Albuun
+Alc1
+Alcadeias
Alcado
Alcarnia
Alcatres
Alcatrez
+Alceini
Alcerathe
+Alch O Holic
AlchKids4Gp
Alchaline
AlchedMyLife
AlchedMyM0M
AlchedMyNuts
AlchedYaNan
+Alcheimers
+Alchemical A
+Alchemicc
+Alchemisten
+Alchemize
AlchemstDefi
+Alchemyst
+Alchhorn
+Alchulon
+Alckx
+AlcoSkillz
+Alcond
Alcool
Alcoz
Aldastro
Aldecaldos
AldenolcyCB
+Aldi Knight
+Aldit0r3
Aldol
+Alduiin
+Aldwin Mose
+Alec
+Alec-kun
+Aleck_l2
Aleffy
Alegrete
+AleizzleX
+Alekja
Aleks
Aleksi
Aleksib
+Aleliumbis
Alem
Alemao
Alenac
Aleous
Alerio
Alessan
+AletosCR
Alex
+Alex Blaze
+Alex Cartman
+Alex Grey
+Alex IV
+Alex Meret
+Alex Power3
+Alex V2
+Alex Welshy
+Alex Zander
+Alex from IT
+Alex the dad
Alex12161
Alex3
+AlexDirty
AlexHill
AlexODaGreat
+AlexSpkt
+AlexV
Alexa
Alexander0k
+Alexandre M
Alexbrave2
Alexbrock
+Alexis2Pro
Alexmeister
Alexnchill
+Alexownsmatt
Alexr0
Alexx
Alexx2G
+Alexxandraa
AlexxisTexas
Alexzilla
Alf11
@@ -1015,51 +2470,95 @@ AlfaQ
Alfahane
Alfahanne
Alfication
+Alfie 96
Alfonga
+Alfonso
AlfonsoKhan
+AlfredTB
+Alfrid
+Alfuh
+Algiebeer
Alharbi
Alhyrr
+Ali Shuffle
+AliThePvmer
+Alibaba
Alicander
Alicc
Alice
+Alice x
+AliceOMalice
+Alicent
Alicezero1
+Alicola
Alien
AlienAntFarm
AlienTTmilk
+AlienVoucher
Alienmage
+Aliens
+Aliii33
Alijr
AliksOh
Alioman
+AlistarTb21
+Aliste
+Alive Bozo
+Alive Seb
+Alive Vein
+Alive18
AlivenHappy
Alixz
+Aljase
Alkan
Alkene
+Alki Holic
Alkkor
Alkoholismi
Alkymo
+Alkyne
+All Blue
+All Darn Day
All Fore One
+All Frosty
+All Peachy
+All There
+All a Bone
AllRubyMoi
+AllThePain
AllTimeNo
AllYourBase
+AllaBarri
Allabaster
Allan
+Allan man
+Allards
Allcreation
Allday
Alldays
+Alldogg
AllegedTheif
+AllegedTree
Allen
Allerb
+AllesPaletti
Alleviate
+AllexWx
+Allext
Alligaattori
Alligamanor
Alligood
Allisun
Allkune
+Allky
AlllySpawn
+Allmethyst
Allo
Allomantic
Allon
+Allonsmoke
Allowe
+Allowed to
Allscreen4
Allsen
AllstarTb21
@@ -1070,54 +2569,105 @@ Ally
Alma
Almahh
Almighty
+Almighty2277
AlmightyMilo
+AlmondJoy
AlmostHadMee
+AlmostSavvy
Almost_124
Almosttheir
Alno
Aloha
Alohas
+Aloise
Aloittelija
Alondraj
Alone
+Alone CRNA
+Alone RS
AloneHeWalks
+AlonelyPlace
Along
+Alonzo520
+Alonzo52O
+Aloqab
Alosthawaiin
Alov
Alow
+Aloxc
+Aloysius
Alozaps
Alpaca
+Alpaca B0ng
+Alpaca Lips
AlpacaMyBags
+AlpacaMyBowl
+Alpacaliptic
+Alpedocles
Alpha
+Alpha Cygni
AlphaCoderXI
AlphaFeeb
AlphaMathic
+AlphaSeraph
+Alpha_Scott
Alpharma
Alphonse
Alphray
AlphusBrah
+Alpine Climb
Alpinetree
+Alpoopi
+Alppiruusu
Alprazoland
Already
Alright
+Alright Mom
+AlrightBucko
Alrite
Alry
Alsatian
+Alsatians
Also
+Also Jack
+Also Luci
+Also Lucky
+Also Nexxtar
+Also Noexi
+Also Schlak
+Also kawkky
+AlsoAlso
+AlsoRabbit
Alst
+Alston
+Alt Ctrl
+Alt G boys
+Alt Juana
+Alt Redshok
+Alt prepot
+Alt3rbridg3
AltOclock
AltSkillsDoe
Altairre
Altamonte
Altchilly100
+Altcliffe
+Altdunk
+Altemeier
Altenan
Alter
Alteraga
Alternate
+AlternateArt
Alternatee
+Alterones
+Althamen
Althornson
Altifueled
+AltimateRalf
Alting
+Altkandos
+Altnik
Altonorin
Altruistic
Altus
@@ -1126,154 +2676,305 @@ Alucks
Aluspalvelu
Alvaaro
Alvarreth
+Alveoli
Alvislt
+Alvx
Always
+Always Alex
+Always Awake
+Always Harm
+Always Late0
+AlwaysByrnes
+AlwaysDNS
AlwaysLost
AlwaysPoor
AlwaysQuest
+AlwaysSunny
+Alwayscuffed
AlwayzJarvin
AlwayzSol
Alwex123321
+Alwin S
Alxs
+Alyks
+Alysanne
+Alyv
Alzad
+Alzuraak
Alzz
+Am eer
+Am ity
+Am ln Danger
AmCatWhatDo
+Ama zon
+AmaAvenger
Amadeux
Amaiya
Amak
Amalie
Amanda
+Amanda Btw
Amandelbrod
Amarantine
+Amarok Moon
+Amasclit
+Amateur
Amathyn
Amatsukaze
Amatus
Amazarashi
+Amazaro
Amazing
+Amazon Power
+Amazonia
Amb3rLeaf
AmberTheCat
Ambik
Ambion
+Ambipom
Ambisagrus
+Ambition IRL
+Ambition98
+Ambitioned
Ambrose34
Amcaroz
AmcyC37
+Amd27
+Ame Hara
AmeJoyRock
+Amean
+Ameero7
Amel
+Amelia Beth
Amen
+Amend
Amenity
+Ameno l
+Americlaps
+AmiableDingo
+Amibis
Amida
Amigeau
Amigo
+Amigos
+Amillie
+Amin
+Amir Psycho
Amis
Amitwin
+Amityz
AmixBeast
+Amjad
Amjar
+Amka0s
+Amkings
Amlodipinee
+Ammastian
+Amnesiia
+Amnios
AmoMeuFilho
+Amoei
+Amon Amarth
+Among Dead
+AmongUs R34
+Amongst It
+Amordrise
Amos1500
Amper
+Amperes Law
+Ampiainen
+Ampilify
Ample
+Amplify
Ampura
+Amsclarke
+Amsterdamage
Amty
+Amused Fonty
+Amuzements
+Amuzzr
Amuzzzr
+Amy Sonck
AmyMacdonald
Amygdala
Amylit
Amyshaw123
+An Amputee
+An Animal
+An Ebony BBW
+An Old Chum
+An epic OAP
An old Gnome
+An0mandaris
An0niminis
+An6ers
AnActualHorn
AnAmerican
+AnEnginerd
AnEpicWookie
+AnEskimo
AnExperiment
+AnEyeOhLate
AnOldTank
+Ana D Armas
AnaWynn
Anabella28
Anabolic
Anabolic h1t
+Anabowlen
+AnaklusmosAN
Anao
Anaphylaxiss
Anarchy
+Anarchy870
AnarchyOS
Anari
AnataNoWaifu
Anbu
+Anbu_Mobb
+AncIrew
Ancalagon
Ancastry
AnchorMann
Ancient
+Ancient Fury
+Ancient fir
+Ancient hil
+Ancient soul
AncientFreak
AncientLamb6
AncientMagus
AncientOath
+AncientP
Ancientgh0st
Anciento
+Ancientz pal
Ancitif
+Ancona
+Ancow
+And e
+And r ew
AndSo
+AndYetISmile
Andardenn
+Ander5
Anderave
+Andericus
Anders375
AndersenXo
Anderssen
Andhra
AndiCandy
AndiVT
+Andiamo98
Andipyrus
Andirath
+Anditre
+Andj
Andoyen
+Andrade149
+AndreasBL5
Andremagico7
AndresVZLA
+Andrethyst
Andrew
+Andrew Marr
+Andrew OG
AndrewWigins
Andrewjaay
AndrewsMeat
Andrezee
Andrezz
Andri02
+Andrian
Andrick
Andrishh
+Andrius X
+AndriusBykas
Androgenic
+Android Iron
AndroidFox
Andromed1k
+Andsaca
+Andx
Andy
+Andy Candy
+Andy Ops
+Andy Salrem
+Andy btw
Andy2
Andy2511
+Andy43229
AndyG223
+AndyIsComing
+AndyL
AndyMcbob4
+Andydiaz
Andyfromvent
Andyn9
Andyooi
Andyvns
+Anele Boy
+Aneluy
AnemicIzzy
Anesics
Anetha
Aneurin
+Anez
+Ang3li
Angalad
Angel
+Angel Advise
+Angel Allie
+Angel Gabe
+Angel Martyr
Angel Vlad
Angel4killin
Angel5
+AngelOfZeal
AngelOrHour
+Angelic Lust
+AngelicOrb
AngelicVixen
+Angelisimo
+Angell SL
AngelsCrys
Anger
+Angerfish208
+Anghelic One
+Angie Bos
+Angl 0f War
Anglerstein
AngloSamson
+Angoose
Angry
+Angry Bison1
+Angry Child
+Angry Thumb
AngryHusky24
AngryMvP
+AngryNachos
AngryPickle
AngryScape
AngryWizard
+Angsti
AngusM
+AnhTaDuong
+Anhedoniaa
+Anid
+Anida Hanjab
Anidien
+Anieli
Aniheyu
+Anim
Anima
Animal
+Animal feces
+Animalia
Animation
Animations
Anime
+Anime Nips
AnimeExpert
AnimeMilkers
AnimeWaifus
@@ -1281,51 +2982,95 @@ Animorph
Animos
Animosity
Anion
+Aniril x
+Anita Dong
+Anita M Wynn
AniviaKush
+Aniwave
Anja
+Anja Rubik
AnjaPija
Anjigami
+Anjru
+AnkaraAisa
Ankedia
+Ankka51
Ankn
+Ankou btw
AnkouClothes
Ankougnu
+Ankourule243
Anlaku
Anlex
Anmah
Anmokyu
+Anna Huikka
+Anna Liebert
+Anna Planks
Anna Rosanna
+Annavvaa
+Anne Puppy
+AnneWB
Annero
+Annhilate0
Annihilated
+Annihilation
Annihilative
+Annna Puu
+Annoys
Anoie
AnomalousFox
+Anon E Maus
AnonDoctore
Anonim
+Anons
Anonymiity
+Anonymous aF
+Anonymousse
+Anoobass1
Anooge
Anoomliebird
Anor
+Anotha Skar
Another
+Another Name
AnotherCsTa
AnotherDoor
AnotherGamer
AnotherName
+AnotherPb
+Anouar
+Anoubis
Ansaittu
+Anscombe
+AnselAdams
Ansoil
+Ansovs
Ansuz
+Ant M8
+Ant a
AntRIP
+Antartsant12
Antast
Ante
Antee294
Antelope123
+Antex
+Anth x
Anth52
Anthiex
Anthilll
Anthony
+Anthony Btw
+Anthony I
Anthony5002
Anthoons
+Anthooony
Anthorak
Anti
+Anti Drop
+Anti PK G0D
+Anti002
AntiFuh
AntiVaxMothr
Antidope
@@ -1333,59 +3078,102 @@ Antifa4figs
Antifire
Antiflag42
Antiguy24
+Antinyte
Antipathic
Antipixel
AntiqueRS
Antiqxx
+Antireflex
Antis
Antiserum420
Antixan
Antiyano
+Antlers
+Antmix
Anto
Anton
+Anton T
Antonio
Antonn
Antony
+Antony1202
Antony142pay
Antoun
+Antracid
+Antron
Antstolis
Anttila
Antweezy
+Antz Xii
+AnuBi 1337
Anub1s
Anubis
+Anubis ex
+AnubisT3
+Anuj
Anul
AnullSecs
Anv1k
Anve
Anxi
Anxiety
+AnxietyBTW
Anxious
+Anxious Mess
AnxiousDoggy
AnyDrops
AnyLesS
+AnyQuestions
+AnyScrolls
Anze
+AnzheliK
Anzie
Anzied
Anzu
+Anzypoo
+AoA Jammer
AobaJohsai
+Aog
+Aoh
+Aohc
+Aohu
+Aoi Tetsu
Aokijahr
Aokijii
AonEne
Aonyx
AoooA
+Aorpheat
+Aosrs
Aowi
+Aozaa
+Ap0logy
Ap0phis
Ap3x
Ap870
+ApRoMn
Apaat
+Apaatje
Apache
+Apache30
+Aparlo
ApartAbyss
Apathetik
+ApdoJ
+Apdomine
+Ape Cape
+Ape Dos Mil
ApeAtoll
Apetamer
+ApetimusPrym
Apex
+Apex Pro
+Apex-scaper
+ApexGT
+Apexflashy
Apexist
Apgujeong
+Apherna
Aphex
Aphroditeee
Apimer
@@ -1394,74 +3182,136 @@ Apldale
Apm90x
Apoc
Apoc142
+Apocriya
Apocryphe
+Apolliox
+Apollo Beach
+Apollo13th
+Apolytos
Apop
+Apophiss
Apor
+Apostasie
Apotoxin
App3lflap
AppaYipYip
+Apparat
Apparitionn
+Appeasive
+Appel Farm
Applauder
Apple
+Apple A Day
+Apple Mart
+AppleBluue
Appleboss
+Applecus
+Applejuiceaj
Applemaxx
Applev2
Applied
+Applul
Apportant
+Apprenti1
+ApprenticeRS
Approval
ApprovuL
AppySauce4
+Apqle
Aprella
April
April 8 1997
+April twenty
Aproximity
+Apsa Larr
Apteryx
+Apteryx luna
+ApuHapu
Apul
Apullu
+Apyon
Aqew
+Aqizu
Aqtive
AquaUnit
Aquah
Aquaileo
+Aquajd
Aqualetics
Aquamation
+Aquamentus9
Aquascaped
+Aquaticbob
Aquatik
Aquellex
+Aqueueser
+AquiIa
Aquilo
+Aqva Babe
+Ar ex
+ArA100
+ArKadeeee
+Arab Frieza
Arabian
Arada
Araet
+Aragonx
Aragornmv
+Aragornous
+Aramaki
Araman
+Aramex
Arandae
Aranna
Aranruth
+Araq
Araqon
Arasex
Arashikato
Arastaiel
Arathir
Araur
+Aravt
Araysen
Arazz
Arb4n
+Arbator
+Arbenn
Arbin
Arbyy
+Arc1s
+Arcade firee
+Arcadian96
Arcane
+Arcane Grima
+Arcane Queen
+ArcaneApollo
ArcaneBear
Arcanezeus
Arcangel
+Arcangel IX
Arcanic
+Arcanox Sad
+Arcanum XIII
Arcas3
+Arced RS
Arceneus
Arch
+Arch RS
+Arch er
Arch3nLight
+ArchFarmer
ArchX
Archaea582
Archahl
+Archaic Wolf
Archaiden199
Archanjel
+Archas
+Archavia
+ArchbishopC
+Archduke Btw
+Archelon
Archer
ArcherYew
Archie
@@ -1473,6 +3323,9 @@ ArckenSphere
Arclight
Arcnan
Arctic
+Arctic Roach
+Arctic Vaggy
+ArcticCamel
ArcticMank
ArcticTitan
Arcticas
@@ -1482,8 +3335,16 @@ Arda
Ardaddy
Ardames
ArdenDZY
+ArdestRange
+Ardilos
+Ardougn e
+Arduino69
ArdumTheMain
+Ardumm
Ardy
+Are Dry
+Are ng
+Are you well
AreYouMyMumm
AreYouPepega
Area
@@ -1491,12 +3352,17 @@ Areimer0606
Arekusei
Arena
ArenaRebuild
+Arend Nest
+AreolaArnold
Areolas
Areoloth
+Areow
Ares
+Ares 3060
Ares1701
AresArmy
AresKnight
+Arescoth
Aretx
Arezrazer
Arfex
@@ -1505,282 +3371,534 @@ Argawan
Argent
Arghoslent
Argilla
+Argo Vesta
+Argonuts
+Argory
+Argov
+Argyle Sock
+Argyle Socks
ArgyleGrandt
Arhedel
+Ari
AriSlash
Aria
+ArianDRZ
Ariana
+Arias star
+Ariazel
Arid
ArieMoon
AriesWarrior
+ArieyaeIron
+Arifureta
Arigorn
Arigorn55
Arihant
Arillian
Aris
+Arisen I
+Aristo
+Aristokratas
Arisu
+Arith1um
Arithe
Arizotal
Arjoon
Ark9tog
+ArkAngel029
+Arka91
+Arkaniz
+Arkantos51
+Arkaros
Arkavos
+Arkaynine
Arkeela
+Arkells
+Arkem
+Arkemir
+Arkend
Arketryx
Arkevin
+Arkhero
+Arkizah
+Arkki
+Arkonka1
+Arkonknight
Arkvasal
Arkysh
Arlind
ArloTheBrave
Arlorict
Arlyeaxn
+Arlyse
+Arm Chair
+Arm Guy
+Arma Frost
Armadexx
Armado
Armadomin
+Armadyl king
+ArmadylPker
Armadyllo
Armament
+Armanyte
Armapickle
+Armas Chosen
Armchairs
Armerak
+Arminius Sol
ArmisticeDay
Armo
ArmoBlood
+ArmoMike
Armoah
+Armondega
+ArmorHelmet3
+ArmorSeeds
Armourer
Armsdray
+Armweak55
Armysam
Arna
+Arndas
Arnear
+Arnhems
Arnie
Arnold
+Arnor
+Arnthor
Arntj
Arobpl
Arod
Arodaz
Aromipesa
Aron
+Aronya
Aroorin
Arousen
+Arousin
+Aroyu
Arpang
Arpegio
Arptacular
Arr n Geesus
Arrandarls
+Arrasca
+Arrazha
+Arre10
Arrizu
+ArrowHaste
ArrowTank
Arrowmind
+Arrows Myth
+Arrowtower
+Ars Nova
Arsaydar
Arsenals
+Arsene rar
Arsenic
+ArsenicEyes
+Arsenn
Arshal
+Arsi
Arslen
Arson
ArsonScape
+Arst
+Arstan Selmy
Art Dayne
+Art Star
+ArtIsHard
ArtStylerzz
Artces
+Artegal
Artenmis
Artesna
+Artezor
+Artful Dodgr
+Arthaniel
Arthesus
Arthropods
Arthur
Arthven
+Artic0
+Articuno1991
+Artidote
Artillion1
Artipeng
Artisaani
+Arto Lauri
ArtofKush
ArtoriaSiff
Artoriias28
+Arts
+Artu12v
Arturis
Artychurro
Artz
+Aru
Arumen
Arunas
Arusas
+Aruwyn_Xi
Arve
+Arvinthir
Arviragus
+Arvns
+Arvsta Won
+Arvx
+Arwe
+Arwon
Arxanec
Arya
Aryabhata
Aryuts
+Aryzha
+Arzemnieks
Arzi
+Arzna
AsalentBlaze
Asami
+Asami Sato
Asap
+AsapLamb
Asbi
Asbloodfalls
Asbur
+Ascadex
Ascanliss
Ascended
+Aschen
+Ascii You
Asda
+Asdasd107
+Asdewq
+Ase
Aseae
Ased
Asfixiator
+Ash K
+Ash Solo
+Ash Wreckum
+Ash l
AshBash
AshEvillDead
+AshKetchum00
AshLad94
+Ashabee
Ashandarei0
+Ashcroft
Ashealia
Ashen
+Ashen Bride
+Ashen Heart
+Ashen One
AshenSughar
+AsherMentuI
Ashes
Ashes630
Asheviere
+Asheville
+Ashhh
Ashieboyyy
Ashikaru38
Ashington
+Ashkelmek
Ashkii
+Ashkyn
Ashleigh
Ashley
AshleyNZ
+Ashleyi
Ashlyce
+Ashmeow
Ashn
Ashoo
Ashsole
Ashton
+Ashura Bakke
Ashwin09
+Ashy joey
+AshyKneecapz
Ashyy
Asian
+AsianGrinder
+Asics
+Ask Oziach
AskMeDolCare
Askraf
Askumi
AslanMaximus
Aslywyn
+Asmir9990
Asorf
Asos
+Asot
+Aspen
+Asper
Aspestia
Asphyi
+Asphyi Xate
+Ass Balm
+Ass Clams
+Ass Drill
+Ass Rocker
+Ass locator
+AssClapping
+AssMcButt
Assasindie73
+Assasintoad
Assassinado
Assaulted
+Asshats R Us
+Assktchum
+Asstain
Ast 360
Astan
+Astaro
+Astartes
+AstartesXIII
AsterSG
Asterlad
Asterlyte
Asterus
Astiminate
Astoia
+Aston Fartin
AstraDan93
Astraea
+Astral Queen
+Astral laws
Astrali
+Astrals
+Astray
+Astrayus
Astro
+Astro Dust
+Astro O7
+AstroKP
AstroXgK
AstroYogurt
+Astroflare
+Astronaut Al
+AstrooWRLD
Astrophe
Astrostone
+Astylez
Asubu
+AsuhDude
Asuka
AsukaLangely
+AsukaYenOSRS
Asukas
Asumaton
Asumistuki
Asuna
Asunnn
Asura
+Asus bl
+AsylumTRAV
Asymmetry
Asyn
+Asynergy
Aszalem
+Aszard
+Aszension
At0mic
+Atacrite
+Atar
Ataraxia
+Ateo
+AthIetic
Athaw
+Athe na
Athedeia
Athena
+AthenaOfOsrs
+Athenaloki
+Athi
Athire
+Athius
Atika
Atilio
+Atin
+Ativan IM
Atlamillian
Atlantic
AtlasErol
+AtlasUsurper
Atlashi
+Atleast
Atli567
Atmosfare
+Ato m
+Atolla
Atolli
Atom
Atomic
AtomicFlux
+Atomicdomb2
+Atomikaust
Atomsk
Atomyze
Atonic
Atorvastatin
Atouk
+Atoxicary
Atoz
+Atriades
+AtriummDream
Atrixas
+Atro phy
Atroo
Atroph
+AttackMoons
Attard
+AttemptedUwU
Attic
+Attic Ghost
+Attic Witch
Attics
Attikos
Atton
+Attuned
Atuking
+Atvinnulaus
+Atylos
+Atza
+Au 0srs
+Au 1
+Au Bar
+Au Barrett
+Au Joel
+Au Shooty
Au92
AuRoyce
AuStarZ
Aubrey
+Aubrey UIM
+AubsG
+Auburn Lax
Aubzzz
Auclaw
Auctionable
+Aud
AudacityOP
+Auddax
Audi
+Audi Nurse
+Audi Reach
+Audo
+Audronan
Audtnec
Audylinks
Augment
AugstBrnsRed
Augurk
+Augury Tank
August
AugustAmes
Augustiner16
+Augutis
Auhdy
Auja3
AuksoAlt
Aulono
+Aumoki
+Aunonen
+Aunt Wu
Auntie
+Auntie Mabel
AuraBeast
AuraSissari
+Aurah
+Aurelia
AurelionROW
AurelionVM
Aurelya
Aureou
+Aurgodi
AuriZed
Auriana
Aurionx
+Aurizon
Aurorin
+Aurrok
Aurtle
AurumFoxfire
+Auryn
+Aus
+Aus 2277
+Aus Shizam
+AusBruto
+AusGram
Ause
+AusieBumpkin
Ausripper
Aussie
+Aussie Jay
+Aussie Luke
+AussieKunt
+AussieOandE
AussieSparta
Aussome
+Aussybear
+Aust Terps
Austie
Austiiizy
Austin
+Austin Ames
+Austin is 1
Austin296
+Austiz
+AustlnPowers
Australia
+Australians
Australiaz
AustrianOak
+Austs
Austyn
Autchin
+Authorized
+Authorizer
Autickstic
Autilon
Autism
AutismeKnaap
Autist
Autistic
+AutisticAndy
+Auto Tuned
+AutoBonsai
AutoEmp
+AutoLoot EXE
+Autoacid
AutomailArm
Automonteur
Autophagy
+Autorotate
+Auts Man
Autumn
AutumnKevegy
Autzerk
Auuustin
Auuuv
AuzReaper13
+Auzium
+Av o
+Av3z Str
+AvC OSRS
+Ava End
Avaetar
+Avaigo
Avatar
+Avatar Evan
+Avatar Magni
+AvatarBean69
AvatarShakur
Avedon
+Aveng
+Avengerous
Aventy
Aver4ge
Average
@@ -1792,7 +3910,14 @@ Avernic
Avero
Avertehs
Avest09
+AvestGIM
Avex
+Avexaon
+Avfc Holte
+Avg Tom
+AvgMG
+AvgScape
+Aviaatar
Avian
AvidTech
Aviiation
@@ -1801,85 +3926,154 @@ Avinosis
Avir
Aviron
Avlek
+Avocatocat
Avoidable
Avoinmieli
+Avonak
Avondale
+Avouch
Avrahm
Avsendesora
Avysto
+Avze
+Awadi69
Awaiting
+Awaiting 126
Awaits
Awaiyume
+Awakened Olm
Awarde
+AweJeez
Awendana
Awesome
+AwesomeBros
AwesomeJared
Awezm
Awful
+Awful Name
+Awfully
+Awh DB
+Awh Nuggets
Awies
Awilkins4231
+Awkquavian
+Awkventurer3
Awkward
Awowegei
+Awowo Gay
+Awry
+Awtangg
AwwSeriously
Awwdiddums
Awwtis
+Awyr
+Ax3
+Axayre
Axdrew
+Axely
+AxemPink
Axeo
+Axhers
Axies
Axillaa
AximusMax
Axiom
+Axlerod
+Axleson
+Axodyi
+Axolotl
+Axsentz
Axton
Axylix
+Ay Monk
+Ay Ron Man
Ay3m
AyAyRon
AyB33
+AyJae
+Ayafuyuzu
AyameDespair
+Ayatan
+Aybills
+Ayd
+Aye Sip
AyeBaddaBing
+AyeePizza
Ayeeet
+Ayema IM
+Ayenull
Ayetg
Ayfi
Aylia
+Aylward
Ayman
+Ayo4Yayo
AyoSteeze
Ayoe
+Ayonikz
Ayra
Ayri
+Ayrton
+Aysuu
Ayveros
+Ayy Nakana
+Ayy bae bae
+Ayy q p
Ayyye
Ayyyon
Ayzo
Az PVM
+Aza zel
Azad
+Azad Kashmir
Azala
Azami
+Azandari
Azathor
Azathoth26
+Azathrir
+Azazel OSRS
+Azeenil
Azemu
Azerma
Azez
Azimut
Azimuthaal
Aziz
+Aziz7
Azkaton
Azken
Azkybot
Azlo
Azmataz
+Aznbabe
Aznmixboy
Azom
AzorAhaiBTW
Azotize
Azoxy
+Azpa
+AzraelReaper
Azriiele
Azryel
+Azs
+Azshara
+AztecLT
+Aztra
Azula
+Azula Whip
+Azur Lane
Azur_I
Azure
Azure23782
AzureSpirit
+Azuredadi
Azuremadi
+Azuretiger
Azuuure
+Azynn
+Azyrith
+Azza Bear
Azzaar
Azzaboy100
Azzakel
@@ -1888,100 +4082,257 @@ Azzanadraa
Azzax
Azzgarnia
Azzz
+B 0 B S
+B 0 S S
+B 0 U J E E
+B 3R
+B 58
+B A F F E Y
+B A MF
+B A U W S
+B B Bouncy
+B C 2
+B C M
+B CA
+B D Y
+B E E G
+B E R T A
+B E R t I 3
+B ELA
+B Gates
+B Gonkeybron
+B I G G L E
+B I R T
+B Ian
+B J O R N
+B L 4 N K
+B L A D E Z
+B L A N E
+B L A Y E D
+B L ANK
+B L I X T
+B Milesy
B Minor
+B O G S
+B O O T H
+B O Y E A
+B R A l N
+B R II A N
+B R l C E
+B S
+B SlDE
+B T J
B Victor B
+B W 1
+B W A K
+B aylor
+B aze
+B ecky
+B eeez
+B iggles
+B la z e
+B las
+B r a g g
+B r eezy
+B rads
+B raes i
+B ruised Lee
+B u bs
+B ug
+B un
+B utt
+B w
+B-0-SS-M-A-N
+B-Dollaz
B-Lal
+B00 KAW KEY
B00Lici0us
+B00MERAT3R
B00ST
B00SY
+B00tlicker
B0ARD
+B0B The Cat
B0BaH
B0GLA
B0ND
+B0NERCRUSHER
+B0NGRIPS42O
B0OP
B0aty
B0atyquila
+B0bz BurGerz
+B0dka
+B0n3z84
+B0nes2Weed
B0rders
B0rn
B0rn2bking
B0rnas
+B0tched
B14cksh4d0w
+B1G BAD CHAD
B1G8
+B1GARMS
+B1GBOB
+B1GGY
B1G_D1ESEL
+B1G_SW1GS
B1RDUP
+B1Te Me
+B1ack Lotus
B1ackJack
B1asphemy
B1gTTgothGF
+B1gd0wg
B1ink
+B1mboBambi
B1zrme
B2AD
+B2F
+B2J3
B2bZeroSpecs
+B2rad
+B3A5T
+B3CK
B3NJAMOON
+B3NT D0ver
+B3TTERLUCK
+B3Y0ND
B3njamima
+B3njamin
+B3nny Blanco
+B46
+B4RR
+B4S
B4llista
+B6a
+B6i
+B70
B747B
+B8 H8ER
+BACKURBOI
+BACONisgd4me
BADASS
BADDONE
BADPanda2
BADUPDATES
BAKED
+BALD n DUMB
BAMF
BAMFnificent
BARBARlANS
BARRAGENOW
BARRON24
+BASED DMM
+BASEDQwert
BATATUNGA
BATH0RY
BAYLlFE
+BBBBBONKA
BBGL
+BBK
BBKwenie
+BBL RIZZY
+BBQs
+BBW Pizza
BBarnzeyy
+BBeepLettuce
+BBoys Father
BCBDestroyer
+BCC YT
BCDOJRP
+BCK CigButts
+BCMagoo
BDCMatt
BDrichard
+BEANS9991119
BEARDED
+BEAST ARCHER
BEATONiT
+BEBELAC28
+BEEA
BEG0N
BEG0NE
BEINGMAXDSUX
+BELSJ
BEMBOU
BEST
+BET5
+BEYFYBOI
+BFKay
BHAFC
+BIG ASHL3Y
+BIG C0X LUVR
+BIG HIT GOOD
+BIG pontifex
BIGBADWILLY
+BIGD05
BIGDROPHUNTR
+BIGFERGLOAD
BIGHEADSMASH
BIGJP
BIGMINK
+BIGSITUATI0N
BIKlIllIlIIE
+BILR0Y
+BIOATED
+BIRD SHlT
BIRP
BIRWAAA
+BIS Monster
BIaded
BIadet
BIapa
+BIood Prince
+BJ Applegate
+BJ M
+BJPlaysRS
+BKBB
+BKK
BKLN
+BL00DANG3L
BL33DPL34S3
+BL3SS3D4LIFE
+BLACK DOG NI
BLASE
BLGesus
BLICKYSTIFFI
+BLOBi WRX
BLOOD
BLUEPIZZAMAN
BLXCKPINK
+BLYATMOTOR
BLlNKY
+BMEUR
+BMooldijk
BMrgn
BO0MERSO0NER
+BOA Liger
BOBGIGALUCKY
BOBYAHMDGECI
+BOER KAMIEL
+BOGOBoneless
+BOL0CKS
BOLSOONARO
BOMBAKLAP
+BOMBU
+BONITA 02
BOOPlNG
BOOTTYBANDIT
+BORDEN DAIRY
BOSNIAQUE
BOSS
+BOSS OG
+BOSSMANHOG
BOlNEXTDOOR
+BPNS Hawk
+BPTheIronOne
BPrimitive
+BR0 BRO
BR00KES
BR0CE
+BR0ER
BR0THERS
BR3AKABLE
BRA71L
@@ -1990,16 +4341,34 @@ BRAMMOSOVIC
BRANDONSMlTH
BRCH4
BREJCHA
+BRUTAL
BRabbit25
+BRlOCHE
+BSB Howie
BSNR
+BST Steve
+BSickler
BSven-B
BTCEUR
+BTKMGJKL
+BTMillz
+BTW Beirre
+BTW idgaf
+BTW vs RNG
BTWSaberlion
+BTWsanta
+BU1MER
+BUHLL
BUILD
BUILD PONYS
+BULLlSH
BUNDHA
BUNStheGOD
+BUR13D AL1VE
+BURYT0MORROW
+BUSS IT
BUTTB0NERED
+BUTTCOlN
BV Martyr
BWheatZ
BYEq
@@ -2008,101 +4377,219 @@ Ba1i
Ba5b0y
Ba6y
Ba77erY
+Baa m
+Baaaats
+Baal157
BaalZvuv
Baals
Baalthas
Baamf
Baami
+Baandos
+Baarb Lahey
Baas
Baba
+Baba Booey9
+Baba Borgar
+BabaLovesKos
+BabaSlaaf
+BabaSleep
BabaTarzan
Babafasa
+Babayaga-9
+Babayaga2121
+Baberrandrid
+Babica Mraz
Babiez
+Babocat
Baboosh
+Babs221
BabsCox
Baby
+Baby Bear
+Baby Bobby
+Baby Boeing
+Baby Daphne
+Baby Houdini
+Baby Motel
+Baby1400
BabyB
BabyDogeCoin
BabyDogeFTW
BabyGroot
BabyHat
+BabyHewy
BabyHiggy
BabyJIREN
+BabyLinga
BabyPandaa3
BabySas
BabyTamer
Babycerasaux
Babydump
+BabyfaceBill
Babyjoker828
Bac0n
BaccaM
Bachelour
Bachuras17
+Bachus67
Back
+Back Jauer
+Back Seater
Back2Backk
Back2ourdays
BackInTime
+BackToBambi
+BackToOwn
+BackelsOSRS
Backinthe09RS
Backlit
+Backspace
+Backsterr
Backus
Baco
+Bacodie
Bacoid1
Bacon
+Bacon Glizzy
+Bacon24717
BaconBlunts
+Baconcannon
+Baconist
Baconlord100
Baconpancake
Baconstrike
Bacteria
Bactomet
Bacun
+Bad Advice
+Bad Ape
+Bad Axe
+Bad Day
+Bad Fruits
+Bad Kind
+Bad Kuip
+Bad Mario
+Bad McNamey
+Bad Mistake
+Bad Name Now
+Bad Robert
+Bad Weather
+Bad exp
Bad2dabone30
BadAndB0ujee
+BadAss_oO
+BadChicken
+BadChronic
+BadDecision
+BadIdeaDog
BadIllusions
+BadInIronMan
+BadInNames
+BadMamaJama
+BadMannerz
+BadSass
+BadSpalling
+Badaping
Badass
+Badass Fe
+Badass Iron
+Badass Rs
+BadassIron
+BadassPotato
Badasseness
Badaxx
BaddieDragon
Badgalriri
+Badger Bush
+BadgerInABag
Badgerq97
Badical
Badman
+Badman ET
+Badoodle
Badora
+Badora II
+Baduk
+Badvask
+Bae-Kun8er
Baeby
Baekah
+Bag it
+Bag of Yay
+BagFryLife
Bagadigi
+Bagan
Bageera
BagelSpanker
Bagels
Baggyshaw
+Baghdad
Baginga
+Bagis
+Bagokk
Bags
+Bags n Beer
Bagsnacks
+Bagz
BahRitTanEe4
BahamutLimit
Bahn
Bahnzeen
+Bahp
+Bai Ningyang
+Baib
+Bail Jait
Baileys
Bailsby
Bailz
Baimonnnn
+Baines
+Baino
BainoLad
+Bainz
Bairac
+Baites
+Baja Baja
+Bajan
Bajart
Bajcolado
+Bajela
Bajere
Bajhole
+Bajista
+Bajji
Bajkami
+Bajsanus
Baju
+Bak cornet
+BakIron
+Baka Mop
+Baka Prase
+BakaOsaka
+BakaPho
Bakazuro
Baked
+Baked Mage
+Baked Saiyan
BakedVandon
Baked_Beagle
Bakedd
+Bakedmuffins
BakeonBits
+Baker Bully
+Bakerloo
+Bakers Baked
Baketto
+Bakhmut
+Baki Hanma
+Bakingsodah
+Bakingsweets
Bakkis
Bakllava
Bakron
+Bakthawar
Baku
Bakuchiol
Bakusho
@@ -2110,49 +4597,100 @@ Bakuthedrunk
BalIsackt1ts
Baladend
Balan
+Balan Dinh
Balar
Balarezo
+BalazinGIM
+Balboa Park
+Balbuli
Bald
+Bald Arab
+Bald Male
+Bald Shupa
+Bald Sicknez
+Bald To Bold
+Bald Wookiee
+Bald at 29
+BaldKnees
+BaldMansKenn
Baldfuc
+BaldheadBill
+Baldoc
Baldorr
+Baldrake
Baldras
Balerion
Baliboosca
Balkan
+Balkenende
Ball
BallOfCotton
Balla
+Ballack342
+Ballade No 3
Ballcheck369
+Ballenaso
Baller006
Ballerina
Ballesekk
+Ballet
BallinBamf
Ballotaa
+Ballroom
Bally
+Ballztacular
Ballzy
Balmung311
Balneum Anas
+Balob
Balontra
Balou
+Balrogs Hell
+Balthazar BL
+Baltimohr
+Baltimore MD
Baltoth
Baltramiejus
+Baltzerboii
Balu
+Balu Titan
+Baluk
+Bam Achilles
+Bam Grizz
Bambi0326
BambiSlayer
Bamboo
+Bamboo James
+BambooPandas
+Bambuliuss
Bamf
BamfJoe
Bamfbeav
+Bamiman
+Bamse
Bamztile
Banan
Banefish
Banerz
+Banio
+Bank Stander
Bankaiz
+Banki 1 1
Banzu
+Bape
+BapeNation
+Bapelsin
+BaphometsLov
+Baptor
Baqels
+BarShake
+BarSmash
Baraek
Barakoli
+Baratheon
+Barathrum
BarbaariJuho
+Barbatos
Barbose
Barbwiire
Barbyte97
@@ -2160,60 +4698,105 @@ Barca
Barca230492
Barcodes
Barcoding
+Barcy
Bardimuss
+BardleDooDoo
Bare
+Barely High
+Barely Legal
BarelyBusy
BarelyDecent
+Barfallonyou
Barfs
Barfy
+Bargli
Barhoor
Bariviera49
+Bark sample
Barkki
BarnVo
+Barncle Boy
Barneey
+Barnet Ftw
Barney12370
+BarneyKing
+Barneylover
Barnez10
+Barnyard Boy
Barnz
BaroBro
+Barometz
Baron
+Baron Iron
+Baron Timmy
BaronConey
BaronGiraffe
BaronVonGeeb
+Baroondon
Barqueefa
+Barr
+BarracuDro
+Barraggah
Barrako
+Barrel Flop
Barricade
Barrowry
Barry
+Barry Koota
+Barry0408
BarryBanaan
BarsasBoom
Barstukas
Bart
+Bart Heredit
BartBelly
BartSimps
+BartenderBTW
+Bartheez
Bartholomeii
Bartje
+Bartol
Bartycool
Barzhal
+Bas
+Bas Waterpas
Bas481
+Basant
Base
+Base 99s
+Base Skills
Based
+Based Evan
+Based Kyoko
+Based Miyagi
BasedGob
BasedHeru
BasedScape
+Basement Dad
+Baseplate86
Bash
BashinBosses
BashiraTHC
+Bashram2
Bashx
Basic
+Basic Drop
BasicBilbo
BasicIronman
Basil
+Basil Hiiri
Basileia
+Basilikos12
Baska
+Baskervilla
Basket
Basketballer
Baskie
Baskrans
+Basmah
+Bassaidai2
+Bassey
+Basshu Fon
Basshunter
Bassilliaux
Basstomouth
@@ -2221,42 +4804,71 @@ BastasRemmen
Bastermate
Bastiao
Bastidaz
+Bastin101
Baszist
+Bat Fastard
+Bat Kills
Bat418
+BatChatillon
BatFat
Batbot101
Bateau
BatedUrGonna
Batesanator
Batgirl
+Batin
+Batistaisraw
Batleris
Batmain
+Batmam
Batman
Batmanlul
Bats
BatsVsChina
Batsborkair
Batsmattie
+BattDoode
Batter
+Batter Cake
+Battle Jack
Battousai
+Battousai09
+Batu
+Batussy
+Batzch
Batzz
Bauchop
+Baulsacky
Bautista I
+Bav
Bavaria
+Bawdlands
Bawjaws
Bawn
+Bawwz DeadAf
Bawz
+Bax2
+Baxi 247
Baxxis
+Bay
+BaySeoul
BayaniSenpai
Bayern_pvm1
Bayes
Baykr
+Bayle Domon
Bayleef180
Baylin
Baylon
+Baylon rs
BaylyBoyBro
Bayman
+Bayou Bengal
+Bayside
+Baza
+Baza NZ
Bazilijus
+Bazimga
Bazmobile
Bazoo415
Bazoomaster
@@ -2265,45 +4877,96 @@ Bazukashrimp
Bazz0r
Bazzak
BazzleB
+BazzleBTW
Bazzooi
BbDontHurtMe
+Bbase12
Bbaws
Bboygainz
+Bbubbsy
+BcShane
Bcgod
+BchImaBus
+BckOFFRTRD
BckScratcher
+Bcowzy
Bdawg
+Bdub187
+Be Aware
+Be Rad
+Be Strong
+Be X Unlucky
+Be as t
+BeEzyMan2
BeFawn
BeThankfulll
BeTy
BeaTee
Beaan
+Beak er
+Beaken
Beaky
Beamesy77
+Beaming
Beamo
+Beams btw
+Bean
+Bean Bunn
+Bean Slapper
+Beanieus
Beanis
Beanisdead
BeanozZ
+Beanpot
Beans1991
Bear
+Bear Downn
+Bear Finale
+Bear IV
+Bear Jake
Bear Savage
+Bear W Scarf
Bear0nBeer
Bear32
+BearByBlood
BearByte
+BearDown80
+BearGrillz
BearImmunity
Bearac
+Beardboy
Bearded
+Bearded Hick
+BeardedGummy
+Beardedwick
+Beardilizer
+Bearing Down
+Bearly Iron
+Bearopenart
+Bearrito42
BearsBeetsBG
Bearsarefrie
Bearsfan5455
Bearshot
+Bearsome
BearsyXL
+Beary
Beast
+Beast Guard
+Beast Things
Beast1Range1
+Beasted Main
Beastgriff
+BeastieBoy31
Beastied
+Beastley
BeastlyGinge
+BeastlyMuff
Beastman642
+BeastyY69
Beat
+Beat Tit
+Beat my Wifi
BeatboxRS
Beatdown115
BeaterGod
@@ -2311,34 +4974,73 @@ BeatmyJonson
Beatrix
Beatz
Beau
+Beau Ryan
Beau1o
Beaukaki
+Beautifull
Beaver
+Beaver Booty
+BeaverSweat
+Beaverr
+Beavers79
+Beavis 420
Beavis825
Bebbie
Bebe
BebeAtron
Bebexx
Bebo294
+BeboKAhnung
Beckerr
+Beckovas
Beckyboo308
+Beckymikyu
Become
+Becoming
Becton22
+Bed
+BedByDaylite
+BedForSale
+Bedanc
Bedeh
+Beden
Bedevil
Bedni1
+BedtimeHERO
+Bedwoods
+Bee Butts
+Bee Keep
+BeebeM
Beef
+Beef Mince
+Beef Squirt
+BeefBottom
Beefense
Beefs
Beefy
+Beefy Potato
+Beefy Treat
+Beefycopter
Beeg
+Beeg splat
+BeegeKhaos
Beeghs
+Beeks
Beeky
Beeline
Beelzebubba
Beelzebubby5
Been
+Been Mobile
+Been Poor
+Beepern
Beer
+Beer Diet
+Beer Is Cool
+Beer Pong
+Beer Tankard
+Beer gut Jim
+Beer n Blow
BeerIsGood
Beerchamp1
Beerfest
@@ -2346,397 +5048,886 @@ Beerhana
Beershits
Beersmack
Beerzinnss
+Bees169
Beest
Beestig
Beeswakka
BeetchAustin
BeetchJeemmy
Beetle
+Beetus93
+BeeyondBeef
BefJekyll
Befkeuning
+Before Snow
BeforeDeth
+Befsnor Ben
+Begani
+Begave
+Beget
Begin
Beginning
Beginnings
+Beh
+Behaarde lul
Behemoth
Behhnchod
Beholder24
+Beibs
Beidou
+Beige Carpet
+Beikengaut
+Beikenost
BeirH
Beirreee
+Beirut
BekanTering
+Bekfist
+Bekk
Bekkie
Bekske
Bekt
Bekutma
+Bel Lando
+Belaa
+Belamylinds
Beleid
Belenthir
Belgarathion
BelgianBeast
Belgiium
Belgique
+Beliefofmine
Belindaa
BellWoods
Bellatrix
+BelleBeans
+Bellebutties
Bellerin
Bellfontaine
Bellicus
BellsOfWar
Bellum50
BellyEscobar
+Bellzbellz
+Belorca
Beloved
BelowAvrge
+BelowMe
+Belsassar
Belsey
Belsfyre
Belsyn
+Belt
+Belt vs Kids
+Beluge
Belzebu
Belzeddarr
+Bemerson
Bemke
Bempii
Bempire
+Ben Babeslay
+Ben Behling
+Ben Bekkuman
+Ben C H
+Ben Jay
+Ben Jones
+Ben Kingsley
+Ben Manolo
+Ben Salden
Ben Standish
+Ben di
+Ben1kzeker
+BenDjammin
BenDover321
+BenKuro
+BenLevensMoe
+BenQ Smasher
BenRobbo06
BenShapirOwO
BenWithJam
Benarends
+Benbooo
Benching
+BendOverBabe
Bendak
+Bendeguz
BenderBuilda
Bendigo
+Bendigo Man
Bendo
+Bendos Hilt
+Bendude
+Bendyruler
Bendzo
Benedict
Beneee
Benefitz
+Beneh
Benelovent
+BengtBreak
+Bengtsson
Beni
+Beni Siitoin
+Benifax
+Benifird
+Benis Hammer
BenisTechTip
+Benisbringer
+Benja1666
Benji
+Benji Stax
+Benji189
Benjiii
Benllech
Benman
Benmiester44
Benneta
+Benni234
Benni2345
Bennie
+Bennie Lam
Bennis
Bennny0_o
+Benny Sins
+Benny Stacks
+Benny Yuh
+Benny p mage
Benny1175
BennyBeeee
+BennyQ
Bennybooom
Bennyz
Benocotch
+Benoid
+Benononono
Benoragon
+Benoxo
Benqqu
Benquad
Bens
+BensBent
+Bensmom7
+Bensos
Benstjohn
Bentso
Benvil
Benyy
+Benza
Benzema1
Benzine
+Benzoed
+Benzylll
Benzz
+Beopia
+Beozqt
+BeppaPig
BeppsaN
+Ber
Berada
Beralf
Bercuckle
Berd
+BerettaM9A4
+Berettapwnge
BergJr
+Bergheimen
Bergkamp
+Bergr
Berk
Berkan
Berkis
Berkven
+Bermaitha
Bermbommert
Bernache
+Bernie Mac
+Berno
+BernyMadoff
+Beroepskech
+Berraok
BerrieFan
Berrr
Berry
+Berry Carry
+Berry Soap
+BerryBus
BerryInBooty
Berrys
Berrzerk
Bersbillus
+Berserk FTW
+Bert Curtis
+Bert NUFC
+BertMacklin
+Berta B0y
Bertie
Bertje
Bertow
+BerttDog
Bervoets
+Berzerking
Berzurkah
+Bes
+Besin
+Besseggen
+BesselJ
Bessone
Best
+Best Kio1
+Best Lolz
+Best Murmeli
+Best Nher yh
+Best Realtor
+Best Whilbur
+BestCat
BestDIzzyNA
+BestFioraNA
+BestHouse
+BestInSloth
BestJester
BestMommyGF
BestSenpai
+BestVersion
+Bestia Solus
Besties
+Bestkilnot
Bestoladec
Besty
+Besynderligt
+BethMeow
+Bethany
+Bethell
Bethevoid
Bethrezen
+Betray
Betta1009
BetterCookie
+BettsISale1
Bettuh
+BeugLizard
Beuglord
Beugsmate
+BeunDeHaas
Beunhaas053
Bevaun
Bevelle
+Bever Mama
BeverGT
+BeverlyPils
Bevers
+Beverst
Bevruchter
Bevvy
Bewaker
+Bewq
Beyond
+Beyond Max
+Beyond Mind
+BeyondKenzie
+Beyond_blitz
Beyta
Bezbi
+Bezdzwieczny
Bezeo
+BezosTezos
+Bferg3
Bfh1master
Bfood
BgoinHAM
+Bhaals Rage
Bhakli
Bhalobashi
Bhangre
Bhench0d
+Bhillup
Bhongk
Bhoy
Bhrad
+Bht
Bhuggy
+Bi
BiBi
+BiGtOkEsBrUh
BiZaAr3
BiZaM
BiZoNaDe
+BiasVariance
Bibbit7
BibleThump
BibleTrump
+Bic
+Biccins
+Bice Bucket
+Bicep Peak
+Bicep Smooch
+Biceps Btw
+Bicho
BichoFeote
Bichslap
+BickyChicken
Bictim
+Bid Whist
+BidaFire
Biddah
+Biddiss
Biden
+Bidens Slow
Bidensity
+Bideo_Gabes
BieBras
+Biebje
Biebop
Bierliebe
BierryTaudet
Bierscape09
Biffo89
Biffsy
+Bifking
Bifta89
+Big Armpit
Big Arms Ben
+Big Ass Turd
+Big Baby Boy
+Big Bearius
+Big Beets
+Big Bennys
Big Binotte
+Big Boi Ian
+Big Boone
+Big Brane
+Big Bruno
+Big Buffalo
+Big Buzz OG
+Big Bwana
+Big C
+Big C A S H
+Big Calquat
+Big Cat Fan
+Big Chest
+Big Chugger
+Big Crafter2
+Big Cypress
+Big D Brasco
+Big Dav II
+Big Delts
+Big Discus
+Big Dog Sly
+Big Donads
+Big Dumb Zac
+Big Eazy
+Big Erecshun
+Big Genitals
+Big Geordie
+Big Gol
+Big Gorg
Big Grorb
+Big Guy Hax
+Big Hingus
+Big Hoss Lad
+Big Jake
+Big Jezza
+Big Jim Hun
+Big Johnnyy
+Big Josher
+Big Krukke
+Big Latvian
+Big Lesbo
+Big Lew
+Big Mag
+Big Meth
Big Mike
+Big Mo
+Big Mooch
+Big N LilCox
+Big O Wiener
+Big Ole
+Big Ole Dog
+Big Pancaker
+Big Poopa
+Big Rek
+Big Sage
+Big Scoops
+Big Seaweed
+Big Shaq
+Big Slick
+Big Slurpp
+Big Smi
+Big Stivz
+Big Suze
+Big T
+Big Tanz
+Big Tripod
+Big Zaff
+Big mfkn Obi
+Big ol Bag
+Big rOve
Big0neNC
+BigBad Matt
BigBadPurps
BigBaller
BigBallsagna
BigBankTake
+BigBantonio
BigBaseNZ
+BigBear675
BigBenPies
+BigBinkus
BigBlackCats
+BigBlueCox
+BigBoiiiBuzz
+BigBoyBorri
+BigBrad Wolf
BigBrownMan
+BigBtheOG
BigBug
+BigBulli
BigBustUp
BigBwanaCox
+BigChinger
+BigChuggen
+BigChung99
+BigCitta
BigCoatBrum
+BigCruch
+BigD Randy
+BigDSurgery
BigDaddyBomb
BigDaddyEddy
+BigDaddyMeme
BigDaddyNate
BigDaddyT85
+BigDick Q
+BigDillz
+BigDonKeedic
BigDrizzleRS
BigDug4U
BigEar
+BigEgoSmolPP
+BigGreenEgg
BigGuy
+BigHatxLogan
+BigHeadPG
+BigHootyBoot
+BigIronPanda
+BigKusa
BigLemonTree
+BigLez71
+BigLiftsDad
+BigLoadOfOof
+BigLovve
+BigLuke69420
+BigMainKilla
BigMav0416
BigMilkerz
BigMo
+BigNerdd
BigPapaDank
+BigPapaya
BigPepega
+BigQuadric3p
+BigRaph
+BigRat17
BigRedDog
+BigRedRodney
+BigRickusTra
BigRodger
+BigSack2
+BigSammyD
BigSappas
+BigShot BTW
BigSikTv
BigSpook
BigTastyy
BigTimmy
+BigUp01
BigX
BigYitties
+BigZikEnergy
+Big_B0g
+Big_Beard
Bigballsac
Bigbenslayer
Bigborncrazy
+Bigboy0007
+Bigboytec
Bigcros
Bigdaddy
Bigdrongo
+Bigex
Bigg
+BiggSackss
+Bigga Boi
+BiggerNDumbr
Biggie
+BiggieChonks
+BiggieMcLarg
+Biggieeeeeee
+Biggiemollz
+Biggies Maul
+Biggums
+Biggumz
+Biggus
+BiggusSnails
Biggy
BiggySauce
Bighomiedebo
+Bigjwood
+Biglex GIM
Bigmet
+Bignoob80
+BignoseChris
Bigred8616
Bigrigcoin
+Bigripper420
Bigrobowskki
+Bigtor
Bigwildo010
Bigwilly597
+BigxFisch
Bigz
+Biic
Biig
+Biig Boobies
BiigHatLogan
+Biig_Boi
+Biiggg B
Biitter
+BijnaMax
+Bijstandswet
Bijuzin
+Biked
Biku
Bikura
+Bil28
+Bilal Awan
+Bilbalbek
Bilbo
+Bilbo Dabins
+Bilbo55510
Bilboro
Bilby
Bilde
Bilie
+Bilk Mowl
+Bilkos_Ices
Bill
+Bill Niah
+Bill Smiff
+Bill Ward
+Bill Wigly
Billa
Billest
+Billfish1
Billgodyz
+Billie Boi
+Billie Gin
Billiee
Billington
Billjetti
Billogbfd
BillowyMilk
+Bills Late
+Bills PC
BillsITIafia
Billy
+Billy Blunts
+Billy Buchu
+Billy H-M
+Billy Joe77
+Billy Plates
+Billy Tonka
BillyBob546
+BillyBonka
+BillyMav
BillyNotRlly
BillyRay
Billyn
+Billyreino
+Billz xd
BillzNSkillz
+Bily Mavrick
Bilybil
+Bimmers
Bingerss
Bingo
+Bingo Carla
BingoBango
Bingus
+Bingy lol
Binki2021
+Binkleborp
+BinksBrew
+Binky Stinky
Binneli
Binny
+Bins78
+Binv
+Bio s
BioCosmic
BioFrank
+BioMasterZap
Bioavailable
Bioch
+BiofieldMage
Biohazard541
+Biomutant
+Bionic Muse
BionicKing
+BionicalWolf
Bionicle1395
Bionycle
+Biosafety
+Bioterrorism
Bip0lar
BipedalBear
Bird
+Bird Ibex
+Bird Tickler
BirdFactsr
+BirdFarmRun
Birdger
+Birdie Train
+Birdie713
+Birdies
+Birdman
+Birdman593
BirdmanZ17
+Birdmanjr07
Birdnesto
Birds
+BirdsNotRea1
+BirdyguyFe
Birelis
+Birjeldadge
Birk
+Birkenau88
+Birkenstock
Birkenstocks
+BiroGanda
Birth
+Birthfather
+Bis
+Biscape
Bisccy
+Biscuit
+Biscuit Cats
Biscuitnipz
+Bishbasher
+Bishbosch
Bisher
+Bishop Shane
+Biskante
+BiskyRizness
Bison
Bisq
Bisse
Bisun
+Bit Bald
BitScottish
+Bitcoin Z
Bitdefender1
Bitesized
Bitey
Bithc
Bits
+Bits Init
+Bitsy Bee
Bitte
+Bitterkoekje
+Bittles
+Bitttimon
+Bittykat
+Bitwalker
+Bitza
BixT
+Bizanovic
+Bizarre Hobo
+Bizk
Bizness
+Bizotic
+Bizoune
+Bizwald
Bj0rnsson
Bjarne
+Bjarngrim
+Bjergstroem
+Bjonny
+Bjorhn
Bjorn
+Bjorn XXVI
+Bk
BkGime
Bkedlikelays
+Bkeezy
+Bken
Bkguytd6
Bkostas
Bl0od
+Bl0od Legion
+Bl0odFenix
+BlG FROSTY
+BlG MOBY
+BlG POO
+BlG WOODY
+BlNA
+BlSHNU
BlZZ
Blaaaaake
Blaack
+Blablibla101
Blac
+Blaccy1
Black
+Black Atlass
+Black Bears
+Black Bro
+Black Caucus
+Black Fuel
+Black Hole
+Black Hunlef
+Black R X
+Black Rifle
+Black Upa
+Black User
+Black lv
+BlackAliss
BlackAwaken
+BlackCawfee
BlackCloud
BlackHawkEye
+BlackNuget
BlackPyramid
BlackTurtles
BlackWidowM
+Blacka
+Blackasses3
Blackbandits
Blackbelt
Blackberry
+BlackdRedHed
Blackdahlia1
+Blacked Out
Blackeye603
+Blackking435
BlacklMamba
Blacklmp
Blacknight
+Blackout20XX
+Blackpak
Blackplosive
Blacksamuri2
+Blackstar755
Blacktide1
Bladbro
BladeTongue
+BladeWizz24
+BladeXFury
+Bladeboy6
Blademail
+Bladenight69
+BladesEspada
Bladypus
Blaest
+Blaf
+Blag0
Blainyckz
BlairChan
+Blairzy
Blaise
+Blaise Green
+Blaise22689
BlaiseDebest
Blak
+Blak Deshi
+Blak Hawk987
BlakHammah
BlakTooth
Blakaraknid
Blakdragon
Blake
+Blake Bar
+BlakeOCE
Blakeboi
Blakeeeeee
Blakely
+Blakerke
+Blakey3
Blakk
Blakkeyy
Blakpn0y
Blame
+Blame Blitz
+Blame Dave
Blamed
+Blamer
Blamp
+Blank Face
+BlankTree
+Blanka1990
Blanke
+Blankfillin
+Blanks
+Blap
Blapa
+BlaqBeard
Blard
+Blare
Blaser
Blasphemy
Blast
+Blast Bepe
+Blastoise
Blastrune995
Blaszczy16
Blattermans
+Blauwe Brief
Blaze
+Blaze Hooker
+Blaze King
+BlazeBaked
BlazeItDad
+BlazeThatSht
BlazeWhale
Blazed
+Blazed GIM
BlazedRanarr
+Blazed_Chip
+Blazer Kdog
+Blazer-31
+BlazerSven
+Blazikenite
+Blazin
Blazinbiscut
+BlazingGood
BlazingREAPZ
BlazingSid
Blck
+Bleak Days
Bleak House
Bleakair
Bleasi
BledReborn
Bleekybleeky
+BleepMyBloop
Blehalol
Bleidas
+Bleiesnus
Bleifuss
+Bleken88
+BlendedWhale
Blendon
BlessOneTime
BlessTime
+Blessdd
Blessed
+Blessed IM
+Blessed N L
+Blessedcrypt
Blessin
+Blessnt
+Bleuski
Blevins33
Blew
Bleyage
@@ -2746,72 +5937,155 @@ Blije
Blimey
Blimpie33
Blimpysaur
+Blind Yeti
+Blind1
BlindByron
BlindSamael
Blindblinker
+Blindeyy
Blindspott
+Blindwizard
Blingblin255
Blinger
Blink
+Blinx337
+Blioneer
+BlissWarrior
BlissfulDrgn
BlissfulIron
Blisss
+Blista
Blistered
Blithering
+BlitzJuuls
Blitze
BlitzedBoss
Blixtslag
+BlizSukzNuts
BlizZinski
+Blizz of Ozz
+Blizzard343
Blizzartd
+Blk Kush
Blkbeard22
Blkup
Bloat
Bloated
+Bloats hard
Blob
Blobman1
Block
+Block XD
Blockhead
+Blodmire
+Blodreiina
+Blodreina 1
+Blody Mess 2
+Bloedkuul
+Bloeps
+Blogmas
+Bloke Kisser
+Blom
Blombo
Blommer1
Blonde
+Blonde Don
Blonket
+Bloo2
Blood
+Blood Face09
+Blood Lotion
+Blood Man478
+Blood Moor
+Blood Rift
+Blood Spawn
+Blood Spawns
+Blood Turd
+Blood Vials
+Blood Voss
+Blood Wyrm
+Blood0fhell
Blood4Peace
BloodWarzz
Bloodfan0
Bloodgeon
Bloodiedawn
+Bloodlet
+Bloodmaged
+Bloodrave182
Bloodraven
+Bloodredmano
Bloodshade
+Bloodsheds
Bloodsportt
+Bloody Scarf
+BloodyMurder
+Bloodyengine
+Bloodyrootz
Bloodytem
BloomBouquet
Blooms
+Bloons TD
+Blops Far
+Blorgons
+Blosh
Blote
Blouch
+Blow Off
+BlowBiden
Blowd
+Blowin Ohs
+BlowingPipe
Blown
BlownbyTwins
+Blowup Dolz
BlowyBarry
+Blu Ocean
+Blu3Mink96
+Blu3print
Blu3s
BluAnimal
+BluNightfall
BluSPANKSyou
BluSlidePark
+Blubberboy
BludMaul
+Bludclat
Bludgeoner0
+Bludime504
Blue
+Blue 420
+Blue Atmos
+Blue Fox 64
+Blue Inn
+Blue Jay
+Blue Legend
+Blue Limes
+Blue Nahuatl
+Blue Osiris1
+Blue Oyster
+Blue Summer
+Blue Trex
+Blue Winds
+Blue Ziv
+Blue305
BlueBoat
+BlueBorough
BlueCashews
BlueDHYDshld
BlueFrogsOP
+BlueGwapes
BlueHawkie
+BlueHornet
BlueJob
BlueLegendzz
BlueLemon66
BlueLine
BlueLite
+BlueMandril
BlueMeanEyes
BlueMuff1n
+BlueOverkill
BlueRanger
BlueRose91
BlueTyphoon
@@ -2820,61 +6094,108 @@ Bluebears
Bluebury
Bluecaps09
Blued
+Blueface G
Bluefir
Blueluna
Bluemoon97
Blueprint19
Blueqerry
Bluerope14
+Blues 1 Clue
Bluescreen
+Blueshores
+Bluestopher
Bluetiger919
Bluewarthog
+Bluexy
+Blueyy04
Bluez
Bluezaros
Bluff
Blufire
+Blumkohl
+Blump King
Blunt
+BluntBird
+BluntSurgeon
BluntTaster
Bluntmore
Bluntobject
Bluntology
Blunts
+Blunty Pyro
BluntzyMcGee
+BlurOfLight
+Blurr62
Blurred
+Blurtt
Blusaunders
+Blut Arteiri
Bluternite
+Bluutooth
+BluzCluzz
+Blxke
Blyat
Blyckertski
+Blyocr
+Blze
Bmart
Bmaylor
+Bmeg
Bmoot
+BmwNerd
+BnB
Bnaar
+Bo Ed
+Bo Selecta
+Bo0nies
+BoBgss126
+BoBoTaeTo
Boa92
Boabs
Boagrious
Boang
Boas
+Boater lad
+Boats N Hoos
+Bob Blinger
+Bob Burglar
+Bob Kelso
+Bob Lebowski
+Bob Marley
+Bob Shermon
+Bob Violet
Bob11790
Bob19922
Bob44th
+BobBojangles
+BobCatMilk
BobGuenille
BobNegao
BobRossDied
BobTheDaddy
BobaNeZmogus
Bobakadush
+BobbaStanley
Bobbanxd
Bobbiie
Bobby
Bobby Brawl
+Bobby JoJo
+Bobby Lash7
BobbyBigLips
+BobbyBonk
+BobbyShurda
BobbySmooth
Bobbyccf
Bobbydrake09
+Bobbysweggg
BobbyyHill
Bobi
Bobicles2
Bobidabob
+Bobite92
+Bobo Bagins
Bobrobber
Bobrusu
Bobs
@@ -2882,45 +6203,82 @@ Bobsaytoad
Bobtunafish
Bobvill
Boca
+Boca Raton
+Bocaj
+Boccle
Bockovie
+BockyOG
Bodaajamies
Bodacious
Boddy
+Bodhy
BodisDelotis
Bodjery
Bodlamadrid
Body
+Body Kit
+BodyRune
+Bodyart
+Bodybuilding
Bodyguerdson
+Boe f
Boed
Boeing
Boeing MAX
Boekanier
+Boemsjaka
Boer
+Boer Salad
+BoerJohannes
Boerboel
+Bofad Esnuts
+Bofas
Boff
+Bog Jr
BogDomen
+Bogalog
Bogart
+Bogby
Bogchamp
+Bogged Dacks
+Boggmonster
+Boggsy III
Bogi153
Boginskaya
Bogmellon
+Bogusbart
+Bohachii
Boham
Bohejmen
Bohn
BohneSaw
+BohnerSoup
BoilerMakerr
Boints
+Boise Bronco
+Bojaroff
+BokOrmen
+Bokbok9
Bokeva
Bokje1
Boko
BolaRobin
Bold
+Bold Smut
+BoldPelipper
BoldandBrash
BoldupG
Bolibomba
BolleBenny
+Bollieflex
+Bologang
+BolsaDeCoco
+Bolsta
+Boltagon
+BoltonRamsay
Boltzzzzz
Bomb
+Bomb Squad
Bombergray
Bomboy
Bombu
@@ -2928,76 +6286,171 @@ Bomer
Bommerche
Bommijn
Bompa
+Bompanero
+Bompton
Bomtastic
+Bon Pa Tin
+Bon fee
BonQong
Bonar
+Bonar Slayer
Bond
+Bond Digger
+Bond Huntin
Bond09
+Bond4MyIron
+BondBought
BondedLiam
+Bondegang
Bonden
+Bondi altti
+Bondify
Bondkyle
+Bondoos
Bonduwel
Bondz
+Bone Hawk
+Bone Man
+Bone Medic
+Bone Thugsz
Bone Ur Hole
+BoneSurgeon
Bonecrushing
Bonedork
Bonehead
Bonen2
+BonerMachine
Bones2Peach
BonesNAltars
+Bonez III
+Bonfire1
+Bonfire237
+Bong Lenis
+Bong Quixote
+Bong Squats
+BongAppetite
+BongSec
+BongTokez
+BongZiller
+Bonglefin
+Bongletopper
+Bonglewongle
+BongoBasse78
BongoRider
+Bongobodil
+Bongotree
+Bonh
+Bonjwa1
+Bonk Weekly
Bonkers517
+Bonkeykong
Bonnaroovian
BonnieTHICCC
Bonnyjoy1
+Bonnyyyyy
Bonus
Bony
+Boo Duh
Boo5tn
+BooBaker
+Boob
+Boob Dragon
+Boob Slip
+Boob zilla
+Boobini
Booblee
+Boobs Mom
BoobyHill
+Booca
+Booduh
+Booffee
+Boofqueefius
Booger
+Booger Ballz
BoogerSnacks
+Boogeyman
Boogie
+Boogie339
+BoogieCorgi
Boogieman
+BoogurBoy
Booiesblazin
Boojwazee
+Book
+Book of Sand
+Bookie Killa
Bookless
+Booksmart
BooleanSpl1t
BoolinScape
Booll05
Booloo
+BoomBangPow8
+BoomFire69
BoomFloof
+BoomMatt
Boomdead123
+Boomerclicks
+Boomfire2
Boomfire9
+Boomhakik
+Boomjuice
Boomstick08
Boondow
+Booney Tunes
Boookuh
+BoopBeepBeep
Booped
+Boopette
Boopie
+Booping
+BooptSnoot
+Boorrie
Boost
Boost736
+Boosted six
+BoostedBruh
Boostedd
Boostergold
Boostify
BoostyBetard
Boot
+Booteelick
Boothanqq
Boothyy
BootieMix
+Booties
Bootihole
Bootlesape
Bootsjunge
Booty
+Booty Dishes
+Booty Kev
+Booty McDab
+Booty Sensei
+BootyCheek
+BootyGod Zac
+BootyNasty
+Bootypixels
Booxia3
+Booyeh
Booze
Boozem
+Boozeobagins
BoozyBirdy
BoozyXander
+Bop
+Bopla
+Bopoman
+Boppin
Bora
Borads
+Boramoss
Borderguard
Boreall
Bored
+Bored Idea
+Bored Ingame
BoredMalamut
Bored_IRon5
BorenZo
@@ -3006,8 +6459,13 @@ Borgiie
Boriix
BoringName
Boris
+Boris King7
+Boris sfisgh
+Borkiin
BorkingCorp
Born
+Born Abroad
+Born to Hodl
BornToTrade
BornTwoGrind
BornofDragon
@@ -3017,203 +6475,421 @@ Boromer23
Borring
Borsten
Borussia
+Bos Marmot
Bos9
+BosNaes
+Bosco Wong
Bosh
Boshby
Bosif
+Bosnald
Bosnian
Bosnier
Boson
Boss
+Boss 4 Pet
+Boss Biz
+Boss Fights
+Boss Mati
+Boss Mei
+Boss Rarkley
+Boss Slayer
Boss4Days
BossMan
BossMann
+BossOnly100
+Bossalinie
Bosses
+Bossin x
Bossk
+BossmanJCriz
Bossnian
BossyEnemy
+Bostin Loyd
+Boston Tony
Bosw8er
+Bot Detected
+Bot Matt
+Bot Owen
+Bot To 2277
+Bot for dayz
+Bot player
BotBooster
Bothbalgone
+Botman1431
Botsii
Botsji
Bottatrice
+Bottlewin
BottnScheise
Bottrill
+Botty
Boub
Bought
+Bought Cape
+Bought Gear
+Boules
Boulli120
Bouncy
+Bound Books
+Bounzy
+Bourbon Time
Bourgeoiis
+Bournos
Boutopia
Bouwkundige
+Bouwmans
Boven
Bovine
+Bovyy
+Bow And K0
Bow1ng
Bow2ThyQueen
+BowIads
Bowbby
Bower
+Bowfa Barry
+Bowfa Dees
Bowin
Bowinkle
+Bowjacked
Bowl
BowlCutMonty
BowlNutta
BowlPacked
+BowlResin
Bowlcut
+Bowleo
+BowlerBTW
+Bowlhead
Bown
Bownerator
+Bowny20
+BowsB4Hose
Bowse
+Bowser Jr
BowserSideB
Bowwsy
+Box Art
+Box Office
+Box T
+Box Therapy
+Box of Rain
+BoxOGnomes
Boxacle
Boxedup
+Boxer
+Boxic
BoxingNugget
Boxio
Boxse
Boxxie
Boxxy
+Boxy
+Boy Mobile
+Boy Wonder
+Boydem
Boydie4427
+Boyfredaaa
+BoylifeInNZ
Boys
+Boys Broke
+Boys No Good
+BoysAndGirls
+BoysenBill
Boysennn
Boyyo
Boze
+Boze Worm
+Boze mol
BozeOog
+Bozut
+Br ay
+Br ibb
+Br yan
Br00dje
+Br0ox
+Br0wnSpit
Br3ws
+Br4dders
Br4w
Br5andon
BraBraBrad
+Braaamps
+Brabbss
Brad
+Brad RS
+Brad T King
+Brad017
BradIsAChad
BradIsChad
+BradKavanagh
BraddahPoppz
Braddahoodz
+Braddict
Brader
+Bradj_55
+Bradlem95
+Bradleyussy
+Bradlio
Bradolai
+Brads Wrath
+BradyDezNutz
+Bradycus
Bragon
Brah
+Brahamus
Brahu
+Brain Drill
+Brain Kancer
+Brain Stim
+Brain Sucker
Brainiac2018
+BrainrotMaxx
Brainsquash
Braithy
Brajen
Brak
Brakathor
+Brakence
+Brakke Bever
+Brakza
+Brallerx
Bram
+Bram91
BramDx
Brambickle
Brambo100
+Bramboo
+Brammie
+Bramxoo
Bramziee
Bran
+Bran dont
+BranDaMfMan
+Branch
Brand
+BrandNewHere
Branden
+Brandi Rose
Brandir
Brandish
Brando
+Brando n
+Brando23x
Brandog
Brandon
+Brandon 126
+Brandon TJ
Brandon9250
BrandonLarge
Brandonp32
Brandonx188
Branflakez
+Brannttt
+Bransk
+Bransterdamn
Brap
BrasilHemp
+BraskaDad
Brass
+Brassy Bird
BrastaSauce
+BratusB
+BraunBrains
+BravSlav
BraveBear
+Bravenewfy
+Braves
Bravest
Bravo
+Bravo Eagle
+Bravo Lv
+Bravo8 Scav
+Brawl
Brawlers
+BraxMax
+Braxt
+Bray0420
Braydons
Braylor
Brazden
+Brazeheart
Brazzerker
+Brb Delivery
Brblol
+Brdy
Breaches
Bread
+Bread Again
+Bread Dead
+Bread Init
+Breadatour
Breadhats
+Break3r Gabe
Breakchance
Breakdownz
+Breaver
Brech
Bredbeddle
Breeann
Breeno
Breenus
+Breeoh
+Breez
+Breezeeh
Breezy
+Breezy Jai
+Breezy2277
+BreezyMT
Breffest
Breivig
+BrejchaBoris
Brejin
+Brelinguette
Bremen71
+Brendann
Brendvn
+Brenkku
Brenkolovski
+Brennzo
+Brent Ham
Brent4000100
Brentiscoool
+Brenty88
+Breskvice
+Bressjul
Bret
BretHammy24
Breth
+Brett who
+Brett6910
+BrettThePunk
Brettdog
Bretz
+Brevetted
Brew
+Brew Dr
+Brew IPA
+BrewceWillis
Brewdo
+Brewin
BrewskiGod
Brewsley
Brewsy
+Brex
Brexit
Brezell
Brezzy
+Brian Dub
Brian-senpai
+Brian1234146
+Brian4755
Brian8781
Brianmyth
+Brick Brick
Brick49
Brickerino
+Brickhead
+Brickhooouse
Brickhouse
+Bridding
+BridgeFourr
+Bridger
+Brie Larson
+Brieenne
Brief
+Briefly
+Briggs
+Bright Day22
Brightest
+Brightly
+Brihyun
+Briickzz
Briidi
Brin
Brinfish
Bring
Bringtheheat
+Brinkler
Brinkosaurus
Brinsgr
Brisiinger
+Briskly
Brispy
+Brist
Brit
Brite
+British Diet
+British bamf
Britswelll
Brittanys
+Brittanyx
Brlm
BrntSausages
+Bro bee
+BroTwoTher
BroUFailLol
+Broad
Broadboat
+Broadday
Brobasaurus
Brobible
+Brobin
+Brocadillo
Brocaine
+BroccCheddar
BroccoIi
BroceanMan
Brocepticon
Brocknation
+Brocolis
+BroderPierre
Brodie
Brodie410
Brodie827
+Brodisi Jr
+Brododore
+Brodus Clay
Brodymon316
+Broekloos
+Broficiency
+Broft
Brogfrogdog
+Broha
+Brohard
Broiled
+Broken Cpu
+Broken DPS
+Broken Hip
+Broken Top
BrokenBones
Brokenn
+Brokensunset
Brokk
+BrokkMachine
+BroknScrotum
Broko
Brolic
Broly
Bromagic
+Bromatron
Bromerly
+Bromosapienn
+Bromz
+Bron Yr Aur2
Bronkey
Bront
+Bronxie
Bronxy
+Bronze Cow
+Bronze Eel
+Bronze Moose
Bronze5
BronzeDong
BronzeWorthy
+Bronzegnu199
+Bronzr
Bronzy
BrooceWillis
Broodje
@@ -3221,38 +6897,69 @@ Broodoos
Brooke
Brookesbeast
Brookfield
+Brooksher
+Brooksy
BroomInBum
Broomi
Brootloops
+Brootuss
+Broque
Bros
Brosaph
+Brosoul
+Brossy
Brotatochip
+BrothaForest
Brother
BrotherChong
+Brothermon
Brotherr
+Brotholomew
Brown
+Brown692 GIM
+BrownTree
+BrownTree63
Brownecakes
Brownmo
+Brrandon
+Brrd
+Brrinn
+Brrr Zeus
+Brthdy
+Bru now
Bruce
+Bruce Jenr
BruceJennder
BruceNutty
BruceWayme
Bruceh
+BruciebearTV
Bruenor
+Bruffell
+Bruges
Bruh
Bruhh
+BruhhChungus
+Bruhs
Bruiser
Brumaks
Brumle
Brundeen
Brundles
+Brundo
Brungoil
+Bruno p15
Brus
Brutal
Brute
Brutescape
+Bruthar
+Brutified
+Brutzli
Bruut
+Bruva Eww
Brvte
+Brwny-mix
Bryan
BryanFury
Bryannn
@@ -3261,88 +6968,152 @@ Bryce
Brychu
Bryci
Brycikins
+Bryham0
+Brynildsen
+Brynmor
Brys Journey
Bryson
Brysons
Brystreams
Bryu
Bryymstick
+Bsakke
Bsaunders0
+Bse
+Bsgs
Bsketbl
+Bskli
+Bslayer
Bthomson
Btownballer
Btrec
+Btv
+Btw Das
+Btw Guy
+Btw tietjes
+BtwBallo
BtwImJoe
BtwTradeMe
+Bu nny
Bu11itt
+Bu11seye00
BuBszs
+BuDzNBooze
+BuLLeT PVM
Bub Josh
+Bub389
Bubba
+Bubba Gage
+Bubba Watson
Bubbateux
+Bubbba
Bubble
+Bubble Butts
+Bubble Tea65
BubbleBlob
BubbleJuice
BubbleOLuke
Bubbleguy
Bubblenab
BubblesGO
+Bubblies
Bubbo
Bubbz
+Bubgi moment
+Bubo
Bubu
Bubzs
+Bucc ees
+Buccsta
Buchu
+Buchu Bong
+Buchu Daddy
Bucito
Buck
+Buck Oakly
BuckNastyy
Buckeye
BuckinThanos
+Buckjames
Buckner1
Buckner20
+Bud Right
BudLightBtls
+BudSake
Budabupbup
Buddaball
BuddahCheese
+Buddeke
BuddhaPuck
+Buddweiiser
Buddy
+Buddy Waters
BuddyGuy
+BuddyJ
Budgen
Budget
Budgets
Budjeke
Budpotamous
+Buds Bud
+Budsteel
Budster
Buduhhh
+Budward
Budwise
+Budzinski
Budzliteyear
+Budzyn
Buff
+Buff Bezos
+Buff Mafia
+BuffFridge
Buffel
+Buffel x
Bufubu
+Bug V2
+Bugalado
+Bugaloo
Bugazzi
+BugcatMoo
Bugg
+Bugg XO
+Bugis x
Bugs
+Bugs c
Bugsaur
+Bugyo
Bugyy
+Bugziee
Bugzy
Buhe
Buhnuhnuh
Buhole
Build3d
Built
+Built Dfrnt
+BuiltToSpill
BukesCarKey
Bukkakey
+Bukkele
+Bukmyhr
+BukseFar
Bukt
Bula
+Bulb_a_saur
Bulba
BulbaThor
Buli
Bulk
Bulkier
BulkyTrout46
+Bull Shifter
BullSharkBob
Bulldawg1289
Bulldogs815
Bulldozer297
BulleT1017
+Bullerbyn
Bullet135191
BulletBlitz
Bullschiff
@@ -3351,91 +7122,180 @@ Bulltill
Buloz
Bultac
Bulte
+Bum Hole
+Bum Vinegar
BumPounder
Bumble
+Bumblethumps
Bumjam
+Bummer
+Bummholee
+Bumveld
+BunanaMuffin
+BunanuhBread
Bunceylad
Bundle
+Bundy red
+Bungle Bug
+Bungstar
BungusBoi
+Bunion
Bunjamino
+Bunni Pig
Bunns
+Bunns Dying
Bunny
+Bunny DeIron
+BunnyRabb1t
Bunnytrack
+Bunq
Bunryl
Buns
Buntian
+Bunty Boy
Bunzosteele
+Buorin
+Bup
Buqqi
Bur eye on
+Bur y
+Burak I
Buray
Burec
Burens
+Burensbd
Bureze
Burezz
+Burg de Rott
Burger
+Burgerb0y
Burgerr
+Buri
Burial
Burials
+Buried Mole
Buriial
Burkekey
+Burkkle
Burly
+Burlyy
+Burmecia
Burn
+Burn Herbal
+Burn With Me
+Burn t
BurnMyChi1d
+Burna Boy
Burnardo
Burnari
Burnceller
Burned
BurnedIron
Burners
+Burnetplanet
BurnhamAll12
Burnin
+BurninOctane
BurninStarIV
BurningBrian
+BurningCole
BurningFight
BurningKushh
Burningdavid
Burninghippo
+Burnley
Burns
+Burns Green
Burnstown
Burnt
+Burnt Bonez
+Burnt Bunz
+Burnt Senpai
+Burnt cod
+Burnt lol
BurntT
+Burntmeat
BurnzWhnIPvp
+Burnzaloree
Burnzie
Burp
+Burpenen
Burpsy
Burrkle
Burst
+Bursts
Burwell
Bury
BuryMeDeep
Busch
+Busch Ebba
Buschhhhhhhh
Buschhuscher
+Buschkilla
Bushbaby
Bushido
+Bushido Jack
+BushidoNegro
Bussch
Bussino
+Bussy Bwana
Bust
Bustard
Busted
+Busted Shaft
+BusterBlader
+Busternut
+Bustinbibear
+BustyBarry
+BustySaurus
+Busy Phat
BusyDayToday
BusyRightNow
ButMuhMain
+Buthole
+Butinz
+Butje Kef
Butlergunner
+Butt Clouds
+Butt King
+Butt Liquor
+Butt Plog
+ButtChugr
+ButtExpert
Butter
+Butter Sock
+ButterSirup
ButterSyrup
Butterbur
Butters
+Buttgers
Butthxle
ButtnCLICKER
+Buttt Mud
Butzaf06
+Buu Blat
+Buuloki
+Buurtpooier
Buus
Buutsika
Buwuchu
Buwuchuu
+Buxi
+Buxom Lady
+Buy Wards
+BuyBitcoin01
+BuyGF_1GP
+Buyer Beware
Buying
+Buying IG GF
+Buying gf 2M
+Buying99rc
BuyingRsGfs
+Buzi Mi Daj
+Buzi Syrom
Buzin
+Buzin Benji
+Buzy
BuzzL1teBeer
BuzzMax
Buzzard
@@ -3444,121 +7304,294 @@ Buzzlghtbeer
Buzzzwin
Bvanana
Bville23
+Bwan a
Bwana
+Bwana Brah
+Bwana Haz
+Bwana I
+Bwana Rat
+Bwana TK
+Bwana Zander
Bwana-senpai
BwanaObama
+BwanaOnDrugs
+Bwanah
Bwananabread
Bwanario
Bwanner
+Bwarath
Bwekfast
Bwekfeest
Bwie
+Bwila
Bwse
+Bxao
Bxdhi
+Bxo
+ByDesign
+Bye Felicia
+Bye Friend
+Byles
Bynguyen
Byrd
+Byrd Gang
+Byrd Park
Byrne
ByteMeM8
Byzo
Bztm
+C 678
+C A M R O N
+C A R S 0 N
+C A R S O N
+C Biologist
+C D C D C D
+C H l S E L
+C H l Z E L
+C HARL IE
+C HlCKEN
+C J 102
+C L A M P
+C L U E 5
+C Maelstrom
+C Mauricio
+C OLLINGWOOD
+C R I X US
+C RoyMustang
+C Rx
+C S
+C Sol
+C Trafalgar
+C W
+C Wills
+C a c h e
+C a le b
+C a r lo
+C a sp er
+C alvarium
+C amel
+C e v
+C eej
+C h a ds
+C hap
+C hristt
+C ip
+C itadel
+C lhris
+C nr
+C ntmaster
+C o r a l
+C oach
+C orgi
+C osmos
+C oty
+C rafter
+C raig
+C raiig
+C rux
+C u r t
+C x L
C-11
+C-53
C-Dom
+C-Stones
+C-bat
+C00RS Light
C00per
+C0Dl
+C0LTE
+C0MBAT 126
+C0RAZON
+C0SA
C0WK
C0XG0BBLER
+C0Xsuka4gp
C0YS
C0c0nUt
+C0dy
+C0dyssey
C0nner
C0wanz
C11 H15 NO2
+C137 Beth
+C18
C18H27NO3
+C204
C2okies
+C3 P0
+C33
C3Pz
+C4 RL
C450
+C4L1BRE
C4RL
C4RNAG3
+C8M
+C9rl
CA5E
CAKESNIFFER
CALL
+CAMBO D N
CAMEL0T
CANNONlNG
+CANT SPEAK 0
CAPITALIST
CAPSLOCK
+CARAPlLS
CARDlFF
CARROLLYZER
+CATS GO NYA
CATsmoothies
+CBC
+CBD Brownie
CBK20
CBMPeterson
CBas
CBomb
+CC 9
+CC HM
CCCCFF
CCCO
CCatt
CChuk
+CConnor
CDKein
+CDR
+CDRMark
+CDawg420
CEClL
+CEL4L
+CEO OF ARK
+CEO of TOB
+CF5
CFoodBisc
CFour
CG MindPr0
+CGA
+CGC Zeus
+CGR
+CGoldy
CH1P
CH3CKMYSW4G
+CH4OS_REIGNS
CHATBN
+CHEEFO
CHIEF
CHIEFWHALE
+CHIEFxKEETH
CHOF28
CHOLEZmusic
CHOPSTlCKS
CHOSENBYNAME
+CHR187IAN
+CHRlS PRATT
+CHRlSDUDE
+CHUCKDABANK
+CHUDZY
CHULIGAN911
+CHURNlN
+CHlC-FlL-A
CHlCKENS
+CHlCKNUGGET
CHlLDS
+CIA GF PsyOp
+CJ McCreery
+CJ2K
+CJB_01
+CJPez
CJlivin11
CJoaboneP
+CK the Wise
+CK2
+CK9
CKSKEE
CKVY171
+CL0wn Inc
CL3O
CLIIllIIllIT
+CMBloodcraft
CMER
CMMCTk
+CMU Chips
CMoneyTwo
CN77
CNC2112
+CNGT
+CO maxplayer
+CO0RS
CO1N
+COKECOKECOKE
COLE
COM3THAZINE
+COM3TS
CONFlDENT
CORONA
CORP
+COTTONPlCK3R
COVID
+COX Kane
+COYM
COYMauves
+CP8
+CPA Scape
+CPR
+CPT Morghun
+CPT-Rock69
+CQJB
+CR1SPY_BAC0N
CR4ZYH34D
+CR7
+CRAI9
CRLmastrFlex
CRSSD
CRTS
CRUSlR
CRY0GENIC
+CRlMP
CRlP
CRlSTO
CRlTIC
CRtallboy
+CS6
+CSG0
+CSchicky
CT42
CTFU
+CV90
CVID
+CVTRILLOG
+CYP 3A4
CYP450
+CZHANG
+C_mrade
+Ca 11
+Ca m el
Ca3ino
+CaL4MiiTYxX
CaMOOflaged
+CaPl
Caam
Caater
+Cab Up
+CabbageSeeds
+Cabbi_cs
+Cabdi
Cabela
Cabido
+Cabinetsalt
+Caboose121
Caboucha
Cabouchi
Cachalot
Cache
Cachet
+CacklingMagi
Cacoadragon
Cactus
Cactus9k
+Cactusaak
+Cadallic0
+CadmiumBird
Cadov
Caduzitcho
Cadzie
@@ -3567,143 +7600,290 @@ Caelanity
Caelums013
Caerus
Caesar
+Caesar Pasta
+Cafe Fraiche
+CafeZing
+Caffeine
+Caffeine Use
Caffeiner
+Cages
+Cagrets
Cahors
+Cahsmo
Caide
+Caifan
Caifanes
+Caillou hobo
+Cailthun
Cainie
Cainn
Caio
+Cairn08
Cairo
Caiser
+Caitlin Rice
Cajjj
Cajun
+Cajun Blood
+Cajun Fox
+Cajun Fries
+CajunCrimson
Cake
+Cake qp
CakeBoss1337
+Cakeboy 43
+Cakefound
+Caketins
+Cal Fong
+Cal l u m
+Cal-Mag
+Cal_C
+CalamityD
Calamityy
Calb_Potta
Calbod
Calcab
Calcd
+CalciferGIM
+Calcio
CalculateWhy
Calcusource
+Cald0g
+Caldaris
Caleb
+Caleb o_o
Caleeba
Calf15
Caliace
Calibeafall
Calibrated
+Calibur
CaliburZ
Calico
+Calierazon
+Califaa
+Califauxeous
+Califirona
Calimandro
Calipha
Calipso
+Calist0
Calisterie
+Calivego
Call
+Call Me Milo
+Call me Cham
+Call me m16
+Call0
CallMeCletus
CallMeGeorge
CallMeJAS
CallMeJoey
CallMeKeen
CallMeKeezy
+CallMeLeger
+CallMeNoLuck
CallMeSofD
CallMeStevo
CallMeTipz
+CallMeow
+Call_Me_Arty
+Callaghxn777
+Callboy
Calliburr
+Calliott
Callisto
+Callisto Cub
CallmeZach
Callmekee
+CallumTM
+Calluum
+Calm Chris
CalmCombo
CalmDownSon
CalmYourBits
Calmoran
+Calo3
+Calquat
+CalquatFruit
Calster26
Calu
Calum
Calvi
+Calvi n
Calvin
+Calvin924
Calyxsys
Calzano
Calzone
+CalzonePizza
+Cam Jong-Fe
+Cam Jong-Un
+Cam Rebuild
+CamAlot_iron
CamDeezy
CamLite
+Camakie
Camaniack
+Camargue
+Camb o
Cambeezy
+CamboSliice
Cambridge
+Cambulance
+Camdenan
+Camel Glue
+Camel Neckit
+CamelActive
+Camelm8
+Camerocity
CameronNeal
Camhanaich
+Camil
Camion
Camise
Camm
+Cammo545
Cammy
+Cammy Ded
Camosaur
+CampBingBong
Campbell
Camperfish
CampinOnline
+Campisii
+Campus Crew
Camsdadddy
Camshows
Can Berry
+Can Fe Spoon
+Can U C Me7
+Can it Bozo
+Can0fBeans
CanChem
CanMJ
+CanManCannon
+CanOManBFTM
+CanUGetAway
Canada
CanadaBawd
+CanadaGuuse
+CanadaScape2
CanadasChief
Canadian
+Canadian Bc
+CanadianDevi
CanadianYeti
Canadiehn
Canadiian
+Canan32
+Canberk
+Cancel
Cancelled
+Cancelled It
Cancer7
+Cancerfree24
Cancerios
+Canderos
+Candlebox
Candrok
Candy
CandyFlipin
CandyKing42
-Capt
-Capt420
+CandyKing420
+CaneCorso
Canear
Canehdiann
Canibalistic
Caniz
Cann
+Cannabinoidz
+Canned Beer
+CannibalGK
Cannibble
CannoliBoi
+Cannolis
Cannondorf
Cannot
+Cannot Login
+Cannrrrr
+Canon Bob
Canook
Canowhoopazz
Canserber0
Cant
+Cant Quit 07
CantCasino
+CantMaxBc69
+CantTalkPerm
CantThink
+CantTradeTho
Canta
Cantaloupe
+Cantclik4sht
Canter
Cantina
+Canting
Cantu
+Canyonranger
CaoFasho
+Caoe
+Cap E Bara
Cap10
+Capalotty
+Cape Fear
+Cape Max
+Cape Seller
CapeScape
+CapeZer0
Caped
Capez
CapiiTano
CapitalGainz
Capitalise
+Capitalist34
+Capn Wahle
CapnCookd
CapnMeliodas
Capniq
+Capnplant
+Capo Yamato
Capone
Capos
+Capotia
Cappe
Cappei
+Cappie Greek
+Capreol
Capriccio
Caprius
Caprix
Capsule
+Capt
+Capt Bobette
+Capt Bumi
+Capt Dave
+Capt G
+Capt Halo
+Capt Hootler
+Capt Kenway
+Capt King
+Capt Kumquat
+Capt Murdoc
+Capt Plank
+Capt420
CaptHardon
CaptLongJon
+CaptPleb
CaptZilyana
Captain
+Captain Jack
+Captain Lev1
+Captain Tast
+Captain Tec
+Captain Y
+Captain Zoso
+CaptainAlice
CaptainCanto
CaptainCox
CaptainDom
@@ -3711,6 +7891,7 @@ CaptainDredd
CaptainLuker
CaptainOboy
CaptainObvio
+CaptainWalt
Captainshiny
Captainzzz
Captan
@@ -3718,44 +7899,62 @@ Captcha
CaptinA
CaptinKorasi
Captinrandom
+Captiva
Captn
+Captn Bear
+Captn P00F
+Captn Sqirk
CaptnCommand
CaptnMittens
Capu
Capussi
+CapybaraDung
+Car Ram Rod
CarNalgas
CaraDuraMC
Caracal
Carademlof
CaramelSlice
Caratheodory
+Carbo Cat
Carbolic
Carbon
+Carbon K
CarbonCarbon
Carbonist
+Carbos
Carbyne
Carcinoid
Carde
+Carden
CardiacKemba
+Cardinxl1
+CardyZ Main
Care
Carea
Caregiver
Careo
+Caricapaya
Cariej
CarimsEygon
Carino
+CarjUIM
Carjacking
Carked
Carkis
Carkosa
Carl
+Carl Sagan
CarlBarker
CarlDerp
CarlSagan80
Carleton789
Carlin
+Carlingue
+Carlitos
Carlo
CarlosM
+Carlosjavily
Carlrip
Carls453
Carly
@@ -3763,6 +7962,7 @@ Carlyle
Carmillae
Carna
Carnadova
+CarneGrande
Carnie
CarnifexVeil
Carnitas
@@ -3771,93 +7971,188 @@ Carnzlo
Carolan
Carp3di3m13
Carpe
+Carpenters
Carpi
Carr
CarrickDaddy
CarriedBayo
+Carrot s
+CarrotMilker
+Carrs Pasty
+Carrutt
Carry
+Carry Yak
+Carry9otter
Cars
+Cars Suck
Carsillas
Carsten10
+Carterfish
+Cartman
Carton
+Cartzy
+Caru
+Carvdogg17
+Carve
+Caryopsis
+Cas1a
CasZeal
+Casamigos
+Casawn
+Casc
Casca
+Cascola
Casell
+Caseten
CaseyWaff
Cash
+Cash two
Casherbob
Cashewk
+Cashlemke
+Cashs Main
Casino
+Casino Sand
CasinoProblm
Casketball
Casmatos
+Cass Cath
CassTheGod
Cassarole
Cassath
Casserolio
Cassidyy
+Cassie Aram
+Cassim
+Cassirer
Cast
+Cast Rate
+Cast Turbo
Castello
Castilla
Castorly
+Castrophany
Casual
+Casual Man
CasualChris
CasualGrinds
CasualPete
CasualStorm
+Casualdkdk
+Casualty
+Casvel
+Casviel
+Cat Man1001
+Cat Nips
+Cat Shaped
+Cat Smuggler
+Cat Snacks
+Cat Soup
+Cat Woman
+Cat got out
+Cat shirt
+CatBoyInHeat
+CatPandas
CatPissRNG
CatSaysMeow
+Cataclysm55
+Catala
Catalepsy
+Catalyticx
Catan
CatchTheDrop
Catchin
+Catchin Pets
Catchlove
Catdog1280
+Catechism
+Cater Champ
+Catfish Rock
Catflap
+Catgirl Cafe
+CatgirlSan
Cath
Catharina
Cathays
Cather
Catherbae
Cathuntdog
+Catman31
Catnip
+Catnip Cutie
Catnor
Catomic123
+Catra Meow
+CatsnCars
+Catsnarterrr
+Catspeak
+CattoKitty3
+CauZ
Cauldrons
Caulf1eld
+CaulkPushUps
+Caustic
Cauterised
Cavaleiro888
Cave
+Cave Closer
+Cave Horror
Cavern
+Cavern Freak
Caves
Cavos
Cavs
Cavsy
+Cawrin
+Cayk
+Cayman 07
Cayrus
+Caza Lowell
+Cazaq2
Cazik
Cazos
Cazum
Cazwise
Cazzakin
Cazzy
+Cba Ofc
+Cba To Carry
+Cba To Share
CbarDaKing
+Cbetrs
+Cbf Playing
Cbot05
Cc17wo
+Ccn
Cd777
Cdale
+Cdoc
+Ceana
+Ceb
Ceber
+Ceceil10
Cecetra
CedIsMySon
+Cedty
+Cee real
+Cee-Jay
+Ceebooty
CeeeHooo
+Ceeege
+Ceejaydjj
+Ceekay
Ceeon
Ceeps
Cefiro
Ceio
CekicGuc
Celach
+Celach 2
Celadus24
Celazer
Celebio
+Celer0
+Celesdel
CelestialSun
Celestive
Celestron
@@ -3865,130 +8160,229 @@ Celhon
Celi0
Celiac
Celikanen
+Celine Dijon
+Cell Saga
+Cell Z Saga
+CellaDwella
Cellectric
Celli
Cellmate
Celms
+Celrisen
CeltBrenny
Celtic
+Celtic Hero
+Celtic555
Celtica
Celyzh
+Cemen Demon
Cengkeh
+Cennolink
Cenpie
+Censor
+Centac
+Centennials
+Center Fit
Centers
+Centershot5
CentraIka
+Central
CentralC
+Centrimag
Centropy
+Ceo of Timbs
+Ceoe
+Cephalopods
Cepp
Ceppt Irn
+Cepxy
Cera
Ceraseus
Cerati
Cerb
+Cerb R Us
Cerberus
Cerberus98
Cercle
Cerea
+CerealGuy
+Cerebro
+Cerenade
CeriGG
+Cerkev
Cermi
Cerpin
+Cerpin Taxt
+Cerpooch
Cersey
+Cersky
+CertIronBoy
+CertifiedPoS
Cervantes18
CesarPalace
Cesema
Cetr
Cets
+Cev
Cevap
Cevarus
Ceverie
Cewl
+Cewl Hwip
+Cexilius
Ceyyl
+Cf b4
Cfretz244
+Ch i
+Ch i c k en
+Ch ief
Ch00bies
Ch0c0tac0
+Ch1cag0 Bear
Ch1mes
+Ch1noLf
+Ch1zz
Ch33sy
Ch3ckMat3
Ch3spy
+ChNPP
+Cha rles
Cha0ticAngel
ChaCha
+ChaCha Benny
ChaSniff
+Chaavez
Chaboud
Chaboul
+Chacaliando
+Chacksen
Chad
+Chad Draven
+Chad Stride
+Chad Vibes
+Chad Wardn
+Chad again
+Chad isAFK
+Chad okeefe
+ChadBehavior
+ChadCor
ChadFratStar
ChadMadLad34
+ChadR3333
Chadacas
+ChadamantBar
Chadders
Chadding
+Chaddyboy
Chadga
+Chadieus
Chadkiller76
ChadronX
+Chaehee
Chael
+Chaendo G
Chaewon
+Chaga Chai
Chain
+Chain Mace
Chainn
Chainsaw
+Chainsaw Guy
Chair
ChairmanMao
+Chaiyse
Chaken
+Chakleton
+Chakra Monk
+Chal1ce
Chalba
+ChaldeanGIM
+Chalgrove
+Chalk Bar
Chalked
Challandria
Challll
Chalva
+Cham Cham
+Chamariapero
ChamberBeast
Champ
+Champ Ryan
+ChampGaryOak
Champagnole
Champiion
+Champion910
Championship
Championz
Chance2Skill
+Chanced
Chancellor
+Chancie
Chandler737
Chando
ChangWu
Change
Changebear
Changes
+ChangrOfName
Chanios
+Channel
+Channon
Chaos
+Chaos River
ChaosBandego
ChaosCleric
+ChaosD00M
+ChaosGIM
+ChaosInbound
ChaosJS
ChaosedElf1
Chaosfish33
Chaoslynx
+Chaotic Cole
ChaoticH0B0
ChaoticMoott
+ChaoticScorp
Chaotixx
Chaottic
Chaoz
Chap Zachman
+Chap em up
Chapels
Chaplain
+Chapo
Chapoo
Chapp
+Chappe
Chappers
Chapter
+Char Zeta
+Char lang
+CharL-32
Character252
Charamio
Charatcur
Charben
Chardonn
ChargeN
+Chargez
Chariot
Chariten
+Charitonin
Charizardz
Charlez
+CharlieFTG
CharlieFine
CharlieOHair
+CharlieScene
CharlieTheIV
CharlieWork
Charlieb9
+CharliesFE
Charloi
Charlotta
Charltonb
+CharlyDarwin
Charm
Charmey
Charmin12
@@ -3996,208 +8390,374 @@ Charmos
Charmoul
Charms
Charmy
+Charon0
Charor
+Charred Yews
Charrysteas
+Chartart
+Chase Goals
+Chase Jones
+Chase Riley
ChaseGuy
ChaseNBake
ChasePP
Chaser959
+Chasing Pets
+ChasingDragz
Chasmata
+Chasse
+Chastised
Chatorbait
Chattanugget
Chatto
+Chatty
ChaukletZ
+Chauman0819
Chauska
Chavi
Chaz
+ChazMac
Chazzdiddy
ChazzedBangr
Chazzy
+Chazzy Paws
+Cheah
+Cheaps
Check
+Check Point
CheckAndMate
CheckRaiseHS
CheckTheWiki
CheckWikiPls
+CheckWikiPlz
+Checkaaa
Checker
+Checkley
Checkmate
CheddLaurent
Chedda
Chee
CheecHnChong
+Cheech Blaze
+Cheeek
Cheeks
Cheeky
+Cheeky Peeky
+Cheeky Prawn
+Cheeky Tom
CheekyBanter
+CheekyCheeto
+CheekyDrop
Cheelee
Cheeno
Cheepnis
Cheermancy
Cheers
Cheese
+Cheese Borgr
+Cheese Slice
+CheeseTax
+Cheesebubby
+Cheeseilton
Cheeseit32
+Cheesteri
Cheeswiz
+CheesySweet
Cheesyrice
Cheetas
CheetoRatFan
+Cheetu
+Cheex
+Cheez-Zits
+Cheeze Caper
+Cheeze Nepz
+CheezeOx
Cheezer2000
Cheezewiz0
Cheezo
+Cheezuz
Cheezyboy25
Chef
Chef Bu Fang
+Chef Malone
+Chef Mihali
+Chef Peter
+Chef Poopy
+Chef Special
ChefBoiRJay
+Cheff Zaya
Cheffrey
Cheffy95
+Chefs
Cheif
Cheimuu
+Cheiquispir
ChelTheNelf
+Chelate_D
+Chello Sexy
Chellyy
+Chelsea Bot
Chelsko
+Chelsy
Chelx
Chemanelo
ChemicalFade
Chemleech
+Chems
+Chen Luu
+Chendlar
+Chenzooo
+Cheomeister
Cherba
Cherisu
Cherno-byl
Chernoblyat
+Chernobyl
+Cherri Bomb
Cherry
+Cherry Field
Cherrydown
CherryxPiex
Chesco
+Cheshmate
Chesscape420
ChessyQ18
Chessyboi
Chestbrah
+Chestbroh
+Chester63
Chesterfi3ld
Chestickles
+Chestnut
Chestodor
Chet
+Chet Baker
+Chet Max
+Chet Ripley
+Chettos
Chevaliers
Chevrolet
Chevron
ChevyB1998
Chew
+Chewbacca No
Chewbakkaah
Chewby
+Chewby Lt
Chewed
Chewitt88
Chewy
Chey
+Chi hiro
+Chi11 Wi11
ChiCity
+ChiIdo
ChiLongQua
+ChiamataM
+Chibattagreg
+Chibber
+Chiboubo
Chicanery
Chiccbacca
ChichaBabby
+Chichhuve
ChickeNOG
Chicken
+Chicken Cat
Chicken996
ChickenRings
Chickenelli
Chickenneth
+Chickens Inc
Chickensnout
Chickerolies
ChickinNugie
+Chico Bean
+Chico Cool5
Chicold
Chicopee
+Chid Heredit
Chie
ChieFbLuntz
Chief
+Chief Checka
+Chief Gordy
+Chief Herres
+Chief Otaku
+Chief Seneca
+Chief Sound
+Chief Toxine
+Chief812
+ChiefBobert
ChiefSmakaHo
Chiefss
ChieftonP
Chiekz
+Chiester 45
Chigginwangs
Chiiiraq
Chika
+ChikenLiro
Chikinbone
Chiksan
+Chikupa
Chilasr
Chilaxinman
Chilcos
+Childhoods
Childish
Chilgamesh
Chili
+Chili Pepper
+Chili Popper
ChiliTurd
Chilibean
ChilidogBank
Chilidoger
+Chilipupper
Chill
+Chill Mate
+Chill Maxxy
+Chill Zege
ChillAssGuy
+ChillHill
+ChillScape
Chillagalet
Chilled
Chilli
+Chilli Ramen
+Chilli dong
+ChilliPesto
+Chilliam
+Chilliburns
Chillmitch
Chillrend
+Chilly
+ChillyPolarB
ChimJongUn
+Chimbilin
Chimera364
Chimire
Chimmy
+Chimneybob
+Chimp10n
+Chimpywimp
ChinStar
China
ChinaInBox17
ChinaSupaman
Chinanumber1
Chinchompin
+Chinchonkerz
Chinchoopa
+Chinegroe
Chingie
+ChingwaChing
+Chinley
Chinolc
+Chinook Bram
+Chinquila
Chintan
+Chio Bu
+Chionophobia
Chip
Chip Black
+Chip Skylark
ChipRain
+Chipotl e
+ChippedHam
ChipperyChip
Chippy
+Chippy btw
+Chipsbok
+Chipsncrackr
Chipster321
Chipz
Chisa
Chisels
+Chiswick
+Chitus
ChivZz
+Chiw
ChixDigTbows
+Chiyo-Father
+Chizle
+Chizzet
Chkn
ChloeTragedy
+Chloemacmate
Chloes
+Chloramine
+Chnce
+ChoNaWiadro
+Chob
Choccazz
Choche
+Choco Flex
+ChocoMeteor
Chocoblow
Chocobo
Chocobos
Chocomalo14
+Chocys
Chodemate
+Chodless
Chofl
Chohanzzz
Choi
Choicess
+Choke Daddy
ChoklatMoose
Chola
Cholesterol
Chom
+Chombe
+ChompVonDile
Chompadile
+Chompakilla
Chompy
+Chompy chick
Chompys
Chon
ChonYee
+ChonerScaper
+Chongsy
+ChonkPenguin
Chonksta
+Chonky Duck
+Choobage
Choobcob
Choochy
Chooks
Choomb
Choooooooch
Chop
+Chop Rips
ChopSthix
Chopemania
Chopin
ChopinDolphy
+Chopinaway
+Choppa
ChoppinWork
Chordes
Choreboy
Chornflakes
Choronzon
Chosen
+Chosh
Chow
Chowfun
+Choybin
Choz
ChozenGod
+Chozen_Azn
Chozo
+Chozo Lite
+Chozo Statue
+Chqse
+Chr Mck
+Chr0nl
Chranic
ChrdyMcDenis
Chri5ty
@@ -4205,11 +8765,21 @@ Chriiiis
Chriisgg
Chrimon
Chris
+Chris F
+Chris JR
+Chris Luxon
+Chris P3
+Chris Slays
+Chris xD
Chris0527
Chris1f
+ChrisCleans
+ChrisFate
ChrisHanson
ChrisKringle
+ChrisOnTilt
ChrisTheUnit
+ChrisThomps
Chrisadk
Chrisha
Chrishowe
@@ -4217,67 +8787,122 @@ Chrisible
Chrisjay
Chriskies
Chrisob
+Chrisog
Chrispy
+Chrispy-sama
Chriss
+ChrissPIBass
Chrissy
+Chrissy Tooh
+Chrissyx
Christ
+Christ an
+ChristFarley
Christiannnn
Christidog
Christlan
+Christmonkee
Christoffer
Christoker
+Christopher
ChristyCloud
+Chrisxmas
Chriz
+Chriz297
Chrizzoz95
Chrl
Chroist
Chromadorr
Chromalox
Chromatica
+Chromi
ChromieOX
Chromixe
Chronepsis
Chroner
Chronic
+Chronic Jack
+ChronicChris
Chronicflame
ChronnerBro
+Chrono Aeon
ChronoKiller
Chronoburn
Chronomancer
Chronorage
Chronos
+Chronosanity
+Chrostopher
+Chrunndle
+Chrusee
+Chrysaorr
Chrysaros
Chryserys
Chub
Chub n Tuck
+Chubafet
Chubby
+Chubby Nomad
+Chubs-Magee
+Chubsy Bubsy
+Chuchin
Chuck
+Chuck Hoots
+Chuck Prime
+Chuck truck
ChuckChan
ChuckDogg
+ChuckMeDaddy
+ChuckNat
ChuckSpedina
ChuckTesta
Chuckerberg
+Chucky
Chuda007
Chug
+Chug Butt
+Chug KoolAid
ChugMyPPot
+Chugg Jugg
Chugga
Chugger
Chugging
+ChumSlugger
+Chuml
+Chump
+Chumpingham
ChunchuloX
+Chunetops
Chung
+Chung us
+Chungus-kun
ChungusClam
Chunk
+ChunkiCinni
+ChunkmanFYB
+Chunksy
+Chunky Nan
+ChunkyGimp
Chunkybudda
+Chupa
Chupperino
+Chur Broo
+ChurchMouse
ChurchTuring
Churchfield
+Churchieboy
+Churd
Churlrunone
+Churnin
Chuzyz
+Chvrles
Chxmpanzee
Chyky
Chyna
+Chyurr
CiSCii
Ciamballer
+Ciaphas Cain
Ciastkowy
Cic321
Cicely
@@ -4286,241 +8911,447 @@ Cici
Cicindelinae
Cider
CieloQueen
+Cigarettez
+Cigblaster
+Cigggy
+Ciggitybutts
Cighan
+Cignii
Ciji
+Cim
Cimakas
Cimelia
+Cinamin
Cincinnatus
Cinderal
Cinderhulker
+Cindirty
+Cinemaxxin
CinmarRS
+Cinoxe
+Cinqoo
Cinquain
+Ciomsa
+Circle Pea
+CircleStrafe
+Circleone58
+Circomcised
+CircularSaw
+Circumflexx
+Circus Clown
Circuz
Ciresidnal
+Cirexi
Cirez
Cirmit
+Cirn0
+Ciroren
+Cirrus Virus
+Cirth
Ciryatur
Cisco
+Cisk
Cisplatin
Ciszak1996
+Cit Funt
Citadel
+Citadel Wyrm
+Citate
CitizenTay
CitrusLemons
+CitrusTree
City
+City Limits
+City Morgue
+City Perks
Civeo
+Civz
+Ciziin
+Cizre
Cizzakillss
+Cjg117
Ckale
+ClGARO
+Cla ws
Claca
Claco
Claiborne
+ClairDeLune
+ClaireFarr0n
Clambam
Clamburglar2
+Clan thmoker
ClanChats
+Clan_Daddy
ClankImaTank
Clannyy
Clanworld
Clap3d
+ClapMaster4K
ClapMeMommy
+ClapYouDown
+Claptrap
ClarKah
Clardy2
Clarisse
+Clark C
+Clarkey BTW
Clarky
+Clasherz
Clasico
Classic
+Classic Max
+ClassicTrap
+ClassicVibes
Classically
Classickxd
Classsikh
ClassyCod
+Claudenstein
Claudiu
Claw
Clawdius
Clawsie
+Clay Nasty
+ClayNugget
Claymor
Claypops
+Clayters
Claytn
Clayton
Clazerbeam
Clean
+Clean Dishes
CleanSleeve
CleanedBown
Cleann
Cleanst
Clear
+ClearEyes
Clearly
Cleatis
Cleaver
CleaverGreen
Cledos
Clefable
+Clefairy
+Cleg Drop
Cleible
Clem
Clem585
ClemFandango
CleoTehCat
+Cleopatraa
Cleoxc
+Clerric
Clethbery
ClevelandOH
Clevey
ClexOrie
+Cleyra
+Clff
Cliche
Click
+Click Bosses
+Click hero
ClickAndChil
+ClickB8
Clickbait21
+Clicks0nMobs
+Cliffder
Clifferd
+CliffyOG
Cliffyy
ClimateChang
ClimberAZ
+Clingy
+Clinician
+Clinicwater
Clint
Clinttt
Cliphanger1
Clipper
+ClipseZ
Clipz
+Clipz Ahoy
CliveTrotter
+Clix
Cload
+Clockwise
Clod
+Clogged King
+Cloggin
+Clogging
Cloistered
Clone
+Clone bone
ClosedLoop
Closertohell
Closeshots
Closofy
+Clotert
ClottedCream
Cloud
+Cloud Cover
+Cloud Els
+Cloud Griega
+Cloud Nine
+Cloud Stairs
+Cloud Surge
+Cloud y
+Cloud1K
CloudSoftass
CloudT
+Cloudhill
+Cloudi Boi
Cloudjumper9
Clouds
+Clouds_Song
Cloudy
+Cloudy Boi
+Cloudy Sleep
+Cloudy Wolf
CloudyOcean
Cloudys
+Cloudystrife
Clouted
Clovie
Clown
+Clown Around
Clown0164
+Clownfart7
+Clryy
Clss
CltRain
ClubBruggeKV
ClubWolf
Clue
+Clue More
+Clue Relic
+Clue box
+Cluebringer
+Clueful
+CluelessKook
+Cluer
Clues
+Clues Hunter
+Clumpey
Clumsy
Clunker
ClutchFlipsy
Clutchy
+Clyde Cooter
ClydeBarrow
Clynelish
Clyps
+Cmallz02
CmarBeast
Cmndrcool222
+CmokinSrack
Cmon
+CmptrGmr
+Cnbl
+Cnhil
+Cnr
Cnwalker
CoFlack
+CoKMcGay
+CoX Mentor
+CoX ToB ToA
CoXAcc
Co_do_blyat
+Coa
Coach
+Coach Trip
+Coach Wright
+CoachJal
Coachsharter
Coal
+Coal ore
Coan
+Coat Throat
+Cob Web
Cobab
Cobalt
+CobaltKings
CobbMorty
+Cobba
+Cobplacecow
Cobra
+CobraChickn
Cobreu
Cocajumba
Coco
+CocoGetsLoot
+CocoaPuff
+CocosLilSimp
Codai
Code
+Code Mellow
Codemax
Coder00d
Coderedcfc
Coders
Codfish808
Codi
+Codonz
Cody
+Cody Smith
+Cody The IM
+Cody The M
+CodyBeaumont
+Codys Nuts
Codyx
Coeeyyy
Coekebakker
Coenzyme
+Coex
+Cofeni
+Coffaholic
+Coffe277
+Coffee Latte
+Coffee Love
+Coffee Robot
Coffee94
CoffeeAndExp
CoffeeBarrel
CoffeeIsBest
+CoffeeKitty
+CoffeeMafia
CoffeeQ888
CoffeeSlayer
+Coffey
+Coffin Cape
+Cogelon
+Coggle
Cogstyle
+Coheed
Coherent
Coilman
Coin
+CoinToss
+Coinism
Coipo
CokeHogan
CokeShoveler
+Cokebro
+CokedPepsi
Col10
ColVolgin
Cola
+Cola Flesje
+Colaboks
+Colb y
Cold
+Cold Bowl
+Cold Ham
+Cold Hash
+Cold Hemp
+Cold War
Cold1
ColdReign
Coldhound591
Coldpiee
+Coldraze
+Coldrootbeer
Coldshop
Coldstream
+Coldvayne
Coldvepz
+Coldwar
+Coldwoods
Cole10083
+ColeEleven
ColeQuil
+ColeVeryBakd
+ColectionPog
Colee
+Colei
Coleus
Colgate777
Colienergia
Colin
Colins
+Colivanov
+Collan33
CollectMemes
+CollectibIes
CollectionIM
Collectively
+Collector of
Collega
+Collier
Collierss
+Colliflopter
Collin892
CollioKey
+Colom
ColonColitis
Colonel
+Colonello
ColonialDank
Colonne
+Color Climax
ColorBlindHC
ColorMeBlind
+Coloradodo
ColorfulE
Colossus 5
Colossvs
Colt
+Colt trigger
Coltan
+Colthound
+Coltn
Coltrainz1
+Coltsfan1996
Columbot
Columbus175
+ColumbusCrew
+Colxman
Colzy
Coma
Combaed
+Combat Phase
+CombatStudy
Combatking13
Combibo
Comboed
Combos
Come
+Come Loads
ComeAtMeBruh
Comet
Cometz
+Comex
Comfort
Comfortably
Comfy
+Comfy Butt
+Comfy hug
Comic
+Comic Books
ComicalBust
Comicmaster0
+ComingHome
+Comiya
Comlidor
+Comm Zilyana
+Command Grab
+Commander Fh
+Commander Ra
Commas
Commiefornia
Common
+Common Drop
CommonGinger
CommunistMoo
CommunistPig
CompactSugar
Companiion
Companion
+Compd
+Compe
Compgeek
Compilacion
Complain
@@ -4529,346 +9360,707 @@ CompleteAss
CompleteSpud
Completes
Complex
+ComplexTree
+Complextro
Composing
+Composites
Comptons
Compy
+Compyclon
ComradSergey
+Comrade Hanz
+ComradeCas
ComradeCovid
+ComradeMule
+ComradePugs
+Con JD
+Con Safos
+Con ner
ConKlave
ConaAmadora
+Conaizy
+Conal
+Conceited
Concentrates
Conchrist
Concritus
+Conductor4
Cone01
Conedinho
+Confederacy
Conficker
Confidentiel
Confined
Conflamit
+Conflate
+Conflict
Confuze
+Congest
Congetus
+CongiestMunt
Congra
ConicLight
Conjay
+Conjo
Conman
Connavar
+Connee
Conner
+Conner OK
+Connerr
Connerxx
+Connor M
+Connor xv
+Connzy
Conor
+Conor J
+Conor07
Conpetgrebe
Conqo
Conquar
+Conquers
Conquestions
+Conquestti
ConradK
Consan
Considerable
Conskis
+ConstantZero
Constantnips
Constellar
+Constence
Constricted
Constructeur
+Consumption
Contaminate
+Contant Geld
Contendedd
Conterfeit
Contes
+Contrabant
+Contract M
+Contradicted
ControlAll
+Controller
Controlllers
ControneX
Contyy
Conventicle
+Converter
Conway
Conydriving
+Conyon
+Conzila
+Conzine
+Coob Lad
Coogs
Cooj
Cook4everu
Cookdaburra
+Cooked Chook
+Cooked Sinus
Cookedvomit
Cooki3Crumb
CookiMan
Cookie
+Cookie Cake
+Cookie O_o
Cookie904
CookieKid00
+CookieSpec
CookieV3
+Cookiers
+Cookiezi
Cool
+Cool Raccoon
+Cool Yak 496
+CoolAssName
+CoolG WC
+CoolNameBrah
Coolair
Coolavatar1
+Coolboy_cal
Cooldesert2
+Coolest91
CoolestCow
+Coolio
+CoolmanCool
Coolmanafo
+Coolminer685
Coolmintoreo
+Coolmonkey50
+Coolsniper
Coolster
Coolxkidz
Coom
Coomcoomber
Coonrade
Coopa
+CoopaTroopah
Cooper
Cooperative
+Coopr
Coopsz
+Coors Light
+CoorsRight
+Coorsy
Coos
+Cooter
+Cooter Kick
Cootie
Coozn
Copytopy
Coquettish
+CorCam
Corabex
+CoralCastlez
CoralFire
+CoralReef
Corbi
+Corbula
CorbyTheLad
+Cord
Core OS
Coree
+Coreey
+Coreling jr
Corena
Corey
CoreyCarlaw
CoreyNKH
+Coreyeroc
Corgi
+Corgi Puppy
+CorgisIron
Corgo
+Corinnna
Corizz
Corleone
+Corley
Corn
+Corn x Holio
Cornbuddy
+Corndoq
+CorneliusIII
Cornflake
Cornie
Cornilius
Cornish
Cornwall94
Cornwalll
+Corny10k
Cornye
+Corona
+Corona Bat
+Corona Case
Coronad1
Corp
-CorpToMax
-Corpletics
+Corp Scape
Corp09RS
+CorpLeecher
+CorpRng
+CorpSlapper
+CorpToMax
+Corping Bro
+Corpletics
+CorporalWolf
+Correy Lahey
+Correyyy
CorruptDingo
+Cors
Corsa
Corsetti
Cortes
+Cortex
+Cortica
Cortistatin
+Cortsen
+Corun
+Corvanjer
+Corvisquire
Corvitolis
+Corvo
Corvoo
Corvus
+Corvus enca
Corwin
Corydonn
Coryy
Corzappy
+Cos A Nostra
Cosaintus
Coseph
Coshie
Cosmic
+Cosmic Booty
+Cosmic Star
+CosmicPebble
+Cosmiclaws
+Cosmog
Costa
+Costah
+Costcutters
+Costi
CostlyOne
Costom
+Costs
Cotched
Cotopaxi
Cotstini
Cottee
Cotton
+Cottrell
Cotty2Hotty
+Couch Frame
Couchie
+Coughey
+Count 2Three
+Count Cranz
+Count Dookie
CountCuckula
CountDrugula
+Counterspell
+Countries
Country
+Country Song
Countwert
Coupland
Coures
+CourtnyGears
Couscous
Cousin
+Cousins
Couzens90
+Cove
Coventrians
Coventry
Covert
+Covert Blade
Covid
+CovidFree
Covvboyz
+Cow Door Mat
+Cow Foo
+Cow Pet
+Cow Tongue
+Cow Wizard
Cow395
CowChum
+CowMr101
+CowSalsa
+CowVein
Cowa
+Cowabungalow
CowboyK1ller
+CowboyKaroo
+Cowdenbeath
+Cowlories
Cowrat
+Cowsburp
+Cowtongue
CowzGoMoopy
+Cox out boys
+Coxed
+CoyieGod
+Coz
+Cozmic_Raven
Cozy
Cozzza
+Cpl Gaz
+Cpl Seeder
+Cpt Doobie
+Cpt Fail
+Cpt Kokopuff
+Cpt Mellow
+Cpt Mina
+Cpt One Eye
+Cpt Pepe
+Cpt Pop Tart
+Cpt Shanks
+Cpt TRICKS
+Cpt Unclutch
+Cpt Wally
CptAceRimmer
CptKyle
+CptRileyy
CptRom
CptSankara
CptSmackAHo
+CptUzu
Cptainseveto
Cptn
+Cptn Jack
+Cptn Murica
+CptnBuckaroo
+Cpunek
+Cqrl
+Cr o
Cr0be
Cr0codile
Cr0z
Cr4zyLuck
+CrAzY HoRnEt
Crab
+Crab Emoji
+Crab Jazlo
+Crab Leaker
Crabalt
Crabby
Crabcore
Crader
Craft
+Craft Brew
+Craft Guild
+CraftPure
+Crafter Jr
Craftes
Craftsmen
Crafty
+Crafty Man
CraftyRunes
+Cragyl
Craig
+Craig Dawson
+Craighead18
+Craizy 8
Craizy9
+Crakced
+Crammerr
+CranadosX
Cranberry
Crangus
Crank
Cranke
Cranky
+Cranky Cows
+CrankyScream
+Crantock
Crapicorn
+Crapping
+Crappy Luck
CrappyScape
Craqers
Crash
+Crash Crann
+Crash Cymbal
+Crash Site
Crashbot
Crashendo
+Crashticles
+Crateapa
+Crateaqa
+Cratzi Duhuh
Crave
+Crave Me
+Crave to Max
+Craw
+Crawfish
Crawl2033
Crawn
+CrawsBow
CrawsMain
CrayQuaza
Crayons
+Crayy
Crayzee
+Craze NL
+Crazed Man
CrazedAfro
CrazedAgain
+Crazedmonkee
+CraziKido
Crazie
Crazy
+Crazy 859
+Crazy Canada
+Crazy Sam
+Crazy Skull
+Crazy5115
CrazyDieMan
+CrazyDryMan
CrazyDutchy
CrazyIron85
CrazyShrimp
CrazyStuff
Crazya0
+Crazyb00b
Crazyhalo
+Crazys
Crazystevee
Crazytree
Crazzy
+Crazzy Ivan
+Crcsh
CreaMiJeans
Cream
+Cream City
+Cream Guzzle
+Cream21
CreamFreesh
CreamingPies
Creamp
+Creamy Fella
+Creamy Whole
+Creasential
+Creat Steal
Create
CreateNoPain
+Created
+Creating6
Creator1212
Creator409
CreatorJR
+Creaturree
Creazy7
+Crecker Fux
Crecket
Credibility
+Credito
Creel
Creenen
Creepy
Creezy
CreightonRS
+Crem Fraiche
Cremator
Crenoc
Crescent
+Cressp
Cresss
+Creston fftp
Crevis6
CrewDoe
Crewcial
Crickets
+Crickss
Crier
Crimewave
Crimeway1991
Crimin
+Criminaldmge
+Criminalised
Crimp
Crimson
CrimsonCow
CrimsonDDS
+CrimsonJayce
CrimsonLily
CrimsonRogu3
+CrimsonScape
+CrimsonTide
CrimsonU
+CrimsonWic
Crimsoncaim
+Crimz0n
Crinath
+Cringy Grump
+Cringy af
+CrinsomX
+Cripler
Cripple
Crippled
+CrippledKev
Crippler
+Cripty
Cris
Crisby
Crispiessss
Crispy
Crispy Bac0n
+Crispy I
CrispyBreast
Crissco515
CristalAlken
+Cristierra
CriticalX
+Criticizer
+Critter J
Crittx
Crixos
+Crixus x
Criyosphinx
Crna
+Crna Gora
CrnerMcGregr
+Croc
+CrocDanDee 1
Crocalu
+Crocketeere
+CrocoMaster
Cromeh
+Croney
+Cronsus
Cronus
Cronz
+Croogus
+Crooked Path
Crooklyn
+Crooshtwoost
+Crosby Alt
+Crosem
Cross
+Cross Me
Crosswinds
Crouchling
+Croupz
Crow
+Crow Mn
CrowBox
Crown
+CrownConvict
+CrownRoyal84
Crownescent
Crowride1873
+Crowther
Croww
+Croxy
Crozier
CrspyPigeon
Crudelismo
Crudivore
+Crue Xena
Cruel Cub
+Cruel Irony
CruelVictory
+Cruelcanary
Cruixiote
+Crumbledoor
Crumblers
+Crumbways
+Crunch7O4
+Crus ty
CrusH-HK
+CrusadeKlr
+Crusadershot
+Crush Depth
Crushed
+Crushed Guam
+Crusher9783
+CrusherWake
Crushersun
Crushertaco
+Crushs noob
+Crust Cape
+Crustie
+CrustyDuckr
CrustyPusy
Crustysnot
Crux
+Crux da King
Crux25
Cruxyy
Cruzty
+Cruzzetbuzz
+Crwfrd
Crxk
Crxsty
+Cry
+Cry0nman
Cry4help
+CryIs0gp
+CrySupply
Cryge
+Crygechamp
Crying
+Crying Cutie
+CrykeeOwO
Crynceps
Cryo
+Cryo Chamber
+Cryogen
Cryogenica
+Cryogenica 2
+Cryogenist
+Cryorah
Crypthead
+CrypticSlays
+Cryptling
Crypto
CryptoKitty
CryptoMellow
+Cryptonomico
Crypzor
+Crysaki
+Crysh
Crystal
Crystian
+Crzy Mia
+Crzyarab
+Csajka
+Csk x
+Cssy
CtCandyRandy
+Ctclaire999
+Cteel
Ctep31
+Cth ulhu
Cthrek
Ctrengereid
Ctrl
+Ctrl F
+CtrlAltDel x
Cuada
+Cuat3
Cuatche
+Cuattr0
+Cub Will
+Cuba Sybre
Cubans
+Cubed
+Cubet
+CuckChuck
+CuckW
+Cuckgex
+Cucumbers
CudddlyBear
+Cujoh
+Culemborg
+Culinair
Culls
+Culltist
+Cultured
+Cultzy
+CumHeretic43
+CumanderZili
+Cummy Sigil
+Cumpaska
+Cunnavathing
Cunny
+Cuno
Cuolua
+Cuong
+Cup Noodle
+Cup Of Chai
+Cupaplayer
Cupcakess
Cuppalimmy
+Cuppi
Cups
Cupthebooty
+Curaga
+Curble
+CurdTuttrboi
+CuriPolymath
Curll
+Curls
+Curlx
Curly
CurlyTwist
Currancy
Curry Storm
+Curryleaf
Curse
+Curse on me
Cursed
+Cursed Chump
+Cursed Nm
+Cursed Side
+Cursed ll
+CursedOwned
+CursedRNG oO
Cursedpotato
Curt
+Curtis Jones
Curve
CurvedHorn
CurvyChcken
@@ -4876,32 +10068,64 @@ Curzonn
Cushco
Cushdy
Custom
+Custom Jr
+Custom Sock
+Custom TK
CustomGFX
Cute
+Cute Cat lol
+Cute Paunch
+Cute n o o b
CuteClit
Cutegirluwu
Cuti
+Cuties
+Cuttableedge
+Cutting edge
+Cuttl
+Cuttle
+Cutty Sarks
Cuuap
Cuult
+Cuz im Jones
+Cuz im jesus
+Cuztom
Cuzzo94
+Cuzzu
+Cvanz
Cvbgn
Cvrkster
Cvrsn
Cw90
Cwab
+Cwazza
Cweavy
Cwer
Cwick
Cwioktopus
Cxffee
+Cxld
+Cxnnor
CyaCyaCyaCya
Cyal8rnub
Cyan
+Cyan Ablaze
+Cyasoon
+Cybb
+Cyber Mind
+Cyber n Bug
+Cyber172
+CyberJesus
CyberSlave18
Cybernautron
Cybernike
+Cyberpope
+Cyborg Musk
CyborgHex
+Cybron
Cycling
+Cycling Road
+Cyclogy
Cyclone2498
Cycloner5
Cyclopedia
@@ -4911,227 +10135,534 @@ Cygni
CykPyk
CykaNuggetzz
Cyldan
+Cym
Cymatics
+Cymbaline
+CymricCat
Cyn2k
CynAcolyte
Cyncess
Cynda
+Cyndaquiill
+Cyndee
+Cyndrakial
Cynhi
Cynic
CynicalSilas
Cynocephali
+Cynognathus
Cynosure
+Cynox
Cynthaen
+Cyodot
Cyous
Cyox
Cypersilver
+Cypher Blue
Cypress
+Cypress H1ll
Cyralx
Cyrax
Cyrax314
Cyriel
+Cyrodiil22
Cyroenix
Cyruscomrad
+Cytain
+Cytryn7
Cyuh
+Cyum
Czacha
Czar
+Czar I
+Czar Trump
+Czechmate
+Czha
Czivend123
+Czk
+D A I J I N
+D A L M
+D A M 0
+D A M I A N
D A M N L0L
+D A N G I T
+D A N N Yy
+D A T H I T
+D B A
+D B Z pker
+D Blo
+D Clawz
+D Darkblader
D Derbles
+D Dragon124
+D Duberstein
+D E C O
+D E F Q 0 N
D E F Q O N
+D E R P
+D E V I N
+D F U Q
+D I Q
+D I R T Y Ko
+D J Diddles
+D Long
+D M T Elves
+D O D
+D O M M E L
+D R 6 K E
+D R l Z Z T
+D Rack4
+D S A V
+D Squarius
+D U R K
+D Wilson
+D Wreck
+D a mo
+D a r t s
+D a rk
+D a u t o
+D a v i d
+D amz
+D arking
+D arkoz
+D as
+D ashing
+D avey
+D axe
+D db
+D ebol
+D ecimate
+D eej
+D eek
+D eep
+D eez
+D en
+D enial
+D entist
+D i l a n
+D i x o n
+D i zz y
+D iesel
+D iizzy
+D imi
+D imitri
+D onda
+D onger
+D oo l ey
+D op e
+D utchgr
+D-D-A
D00DLES
+D00dey9
D0CTOR
D0GS0NG
D0NE0
D0NPABLO
D0PESIC
D0any
+D0inkleberg
+D0lNK
+D0llynho
+D0n vi0lad0r
D0nte
+D1APAM
D1GG00BIITTI
+D1P
D1ZZY
+D1ngu5555
D1no
D24L
D2Aina
D2nzo
+D2theOnTRUMP
+D3 Washup
D33L1N
D3ATHBYPI3
+D3ATHVENG
+D3C
D3C0D3D
D3DW8
+D3IVY OSRS
+D3VONSHIRE
+D3ZZi5
D3ceptions
+D3precated
D3thbyzebra
D3v1lBoy
D3vilmar3
D3zert
D4H4EK3YSM
+D4TE
D4VO
D4n0118
+D4ng3r Suca
D4nkmemel0rd
D4nnyy
+D4rels
D4rk
D4rth
D7NNY
+D9
+D9R
+DA ODB KIDZ
+DA0IST
+DA3N33RY
DA4N
+DAD563884271
+DADDYS IR0N
+DAHDB
+DARCHANG3L
+DARGON
DASH
DAWGPOUND
+DArtspret
+DBA Paulo
DBKangaroo
+DBO90
+DBOL TRICEPS
+DBUZZ
+DC Flubber
+DC-8-51
DCreek
+DD 214
+DD G
DD2I4
+DDAlt
+DDSurWrists
DDandy
+DDoS Wildy
+DDune
DEFENDPOPPNK
DEFlNE
+DEM0L
DEM0NIC
+DEPRINS
+DESPA SIITTO
+DESPAlRGE
DESTYLAT
DFez
+DG 00
DGAF
+DH Marker
+DH btw
+DHIBZ
DHSC4EVER
+DHally
+DHlN
+DHoShow
DIDZZ
DIETDRDIET
+DINGO SCUM
+DIORITIC
+DIORITlC
DIRTYags
DISAPRIN
DITMANM0DE
DIVINExNOVA
DIY Ele
+DIY Jamie
+DIY Salsa
+DIY Shane
+DIY Steo
DIYIronFeBTW
DIYRevelled
+DJ Bop
+DJ Cranston
+DJ Heiko
+DJ Korsakoff
+DJ Llama
+DJ Pen is
+DJEDDIK
+DJK Daniel
+DJKALLE ANKA
DJKrampz
DJMileyCyrus
DJMuscleBram
DJOFULLIN
+DJSeinfeld
+DKHo
+DKJN
+DMM 2 07
+DMM Gp Swap
+DMM Ryu
+DMT Dad
+DMT Satan
DMTDAN
+DMTe
+DMagnum 10
+DMessengerS
+DN Atro
DN20
+DNFL
DNLD
+DO0FY
DOGELII
DOITESTEVEN
+DON FIJI
+DON VALTEE
+DONG GOLEM
+DONJOHNNNY
DOOMBRlNGER
DOOMSlayer
DOSNE
DP776
+DPRNS
+DPS Disciple
DPvM
+DPvM Jordan
+DQ9
+DR PAAAK
+DR VABA
DRAEG0
DRANG3
DRD31
+DRFL
DRGNSLAYER85
+DRIEST RNG
DRL0NGD0NG
+DRLGspace
+DRNKN DWARF
DROPPEDITALL
DRTY
+DRUNKIDIOT
+DReelest
DRegi
+DS Stolen
+DSHeavy
+DStat
DStroud
DSyndrome
+DT5
DUMB
DUSKBLADEL0L
+DV 8
DV trekpik
+DVa
+DW Gunthie
DW24
DWlGHT
DXQIWOL
+DXXM
DYao
+DZ o_o
+Da Bomb 149
+Da Buddah
+Da Iron Jedi
+Da Man 65
+Da Nils
+Da Puppy13
+Da Sniper007
+Da T Virus
+Da d dy
+Da t
+Da then bh
+Da1ton
DaBears
DaBoz
+DaBurg
DaCatBeam
DaCigarMan
+DaCuddy
+DaCult
+DaDangus
DaDude
DaFatManDan
+DaFeesh
DaHumanClown
+DaIronBooty
DaIton
DaJaVu
DaLegendary
+DaPootz
DaRKi
+DaSernet
DaSheepFtClb
DaTr3w
+DaVinciss
DaaChronic
Daaak
Daallas
Daan
+Daanilio
Daanncorr
+Daavos
+Dab Thirty
+Dab then pvm
+Dab0mba
DabANOMICS1
+DabDabDan
DabInMyEye
+DabTornado
Dab_nScape
Dabbadank
+Dabbe
+Dabbers
+Dabbie Duck
+Dabbin Dolo
DabbinDonut
+DabbingBrb
Dabe
+Dabe Sucks
Dabei
+Dabomb 13
Daborn92
+Dabos Weenie
DabsWithDan
Dabsmoke
Dabsncats
Dabsndogs
Dabton
+Dabvape420
+Dacaedia
+Dacc
+Dachowski
Dackel
Dackenerino
Dacune
+Dad Goals
+Dad Sean
+DadBurrys
+DadGoingMad
DadLeft
DadRanarrWay
DadamoSte
+Dadbackward
Dadbackwards
+Dadbod4lyfe
Daddaforce
Daddy
+Daddy Bundy
+Daddy Chaman
+Daddy Chubs
+Daddy Danger
+Daddy Dead
+Daddy Drow
+Daddy Oreo
+Daddy Smit
+Daddy Spoon
+Daddy Yurdle
+Daddy sandro
+DaddyDeagz
DaddyDylo
DaddyLemming
DaddyMac
DaddyMars
+DaddyNemmy
+DaddyPig406
+DaddyTowel
+Daddyfied
Daddyplease
DaddysLoad
Daddyspie
DaddyyDong
Daddyz
+Daddyz Clean
Dadevil1616
+Dadfield
Dadi415
+Dadorii
Dadosaur
Dads
+Dadukez
DadurQa
+Dadyankee3
DaemonGunner
DaemonTool
Daemonmage
+Daemonrds
Daenrys
Daep
Daewolo
+Daeyalt Ess
+Daeye
+Daez 95
+Daf Arch
+Dafetsch
Dafney
Dafo322
+Daft Punked
DaftDemon
DaftPun
Daftmoul
DafttPunk
+Dafuggg
Dafy
+Dag DaLooter
+Dagannot hs
Dagannuts
+Daganoth Rex
+Dagathar1
+Dagburn
DaggaNOTKlNG
Dagger93
+Dagggg
+Daggou
Daggz
Dagin
DagkingV2
+Dagnel Daddi
Dago
+DagobertTT
+Dagoth Vemyn
Dagsi27
+Daguar
Dahlareen
Dahls
+Dahlson
Dahmonkey
Dahrmata
+Dahrr
Dahumbug
Daijoukay
+Daiju Spede
Daiktusrenku
Daileee
Dailiana
+Daily Grind
+DailyDoomer
DailyDosage
+DailyPog
DailyScape99
DailySharts
+DailyShelfer
Dailytoker
Dain
+Dainius
Dains
+Daipers
Dairychuk
DaisOfHavoc
Daiseido
Daiski
+DaisukeJigen
+DaisyApple
DaivdFW
+Daiw
+Dajmkryss
Daka
+Daka Alt
+Dakai
+Dakay
Daklozenkrat
Dakotas
Daksu
Dal3y
+Dalacks
DalaiLlama
+Dalanes
+Dale Dobec
+Dale G
+Dale HC BTW
+Dale Winton
Dale1612
Daleferd
Dalejamesw
Dalek
+Dalek Cookie
Daley_Dose
Dali176
Dalkz
+Dalls Beep
Dalmatian
Daloomi
Dalrak
@@ -5139,6 +10670,7 @@ Dalski
Daltficiency
Dalton
Dalton4theft
+Dalton_LB
Daltonnn
Dalundo
Dalzii
@@ -5146,60 +10678,134 @@ DamDude
DamSplash
Damage
Damarquis
+Damberson
+Damen
+Dameon xd
+Dami
+Dami-an
Damiaen
+Damian_Xx
Damish
Damlotz
DammitHarry
+Damn Evil
+Damn God
+Damn its Sam
DamnItHarlod
+DamnSexy
+DamnViton
Damned
+DamnedDaniel
Damngoodsoup
+Damni t
Damo
+Damo is free
Damon
+Damp Memes
DampBucket
DampForklift
+DampMongot94
+Dampener
Damzos
+Dan Bad
+Dan Craig
+Dan Daoud
+Dan Gleesac
+Dan H
+Dan M
+Dan S
+Dan xo
Dan-Reijden
Dan120201
+Dan452
+Dan646464
+Dan91
+DanAsker
DanAye
DanBTW
+DanChan1101
+DanGreenFan
DanGur27
DanMaxd
DanMingo
+DanO_o
+DanOfCumelot
+DanPJ
DanRickshaw
DanTheM4N
+DanTofoo
Danboy
Dance
+Dance for XP
+Danced
DancingForGP
+DancingRa1n
+Danco
+Dandrikis
+Dandwc88
+DaneDaddy99s
Danea
+Danelele
DanernesLys
Danex85
Dang
+Dang It
+DangFloopity
+Dangelboi
+Danger Swign
+Danger Zoneh
DangerBear
DangerGlutes
+Dangerouz
Dangeruss
+Dangerxi
+Dangerz0ne15
DangitBobby
Dani
+Dani Cute
+Dani D
+Dani Dark 0p
Dani007
Dania
Danieelius
Daniel
+Daniel Mcc44
+Daniel OSRS
Daniel12xx
+DanielSumtin
+Danielbisgod
Daniella
+DanielleOfc
+Danielmcken1
Daniels
+Danielwat
+Daniiieell
Danijenn1211
Danilin
Danimal
DanisH96
+DanishAdonis
+DanishGoat
Danje
Dank
+Dank Chef
+Dank Exp
+Dank Perp
Dank Tigzy
DankDylShpil
+DankMagic
+DankSavage99
+Dank_Mcnasty
Dankdank96
Dankdog
Dankdynasty
+Dankey
Dankfool
+Dankleburgh
Dankstanky
Danktrees
+DankumZ
+Danky Kwuarm
Danletics
Danleypa
Danlord3222
@@ -5214,32 +10820,51 @@ Dannk
Dannny
Dannum
Danny
+Danny Dubs
+Danny Dvito
+Danny Mate
+Danny P
+Danny Pudi
+Danny m8
+Danny wtf
DannyDeleto6
DannyK
+DannyKjr
DannyPho
+Dannygem
Dannytrol
+Dannyw
Danog
Danoj
Danol
Danomeva
+Danoontje
Danozz
+Danratty
Danrow
Danrue
Dans
Dansayeagle
+Danski261
+DanteExitium
Danxdoo1
DanykaNadeau
Danzai
Danzig
Danzoler
Daofather
+Daoko X
Dapper
+Dapper Hades
+Dapper Jr
+Dappest
Dappi
DaquanNiguan
Daquantaro
Daquicker
Darbinism
Darc
+Darc Sport
Darcy
Darda09
Daredevil595
@@ -5247,128 +10872,294 @@ Dareme95
Daremo
Dareya2
DarfPlageus
+DarfWantWarp
+Darimy
Dario
+Dario hax
+Darion
Dariukas
Dark
+Dark X
+Dark Alcyte
+Dark Aloy
+Dark Curtain
+Dark Iron69
+Dark Jaxol
+Dark Kadabra
+Dark Kill L
+Dark Knig ht
+Dark Kurama
+Dark Peter10
+Dark Rabbit
+Dark Ranqe
+Dark Side
+Dark Specter
+Dark Stone66
+Dark Tetrad
+Dark Totem
+Dark Uzi
+Dark Veidar
+Dark Wegener
+Dark Xarpus
+Dark kamui
+Dark lll
+Dark1437
+DarkAether
DarkEater
+DarkElf135
DarkEmerald
DarkGraceful
+DarkHoodGIM
+DarkKn1ghts
DarkMerliin
DarkNut393
DarkOwI
DarkReapingX
DarkReign
DarkWizard
+DarkXiphles9
+DarkZulu97
Dark_Auth
Darkang3lpkx
Darkao
Darkarmy40
+Darkbox777
Darkbright
+Darke Hand
Darkemissery
+Darken Devil
DarkenRahlrs
Darker
+Darkest Kind
+Darkest Syde
Darkfanime
Darkflash15
+Darkgutz
Darkhal
+Darkine
Darklord4211
Darknapster
Darkp0wnz
Darkphil007
Darkpupitar2
+Darkrai
Darkraven368
+Darkscorpio5
Darkseance
Darksense
Darksim10
Darkskiller
Darksn0w
Darksnoweb
+Darksocks1
Darkst4ar
+Darkstar078
Darkturbo
Darktyranno
Darkwrath43
+Darkyr
+Darlin g
+Darling27
+Darma
+Darnic
Darquain
Darras
+Darren T
Darrens
Darriann
Darse
Darsehole
+Dart Slayer
Darth
+Darth Kas
+Darth Shiroo
+Darth Spade
+Darth Val
DarthNevidia
DarthSpliffs
+DarthWrecker
Darthe
Darthodium
Darthonion90
Darthrodger
+Darthruneis
Darthshea
Darucell
Darush
Daryl
Darz
Darzix
+Darzo5
+Das Idle
+Das It Maine
DasGoose
DasReich88
+Daschiva
+Dascrez
Dasgirl09
+Daspwn
+Dasrx RNG
+Daszler
+Dat Geezer
Dat2eWoord
+DatBoiNibbe
DatBoyLoy
DatGuySteve
+DatIronNinja
DatNeck
+DatPeko
DatYeet
Data
+Data Diddler
+Data Privacy
+DataDruid
+Datadyne
Datames
Datcookie34
Date
Dathx
Datis
+Datoxicate
Dats
Datskai
+Datting
+Dattos
+Datuk
+DaturaTrip
Daubs
+Daud
+Daughters
+Daunt
Dauntless
+DauntlessXav
+Dauth Elda
+DavSko
Davaflav
Davai
+Davantage
Dave
+Dave From Au
+Dave Hooray
+Dave J
+Dave Mario
+Dave Senpai
+Dave The Egg
+DaveAckery
DaveDaBeast
+DaveDorvis
DaveLister
DaveYognaut
Davebarbaren
Davedication
Davedude
+Davej86
Daveken
+Davesty
+DaveyB0nes
DaveyWSM
David
+David Co
+David Duffs
+David Ortiz
+David R333
+David007
David2699
+David4755
+DavidKinaMan
DavidPH
Davidisiscoo
Davidopathy
+Davis751
Davlan
Davo
Davord
+Davoron
+Davros70
Davshing
+Davu
+Dawaj Lama
+Dawg Dynasty
+Dawkins
Dawn
+Dawn Destiny
+Dawn Era
+Dawn Summers
+Dawn Wall
+DawnEverbane
+DawnSwanMon
Dawna
DawnfaIl
Dawson141
Dawtrix
+Daxidol
Daxon
+Daxx95
Daxxzy
+Day Dreams
Day Lightz
+Day1ofNoFap
Day6
DayJarVu
DayOff2JOff
+DayStar Turk
+Daydrifta
+Daye Xero
Daykillz
+Dayman_GIM
Daymien
+Daynnn
+Daysi Darcey
+Daystar
+Daytrip
+Dayuf
+Dayveeeee
+Dayz of Iron
+Dayzd1
Daz3dnBlaz3d
+Daze
+DazedDave
DazednConfsd
+Dazzler95
Dazzz
Dbeatz
+Dbewt
Dbmx
+Dboot
Dbricke
+Dbz Pride
+Dc B L I N D
+Dc Hakkarn
+Dc IronMan
+Dcaravan
Dced
+Dced at Corp
Dception
+Dcing
Dday6Jun1944
+Ddestroyer56
Ddos
Dds4theko
Ddsing
+Ddsme
+De Algerijn
+De Baardman
+De Eryngy
+De Fishy Guy
+De Gennaro
+De Hoppert
+De Jam
+De Krikke
+De La Trey
+De Marco
+De Max
+De Mechelaar
+De Pette 69
+De Redacteur
+De Sam Matie
+De monic
De stoutsten
+De us
+De1icioso
DeAndre
DeDawgTubb
DeEgis
@@ -5387,38 +11178,80 @@ DeTrixzz
De_lemme10
DeaTH
Deacey
+DeaconDrew
Dead
+Dead Baldy
+Dead Bozo
+Dead Chilli
+Dead Easy
+Dead HC Here
+Dead Her0
+Dead I Guess
+Dead Mum
+Dead Policaj
+Dead Psyc
+Dead Sellout
+Dead Ticks
+Dead XVIII
DeadDogRed
+DeadGhost
DeadKelly
+DeadNowM9
DeadPickle
DeadPower
DeadPuto
DeadRealSoon
+DeadSanson
DeadSlice
+DeadSmog3
DeadWife
Deadarrow99
Deadbeater
+Deadblinx
Deadened
+Deadfallen
Deadlft
+Deadlift
Deadliftjr
Deadly
+Deadly Pixel
+DeadlyAnt
DeadlyBatz
DeadlyDJ
+DeadlyDrinkr
DeadlyHit
DeadlyNecros
+Deadman AF
Deadness
Deadpaal
+Deadrango
+Deadwool
DeadxProof
Deaf
+Deaf Person
+Deaf RScaper
+Deafmau5
Deafs
+Deakien
Deakz
+Deal or nah
Dealing
Dean
+Dean Jac
DeanRs
Deandelouest
Deantotheo
+Deaptic
Dear
+Dear Deer
+Dear no one
Death
+Death Devil
+Death Eaters
+Death Is Fun
+Death Loco
+Death Qweef
+Death Rainer
Death0fyou
DeathByRC
DeathPanda
@@ -5427,133 +11260,224 @@ DeathSurgenc
Deathbyclick
Deathcloude
Deathcore
+Deathduspart
Deathfuzz13
Deathhope666
+Deathism
Deathit55
+Deathmast333
+Deathomen
Deathrattle
+DeathsCaII
DeathsCoffer
Deathscyt56
+Deathstarlol
Deatths
+Deb0wer
Debauchery
Debb
Debdu
+Debil Missed
+Debiruss
Deborla
Debug
Debwani
Deca
+Decapacitate
+Decard Cain
+Decarium
Decath
DecayedWrath
Decca
+Dece1ve
Deceive
+Decent Drugs
Decerate
Dechmann
Decides
Decim
+Decim-san
Decimate
+Decius Maxim
+Deckiez
+Deckler
Declare
Declined
+Deco Himself
Decolonize
Decomposed
+Decon
Decs
+Dectron1
+Ded Ronald
+Ded Smithy
DedClicks
DedVittu
DedWilson
DedZap
DedZeppelin7
+Deddo92
Dedfin
+Dedge Inside
+Dediabl0
Dedicated
+Dedicated XP
Dedmoo
Dedressing
DedsetLegend
Dedville
Dedzone
+Dee
DeeLizard
DeeLuxe
DeeZe
+Deedeedee630
Deedlebees
Deeego
DeeezNats
Deejay
+Deeku vaan
DeelDoughs
Deemush
Deep
+Deep Medi
DeepInUrMum
+Deepika P
+Deepinuh
Deepnsider
Deerboy7I7
Deerhunt03
+Deerkl
Deerski
Deerskin18
Deevos
Deeyja
+Deez Mangoes
+Deezima
Deeztroyer
Deezy44D
Defaultbomb
+Defaulted
+Defeat Evil
Defeater
Defektas
Defelorn
Defence42
Defensief
+Deffi
+Defib
+Define Pain
Deflexus
Defloat
+Deflorator
+DefoNotKiwi
DefoNotSpoon
Defog
Deformedhell
+Defqonlord
Defrosted
Deft
Deftones
Defund
+Defunto2
+Defy Limit
+Defyinq
+Degak
+Deganti Upe
Degas
+Degen Darra
+Degen Ryu
+DegenGod
DegenRetard
Degeneraatio
+Degenic Neet
+Degenomics
Degradedd
Deguns
DeiAx
Deidera
Deifi
Deimoss
+Deinsmeins
+Deiron Tyson
Deitonus
Deive
+Deiviiz
+Deivis
+Dejagoo
+Dekeyser
+Dekkens
Deko
Dekul
+Dekylex
Del1nquent
Del4no
+DelaIron
+Delaey
Delay
Delciotto
Deldeen
Dele
+Deleted
+DeleuzeSucks
Deleven
+Delga
+Delger
+Delhaize
+DeliMeats
Delic
+Delicoffee
Delimain
+Delirah
+Deliyria
+Delkku2
Dell
+Dell De Dul
+DellaRS
Dellamor
Dellies
+Delmar
Delmaro
Delonius
Delphan09
Delskiii
Delsym
Delta
+Delta 516
DeltaCloud
DeltaEpsilon
DeltaPapa
Deltaskull
+Deltawye
Delten
Delusional
Delusionnn
+Deluthul
Deluvial
+Deluxe5
+Delvex
DemSkillsDoe
Demander
Demboo
Demco
Demerlay
+Demetre130
Demi
DemiGodKempo
+DemigodI
Demising
+Demmegod
Demolidor
Demon
+Demon Albarn
+Demon Flare
Demon Plate
+Demon RS
Demon1793
+DemonWolf1
+Demon_Matrix
Demonaly
+Demonas
Demonboys1
Demoni
Demonic
@@ -5562,14 +11486,31 @@ Demonleader8
Demonslay335
Demonteats
Demoted
+Dempa
Dempeanut
+DempseyRoll
+Dempsters
Dempsu
+Demyze
+Den Bever
+Den Duivel
+Den Illya
Den1z
+DenZelouZ
+Denaelc
+Dench Bee
Denclosure
Denferok
+Denfoe
+Denggly
Denglish
+Denis
Denix6
Denizenn
+Denkil
+Denkue
+Denmarkian
+Dennaro
Denneny
Dennis
DennisWilbur
@@ -5577,9 +11518,12 @@ Dennisfr
Dennispanda1
Denny
Dennyispro
+Denonweff
DenouncedGod
Denoxite
+DenseLayer
Denssoni
+Densu
DentalMental
Dented
Dentistry
@@ -5587,50 +11531,88 @@ Dently
DenverHockey
Deny
Deny92345
+Denza93
Deon
Deoo
+Deoxy_19
Deoxys39
Depdada007
+DependaAF
Depends
+Depenenkal
+Depletion
Deplox
+Deprimes
Deprimir
+Depster
DepthStryder
+Deputy Mibo
DeputyDwigt
+Der Hungrige
+Der Panda
DerPunkt31
Derbados
DerbyDerbs
Derdel
DerekBarnett
DerekEmKay
+DerekWins
Derenity
Derick
+Derived Hope
+Derk Danger
+Derkalurka
+Derkila
+Derkle
Dermijiny
+Dern Swan
Derot
+Deroy
DerpCanin
+DerpDeezy
Derpmoil
Derptimusbro
DerpyClayDog
Derrick
+Derrick Rose
+DerrickC145
Derrik
Derrin
+Dertay
Des0rg
+Desaus
+Descendence
+Desconectado
+Desear
Desert
+DesertAmulet
DesertEagle
+DesertFlower
Deserve
Desi
Desigium
Desinger
+Desinteresse
Desire
Desk
Desley
+Desn1q
Desoroth
Desper
Desperados
+Despitous
Despot
Dest
+Destab
Destinneh
+Destiny Goat
Destr0i
+DestroyButts
+Destructoid
Desuelle
+Desuhmate
+Det BabyLegs
+DetRedWings
Detain
Detects
Detectum
@@ -5639,219 +11621,416 @@ Detonati
Detone
Detriment
Detrimental
+DetroitSux
Deugeniet
Deunek
+Deur NL
Deurloos
Deus
+Deus Esq
+Deus leto
+Deus lux est
DeusFerox
DeusXQuinoa
Deuxth
+Dev Jacob
+DevMoney420
+Devanar
Devb0t
Develinside9
+Develique
+Devidedby0
+Devika
Devil
+Devil Horns
+Devil lnside
Devil9394
DevilOfheavn
Devildog
Devilege
Devilgod
+Devilish
Deviljin583
Devilman
Devils
Devilsbkb0ne
+Devilsjoker
DevinTheDude
Devinchi
Devious
+Devise
Devizer
Devo
+Devon Btw
+Devoted I
Devotion
Devoured
Devourkitty
+Devry Cain
Devstated
+Devv N
+Devvy UwU
Dewa
+Dewarping
Dewiro
Dewitten420
Dewk
Dewrunk
Dewsk1
+Dewts
Deww
+Dex Territy
Dexby
Dexderp
Dexlan
Dexter
+Dexter Lou
Dexterity
Dexxaz
+Dexxtrouss
+Dexy Fiend
+DexyDean
+Deykota
Deyou
Deyron
Deysean
+Deyvyejones
Dezerthuntar
Dezi-VII
Dezkor2
+Dezmezz
Deztroyer
+Deztroyer 0
+Dezzu
+Dflow023
+Dfs Sfs
+Dfuks
+Dfw
Dgalaga
Dgref
DhRecka
Dhae
+Dhaegar57
Dhaeqriyil
+Dhaggz
+Dhalsim
+Dharek
+Dharma Van
Dharoc
Dharok
+Dharok 0bama
+Dharok Derek
+DharokHardOn
Dharokbomber
+Dharoker
+Dharokz
Dhavy
+Dhides
+DhingusKhan
Dhon
+Dhon Do
Dhor
+Dhr Leon
+Di vau vand
DiaRelent
DiaThresh
+Diabalo
DiabeticKid
DiabeticPhuk
+Diabetucus
Diablo
Diablo47741
Diablosis
DiabolicDead
Diade
Diagnosis
+Diagonlane
+Diah
Diako
+Diako Gyan
Dialga
+Diam0nd01
+Diamega
Diamond
+Diamond D
+Diamond Jozu
Diamond2192
DiamondScott
Diamondback
Diamonds
+Diamonds Jr
Diamonds lit
Diamoniakmep
Diampromidi
+Dianakins
DianasaurEgg
Diane
Diapeetikko
+Diaper Dan
Diaresta
Diariez
Diarrhea
+Diarrhea Tom
Diart
DiaryNoob
+Dibbo
Dibbu
Dibidos
Dibidus
Dibsis
+Dibsis CoMa
DibtheLegend
+Dibudabudi
+Dibyel
DiccEat
+DicedBrotito
+Dicer
+Dicey ReRoll
Dicio
+Dick Jones
+DickNBallin
+Dickbruiser
+Dickeroo
+Dicko
Diclo Force
Dicnar
+Dicso
DictatorNL
+Did You Fart
+Did You Try
DidAnalOnce
DidISayWeast
DidNotDieBtw
DidUJustBgs
+Didavoo
+Diddle Drip
Diddlybopp
Diddmeister
Didi
Didnt
+DidntAsk
Didny
+Didsome1say
+Die hard 66
DieAntwoord
+Dieby
Died4Hides
DiedRank
DiedSierra
+Diedrrr027
+Diegoide
+Dien0
Dieno
Diesel
+Diesel Bill
DieselPump
+Diet Andy
+DietSquid
Dietch
Dieu
+Diffindo
+Diffy
+Dig Bick 420
DigBicker
+DigDaniel
DigOlBick
Digestive
Digger
Diggernick32
Digghass
+Diggy
Digi1al
DigiDestined
DigiFlisp
Digifreak045
Digironimo
+Digit28
Digital
+Digital Age
+Digital day
DigitalGamer
DigitalKillz
+Diglett Dave
+Dignace
Dignity
+Digtalcarrot
+Digweed
Digyeety
Dihl
DiiK
Diiferent
DiiirtyDog
+Diisphoria
Dija
+Dikk Mabbutt
+Dikkaz
Dikke
+Dikke Hobbit
+Dikke Kei
Dikken
+Dikuufd
+Dil Pickle
+Dilbo
+DildoBagguns
+Dilexro
+Dilfslayer
Dill0n
+Dillaz
Dillbert
+DilleFlute
Dillhen
+Dillon
DillontheFox
+Dillusion94
Dilly
Dillywacka
Dillzpickl
+Dilogos
+Dilph
Diluzion
+Dilvy
+Dilx
+DimDimz
DimJangle
+DimKills
Dimaa
+Dimathys
Dime
+Dime Daddy
+Dime Skate
+Dimebag217
+DimitriosMVP
Dimmu
+Dimmy
Dimples
+Dimwits
+DinFulaJavel
+Dinamite
+Dinari
Dindu
DinduNuffen
Diner
Ding-A-Ling2
+DingDong
DingDongDell
+Dingbat Rat
Dinger30
+Dingle Eater
Dingus
+Dinh
Dinho1
+Dinieras
+DinkeLBerrG1
Dinkerwoltz
+Dinkis
DinkleBrrgh
+Dinkleberg
DinoBoy7
DinoSnore
+Dinomite
Dinoparrot91
+Dinorock
+Dinosaur
Dinostrong
+DioBrandoXx
Dioden
+Diogaite
Diogo
Diogun
+Dioor
DiorTemplar
+DiorTheGreat
Dios
+Dios world
+Diosdado_12
Dioxins
Dioxis6
Dipdadronan
+Dipical
Dipli
Dipolio
DippaDave
Dippoldism
+Dippy
+DippyMcshit
+Dipshit Dan
Dipyo
+Diq-In-A-Box
+DirectDesire
DirectDsLcul
Direwolf
Dirk
+Dirk Stryker
+DirkDigglr
Dirkieflurky
Dirol
Dirt
+Dirt Shark
DirtAss
+Dirtbag
Dirtbikerpro
Dirtboy345
Dirtjogger
Dirty
+Dirty Dozen
+Dirty Nuts
+Dirty Nwah
+Dirty Pack
+Dirty Tampon
+Dirty Wit
+Dirty Wookie
+DirtyDoc
DirtyGeUsers
+DirtyGlock
DirtyKo
DirtyLube
+DirtyOldMan
+DirtyShire
+DirtySouthNz
+DirtySpade
+DirtyWata
+DirtyyIron
Dirun
+Disabled
Disaster0
Disasterolgy
+Disastro
+Disbeliefs
+Disc
+Disc Chucker
DiscGG
+Disclosing
+Disclosure
Disco
+Disco Mayhem
+Disco PvM
DiscoDarwin
DiscoFever
DiscoLars
DiscoTronix
+Discoburger
Discodoris
Disconnecct
+Disconootje
Discord
Discordian
+Discounted
Discoveredx
+Discretions
Disentombed
+Disfunctie
Disgusting
Diskmedel
+Disloyal
Disneyland
+Disodrer
+Disorderly
Disperse
Disprivilag
+DissTeam
Dissidence
+DissyReborn
+Distained
Distanc3
Distard
DistinctEvil
@@ -5860,219 +12039,482 @@ Distroyer972
Disturbed
Ditherman
Ditt
+Ditt o
Ditto
Ditty
+DitzyGranny
+Dive Ball
DiveMedic
Divertus
+DividedSky
+Dividends
Divin3RS
Divine
+Divine Dream
+Divine Fenix
+Divine Furby
+Divine Mass
+Divine One
+Divine Oodle
+Divine Sveta
+Divine Zaros
+DivineLegend
+DivineRhythm
+DivineShine
+Divinenro
Divines
+Divinethug
Divinez
Diving
+Divinitii068
Divoky
+Divorce
+Divxd
Dixed
Dixie
+Dixie Pixies
+Dixin Yass
+Dixon
+Dixon Planks
Dixxy
+Dixy Wrecked
+Diy Dan
Diz_OG
Dizho
Dizk
Dizstruxshon
Dizza
Dizzleslayer
+DizzyDan
+DizzyPanda
DizzyRnG
Dizzzzy
+Dj Dimu
+Dj Jordi
+Dj Ju
+DjNateP
DjSpicyNuts
DjWalkzz
+Djacquays94
+Djagzar
Djahat
+Djauw
+Djavul
+Djbeejay99
DjenCraw
DjentleSoul
Djl0077
+Djmx1000
+Djoefer
Djozztico
+Djscoobsta_X
Djunya
+Djurfan
+DjustinT
DkPepper
Dkafeine
Dkzz
DlAMONDS
+DlBz
+DlCKE
DlCTATOR
DlDS
+DlE MACHlNE
DlNNER
DlONNE
DlPLO
DlRECT
+DlSCONNECTED
DlTTO
+DlXON
Dlghorner
DliveMarc
Dlorean
+Dm8
+DmVinny
Dmage
Dmante
Dmfs
+Dmgp
Dmhc
Dmi11z
+Dmitri333
+DmkFight
DmkKilla
Dmoe
+Dmt Kitty
+Dn Dayander
+Dn Havoc
+DnB Fanatic
+Dnc
+Dnv
+Do It Best
+Do It Myself
+Do You Zerk
+Do ur Best
DoDArmy
+DoHerbRuns
DoKZx
+DoMeDirty035
DoMeHardNan
DoSoQi
+DoUEvenTank
+DoWerkSonn
Doadles
Doajiggi
+Dob Au
Dobar
+Dobby Hanzo
DobbyGotPwnd
+DobbyTheSock
Doboner
Dobster
+Doc Doc
+Doc Heart
+Doc k i n g
+DocDingle
DocGiggles
+DocMonocle
DocVamp
+DocYouSign
Doc_Hershey
+Docere
Docs
Docta
+Docta Mantis
+Docta dean
+Docter Brule
Doctor
+Doctor Ace
+Doctor Bubca
+Doctor Exx
+Doctor Fail
+Doctor Funk
+Doctor Fuzz
+Doctor Iron
+Doctor Krieg
+Doctor Luck
+Doctor Oby
+Doctor Swag
+Doctor WormP
+Doctor Wylie
+Doctor Zeh
DoctorCoc
DoctorHeiter
+DoctorKraft
+DoctorNutz
+DoctorRex
+DoctorSquat
DoctorTsom
DoctuhDrew
Docxm
Doddi
+Doddy8D
Dodge
+Dodge Feet
+Dodger995
DodgersBRAH
Dodgy
+Dodgy Player
+Dodgy Todge
Dodjomaster
+Dodko
Dodo134
Dodokipje
Dodol
Dodose
+DodusNet
Doefos
+Doeidoei
+Doep
Doesnt
+Doesnt Trade
+Doetje
Dofric
+Dog Fart Net
+Dog Myrnac
+Dog The Frog
+Dog did Meow
+DogDiet
DogFlyRatCow
DogLogNogJog
+DogShitter1
DogSoldier29
+DogTag
Dogan
+Dogannn
Dogax
Doge
+Doge Caravan
Dogecoin100x
+Dogesaurus
+Dogessa
Dogestyle
+Dogfruit1555
Doggiezz
Doggoat
+Doggshit
+Doglinsheran
Doglips
+Doglover7004
DogmanJones
+Dogplaceman
Dogpoop
+Dogres
Dogs
+Dogsh1t Main
+Dogshit Rick
Dogslayer420
Dogsume
+Dogtogod
Dogzie
Dohace
+Dohdee
Dohenus
Dohero
Dohski
+Doin It Raw
+DoinGodsWork
Doiran99
Doiu
+Doja Chompy
+Doja Shark
Dokarius
Dokdo
Doken
+DokeyPickle
+DokiToast
+Dokter Klok
+Doktor Onion
DoktorBarber
+Dokuganryu
+Dokuhime
+Dokusei
+Dol
+Dol Alt
Dolce
+Dolerkyo
+Dolf
Dolham
Doll
+Doll of Evil
Dolle
Dolly
Dollynho
+Dollynho Bro
Dolomite
Dolormight
Dolph
DolphinAnus
DolphinPucci
Dolphinl1ck
+Dom R
+Dom Wong
DomGaz
+DomLaurencio
DomYouAll
Domanater105
Domantass
+Domatic
+Domccas
Domeeee
+DomiGothMomi
Domiinant
Domika
Domimic
+Dominate Jr
Dominaton
+Dominator541
+Dominatorrz
Dominikus67
Dominionmake
DominoTerry
Dominos
+Dominus Omni
Domiros
+Domixin
Domke25
+Domknit
+Dommie 07
Dommy
+DommyDucky
+Domo Teddy
+Domoralized
Domoszlo
Doms
+Domstad Slay
+Domtoren
+Don Abuja
+Don Bob
+Don Boki
+Don Con
+Don DingDong
+Don Dotta
+Don Huono
+Don Matt
+Don Moochie
+Don Persian
+Don Robb
+Don Sebitas
+Don Serrano
+Don callum
+DonB0t
+DonBroco
DonDennis94
+DonMarcino
+DonThinKill5
DonWonTon420
Donair
+Donair Dude
Donal
Donald
Donald Dumps
+DonaldTrump
Donaldfact
DonaledTrump
+Donantelo
+Donate Here
+DonateBond
Donato
Donchz
+Donda
+Dondd
+Donderschok
+Done enough
+DoneThat
Dong
+Dong Chan
+Dong em Down
DongActual
+DongCowboy
DongEater
+Donger Lord
+Dongi
Donging
+Dongolark
+Dongs Ahoy
Dongsalad
Dongu
Dongus
+Donkerblauw
Donkere
+Donkernick
+Donkey Kink
+Donkey Squid
DonkeySocks
+Donkhu
DonldTrumpet
Donnatello
DonnieAssie
Donnieduke
Dono
DonoWho
+Donology
+DonovanRS
+Donsalt
Dont
+Dont Be Pked
+Dont Heal
+Dont Sir Me
+Dont You Shy
+Dont do dat
+Dont skill
+DontBeMad
DontBotNerds
+DontDieMase
DontDieSans
+DontEatMyDog
DontGetDrops
DontHoldBack
+DontJump
+DontPanicPlx
DontSassMe1
+DontStarve2
DontTellFeds
DontTouchIt
DontUseFKeys
+DontWarnMe
+Dontneedbp
Dontyoudoit1
Donuhtzz
Donut
+Donut181
+Donutman
+Donvys
Donwcpot
+Doob
Doobe
+Doobie Doo
+DoobleDecker
+Doodle Bob73
DoodleCraver
DoodleTheGod
Doodled
+Doodledash
+Doodoolist
Doodslag
+Doof
Doofe
+Doofensmirtz
Doofy
+Doogl3
Doogyplumm
Dookami
Dookers
Dookie
Doom
+Doom Bar
+Doom Metal
+Doom Raiser7
DoomDoomDoom
DoomFruit
Doomblade
Doomed
+Doomed Necro
+DoomiShroomi
+Doomkid50
+Doon
+Doooooobie
+DoorDshGamer
+DoorTech
+DoorToLight
+Doorknob
+Dooz 12
Dopamemes
+DopaminAbxsr
Dopamine
+Dopamine OD
Dopatopia
Dope
+Dope Doc
+Dope Plugs
+Dope Sweater
+Dope btw
DopeAnteater
DopeCalippo
+DopeDrop
Dopedrift
Dopeturtle
Dopeules
+Dopey Iron
+Doppa
+Doppleganger
+Doppleladler
DopplerDank
+DoraDaExplra
DoraSweetass
+Dordin
Dore
+Dorede
Dorg
+DorgonPocket
Dorgoroth
Dorito
Doritomancer
Doriva
Dorkydevil93
Dorman Jr
+Dormant Evil
DormiNdaExp
Dorohedoro
Doronn
@@ -6080,39 +12522,126 @@ Dorp
Dorse
DorseHong
Dorthea
+DortyKil
Dorvagten
+Dory364
+Dos STI
DosEquis
DosKadenas
+Dosia
Dosk
Doss
+Dostalgia
+Dot Death
+Dot Head
Dot_Tea
Dothalican
+DottySloth
Douane
Double
+Double CupMc
+Double Drop
+Double Take
+Double agent
+DoubleBrowns
DoubleDeezus
Doubleb011
Doubledonk
+Doubt
+Doubt It
+Doubted Pyro
Doug
+Doug Salt
+Douglasotto2
Dougoboy
Doujinmoe
Douq
+Douyin
+Dova_sage
Dovahkiintim
Dovahkyng
+Dovitello
Dovydas54
Dowatnow
Down
+Down Vote Me
+DowniePatrol
Downland
Downlifter
Download
Downtown
+Downworld
+Dowzi
+Doxus
Doxxme
Doxy
Doye
+Doyer1
+Doyers
Dozck
Dozerdayne
Dozerrrr
DpittmanIM
Dqzi
+Dr 7
+Dr Atsum
+Dr B3rry
+Dr Bading
+Dr Barty
+Dr Butt Love
+Dr Caccon
+Dr Camembert
+Dr Cremaster
+Dr Crumpet
+Dr DO0M
+Dr Edy
+Dr Flipflops
+Dr Gainz
+Dr Geyseks
+Dr Glottis
+Dr Gotham
+Dr Gulak
+Dr Harry Nut
+Dr Ivar
+Dr Jago
+Dr Jerry
+Dr Kenchi
+Dr La Scotte
+Dr Lulu
+Dr Madv
+Dr Mawffle
+Dr Melons
+Dr Mikey
+Dr MonaLaser
+Dr Mustacho
+Dr Mustard
+Dr NFC
+Dr Neuron
+Dr No Life
+Dr Oreo
+Dr PFAFF
+Dr Phil
+Dr Plebeian
+Dr Quirke
+Dr Rave
+Dr Robster
+Dr Rum
+Dr Shook
+Dr Siesta
+Dr Slayer
+Dr Stamps
+Dr Swaggins
+Dr T e a r
+Dr Tanner
+Dr Volts
+Dr Will MM
+Dr Yosty
+Dr Zeby
+Dr Zeh
+Dr Zimm
+Dr obZen
+Dr smithing2
+DrAsTiiC
DrBeast
DrBen50
DrBigSang
@@ -6121,96 +12650,197 @@ DrBlumpkinz
DrBuckFitchs
DrButter
DrC0X
+DrChezz
DrCrunch13
DrDRespect
+DrDankMan
+DrDankRip
+DrDemitrius
+DrDennisMD
+DrDitalini
+DrDoddi
DrDruen
DrEfficient
DrFlobe
+DrFognog
DrHugecookie
+DrJoose
+DrKayzed
+DrKevinn
DrKiloGram
+DrKush69
DrKushBurner
+DrLoomis
+DrLuckyacorn
DrMatthie
+DrNachtiga
DrOly
+DrPeppermmm
+DrPhil2019
+DrPhineas
DrPoopstein
DrProfess0r
+DrRift
DrRipStudwel
DrSevens
+DrSkunkPhD
DrSquanto
+DrSwag
+DrWodahs
DrWoolyNips
Dr_Olusegun
DraCoNiiaN
+Draacaryss
+DraakSeviper
+Draakmonkey
Drac0claws
Dracarus
Dracaryys
+Draccnor
+Drache104
Draciel
Drack3d
Drackon
Draco
+DracoGhost
Draconian111
+Dracote
Dracts
Dracula50125
+Draeghem
+Drag Puff
+DragSyndrome
Dragen
+Dragen Ballz
+Dragers
DraggSlayaa
Dragnarok
Dragneel
Dragnipurake
+Dragnkllr233
Dragon
+Dragon Boots
+Dragon Brew
+Dragon Gras
+Dragon Imp
+Dragon Not 6
+Dragon Sword
+Dragon Those
+Dragon7998
DragonAxePlx
DragonDrew
+DragonKlaas
DragonPrime
+DragonSpayer
Dragonbait4
Dragonboy691
Dragoncore74
+Dragonfeir
+Dragonflew
Dragonheat46
+Dragonkin892
+Dragonkingiq
Dragonlear1
+Dragonluv16
Dragonmake
DragonoidA2
+Dragonrains
Dragonrune16
+Dragons Iron
+Dragonslayaz
+Dragonstompy
Dragonstone
Dragonvirse
Dragonz
+Dragonz Fury
Dragoon
+Dragoon0517
Dragoonalfa
Dragoonhuntz
+Dragoonnoth
+Dragoscale03
+Dragq
+Dragster5300
Draind
Drairi
+Draiserman
Draithus
Drakanelf
+Draken Feest
+Drakenwold
Drakesh12
Draket
+Drakhom
Drakken
Draknar
DrakoVamp01
Drakonid
+DrakosWrath
+Drakuonis
Dramyre
+Dranasty
Dranty
Drap
Drapht
+Draugadroid
+Drava
+Drawbridge72
Drawde
Drawll
+Drax
+Drayden
Drayheart
+Draynth
Drazar
Drazart5
Drazhe
+Drazzo
Drbeto11
+Dre Skrila
Dread
+DreadPandora
+Dreadfvl
+Dreadnott173
+Dreadnough77
Dreadnoughtt
Dreadnuts
+Dreadzie
Dreagation
+Dreak
Dream
+Dream Deeply
+Dream Delve
+Dream Plan
+Dream Queen
+Dream Realm
+Dream Tempo
Dream-layer
DreamJT
Dreamboats
+Dreamcatcher
+Dreamchasr
+Dreamfreeze
Dreamguy
+DreamingLily
DreamingNote
+DreamisBack
+Dreams Real
Dreamscape
Dreamstain
+Dreamvil
+Dreamy Ku
DreamzRs
Drecy
+Dredd
Dreddshott
Drednok
Dreek
+Dreepy885
+Dreeww
+Dregulle
Drei
+Dremarial
+Drenthe
Drenz
Drenzek
Drenzi
@@ -6221,78 +12851,167 @@ Drew89
DrewNG
DrewToshiro
Drewbber
+Drewbob24464
+Drewby
Drewcas
Drewfuss32
DrewsHotMom
+Dreww
+Drex
+DrezaR
Drezilith
Drfannypack
Drgreenthumz
+Drie Fristi
+Dries D-P
+Driesca
Driest
Driewieler
Drift
+DriftTap
DriftVolvo
Driftzzilla
Driger
+Driger F
+Driink
+Drijf Hout
Drikett
Drikon
+Drill n Fill
Drink
+Drink 4 Loko
+Drink Empty
+Drink Local
+DrinkCheap
DrinkPapaMlk
DrinkSlinger
Drinkability
+Drinker
+Drinkin Pete
Drip
Drip To Hard
+Dripping Gut
DrippingSack
+Drive Stick
Driver193
Drivious
+Drizzy Drake
+DrkMstr89
Drkfirelord2
+Drlime
+Dro0
+Dro268
+Droefto3ter
Droge
+Droge Dackel
DrogeBanane
+Droid
Dromedario
Drommy
Dromy
+Dron Iick
+Drone Reed
Drone347
+Droog Meneer
Droom
Droopy
Drop
+Drop Acid
+Drop Brews
+Drop Please
+Drop Rates
+DropGetter
DropMeUrPet
DropTheFlop
DropTopWizop
+Dropko
+Dropletics
Drops
DropsWhen
+Drosaire
Droski
+Drouter
Drri
Drrrrunk
Drswole
DrtyBusDr1vr
+Drtyhnddog
Drudenhaus
+DrudgeMunkey
Drug
+Drug Test
DrugProblems
+Drugged Out
Drugonaut
+Drugs Hurt
DrugsArBadMK
DrugsHere
+Drui
+Druknr
+Drukzah
+Drum
+DrumBarrel
+Drumaz
Drummaboy276
Drummadr
Drummerz
Drums
+Drums X
+Drums of War
DrumsSpace
+Drumz
Drunk
+Drunk CCTV
+Drunk CJ
Drunk Jake
+Drunk Mimic
+Drunk Pastor
+Drunk gaming
+Drunk n High
DrunkAssassn
DrunkDriving
+DrunkGhillie
+Drunken
+Drunken Monk
+Drunken org
Drunkfam
+Drunkiin
+Drunkn Fun
Drunknerd
Drunknhiiiii
+Drwe
+Dry 4 Hilt
+Dry Cleaner
+Dry Dong
+Dry Hard
+Dry Hardcore
+Dry Soup
+Dry Trip
+Dry on stuff
+Dry so I Cry
+Dry x
DryBandit
DryWolf
Dryhump
+DryksMuseum
Dryness
Drynx
+Dryron Man
Dryskies
+Drysol
+Dryune999
Dryya
+DshubaMisfit
+Dsk 10
DssHimself
Dstroyed
+Dt2m
+DtWoofles
Dtjenl
Dton
+Du
+Du Old Pker
+Du lourd
Du5tin 3
DuTson
DuYorick
@@ -6300,231 +13019,489 @@ Dual
Dualerz
Dualicious
Duaneker
+Duarterecife
Duathlon
+Dub Season
+DubC Brownie
+Dubalonius
Dubber
+Dubbers15
+Dube
Dubie
+DubieDebies
Dubios
Dublestuffed
Dublet
Dubs
+Dubs_789
Dubsake
Dubspeck
DubstepsDead
Dubu
+Dubu Dahyun
Dubz4Dayz
Dubzy91
+Duc
+Ducid Lream
Duck
+Duck Sucker
+Duck Tape
+DuckEnte
+DuckNoSmoke7
+DuckSick
Duckcited
+Ducklovesyou
Duckreas
+Ducks Quac
+Ducks U
+DucksFatha
+Ducky HVIII
+DuckyTears
Duckzi11a
Dudash
Dude
+Dude Come On
Dude12677
Dude9103
DudeAtHome
+DudeItsMikey
+DudeWD40
+Dudefish64e
Dudeimblazez
+Dudenmi
Dudetastic
+Dudification
DuelKing
+Dufendr
Duff
+Duff Daddy
+Duff Groupie
+DuffHeavy
Duffmanas
Duffs
Duffy234
+Duffybroh
Dufwha
+Duggie
Dugong1338
+Dugsie
+Duh Kota
+Duhstin
Duhul
+DuiBuQiShaBi
+Duindorp
+Duk Me Hard
+Duke Ag
+Duke Babylon
+Duke Roland
+DukeBaird
+Dukino
+DukkuTzi
Dularian
+Dulezburg
Duli
+Dullskie
Dulwich
+Duly Ignored
+Dum n dumr
DumFuknIdiot
Dumb
+Dumb Alien
+Dumb Ass Dan
+Dumb Drunk
DumbDog
DumbMatt
DumbThiccAss
Dumbaneering
Dumbass
+Dumbass 69
+Dumbass Tony
Dumbells
Dumber
Dumbfounded
+Dumbfuk
+Dumbi
+Dumbledore
+Dumesday80
+Dumfries
Dumle
+Dumoo
Dumpert
+Dumpsterjed1
Dumwood
+DunJunn
Dunadane
+Dunbahn
Dunc95
Duncan
+Dunco
Dundasso
Dundefeated
+DunderHonung
+DunderLadd
+Dundiez
Dundonian
Dundrift
+Dundrturken
+Dune dain
+Dungfung
Dunghead
Dunizz
Dunjins
+Dunjun
+Dunkbox
Dunked
+Dunked on
+Dunkies
+Dunkle Sonne
+DunknDink
+Dunkston
Dunlaf
DunneDone709
Dunnill
Dunwall
+Duo Armadyl
+Duo Elysian
Duodenum
Duoing
Duoli
DupaMuck
+Dupe Holder
+Duper
+Dupey
Duplicated
Dupy007
Duqq
+DuraDoobs
Duracell
Duracell321
+Duradad
Duradal
Duradels
Duradyl
+Durag Pat
+Duramax
+Durant
Duravillidad
Durex
Durexslayer
+Duri
Durial
Durial32won
Durialives
Duriel1
Duriul321
Durkburt
+Durlz
Durni
+Durns Main
Durocher
Durooo
+Durtsa
+Durtsamang
+Durtstar
Durty
DurtyFish
DurtyFish HC
Durukah
Durumfe
Durumoomoo
+Durza Spy
+Dus1O
Dusansss
Duseballs2
+Dushie
+Dusk Summers
Duskel
+Dust in
Dusted
Dusters
Dustielle
+Dustin Rush
+Dustinant5
Dustinn
+Dustins Main
Dusto56
Dustpan18
Dustt
+Dusturbia
Dusty
+Dusty cones
+DustyNoods
DustyPope
+Dustyin
Dutch
+Dutch Diablo
+Dutch Dog
+Dutch GOdz
+Dutch Genius
+Dutch Quin
+Dutch RvG
+Dutch girls2
+DutchEnergy
DutchStuff68
+Dutchbobby
+Dutchie
+Dutchtin
DutchtinOS
+DutchtinsAlt
DutchyCrazy
+Duty
Dutzu
Duuni-Pete
Duva
Duvel
+Duvelicious
Duvl
+Duwua Lipa
+Dux Sauce
Duxt
Duztin
Dvaergen
Dvdasa831
Dven
Dvlkid
+Dvn
Dvsk
Dvst
+Dw b happy
+Dw ight
+Dwagos 2
Dwake
+Dwaki
Dwarf
DwarfSailing
Dwarfoox
Dwarfson
+Dwarve Mage
Dwaybe
+DwerlzCH
Dwibbel
+Dwight Sn00t
+Dworf
Dxnnis
Dxscoveries
+Dxue
Dxukko
Dydapynk
+DyePhix
+DyinToLive
DykeMenace
+Dyl Dough
+Dyl Gates
Dyla
+Dyla n
+Dylan Du Sol
+Dylan Iron
+DylanCarl
DylanFx
DylanWad
Dylanimal
Dylanm504
Dylann070
+Dylano
Dylbots
+DyldoGreat
+Dylectable
Dylian
+Dyllann
Dylrex
+Dyls
Dylshanwang
+Dylson
+Dylsy
Dymass
Dymenshun
Dymosh
DynamicDuo
+Dynamicdan47
Dynasty
Dynloris
Dynomite
+Dynstyreborn
Dyonutborne
+Dyonysos
Dyoung116
Dypso
Dyrakos
+DyreBatt
+Dyreshot
Dyrus
+Dysae
+Dyslexic gg
DyslexicTree
+Dyslexual
+Dysliexc
+Dyspnea
Dystopias
+Dysturbed
Dystxpian
+Dyth
+Dyvv
+Dyy
Dyzurah
Dz03
+DzRz
+Dzakar
Dzangg
Dzentelmenas
+Dzievan
+DzintarsOls
+Dzoseris
+DzsungelTyuk
Dzud
+Dzun
+E D V
+E Fox
+E MB
+E N I M A
+E R A
+E S H
+E SL
+E V 0 L
+E Z I O
+E hm C uee
+E ldest
+E lixor
+E lvarg
+E lves
+E mni
+E mpathy
+E njoy
+E nvy
+E p i i
+E r ic
+E th
+E thy
+E volve
+E-Dawg478
+E-Grill
E-Hubble
E-S-T19XX
+E1K
E4as
EA888
EARLYoCUYLER
EBDB
EBIDABLAY
+EBZ
ECCIES
ECH0
+EC_Legends
+EDATERHG69
EDGV1L
+EDM Erik
+EDM Playlist
+EDMJo
+EF tanq
+EFFlClENT
+EFILLAICOSON
+EFL
EG6808
+EGA
EGIRLSIMPER
+EGirl Marcy
EHPause
EHstro
EIGRP
EIessar
+EIithi
+EJ 207
+EJackUL8
+EL BULLYS
+EL GA TO
+EL Guuapo
ELCAMI
ELFlikeaBOSS
ELITE
+ELJosh
ELUSIVE
+ELVD
+EMIYA Alter
+EMPER0R95
+EMaes32
+EN X
ENAC
ENimmo
+EOCscape
+EOD20
EODdv
EPLS
+EREXI0N
ERGENEKON
ERJ145XR
+ERRIE HERRIE
ERRORMONSTER
+ESCEDDIE
+ESP Zone
ESPARG0
+ESPORZUL51
+ETE76
ETHIOPIAN
ETurns
+EV6A
+EVA ELFlE
EVE0
EVScape
EWFPLMFRLRLF
+EXECUT0RZ
+EXTT
EXpoZuR
+EZ Tag
+EZ Till Dead
EZ-Y
EZBar
EZnvm
+EaTZyourOReO
Eac63
+Eadgars Ruse
Eadles
Eagel89
Eager
Eagle
+Eagle Eye
EagleSafari
EaglesWentz
+Eairj
Eajk
+Eara1
+Earendil
Earl131
EarlRico
EarlVincent
Earll
+Earll Ragnar
EarnNest
+Earth rune
+Earth1ing
+Earthling Em
+Earz
+EasY FraG
Ease
East
EastEnders
EastSyde
+EastWho
+Eastlakeclub
+Eastment
Easy
+Easy Girls
Easy1
+EasyDingMike
EasyFro
+EasyJet
EasyNoRoids
EasyRNG
EasyTurbo
EasyWhale
+Easycore
+Easyskillszs
+Eat Crow
+Eat God
+Eat Hot Chip
+Eat Tacos XD
+EatBrick Kid
+EatMoreGlue
EatNutsGegex
EatSand
EatSleepPlay
@@ -6532,43 +13509,84 @@ EatULive_666
Eatbananana
Eathan
EatingBigD
+Eatpiebro
+Eats Pant
EatsPoop
Eatu
Eazie
Eazy
+Eazy AF
+Eazy Rat
+EazyGam3
Eazy_Peazy16
+Eazymon
+Eb Marah
Ebbitten
+Eberebus
Ebgame2
Ebinki
Ebisumaru
+Ebola
+Ebolapaska
Ebp90
Ebrahem2004
+Eburr
+Ec0
+Ecahs
+Eccles Alt
Ecdubs
Echo
+Echo GIM
+Echo Justice
+Echo Slam
Echo4211
+Echo_XVII
+Echte Belg
+Ecko RS
Eckou
Eclardyne
EclecticDern
Ecnubsirhc
EcoLite
+EconPhD
+Ecs Nick
+Ectuu
+Ecxes
+Ed Dobalina
+Ed Si
+Ed Word
EdEddndEddy
+Edd Gein
Eddapt
Edde7000
+Eddi e
+Eddie GGs
+Eddie MLG
Eddie1402
EddieMercury
EddieTross
EddieVanHalo
+Eddoz
+Ede n
Edelbae
Edelweise
+Eden XD
Edga64
+EdgaRyto
Edgar
EdgarAlnGrow
EdgarKing
+Edgarr
Edge
+Edge c dr
+Edge51
Edgelord
+Edgerunner
Edgevill
Edgeville
Edghill
+EdgingGod
+Edgy Boss
Edgykid
Edgynald
EdibleChickn
@@ -6576,22 +13594,48 @@ EdibleSnow
Edisx13
Ediverse
Edje
+Edjob
+Edmund
+Edn
+Ednnnx0
EdoKirurari
+Edocsil Domi
+Edocsil IRON
EdotheJew
+Edoxa
+Edpls_o
Edson
Edspresso
Edsy
+Eduardo II
+Eduardoo II
Eduasia1
+Edunu
+Eduzey
Edvin
+Edvius GO
Edvyno1
Edwald0
+Edward Teach
+Edward phish
Edwarriorx
Edwin Ownz
+Eeeeeeeman
Eeeeera
+Eeekpenguin
+Eeepen
+Eek The Nub
Eeli
EelsUpInside
+Eem lekker
EenViezeVent
+Eend btw
+Eendsaurus
+Eernegem
Eeveeeee
+EeveyBee
+Eexhausted
+EfORya
Efendi
EfficientBot
EffinNips
@@ -6599,63 +13643,147 @@ Effril
Efnie
Eform
Eftur
+Egg Boy
+Egg Olmlet
+Egg rolls
+EggInTheRain
Egganator1
+Eggs 11
+Eggs N Bacey
+EggscapeRoom
+Eggspert
+Eggssmells
Eggsy
Eggtooth1
Eggy
+EggyChipz
+Eggzotic
+Eglerz
+EgoTeri
Egoistic
Egoran
Egorous
Egotistixal
+Eh MapleTree
Ehdjsnd
+EhhFK
+Ehms
Ehnra
EhpEhbGrind
+Ehpatrick
+Ehpriori
EhrenSpoon
Ehunter
+Ei hekille
+Eidolonvool
Eientei
+Eigenspace
+Eigenvalues
Eight
+Eight_10
+Eigma
+Eihwaz
EikAyZ
Eikel
+Eilfs
Eimp
+EinBerlin3r
Einar
Einaras
+Eindbaas
+EindelijkMax
Eingebildet
Einsteins
+Einswarior3
+Einyel
Einzelkampf
Eirik
Eisen
+Eisengor
Eitsei
Ejiogbe88
Ejjj1000
Ejma
+Ejx
+Ekali
Ekim
+Ekim117
EkkoThresh
Eklof
+Eklofs
Ekonomisti
+Ekovo
+Ekstra
+Eksynet
+Ekwendeni
Ekxo
+El Arana
+El Blame
+El Blaze
+El Boppo
+El Chip
+El Ghost
+El Guapo
+El Panache
+El PapiTrump
+El Pato lOko
+El Patolino
+El Pinguino2
+El Podger
+El Scouse
+El Smurf 370
+El WarLord
+El Znorro
+El-Fahoum
ElBlancooo91
+ElGatoGris
+ElGreg_4
+ElHash
ElJReezy
ElJohnny
ElOso
ElPoyoSenpai
+El_Pickle69
Elaedor
+Elano
Elasticy
+Elatedscarab
+ElationArrow
+ElbartoOSRS
+Elbowd
+Elbows Out
Elbs
Elchapo24
+Eldasero
+Elder Coal
+Elder Siroj
+Elder nerd
+ElderMoth
ElderRyu
Eldereon
Elderpliney
+Eldest Sense
Eldia
+Eldin
Eldonskii
Eldoubleyou
Eldrek
+EldridPenny
Eldritch
+EldritchMage
+Elduz
Eleandil
Elebit
Electr0lysis
Electric
+Electric Mud
+Electric cat
+Electrics
Electrike
+Electro Beat
+Elektr0nas
Element
+Element Sk8
Elementality
Elementhur
Elementiix
@@ -6668,57 +13796,97 @@ Elendaro
Elenion
Elephanten
Elephants
+Elephantz
Elephent
Elev
+ElevatedLife
ElevatedSoul
Eleven
Elevennn
Elevil
Elevo
Elexuitt
+Eley
Elezar
Elf King Leg
+Elf u
+Elfess
Elfie
+Elfinsocks
Elfire626
ElfsWordFly
+Elgifted
Elgingo1
+Elgstant
+Eli Ancients
+Eli Fe
+Eli Junior
Elia135792
Eliass
+Elice
+ElichikAyase
Elicit
Elif
+Eligos
+Elijah Who
Elilia
Eliot
Elipson
Eliptats
+Elirond
Eliseuh
Elit
+Elitaire Lul
Elitarisme
Elite
+Elite HIT
+Elite Moscu
+Elite Sendi
+Elite Slayer
Elite387
+EliteJager
ElitePvmer
EliteScaper
+Elite_Quests
Eliteisftw
ElitesEyes
ElitesFinest
+Elitist Weeb
+Eliwin
Eliwood225
Elixir
Elizabethboy
ElizeRyd
Eljaaa
+Elkanath
Elkias
+Ell1eScape
+Ellakazam
Elliebus23
Elliot727
Ellise29
Elliterate
Ello
+Ello Ron
Ellphie
+Elly Dog
ElmSpringsTN
Elmatron
Elmo
+Elmo Narca
+Elmos Wrld
+Elmswood
+Elnaphant
Elnuma
+Elo Luigi
+Elo Solo
EloJimmini
Elocuente
+Elodie
+Elon M9sk
Elons
+Elox7
+Elpis
Elppu
Elqnaattori
Elrebririand
@@ -6728,56 +13896,121 @@ ElroyFTW
Elryeth
Elsa
Elshak
+Elsheshima
Elshi
+Elshire
+Elsworth
+Eltader2
+Eltry
Eltuu
+Elucidation
+ElunedsSong
+Eluniel
Elusive
+Elusive Drop
Elusive818
+ElusiveOne
+Eluti
Eluw
Elve
+Elve Alt1
+Elve Elve
+Elveiq
Elven
+Elven Durant
+Elven Lamp
+Elvenborn
Elverum
Elvey
Elviax
+Elvin
Elvis
+Elvis Crespo
+ElvisArt069
Elvs
+Elvyn Frenzy
+Elvz
Elwood
+Ely the Man
+ElyGoulding
Elyam
+Elyaris
+Elyas5
+Elyas_Max
+Elycal
+Elyes
Elyixa
Elynescence
Elyphosani
+Elyqs
+Elyrion
+Elysi
Elysian
+Elysian Brew
+Elysian OSRS
ElysianError
ElysianOP
ElysianTank
Elysianlove
Elysianz
Elysion
+Elysiuhm
+ElysiumFalls
Elyte
Elyxr
Elyysian
+Elyzarin
+Elz
+Em il
+EmTvLive
+EmaBeast OS
EmaRae
+Emacity momo
Emad
EmagndiM11
+Emalexa
Emanated
+Emanuel
Emasterone
+Ember
+Ember of Ash
+Embereus
Embossis
Emce
+Emeowtion
Emerald
+Emerald Jack
+Emeraldx
Emergency
Emericanpkur
+Emerickb93
+Emeritas
EmeritusD
+Emhrys
Emiel
+Emiel Btw
EmielM
+Emielos
+Emiit
Emilharen
Emilis
+Emilliio
Emilozz
+Emilozzz
+Eminem Yupp
+Emirdagli
Emirdagliii
Emithyst
+Emiya Shiro
Emma
+Emma Main
+Emma Q1
+Emma epsi
Emma1020
EmmaCn132
EmmaEmma
EmmaRose
+Emma_RC
Emmaes
Emmalitarosa
Emmet1156
@@ -6785,28 +14018,52 @@ Emmet20
Emnay
Emnicious
Emnitylol
+Emo Bee
+Emo King
Emoness
Emoticon
Emoyy
+Empathy TKE
Empathys
Emperor
+Emperor Elo
+Emperor Xau
EmperorBuggy
Empery
Empire
+Empire State
+Empireglorth
Empirix
Empty
+Empty Box
EmptyB
EmptyBox
Emptyhalo
+Emptynogin
Empyre
+Empyrius882
+Emriat
+Emu War
+Emumafia
Emus
+Emylia
En Jernmand
+En ki
+En oo vajaa
En99omgangen
+EnCue
Enabled
Enabler
Enanthat
+Enbrel
+EnbyDeal
Encrypted
+Encryptiron
+Encyclopedie
+End Goals
+End Grind
End1ess
+EndOnDeath
Endanged
Endem1c
EnderMart
@@ -6814,134 +14071,266 @@ Enderofwar
Endgame
Endgameplzz
Endgegner
+EndingTime
Endir
Endl3ss
EndlesNights
Endless
+Endless Dawn
+Endless RNG
+Endlingg
Endo
Endor
+Endos
+Enedal
Enemez
+Enemm
Enemyboy
+Energie
+Energise
Energy
+Energy Dave
+Enert
Enes
Enfers
+Enfes
+EnforcerOP
Eng1and
Engage
+Engagement
EngelNacht
Engen
Enginaer
Enginarc
Enginear
+Engineer Sam
+Engineered
Enginerd09
+Engl1sh
Englandwon
Englebassen
+Englehr
English
+English Sir
+English noob
Enhtitled
EnigmaCoder
EnigmaWR
+EnigmaZen
+Enis Kanter
+Enivid
Enjoi
EnjoiAssault
Enjoy
+Enjoy It
+Enjoy Today
Enjoymydhide
Enjoys
+EnjoysQuests
+Enk rypted
Enkaidu
Enkeltje
+Enkh
Enki
+Enkidu260
EnlargedNads
EnlargedNut
+Enmios
+Enora Nyx FE
Enoran
Enormous
+Enormous Hog
+Enos
EnoughGfuel
+Enoux
Enphadei
Enraged
+Enraged Crow
+Enraged Lamp
+Enranged
Enrich
Enrico
Enrik
Enroza
Ensanguined
Enshu
+Ensnare
+Ensomhet
+Ent Sapling
+Ent1tle
Enterprise
+Enthusigasm
Entitled
+Entiy
Envello
+Envidius
Envied
Envil
Envious
Envvi
+Envx
Envx1
Envy
+Envy S
+Envy lul
+Envyctus
EnvyouS
Envys
Envyy
+Enza Denino
Enzed
+Enzel
Enziguru
Enzyme
EoMeri
EocBlowsNuts
Eodwyn
+Eol Ivan
+Eos Adamm
+Eos Mark
Eostrix
+Eowy
+Ep1breren
+Epaah
Eperz
+EphermalGoat
+Ephi
+Ephrayim
Epiales
Epic
+Epic Nom
+Epic Popo77
+Epic Specz
+Epic Star
+EpicGamer69
EpicReefer
+EpicSalmon
+EpicSpasms
EpicToaster9
+EpicTomato
EpicX
Epic_Knight0
+Epicderk
Epicoz
Epicurus4
Epicvoid
Epicx
+Epigraphs
Epiixx
+Epikki
Episodic
+Epitohm
EpitomeSlay
Epix_x
Epiyon
Epods WifeY
+Epoinen9
Eponas
Eposs
+Eppdawg
Eppers
Epping
+Epson Eco
+Epyll
+Eq
Equilibria
+Equilities
Equnox
Eqwity
+Er0l
+Er1kasss
ErBr
+Era
EraJorma
Erabeus
+Erad
Eradicus
+Eragon 1
Eragondragen
Erase
+EraseThat
Erased
Eray
+Erbal
ErbearIV
+Erbiboar
Erbyss
+Erdi
Erebus
+Erect Chair
+Erect Diglet
Erectus Croc
+Eredln
+Eren The Nub
+Eren Yaegar
Erg129
+EriUmi
Eric
+Eric Brad
+Eric Dingus
+Eric Hansen
+Eric RS
+Eric V
+EricN7
EricPrydz
+EricR95
EricTheNoob
+Erica
+Erican Maxos
Ericc
+Ericgone13
+Erichilles
+Erics Pixels
+Ericsurf6
Eriction
Erie
Erijk
Erik
+Erik Ryatal
ErikProbably
+Erikaugust
Erikci Jr
Erikito09
+Erikkert
+Eriknau
+Erikoisjouko
Erikoiskahvi
+Eriksen14
+Erikske89
+Erikv28
Erinus
+Eriscord
+Erixzo
Erkki
+Erkki Pers
+Erkkiks
Erlid
+Erlin
Erlksson
+Erm its me
+Ermac
+Ermafrodita
Erna
+Ernestaiii
Ernesto056
Ernsour
+Ero
Erock2828
Erocktastic
+Erodel
+Erodoris
Erony
Eros
Erosei
+Erotic Maid
+Eroxtroy
Error
+Error 510
+Error X Life
+Error812
+ErrorSeven
Errric
+Errrr
Ersei
Ershayz
Ershayzz
@@ -6950,29 +14339,44 @@ Ertsu
Eruni
Eruptingcat
Erwin
+Erwin J
ErzaGames
ErzaScarlet
+Es0x Luc1us
EsArTee
+EsJayW
EsXP
EsbenViking
Esbuh
+Esc anor
Escalation
Escaline
Escanor1994
EscapeMaIron
+EscapeWhere
Escension
+Escha
Escnirp
Esconex
+Escot
+Esd
+Ese Burrito
Esham
+Esheme Sen
Esimies
+Esinaahka
Eskalt
Eskandar
Eskeleto9
Eskett
+Eskett II
+Eskib0y
Eskii
Eskild
Eskimeme
+Eskimo
EskimoFro
+Eskizzibur
Esko79
Eslamm
Eslihero
@@ -6985,10 +14389,16 @@ Espuky
Espyria
Esquelito
Essencehour
+Essex RS
Essylle
+Est Bellum
Estafeta1
+Estar
+Estebaan
+Esteedee
Esteeme
Esteet
+Esteffano 3d
EsterKai
Esterbrook
Estetica
@@ -6996,20 +14406,33 @@ EstevamStain
Estiem
Estonia9184
Estra
+Estrogenizer
+Estus
Estusin
Esya
+Etakenai
Etardoron
EtchaSketcho
Eternal
+Eternal Envy
+Eternal Max
+Eternal NEET
+Eternal Orb
+Eternal Qt
+Eternal Riw
EternalGuide
EternalHeart
EternalPants
+EternalSin9
Eternalfury2
Eternalgod99
Eternity
+EternityAP
EternityEndz
Ethaan
Ethan
+Ethan Hunt
+EthanMcSexy
Ethanol
EthansMain
Ethel
@@ -7018,157 +14441,304 @@ EtherBunny
Etherealist
Ethereous
Ethernet3
+Etherscan
Ethoxide
+Ethread
Ethwin
Etikk
Etis
Etkzera
+Etna
Etnie0
Etobicoke
Etrengereid
EttLitetHus
Etuovi
Etyaz
+Etymology
+Eu_Matheus
Euanx
Eucaryptus
Eucleides
Euclidian
+Euclipenguin
+Euf
+Eugenepickl3
+Euhem
+Euhh
Eukaryote
+Eukko
+Eulers Eagle
Eulogise
Eunbiii
+Eunie Xeno
Eunx
Euphael
+Eupharu
Euphorion9
+Euphoriotic
Euro
+Euro Centric
+EuroGarden
Eurovizija
Eusheen
Eusiriito
Euthia
+Euxii
+Euxy
Eva-O1
Evadari
+Evaiv
EvanWilliams
+Evanz40
Evaptix
Evawe
+Evdog
+Evelynn UwU
Evemarner
+Even2000
Even3518
EvenMater
+Evenepoel
Evening
+Eventyrlig
Ever
+Ever so Dark
+EverSingular
Everglow
+EveronSky
Eversiction
+Every Color
+Every Word
+EverybodyZuk
+Evette
Evictus
Evil
+Evil Buu
+Evil H
+Evil Inari
+Evil Kenevil
+Evil Lizard
+Evil Lord
+Evil Nishiki
+Evil Oak
+Evil Twin
+Evil Zayne
+Evil-Mind69
Evil3yez
EvilCopycat
+EvilDeeds
+EvilDegen
EvilFootLong
EvilH4mmy
+EvilOwen01
EvilTriumphs
Evilaz
+Evildoer
+Evilegod2
+Evilelfy
Evilhammer
+Eviljay
Evillized
Evilstar34
Eviltroll648
+Eviran
Evirane
Evnn
Evo9
+EvoSlacker
EvoSlayz
+EvoeHalt
Evoke
Evolooner
Evolution
Evolved
+Evra
Evrs
Evrybodypays
Evse
Evuk
+Evultion
+Evylix
Evytt
Evzmac
+Ew Its Mike
Ewan BTW
+Ewang
+Ewiiyar
Ewmu
Ewos
+Ewya
+Ex Files
+Ex Holy
+Ex Port
+Ex Sythe
+Ex-Slur
Ex3rt
Ex903
+ExHCMangy
+ExMachina
+ExMaxxed
ExPro
+ExPsi
+ExQ Bratan
+ExSevenTech
+ExShiron
+Exa OuO
+Exaalt
ExamJ
+Exambient
+ExamineCoins
+Examines
Examon
+Exanso
Exarch
+Exasperation
Exaz
+Exbos
Excadrill
Excaria
ExcelIsLife
Excellarate
+Excellini
+Excinium
Excise
Exclude
Exclusic
Excody0
ExcuseMyStr
+Execrating
+Executed
Executes
Exella
+Exem
Exercise
Exero
Exflacto
Exhaust
Exhibition
Exhumed
+Exi Sisukas
Exia
Exile
+Exile Vision
Exile88
+Exile_vChad
+Exiled Noobi
+Exiled Peon
+Exiled Slay
Exileeeee
Exiquio
Exiriam
Exiting
Exmigrant1
+Exminer
+Exo25
+Exoden
Exodusty
Exonaut
Exor
+Exorcism
Exoristic
Exorzist
Exotic
+Exotic Xenon
+Exotica
+Exotick
+Exp Jesus
+Exp Nerd
+Exp Wasting
Expaaja
Expansa
Expansce
Expanse
Expensive
+Experience
+Expl0it
Explaindeath
ExplicitPvm
+Explodet
+Explodium
+Exploiter
+Explorer
+Explorifice
Explosia
Expochan
Export
+Expozz
Expressed
+Expressen
Exright
+Extella
+Extended C
Extile
Extinct
+ExtinctDecay
+Extinguished
+Extortionate
Extra
+Extra Chance
+Extra Droog
+Extra Poor
+Extra Shadow
+ExtraRNG
ExtractorX
+Extranjer0
Extreemkills
Extrem3b0y
Extreme
+Extreme JeJe
+Extreme Moo
+Extreme Pray
ExtremeJokeR
+Extremterms
Extrim
Extrovert
Extubation
+Exty
Exultia
Exume
Exus
+Exus De
Exustron
Exwalker
+Exxtinct
Exynyt
+Exz0
+Exzacly
+Exzactly
Exzakly
+Exzian
+Ey1
+Eye patch
+EyeBDaMan
EyeHaveToPoo
EyeMakeYouQQ
Eyeless
+Eyelessjohn
Eyeofdeath3
+Eyeron E
+Eyes Inside
EyesLowIndo
EyezClosed
+Eyggs
Eylix
Eymox
+Eyrfire
+Eyup xD
+Ez Klaplong
Ez4Peru
+Ez4u2nv
Ez4u2say
EzBot
EzCashin
+EzSlayEzLife
EzUnReal
Ezarc HCIM
Ezdrae
+Ezero Br
Ezey
+Ezfart
Ezia
Ezra
Ezup
@@ -7177,117 +14747,299 @@ Ezxkiel
Ezzardx300
Ezzi
Ezzuna
+F 3 4 R
+F 0 N Z Y
+F 3 R R U M
+F A C E
+F A N TT I
+F E L I CYA
+F For Flash
+F I X E D
+F L A T
+F M L
+F R A T
+F Ribeiro
F SONY
+F T P
+F You Bro
+F athlete
+F e e b s
+F l a n Cat
+F l u f fy
+F l ux
+F loofy
+F reeze
+F u z Z e
+F ury
+F-16
+F-ck Bleed
+F-ck Irons
+F00DCOMA
F00F
+F0O
F0REIN
F0ZI
+F0cus Me
F0rtune
+F0sta
F0xBr34d
+F1 Mercedes
+F104
+F19
+F1REWIND
F1nalHour
F1rst
F1skemann
+F1tn3ssWorld
F20z
F23A
+F2L
+F2P Waifu 07
+F34r My B0w
F34rcr4ds
+F3ARCE
+F3LINA
+F3lo
F4DE
+F4TB0Y
+F4ust
F4xi
F7VD3
F80Scott
+F8n
+F8tz
+F9
+FA DY
+FA Joel
FA1Z
+FAILED ZEUS
FALLGIRL1029
+FASHl0NSCAPE
+FASTBLAST I
FATHER
+FATHER RANCH
+FAlRWEATHER
+FBD
+FBGM 101
+FBGMi
+FC Groningen
+FC Liverpool
FD3S_RX7
+FE AltScape
+FE Cerise
+FE Endeavor
+FE Mazoku
+FE Smore
+FE wretch
+FE80 Seal
+FEJMBE
FER00
FER0C1OUS
+FERTILE DONG
FEstlkerpeng
+FFA
+FFA Everyday
+FFASplit
+FFIE go brr
+FFS Sam
+FFV
FF_GhiLLi
+FFelidae
FGHTIN
+FHV
+FIDADDY
+FIFG Phat
FILLME
+FIRE 0F
FIRESlTE
+FISHY au
+FIV3
FIying
+FJ
+FK Corp
+FK TURAEL
+FK1
+FKGlory
+FKN RAPTOR
+FKRA
+FL jit
+FL0CK
FL3XPL3K
+FLAPPYLIPZ
+FLC L
FLOR1DA
FLYGOD
FLYING
FLgoob
FLoKii
+FM DOOM
FMGbrien
FMLshes17
FMarshalBill
FN2187
+FNA
+FNEkkGKGKWGK
FO-LAZY
FOES
FOLEM
FONKY
+FONNlX
FOSTEEEEZY
FOUO
+FOUR GATSU
+FOV90slider
+FOXBRAH
+FP Engineer
FR1T
+FRAQSTAR
+FREEBABA
+FREED0M 1776
+FRIENDSHRIMP
+FROM ICELAND
FROO00OO0ZEN
+FROSTYFOO
+FROXBURG
+FSK Gaz
+FSW 2JZGTE
+FTI
FULGRlM
FUTRHNDRX
FUTillIFU
FVChallenger
+FW HYPZ
+FX Teddy
FXF_Tails
+FYXON
+Fa k er
FaBeSCa
FaNNtastix
FaZe
Faabio
+Faalk
Faardo
+Faarihn
+Faathos
Fabario
FabiScape
Fabiann
+Fabidjann
Fabiiano
+Fabioso
Fabled
+Fabled Fox
Fabreezy
+Fabretzio
+Fabsitz
+Fabulence
Face
+Face Seat
Face9
FaceHook
FaceTheFacts
+FacedBased
Facehuntter
FacelessBoyd
+Facilis
Facing
+Fack Russia
+Factual
+FadaPDF
Fade
+Fade Lightly
+Fade zz
+Faded Crook
+Faded Focus
+Faded Lungz
+Faded Past
+FadedFace
Faderfouras
Fadfats
Fadge7
Fading
+Faeanaro
Faebat
Faeles
Faerindel
+Faested
+Faf
FahQ
+Fahim
+Fahrbot
+Fai1ure
+Fail Be Dont
+Fail Friday
+Fail Stacks
FailFish
+FailedNoob
FailedZerk
Failing
+Failocity
+FailsauceFTW
Faint
+Faint Dallas
Fair
+Fair Folk
+Fair Luck
+Fairburn
Fairex
FairiesBane
+FairlyDecent
Fairr
Fairr Enough
Fairwolf139I
FairyFeind
FairyVeiler
+Faith xd
Faiu
Fakdo
Fake
+Fake Chad
+Fake Dylan
+Fake ID
+Fake Levi
+Fake Pobble
+Fake Suffer
+Fake Will
FakeBallots
FakeGirl
+FakeNews_CNN
FakeNudez
Fakent
+Fakeppa
+Fakez07
Fakezgen
+Fakn Oats
Faknius
+Faku
+Fal
+Fal7
Falabar247
Faladalore
Faladas
+Faladoor
+Falador
+Falador Sq
FaladorabIe
+Faladorks
+Faladussy
Falcon
Falconf1
Falconr
Falconz420
+Faleis
+Falestine
Falkenberg
+Falkuntpunch
+FallOfSolace
+Fallacy i
Falladis
+Falldyl
Fallen
+Fallen Dark
+Fallen Hopes
+Fallen Noble
FallenBlur
+FallenGods
FallenOutlaw
FallenSlayer
Fallenchamps
@@ -7300,152 +15052,395 @@ Fallon
Fallout
Falloutah
Falls
+Falls Apart
+Falls Road
+FallyFiddler
+Fals
FalscherHase
False
+False 9
+False Boon
+False Divine
+False News
FalseGod
Falsemorels
Falubo
+Fam
Fam Chi Boy
+FamIso
Famcloth
+Fame is
+Famexx1337
+Famfrit
+Familia
+Familie
+Family Crest
+Famished Fe
+FamishedNine
Famjam
+Famoose
+FamousBowl
+FamousBowls
FamousPixels
Famuel
+Fan
+Fanatic Est
Fanatiker
Fanawr
Fancys
+Fandri
Fanfiction
+Fang Dude
+FangJo
Fangsie
+FannyPaca
+Fantasieloos
+Fantastik
Fantikerz
Fantomine
+Fantrix
+Fany Pack
Fanzi
Fappel
+Fapperd
+Fapple Bees
Fapricorn
Fapworthy
+Far Alone
FarAke
FarFarOut
+FarNear
+Farages Army
+Faragi
Farah
+Faramir
+Faran
Farao
Faraolorddd
+Farcry25
Fareham
Farelinho
+Farenru
+Farewell Bud
Farfire
+Farid Lord
+Faridi
+Farigno
Farkle
+Farkwar
+Farlz
Farm
+Farm Strong
Farm11m
Farm3r
+FarmHub
+FarmRun Clay
Farmance
Farmay7
+Farmelot
+Farmenheimer
Farmer
+Farmer Blake
+Farmer Crab
+Farmer Dannn
+Farmer Jayy
+Farmer Johnx
+Farmer McGee
+Farmer Santa
+Farmer Wull
+Farmer Zach
+Farmer Zratz
Farmers
Farmertree
Farmin
Farming
+Farming Arma
+Farming Moe
Farmingfoxx
+Farmingtool
Faroeallstar
Faron
Faror
Farpoint09
Farqin
Farrier
+Farron08
Farseer
+Farseer Hat
Farsight2
+Farssi
+Fart Gunner
+Fart Shartly
+Fart Weed
+FartInMyGob
+FartSymphony
+Farthinder
+FartinLKing
+FartinLuther
+Farting cat
+FartingCow
+Farts2Wet
+Farty Ass
+Farukoo
FasTLT
Fascia
+FashionBTW
+FashionPig
+Fashy
Fast
+Fast AF
+Fastenal
Fasterman
Fastly
Fastmagepk1
Fastmaniac
+Fat Bawlsack
+Fat Boobs
+Fat Cat
+Fat Clouds
+Fat Fur
+Fat Goombah
+Fat Jonny
+Fat Leb
+Fat Maniac
+Fat Mat
+Fat Moron
+Fat Nymph
+Fat Rackz
+Fat Ralph
+Fat Salesman
+Fat Swaggy
+Fat Thin
+Fat Waddle
+Fat Wirgin
+Fat Wrath
FatBIunt
+FatBurgerKid
FatClock
FatGreasyGuy
FatITguy
+FatKidBrett
FatKidHougie
+FatMonkey
+FatSlutKing
+Fatafeat
Fatal
+Fatal Cazual
+Fatal Psycho
FatalReign
FatalXfire
FatalisRS
+Fatalsystem
Fataltorment
FatboislimOS
Fatboy6
+Fatcav2
+Fatceps
+Fatdogs11
+Fate Gu
+Fate Z
+Fateq
FatesWarning
+Fatez
Fathead
Father
+Father Of 3
+Father Of M0
+Father Tacos
Fathey
+Fatmat
+Fatrekt
Fatso
Fatstinkysak
+Fatterhead
+Fatty Combat
+Fatty Park
+Fatty-Kent
Fatty380
+FattyIsntFat
FattySupreme
FattyTerps
+Fattybanger
Fattymcdugal
Faultty
+Fausto
+FautleferQC
+Fave
+Favelador
+Favion
+Faw OCE
Fawka516
Fawn1460
Fawz
Faxon
+Fayl
Fayumi
+Fayv
FazTazTic
+FazeQ
FazeSkilling
Fazebook
+Fazed Imp
Fazist
+Fcape
+Fcbfan1994
Fctillidie
+Fe AND17
+Fe Adex
+Fe Alma
+Fe Anakin
+Fe Bastok
+Fe Carter
+Fe Clay8
+Fe Cremator
+Fe Dahje
+Fe Dentyste
+Fe Dopamine
+Fe Gangsta
+Fe Grom
+Fe Gson
Fe Hellpuppy
+Fe Hucks
Fe KabooM
+Fe Kiteman
+Fe Kyle Fe
+Fe Liquid
+Fe Logix
+Fe Louis
+Fe MGTOW
+Fe MagicMan
+Fe Monkey
+Fe Mulks
Fe Nail
+Fe Nini
+Fe Nocturne
+Fe Nylost
+Fe Oakdice
+Fe Papi
+Fe Patrick
+Fe Pvm Tiger
Fe Pyles XV
Fe Qlimax
+Fe Republic
+Fe Rex
+Fe Sav
+Fe Setting
+Fe Skilleye
+Fe Slammed
+Fe Sten
+Fe Tentacles
+Fe Thijssie
+Fe Tomie
+Fe UIM
+Fe Viraxic
+Fe Werty
+Fe X AE A-Xi
+Fe Xems
+Fe Zachpnnc
+Fe Zelta
+Fe anor
+Fe ared
+Fe depressed
+Fe elsBadMan
+Fe il
+Fe lonies
+Fe lungs
+Fe lyne
+Fe r a t
+Fe rgy
+Fe ta
Fe-ranator
+Fe0xi
+Fe20
Fe26
FeBriZley
+FeCapedSloth
FeCrab
FeDestroyed
+FeDyl
FeFiFoFum
FeFireTruck
FeFlo
FeFox
FeIII
+FeJonnisjoen
FeKyle
+FeMale Chris
FeManlett
FeMattsheets
+FeMoist
+FeMudcheck
+FeNote
FeOx
+FePash
FePinkviini
FeReelix
FeShane
FeSolaris
FeSynical
FeTaeliah
+FeUIMIronBTW
+Fe_Schrute69
+Fe_StarLord
+Fe_Symphony
FeaR
+Feaaar
FeagMeister
Fear
+Fear Fun
FearKev
FearMyTM26
+FearOfChange
+FearSamurai
FearTheBear
FearThyDoom
FearTurkey
Fearengineer
Feargasm
FearlessFudu
+Fearmaker1
Fearrod
+FearzebuJr
Feasted
Feather
+Feather Bug
Feathereli
Febelz
+Febreezio
+FecesFyrHose
+Fedad
Feded
Federal
+Federated
+Fedji
Fedo
+Fedooool
Fedt
Feebee
Feebz
+Feed Forward
FeedMePlants
Feedback
+Feedle
+Feek 1
+Feel Ya
+FeelMyBirdie
Feelin
+Feelin Fine
+Feelin It
FeelinHappy
Feelmygame
Feelosophy
Feels
+Feels Lonely
+FeelsDuBis
Feelsbadkapp
FeelslronMan
+FeelzBradMan
Feen
+Feet Watcher
+FeetFunGoose
+FeetPic
Fefe3
FefilleLaDur
Fegicaly
@@ -7453,48 +15448,96 @@ Fegoob
Feint
Feisty
Feit
+Feitn
+Fel
FelNeck
Felamar
Feldip
Felgenhauer
+Feli-Marie
+Feliaff
Felinaed
+Feline Feast
Felix2
Felixa
+Felixigor6
+Feller Crus
+Feller Magic
Fellow
+Fellow Fool
+Fellowships
Felmyst
+Felon
+Felonies
+FeloniousHam
+Felony Ruler
+Felted
Female Henry
+Fembo y
Femboi
+FemboyFloppa
+Fementedspaq
Femister
Femke
+Femke Bol
Femkekos
+Femstiq
Fencig5
+Fencingduck
Fencko
Fender
+Fender Axes
+Fender Twin
+Fendoral
+Fene77
Fenerbahce
+Feniks366
Fenix Downs
+Fenix Kiros
Fenkat
Fennikel
+Fenny RS
Fenomeno11
+Fenothiazine
+FenrilasIM
+Fenrirs Fall
Fens
+Fenshy
Fenske
+Fented
+Fentenal
Fenternal
Fenyxgreen
+Fenzo
+Fenzy
+Fequites
+Feral Wiki
FeralFiddler
Feralblood
+Feraligatr44
Feraliigatr
Feratzu
+Ferbzy
FerdaWoox
Ferduh
Fereekelor
Ferlide
+Fermeon
Fernando-Frv
Fernie
Ferny
Fero217
+Ferocious J
Ferocious97
+Feroos
+Ferousity
+Ferpderp
Ferrarezi
+Ferrari
+Ferrari Enzo
FerrariScape
Ferrat
+Ferrdie
Ferreklop
FerretFoSho
Ferrex
@@ -7504,117 +15547,216 @@ Ferring
Ferrinheight
Ferro
FerroPlanty
+Ferrothan
Ferrothorn
Ferrous
+Ferrous Frog
+Ferrous Hugs
+FerrousBoii
FerrousWheel
FerrousWolfe
+Ferrowing
Ferrum
+Ferrum-56
FerrumPawn
Fersapian
Ferus
+Ferus Ferrum
+Fervor
Ferynys
Fesan
Fesenko
Festis
Festiva
+Fesu
FetaCheese
Fetetchie
Fettisdagen
Fetus
Feudal
+Feunk
Fewest
Fewideahide
+Feydx
Feyenoord36
Feylon
Ffilteg
FfsImAfk
FgtBob
+Fhil
+Fhk Trudeau
Fhpure1
+Fibeer
Fiberlight
+Fibix
+Ficc
Ficomon
+FiddlesLeaf
+Fidds93
+Fiddy Ate
+Fiddy Bag
+FiddyDuddy
FiddySweens
+Fidelity
Fiege
+Fielacius
+Fielde
FiendinLo
+FiendsDream
+Fierce some
Fiero
Fiets
+Fiets opa
Fietsen
+Fiff
Fifflaren
Fifth
+Fifth Herald
Fifty
+Fifty 5O
+Fifty Cent
FiftyFive
FiftyForty
+FiftyStones
FigaroTheCat
Figes
Fight
+Fight 04
+Fight For Jk
+FightMiIk
+Fighta
+FighterSE
+Figless Duck
Figmentx
+Fignootters
Figpig
+FigsNotPigs
+Figure
+Figwit
Fiiderino
Fiiggy
+Filed
+FiletOFlesh
FilipTelford
Filippia
Fillifjonken
FillyFilly12
Fillzu
Filmmaker
+Filo Legolas
+Filofteia
+Filoksenia
+Filson-zzZ
+Filth0
Filthy
Filthy Bird
+Filthy Clam
+Filthy Pesnt
+Filthy Santa
+Filthy Weeb
+Filthy istik
Filthy4Iron
+FilthyDane
FilthyDingus
FilthyOreo
FilthyPixels
+Filthy_Stew
Filz
+FimiWolf
+Fin Vader
+Fin219
FinPunisher
Final
+Final Redux
+Final playz
+FinalBossUIM
+Finalbang
Finalbrk
+FinalityB
Finally
Finaltank
Finch
+Fincher
Find
+Find mucking
+FindTheTeemo
Findawg56
+Finding Dory
+FindingDory
Finding_Mary
+Fineillspoon
+Finem Mundo
Finesse
Finessing
+Finex
FingerBang
+Fingerdfilly
Fingered
Fingerlegs
FinickySquid
Finish
+Finish Flash
FinishedLog
Finishzuelan
Finklestein
FinkyFink
Finlan
Finland
+Finlanderi
Finlanders
Finlays
+Finlunch
Finn1309
FinnelCake
Finnica
Finnish
+Finnkie
Finral
Finrufa
Finsho
Finsta
+Fintiaani
+Finutty
Fiola34
Fiora
+Fipimuesi
+Fir3bird85
Firat
+Firben
Fire
+Fire 745
+Fire 961
+Fire Captain
+Fire Chiller
Fire Fiesta
+Fire Fist
+Fire Galley
Fire Kaped
+Fire Kittie
+Fire Tune
Fire10910
FireAF
FireAnRescue
FireGiant
+FireKornez
FireOnRs
+FireReid
FireTruckBoy
FireWolf28r
+Firebelly
Firebuggy
+Firebwans
+Firecan1314
Firedevil
+Firedrake658
+Firehawk746
Fireheart470
+Firein12
Firejax
Firekirbyeli
Fireknight0
Fireman
+Fireman Sam
Firemanzz
Firemutt
Firenova
@@ -7624,116 +15766,201 @@ Firesmash
Firestarone
FireyDragons
Firko
+Firnik
First
+First Bozz
+First Up
FirstBathTub
+FirstBlood 1
+FirstIron
+FirstRS
First_Viking
Firulay18
Fish
+Fish Cow Dog
+Fish Keeper
+Fish Nibba
FishFingerz
FishGoBlub
+Fishcake
+FishesBmine
Fishey
Fishie
+Fishling
Fishoii
Fishstickz
+Fishsword389
+Fishvaulter
FishyBrines
Fisicas
Fiskhue
+Fisna
Fist
FistMeTrump
Fister
+Fit Jr
+FitAid
+Fitdis
Fitis
Fitsit
+Fitty Tyson
FittyBuck
+Fitzy Smalls
Fiurio
Five
+Five Demands
FiveManSplit
FivePaws
FivePointOh
+Fivee Skinn
Fiveskin
FixationRS
Fixed
FixedCost
FixedMain
+FixedWing
Fixions
Fizbin
+Fizg0d
+Fizz Khalifa
Fizzed
Fizzle
+Fizzy Glizzy
FizzyGuzzler
Fjala
+Fjala r
Fjalee
Fjollan
Fjolle Mate
Fjomp
+Fk RS L
+Fk W Da Woo
+FkingEzeKial
Fkking
Fklostmybnk
Fkluzac
+FknDeece
FknDreaming
+Fkuru
+Fl y
FlLTHYYYYYY
FlNARKY
FlTTY
+FlTZ
+Flabaghast
+Flaboogles
Flaccid
+Flaccid RNG
+Flaccid Semi
FlaccidWhip
Flacid
+Flackyo
Fladra
+Flagaria
Flagrance
+Flagrant 2
+Flagz
Flaherdog
FlailTheKing
+FlailingGoat
+Flair Viper
+Flakelar
Flakey
Flakeydude
Flakkas
Flakto
Flamaha
+Flame Lurker
+Flame0fUdun
Flame29
+FlameSoother
Flamed
Flamel
Flamepistol
+Flames4 Ever
+FlamingPee
+Flamingfox
+Flamingguy7
+Flaminold
Flaminrofls
+Flammbam
Flanelli
Flap
+Flap Slap
+FlapJackals
+Flapple
+Flapsian
Flare
Flare Grylls
+Flareblade
Flareon
+Flarez
Flarp
Flash
+Flash Voyage
Flash3200
FlashYellow
Flashbane
+Flashbang
+Flashcards
Flaskepost
Flat
+Flat Eric
FlatAssPlank
FlatEarth361
+Flatback
Flatlandah
Flatorbrush
+Flaunt
Flava
Flavaaaaa
+Flavie
+Flavour Trip
+FlavouredDav
Flavur
Flaw
Flawd
Flawed
+Flawed Bliss
+Flawless xD
Flawnn
Flawzin
+Flax Pickerr
Flaze
Fleaa
+Fled 6ymcric
Fleeson
+Flemingo
Flemino
Fleruas
+Flesh Forest
Fleshgod
+Fleshpound
Fletch2
Fletched0
Fletcher
+Fletcher 06
Fleton
+Fletz
Fleurescent
Flex
+Flex Wayne
+Flex1bel
Flex1bility
+FlexCity
FlexSeal
Flexatronic
+Fli pper
FliPancakes
Flick
FlickMyTick
+Flicker 06
FlidFlop
Fliga
Flight
FlikAwrist
+Flikker
+Flikker Kind
Flimmyflan
Flimpy
Flimsywhale
@@ -7741,83 +15968,147 @@ Flimzy
Flinch
FlingDragon
Flint
+Flint RS
+Flint Water
Flintstoned
+FlipDaddy
+Flipdam
+Flipje
Flipman24
Flippa
+Flippa Monk
Flippar
Flippers
Flippin
+Flipsen07
Flipzzzup
Flirz
+Flit Wick
Flix
+Flixy
+Flizz xd
Flllllllllll
Float
+Floater eyes
Floatzelo
Floballer
Flock43
+Floeter
+Floki loki
+Flomple
Flonza
+Floody
+FloofyTurtle
+FloofyWaffle
Flooga
Floogan33
+Floopyboople
FloorTwenty
Floot
+FlopLord
Flopez
Floppy
+Floppy Boaby
+FloppyDongle
Florian
+Florian_1988
Florida
Floth
+Flover
Flow
+Flow it
+FlowMafiaaa
FlowState
Flowah
Flowen0ne
Flower
+Flowerm00se
Flowiey
+FlownbyFire
Flowtown
+Floww-Grown
+Flowwar
Flowzyy
+Floxin
Floy
Floyx
+Fludds
Fluenz
+FluffPandaSr
Fluffafluff
Fluffalo
+FlufflePluff
Fluffy
Fluffy chair
FluffyTater
Fluffypony44
Fluga
+Flugel25
Flugenhorn1
Fluid
+Fluid Voyage
+Fluke Jr
Fluminense
Flunc
+Flunt Capz
Fluoroform
Fluorophore
Flupbaster
Flurius
+Flushiz
FluteBand
Flutlicht
Fluxee
Fluxery
+Fluxion
+Fluxx V2
+Flvd
+Fly an High
+Fly by N7ght
+Fly in
Fly-TheW
+FlyLo
FlyPap3rr
FlySunyQuest
Flyboyray
Flydol
+FlydonWayno
Flyeeee
Flyer
+Flyer TMT
+Flyer W Iron
Flyern
Flyguy13
Flyhll
Flying
+Flying Pingu
+Flying Swede
FlyingBobcat
+FlyingIrish
+Flymi
+Flymzy
Flynny
Flynsquirrel
Flynt
Flyonwings
Flyvende
+Flyvende Ged
Flyy
+Fml IronMan
+Fml Its Adam
+Fml Its Carl
FnHit
+Fnatic
+Fo Ring
+FoRbeZiiLLa
+Foam Corner
FoamDemon1
+FoamShrimp
+Foamshire
Fobu
Fockwolf1
Focus
+Focus73
FocusOnGoals
Focusor
Foen
@@ -7830,78 +16121,157 @@ Fohmie
FoiledSoftly
Fojin
Fokjefe
+Folayyy
+Foleshill
+Folesy
Folfox
+Folieo
Folk
Folk169
Folktale
FollieRS
+Followed
+Follower
Folwifuswalo
+Folxi
Fomble
+Fomid
+Fondle
FondleMyIron
Fong
Fonnis
FonsJ
+Foo I I
Food
+Food For Me
FoodEmperor
+FoodStampGod
+Foodfoodfood
Foodie
+Foofickle
FookOffNerd
Fool
+Fool Senpai
+FoolFighters
+Foolery
+Foolingling
+FoolishHeart
+Fools
+Fools Errand
+Fools Switch
+FoolsErrand
+Foomp
Foooman
Foose
Foosyy
Foot
+Foot Ball242
+Foot Magnet
FootLocker
Footaphiliac
+FootlongMike
Fooz
+For
+For Karamja
+For My Block
ForDaScratch
ForKrimpt
ForNostalgi
+ForRusssia
ForWeAreMany
Forbe
ForbiddenCry
Forbids
Force
+ForceZero
+Forcekid
Ford
+Ford Racing
Forearm
ForeignBoris
Foreigner
Foreknown
+Forerunner40
+Forescimitar
Forest93
+Foresteris
+Foreva
+Forever Wild
+ForeverAlone
+ForeverClone
ForeverLost
Foreverett
ForgetThePet
Forgetmenot
Forgetpluto
+Forgettios
Forgive
Forgived
+ForgottedPin
Forgotten
ForgottenRNG
Forkbomb
+Forkers
+Forkmitt
+Forks Out
Forma
+Formal
+FormalPotato
Formaldhyde
+Former Nub
FormerDivine
+FormerSeaman
+FormuIa 1
+Fornuis
+Forresten
Forsaken
+Forsakens
Forsworn66
Fort
+Fort Chronos
Forteh
+Fortified
+Fortify
+Fortimuss
+Fortis Lupus
+Fortjent
FortniteRox
Fortran95
Fortress
+Fortunes
Forty
Forza
+Forza Derby
ForzaGTx
+Forzam
Fosh
+Fossa69
+Fossil Rock
+Fossul
+FosterXP
Fostret
+Fosz
+Foton
Fotty
Foumy6
+Found Prawn
+Found3Groots
FoundABaby
Four
+Four One 6
+FourB
FourZone3
Fourlifee
Fourloco
Fournlock
FourthChance
+FourthPower
+Fowke
+Fox Enjoyer
+Fox Two
+Fox Zebra
Fox243
+FoxStevenson
FoxTherapy
FoxVex
Foxall
@@ -7909,152 +16279,281 @@ Foxe
Foxerx1
Foxes
Foxfiend
+Foxfire
+FoxfireStyle
Foxi
+Foxing
Foxtrot
+Foxx OG
+Foxxwild
Foxy
+Foxy Rebel
+Foxy SuzyQ
FoxyBaphomet
FoxySquid
+FoxzHound
+Fozbert64
+Fozie
FpsMichael
+FpsWheelerrx
+Fpsallday
+Fr anci5
+Fr ankie
+Fr0
Fr0zEn111
Fr1ckingH3ck
Fr1xioN
+Fr3Pa1est1n4
FraJoLaaa
Fraagile
+Fraazzy
Frab
Frac
+Fractals Son
Fractuality
+Fraggiux
Fraggle
FragmentedX
+Fragmentizer
+Frags
Frail
Framed
FramedJunior
+Frames Wolfe
Framingham
+Franche420
Francine1225
+Francis0wns
FranciscoJ32
Franco
Franf10
Frank
+Frank Donner
+Frank Is Dog
+Frank Lin
+Frank White
+Frank-sama
+Frank836
+FrankMadeME
FrankTTank
Frankers
FrankieFlow
FrankiesAlt
+Frankinspank
Franklin1O1
FrankyFish32
+FrankyLeGros
FrankyyTanky
+Frantiks
+Franwan
Frappacholo
+Fraqqer
+Fraser
+Fraser840
+Fraspex
Frassboss
Frate
Fratto
+Fratty Flows
+Fraud Thurgo
Fraught
Frauwz
+Fravvomaxx
+Frayhalla
+Frazer
Frazia
Frazoo
Frazze
+Frazzlewagg
Frazzt
+Frchtzcker
+Fre d
Freaak
Freak
+Freako07
Freako09
Freaks
Freakxx
+Freaky Peet
+FreakyWajt
Fred
+Fred J Frost
+Fred Solo
FredMaxedALT
+Fredagsgroda
Fredanbetty
+Freddi
Freddiep
+Freddy CEO
+Freddy ownz
Fredericton
+Frederizz
Fredla
+Fredleif
+Fredo
Fredric
Fredriks
+Freds Breads
Free
+Free Dumb
+Free Minded
+Free O9
+Free lootkey
FreeFreeze
FreeFryBread
FreeHongK0ng
FreeKoolaid
FreeTeli2Lum
+FreeTheRealD
Freebooterv
+Freeczs BTC
Freedom
Freedom06
FreedomJust
FreedomUP
Freee
+Freehky
+Freek 1
FreekALeak
Freekkittens
Freelo
Freeman
Freepop
+Freerangee
Freesoul
Freest
Freestylin
Freeway
Freeze
+Freeze M E
Freezes
Fregion
Frei
Frekitohh
+Freky
FrenchBuoy
+Frendi
Frenek
+Frenkurt
Frenmiir
Frenzy
+Frenzy4
FreonPays
Fresaaaa
Fresco
Fresh
+Fresh Cheese
+Fresh Pesto
FreshPotsRS
+Freshly
+Freshske
+Frette
Freud
Frevlin
Frewdy
Freya
+Freyas BTW
+Frez
+FriarNation
Fricas
+FriccKip
Frickin
+Frickn Playa
FridayDa13th
+FridayMojito
Fridelis
Fridfoolium
Fried
+Fried Erik
+FriedRicePls
+Friede
Friend
FriendlyJo
Frietjecurry
Frieza
+Frieza Saga
+Friezerik
Friggn
+Friggy
+Friibag
Friisby
+Fris
+Frisdrank Jr
+Frisky Lime
FriskyBiznaz
FriskyJews
FriskyPainal
+Fritszon
+Frittered
Fritz
Fritz94
+Frix
Frkn
+Frnds
FrobroSwagin
+FrochioRS
Frodo
+Frodo Bagger
+FrodoBagGims
FrodoBogues
FrodoRS
Frodoinc1
Froemelke
+Froemeltchhh
Froez66
Frofuzz
Frog
+Frog Blog
+FrogBoySlim
+Frogfish12
+Froggiefish
Froggit
+FroggyBro
Frogmann
+Frogone9
+Frogsforjp
Frogtelllow
+Frogtoken
Frogwork
Frohobo
Froloox
From
+From Beyond
+From Florida
+From Lebanon
+From Nz
FromNewWorld
FromSoftware
Front
+FrontBottoms
FrontierEdge
+Froobing
Frooby
Froomey
+Froot Loop
+Frootata
+Froppy Tsuyu
Fropul
Frosht42
Frost
+Frost JTS
+Frost Mages
Frost_PvM
Frostbiter
+FrostedBow
Frostmourne
Frostserpent
Frosty
+Frosty E
+Frosty Gay
+Frosty6570
Frosty751
+FrostyPea43
+FrostySurge
Frostyfuz
Frostyyyman
Frote
+Frotzr
Frovz
Froya
Froyotech
@@ -8062,221 +16561,604 @@ Froz09
Frozah
Froze
Frozen
+Frozen Crown
+Frozen Rain
+FrozenKing
FrozenMosin
+Frozencarrot
+Frozenn Dusk
+Frozty Feet
Frrrozn
+Fru Katt
Frufoo
Frugal
Frugtmanden
Fruh
+Fruit Crepes
+Fruit Dryer
+Fruit Munch
Fruit1824
Fruit1846
Fruitbooting
+Fruitje
+Fruitloop8
Frunk
FrunktheHunk
Fruta
Frvnk
+Frxnk White
+Frxnklin
+Fry B
+Frysta
+Fsaze
+FtheFrench73
FuAiluue
FuNrikoz
FuRiouSs
+Fubar3d
Fubini
+Fubuki
+Fubuking
+FucDPS
FucNorfKorea
FucaDuc
+Fuchsiger
+Fudeath36
+Fudg3
Fudge
Fudgie
Fuel
+Fuel Ex
Fuertote_17
+Fuetakishi
+Fug
+Fug sakes
FugDisFugDat
Fugedit
FuggleQuest
+FuggnIronBtw
Fuglemanden
+Fuhni
Fuhrerengel
Fujimator
Fujk
FukYeaChina
Fukahi
Fukinnnn
+Fukn Lit Btw
Fuktflekken
FulMomentum
Fula
FulgBTW
Fuliss
Full
+Full 3A
+Full AD Vlad
+Full Boost
+Full Moot
+Full Tilt
+Full of Wo0d
+FullGraceful
+FullSendGoat
+FullTimeNerd
FullTryHard
FullerACL
Fully
+Fully Mobile
Fullysick
Fulsh
+Fumblebag
Fumblers
Fumbles12
Fumin
+FumingMe
+Fun Guy mhm
+Fun Sucker
+Fun1nFunera1
+FunHotBox
+FunWithFire
+FunctioningC
Fund
Fundo
+FuneRune
Funeral
Fungi
Funk
+Funk Head
+Funk Mastah
FunkBondMule
Funkafiend
FunkiPorcini
Funkiboy2
FunkiiMonkii
+FunkleRoy
+Funkr
+Funkshun
+Funkworks
Funky
FunkyBoy4444
FunkyDiddler
+FunkySlut
+Funky_Hunk
+FunnelCaker
Funni
+Funni Memmer
Funny
Funny-King03
+FunnyAndEpic
+Funobu
Funpeople5
+Funrun123456
Funzip
Fuorra
+FuqAgility
FurMissile
Furbs
+Furi Potion
Furious
FuriousPower
Furiri
Furo
Furox
Furry
+Furry Wall
FurryDemon
Furrykins
+FursonaHaver
+FurtleTurtle
Furty
Furu
Fury
+Fury DnT
+Fury Lord
FuryJunky
FuryL0rd
Furyian
Fuse
+Fuse is HARD
+Fuseton
Fusiiion
+Fusion Aurum
+FusionGT2
+FussyParter
FutchDuck
Futex
+Futss
Future
+Future Tense
FutureKaiden
+Futureruler9
Futures
+Futures Main
+Fuuwah
+Fuxley
Fuze
+Fuzz Man
FuzzManPeach
Fuzzums4
Fuzzy
+Fuzzy Sox
+Fuzzy jaw95
Fuzzy1918
FuzzyDonkey
FuzzyFudgey
FuzzyMWV
+Fuzzy_NooT
+Fuzzybear65
Fuzzyblaa56
+Fuzzykitty
Fuzzzy
+FvS Love
+Fweafwe
+Fxked
+Fxob
+Fxrgus
+Fxrret
+Fy six
Fy12e
+Fyitz
+Fylberg
+Fylize
+Fym
+Fyr
+Fyr Tornado
Fyresam
Fyri
+Fyrinlight
Fyron
+Fyrox
Fyszz
+Fyzio
Fziaa
+G
+G 0 A T
+G A F F E R
+G Alfansos
G Ape
+G B S
+G Check
+G Fruit
+G GAMER GIRL
+G I M Danny
+G Iron Adam
+G L E N
+G L H F
+G M B
+G Man9822
+G Mauls
+G O O D
+G O O S E Y
+G R E E N
+G R I L L O
+G Terminator
+G X F C
+G Zus
+G a r t y
+G a t t s u
+G ante
+G dot C
+G e n g a r
+G eeb
+G i j s
+G i l b o
+G iG
+G imme
+G iooo
+G l R L
+G laze
+G no Z
+G o G G u
+G o h o
+G o th i X
+G oldd
+G oldeen
+G oofy
+G ozz
+G rafix
+G ronimo27
+G root
+G shi
+G u a m s
+G unitt
+G-F-M
+G-IronKuv
+G-Thug Nasty
+G-knowww
+G-rivs
+G0AT JUICE
G0ATWRANGLER
G0D Richard
G0DLY
+G0LD3N
G0LDC0AST
G0LDEN
G0LDENB0Y
G0LDIE
G0NGSHOW
+G0OEY
+G0TH ANGEL
G0TTY
+G0blineer
+G0dr3kt
G0dsnotdead
G0ing
G0ld
G0lden
+G0rillaJesus
+G1C
G1adiador
G1edrelis
+G1izzyGob1in
+G1m Luna
G3RM4N
+G3ZZ4
G4M3OV3R
G4RG0YLE
G4UAFS
+G4YLORD
G4de
+G59 Awol
+G6E Turbo
G6Wizard
+G80
+G99s
GAAANNNGGG
GABBAGE
+GAGGED N
+GALO9A
GAMMAGARD
+GAMxJAKE
+GANONd0rf
GAOKNMxzHR
+GARDlNER
GATECRASH
GATTl
+GB Amarok
GBJackieWang
GCMidlane
+GDG
+GE IS WACK
+GE to FE
GE0RG3WKUSH
GEARLE55
GEEZ0
+GERANUS
GERRIEE
GEtItFrAnK
GFHL
+GFe Aang
GFmanbearpig
+GG Joe
+GG McCloud
+GG Sofie
+GG Wped
GG6HJA9KSDHJ
+GGGGGGGGanta
GGGskywalker
+GGW Limit
+GGW Thanos
+GGf1cation
GGtoHH
+GH05T DUDE
GH95
GHEEESE
GHETT0JESUS
+GI GN
+GI Lewis
+GI Lucky
+GI Madras
+GI Mohib
+GIANT HENO
+GIANT ITIOLE
GIBBO96
+GIGAGUMPH
+GIM 0dawg
+GIM 2nd
+GIM Albin
+GIM Aperture
+GIM BTWW
+GIM Ballak
+GIM Barkless
+GIM Baylis
+GIM Bunzz
+GIM C J
+GIM CgIsEasy
+GIM Composer
+GIM Conkers
+GIM Cris
+GIM DareDev
+GIM Derek
+GIM Dionysus
+GIM Dormant
+GIM FatLion
+GIM Fearzzy
+GIM Ganther
+GIM Glalie
+GIM Globi
+GIM Hatred
+GIM Hola
+GIM LWE
+GIM Lasse_ju
+GIM Lazyguy
+GIM Lxxs
+GIM Lyon
+GIM M0FFY
+GIM Madac
+GIM Magneto
+GIM Malphite
+GIM Martas
+GIM Maudi
+GIM Mcstro
+GIM Me STD
+GIM Mecknon
+GIM Mirasei
+GIM Moith
+GIM NewPorts
+GIM OatBloke
+GIM Obvious
+GIM Or715
+GIM Philrat
+GIM Player02
+GIM Qtpie
+GIM RWT
+GIM RagePope
+GIM Raheem
+GIM Rakfaan
+GIM Ring
+GIM Schaa
+GIM Schnei
+GIM Sense
+GIM Snax
+GIM Stinks
+GIM Stompy
+GIM Stoney P
+GIM Stu
+GIM TUT
+GIM Terix
+GIM Tman
+GIM Tobi
+GIM Toe Pic
+GIM Ved
+GIM Viklok
+GIM Wife
+GIM Zork
+GIM atomic
+GIM bad ass
+GIM brutal
+GIM kerma
+GIM poy249
+GIM sabinsky
+GIM xDist
+GIM-Topsu
+GIMAerospace
+GIMButcha
+GIMFunder
+GIMME CLAW
+GIMP Crystal
+GIMP DlCC
+GIMP Jonny
+GIMP Suns
+GIMP Toast
+GIMP Will
+GIMP Zuzu
+GIMPlayer69
+GIMRavenKing
+GIMTruck-Kun
+GIM_NoRun
+GIM_Snowwolf
+GIM_tybraun
+GIMcardellio
+GIMonster
+GIMp Brian
+GIMpope
+GIMxH2
+GIRTH CHECK
+GIronPPVibes
+GL GETTIN IN
+GL on Purple
GL78
+GLG Sophie
+GLUS
GLWeAllDie
+GM Matt
+GMEMan8000
+GMKirby
GNULinux
+GOAT GOD 420
+GODSOMBRA SL
GOGETA
+GOLOVOLOMKEE
GOOD
+GOODGAMEGGXD
+GOP DUMB
+GOZERGAST
+GPA
+GPWASTER
+GR0OOT
+GR1NCH
GRAB-A-LEAF
GRAN1T3
GRAND
GRAPHISTED
GREIV0US
GREIVUOS
+GRIMSTAIN
+GRINGOLAO
GRUMPY
+GRUMPY BSTRD
+GRUMPY PAPAW
+GRYGRY
GRiMZ
+GRiMZ 420
GRlM
+GRlM REEFER
+GS Concerta
GSAileen
+GSW Shane
GSwolls
GT350
+GTA SA
GTFOIMGAMIN
+GTOD
+GTRKingZilla
GUBIDUBII
+GUCCI SENPAI
+GUCCl
GUJ0
GUNMAN683
GURRD
GUUMBY
GVSU
GYDtown
+GZA
+GZX
+Ga l
+Ga7ba
Gaara
+Gaara Sand
Gaarden
+Gaarise
+Gaarlokiin
+Gab al Ghul
+Gabagoo l
Gabber
+Gabber NaTaN
+Gabberboy15
+Gabble
Gabe
Gabe020
+Gaberoks
Gabesz
Gabo
+Gabrahanth
Gabriel61198
+Gabris
+GabyabyxD
Gacha
Gaddgedlar
Gadrak
Gadwall
Gaerolth
+GaethjeKO
Gaga
+Gaga Iron
+Gage S
+Gageks
+Gagne
Gahbo
Gain
+Gain exp
+Gainful Grey
+Gains alot
+Gainz Godz
+Gainz Nerd
GainzForHire
+GainzWorld
+Gainzvill
+Gainzville
GaiusTavi
Gaiy
GalGadotsBF
+Gala G
Galamx
Galandorf1
Galar
Galava
Galaxia
+Galaxiancam
+Galaxies
Galaxy
+Galbazeek1
+Galderr
Galdysa
Galgenbrok
+GalickGunner
Galilee
Gallaxy
Galleta
Gallium
+Gallowbell
+Galon Garuda
Galon1
Galow
+Galton
+Galvatron
Galwic
+Galyam
+Galzuk
+Gam
Gamaiiron
Gambinahuora
Gambino
+Gambit
+Gambit Ghoul
Gamblerz
Gamboy46
Game
+Game Clown
+Game Name
+Game Of Olms
+GameBot2000
GameOvaries3
GameStop
Gameboto4
@@ -8284,36 +17166,63 @@ Gameboyjr
Gameboylight
Gamelia7
Gamer
+Gamer Log
+Gamer Worded
Gamer4Life
+Gamercutie
Gamerplaya7
+Gamerr
+Games Rigged
+Gameshow
Gamesman
Gaming
GamingLover
GamingVapor
+Gamir Von
Gammel Mand
Gamorrah
+Ganandalf
+GandaIfNoir
Gandalf
+Gandalf staf
+Gandalf3602
GandalfBalle
Gandhi
Gandolf
+Gandolpeeni
+Gandon12840
Gandulff
Gane
Gang
+Gang Goblin
+Gangbarang
Gangnrad
+Gangris
+Gangry
Gangsta
Ganj
GanjaGhandhi
GanjaRhino
+Ganjoefarner
+Gankicus
Gankster
+Ganna Bogdan
Gannicus
Gannicusproo
+Gannnon
Ganooch
Gansa0
Ganta
Gantee
Ganthorains
+Gantre
+Ganzaxuz
+Ganze
+Gap Tester
Gaping
+GaratholX7
Garbage
+Garbage Life
GarbageEater
Garbagexd
Garbar6
@@ -8321,140 +17230,268 @@ Garboh
Garbug
Gardenia
Gardening
+Garder1968
Garena
Garfinator
Gargano
Gargaspoon
Gargath286
+Gargathon
Gargleon
Gargoyle79
Garlic
+Garnat
Garnet Gust
Garp
+Garrb3ar
Garrett
Garretttt
Garrothis
Garthoon
+Garvis
Gary
+Gary Ghee
+Gary Giggles
+Gary Guldske
+Gary Linkov
+Gary Wang
GaryDabs
GarySmokeOak
Garyjayjay
Garysson
+Gasconade x
+Gash Pasher
GashBndicoot
Gashtag
Gassy
+Gassy Cat
GassyFlaps
+Gastje888
Gastronaught
Gate
Gateofdoom
+Gath
Gato
GatoNaranja
Gator
+Gator Bob Jr
+Gator Papi
Gatorboiz
+Gatorian176
Gatorslyr
GatrsNTaters
+Gau Cho
Gauntlet
+Gaur Gura
Gauss
Gautstafer
+Gauvin
Gavbin
Gavi
Gavii
+Gavin Dance
Gavita
Gavrot
+Gavussy
Gavy
+Gawd Bodi
+Gawk5000
Gawkes
Gawkss
Gawt
Gawz
+Gay 4 Guthix
+Gay Bear
+Gay Bear Cub
+Gay Farm
+Gay Fieri
+Gay Framed
+Gay Holly
+Gay Impling
+Gay Liam
+Gay Male69
+Gay Snake
+Gay Squire
+Gay Vermin
+Gay Wimp
+Gay450Bucks
+Gay4Ketchup
+GayWalrus69
+Gayblade
+GaylsHaram
+Gayme
Gayron
+Gaz
GazGoon
Gazaman11
+Gazan
Gazd
Gazed
+Gazed Soul
Gazelle2211
+Gazru
Gaztok
+Gazza
+Gbax-Style
Gdey56
Ge0rgeburton
GeChallengeM
GeTLeFt1
+Gear 5th
+Gear Carried
+Gear Fear
+Gear Sekando
Geard
+Gearfried
+GearheadSTL
GebwellB
+Geck-o
+GeckoDad
+Gedmuush
GeeHasMews
GeeStreet
Geeb
Geebs
Geebster
+Geef Bier
+Geegles
Geeker
Geeknip
+Geeman125
Geen
+GeenBankMan
Geera
+Geerin
GeertWillows
Geestig
+Geeving
+Geewd
+Gefilus666
GeggaMoya
Gehrman
GeilTijgerke
GeilePaddo
Geitekaas
+Gekido
GekkaJohn
Gekke
+Gekke Farmer
+Gekke Nelis
+Gekke Pablo
+Gekkesmurf
+Gekoh
Gekolian
+Geks
GelZmog
Gelawynn
+Gelderlander
Gelezis
+Gelijk
Geliquideerd
Gellaitry
+Geller Bing
Gelly
+Gelmar
+Gem
+GeminitusII
+Gemlingur
Gemsbok
+Gen Kokopuff
+Gen4 UU
GenCoupeGang
+GenFormat
GenGraardor
+Genabackis
+Genann
+Genaron
+Gene Shorts
GeneBelcher
GeneDenim
GeneKapp
+GeneVieve_SL
General
+General Aldo
+General Bigi
+General Iroh
+General NL
GeneralJosh
GeneralLudd
+GeneralMcRib
GeneralMo
GeneralMoist
+GeneralNASTY
GeneralPlay
+GeneralStore
Generall
+Generall_xx
Generalton
Generol55
+Genesee
+Genesis G80
Genetiics
Genetiz
+Genga r
Gengahr
Gengerbred
Geni
+Genie Magick
+Genie Talls
GenitalsHead
+Genix
+Genjitatsumi
+Genk
Gennie
+Gennu
Geno
+Geno RS
Geno2566
GenoJuice
Genocidal
+Genovan
Genres
Gensha
Gentileza
Gentle
+Gentle Death
+Gentle Gypsy
+Gentleman J
Gentlemanfox
Genty
Genuine
GenuineDude
Genus
+Geo Fe
Geo Geo
GeoDuuud
Geoculus
Geodark
+Geof Sux 666
+Geoff_Failed
Geoffry
+Geography
+Geoguess
+Geoide
Geologistic
+Geomatic
Geonde
Geordie
George
+George 36th
+George F M
+George Vv
GeorgeJx93
+GeorgeVork
Georgey
+Georgezs
+Georgies
+Georgopol
Geoso
Geotechnicki
Geovanna
GerAmi
+Gera1d
Gerald
+Geralt Nivea
Gerb3
Gerberos
Gerbs
@@ -8465,47 +17502,92 @@ Gerjan
GerksShirts
Germaan
GermanGuyRS
+Germanic
Germaphobic
Germimo
Gernoazi
+Gero
Geroko
+Gerr Hurka
+Gerrido
Gerrmz
+Gerroes4GIM
+Gerry Bud
Gershboon
Gert
GertrudeSimp
+GertrudesAss
+Gery07
+Gesaldo
+Gese
Geskar
+Geso
Gesoz
+Gestetner
+Get A Life B
+Get Back Son
+Get Bread
+Get Exp
+Get Fukt Pal
+Get Pho
+Get Syked
Get0nMyHorse
GetABeerInYa
GetATapWater
+GetAclick
GetDatXp
GetMeOut
+GetMeOutHere
GetOnMyLvl
+GetOverlt
+GetPets12
GetSkipped
GetThatUpYaa
+GetTogether
GetUrWild0n
GetWreckdSon
Getdolphined
Getfck3dup
Getlow777
+Getplayed
Getsu
+GettinTanked
+GeudensK
+Geuld
+Gew
Gewoon
Gezang
+Gf g
Gf4tiuser
GfRsIGotAGf
+Gfi
+Gh3t0 T4nk3r
Ghafir
+Ghaipol
+Ghandizy
Ghandy
+Gharron
Ghckkrchkrer
Ghda
+Gheed
Ghentiana
Gherkins
Ghetto
+Ghhjgwsr
+Ghidorah
+Ghillie Suit
Ghilly
Ghoosted
Ghorraka
Ghosnik
Ghost
+Ghost 311
+Ghost Ahoy
+Ghost Fe
+Ghost XP
+GhostAralein
GhostHouse
+GhostOrchids
GhostTank
GhostXD
Ghostas
@@ -8513,305 +17595,675 @@ Ghosteeen
Ghostfice
Ghostflips
Ghostiami1
+Ghostly Taco
GhostlyFetus
Ghostlyowns
Ghostninja
+Ghostsu
+Ghostwish492
+Ghosty
+Ghoul Intent
+Ghoul Zeta
+Ghraz
Ghruntsarokk
Ght179
+Ghurrix
+Ghuuneiboi
Ghxul
+Gi Lew
+Gi bbo
Giallo
Giant
+Giant Ego
+Giant Gochu
+Giant Killer
+Giant Peenos
+Giant Plums
+Giant Trunks
+Giant spider
+Giant235
GiantConker
+GiantShafty
Giantesss
+Giaveri
+Gib bread
GibMePets
Gibbed
Gibberish
Gibboh
+Gibbon
+Gibbon girl
Gibby
Gibby0712
Gibbzzy
+Gibsky
+Gibsmeister
+Gibson
Giddy Cowboy
+Giddy Yup
Gidejong
Gidionn
+Gidle Soyeon
Giebu
Gielinor
+GielinorGage
+GielinorGoat
+Gielinord
+Gielinored
+Giena
+Gier
Gierige
+Giffaro
+Gifgas
GigaBinary
+GigaChad FSW
Gigabit
+Gigantic Nut
+Gigantic Owl
+Giganttio
+Gigashit
+Giggel Boy
+Giggety
+GiggleFailer
+GiggySmalls
Gigi
Gigime
+Gigs x0rz
+Giiblo
Giiirtz
+Giitzy
Gijoe184
Gijs
Gijsbart
+Gilan
Gilbert
+Gildart_91
Gilded
+Gilded Gucci
+Gilded Robes
+GildeddGuppy
+Gilenoth
+Gilesy_93
GilgaGaming
Gilindur
+Giljom
Gillan
+Gillbert44
Gille
Gilles
Gillisuit
+GillyChop
+Gillyjj
Gilnash
Gils
+Gilthresa
+Gim Balboa
+Gim Mayhem
+Gim Reaper x
+Gim Rickard
+Gim Sahara
+Gim Synicals
+Gim ckn
+GimJonel
Gimaralas
Gimbli102
Gimlocke
Gimme
+Gimme Pixels
GimmeDatWAP
+Gimmie 500k
+Gimp Charona
+Gimp George
+Gimp Rachau
+Gimp Sage
+Gimperfect
+Gimpgas
+Gimptan
+Gin N pizza
+Gin Theory
GinValid
+Gina Linetti
Ginekologs
+GingaFe
+Gingaaaaa
Ginger
+Ginger Elvis
+Ginger KG
GingerUnit49
GingerZ94
+Ginger_Men
Gingerbeefe
Gingr
+Gingr Snaps
+Gingyge
+Ginjaah
+Ginko Sora
Ginny
Ginobeatsss
Ginyuu
+Gioarcher69
Giorgi
+Gios Ladder
+Giovanniam
Giovano
+Gippeo
Gipson
Giraaa
GiraffeLord
Giraffeneck
Girl
+Girl10116
+GirlGamer420
+GirlLoveeee
Girls
+Girls Add Me
Girlygurl420
Giroza
+GirrthBrooks
+Girsu
Girth
+GirthBeast
+GirthMatters
+Girthy Bunny
GirthyBaboon
+GirthySack
Giskardr
+Gist
Gistermorgen
+Git Ducked
+Git Gudr
+Gity
+Giuuntas
Give
+Give Advice
+Give Er
+Give Me Kith
+Give Purple
+Give Purples
GiveMeMaul
+GiveMutagen
Given
+Given Bow
+Given Power
Givera0
+Giville
Giving
Givox
+Gixerikan
Gizmoed
+Gizmoo247
+Gizzy-71
+Gj nice
Gjerloew
Gjonunaki
+Gktr
+Gl Bob
+Gl Im Dandy
+Gl Im Tom
+Gl0ver
GlLDARTS
+GlM Sam
+GlMKingCole
+GlMP Blue
+GlMP Purpp
GlNGER
GlRLS
+GlTHUB
+GlUwUten
+Glaceon Girl
Glacial
+Glacial Fog
GlacieredTig
GladePlugIns
+GladeSONPT
Gladeandy
+Gladiator12
Gladiator4x4
Gladpootje
Glads
+Glaeser
+Glaive Rush
Glance
+GlasMelk
+Glasabarn
Glashute
+Glass talons
+GlassIsrael
+Glassblow Me
+Glassface
+Glava
Glavas
Glazmeister
Glazyy
+Glcnn
+Glcnn II
+Glcsw
Gleassi
Gleddified
Gleep
+Gleesoman123
+Glejak
Glen
+Glen Cook
+Glen Kenobi
+Glen OSRS
+Glenbobis
+Glennis25
Glennitals
Glennyboy
Glennzii
+GleuberBTW
Gleythar
+Glicky
+GlideWho
Glierieman
GlitCH1221
Glitchfather
+Glitchxd
+Glitterix
Glo-Tank
+Glob Master
+Globalled
+Globby
Gloc
Glock
+Glock 48
GlockHoliday
Glockford
+Glocktopuss
+Glocs
+Glod
Gloei
+Gloei Lampje
Gloom
Gloop
Glopyz
Glorfsaus
Glories
Glorious
+Glorpy Glorp
Glossay
Glou
+Glough
Gloves
Glow
+Glowing Dawn
+Glowing Ray
Gloyer
+GlucGluc9000
Glue
+Glue Scroll
GlueInhaler
Gluehbirne
Gluest1ck
+Gluhh
Glukoosi
Gluons
Glut
+Gluteeni
+Gluten ei
Gluteous
+GluteyIM
+Gluurbuur
Gluurder
+Glyn
Glyo
Glys
+Gmackie1
+Gmic
+Gnaes
+GnakNim
Gnarkotics
+Gnarled
Gnarles
+Gnarly Nacho
Gnarlysurfer
Gnarmato
Gnarnold
Gnarwhal
+Gnashit
GngBng
+Gnge
Gnight
Gniles
Gnoblin
Gnome
+Gnome Ass
+Gnome nz
GnomeBustas
+GnomeChompii
+GnomeFN
+GnomeScarf
+Gnome_child1
+Gnomeball Me
+Gnomedalf
Gnomeopathy
Gnomeplay
Gnomeputone
Gnomerex
Gnomeruno
+Gnomes
+GnomesDid911
+Gnomonkey
+Gnomuim
Gnon
+Gnoob
Gnorc
Gnos
+Gnosticz
Gnotyep
+Go Already
+Go Die
Go Do One M8
+Go FF
+Go Outdoors
+Go Outside
+Go Rogue
+Go Thanos
+Go ask Wiki
Go2HornyJail
+Go4Stonks
GoBearsUA
GoBiiii
+GoDhAsCoMe2u
GoDrinkWater
GoGGu
+GoIsland
GoPlayOutsid
+GoSlow
+GoToBedKids
Goads
Goal2Max
Goalkeeper54
Goals
Goat
+Goat Toes
Goat512
GoatAteMySon
GoatOfWar
GoatStank
+Goatbigboy
Goaticorn
+Goatman
Goatmelk
+Goatrilla
Goats
+Goatsky
Gobbie
Gobiasinds
Goblin
+GoblinBreath
GoblinLevel1
Goblinborn
+Goblinchips
+GoblinxSlaya
Goby358
+Gochancee1
+God 126
+God Aye
+God Bjorn
+God Flax
+God Forgave
+God Like PvM
+God Of Chips
+God Of Hatrd
+God Of Lamps
+God Of W13
+God Pandora
+God Ranger90
+God Tier
+God of Walls
GodDmntNappa
GodEmpsTrump
GodHalfMercy
GodKingJT
+GodLovesG4ys
GodM
GodOfCats
GodOfTorment
GodSaidGrind
+GodSaved
GodSlayer422
+GodSoge
+GodTierAcct
GodTormentor
Godaa
Godcody
+Godd Is Good
Goddaz
GoddessAmaya
GoddessHylia
Godenzonen
+Godeso
Godezzo
+Godfather TR
+Godfather9 4
Godis
Godkip
+Godleh
+Godlike Nico
GodlikeOne
Godly
GodlyLeecher
GodlyThug
GodofAhri
+Godofore
+Godofyou2
+Godric777
+Godrics
Gods
+Gods Madness
+Gods Plans
+Gods Savage
+Gods Taint
+Gods Word
GodsBlackSon
GodsSniper
GodsSyndrome
GodsZombies
+Godsent
GodsentHero
Godspade
+Godss Angel
Godstrong
+Godswordl
+Godte
+Godumas
+Godvermomme
+Godwar
Godwise
GodzFear
Godzilla
Godzilla1282
Goed
+Goed Gedaan
+Goed stinke
Goedaardig
+Goedgemutst
+Goeie Sannie
Goeman
Goes
+Goggoli
Gogo
+Gogo Gorilla
Gogojuice
+Gogoud
GogurtYogurt
Gohan
+Gohanski
Gohler
+Goiij
+Goilin
+Goin
+Goin Slayin
+Going HCIm
+GoingBald130
+GoingBonkers
Goinvokeman
Gojam
+Goji Berries
+Gok Wan k
+Gokillanoob
Goku
+Goku 420
+Goku Nazz
Goku3ss3
Gokuu
+Gol
+Gol D Stocks
Gold
+Gold Avocado
+Gold Devill
+Gold Golem
+Gold Lynx
Gold M40A3
+Gold N Mole
+Gold Ox
+Gold Ruler
+Gold Scrap
Gold-Ileana
GoldTracerR1
Goldclaw30
Golden
+Golden Acorn
+Golden Dunes
+Golden Eyes
+Golden Power
Golden2Aim
GoldenArm647
+GoldenGoose
GoldenMinion
Goldendev
+Goldendrgn
GoldfarmCOX
Goldie47
GoldieOne
+Goldiekk
+Goldkimono
Goldless
Goldmagic
+Goldmagic 1
+Goldminer727
Golds
+Golduck
+Goldy Mox
Golem
+GolemDuoGIM
Golemantium
Golembaby
Golf
+Golf Socks
Golfcarts
Golfje92
Golfkarton
Gollito
GolloSam
+Gomardo
Gomham
Gomsugo
Gomut
+Gon
GonDaba
GonFeeshin
+Gonah
Gonapappa
Gondort
Gone
+Gone9237
+GoneClear
+GoneFarming
+GoneInDry
GonjaMon
+GonnaSleep
+Gont
Gontr
+Gonyor
Gonzalo
+Gonzra
+Goo Cat
GooMoonRyong
+Gooball
Gooberz
+GoobledeGoop
+Goobtacular
Good
+Good Bull
+Good Creb
+Good Cuxt
+Good Darts
+Good Duck
+Good Ironman
+Good Natured
+Good Pho You
+Good Potato
+Good Voodoo
+Good lol
GoodFight
+GoodGuyJosh
+GoodOlBussy
+GoodSkinCare
+GoodTalk BRO
+GoodVibes
Gooda4
+Gooday2uall
Goodbye
+Goodbye game
Goodcents
+Gooddeerend
+Gooder Album
GooderB0aty
+GoodlyKi56
Goodole
Goodpizza
+Goodriver
Goodwin
+Gooey Bace
Goofy
+Goofy Kitten
GoofyLlama
+Goofzillers
Googagoogago
Googie
+Googii
Google
+Google Plus
+Google THC
Googleisme
Googs
+Gool164
+Goomy
+Goon Galore
+Goon Rangoon
+GoonRNG
+Gooner
Gooneshy
Gooney
Goooby
Gooochy
+GooodO1dDays
Goopbandit
+GoopityGlorp
Goose
+Goose Field
+Goose World
GooseAlmyti
+Goosebottle
+Goosecaboos
Goosely
Gooshus
+Goostafus
Goothan
Gooziky
Goph
+Gopherpaws
Gophurr
Gopuppy
+GorGorDon16
Goragtong
+Gorak
+Gorastaman
Gorathe
+Gorazdus
Gord
Gordi
Gords
@@ -8819,68 +18271,133 @@ Gore
GoreTexZ
Gorehogthot
Gorg
+Gorge002
Gorgeous
+Gorgeous Vin
+Gorgeous War
Gorgonsolo
+Gorgoth
+Gorila911
+GorillaChad
+GorillaHaze
GorillaMon3Y
+Gorillr
Goriox
GorkOfGuthix
GorogSmash
Goromi
+Gorons Ruby
+Gorpie
GorskiGG
+Gortron
+Gory Figment
+Gorzie
Goshiki
Gossip
Gosustyle
+Got Mad Nugz
Got my DD214
GotABigDoing
+GotItAll99
GotTheTool
GotchuXL
+Goteborg
Gotemburgo
+Gotham Steel
+Gothic Mommy
GothicHippy
Gothicking70
+Gotta
+Gotta B Dope
GottaSlay
Gottaburn
+Gougar
Gountor5
+Gourd
GourdPicker
+Gourmandise
Gourmet
+Goy Boyy
+Goy Oy Vey
Gozi
Gozpot
Gp On Me
+Gr OO7
Gr0tti
+Gr33n
+Gr3at Noob
+Gr4naat
Gr4p3
+Gr4y W0lf
Gr8Legacy
+Graaf Mol
+Graardad
+Graarp
+Graav
Grab
+GrabAColdOne
GrabbaLeaff
+GrabsPeePee
+GraciousHeeb
+Grade I
Graenmeti
Grafie
Grafvs
Graham47
Grain
+GrainUhSalt
Grainfedbeef
Grainter
+Grainwave
Grainys
+Grakron
+Grallham
+Gram othy
Gram0fDabs
Gramalio
+Grambo
Grammar
+Grammar Naxi
GrampaDreami
GramsaySan
Gran
+Gran t
+Granbyboys69
Grand
+Grand Magpie
+Grand Tree
+Grand mb
GrandErected
+GrandSlash
+GrandVince
+GrandWizard
+Grander LTU
Grandikid
GrandmasterT
Grandmasters
Grandpa
+Grandpa H
Grandwarlike
Graniitti
+Granite God1
+Grannolegs
Grannt
+Granny Tiddy
+Grant
+Grant LLKL
Granto
+Grantos1993
Grants2004
Grape
Graphics
+Grappleshot
Graros
Grasp
+Grass Nugs
Grasshoppper
+Grassman-420
Grast1z
+GratefulFunk
Gratefulfunk
Gratis
Gratitheode
@@ -8888,178 +18405,360 @@ Graudalin
GraveDiqqer
Gravecan
Graveless
+Gravenor
Graves
Gravew0rm
+Gravitrons
+GravityPulse
GravyTugboat
Grawgar
Gray
+Gray Goo
+Gray Icon
+Gray Nine
+Gray Owl
+Gray Sails
+Gray Wolf31
+GrayXOF
+Graybanns
Grayden
Graymarrow
Grayola
+Grays Peak
+Grayv
+Grazalay
+Grazia
Grazing
+Grazing Goat
Grazium
+Grazuz
+Grazy Killah
Grazzak
GrcRevisited
+GreFunky
Greally
+GreasierNerd
Greasy
+Greasy Nerds
GreasyGoose
+GreasyKnucks
Great
+Great Catto
+Great Dain
+Great Sneeze
GreatBritain
+GreatFambino
GreatGinGin7
GreatNorth
+Greater Rev
Greaterbeing
+Greaterwang
Greatgranpa
Greatwhite62
+Gredhkj
GreedyFox
GreedyG4me
Greek
+Greek Bust
Green
+Green Floyd
+Green Gh0st
Green Guru42
+Green HoHo
+Green Molly
+Green O
+Green Theory
+Green noob
Green0ktober
GreenBstard
GreenClue
GreenCortex
+GreenMonstah
Green_Matcha
Greenbeens1
+Greenboy638
Greendor
+Greene Daeye
Greenikulas
Greenmusiq
Greenwell
Greenwolf666
Greg
+Greg Bcknghm
+Greg M
+Greg NM
+Greg Why
+GregLAD
Greggery
Gregley
+Gregobeast69
+Gregor itos
GregorJesk
Gregornaut
Gregory
+Gregoryxo
+Gregreg
Gregsdabomb
+Gregy165
+Greh
Greig
+Greil
+Grej
Gremlin
Gremoir
GremorysPawn
Grena
+Grenadev
Grenenjah
Grenthyl
Gressaker
+Grewal
+Grey Beards
+GreyCheddar
GreyStation2
+Greyballes
+Greybird
+Greyhound00
+Greyhounds
Greyhunter
+Greytness
Grider
Griefstonks
Grieve
+Grieve r
Grieve4Nieve
Grievedd
+GrifSpice
+Griff Please
+Griff6GG
Griffey
+Griffeydor
Griffimano
Griffin
+Griffin 900
+Griffinerr
Griffoo
Grifo
Grifwin
Grihm
Grilby
+Grill Bears
+GrilledNem
Grim
+Grim Lahey
+Grim Reapr
Grim1O
GrimR
GrimRequiem
Grimalkinn
+Grimby
+Grimescene
+Grimey17
+Grimfeather
+Grimhimblem
Grimm
+Grimm Malice
Grimmauld
Grimmij0w
+Grimmjaww
+GrimmjowCero
Grimmlie
Grimms Baane
Grimnitro
Grimple
Grimreaper22
Grimsomebody
+Grimwar
Grimwold2
Grimy
+Grimy Elf
+Grimy Ghetto
+Grimy Guamay
Grimy H
+Grimy Lord
+Grimy Oppie
GrimyBuchu
GrimyIndica
+GrimyPussy
+GrimyRanarrs
+GrimyTorstol
+Grimz Reapin
+Grimzyy
+Grinchy
Grind
+Grind 4 Max
+Grind 4 Pets
+Grind Time
Grind4Life2k
+GrindAndGame
+GrindFaster
Grindcorr
Grinder
GrinderTo99s
Grindin
Grindinator
Grindius
+Grindlwald
Gringotts
GrinoReigns
+Gripzakje
+Gris Moor
+GrittyTacos
+Griz mobile
+Grizmatik
Grizzley
+Grizzly
+Grizzly Rock
GrizzlyCares
GrmblGrombl
+GrnBstrdO_o
Grobar20
Grobaz
Grod15
+Groen Hertje
Groene
Groesbeek
Groet
+Grog Dog
+Grog Mobster
Grogget
Groleo
+Gromada
GrommrUK
+Gromp Love
Gronk
Gronky
+Gronky Mutt
+GroogeN
+Groot Lol
GrootPool
GropeJelly
Gros
Gross
+Grosyte
+Grot I
+Grotegelds
Grotkop
Grotty
Grottyzilla
+Ground Hawk
+GroundGolem
GroundRanarr
+Group Int
+Group Pig
+GroupAaronMn
+GroupSexyMan
+Groupie Hugs
+GroupieSheep
+GroupyCoopy
+Groves
+Grow Culture
+Grow a Set
Grown
+Grown ups 2
Grrh
Grrim
Grrr17
Grrrrrrr
+Grubbfoot
+GrubbyNative
+Grubumas
Grucci
Gruglio
Grum
Grummmy
Grumpy
+Grumpy Bear
+Grumpy Dane
+Grumpy Rock
+GrumpyBean
GrumpyFire
+GrumpySkelly
+Grumtuque
+Grunderzz
+Gruntlife
+Grupopo
Grwl
Gryff1n
Gryygeri
Grze100
Gschlez
Gsef
+Gsuz
+Gtacoolz
GtheSquid
Gtotgt
+Gtr Zilla
+GuBoki
Guadanha
Guak
Guaka
Guala
Guam
+Guam Autism
+Guam Extract
+Guam Leaf
+GuamFarm
+Guapify
Guar
GuardMaze
Guardhakan
+Guardiaaan
Guardian726
Guardy
Guason
Guataca
Gubrew
Gucci
+Gucci Print
+Gucci Sheets
+Gucci Skrrt
Gucci0
GucciBalboa
+GucciChris
GucciDang
GucciDragon
+GucciMedHelm
+Guccifi
GucciiFlops
Guckle
Gudfad3rn
+Gudge
+Gudginator
+Gudmen
Gudomligt
+Gudown
Guelph
+Guernicaa
+Guess I Did
Guest738
Gufix
+Gugaru
Guidebook
+Guidefox
+Guido Bwana
+Guildboss
Guile
Guilles123
Guillotine
Guilou3
+Guimmy
GuineaHorn
+Guizompaz
+Gukkiman
GulTraktor
Gulf
+Gulmek
+Gulpar
+Gulpin
Gulsaft
+Gum
+GumGum B
+GumGum Fruit
+Gumat0s
+GumbleChunky
+Gumbygerkin
+Gumbygrump
Gumbygusher
Gumbypriest
Gumiibear
@@ -9068,12 +18767,19 @@ Gummibier
Gummy
GummyTushie
Gumpie123
+Gumri
+Gun
+Gunalations
Gunci
+GundarV
Gundrace
Gundrak
Gune
Gunfire
+Gunite
Gunjamini
+Gunman
+Gunn a
Gunna
Gunnar
Gunnawr
@@ -9082,156 +18788,351 @@ Gunnolvur
Gunny
GunnyGuest
Guns
+Guns Up
+Guns n Rozes
GunsN
+GunsN Roses
+Gunshow36
Gunsmith95
GunsonGurner
+Gunta Guy
+Gunter
+Gunteria
GuntherNese
Gunthie
Guntilius
+Guntown
Gunvald1
Gunwil
+Gunzyx
+Gupto3
Gura
GuraChan
+Gurahka
Gurchh
Guren
+Gurenz
Guri77
Gurilovich
+Gurke
Gurkes
Gurnie
GurningPills
+Gurnsy
Gurog
Gurp
+Gurp Gork
+Guru Pathik
GuruOz3
+Gus is Maxed
GusMagnel
+Gushing Thot
+Gusmamba
Gustav
+Gusten
+Gustice
Gustie1
+Gusty x
GuteArbeiter
Gutenberg
+Gutenberger
+Guthiccz
Guthix
+Guthix Boss
+Guthix San
GuthixIsBae
GuthixVapes
Gutti
+Guuds
+Guus geIuk
+Guusman
Guwaap
Guwapp
+Guwgle
+Guy Shishioh
+Guy Williams
+Guy in hat
+GuyBillNye
GuyDude
GuyHarvey
GuyInReaLife
GuyOnaBear
+GuyOverThere
+GuyintheChat
Guyringo
Guzas
+Guzman Loer
Guzzle
Gvjordan
Gvzy
+Gwaas
Gwas
+Gwas BE
GwasMaster
Gwasha
Gwasing
+Gwaztec
+Gwd
Gweav
+Gween Dwagon
+Gweeve
Gwellz
+Gwenchanaa
+GwigMate
Gwimer
Gwinter225
+Gws 2
+Gwu
+Gwublin
Gwyn
+Gwynrwyn
+Gxhost
Gyanzin
+Gyga
+Gym Beam
+Gym Is Home
+Gym then GYG
+Gymming
Gymp
+Gynn
GypsyAvenger
+GypsyTears
Gyrati0n
Gyro
Gyroman
+Gyrotta
Gytisr9
Gyts
Gyym
+Gz Parsec
GzBs
+H 0 U N D
+H 2R
+H A D O
+H A I D E S
+H A M M E H
+H A R L S
+H A T
+H A X 3 D
+H D M P
+H E A L E R
+H E J S A N
+H O L M E
+H Q Killer
+H S 7
+H U L K K
+H U N A J A
+H a t y
+H a w n y
+H abs
+H alo
+H ch
+H e c t o r
+H i n e s
+H l E U
+H obbs
+H owl
+H rekDoer
+H uff
+H-tsi
H0B0
H0DEX
+H0LINESS
H0NA
H0PES
H0RSEFIGHTER
+H0RY
+H0j
+H0j00
H0lyPorkyPig
H0me
H0nestyBe
+H0wy
H1GH
H1gh
H1gs
+H2 Ninja
+H20magic
H22a
H2GivesUTheD
H2HO
H2Okt
+H2R
H3AV3N1Y
H3NNESSEY
H3adBurner
H3ll
H3llg0g
H3nti3
+H3rbMaXD
H3rbs
H3rioon
H3xxar
+H4RD P V M
+H4RD PVM
+H4wk0n
H501
+H61
+H8
+H8rry
+HA RD
HACHE
HADYYY
+HAHA CODY
+HAMMY P0TTER
HANDLEwCARE
HAOKIMALONE
HARVEY
HARYWERNASDA
HASA
+HAUS DOSAN
+HAWGCRANKD
HAXERFUGGv2
+HBPandox
+HBTFD
HBTurpin
+HC DVS
HC Diego
+HC H R A D
+HC HALLEN
+HC J P
+HC Lone
+HC Nitsy
+HC PogChamp
+HC Tehl0rd
+HCByTheWay
HCIM
+HCIM Freak
+HCIM Telmo
HCJynkky
+HCTHB
HCaturbate
HCgenes
HClM
HCmunchies
+HCquitter
HCsndr
HDGamerLewis
HDarcticus
+HEAD TURNER
HEADLlNES
HEAVYWElGHT
HEAVYWORK
+HEJNUS
HEL1O
HELPPOLOTO
HELl0S
+HEMSKl
+HEMULIN LADA
+HER0X
HEREforPETS
HERYWERNASDA
+HEWlTT
+HEXISZ7N510Q
+HElMDALLR
HElSENBERG
+HFH141
HGCduke
+HGHZ
HHans
+HI IM XP
+HI lM SATAN
HICK
+HIHIHl
HIKI VALUU
+HIM thespaz
+HINEaKIN
+HKD
HL8ight
+HM-O3
+HM01Urself
+HM01Yourself
HM02YouFools
HM05
+HM05 Flash
+HMFIC
+HMR9
+HMS Bass
+HMTickle
+HMWRCKR
+HO NK
+HOB0MAN
+HODL DEEZ
HOKIE
+HOKIE II
+HOLDUP
+HOMIE_SNKE
HOOD
HOOLlGANS
+HQ140
+HR palvelut
HRVRD
+HRZ Dennys
+HReversti
HT Hero King
+HTKBeast
HTTP
HUGE
+HULKSMASH
+HULL CI TY
+HUMANATSIGHT
HUMPING
HUUTIS
HVSG73373535
+HWFG Jordan
+HYDROPWN1C
+HYPEHYPEHYPE
+HYPERTAIKURI
+HYPOXD
+Ha Tsjoe
+Ha Yea
+Ha rrison
+Ha ss
+Ha1fWayCrook
HaClintondix
+HaKooro
+HaMwise
HaNamer
Haaaa
Haaaydeez
+Haar-Xil-MES
+Haarde Knud
Haardest
Haarvey
Haavard
Habaneros
+Habbitatt
Habib
HabsWin2021
Hachune
+Hacien
+Hacis Zone
+Hack McGraw
+Hackdash
Hacked
+Hacked Here
+HackermanJS
Hackett116
Hackie
+Hacklang
Hacky
+Had Enough
+Had2hurt
HaddlingOS
Hadeees
Hadei
Haderlumpen
Hades
+Hades m8
+Hadezzz
+Hadhod46
+Hadies205
+Hads MC
+Hadyen
+Haelendur
Haell
+Haemogobl1n
+Haertyew
Hafco
Hafcos
Hafdis
@@ -9241,22 +19142,42 @@ Hagaar
Hagedis
Hagenau
Hagenees
+HaggisChaser
+HagridGone
Haha
+Haha noob
+HahaBonk
HahaYes
Hahaha
+Hahalord888
HahnSuperDry
+Hahru
HaiDiLao
+HaiHai
+HaiIZaros
Haiaf
+Haiden
Haidynn
Haighy
+Hail to Pitt
HailYeah
+Hailie Jade
+Haio
Hair
+HairNotFound
Hairy
+Hairy Batman
+Hairy Dery
+Hairy Hobbit
+Hairy Hooker
HairyCave
+HairyGirls76
HairyLatino
+HairysJungle
Hairyteddybe
Haissi20
Haiten
+Haitze
Haizet
Hajduk
Hajj12
@@ -9265,28 +19186,49 @@ HakGwai
Hakafissken
Hakala
HakanTheMad
+Hakaniemi
+Hakattu
Hakeem
+Hakkie
Hakkua
Hakozuka
HakunaWHO
Hakuryuu
Hakwai
+Hal Jordan
+Halaal
+Halal 1
+Halal Burger
HalalSnakbar
+Halaladdin
+Halbrand3791
+Halcony
+Halcyon Myth
+Haldir
Haldir140
+Haldun
Hale
+Hale End
Half
Half Volley
+Half a Cig
+Half a Worm
HalfAb0rted
HalfHawaiian
Halfdanger
Halfway
HalfwayOkay
Haliax
+Halibelle
Halipatsuife
Hall
+Hall of Fame
Halla
+Halla-Aho
+Hallako
Halleloja
Haller
+Hallo Knul
Halloman71
Hallonkram
Hallowed
@@ -9294,74 +19236,156 @@ Halls104
Hallucianter
Hallucin8d
Hallufauz
+Halluusio
Halo
HaloMisfit
+Haloboy
Haloking176
+Haloman6666
Haloo
+Halseys
Halsly
+Haltrek
+Halujo
HaluunKeksin
Halve
+Ham Dip
+Ham Turkey
+Ham r
+HamHawk
+Hamada
+Hamaken
Hamataka
+Hambam55
+Hamburgor
Hambzy
+Hamdulilah
Hamed
+Hamel
Hamii
Hamis
+Hamlee
+Hamm
HammZ
Hammer
+Hammer Man
+Hammer4422
Hammer4442
HammerTime29
HammerTine
Hammered
+Hammertime
Hammond
+HamnerTime
HamoodyShimy
Hamp
+Hampton Bays
Hampus
+Hamrocks
Hamsterslayr
+Hamstr
Hamudiy
+Hana the Mad
+Hanashee
+Hand Puppet
HandTuggy
Hande
+Handecapped
+Handex
Handicap
HandleofJD
Handley
Handphone
Hands
+Hands Hurt
Handsome
+Handsome Rob
Haneet
+HanekawaSimp
+Hanfkeks
Hang
+Hang em high
HangChowCrow
Hangin
+Hangin Nuts
Hanhen
+Hani
+Hanikala
+Hank Jackson
+Hank T Tank
+Hank343
HankTheTank2
Hankanini
+Hankk1
HankoAJ
Hankzilla
Hannah
Hannh
+Hannibal GIM
Hanno
Hannu
+Hannu Poika
+Hannu Soolo
+Hannys Main
Hanoi
+Hanoi Rocks
+Hanoob btw
+Hans Glans
Hansen
Hansern
+Hansiil
+Hansonville
Hansy
+Hantarded
Hanwi
Hanzino
HaochengZ
Haole
Haphazzardz
Hapoton
+Happ1RS
Happier
Happiikhat
Happy
+Happy Beluga
+Happy Dappy
+Happy Feet
+Happy Josh
+Happy Kitty
+Happy Light
+Happy Meal
+Happy Prayer
+Happy Tj
+Happy exSlut
+Happy2DaCore
Happy420
+HappyMeds
HappyPandaXD
+HappyScape
+Happydud01
Happyfrog12
Happyguy
+Happypurpday
+Happytoy
+HapuApu
Hapukurk
HarKieren
+HarO Reborn
+Hara YEP
+HaraHachiBu
Haraket
Harambe
+Harambro
+Harash
Harassment
+Harbix
+Harbor 2567
Hard
+Hard Chance
+Hard Clue
+Hard Filmur1
+Hard Kinta
+Hard TeK
HardFormed
HardHatJeffy
HardMannetje
@@ -9370,13 +19394,22 @@ HardRazer
Hardc0reBruh
Hardcome
Hardcrux
+Harde Pik
HardeSnikkel
+HardenedRS
Harder
+Hardeschijf
Hardie
+Harding
Hardlesas
Hardman
+Hardon hank
+Hardstyle IM
Hardwaring
+Hardwell420
+Hare Danger
Harem
+Harem Isekai
Harja
Hark
Harka
@@ -9384,122 +19417,236 @@ Harken
Harken21
Harlekin
Harlem
+Harley Nz
+Harleyrox
+Harlie
Harlot
Harm
Harmala
Harmentje
+Harming
+HarmlessTwig
+Harmon Angel
+Harmoniiumm
Harmonized
Harmony
+Harmonyy
Harmr
Harms
+Harms Whey
+HarpoonMyAss
Harraggen
Harresvela
Harri
+Harri Hylje
Harriganrace
+Harris0n
Harrithon
+Harrods Fish
Harrris
Harry
+Harry Bucket
+Harry Dirty
+Harry Hendo
+HarryPoppa
HarryTheGOD
HarryTheWhte
Harryalt
+Harryguy23
Harryindacut
+Harses
+Harsh Times
Harshhashh
HartIess
Hartlepool
Hartree
+Hartreni
Haruka
+Haruka Meh
+Harus Ranger
Harutikk
Haruto
Haruuki
+Harvahammas
Harvardista
+Harveytec
+HaryLongWood
Has2BeSHiFtY
+Has547
+HasOneLegacy
Hasballa
+Hasbullah
Hasek
Hash
+Hash Browns
+Hash House
+Hash One M8
+Hash katchum
Hash1
+Hash1Aussie
HashHund
HashIsLife
+HashTagYou
Hashh
Hashiiirama
+Hashimm
+Hashlife
HashtagGOALS
Hashtagz
+Hasloa
Hass
+Hassall
Hassis
Hassoni
Hastings
+Hasty Power
+Hat i
+Hat tis
HatchetOG
+Hatchkat17
+Hatchling
+Hathrow
HatiFnattt
+HatoradeJack
Hats
Hatsune
+Hatsune Miko
Hatsy
Hatte
+Hattibagen
Hattnn
+Hattuviilari
+Haubjerg
+Hauki0nFive
Hauki0nIron
Hauki0nNoob
Hauki0nUlti
+Haunleff
Hauntedfury
Haunter12123
Hauntya
HausHausHaus
+HautaNorsu
+Hautboi
HavU
Havac
+Havard
Havawk
Have
+Have Sabr
HaveAGood1
+Havendare
+Havenmeester
+Havi k
+Havidex
+Havoc Grasp
HavocRavage
+HavocThomas
Havok
Havottaja
Havzzter
+Haw
+Haw4iiankush
Hawaii
+Hawaii Ice
HawaiiMadez
Hawaiian
+Hawasser
Hawes
Hawk
+Hawk Driver
Hawkear
Hawkes
+Hawkeye87
Hawkit
HawkofLight
HawksMama
+Hawkwound
+Hawkzrael
+Hawler12
Hawolt
+HaxY
Haxd
+Haxident
+Haxixero
Haxn
Haxnoiz
Haxoonie
+HayHay
Hayabusa
+Hayaku
Hayasaca
+Hayasaka
+Hayboo
Hayden3
+Haydenl451
Haydenss
+Haydern
Haydor
Hayesy
Hayfield
Hayirlisi
HayleyQuinn
Haylz
+Haynex
+Haz-zy
+Haz2
HazDownz
Hazade
+Hazardless
Hazardouss
+Hazards
Haze
+HazeCloud99
+HazeMePls
HazePGN
Hazed
Hazeley
+Hazezor
Hazla
Hazsle
+Haztraz
+Hazy Sparrow
HazyHerb
+HazyHour
HazzFive
+Hc OffWhite
+Hc Oh Wait
+Hc Toleranss
+HcFlex004 v4
HcGon
HcHoopla
+HcimTironade
Hcimdiot
+Hckie
+He Adventure
+He Pinky
+He Who Iron
+He nry
He11zdone
HeSmokesBud
Head
+HeadBear
HeadHuunter
+HeadOverseer
+Headache
+Headenforcer
Headgaskets
Headleya
+Headliners
Headlines
+Headlines v2
+Headshotting
+Headwipe
+Healers
+Healty
Heard
+Heard Chef
Hearne
+Heart Please
Hearted
Hearten
+Heartlesdude
Heartlock
Heartquake
Hearts
@@ -9511,154 +19658,299 @@ Heat
HeatSeekr187
Heated
Heathen
+Heathenry
+Heather x3
+Heatmyser
HeatproofIM
Heav7n
+HeavenIyGard
+Heavener
HeavenlyBlue
Heavens
+Heavens Feel
+HeavensDao
HeavensStorm
+Heavensdown
Heavy
+HeavyBowGun
+Heb0
+Hecec
Heck
+HeckIron
+HeckinWoofer
HeckingFish
HecklerNKoch
Heckstrm
Hecote
Hectic Mic
HecticGinger
+HecticHerb
+HecticKebab
+Hectoplasma
Hedge
+Hedralx
+Heebie
Heedbo
Heee
Heel
Heeling
+Hefboom
HeftyFlan
HegXDXD
Hege
Hegelund
Hegert
Hegesy
+HehtoLerssi
+Hei Kneuter
+Heifetz
+Heightenings
HeikkiPentti
Heil
+Heil Pierce
+Heil Vegeta
Heilios
+Heill Ragnar
Heinamies
Heineken
+Heinekentje
Heinered
Heinzzel
+Heir
HeirHead
+Heisbergh
HeisenBergW
+Heisenber9
+Heist Music
+Hej hej
+HejBrink
+Hekaton
Hekdik
Hekla
Heko
+HektikBadger
+Helbur
Heldip
HelemaalMooi
Helesta
Helium
+Hell ETC
+Hell Kitt3n
+Hell ffa
HellAngel
HellBlood
Hella
+Hella Tonk
+Hellabad
Hellafly
+Hellagaybtw
Hellandnz
Helldog946
Hellhaunted
+HellianV
Hellinferno4
Hellixx64
Helllblazer
+Hellmo
Hello
+Hello Bel
+Hello Friend
Hello6
+HelloBot9000
HelloDottie
Hellodummy
Hellrain962
Hellrazorr
+Hells 10hp
+Hells Chance
+Hells Godz
+Hells Puppet
+Hells doggy
HellsRavage2
+Hellwater
Hellz
Helm
Helmoid
Help
+Help Autism
+Help I Gay
+Help my
+HelpImStupid
HelpLahh
HelpTheNoobs
+Helpful
+Helpless Ale
Helson Ryse
Helta9
Helx
+Hema roids
Heme2
HemeSupreme
Hemiptera
Hemmii
+Hemmur
HemoGlobe
Hemp
+Hemp product
Hempopotamus
+Hempwick
Hems
+Hen Ac Araf
HenaQ
+Henbane0
+Hendo Au
Henee
+Henehh
Henfami
Hengecobdig
+Hengggga
+HenkDeTanker
HenkdePlank
+Henkka Btw
+Henkka242
Henkkawaa
+Henkkiiieee
Henkleebruce
+Henko420GB
+Henktius
Henlo
+Henners
Hennesssssy
Henni
Henniejj
Hennssey
+Henri380
+Henry Fe
+Henry XV
Henry14
Hens
+Hensel
+Henslord
+Hensta
+Hentai Daddy
+HentaiMaiden
+HentaiMusic
+Henu OG
+Henzone58
Heolis
HephaestusRS
+Her Gay
HerAddiction
Herb
+Herb Deen
+Herb Lab
+Herb Quest
+Herb box
Herbacist
Herbaderb
HerbalKing
+HerbalTeabag
Herbalicious
Herbby
Herbilicious
Herblore
Herbmania
+Herbmatic
Herbogus
+HerbsnSpicer
HerculesLoyd
Herculooo
HereFor_Beer
HereSomeDank
HeresALlama
HeresySlayer
+Herk
+Herkko
+Herkko32
+Herkku
Herkules
Herky
Herm10ne
Hermanni
+Hermaus M
+Herminator0
Hermit
+Hermit Jack
Hermitian
+Hermot palaa
Hero
+Hero Extreme
+Hero Kid
+Hero vs Hero
HeroDan
+HeroGenos
HeroToby
Heroed
Heroic
+Heroic Hope
HeroicDesire
+Heroicjesus
+Heron Bird
Herp
Herpa
HerpaGnome
HerpesNo
Herpesbek
+Herpito
+Herr Gaucho
+Herr Luc
Herra
+Herra Beavis
+HerraBonsai
Herrits
+Herrmann3
Hesienberg
Hesitation
+Hesmander
Hespori
+Hespori KC
+HesporisSeed
Hespus
Hess
Hesson
+Het Heden
+Hetdorp
+Hetebeir
+Hetehaan
+Hetimos
+Hets Capture
Hetumo
Hetzer
Heuha
Heur
+Heuro
Heuvel
+Heuvel Reus
+Hevenlys
Hever
Hevi
+Hevi Luumu
Heving
+Hewy
+Hex Is Maxed
HexMage
Hexadecimal
+Hexagon Heat
+Hexalogy
+Hexedited
Hexenblut666
Hexenkonig
Hexication
+Hexos
+Hexphase
Hextale
Hextra0rdnry
+Hexun
Hexxjan
+Hey B
+Hey Bob
+Hey Cheems
+Hey Im Dylan
+Hey J
+Hey Jase
+Hey Jay
+Hey Mills
+Hey Ubba
HeyBeautiful
HeyBigDaddy
HeyDaddy
@@ -9666,42 +19958,103 @@ HeyFonte
HeyHowsLife
HeyItsLachy
HeyLuffy
+HeyThatsLife
+Hey_Duck
+Heymakerz
+Heyman
Heywaddup
+HeyyDivine
Hezbullah
+Hezr
HgH2
Hhmm45
Hhmora
+Hi Cookie
+Hi Im Ant
+Hi Im Duncan
+Hi Im Emil
+Hi Im Frak
+Hi Im Ken
+Hi Im Pei
+Hi Im Stevo
+Hi Im Vitao
+Hi ImMrRight
+Hi Lvl Ideas
+Hi Opal
+Hi Ren
+Hi Suka xD
+Hi Tyler
+Hi im Gin
+Hi im Savage
+Hi im Shar
+Hi im Yellow
+Hi lm Paul
+Hi lm Sk8
HiDyvvnBDP
HiGHFLYER
+HiHowAreYa
HiImIronRick
HiImNicole
HiLumbridge
+HiNebb
+Hiarii
Hibbetts
+Hiben75
+Hibernal
Hick
Hickery
Hicu
Hidaki
Hidden
+Hidden Power
+Hidden one1
Hiddenn
+Hiddinkiwi
Hiddy
+Hide Ink 207
+Hide Ya Kids
Hidekia
Hideo
+Hideopenend
Hider
HidesHerEyes
+Hidi
Hidole555
+Hidro
Hieroglyfic
Hifter13
Higgens
High
+High Content
+High Halpert
+High Hustler
+High Knight
+High On Cake
+High Ronnie
+High Score
+High Snorse
+High Up Here
+High as Zuk
+High lm hi
+HighAsF Bruh
+HighBacon
HighMeatloaf
HighNoobJhin
HighOnPlants
HighProbably
+Highbury
Highcaalibex
+Higher Force
+Highestarchy
Highfish
+Highjacurmum
+Highland
+Highly Faded
Highmountain
HighonCash
+Highs
Highscaping
+Hightierian
Highway2Hell
Higlen
Higu
@@ -9709,144 +20062,253 @@ HihoMenono
HiiddeN
HiipFiire
Hiisgreat
+Hiit Man
Hiiz
Hijack778
Hijsbergh
Hiker
Hikiukko
Hikizato
+Hikmet
+Hilarious
+Hilda Garde
Hildr
Hilge
+Hilipilli
Hilk
+Hillhouse
+Hillpker
Hillram
HilltopHick
Hillzy
Hilo
+Himala
+Himaster
+Himtheguy
+Himy
+Hina Suguta
Hincarpie
+Hinchers
Hindi
+Hindle
Hinny
+Hinss
+Hintai
+Hiopeer
+Hip Fe Hop
+HipSlippers
Hiphop
Hiphopdude0
+Hipiguy48
Hipnodiskd4
Hippeis
HippieLexy
Hippies
+HippoBlunts
+Hiqhlife
Hirae2
Hiria1
Hiroble
Hiroticus
+Hiroyuki Isa
+His Faithful
HisHungness
HisLordship
Hisano
Hisblore
+Hislordship
HisokaX4
Hispeeed
+Hissi-Timo
+Hit U
+Hit By Car
+Hit Points
+Hit The Guam
HitMyVape
HitOnRun
+HitOrange
HitTheVape
Hitagi
Hitch350
Hitchens
HitherDither
+Hitman Style
+Hitme8
Hitmonchans
Hits
+Hits Like
+Hitsumaru
Hittimestari
Hitz
+Hiva
Hiya
Hiyouri
HjaIIe
Hjaldr
HlKEN
HlMBO
+Hladomor
+Hlata
Hldz
Hlep
+Hlnub
+Hm
+Hmg Hawj Str
+Hmm Fr Bruh
HmmKoekjes
+Hmmer
Hmmingbird
Hmmk
Hmmm
+HntrBTW
+Ho Chi Meme
+Ho LiFuk
HoButter
HoFkee
+HoLeShite
HoarderMan
+Hob Ralford
+Hobbi
Hobbit
+Hobby Jogger
Hobex
+Hobgoblinas
Hobgoblins
+Hobgrot
Hobie
Hobo
Hobodude67
Hock Baws
+Hockney
Hocky
Hocpuck
+Hocus POTUS
HodamOS
+Hodeman
+Hodge5
Hodgetwin
Hodort
Hodvik
Hoffmanator
+Hoffmanbmx
Hoffsworth
Hofus
+Hog
HogPacker70
+Hogboar
+Hogboy
Hoggormen
+Hognag
Hogo
Hogsen
Hogskoleprov
Hoheti
Hohhenheim
Hohhoijjaaaa
+Hoi An
Hoilam
Hoix
Hokage
+Hokage Jason
+Hokage Sama
HokageRS
Hokiako
Hokie
+Hokiee
+Hokies
HolaBurrito
Holbox
Hold
+Hold My Gun
Hold3nMc
+HoldMyShrimp
+HoldenBallz
Hole
HoleNewName
Holenes
Holidayz
Holiest
+Holiidayyy
Holisti
Hollar
Hollington24
Hollow
+Hollowed One
Hollsyy
+HoloTheDrunk
+HololiveOS
+Holoubek
Holsey3126
+Holt
+Holtsen
+Holunder
Holy
+Holy Cheetos
+Holy Druid
+Holy Jandals
+Holy Moses
+Holy Plan
+Holy Rock91
+Holy Scrotum
+HolyChrist
HolyColt
HolyDugong
HolyElixir
HolyEntity
HolyGhost
HolyHerb
+HolyIronmoly
+HolyMould
HolySaints
HolySkittles
+Holycaw
Holyfuk
Holyhonza
Holykana
Holyshmokez
Holyzuk
Hom3r
+Homage48
+Hombelkei
Home
+Home Boy
+Home Office
+Home Page
+Home Plug
+Home Run26
Homealot
+Homebad
Homefront
Homegrowe
Homelander
Homeless
+Homeowner
Homepage
Homer
+Homer LT 0_o
Homestead
Homicide
Homie
Homies556
Homingstats
Homlepung
+HommeDeFer
Hompski
+Hon
Honaz
+Honchcrow
+Honda Coupes
+HondaXJ20
Honden
+Hondo Ohnaka
+Hondsvot
Honest
+HonestThomas
+Honestben
+Honestidade
Honeytrippin
Honeyyyy
+HonkMyClussy
Honket
HonkeyKong
Honkitonki1
@@ -9854,37 +20316,61 @@ Honko
Honkys
Honler
Honor
+Honourable
Honq
+Honra
Honru
+Hoo Lee Fook
Hooba
Hoobloob
HoochFighter
Hood
+Hood Rat
HoodBrothers
Hoodaloo
Hooded
HoodedDeath
Hooder
Hoodieninja
+Hoodless
+Hoodlum_94
Hoodrat
+Hoodstar XD
HoofHarted
+Hoogbegaafd
+Hook
+Hook N Arrow
+Hookah
Hookin4GP
Hookr
Hooleys
+Hooofer
Hoooka
HooorrraaaH
+Hoop Snake
HoopaLoopz
+Hoopdie
Hoopre
Hoopti
Hoorus
+Hooryu
+Hootenanny
+Hooyaah
Hoozio
+Hop Loser
HopNowNoob
Hope
Hope4TheBest
HopeSmolDicc
+Hopeless
+Hopelite22
Hopeu98
Hopian
Hoppa
+Hopper727
+Hoppip
+Hoppipolla
+Hops World
Hoptilicus
Horatio
Horatioat
@@ -9893,27 +20379,60 @@ Hord
Hordalad
Hordaland
Hordelli
+Horey
Horizons
+Horizons End
+Horme
HornDawgx
Horned
Horns
+Horny4Herbs
Horny4Hunlef
Horozu
+Horppi
+Horrific Rat
Horriser
+Horros
+Horrow jr
Horse
+Horse Tock
Horselord
+Horshock
+Horsley park
Horstel
+Horus Hyla
Horus1701
HoshizoraRin
Hospitaliano
+Hoss
+Host Proctix
HostileBoss
+HostileCloud
HostileEx
Hostiles
+Hot Ass
+Hot Box
+Hot Boxing
+Hot Chesters
+Hot Choco
+Hot Chook
+Hot Dog 1995
+Hot Dog Guy
+Hot Girl
+Hot Glacier
+Hot Gril
+Hot Hemp
+Hot Shop
+Hot Since 82
+Hot Stepdadi
+Hot nurse
HotAsianCuti
HotCocoa
HotCuppaT
HotDoggWater
HotManCurry
+HotMaxCurry
+HotPud
HotSaus123
HotSnow
Hot_Farmer99
@@ -9922,180 +20441,342 @@ Hotandhorny
Hotbox
Hotchelli
Hotdog
+Hotdog Timmy
Hotdog655
+HotdogGravy
Hotdogit101
+Hotdogwhat
Hotel
Hotkeys
+Hotline Juan
+Hotot
+Hotputhy
+Hotrod-Matt
Hots
Hotsbo
+Hotse
Hotsgonwild
+Hotshotz61
Hotslol
Hotwheeler
Houdinski
Houndstooth
Houowvwvv
+Hourlies
+HoursAndy
Hous
House
House748
+HouseSniffer
+Houseman45
Housewife
+Houston713
Houstoned
Houstonnnn
+Hovis
+Hovland
Hovmeizter
+How do I win
+How to quit
How2Boss
How2username
HowAboutNeup
+HowDoDisWork
+HowHardd
HowIing
HowIsDis
+HowLee
+HowSway
Howde
Howland
+Howler Head
Howlini
Hows
+Howsey
Howson
HoySmallFry
+Hoya Markus
+Hoyaa
Hoyah
Hoyiron
Hoyryjyra
+Hoyyehh
+Hp x Hp
+Hr Banan4
+Hr CarlSmart
+Hr KalZ
+Hr Pagulane
+HrMystik
+Hra Amiraali
+HraMajuri
+Hraerekkrr
Hrafnagud
+Hrag
+Hrathix
+Hrry
Hrungiir
HshBrwnClwn
+Hsilver
+Hska
HsrFresh
+Htine
+HuZ Ryan
Huaraaturpaa
Huard
Hub3r
+Hubbbzzzz
Hubbz216
Hubeeb
+Hubie
+Hubiera
Hubli
+Huby K
+Huck
HuckUsAHandy
+Huckn
+Huddo
Hudsy
Huebs
Huevote
+HueycoatI
+Huffers
+Hug A Mudkip
+Hug my cat
Hugakitty
Huge
+Huge Coom
+Huge Mudkip
+HugeCcret
+HugeCox
HugeMike
HugeSimp
HugeSquanch
+HugeXpWaste
Hugh
+Hugh Jannob
+Hugh Jas
Hugh Jazzhol
HughAreMyron
+HughJastle
+Hughes Luck
Hugo
+Hugo Baws
+Hugo C
Hugodzilla
Hugos
Hugoslavic
Hugotec
+HugsTibbers
Hugsi
+Hugsqtface
+Huhi
Huhm0ng
+Huhmble
Huhu
+Huidskleur
Huiliuiliu
Huilu
Huinca
Hukka
Hulagu
+Huler
Hulk
+HulkSmaash
Hullcity25
Hulll
Hulluke
Hulluurpo
Hulvatonta
+Hulyx
Human
+Human Knight
+Human Reject
+HumanMalware
+HumanSl0th
HumanToxin
Humanist
Humanityy
+Humanoid Rat
Humb
+Humb RS
Humbabe
Humberto
Humble
+Humble Finn
+Humble Husk
+Humble Otter
+Humble RNG
+Humble lp
HumbleCanoe
HumbleCrab
+HumbleFarmer
HumblePlayer
Humblee
+Humblegods
Humbleherb
Humblenobody
Humbles
+Humboy
+Humgrump
Humid
+Humiliation
+Humji
+Hummbinger
Hummerspeck
HumperT
Humpletics
Humu
+Hunajamurune
Hundjagare
Hundred
+Hung Opossum
+Hung Pikachu
+Hung Zebra
HungLow30
HungSolo45
Hungarry208
HungerRee
Hungry
+Hungry as fk
+HungrySponge
HuniePop
Hunkadoris
+Hunks
+Hunlef
Hunnets
+Hunni Bunny
Hunpy
+Hunt Mike
Huntarr
Huntdragimps
Hunter
Hunter10139
+Hunter4056
HunterPandav
+HunterXosrs
+Hunters Main
Hunterz
+Huntin Specs
Huntindawg
Huntindawg2
Hunting
HuntingGirls
+HuntingPets
+Huntinrox
Huntinthotts
+Huntiritox
HuntnCoFTB
+Huntsin
Hunyadi
+Huolon
+Hupipelaaja
Huppis
+HuppuKostaja
+Hups
+Huqin
Hurlae
Hurleee
Hurley
+Hurley24
Hurlock
Hurri
+Hurrisun
+Hurs 1
Hurtigmads
HurtsDonut
Huscarl
+HuseG00SE
Huseyin31
+Hush Pup
Husker
HuskerFool
Huskieeeee
+Huskvarna
+Huskyskills
+Hussar1683
Husse1n
Husseinn
Hustensaft
Hustlez
Huswan
Hutchens
+HutchoAU
Hutros
Huts
+Hutula
+HuugeCok
Huugo35
Huule
Huumepoliisl
+Huupee
Huutiset
Huutoripuli
Huviksee
+Huxley King
+Huxtap
Huxtin
Huzeyfe
+HvH
Hvale
+Hvale Kongen
Hvorfor
+Hwael
+HwbrangerUIM
+Hwzrs
+Hxc Ironfail
Hxcmackin
+Hxpeful
Hxrm
Hxrsey
+Hy a
Hy3RoGeN
+Hy3RoGeN x
HyAcey
+HyDrooo
+Hybernated
Hybrid
+Hybrid Hurtz
+Hybrid Mech
HybridSanta
HydG
+Hydi
Hydr0nate
+Hydr0p0nic
Hydra
+Hydra Ikkle
+Hydra Spoon
+Hydra_Lerna
Hydraletics
+Hydras Daddy
Hydration
Hydraxon
+Hydrerion
+Hydro-Quebec
HydroBlast
+HydroC
+HydroGasMask
+Hydrocarbons
Hydroe
Hydrofiner
HydrosFather
+Hyemi
+Hyfens
HyggeDansker
+Hyi
Hykd
HylianLink
+HylianLombax
Hylkon
+Hymy
Hyosin
+Hyough
HypaDunkTv
+HypaZestay
HypeLad
Hyper
+Hyper 212
+Hyper Threat
+Hyper autist
Hypercam
Hypercoaster
Hyperdeath20
@@ -10103,68 +20784,310 @@ Hypermole
Hypersomnia
Hypertroll
Hypertrophic
+Hyperversity
Hyphen
+Hyphen-ated
Hyphenated
+HyphyRS
Hypn0se
Hypocriet
+Hyprocrisy
Hysteric4l
+Hytrogod
Hyttynen
+Hyula
Hyun
Hyxbe
+Hyze
+Hyzers
+I M
+I Skilz I
+I ADK I
+I AM DROID
+I Am Arun
+I Am Calysto
+I Am Cicu
+I Am Dave
+I Am Eugene
+I Am Malenia
+I Am Mathew
+I Am Mizzou
+I Am Times
+I Am Vexed
I Am Vono
+I Am Xyience
+I Am Yesac
+I B Z
+I Barak I
+I Be Vibing
+I Be Yankin
+I BenJammin
+I Bryce I
+I Buy Bulks
+I Buy You
+I Call BS
+I Cant Veng
+I Chance I
+I Chaz I
+I Chop Life
+I DanWise I
+I Daniella I
+I Decimate
+I Descend
I Dizz I
+I Dont Gnome
+I Dont Know
+I Dont Weld
+I Drink T
+I Drive Jeep
+I Duck Hunt
+I ELITE I
+I ET BBIES
+I Emu I
+I Enjoy Butt
+I Faheem I
+I Farm On Rs
+I Flick Bean
+I Gem I
+I Genesis l
+I Go Noob
+I Gribben I
+I Grind it
+I H8 GAGEX
+I Haros I
+I Have Quit
+I Heal DHers
+I Herb Store
+I Hunt Pets
+I Hustle Man
+I I ODIN I I
+I JANGLER I
+I Judgee Yu
+I Ko U Lol 1
+I L0ve Lolis
I LOTR I
+I LV PEACH X
+I Lezima I
+I Liam I
+I Liamz6 I
+I Like Cake
+I Like JoJo
+I Lov3 Pho
+I Love DILFS
+I Love Kinja
+I Love Kylie
+I Love Muff
+I Love You
+I Luci
+I Luhhya
+I Luv tSwift
+I M A P nuss
+I M Ket
+I M S N Y
+I M The Weed
+I Maxed OSRS
+I May Be
+I MoF
+I Mograine I
+I N D I A N
+I Need 1M
+I Need Succ
+I Need aBeer
+I Novato I
+I Nz I
+I OX
+I Owning
+I P0
+I P0KY I
+I Parry I
+I Peter I
+I Pk In Monk
+I Plank Lots
+I Play Aegis
+I Pod335
+I Pri
+I Q T
I R N B R U
+I R O N 99
+I RC
+I ReAPeR I
+I Roll Need
+I Ron Man
+I Ruin Holes
+I Run East 2
+I Sharted
+I Smiteyou I
+I Smoke Irit
+I Specs I
+I Spied
+I Strangles
+I Taka Hujit
+I Teller I
+I Tricky I
+I Tuscan I
+I Valknir
+I Vape Lube
+I Viral
+I Want 60FPS
+I Would Rage
+I Xl I I Xl
+I Yogurt
+I Yoshitsune
+I am Anyone
+I am Bryce
+I am DB o
+I am Elk
+I am Future
+I am Glynny
+I am J M E
+I am Jedi
+I am Niels
+I am Nyheim
+I am Olive
+I am Ry
+I am SHODAN
+I am Saitama
+I am Shiny
+I am Shogun
+I am Simon
+I am Soloing
+I am Twiggy
+I am a wreck
+I am aRusher
+I am drunk
+I am groot B
+I ate
+I bad Guy
+I desire God
+I do be Iron
+I eat peach
I h8 farming
+I have egg73
+I have poon
+I have rng
I ll fail
+I love me
+I love yew
+I m Dave
+I m Kenpachi
+I m an Angel
+I matchjad I
+I mpling
+I n b 4
+I ndy
+I nspire
+I rvin
+I sak
+I smell zaza
+I so pale
+I squared R
+I t I s
+I tbag cows
+I used to Rc
+I van
+I vinrox
+I w4ste xp
+I wana dew u
+I want wings
+I-IEEBO
+I-Iulk
I00OOOOOO00I
+I2P
+I2m
+I2ocky
+I2ossiiii
I3ET
I3WANA
+I3ooth
+I3ow Hunter
I3ox
I3rucex
I3ubbles
I3ulow
+I7I
+I7iablo
+IA
+IAM HARDWELL
IAMBillNye
+IAMDouble_C
IAlwaysBurn
IAmArcade
+IAmArchangel
IAmBabyYoda
IAmBinx
IAmEcliptic
IAmFaptastic
IAmFrampt
+IAmJacbo
IAmRichard
IAmSlimShady
IAmStyle
IAmUnbound
IAmWaffles
+IAreTazz
IB4I
+IBB Baskani
IBIoodRose
IBaIance
IBangBBWs
+IBardak
+IBloodwing
+IBuyGF5GP
IBuyPowers
+IBuyShungite
+IC 3
+IC XC NI KA
+ICE GIANTT
ICNK
+ICantFit
ICauseRage
ICrazyCamelI
+ID theft
IDEPOCIEBIE
+IDSilver
IDark
IDiabloI
+IDustie
IEATEDYU
+IFALL3NI
+IFIFIFFIFIF
+IFIFIFIFFIFI
+IFIFIFlFIFIF
IFRC
IFRS
+IFRS 9
+IFartOnBaby
IFernedYou
+IFistBonk
+IFoundABaby
+IG0R II
IGN0RANCE
IGoogledIt
IHQueenI
IHasHips
IHaveAWifey
+IHaveChicken
IHaveToQuit
+IHobbitI
+IHopFromNo1
IHuntKoalas
+II Fabi II
+II Gots Piie
+II Mossy II
+II TurMz
II0III
II0v0II
IICyRaNoKII
+III SLAYR
+III jin III
IIIBCIII
+IIIGavinIII
IIIel0n
+IIIusionist
+IIKOO
+IIPAC
IIPrincesaII
+II_Blanx_II
IIamaman
IIflemishII
IIlIIAS
@@ -10174,24 +21097,119 @@ IIlllllIIlIl
IIndy
IIrisviel
IIsaac
+IIx Link xII
+IJzer Bal
IJzermeneer
+IK Pegasi
+IKotol
+ILL M1ND
ILLUMINATIS
ILOVEUBRAT
+ILVI
ILike
+ILikeKorone
+ILizzy
+ILostMySock
ILostMyTalk
ILoveAstolfo
ILoveSeaFood
+ILoveYasmin
+IM Adept
+IM BLUE DA
+IM Bazlish
+IM Big N8
+IM Bjakke
+IM Bolle Ui
+IM Butchh
+IM CSI
+IM Cares
+IM Chaudoin
+IM Corita
+IM Dahak
+IM Damy
+IM Dislectyc
+IM Dodgypig
+IM Donactro
+IM Drone
+IM Dutch Dog
+IM EL Clawo
+IM Envy
+IM Erlandu
+IM GERRALD95
+IM Gekko
+IM Gokhan
+IM Guilty
+IM HEEM
+IM Hail
+IM Harnas
+IM Hulkeen
+IM Infested
+IM Jap1
+IM Jenskee
+IM Kat
+IM Knol
+IM Krona
+IM M U R P H
+IM M0A
IM Maccy
+IM MajorRat
+IM Maninja
+IM Musa
+IM Noddy
+IM Ong Gia
+IM PVM BRADY
+IM PapaBless
+IM Peach Man
+IM Pepekage
+IM Perp
+IM Phubz
+IM RICO_1
+IM Rampage
+IM Reiner
+IM Rome
+IM Ruinscape
+IM ST0NED
+IM Sebaa
+IM Soad
+IM Spooned
+IM Super AFK
+IM Tank OG
+IM ThiccSucc
+IM Tipz
+IM Toon
+IM Walnut
+IM Witt
+IM Zoot
+IM a pansy
+IM blazeit
+IM sanderve
+IM spen
IMAEATURASSS
IMAFKNNONCE2
+IMGOKU1
IMHankey
+IMHky
IMJeffG
+IMMezzo
+IMNagrom
+IMPERlO
IMPlayerjohn
+IMSOULSHADOW
IMSausjegeit
+IMSkrt
+IMWaldorf
IM_Queeffing
+IMa Planker
+IMakeUBegKid
+IMevil yoshi
IMissNieve
IMnotQ
+IMoIVoxide
IMsmits
+IN A FERRARI
+IN PRISON RN
+INCEL839273
+INCreate
INDICA
INFERNALMAX
INTERMEDlATE
@@ -10199,130 +21217,249 @@ INYOURTS
INeedABump
IOHBOY
IOnSpacezI
+IP6
IPkdYourBank
IPlayForPeso
+IPlayHigh
+IPonderosa
+IProGuthix
IPumpkin
IPunchKids
IQUICA
+IR Hardcore
IR0N
+IR0N BOND
IR0NMAN
+IR4Q
+IRL Femboy
IRON
+IRON BYRNS
+IRON DlOXlDE
+IRON NOT HOT
+IRONMAN ADO
IReallyLikeU
+IRework
IRidePipe
+IRoldy
IRowForUCD
+ISAPOOPS
+ISO PEE
ISOMAN12
+ISQQC
+ISTRA
+IScottGame
+ISjorsI
+ISmokeABit
ISoLaTIIon
+ISquirk
ISuperStarI
+ITIB
+ITIISERY
ITIOMME
ITIace
ITIaddy
ITIagicka
+ITIagicks
ITIajestic
ITIallen
ITIasKilleR
ITIassacre
+ITIatty
ITIerica
+ITIiko
ITIoj
+ITIoosh
ITIr
ITSPYRO
+ITV X
+IThe Beatles
+ITrimGlories
+ITurtlekunI
+IUR
IUntradeable
+IV Luke
+IV skin
+IVI V G
IVICMXCIII
IVIE0W
IVIacaroni
IVIaybe
+IVIeesa
+IVIeredith
IVIesprit
IVIetallica
IVIidget
IVIooN
+IVIowlzy
IVIugginz
+IVIush
IVIxtthew
+IVOXYGEN
+IW Lytheria
IW4M
+IWGP
+I_Eat_Ass04
+I_Inity
+I_Noodz_I
+I_make_noise
+Iacto
Iaculch
Iaffan
Iafs
+IaintHiding
+Iam Bald
IamAjewBoy
+IamBowser
IamBruun
IamCheesin
IamCrazyBoy
IamDuru
IamErect
+IamGossip
IamNSFW
+IamNotHodor
IamRichPutin
IamSneak
+IamThaLiquor
IamXerxes
+Iambadhaha
+Iamcruxer
Iamearth
Iaminsanemax
Iammooted
Iammtpjr
Iamstepbro
+Iamthestars
+IamthyPope
+Ian Beale
+Ian Rush
IanT
Ianalan
Ianbird
Ianeke
Ianeke4
Ianyaboii
+Ianz
+Iax 2000
+Ibanezx88
Ibanezx99
+Ibans Fe nix
IbansPheonix
Ibarbo
+Ibb
+Iberis
+Ibexleave
Iblushh
+Ibn
Ibrahimovic
+Ibugppl Jr
+Ibunaaru
Ibuprofen800
IcEyCuDa
Icanfixthat
+Icarius Fell
IcarusRS
+Icaruz
Icculus1
+Ice 9112
+Ice Barrage
+Ice Caves
+Ice Gengar
+Ice King
+Ice clap
+Ice giants
Ice in Vodka
+Ice5566
IceBarraging
IceCreamDog
IceDesert
+IceFoxZero
IceH
+IceIceChooky
IceNineKiIIs
+IcePrisonMe
IceSparro
Iceb
Icebeam
Iceburghomie
+Iced 0ut
IcedOutDrip
IcedScrabble
Icedeadmage
Icee
+Icefirezz
Icehound
Iceid
+Icejawa
Iceland
Iceleag
Iceliang530
+Icelight
+Icemonkeyz
+Icen
Icesoze
Icespeller
+Icetaylor
Icey
+Icey Lunaris
+Icey M
Iceyou90
Ichi
Ichi6an
+IchikaNagano
Iciclez
+Ico n
+IconPara
+Iconiic
Iconoclasmic
Icookpeople
Icoz
IctCat
+Icy Duck
+Icy Tires
IcyFear
IcyTowerr
Icyene
+Icyene Hero
Icyenicblood
Icyflowers
Icyx
+Id Tele Too
+Id Yak It
Idaho
IdahoTaters
IdcGoAway
Idea
+Ideaal
Ideekay
Idepredad0rI
Ididit33
Idk Why PvM
+Idle GE
+Idle Melvor
IdleWhale
+Idlibi
+Idna Supafly
+Idol Namib
Idont
Idontlikejad
+Idopk1
Iecysoda
+Ienjoisk8ing
+Iern
+If I Succeed
+Iffi
Iffyz
+Igge
+Iggy Ontario
Igloocold
+Igmere
Ignace
Ignent
+IgnisDraco22
+IgnobleSolid
+Igor Krutoy
+Igor Mang
IgorBogdanof
Igorr
Igot99failin
@@ -10332,87 +21469,261 @@ Ih8myRNG
Ihan
Ihana
Ihme
+Ihnigmakage
IiIy
+IidaEmilia
+Iilqtforeva
Iimel
IisRaDiO
Iisalmi
Iivomon
Ijoinedthis
Ijusheadshot
+Ijzer tekort
+Ik Geef Bon
+IkBenWeg
Ikastovizski
IkeJEI
Ikhela
Ikillu247
IkkeVincent
Ikkle
+Ikkle Hydra
+Ikkle v Pain
+IkkleHorvick
+Il
+Il MrBorn lI
IlIBooieIlI
IlIIIIlIIIlI
+IlIIlIllIlII
IlINard0IlI
IlRisklIlIlI
+Ileeze
Ilija
+Ill Ko You
+Ill Effect
Illbeyourcat
+Illegal Char
Illest Logic
+IllestEver
+Illinoisan
+Illithid69
+Illlenium
Illumee
+Illuminatorr
IlluminumRS
+Illusionist
+Illusivezz
+Illustration
+Illuzory
Illwil
+Illyrian
+Illyrian TSX
+Ilmer
+Ilotalo
Ilovethewar
IlpOG
Ilsaldur
Iltasanomat
Iluredyou
+Ilusm
+Iluvahrim
+Iluvitar Eru
IlyrianBlood
+Im 85 Slayr
+Im A Saint
+Im Am Die
+Im Ami
+Im Anabolic
+Im Annoyed
+Im Artur
+Im Ash
+Im Asking
+Im Aspergers
+Im BackUp
+Im Baguette
+Im Barlow
+Im Behemoth
+Im Benough
+Im Blastoise
+Im Bo Licht
+Im Brills
+Im Burnz
+Im CG
+Im Chal
Im Christian
+Im Courage
+Im Dino
+Im Dr Afk
+Im Easy Exp
+Im Elyk
+Im Excalibur
+Im Fabulous
+Im Fever
+Im Finnish
+Im From Jax
+Im Gainz
+Im Gippin
+Im Gutfor
+Im Hawkward
+Im Hersh
+Im Huck
+Im Hunta
+Im Hussain
+Im Iron
+Im Iron WTF
+Im Jags
+Im Jokers
+Im Jovian
+Im Just Ken
+Im Krazy
+Im Kyle Btw
+Im Legacy XD
+Im Los t
+Im Luis
+Im McGriddle
+Im Missle
+Im Moist 4 U
+Im Moore
+Im Mr Josh
+Im Nate
+Im Nathan x
+Im Newschool
+Im Nice
+Im Not Okayy
+Im Not lron
+Im Nzmitch
+Im Off Chops
+Im On A Yak
+Im On Point
+Im Only
+Im Orc
Im Outt
+Im Pogi
+Im Qwerty
+Im Ron BTW
+Im Rus
+Im Savage
+Im Scoob
+Im Secor
+Im Shambles
+Im Single AF
+Im Smexy
+Im Snake A
+Im So Vayne
+Im Songs
+Im Spirit
+Im Stig
+Im Symb
+Im Tainted
+Im Tame
+Im Temppay
+Im Terrible5
+Im TheBeast
Im Tibbz
+Im Travis
+Im Triz
+Im Tyl3rr
+Im Whey
+Im Ya Papa
+Im Your Babe
+Im Your Dad
+Im Yui
+Im Zac
+Im Ze 0wner
+Im alex btw
+Im just Cody
+Im not FBI
Im relapsing
+Im tall af
+Im wokeup
+Im-Crowess
+Im2good4u2nv
Im45defence
+Im4everlucky
ImALilPigBoy
ImASthhnake
ImAdam
ImAl0ne
+ImAn Ironman
+ImBaldFromRS
+ImBobbyrayj
+ImBoredOfRS
ImCharky
+ImChuckBass
+ImClueless
ImCravenTim
ImDaPlugLLC
ImDaved
ImDaviie
+ImDirtyyyDan
+ImDoctaWhom
+ImEmilyy
+ImEric
ImFinnish
ImFlizz
ImGodd
+ImGodly
ImHavingFun
+ImHellaHigh
ImHighASFSry
+ImHisBae
ImIncredible
+ImInfested
ImIntense
+ImJames
ImJebbe
+ImJinxed
+ImJordon
ImJustLonely
+ImJustRaging
+ImKnotSimple
ImLarge
ImLeeuwarden
ImLikeRlyBad
+ImLukesGIM
ImMAdBro
+ImMajesticAf
ImMaxy
ImMilky
ImNewbie
+ImNoobK
ImNooblit
ImNotAfriend
ImNotHumble
+ImNotLost
ImNotThien
ImPaul
+ImPaulAlt
ImQuorra
ImRyboy
ImSane
ImShreksDad
ImSixteen
+ImSnoop
+ImSoGodlyy
ImSoVulgar
+ImStormmm
ImTaegan
ImTayla
ImTinyRiick
ImTipsy
ImToFrosty
+ImTooGucci
+ImTwisted
+ImVanilla
+ImWargasm
ImWilbur
ImYourDadBTW
ImZe
ImZorp
Im_Stone126
+Ima Guy
+Ima Lil High
+Ima Maleman
+Ima lron man
ImaCraftHor
+ImaMainbtw
Imack
Imafore
Images
@@ -10420,17 +21731,33 @@ Imaginable
Imagine
Imakuni0
Imalooter
+Iman103
+Imangry20
+Imanity
+Imanubnoob
+Imar Pussay
Imasecretspy
Imasin
Imawizardm8
Imazamox
Imblim
+Imblim Area
+Imbrochavel
+Imbue
+Imbued Haert
+Imbuing
Imbune
ImeshuggahI
Imgrazy
+Imhellgracio
Imidril
+ImiteBurDADY
+Imitus
+Imm Mad Bro
Imma
ImmaSkill
+Immaturity
+Immediate W
Immense
Immer
Immerseus
@@ -10439,60 +21766,126 @@ Immortal
Immortal91
ImmortalK12
ImmortanMike
+Immxnse
Immys
+Imnotahuman
+ImoChase
+Imoinu
+Imotay
ImpactPewPew
+Impale Her
Impared
Impeccable
Impedance
+Impede
Imperdoavel
+Imperfecto
Imperfekt
ImperialQc
+Impietyy
Impish
+Impish Ace
Impishhh
+Imposter Jon
Impriznd
Improv
+Improved
+Impulsive Au
Impurest678
+Imql
+Imre
Imsain
Imsokwtie
+Imstratss
+ImtheAnimal
+ImtheCARRYv2
Imthick
Imtoob
+Imuhbeast
+Imuripieru
Imus
+ImxricK
+In Game Life
+In Menu Andy
+In My Shadow
+In Recovery
+In Seconds
+In2cept
InCyson
+InDaCouch666
InDespair
+InFemous
InGameLies
+InTawlerable
InThe90s
+InTolu
+InTransition
+InXanee
+InYaShower
Inaaya
+Inactive Acc
+Inar
+Inavi Jones
Inbow
Inbred
Incapacitory
+Incendia Vir
+Inch95
+Incin3rat3 X
+Inco-san
+Incoherent
+Incomes
IncomingBeef
IncomingGank
IncredblDino
+Incumbency
Indain
IndawrCrwdad
Indcsn
+Indecisive
+IndecisiveO
+Indemise
+IndexNull
Indian
+Indian Chad
IndianCat
+IndianaJones
Indicates
Indicator
IndieGarri
Indigo640
+Indivi2you
+Indoktrinera
+IndominusAsh
+Indoor Scape
+IndoorsOnly
Indoorsman
Indrado
Indrias1
+Indy Ju
+Inecstatic
Inedibles
IneedPVM
+Ineff icient
Inefishient
+IneptEwok
+InfIuenced
Infaam
+InfallibleX2
InfamousAB
InfamousEvil
InfamousMain
+Infantiel
Infase
Infectus
+InferiorRNG
InfernOwl
Infernadev
Infernal
+InfernalChef
+InfernalLuke
InfernalPRO
+Infernax
Inferneo
Inferno
InfernoTism
@@ -10501,18 +21894,23 @@ Infero
Infesmati
Infin1te
Infinate
+Infininth
InfinitiGX
InfinityMan
Infirme
Inflnite
Influx
Info
+Info Kiosk
Infobese
Infor
+Infora Treat
Ingeb
+Ingenious G
Ingeniously
Inglane
Ingleburn
+Inhaled
Inhinyero
InhumanBTW
Inimene1020
@@ -10522,38 +21920,68 @@ Iniys
Inkedsaint
Inko
Inksane95
+Inkwes
Inner
+Inner Brian
+Inner Peace
InnerBliss
Innvision
+Inori xdd
+Inosuke xo
Inqku
Inri
Insafi
Insane
+Insane Iron
InsaneBobbie
InsaneFruit
InsaneIee
InsanePerson
+Insaneglutes
+Insanewolfy
Insaniack
InsanityNix
+Insanityx
Insanityzz
+Insatiate
+Inse
+Insectkoala
InsertGold
Insluiper
+Insomnia
Insomnist
+Insomnity
Inspection
+Insta
+Insta Spec
+Instabox
+Instagrem
Instail
Instinct
Instro
+Instruct
Insucc
+Insulter
Insulting
+Insulting MF
+Insurgence
Insurgent
Int0mieli
Integration
+Intel6
+IntelManiac
+Intellectual
+Intendi
IntenseRage
Intensifyyy
Intentional
Intercept0r
+Interchange
+Intermk
Internal
+Internal Max
Interracial
+Interronator
Intherial
Intier
Intimate
@@ -10563,154 +21991,542 @@ IntoInfinite
Intoner
Intresant
Intresenting
+Ints
Intubator
Intuition
Inubashiri
+Inukal
+Inuouk
+Inur
InvTagsBad
Inva
Invalar
Invercargill
+Inversives
Invert
+InvertedDuck
Inveterate
+Invierno
Invisa
+Invisa Scav
+Invisa-Veng
Invisioners
Invokers
Involk
Invoryy
+Inwu
Inxo
+Io Jah Pul
+IoB Sylarke
+Iock
+Ion Benny
Ion870
IonCannon
Ionia
Iono
+Iou689
Iowa146
IowaCJ
Ioyal
+Ioyins
IpeeInTheSea
Ipod5412
+IpotYouDrop
Ippe
+Ipswich
+Ipswich FC
+Ir JWWillem
+Ir Phys
Ir0n
+Ir0n Bot
+Ir0n b00k
Ir0nMammoth
+Ir0nMish
+Ir0nPuma
Ir0nRagnarok
IrDA
Iralimir
+Irha
Irid
Irie
IrieLuDa
Irinichina
+Iris Elea
Iris_1904
Irish
Irithe
+Irl Baller
Irmak
Irobar
+Iroff SGDaht
+Iroflman
+Iroh Bison
Iroha
+Iroic
+Irom Typo
Iron
+Iron 0lm
+Iron 2DWaifu
+Iron 2b
+Iron 3 Hit
+Iron ABC
+Iron Achael
+Iron Aeolian
Iron Alabama
+Iron Alee
+Iron Aloha
+Iron Aloodum
+Iron Alpha
+Iron Anaerob
+Iron Anno
+Iron Anonymo
+Iron Antzz
+Iron Areolas
+Iron Arnoud
+Iron Arzka
+Iron Assface
+Iron Ayen
+Iron Azshara
+Iron B O D Y
+Iron B0yx
+Iron BDN
+Iron BLK
+Iron Bart
+Iron Baskan
+Iron Bawlsak
+Iron Bawsss
Iron Beabs
+Iron Beeto
+Iron Besu
+Iron Bezem
+Iron Bibi2u
+Iron Biddys
+Iron Bloke
+Iron Bogmac
+Iron Book
+Iron Boomz
+Iron Booxia
+Iron Borrrby
+Iron Brevik
Iron Brinnie
+Iron BryconC
+Iron Buchu
+Iron Buckc
+Iron Bucket
+Iron Bumko
+Iron Burrata
+Iron Buuh
+Iron Byld
+Iron Caddy
+Iron Calquat
+Iron Carly
+Iron Carmine
+Iron Carna
+Iron Cerv
+Iron Cevol
+Iron Chaw
+Iron Chemic
+Iron Chkn
+Iron Cholby
Iron Chombre
+Iron Chrisss
+Iron Coby
+Iron Coin
+Iron Coronao
+Iron D Luffy
+Iron D Natsu
+Iron D Zeref
+Iron DJG
+Iron DSC
+Iron DVS
+Iron Daniel
+Iron Deku
+Iron Denal
+Iron Deroq
+Iron Destr0i
+Iron Dipshit
+Iron Dixi
+Iron Domi
+Iron Dumontx
+Iron Dylnn
+Iron E
+Iron E s s
+Iron E z
+Iron Eagah
Iron Elyon
+Iron Equity
+Iron Excal
+Iron Exed
+Iron FFrenzy
+Iron Fe
+Iron Ferro
+Iron Filthy
+Iron Fioxxu
+Iron Fire 75
+Iron Floor
+Iron Forgy
Iron Franchi
+Iron Frodo
+Iron Fuhrers
+Iron G Zeus
Iron G0liath
+Iron Gaan
+Iron Gamerz
+Iron Gayness
Iron Ghosgar
+Iron Ginto
Iron Gios
+Iron Go
+Iron Godley
+Iron Godly
+Iron Golem
+Iron Goth GF
+Iron Greg
+Iron Grind20
Iron Griss
+Iron Haze
+Iron Hoiy
+Iron Holub
+Iron Hookkan
+Iron Hossi
Iron Hroth
Iron Hugge
+Iron Husky
+Iron Hydros
+Iron Hyger
+Iron IPvMI
+Iron Insaneo
+Iron Jakob
+Iron Jal-Nib
+Iron Jeref
+Iron Jeroen
+Iron JimmyJ
+Iron Jizzman
+Iron Jss
+Iron K3
Iron Kalde
+Iron Kaleef
+Iron Kapkeik
+Iron Karjala
+Iron Katniss
+Iron Kayn
+Iron Keagan
+Iron Kess
+Iron Kiwii
Iron Kngs
+Iron Knipp
+Iron Kodie
+Iron Koopsy
+Iron Kornie
+Iron Krijn
+Iron Krikke
Iron Laplace
+Iron Laxor
+Iron Layfe
+Iron Letski
+Iron Liber
+Iron Lose
+Iron Lungsta
Iron MTUT
+Iron Mamma
+Iron Mammal
Iron Mapes
+Iron Marie26
+Iron Marlon
+Iron Martin
+Iron Masori
Iron Masuli
+Iron Matt
+Iron Matt NZ
+Iron Matty W
+Iron Matuba
+Iron Maxvoid
+Iron Mellem
Iron Meydon
+Iron Miguel
+Iron Mikebor
+Iron Milan
+Iron Mimal
+Iron Miro
+Iron Moardus
+Iron Mossyy
+Iron Munted
+Iron Mystip
+Iron Nap
Iron Nellz
+Iron Nick
+Iron Nimmi
+Iron Nobody
+Iron Noe
+Iron Nuclide
+Iron Nuuby
+Iron O Brien
+Iron Oak
+Iron Oboi
Iron Ohboy
+Iron Ohgodno
+Iron Ohzone
+Iron Opto
+Iron Ores
+Iron Pandis
+Iron Parkour
+Iron Patches
Iron Peg
+Iron Pge
+Iron Phe
+Iron Plague
+Iron Pothead
+Iron Praxis
+Iron Pwn
+Iron Pwnstar
+Iron RNGsus
+Iron Rakey
+Iron Randall
+Iron Randyy
+Iron Reedzy
+Iron Rekkr
Iron Request
Iron Rikyu
+Iron Rind
+Iron Roach
+Iron Robsham
+Iron Roof
+Iron Rushy
+Iron Rybread
+Iron Ryuuga
+Iron S t i g
+Iron SSJ
+Iron Sagga
+Iron Samiria
+Iron Santus
Iron Scolew
+Iron Scran
Iron Seagz
+Iron Seha
+Iron Shaikh
+Iron Shavers
+Iron Sheik
+Iron Shnapi
+Iron Siem
+Iron Sioux
+Iron Skoptsy
+Iron Skroten
+Iron Skydive
+Iron Slash
+Iron Slaya83
+Iron Sloth 2
+Iron Smoke94
+Iron Snypah
+Iron Sparco
+Iron Splat
+Iron Stannrs
Iron SteveB
+Iron Stomp
+Iron Stronq
+Iron Stw
+Iron Sullo
+Iron Susu
+Iron Svampe
+Iron Swaffle
+Iron Swag
+Iron Takumi
+Iron Tango
+Iron Tanzim
+Iron Tbar
+Iron Terboo
+Iron Teun
+Iron Thi3ves
+Iron Tiffers
+Iron Tigr
+Iron Tigran
Iron Tinman
+Iron TomT0m
+Iron Tonkin
Iron Tonski
+Iron Tonymaa
+Iron Torfi
+Iron Toxxic
+Iron Trashua
+Iron Trixx
+Iron Tudder
Iron Tutnin
+Iron Tweeker
+Iron Tyrans
+Iron Tyrant
+Iron UIM
Iron Uakti
+Iron Unam
+Iron Varuna
+Iron Vatti
+Iron Venema
Iron Vexzed
+Iron VickD
Iron W1nk
+Iron Weather
+Iron Wespula
+Iron Wii
+Iron WindJr
+Iron Woofy
+Iron Wu5
+Iron XIIIV
+Iron Xellana
+Iron Xire
+Iron YEE
+Iron Yangus
+Iron Z4ppie
+Iron Zephyx
+Iron Zeraph
+Iron Zerg
Iron Zilong
+Iron Zinoto
+Iron Zoha
+Iron Zol
+Iron Zrysen
Iron Zul Mox
+Iron anrowi
+Iron d0gz
+Iron da ddy
+Iron dols
+Iron dry
+Iron feens
+Iron flynn
+Iron instead
+Iron kitcat
Iron l2asta
+Iron ona Mac
+Iron pappal
+Iron werty
+Iron whiff
+Iron wiper
+Iron x wolf
Iron xyN
+Iron-Ximena
Iron10203
Iron2Pickaxe
+Iron619
IronAgentP
IronAjandre1
+IronAkleiss
IronAlblad
IronAlufolie
IronAngst
IronAnnaMay
IronApples
+IronAsbe
+IronAssHole
IronAussieM8
+IronAxe
+IronBadAtPvm
IronBankFull
IronBeanz
+IronBeerad
IronBiGuyBtw
+IronBistchul
IronBobbyjoe
+IronBoink
IronBosse
IronBound
IronBrad
+IronBrand21
IronBrick
+IronBruBrah
IronBuriedNU
IronBurnsRed
+IronC1aws
+IronCagedRat
+IronCemile
+IronChillii
IronChirpOTK
+IronChompers
IronChrisKin
IronClarkey
IronCoX
IronComedy
IronCooter
IronCozza
+IronCraiger
+IronDab 710
IronDakotas
+IronDandaman
IronDavid
IronDeadBoy
+IronDefiant
+IronDeredas
+IronDethaele
+IronDodo420
IronDog777
IronDong
+IronDravekD
+IronDringus
+IronDtrex
+IronDubble
IronDubzy
IronDudde
+IronDunceCap
+IronDurrrrr
IronEagles
IronEkakerta
+IronEso
+IronEtch
IronFefe
+IronFigment
IronForFunnn
IronForged99
+IronForyn
+IronFrenzey
IronFrogMan
IronFungi
IronGalihand
+IronGatr44
+IronGear CEO
IronGez
IronGodsword
+IronGoliathX
IronGoneNorm
IronGow
+IronGuh
IronHammy
+IronHasta
IronHomer
IronIDKFA
+IronInsano
+IronIogibear
IronIsNoJoke
IronJValor
IronJakeT
+IronJames
IronJamesG
IronJarod
+IronJeffZ
+IronJenga
+IronJezz
IronJoint
+IronJosehiha
+IronJosephxo
IronJuji
IronKaboom
IronKaiser
IronKapp
+IronKayodee
+IronKest
+IronKingdoms
IronKukk
IronKyloman
+IronLadBtw
IronLadel
IronLaffin
IronLankzey
+IronLazure
IronLegend
+IronLegocy
IronLepaus
IronLifting
+IronLionMAIN
IronLucas
IronLuckPlz
IronMadePure
+IronMagick
+IronMainOx
IronMan
IronManBow
IronManJar
@@ -10718,17 +22534,26 @@ IronManSux
IronMango
IronMarius
IronMarty
+IronMason
+IronMathwin
IronMatty
+IronMayne
IronMetknot
+IronMikado
IronMinion
+IronMitchKun
+IronMollusk
IronMountain
IronMugz
+IronMushy
IronNWord
IronNachos
+IronNantt1
IronNateDogg
IronNazguls
IronNexuss
IronNeya
+IronNibletz
IronNihilm
IronNinja13
IronNord
@@ -10737,11 +22562,19 @@ IronOdum
IronOldBoy
IronOnPatch
IronOrca
+IronOreAgate
IronOsiriss
IronOxideMan
+IronOxidizer
+IronPangtar
+IronParis
+IronPeteMan
IronPills
IronPrice
+IronPrickles
+IronProf
IronPumitaz
+IronQben
IronQli
IronQueen
IronRait
@@ -10754,83 +22587,168 @@ IronSantaMan
IronSchmieds
IronShadow5
IronSikruz
+IronSkaro
IronSly
IronSmurfff
+IronSparrow
IronSpiderZ
+IronSpitfire
IronSplats
IronSpoNeD
IronSpoony
IronSpray
IronSquidly
+IronSteve-O
+IronStronky
+IronSurf
+IronSylar
+IronSystolic
+IronTarnum
+IronTasseron
IronTau
+IronTedBundi
+IronTeste
+IronTestedRB
+IronTimTim
IronToff
+IronTulio
+IronTyson
IronUnkilled
IronVegtable
+IronVib3s
IronVikinng
IronVikzo
+IronVinda
+IronViolette
IronW3LEGEND
IronWafflee
IronWallnut
+IronWantsRNG
IronWayneker
+IronWidovv
IronWush
+IronYoerik
+IronYugo
IronZettrox
IronZong
+Iron_ProDabs
Iron_Slippy
Iron_Sukulo
+Ironarcanic
+Ironatica
+Ironator
Ironblood7
Ironboba9993
+Ironbobsaget
Ironborn
+Ironborn PVM
Ironbutcher
+Ironclad Sac
Ironed
+IronedSwift
+IronendJr
Ironeyy
Ironflox
Ironfur
+Irongrazvis
+Irongusty
+Ironiam Vir
Ironic
+Ironic Force
+Ironic Kill
+Ironic Name
IronicBenson
IronicSwag93
+IronicViking
Ironicer
+Ironiical
+Ironija
+Ironik 20
IroningB0red
IroningSucks
+IronishSana
Ironkaka
Ironmacman
+Ironmale
Ironman
+Ironman Daff
+Ironman Jase
Ironman Jowe
+Ironman Wit
Ironman idk
IronmanFookz
+IronmanHutch
Ironmanerno
Ironmeme
+Ironmeme Cx
+Ironmeme Lol
+Ironmies
Ironmimmi
+Ironmorriz23
Ironn
+Ironn Yoshii
+Ironnesses
Ironpasta1
+Ironqa
Ironred33
+Ironriwer
+Irons suck
+Ironshore
Ironsoul2
Ironstone
+Irontownhero
+Ironwind747
Ironwinter
Ironwork4eva
IronxElite
Irony
+Irony Nib
Ironylion
+Ironyx
+Ironzi
Ironzilla
+Irrelevant
Irrumated
+Iru
+Irulon
+Irxn
Irxnized
+Is E_wen
+Is Idle
+Is Slikker
+Is a bich
+Is this you
IsAlexOk
+IsButters
+IsChazCool
+IsDomIsGood
+IsYaBoyDoive
Isaac
+Isaki Magari
Isbjorn
Isganytojas
+Ishigo1992
+IshmaelDonny
+Ishrandom
Ishzn
+IsidoroM
Iskemia
Iskolar
Iskon
Iskra
Islaal
+Islami
Islefalls
Isleview
+IsmackfaceI
Ismelitooo
Ismo54
IsoG
+IsoKitty
IsoP
Isoga
Isoleucine
+Isootoonik
Isoptox
Isosami
IsraVM
@@ -10838,51 +22756,141 @@ Israels
IssaEly
IssaStiffler
Issard
+Ist M
Istanbulite
+Istasher
Istaxit
+Isvig
+It Slaps
+It is Rex
+ItBeJacK
ItBurns
ItIsWedsDude
+ItPol
ItWasntMe007
Itaky
Ital
Italian
+Italian roxx
ItalianAJ
+Itaochi
+Itchweedy
+Itcoto
+Iteyx
Ithero
Ithlinee
+Itik
+Itinkinou
+Its Absol
+Its Almog
+Its Arj
+Its B0B
+Its Brother
+Its Canadian
+Its Conrad
+Its Da J00z
+Its Dally
+Its Dyl
+Its Hash
+Its Jon btw
+Its Jst Skin
+Its Kaylee
+Its Libo
Its Me Dave
+Its Me Q
+Its Me Suns
+Its Misha
+Its Nipo
+Its Peter
+Its Rigged
+Its Sebas
+Its Sense
+Its Seth
+Its Smooth
+Its Teddy
+Its Wolfie
+Its Yama
+Its Zammy
+Its a Shame
+Its claw
+Its me Josh
+Its me eden
+Its rob
+ItsAboutTime
+ItsAirdog
ItsAllOgreM8
ItsAnobrain
+ItsBarcus
ItsBigNasty
ItsBlitzyy
+ItsBrtnyBch
+ItsBru
ItsClout
ItsDende
+ItsDynasty
ItsFinn
ItsFlooo
+ItsHoggle
ItsHosef
+ItsInThePast
+ItsKenshi
+ItsLitttFam
+ItsMarc
ItsMeBlaze
ItsMeDog
ItsMev
+ItsMrSir2u
ItsNiels
ItsOleGreg
ItsOwenM8
+ItsRainor
+ItsSirTech
+ItsSkells
+ItsSyn1k
+ItsTaylen
ItsTerpsWrld
+ItsUnruly
+ItsWeinstein
ItsWicked
Its_A45c
Its_Fonte
+ItsaTommyGun
+Itse rauta
+Itsemurha
Itsmeborrid
+ItsoktoGIM
Itsssjustice
+Itsy Bitsy
Itupakointi
+Itx
+ItxJustin
+Itz Haydn1
+Itz Hickton
+Itz Kodiak
+Itz Nate
+Itz Scrubz
+ItzAtlass
ItzElise
+ItzJroc
+ItzKat
ItzLogikal
ItzMrNick
+Itzla
Itzvenom
+Itzzz B
+Iuc
Iuckk
Iulz
+Iussy
Iustrous
Iuxio
IvIegaDan
+IvIr Wize
Ivain
Ivaink
+Ivalice XIV
+Ivan Knjklj
+IvanEOD
IvanMullet
Ivanckonia
Ivanka
@@ -10890,167 +22898,448 @@ Ivansaccount
IvelJet
Iveljetorox
Ivoos
+Ivory Tower
Ivryk
+Iwanbro
IxHunt3rxI
+IxVenom
Ixala
IxonnoxI
+Ixyc
+Iz0p
+Izaa
+Izac
+Izanani
Izbec
+Izhmash
+Izi Claps
Izone_Kev
Izuria
Izvorul
Izzy
+IzzyBigBoy
Izzyboy300
+J 0 S H Y
+J 0 S H l
+J 4 6
+J 4 K E
+J 6
+J A B S
+J A I D A N
+J A M A L
+J A N K I
+J A U N U S
+J A W D
+J Breezi
+J C Trousers
+J D
+J D Ballew
+J Dahmer
+J E E V E 5
+J E T
+J F
+J Fred Run
+J I M M
+J I MM Y
+J Kole
+J Kribzz
+J L A
+J MF B
+J Neat
+J O E G
+J O L T I K
+J O T A
+J O3Y
+J R O C
+J R V
+J Rat Cow
J S 2 M
+J S Z M
+J Saints
+J Suave
+J U S T A S
+J U Z
+J a c k a l
+J a c k son
+J a c k y
+J a mie
+J a n i
+J ackal
+J al
+J ameper
+J anii
+J appie
+J asnah
+J ason
+J asyra
+J ayson
+J bellfortt
+J bird shady
+J e sse
+J eff
+J effy
+J ensen
+J esse
+J essica
+J imme
+J imy
+J imz
+J ipr
+J lMM Y
+J o b e
+J o e
+J o ey
+J o f
+J o s h y
+J oep
+J ohannes
+J ointz
+J oke R
+J or G
+J oshh
+J oshhh
+J osie
+J u wu
+J ung
+J unko
+J utch
+J uun
+J uwu
+J x B
+J yy
+J-2tha-R-O-C
+J-Man 93
+J-Turn
+J-Yeezy
J001_jf1
+J0DYY
+J0E
+J0E REAL
+J0EEY
+J0NE
J0UF
+J0YBOY LUFFY
J0YRYDE
J0dz
J0hnnyQ
J0ng
J0ngeBV
J0ppy
+J0rdanDv
J0rdo117
J0se
+J0se Dtown
+J0se Dtuwnn
J0seph
+J0shh
+J1MB0H
+J1NBE
J1ub
J2TR
J2caine45
J2ck
+J328
+J3Ciron
+J3JU
J3S5E
J3rkkuHD
J41AL
J45e0wns
J4QS
+J4S
J4gga
J4my
+J95
+JAABASNABBA
JACK3DJOHNNY
+JACKYOUNG93
+JAG0705
+JAI MA KALI
+JAMA Open
+JAUH0JENGI
+JAVON 9-INCH
JAYJ51
+JAYR0CKBABY
JAlDYN
+JB 2K
+JB87
JBGard
JBrody
JBuck057
JBux
+JC-1989
+JCS07
JCole
JCon
JCutler
+JD MD
+JD4
JDBass
JDEP
JDFlaSh
JDJM
JDez
JDlion
+JDredd66
+JDuck
+JE B
+JEEZE
JENNY
+JENNY DEATH
+JERN SVIN TO
JETSNBEERS
+JF Kennedy
+JFB
+JFCK
+JFK gone AFK
JFKautopilot
+JFL
JField
+JFrog
JFryGuy
+JGIRONTG
JGIV
JGlen97
JH3305
+JH91xx
+JHINitalia
+JIGGYWIGGY
JIIVEE94
+JJ-M
JJ23
+JJAAKKO
+JJBW
+JJPowers
JJROCKETS
JJRicky
+JJS BBQ
+JJSM_Dulker
JJchris66
+JJoe
+JJumalwelho
+JK Rowling
JKMi
JKTimbo
+JKUR ON 40S
+JKeM
JKingJ777
JKrollin
JKuyaa
+JLG
JLowe
+JLsone
+JMI NG
+JMTaipei
JMack
JMiddd
+JOBBO
JOCKO00O0O0O
+JOE EROTIC
+JOKER 709
+JON3ZYY94
+JORlCK
+JORlS
+JP Kotsnek
+JP17
+JPB at Large
+JPI
+JPS Daytona
JPant1ess
JPantless
+JPatness
JPence
JPountney
+JPudz
JR05E
+JR0D
+JRBeast
+JRC Crypto
+JROGU
JRxs
+JS Xpress
+JSL34
JSLatvala
+JSPACER
+JS_Terminal
JSco
+JShep23
+JSilvester08
+JSlice94
JSplash
JStepho
+JT5
+JTAG
+JTCS
+JTI ain
JTIAIC
JTM33
JTscape
JUGIB
+JUIBE
+JUICEWRLD9 9
+JULlAN
JUST
+JUST A HlPPO
+JUST Nikk
JUSTICE
JWRLD
+JXJ
+JZB
JZX1O0
+Ja k ey
+Ja m e s
+Ja mes A
+Ja se
+Ja sn
JaBouris
JaDig
JaStraater
+Ja_Fireking
+Jaaaakkoooo
Jaac
JaackGP
+Jaager Jack
+Jaagmu
+Jaahee
Jaakako
Jaalva
Jaamm
Jaant0
+Jaapievecht
+Jaay G
JaayC
JabHook
+JabbaU
JabbasHut
+Jabbaw0cky
+Jaber
+Jabesol
+Jabiborinoni
+JablezGIM
+Jablooze
+Jabo b
Jabopanda
Jabroni
Jabroniii
+Jabrs
+Jabuz
+Jac o b
Jacckk
+Jace C
+Jacerhapsody
Jacey
Jacinto
Jack
+Jack Dyer
+Jack Htoo
+Jack Hughes
+Jack Mac
+Jack Maz
+Jack Par-O
Jack Reipan
Jack1
+Jack12Broke
+JackBadasson
+JackBass4
+JackBlade
+JackDanielsH
+JackHammr
+JackKnight
+JackKvorkian
JackMayte
JackOscar
JackRod
+Jack_Herer9
Jacka
JackandCoke
Jackass
+Jackass Sean
+Jackazzz1
+Jackblaze
+Jackbtw
Jacke
+Jacked
Jackie
+Jackingten
Jackisbanana
JacknHookers
+Jacko Bei
JackoPogU
Jackoo
Jackos
Jackoz
Jacks
+Jacks0n
Jackson
+Jackspyrow
Jackyboiii
Jacob
+JacobGhosty
+JacobIsTaken
+JacobT789
+Jacobb
Jacobieus
Jacobro
Jacobs
+Jacobwins1
Jacupy
Jacy59
+Jad slides
JadMaister
Jada
Jadakiss
Jadavius
Jaddok
+Jaddy Chill
Jade
+JadedRapture
Jadeine
+JadenM
Jads
+JadsVag
Jaecob
JaegerBoom
+Jaeson
Jafacakeman
Jafanto
+JafarTooHigh
+Jaffa Jake
Jaffar
+Jaffywaffy
+Jafsx
Jagdpanther
JagerBombski
+JagerIron
Jagermeister
Jagged
+Jaggen
+Jaghatai K
+Jagoodiii
+Jah toch
JahIthBer
Jahaerhys
+Jahaok
+Jaharred
Jahbby
JahgexPlzzz
+Jahmay
Jahmerica
+Jahngles
+JaiSiaRamJai
Jaiden184
Jailbreak455
+Jaime 427
Jaimeebear
+Jak Maximus
JakMetalHead
Jaka On Can
Jake
+Jake C
+Jake D Snake
+Jake Muzzin
+Jake OC
+Jake Scapes
+Jake Solo
JakeState68
JakeSteFarm
Jakedajackal
@@ -11062,64 +23351,127 @@ JakesSolo
Jakesonville
JaketheSnake
Jakey
+Jakey C
Jakeyosaurus
+Jakeyz
+Jaknop
Jakrem
Jakrojan
+Jakuli226
+Jal-Nib-Jmal
JalNib
Jalduii
+Jaleesa
+Jales
+Jalim Rabei
Jalite
Jaljif
Jalla
Jalo
Jaloenow
+Jalordom
Jalou
+Jalzas
+Jam Flex
+JamBandDad
+Jamaikietis
JamalBobaman
+Jamango
+Jamania64
+Jamar
+Jamaul Jr
Jambaica
Jamblaster
+Jambreak
+Jamburano
+Jamchu
Jameo
James
+James 6000x
+James Comey
+James Kakadu
+James Kelp
+James Poncho
+James PvE
+James Rolfe
+James c
+James osrs
+James1087
James2709
James9
+James945848
+James9520
JamesBondss
JamesCUFC
JamesDaWizar
JamesHaliday
JamesJ2019
JamesLango
+JamesMaynard
+JamesNI
JamesPratt94
JamesShotGG
+James_22
Jamesay
Jamesbombom
Jamesrb1
Jamess
Jamesy
JamiBear
+Jamiboy
Jamie
+Jamie Tacos
+Jamie W
+JamieJams
JamieOliver
JamieXV
+Jamilan
+Jaminnnn
Jamixa
+Jamjac
Jamlicking
Jammie
+Jammmy
+Jammoose
+Jammy Dogger
+Jammy Scone
Jamn
Jamosbondos
Jamppa
Jampy
+Jampyre
Jamuli
+Jamurazi
+Jamwa
Jamyroo531
Jamzylockz
Jamzz
+Jan
+Jan Griffith
+Jan en Karel
+Jan100000
JanHenkD
JanVanLeiden
+JanXtian
+Jananas3
Janar
+Jancentp
Jandaer
+Jandhob
Jandie5
Jane
Janer
Janes
+Janes Bond
+Jango Style2
+Jango fet310
+Jangsta23
Janice
Janikowski
+Janissary90
Jank
Jankk
+Jankko
Janksky
JannaMain73
Jannanas
@@ -11130,81 +23482,171 @@ Jansky
Jansz101
Jante
Jantex
+JantheBear
Jaooa
Japanese
+Japhur
Japiohh
+Japles1
Japoolie
Jappieee
+Jappieness
Jappo
+Jaqen
+Jaqquu
+Jar Of Pets
+Jar Uh Dirt
+Jar of Pukes
+Jar of Swamp
+Jar ofc um
Jar3y
JarOfCookies
+JarOfH0les
JarOfSmORC
Jarab
+Jare d
JareZki
Jared1234
Jareds134
JarlCantBank
JarlEarlKing
+JarlVaarg
Jarnemelk
+Jarnie Dimon
+JarnoMirma
Jarnte
Jarra
+Jarre
Jarredn
+Jarreelll
Jarskie
Jarsse
Jaru
Jarvis
Jarx
+Jas Melody
Jasberg
+Jaseel
Jasey
+Jasey Rae
+Jashin
Jasinador
+Jaskanpaska
Jason
+Jason In Max
+Jason73
JasonJ
+JasonLRG
+JasonRises
+JasonSkillz
+JasonT20015
+JasonVorheez
+Jasonn
+Jasonnn
Jasperw90
Jaspi
+Jasthew
+JasuzChrist
Jasyre
+Jauneri
Jaunius
+Jav
Jave
+Javert
+Javier Pwns
+Javve
Javvymuis
+Jaw
+Jawaloso
+Jawgasm
+Jawmac
+Jawniz
Jawntista
+Jawor
Jaws
+Jaws 2 75
+Jawshy
+Jax Evasion
+Jax Teller
+JaximusIV
+Jaxy22
+Jay Ayy Why
+Jay Baby
+Jay Exotic
+Jay Hughes
+Jay M
+Jay RZ
+Jay Show
+Jay Sparks69
+Jay United
+Jay b1zzle
+Jay kell
Jay024
+Jay357
JayDaddy313
JayEngineer
JayFlow
+JayJee
+JayKay Okay
JayLunar
JayManzarek
JayMaster
+JayMe x
JayMuthaFknC
JayPortal
JayRu7
JayTheBurnt
+JayTheRunner
+Jaybiz
Jayden
Jayders
+Jaydey
Jaydia
+Jaydo x
+Jaydonn
Jaydos
+Jayeden
Jayhawk225
+Jayhawkers
Jayi
JayjayNeo01
Jayksie
Jayman
+Jaymeh Lee
+Jaymo123
Jaymyson
+JaysATank
+Jayshuunn
+Jayspoks
+Jayster
Jaytea
Jayteaf
Jaytee1262
Jaywub
Jayy
+Jayy Slays
+Jayy x
Jayzar
+Jaz Coleman
Jazo
Jazpurs
Jazz
JazzFlap
JazzMaster09
+Jazzeh
Jazzjr89
+Jazzly
Jazzy
JazzyFlips
+Jb Godranger
+Jba123
+Jbevzzz
Jblieves88
+Jbob72
+Jbt
Jbvff
Jc_TheCops
+Jcb4646
Jcdelavici
Jchn
Jcmalone23
@@ -11213,223 +23655,454 @@ Jcourt1
Jdaws
Jdidy
Jdoggy2018
+Jdp3
+Je nny
+Je pppe
+JeBoyHiddema
+JeIlo
+JeIly Man
JeJoat
+JeK0
Jean
+Jean belette
+Jean man
Jeangaboudle
+Jeankeh
Jeari
+Jeavoni
+Jebaited825
Jebiii
Jebrim
Jebroid
Jebroni
+Jecht Shot
Jecob
+JedMosley
Jedah
JedaiKnight
Jedi
+Jedi Drue
Jeebiez
Jeebz
+Jeefro
+Jeek
Jeemis
Jeep
Jeesuhs
Jeet
Jeeve
Jeez
+Jeez Christ
+Jef fy
JefFamous
Jeff
+Jeff Aero
+Jeff C
+Jeff pls go
+Jeff says
+Jeff the Cat
+JeffEHPstein
+JeffG
JeffMusk
JeffWiki
Jeffermus
+Jeffica
Jeffie381
Jeffmyster5
Jeffre
+Jeffrey Z
JeffreyFNV
+Jeffreypoe
Jeffro
Jeffy
+Jeffy xD
JeffyTheDahm
+Jeffzuaos
+JefriEpstin
Jefry
+Jeft
Jefy
Jeggesen
+Jeguelson
Jehdin
+Jehobo
Jehtty
+Jeikeorb
Jeimi
JeisBtw
Jejex
+Jekd
Jekquesting
+Jelbishi
Jelbringer
+Jelen
+Jelenner
Jelior
Jella
Jelle
+Jelle Bouma
Jellie40
Jellisme_99
+Jellitots
+Jellough
Jelluh
Jelly
+Jelly Bears
+Jelly Booty
+Jelly Dub
+Jelly Sucks
JellyBeanRs
JellyGenix
+Jellydonuts
Jellyfishes
+Jelziin
+Jelzini
+Jemades
Jemelope
+Jemile
+Jen na
Jen0va
JenaTulwarts
Jenessa
+JenfoxxSub
+Jenicek
Jeniuss
+Jenkiins
Jenla
+Jenna Taylia
+JennaHeather
Jennacydal
JenniTolls
+Jennie
Jennn
Jenny
JennyElina
+Jensen641
JensenRS
Jenskee
+Jenten
+Jeometri
Jepp89
+Jeppe
Jeppeonkurre
Jeppie
+Jepppe
Jepppu
Jepuzeka
Jepz
+JerBearGrizz
+JerBearOmfg
Jerak
Jerayou
+Jerbelle
+Jerbil
Jerec
Jereh24
Jeremiahlewi
Jeremy
+Jeremy 2007
+Jeremy Ray
+Jergs
Jeri
+Jerm
+Jermothy
+Jerms Pro
+Jern Jan
Jern Tarzan
Jerne
Jernladden
+Jernlund
Jernpung
+Jero
+Jeroen 31
Jerom21
+Jerrbear69
Jerre26
Jerrin
+Jerrwie
Jerry
+Jerry Alan
+Jerry Maine
JerryChinger
JerryMina
+Jerryy
Jers
+Jers Knot
Jersh
+Jershawerr
Jersion
+Jertz
Jeru
+Jerunox
Jerusalenm
Jerziii
Jerzy
+Jes2x
+Jeseeka
+Jesh g
+Jesh-mar
JeshusChrist
+Jesiah
Jesk
+Jesliq
+Jesper Bratt
+Jesper135
+Jesperyo
Jess
Jesse
+Jesse Top
Jesseq
Jessica
Jessie
+Jessie Jones
Jesspresso
Jessy
+JessyTrip
+JessycaOSRS
+Jester Head
+Jesterbubba
Jesus
+Jesus I love
+Jesus MPhys
+Jesus Saved
JesusComing
JesusRedeems
+Jet Jaguar8D
Jet3010
JetFlame
Jeththe
+Jetlag
Jetma
Jetridder11
+Jetski
Jetsmoke
+Jettiesimp
Jettrider
+Jeugd
Jev21
Jevel
+JewFroBro
Jewbaaca
Jewbakah
Jewbang
+JewishRob
Jewy
+Jexlad
Jexlo
Jeyos
+Jeyzuz
Jezeus
Jezkoz
Jezuux
JezzaripHD
Jezzie
+Jezzx
+Jf-n03
Jfleeze
+Jfrith
+Jfuzzy
Jglove
+Jgus88
Jgy1889
+Jhackal
+Jhb
Jhebs
Jhny
+Jhonlovin
+Jhoocy
+Jhoocy Moot
JhormanCovid
JhosS
+Jhow
+Ji bs
+Ji m m
+Jia Lissa
Jian
+Jiara
Jibajaba
Jibberflexed
+Jibbllyy
+JibinSui
+Jibneh
JibrilMaster
+Jiffee
+Jig Bugs
+Jiga Chad
+Jiggalagg
JiggerJoe
+Jiggity
Jigglyboy
Jigglywoo
+Jiggypufff
+Jignite
+Jigoogly
+Jih
+Jihe
+Jihne
+JiiU
+Jiiko
+Jiim Lahey
+Jiiraiiya
JikdarShark
Jikkurr
Jiklim
+Jill Hyde
+Jille Man
+Jim
+Jim Sauce
+Jim Shorts
Jim0k
+Jim2k1
Jim38iron
JimAdler
JimTheGing
Jimb0bMaster
+JimballSlice
+Jimbeamtndew
Jimbi
Jimbly
+Jimbo Sween
JimboJamzAF
JimboQuan
+JimboSlice21
Jimbob3005
Jimbogun
Jimboi
+Jimbub
JimcakeKong
+Jimdawgy
Jimi
Jiminuatron
+Jiminy49
+Jimm
JimmahDean
Jimmerik
Jimmi
+Jimmi Lipper
+Jimmmm
Jimmy
+Jimmy Jumper
+Jimmy Plays
+Jimmy Scimmy
+Jimmy Wooo
+Jimmy1408
+Jimmy3rdBase
+JimmyBullard
JimmyBuns
+JimmyCarter
+JimmyGrimble
+JimmyStubble
JimmyValmer7
+Jimmybe
+Jimmygk
+Jimmylovecox
+Jimmynyge
Jimmyo
Jimosine
Jimpertje
Jimpiix
+Jims Goon
+Jims Ironing
Jimsterjim
+Jimver
Jin Oh
+Jin R n G
JinDoritos
+JinJ0 nJuice
+Jinb
+JingleBiloba
+Jingy
Jinimy
+Jinjaman
Jinkers
Jinko
+Jinkys
+JinnyChatBot
+Jinpa
+Jinsinny
Jinte
+Jinxed Jake
+Jinzo Doku
+Jinzo Jinzo
JioGetsMoney
Jion
+Jions Alt
+Jipser
+Jipske
Jiqonix
+Jiqura
+Jiraiya
+Jiraiyeah
+Jirakh
Jiren
Jirka
Jirou Kyouka
+Jisska
Jitaxia
Jithra
+JiveChompy
Jixoxx
Jixr
+Jixx0x
+Jiyool
+Jizt
+Jj Dynomite
+Jj Jerk2
Jjar127
Jjjjjj210
Jjozzie
+Jk Esq
Jkdogg
Jkhby
+Jkl Kalja
Jkolrur
+Jkrexx
Jku45
+Jl-SOO
+JlGA
JlLLY
JlMMB0
JlZZB0SS
Jlarge
Jlova
Jmagelssen
+Jman021
Jmar
Jmaster402
Jmbryn
Jmca
+Jmca Savage
Jmen
Jmies
Jmjake
Jmonelite
Jmudford44
+Jmz
Jnas
+JnrSeneca
+Jnsthenx
+Jnup
Jnwp
+Jo Pain
+Jo de Coeckh
+Jo h 2
+Jo iron
+Jo rd an
+Jo shua
+Jo we
Jo0l
+Jo3 H
Jo3p
Jo5p
+Jo6p
Jo711
+JoE ShMoee
JoEiSaFiShEr
+JoJi
JoJo
+JoJo Skriver
JoJo79
+JoJoJoUrBoat
JoKerRtheGOD
JoMoe
JoRouss
@@ -11437,84 +24110,168 @@ JoWie
JoXuh
Joacco
Joao
+Joao EV
+Joao Paulo
Jobac
Jobann
Jobard93
Jobber
+Jobbes
Jobbits
+JobbySkelper
+Jobbydrinker
Jobbyqq
Jobless
Jockward
Jocqui
Jodenzaad
+JodioJoestar
Jodon
+Joe 7
+Joe Kronic
+Joe Lol
+Joe Mangina
+Joe Mclaren
+Joe Muggs
+Joe Potato
+Joe Schwa
+Joe TheBeard
Joe56543
Joe56780
+JoeBidens Bf
+JoeEldenring
JoeFoe
JoeGas
+JoeInglesGod
+JoeJunk
+JoeMothers
+JoeStudd
JoeTheGod
JoeWoody
+Joebie
Joebobinator
Joecuster
+Joedaschmoe
+Joee P
+Joeholding
+Joekle
Joel
+Joel 9444
+Joel In Pain
+Joel Lobster
JoelBtw
+Joelemz
Joell
+Joenage
+Joenly
Joered40
+Joeri
Joes
Joeshmo
Joestar
Joey
+Joey Diaz
+Joey Mobile
+Joey RS
+Joey069
JoeyDabs
+JoeyGatto
+JoeyP
+JoeySlays
+Joey_1993
+Joeyboy
+JoeyboySucks
+Joeychh
Joeydarebel
Joeyer5
Joeyfernando
Joeyjoe600
+Jofa
Joferr
Joffa
+JoffreyLupul
Joggaplanten
Johan
+Johan Cruyff
Johanbtw
+JohannesN
JohannesRRL
Joherk
John
+John Bilos
+John C
+John Cena
+John China
+John D4rk
+John Ironman
+John Mayer
+John McCain
+John Mugwump
John Muir
+John Paul
+John Penn
+John Sal
JohnChaptr15
JohnDaBoss
JohnGilespie
JohnNoyes
+JohnRambo43
JohnWLennon
JohnWick39
+John_Wick007
+Johnathan
Johnbovi
JohndemenBTW
Johnletics
+Johnmcdodger
Johnny
+Johnny Chinn
+Johnny Dinh
+Johnny Lyu
JohnnyBeanz
JohnnyChimpo
JohnnyHart
+JohnnyLoco
JohnnyMellow
+JohnnyQuest
JohnnySXC
Johnnypants
+Johnnys
+Johno381982
JohnoMate
Johns
+Johns bad ma
+Johnsons
+Johnsters4
Johny
+Johny Aus
JohnyLocoo
Johnyy
Johuab
Johzyn
Joizz
Jojis
+Jojj
Jojkan
+Jojo Rabbit
Jojora
Jojy
+Jok
Jokar
Joke
+Joke xD
+Jokelanopein
Joker
JokerzDice
Jokinq
+Jokkepappa
JokuHeppu
+JokuVaan
Jokurul
Jole
JolliJolli
+Jollyfarms
+Jolonerz
Jolteon
Jolting
Joltism
@@ -11523,100 +24280,198 @@ Jombsy
Jomer
Jommann
Jomoba
+Jomppaa
Jomppei
+Jon
+Jon Eusebius
+Jon Meades
+Jon Snow
+Jon ny
+Jon10
JonHDgamer
+JonMarston
JonOn
JonVV
+Jonadwyn
+Jonahams808
Jonahcart
Jonanism
Jonas
Jonas9115
+JonasLietuva
+Jonas_Butte
Jonasbroh
+Jonassau
+Jonatan Jo
+JonathanRoid
+Jonaz
+Jonbaron
Jonboy
+Joncc
Jondog
JoneNikula
+JoneZii
+Jonesing
Jonessy
+JonesyBadger
+Jonetsa
Jonezey3
Jongo
Joni
+Jonibo
+Jonie D
JonisBaisus
JonisSniegas
Jonjo12knees
Jonko
+Jonko lover
Jonn
+Jonnay
+Jonne r
Jonnems
Jonnisan
Jonnisjoen
+Jonno1789
Jonny
+JonnyBiggles
JonnyBoii
+JonnyL2020
+JonnyLots
+JonnyM
Jonnybak
Jonnybowler8
Jonnysniper
Jonsamma
+Jonsed
+Jontzzz
Jonxsy
Jony
Jonzza
+Joo Potato
+JooOvenPizza
Jooe
+JoojoThePk8r
JoonSoo
Joonas
Joonayoyo
Jooni
Joontah
+Jooogijuuu
+Jooohnny
+Joop Mgoon
Joopaul
Joose3
+Jooshica
+Joosst
+Joostvd17
+Jooxan
Jophatmama
Joptvajiumat
+Jor dinh
+Jor dy
+JorVa Osj
Jord
+Jord 0_o
+Jord Croft
+Jord idk
+Jord xD
+Jord y
+Jord z
JordHarris
+Jord_96
+Jordan 1
+Jordan 7218
+Jordan KY
Jordan030592
+Jordan07
Jordan1063
Jordaneee
+Jordanite
+Jordans
Jordany5b
Jordavitch
Jorden
JordenFCB
+Jordinee
Jordnn
+Jordo Am
JordyM
JordyMcSheep
+Jordynn
+Jordysteen
Jordz_King
+Jore
Jorenator
+Jorgeme
+Jorgos
+Joricki
+JorkinMyWorm
Jorkkelis
Jorlund
+Jornaleiro
JoroEdde
Jorsne
Jorster
Jorttis
Jorzki
+Jos Bezos
+Jos de Mutn
Josavi
JoseLargeD
+JosefStaIin
+Joseluis1
+Joselyn Leo
Josen
Joseph
+Joseph Sam2
Josh
+Josh 2277
+Josh Jones
Josh Tsutola
+Josh x
+Josh013
Josh2Godly
JoshD
+JoshDagainz
JoshGymnast
JoshMarksman
+JoshYewAhh
+Joshalog
+Joshan
Joshery
Joshh
+Joshhhh
Joshii
Joshimitzu
Joshism
+Joshjoshin
Joshmaster31
+Joshpaul
Joshua
Joshuaaaah
JoshyCii
+Josiah Higha
Josiahs
Josoust
+Joss
+Josse
+Jostavo
+Josti O_o
Jostle
Josue
Josukes
Josylvio
+Jota_420
Jote
+Jothha
Jotjemenotje
+Jotq
+Jottini
Jotunheimar
+Jotwe
Joueur4376
Joulaha
+Jovial
Jovilius
JovyGaming
Jowah
@@ -11624,43 +24479,86 @@ Jowalll
JowatBTW
Jowel
Jowitt
+JoyOfSatan
Joycey1997
+Joynzz
+Joystick
+Joyun II
Joz6
+Jozi Blue
Jozu
+Jpan1
+Jpellican
+Jpq
+Jqwss
Jr Metro
+Jr Muffin
+Jr Stigel
Jr2k13
Jrabbat
Jrby
+Jrdn
Jreppks
+Jrey
Jroanirr
Jrodjok
Jrogo
+JsJays
JsN4
Jsag
+Jsi7111
Jsnn
Jsony
+Jspot
+Jsq
Jstnn
+Jstrife9
+Jthrust
Jtownironman
+Ju mala
+JuGgLe BuG
+JuJuzzz
+Juan Dangle
+JuanTalon
+Juandissimo
+Juaneria
+Juanreliable
Jubaah
+Jubarte
JubbaTheHut
Jubilations
Jubita
Jublian
+Jubster
+Jubtus
Jubu
+Jubz
Judah
+Judas wept
Judddy
Jude
+Judge
+JudgeDredd
+Judgewalker
Judie
Judies
Judlmin
JudoChop
+Juduel
+Judus
Judybats
+Juedons
Juezz90
Juffo
+Jug001
+JugMilk
+Juga JR
Jugalator
+Juganog
Jugernought
Juggalo09R
Juggerthot
+Jugimaster
JuhQ
Juheniqus
Juhhu
@@ -11672,22 +24570,52 @@ Juhve94
JuiBoi
Juib
Juice
+Juice W RL D
+Juice WRLD
+JuiceRock
JuiceUSA
+Juiceb0x44
+Juiceful
+Juicewayne
+Juicieee
+Juicing
Juicy
+Juicy BIG
+Juicy Jorma
+Juicy Lil D
+Juicy Pair
+Juicy XPs
+JuicyBigNut
+JuicyJesusFE
+JuicyJocelyn
+JuicyJones
+JuicyLap
JuicyTear
+JuicyTigr
+JuicyWetNut
+Juicy_Newfie
JuiicyAF
Juikki
Juint
+Juipp_Iron
Juisy
+Juk e
+JukeLess
Jukebot
Juked
+JukeduM
Juko
Juktes
+Jul es
Jules
+Julesbak
Julia
JuliaFlorida
JulieFromHR
+Julieekins
Julien
+Julio Cesar
+JuliusHotdog
Julley
Julma
JulmaJoe
@@ -11695,42 +24623,93 @@ Julmarsson
Julpa
Jumal
Jumanji
+Jumbalia420
Jumbo
+Jumbo Joe
+Jumpcut
JumpingBean
+Juncker
June
+June bug
Junexo
JungJulius
Jungkook
Jungle
+Jungle Georg
+Jungle Jepa
+Jungle Jim
+Jungle Wreck
Jungle175
JungleKitty
+JunglinTunes
+Juniortank25
Junk168
Junmai
+Junsimu
Juntti463
+Juo
Juoda
+Juoppis
JuostenKustu
Jup1Ko1r4
+Juppi
Juqqernaut
Juranja
Jurassix
+Jurble
Juri
+Juri M
+Jurikka
+Jurisdiction
Jurky
Jurmalainen
+Jurrie
Jurtaani
JuryRigging
+JusAmain101
JusCauz
+JusDoMe
+JusPourVous
Jusfat
+JussJoshinYa
Jussi
Just
Just Alright
+Just Alt F4
+Just BeingMe
+Just Bones
+Just Bryce
+Just Champ3
+Just Creepin
+Just Dank
+Just De-Iron
+Just Jacob
+Just Keith
+Just Kurt
+Just Logan
+Just Malone
+Just Milton
+Just Mitch
+Just Neptune
+Just Reacher
+Just Treason
+Just a Dilf
+Just a main
+Just aFacade
+Just for Fun
Just1n Sane
Just3lis444
JustAAPotato
+JustADowny
+JustAFroggy
JustBob
JustChillins
JustDevon
+JustDrew
JustFollow
JustGoInDry
+JustIan
+JustJS
JustJake
JustKidStuff
JustLucky
@@ -11739,14 +24718,25 @@ JustPeachy
JustPertti
JustRenne
JustRoW
+JustSarge
JustSinful
+JustTaxLand
+JustTheFool
JustTheTip
+JustToast
+JustTrynaMax
+JustVibeWMe
+JustVinny
+Justa Wake
JustaStar
Justass
+Justice v1
JusticeSven
+Justicemoose
Justiciaro
Justified
Justin
+Justin NT
JustinBieber
JustinFromVA
Justinkai
@@ -11755,66 +24745,178 @@ Justins007
Justlfied
Justnexuss
Justo80
+Justorr
+Justryin
+Justyfi
+Justyn
Jusus
Jutendouji
+Jutku
+Jutkunmetku
+Jutter
+Jutti
+Jutty Ruckus
JuuNinJi
Juugmasta
Juul
+Juulxodia
+Juun Solo
Juuna
+Juunaz2chips
Juustis
+Juuzo
Juvi
Juvian
+Juzzy
+Jvzy
Jwad
+Jwcsg
+Jwd
Jwett
+Jwu
JxJxV
JxcelD
+Jxck
Jxcx
Jxdidiah
Jxdooo
+Jxhnn
Jxke
+Jxmeson
Jxnas
Jxni
+Jxstxn
+Jxxst
JxyStorm
+Jy
Jybais
Jyeronese
Jygers
+Jyhlln
Jyhy
+Jype
Jyppedi1992
Jysk
Jyura
+Jyy
Jyypy
JyzzBrah
+Jz
+Jzbeta
+K 1 L L A
+K 1 P
+K AMI
+K B D autism
+K E K E B
+K E L A
+K E T CHUM
+K E V 0_O
+K Hades
+K K Boef
+K NW
+K O L L I
+K O M P I S
+K OOOOOOOOOO
+K P N
+K P Sweet
+K Smalls
+K W
+K W A L A
+K Y Y
+K a l e w i
+K a z a
+K aarel
+K ayyla
+K eller
+K elvin
+K en
+K etaminer
+K ev
+K iNG IRON
+K idd
+K ilo
+K im
+K l 9
+K l N G S
+K nauss
+K nut
+K o j o
+K o o s a
+K ohen
+K orruptt
+K ree
+K rs
+K t r n e
+K una
+K ushi
+K uz
+K voth e
+K y u m a
+K yogre
K-Diddy
K-epan
+K-market
+K0
+K0 4
K00LBR33ZE
+K0F
K0L0S
K0NING
+K0USE
K0bus
+K0edinator
+K0ju Balius
K0lbi
K0ndemned
K0rky
+K0rnuit
K0tleciokas
K0veras
K0zor
+K19
+K1ERZ
K1LLY
K1ddl3
K1ller5169
K1ng
+K1ngo
+K1ngshredder
+K1r1t0123
+K2 Jung
+K32
+K38
K3KSE
+K3U S2
K3azkoks
K3fka
+K3kt
K3mi
K3nn3d
K44K
K4IF20
K8iee
+K99 2
+K9Father
K9lenny
+K9rk
+KA97
KABBABEAST
KAKAGUATE0
KAKERANDELIN
KAL-JML
KAMlX
+KAT alyzt
+KB1988
+KBARAKAT
+KBX0
+KC Chiefz
+KC M0
+KC8
+KCRB
+KChiefn
KDOG1419
+KDOT_OSRS
+KDark22
KDrizzy
KEEPOUNDING
KEEPTHATSHIT
@@ -11822,73 +24924,164 @@ KEEZY10
KEIF
KEKDUBYA
KEKLERO
+KENTUCKYBLUE
+KEllis
KFBal
+KFC CAMDEN
+KFC EMPL0YEE
+KFC OG
KFCatz
+KFChompy
+KGBK
KGCine
+KGP
KGee
+KGoldy
KHADER
KIIIIIIIIIIH
+KILLER COMBO
KILO
KIMB0
KING
+KING GAYWAD
+KING VILO
KING332
+KINGNERON
+KINGstayMAX
KINGxGIZZARD
KINNTO
KIPPER
+KIVI 420
+KIWI Stu
+KIitor IS
+KJ 2
+KJ6
KJLS
+KKayK
+KKela
KKona
+KKona USA
KKrazyAl
+KKronas
KKurtiz
KL93
+KLB
+KLS
+KM 30
+KMW
+KN0G
KNIKERSNIFFA
+KO CANE
+KOK enjoyer
KOKAOKAA
+KONMAI
+KOS OVO
KOlRA
KQSS
+KR Zangetsu
+KR0VALI
+KRN
+KRON1C 420
+KRYMK
+KRYPTONlAN
+KRlT
KRonHusker
KS04rs1
+KSP
+KSaucee
+KT Ferrie
+KT Tape
KU51
+KUAY
KUAYx
KURD1STAN
+KVM8
KVRPT
+KXNG Razing
+KXNGVEGETA
K_sak
+Ka0s50
+Ka92
+KaChiuSa
KaIOKENRAGE
KaMi
KaMi_RnG
KaTFeniX
Kaan
+Kaan Frog
+Kaarel55555
+Kaaris95
+Kaarv
+Kaasbaap
+Kaasboom
Kaasmantel
+Kaaswater
+Kaaz Channel
+Kabatlor
+Kachhow
Kacinova
Kacy
Kacyy
+KadHead
Kadabara
Kadan
Kadarlu
+Kadett Opel
Kadeyr1
Kadocc
+KaeBtw
Kaelin
Kaempen
Kaepls
+Kaer
+Kaesar
KafHaYaAinSa
+Kafaei
Kaffah
+Kafficko
Kage Boshi
+Kahdoom
+Kahis
+Kahlx
+Kahto
Kahuna
+Kahur111
Kahvikuppi
+Kahvimaa
+Kahvo
Kahwoozy
+Kai ri
+KaiHos19
KaiXin
Kaibaman
+Kaif
Kaihn
+Kaiirl
+Kaila
Kails
Kaimanll3kav
Kaimorten
Kainahuulio
Kaine
+Kaioken x420
KaiokenRyan
Kaion
Kaiser
+KaiserBruno
KaiserRS
Kaister
+Kaitaia
KaitoSun
Kaiven
+Kaizen Reign
+Kaizen Soji
+KaizennxX
+Kaizloh
+Kaizooka
+Kajbanan
+Kajgils Far
+Kakariiiiick
+Kakarrot
Kake
Kaker
Kakerandeli
@@ -11897,84 +25090,144 @@ Kakoji
Kakor
Kaksitoista
Kaku
+Kaku bakudan
Kakua
+Kakuri
+Kal9000
Kalakoi
+Kalas
Kalash556
Kalashnikova
Kalavothe
+Kalb
Kale
+Kale Henk
+Kale vader
+KaleKikker92
+KaleRS
+Kaley Cuoco
KaleyFan
Kalezki
Kalfite
+Kali Maaaa
+Kali Roses
Kaliaa
Kalico Cat
Kalideos
Kalihi
Kalikow
+Kalima
Kalis
Kaliumoxide
Kallateral
Kalle
+Kalle Anka
Kalleee
Kalmaars
Kaloex
+KalopsiaSix
+Kaloua
Kaltsu
Kalu1337
Kalub
+Kalvaaja
Kalveo
Kalystas
+Kam
+Kam Lok Lam
Kamal63
+Kamchi
Kamelinpiaru
Kamelovsky
+Kamelze
Kamen
+Kami_no_majo
Kamiel
+Kamii Dad
+Kamijou
Kamikazi
Kamino
+Kamino Kage
+Kammorie
Kamp
Kampest
Kamphuijs
Kanagawa
Kanao
Kanapius
+Kanapizza
+Kanbu
Kandarin
Kandeeh
+Kandid GG
Kandonesys
+KandrakarsNX
Kane
+Kane 7687
+Kaneelkameel
KanekiKun
Kaneohe
Kangru
Kangst3r
Kani
+Kaninka
Kanned
KannonBalker
Kannski
+Kansas
+Kansas Bill
+Kansas State
Kanseim
Kansi
+Kansloos
Kant
+Kantinejuf
Kantoo
Kantrimees
Kanttis
+Kanuk
Kanye
+Kanyeetzy
+Kanzeigan
Kaolo
+Kaolo Spoon
+KaozerMauser
+Kapaa
Kapakala
KapeVing
Kaphu
+Kapiling
+Kapitalisti
Kapitein
Kapiten
Kapkeik
+Kapkkha
Kaporkchop
+Kapot
+Kapot Slecht
+Kappa 73
+Kappa monkaS
+Kappa xD
+KappaZilla
+Kappala
+Kappalism
Kapsaluun
+Kapsones
+KaptainPurp
Kaptainkilla
Kaptains
KapteinK
Kapten
+Kaptn skev
KarQ
Karaboudjan
Karaf
Karagoz
Karamjob
Karans
+KarateKon
KarazySS4
+Karc
KareemPie1
Kareir
Karekano
@@ -11982,73 +25235,118 @@ Karen
KarenMaskin
Karethaeis
Kargas
+Karhu48
+Karhuboiii
Karhulohi81
Kari
+KariJuice
Karies
+KariimsPik
KarilSummer
Karils
Karim4lol
Karkanii
Karkotaseet
+Karkov
Karl
+Karl The SUV
+Karl1s
KarlS282
Karlee
+Karliah
Karlit
Karlology
+KarlosBro
Karlteine
Karma
KarmaRush
Karmaa
Karmadyl
+Karmafox
Karmah
Karmas
+KarnMother1
Karnivore
Karnyx
Karolik
+Karolus6
+KarpyCarpe
+Karrak7
KarsanHAM
+Karsk kopp
Karskeinmies
Karso
+Karsta Anne
Kartelrand
+Kartoesh
Kartoma
Karukas0
+Karumba
Karumi
Karuu
+KarvaBanaani
Karvajarru
KarvaneMees
Karvatatti
+Karwos
+Kasane
+Kasdeya x
Kasei
+Kaseii 1
Kasejas
+Kasen
Kaser
Kashak
+Kasihan Gua
+Kasoku Tesla
Kasp
+Kasperjus
Kasprzak1
Kaspuhh
Kasraa
+Kass Glimmer
Kassipotku
Kassu
+Kassu C
Kasuel
Kasugano
Kasvikko
Kat1nr
+KatBeatitude
Katagon
Kataphatic
Kate
+Kate Bush
KateTiffany
Katenkos
Katetuotto
Katfishh
Katiensam
+Katikene
Katikene0
+Katinas
+Katiopeia
+Katlink5
+KatnissGray
+Katraenia
+Katrielle
Katski
Katsuo666
+Katt 90
KattNiP
Kattarui
+Kattnakken5
Kattnis
+Katze btw
Katzes
+Kauhee Hiki
Kaukeneris
+Kauldron
Kaunas
+Kaunas_Rulz
Kaunopihlaja
Kautschuk
+Kavz
KawaBonga
Kawactus
Kawaii
@@ -12057,35 +25355,61 @@ Kawaiisaki
Kawakuboku
Kawkaw
Kawked
+Kawtik
+Kay D
KayJ
KayWhyPee
+Kayazy
Kayback
+Kaybizzle
Kayden
+Kayden Boy
Kayen
Kayla
+Kayla Swift
+Kaylidascope
Kaylizz
Kaylon
Kayluh
+Kayns Main
KayranFootly
+Kayso
Kaytok
+KayyPlz
Kayzielol
+Kayzo
Kazatan1245
Kazave
Kazaz
+Kazcade95
Kazching
Kaze8HerOut
+Kazify
+Kazuma Moon
+Kazunni
Kazuuhiro
+Kc Collector
Kcnny
Kdash
+Kdaw
Kdens
+Kdragons
+Ke bajo
+Ke era
+Ke nt
KeB4NG
KeRah
Keabler
+KeanuCat
Keasbey
Kebab
+Kebab Ari
+Kebab Store
KebabGuy93
KebabWrap
+Kebabov iron
Kebbabhallal
+Kebbby
Kebbe
Kebintotero
Kebs
@@ -12094,35 +25418,62 @@ Kedakaki
Kedirav
Keebler
Keef Supreme
+Keef_Man
Keegi100
+Keekar
Keekers
+Keel
Keela
Keelay
Keenar
+Keep Le Fe
+KeepCup
+KeepDistance
KeepItWicKeD
Keeper1OS
KeepitStoney
Keepo
KeepoKeisari
+KeepoNoIron
Keepomaster
Kees
KeesCanadees
+Keeslp09
+Keetgracht
+Keevon Man
Keff
+Kegaz
Kegern
+Kegs
+Kegse
+Keh O Brien
Kehaline1
+Kehno
Keiala
Keidy9
Keifay
Keikoh
Keinas18
Keiran
+Keiran Perch
+Keironn
Keisari
Keisarinna
+Keister Egg
Keit
KeithMcChief
Keithii
+Keittokuppi
Keizer
+Kekaha
+KekeLovesMe
+Kekkonen
+Kekkonen69
+Keksiviikko
+Kel Darsam
Kela
+Kela maksaa
+Kela-Olli
Kelagang
Kelb
Kelbikers
@@ -12133,11 +25484,14 @@ Kelgone
Kelh
Kellarivelho
Keller
+Kells o_o
Kelly
Kellycollin2
Kelohonka
Keloo
+Kelps
Kelso523
+Kelso561
Keltik
KeltonThaGod
Keltuzazz
@@ -12146,106 +25500,182 @@ Kelvin2GWW
Kelvino
Kelwus3
KempBush
+KempDaShrimp
+Kempisch
Kempset
+Kempy x
+Ken
+Ken Bolka
+Ken Griffey
+Ken Kill U
+Ken RS
+Ken Ten
+Ken141
KenBone
KenKaniffCT
+KenPerm
+Kendal x
Kendal68
Kendlang1
+Kendrick3691
Kenery
Kenesu
+Kenfernal
Kenleyy
Kenleyy_TM
Kenmaster
Kenn
+Kenn y
+Kenna
Kenndu
Kennedy
Kenny
+Kenny Deez
Kenny121
Kenny6397
+KennyKSD
+KennyS
KennyWhopper
Kennyollie
Kennypower5
Kennyyyyyyy
Kenozh
Kenpo
+Kensan-7
+Kenshiro
Kent
KentWasTaken
Kentacus
+Kentarokins
+Kentish Hops
Kentucky
Kenwood
+KenyanChild
Kenyann
+Kenze
+Keonii
+Keox
+Kep
Kephan
Keplunk
Keppi
+Keppi Einari
Kepra
Kepuck
+KerZam
Keraliix
+Keratin
Kerbeth
KerfDaddy
Keri
+Keric
Kerk
Kerkerino
Kermajorma
Kermit
+KermitTheRob
Kernalpotato
+Kernautist
Keromasev
+Kerrr
Kertar
Kerzara
+Kes Sittus
+Kesc
Kesekui
Kesohs
+Ket
+Ket Baggie
+Ket Schep
+Ket Uh Mean
KetaKnallt
+KetaYours
Ketabar
Ketanator
Ketch
Ketho
Ketnet
Ketonall
+Ketsah
Kettaz
Kettu
Kettyman
Ketwards
Keudel
Keunic
+Kev The Tonk
+Kevain69
Kevali
Kevb0t
Kevbro9
Kevichan
Kevin
+Kevin Booker
+Kevin Framed
+Kevin Nguyen
+Kevin5-0
+KevinDurant
+KevinLawrune
+KevinOSeven
KevinTes
+KevinTheGOAT
+Kevinspostal
Kevinw20
KevlarX
KevolutionX
+Kevsin2
Kevsin3
+Kevslays
+Kevstrong
Kevthebos
Kevva
+Kevve
+Kevzy
Kewl
Kewlaidman
Kewnsauce
+Kewwl
Kexkaka
+Key Concept
KeyNoir
Keyashes
Keydiss
+Keyfob
Keylock
+Keylord
Keyney
Keyoh
Keyori
+Keyose
Keywork
Keyzz
Kez0
Keza132
Kezmaya
+Keztra
+KezzerQ
Kezzerina
+Kgb Spy
+Kgsnipe
+Kha Zx
Khaant
Khabib
Khader
+Khajgold
Khal
+Khal Bow
Khaled
Khaleeeesi
Khaleesi1113
+Khalesar
Khalisee
Khamoshi
+Khan of Iron
+KhanhDung
+Khans Wrath
Khanzed
Khao
+Kharium94
Kharjo
Kharn
Kharos
@@ -12254,10 +25684,15 @@ KhatrickZain
Khayri Demon
Khazad
Khazad Dum
+Khazanedar
Khazu
+Khealim
Khest
+Khint
+Khirean
Khiru
Khleb
+KhooNBust
Khoosh
Khoppa
Khornebull
@@ -12265,16 +25700,31 @@ Khovansky
Khride
Khrollo
Khryptik
+Khrysus
Khufu
Khune
+Khunt Flapz
+Ki Adi Fundi
+Ki Arts
+Ki Stu GSK
+KiD BeeR
KiIIa4realz
KiLn
+KiSMET6
+Kia Jon
Kiarama
Kibb
+Kibeleza
Kibisai
+Kibito Kai
+Kibra
Kick
KickarseCale
+Kickback Dw
+Kickbums
Kicker
+Kickrolls
+Kid Inferno
Kid K O N G
KidClutch17
KidLeaderKTY
@@ -12282,237 +25732,482 @@ KidSativa
Kidalien
Kidchilly100
Kidd
+Kidlizard
KidneyBean
Kids
+Kids Bong
Kidtrilogy
Kidur
+Kie
Kiedis
+Kieftron
+Kiek um goan
+Kieken
+Kiekkoilija
+Kiera
Kiero
Kierzo
+Kiewit
+Kifooo
Kifsa
KiiDSKOLiO
+Kiinja
+Kiinnostaa
Kiirii
+Kiisu
Kiivi
Kiiwityty
Kiizoru
Kijucatm
+Kikikissa
Kikiniki2
+Kikkel
Kikkertje
Kikyo101
+Kil U
+KilIerDaddy
Kilamanjaro
+Kilbot0
Kiliann
Kill
+Kill Crazy10
+Kill Credit
+Kill the GE
KillConfirmd
KillSwitch26
Killa
+Killa Cam
+Killa Kamali
Killa213
KillaSilence
Killab0rtion
Killabrew
Killadelphia
+Killadeuce
Killamemsta
Killaowns
Killatonicus
Killed
+Killed Elmo
Killed145
+Killekalekoe
Killemall
Killer
+Killer Jr
+Killer Kurce
Killer7502
+Killer81093
+Killer9823
KillerFlix
KillerSlee
+KillerVibes
+Killerank202
Killercaster
Killerdog HC
Killerdustyn
Killerkotti
Killermatt
+Killeroh
Killers455
Killertribes
Killgor138
Killi
+KillianRS
Killing
KillinxLivin
Killjoy4fun
+Killjoyer2
Killmankind
+Killme5551
+Killmelol
Killnloot2
+Killoah
+Killsw1tched
Killswitch83
Killua
+KilluaSam
Killzone
+Kilminater
+Kilo Meter
+Kilodoreo
+Kilograms
KiluaZoldyk
+Kim
+Kim Chungha
+Kim Trails
+KimKallstrom
Kima
+Kima Ronso
Kimano
Kimbr0
Kimbu
+Kimex
+Kimi Hendrix
Kimoja
+Kimosabii
KimtonLe
Kina
Kinaesthetic
+Kinboat
Kind
Kinda
+Kinda Blue
+Kinda Sinful
KindaDerpy
Kindaddy
Kindom
Kindoou
Kindozsodln
+Kineettinen
+Kinetic
King
+King 0f Gout
+King Ankle
+King Aussie
+King AvonIV
+King Blob
+King Boned
+King Bud
+King Bugs
+King Chev
+King Dong
+King Dongo
+King Edolus
+King Elf
+King Elon
+King Emurxer
+King Flipsta
+King Frodon
+King Green 2
+King H0d0r
+King Ian
+King Junkie
+King Kabanos
+King Kenneth
+King Lexius
+King Mariin
+King Milky
+King Nino 1
+King No Fear
+King Noc
+King Paf
+King Rabbit
+King Rayman
+King Redeem
+King Rico
+King Runs
+King Ruonis
+King Seb
+King Seneca
+King Size V
+King Slime
+King Snowman
+King Spudz
+King Swine
+King Tsar
+King Westor
+King XRPL
+King Zaros
+King davey
+King of Imps
+King of PvM
+King0fHelll
King0fSkane
King1631
KingAcorn85
+KingAwowogay
KingBOO
KingBailey
KingBoo
+KingBuliwyf
+KingClark
KingCudii
+KingCurtis11
+KingDarkVII
KingDweebus
KingEider
KingFlugal
KingGoblin09
KingGrekus
KingGunshow
+KingHawk O_o
+KingInYellow
KingJacula
KingJelore
+KingJoey
+KingKahuna
KingKlick373
+KingKlye
KingKongKoen
+KingKong_Qc
KingLeonidas
KingMikeyD
KingMongo
KingMonk
KingMook
+KingNate1
KingNathanx
KingOfIron
+KingOfQuests
KingParcival
+KingPatVII
KingPlAnchor
+KingPractice
KingRobStark
KingRustyVII
KingSandCrab
+KingScribles
KingSizeD1CK
KingSoge
KingSpirel
+KingStyle
KingTheGreat
+KingTsjubbie
+KingValencio
KingYoshi
KingZac
KingZerka
+King_Kerran
Kingaroo
+Kingben
+Kingbuddy40
+Kingdom Rush
+KingdomBlade
Kingeri
Kingg
+Kinggg
+Kingism
Kingjake18
Kingmonkey23
Kingofhearts
Kingpfx2
Kingpin
+Kingpin Xp
Kingpk3r
+Kingrobster7
+Kingruler456
+Kings67
KingsBluue
+KingsGrace
Kingspadex42
Kingsta
+Kingsthor
KingstoAces
KingstonWall
+Kingsty
+Kingz Haki
+KingzWorld
Kinjello
Kink
+KinkerScaper
+Kinkers
Kinky
+Kinky Kenny
+Kinky Scr
Kinkybuns
Kinkytoast
Kinkyy
+Kinno
+Kinobles
Kinokird
+KinokoZoku
Kinp
+Kinsaic
Kintoki300
Kiopley2
Kiox
+Kipee Anneli
Kiplup
Kipnuggets
Kippenbro
+Kipsel
+Kiptandori
Kiqz
+Kiraci
Kiraga
Kiraly
+Kirara
+Kirbi Smart
Kirbngo
+Kirbsey
+Kirby
Kirby7670
+Kirchberg
+Kire1n
+Kiree
+Kiriel
Kirimah
Kirito
+Kirk4
+Kirk97
Kirkburton1
KirkyBeast
+Kirne
Kirrion
Kirry
Kirstin
Kirthor
+Kirumibe
Kiruzonu
+Kirx125
+Kirz
Kisa
+Kiseki
Kisizel
Kisle
+Kiso Valley
Kiss
+Kiss Kiss
+KissMeHomies
+KissOfFire
+KissOfFury
+Kissahomie69
Kissanpentu
Kissmyase111
Kist
+Kit Fistoo
+Kit10Kat
Kita
+Kitashan
+Kite Solo
Kiteman
+Kitfox IV
Kitsch
KitsiKitty
Kitsune
+Kitsune Kami
+Kitsune Ness
Kitsunemimi
Kitten
+Kittenz
Kitties
+Kittle Bits
+Kittoh
Kitty
+Kitty Perry
+Kitty v2
KittyMeow83
+Kittymouse 1
+Kittys Newb
Kiusatus
Kivespulla
+Kivick
Kiwa
Kiweh
Kiwi
+Kiwi Icons
+Kiwi Stona
+KiwiIskadda
KiwiMacJ
+KiwiSteve
+KiwiTheBot
Kiwiana
Kiwidude
Kiwiskurt
Kiwwion
+Kiyak
Kiyoko
+KizJ
Kizminsky
Kizone
+Kizz mo
Kizza
+Kj Kai
KjellEllen
+Kjellberg94
+Kjomo
Kjottfifaan
Kkobe
+Kkobugi
+Kkokkom
+Kkoppa
Kl2AZY
Kl3RAN
+KlDDO
KlLL
+KlLL 4 BONES
KlMI
+KlMpossible
KlND
KlNG
+KlNG MlKE
KlNGY
Klaar
+Klaarkomer
+Klaasie
Klacky
Klanezy
Klanks
+Klankss
Klapzak
+Klarence
Klariany
Klarna
Klaskdeng
+Klassic
+Klassified
Klatscher
+KlausLittle
+Klaussie
Klavan
+Klavelon
KlazBooy
Kleatus
Klebold
Kleened
Kleiades
+Kleine bolle
Klementtii
+KlemmDawg17
Klemonhaze
Klengie
+Kleo
+Klepdiezle03
+Klepp
Kleptic
Kletz
KlewKlew
KliKlack
+Kliewer
Kliffa
+Klik gebit
+Klikke
+Klingons
Klippzz
+Klo0
Kloefklapper
Klogin
Klonzyon
+Kloofiool
Kloorijoodik
+Kloot-Zuk
Kloover
KloreCore
+Klotho
+KlovneKrabbe
Klowdstr1fe
+Klub Dubx
Kluftritter
+Klumpy
Klumsie
Klunchkey
+KlungePlunge
Klunkii
+KlutzyKay
+Kluuntje
+Klvtz
+Klyd
Kmac
KmartWorker
+Kmd
+Kmie
+Kmk_Yawgmoth
+Kmorken
Kmtfwtm
+KnD xP
Knaap
Knabbelbaars
+Knabbernossi
Knacker
Knakenstein
Knaksaucage
@@ -12524,77 +26219,146 @@ Knaught
Kndd
Knead
Kneeeled
+Knewby8
KngBlkDrogon
+Knickers
+KnicksNati0n
Knife
+KnifeStory
Kniffes
Knight
+Knight Crip
+Knight Drake
+Knight Jo
+Knight Mors
+Knight of 3
Knight50
+Knight522
Knight5247
+KnightKettle
KnightMike
KnightO
+Knightcrawle
Knightenator
+Knightlock
+Knightmare
+KnightmareNL
Knightrainy
Knightromite
Kniili
Knikkerbal
Knivezii
+Knob End
+Knobin Hood
+Knod with Me
+Knoo
+Knospi
KnowMadss
KnowPurpose
Knowing
Knowledge
Known
+KnowsNoFear
Knoxville333
Knuckle
+Knuckles
+Knulle
Knummi
Knurrbauch
KnusCaboose
Knusseprulle
+Knut Knut
+Knwn
+Ko Addiction
+Ko D Ur Dead
+Ko0tje
KoBe
+KoH Zoro
+KoPvM
+Koa
+Koak
Koala
+KoalaBear819
KoalaBwala
+KoalaHeist
+Koalarobe
+Kob Bryant
Kob3oshii
+Kobakat
+Kobayashi89
Kobe
Kobenna
+Kobi btw
Kobold
Kobushi
Kochelas
+KochiiBear
Kocjancic
+Kocyte
Kodai
Kodak
Kodax
Kodeth
Kodfunk
+Kodie
Kodipar
+Kodo
+Kody IRL
Kodywithac
Koekebakker
+Koekenpan
Koekienator
Koelkast1
+Koelkast3120
+Koelogg
+Koemi
+Koenfu
+Koeppy
+Koerdistan
Koff
+Kofferbak
Koffie
+Koffie Shop
KoffieBoer
Koffiekan
Kofnx
+Koga09
Kogarah
+Koge
+Kognito
+Kogsin
+Koh Me Lo
Kohda
+Kohrosian
+Koii Diva
Koka
Koki
KokiriSword
+Kokki
Kokkue
Kokkugoburin
Koko10tkd
+Kokoftu
Kokou
Kolade123
Kolariah
+Kolarino
Kolbot
+Kold Pizza69
Koldbetrayal
+Koldz
+Kolicee
Kolmay
Kolmiojuuri
Kolodinsky
+Kolomit
Kolton
Komai
Komarov26
Komijn
+KomisarzFlak
Kommunist
+Komog
Kompact
Kompania
KomradeScape
@@ -12602,61 +26366,125 @@ Komugi
KonDaTV
KonKai
Kona
+KonaTheCake
KonaTheGent
Konami
+KonarMilkies
Koncept
Kong
Kongen3609
+Kongherodes
Kongklunk
Kongmoakim
+Kongon Musta
Kongz
+Konigs Tiger
Konigsblau
+Koningnoob
+Konjakkia
Konkelbearet
Konkuuu
Konnie
+Konnor Ray
+Konny
KonosubaAqua
Konroy11
+Konstiq
+Kont Crumbs
KonteNeuker
Kontentti
Kontoret
+Kontrafakt
+Konu
Kony
+Kony4ever
+KonyRomo
+Konya Slayer
+Koo
+Koob
+Kooben
Kooch50
+Koochie
+Koogs
+Kooiker
+KookieDough
+Kooky Kal
+Kool Aid76
+Kool Hwhip
Kool Iron
KoolKriegs
+Kooleey
Koollpop
+Kooloo Limpa
+Koomar
Koomorang
+KoontzyJr
+Kooopa
Koopa
+Koopa Kash
Koopatrol
Koopley
+Koops
+Koothi Jr
Kop0nen
+Kopet
+Kopites
+Kopn Alt
+Kopoes
+Koppa Olutta
+Kopra_0nu
+Kopzilla0
KoqPuuser
Korado
Korail
+Koral64
Korangarr
+Korasko
+Korazi
+Korbet
KorbolJestem
+Korby_K
+Korea
KoreaBread
Korean
+Korean Neet
Korelivia
Korihoko
Korisas
+Korkesh101
+Kormulus
Korneel
+Kornettos
Korok
Korpokkur
Korravalvur
Korsair
+Korsan
Kortti
KosChiquiss
+Kosaki
+KosarevSpawn
KosenRS
Kosey
+Kosha Engler
+Kosken Kovin
Kosmckid
+Kosmo
+Kosra
Kosst
Kossukissa
Kostaja123
Kosteezer
Kotaki95
+Kothfan2
Kothfan3
Kothu
+Kotimaista
Kotkatapult
+Kotoe
+Kotov
+Kottis
+Kotze
Koucii
Kouen
Kouhais
@@ -12665,111 +26493,227 @@ Koulupummi
Kourend
Kourk
Kov0s
+Kova Kova
Kovacs
+Kovacs Bela
Kovaley
+Kovalux
KovidKai
Kovit
+Kow
+Kowawa
Koxu
+Koy
+Koy5
+Koyix
+Kozileks
+Kozmic
+Kozojebec
Kozyshack
+Kpiy
Kprs
+KpyosX
+Kq
Kr0jm
+Kr149
Kr1sten
Krab
+KrabbiePatty
+KrackScape
+Kradoth
+Kraff
+Kraft Slave
Kraftra
Krafty
Kragjay
+Kragwa
+Krahhling
KrakaJ
Kraken
+Kraken Beerz
+KrakenSnacks
+Krakenarse
+Krakenmom
+Krakkars
Kralik
Kralovna
+Krammetje
+Krana
+Kranky Kraut
Kranox
+Kransie
KrapNSchitz
+Krapinschitz
Krappa
Kraq
+Krasznahorka
+Kratic
Kratje
Kratos
Kratos-Arepa
+Kraujukaz
Kravcik
+Krawall
+Kray
+Kraytoast
+Krayz818
Kraz3d
+Krazed Zen
Krazezor
Krazy
+Krazy Kramer
+KrazyKillah3
Kream
+Kream PIE
KreampieKing
Kreams
Kree
+KreeM_Pies4U
Krel
+Kreme Krispy
+Krepe
+Kreshink
+Kreupel hond
+Kribo
KriegFleisch
Krigare
Krigersej
Krigsgaldr
+Krikkos
Krile
Krillin
+Krillin It
Kriltar
+KrimenReborn
+Krios
Kriptog
+Kris 2
+Kris Kross
+Kris Tis
+Kris Toffer
KrispCowMilk
KrispyCow
+KrispyJello
+Krispz
+Kriss42
+Krisse
Krisstian
+Krisstof
Kristina
Kristo1337
+Kristoh
+Kristops
KristySlays
+Kristya
Kriszx
Krith
+Kritters
Krizalid
Krizee
Krllykins
+Kro
Kroeg
+Kroekoek
Kroer1
+Krogan
+Krohmos
+Kroketten
+Krombop Mike
Kromuh
Kron0
KronScape
+KroniKStyL
Kronic
KronicPlague
+Kronic_gtt7
Kronjuvel
Kronoryx
+Kronstedt123
Krontio
+Kropium
Kross
+Krownax
+KrthisIrnhrt
+Kruber
KruimeIkoek
Kruisboog
Kruizar
+Kruncha
+Krusch Qc
Krusk09
Krustorb
KruttGutten
Kruuxt
+Krvavec
+Krw
Kryder
Kryderman95
+Kryl
+Kryllz
Kryoge777
Krypsiss
Kryptanite
Kryptic
+Krypto Pup
Krypz
Krystalbead
Krystalized
+Krystie
Krytl0rd
+Kryxon
KryyptCeepR
Kscott
+Ksed
Ksteg
Ktran4
+Ku
Kuaalo
Kuanta
+Kubanna
Kubfu
+Kubiak
+Kuchera
Kudos
+Kudra Shade
Kudsk
Kudt
+Kuemper
Kufke
+Kuger
+Kugi
Kuha
+Kuhis
Kuhki
+Kuhnlicious
Kuhvon
+KuhwazyyPVM
Kuhz
+KuidaoreTaro
Kuistikopone
Kuittis
+Kuji Otoya
+Kukii
+Kukko
+Kuksukka
Kulak
Kuler
Kuli
+Kullilutku
+Kullirausku
+Kumara Fries
+Kumduh
Kumeku
+Kumetis
+KumikoOkada
Kummars
+Kummens
Kumoga
+Kumonyru
+Kunakana
Kunaphela
+Kundalini888
Kung
+Kung Aguero
KungFuKennyy
KungFuhr3r
KungFury01
@@ -12778,18 +26722,25 @@ Kungler
Kungzaki
Kunie
Kunkku289
+Kunkulu
Kunsel
+KunukGL
Kuola
+Kuollu Homer
+Kupla
+Kuppi
KurSiens
Kuran
Kurasaki21
Kurask
+Kuratus
Kurayamii
Kurdishtan
Kurfue
Kurgan
Kurib0hh
Kurim
+Kurios
Kurko
Kuro
Kuro6757
@@ -12798,141 +26749,368 @@ Kurohige-Jm
Kuroma
Kuroshin4
Kursdragon
+Kurt Cocaine
+Kurt1sdbr
+KurtMaxed
Kurtan
+Kurtismo789
+Kurtiz
+Kurtowogei
Kuru
Kurumin
+Kurums
Kurune
Kurza
Kurzgesagt
Kurzi
Kurzol
+KusOnRNG
+Kusai
Kush
+Kush 999
+Kush Grey
+Kush Nerd
KushWizdom
+KushalaDaora
Kushanada
KushedKnight
Kushies
+Kushioned
Kushkhalifa
+Kushmooms
Kushtyyy
Kusiaks
Kusimuna
+Kusimuna JR
Kusle
KusmarPavola
+Kuso Saiko
+Kut Jack
+KutInternet
Kutasy
+Kuthay
+Kutirons
+Kutkip
+Kutori
Kutunawa
KuuDuu
Kuudere
+Kuulus
+Kuuw
Kuvakei
Kuwolski
+Kuxx
+Kuykendoll
+Kuzh
+Kuzi
+KuzzzTruckin
+Kvacky
Kvamsdal
+Kvaoathe
+Kvzy
Kwadraat
+Kwakske
Kwambam
Kwan
+KwanDynasty3
+Kwani
Kwarkark
Kwastaken
+Kweem
Kwei
+Kwep
Kwieppie
Kwintal
Kwondeo
+Kwong
Kwongo
KwuarmFarm
KxKxW
KxNoTTz
KyIll
+KyPolar
+KyWi
Kyaandere
+Kyafa
Kyberpaavi
+Kye187
+Kyeb
KyeeG
+Kyelee
Kyersago
Kygehn
Kygesm
Kyhlen
Kylanater
Kyle
+Kyle 8990
+Kyle Esq
+Kyle G
+Kyle Kmac
+Kyle VA
KyleFammm
KyleGrounded
+Kyledog829
Kyler
+Kyler Moss
+Kyles Cute
+Kyles GIM
+Kylesteven
+Kylewwashere
+Kylex
Kylianvb
+Kylliel
Kyloman
Kymeister
+Kynodontas
+KyotoSadness
Kyouan
Kyouko
Kyouma
+Kyouna
Kyouran
+Kyphrus
+Kyps
+Kyr0s
+KyraXIV
+Kyrakishuun
Kyrdaar
Kyrie
Kyrist
KyroThanatos
+Kyroba
Kyronius
+Kys Ironmen
Kyski
+Kytkinpommi
KyuubiKurama
+Kywt
Kyykin
+Kzyl
+L 0 S T Y
+L 3 G 4 C Y
+L 67
+L A R A M S
+L Ben
+L CBO
+L D A
+L E G E N D
+L E G O
+L E L O
+L E P I
+L F C
+L FC
+L Hus
+L I N U X
+L I V M
+L OAFS
+L S Q
+L U I G
+L U U K E
+L X R D S
+L achie
+L aika
+L aka
+L ama
+L ang
+L apras
+L atias
+L aw Rune
+L aze
+L e an
+L eafErikson
+L egs
+L ek
+L emaster
+L ev
+L i m a a
+L iamm
+L iar
+L ilo
+L inox
+L ions
+L o w g
+L ockdown
+L ofty
+L osi
+L paradoxum
+L u m i
+L u mi
+L u x
+L ucas
+L unatic
+L00000
+L00M
L00OL0OO00OL
+L00T SNIPER
+L00tacr1s
L00termember
L0G0
+L0GI
+L0L
L0L0LL0L00LL
+L0RA
L0RD
L0RDGAINS
+L0ST S0UL
+L0Z
L0kur
L0rd
+L0rd Arthur
L0rdMullett
L0st
+L0vecraft
L0ves2Splooj
L109
L115Squirtle
+L1L GN0ME
+L1ghtweaver
+L1l bits
L1ncoln
+L1ndman
+L2
L2Crash
L2D3
L2Loki
L2love
L2mmutaja
+L2sit
L2tankbandos
L2tob
+L337 GodHand
+L3RKON
+L3V3L
L3apOfFa1th
L3gg0
L3mur
+L3prec0n
L3sius
L3tMeBreath
+L4D2 Enjoyer
L4rry
L4st
+L522
+L64
+L86A2
+L8CP
+L8ers
L8rT8r
+LADFS
LAMAFAO
LAMARJACKS0N
LASBE
+LAUFY
+LAZY88
+LB9
+LBS M
+LBaccer
+LC33
+LCpl
+LE0 MESSI
+LE54SON
LEARNINGTHIS
+LEGOSl
LEN0
LENZ
+LET ME COOK
+LEWlS
+LF Content
+LFG 69
LFGrills
+LG 8anter
LGBTQLMNOP
+LIL BLESSED
+LIL PRINCE
+LILKHALAMARI
+LIMEWORLD
LIQUICITY
LITEIT
LITHITS
+LJ 8
+LJAP
+LJPalmer
LKIT
+LL Trigger
+LLAMA_ears93
+LLIRSHSLSIEi
+LLY Duramax
LLeffe
+LLich
LLol
+LMAO LOL KEK
+LMAOImDying
+LMFAO IRL
LMFAOIRL
LMNOP3
+LMParrot
+LN41
+LOADED_AR
+LOGAN109
+LOGlC
LOH3
+LOL BMW
+LOL MAD
LOOP1456
LOOSECOOCHlE
LOSTinGAMES
+LOUlSlANA
+LOWIQXD
LP Smokie
+LRG
LRGD
LRichyy
+LS1
+LS3D
+LSD-25
LSDDS
LSDe
+LSDeezNutttz
LSDonny
+LSDreamy
LSxD
LTUD3stroy3r
+LTapperz
+LUBRICAT0R
+LUKA DONClC
+LUR3ME
+LURED BY ROT
+LUTlN
+LVN iZN0
+LWE
+LXFY
+LYAM femboy
+La Benezra
+La Bollita
+La Brebis
+La Croix
+La Fiesta031
+La Frontera
+La Moo
+La Porta
+La Sopa
+La7itude
LaCroisssant
LaFroob
LaLegende
LaMachCaron
+LaMarii
LaPichula
+LaRS 07
LaYdlN
Laaban
+Laadvermogen
Laady
+Laagvliet
+Laaki
+Labas Utak
LabbatBlue
LabbattSplat
Labbis
+Labor
+Labstev
+Labundo
+LacDeaths
+LacedKoolAid
Lacedonian
Laceinyoface
Lachosocko
@@ -12940,82 +27118,160 @@ LachysMain
LacinorI
Lack
Lacking
+Lacking IQ
Lacoline
Lacraio
Lacrymosa
Lactosite
+LacusClyne
+Lad J
Ladbrook
Laderstall
Ladme
+Ladrian
Lads
Lady
+Lady Calais1
+Lady Chompa
+Lady Devil
+Lady Porky
+Lady Storms
+Lady2022
+LadyBuck
+LadyGagaTbh
LadyJan
+LadyJan BTW
LadyJessicaL
LadyMidn1ght
LadyOfCyprus
LadyOfMagick
LadyPidge
+LadySaurus94
LadyStarlite
LadyStorm83
+LadyVamperic
Ladydoll
Laedzter
Laeretes
+Laethia2
+Laetor
+Laf
+Laffam
Laffy
+Laffy Taffy
+Lafondaa
Laftonn
+Lag out
LagArtist
+LageLanden
Lagerhaus
+Lageri
Lagg
Laggbeer
+Laggro
+Laggy Brain
+Laggy Clicks
Laglet
+Lago
+Lagodzacy
+Lagomancer
Lagoon
Lagrange
Lagscape
+Lagu
+Lagwagon
+Lah Di Dah
Laharl
+Lahn
+Laid
+Laid bare
+Laika Wolf
LaiskaJake
Laiskiainen4
Laitoin
Laitti
+Laitue
+Lajer
+Lajfi
Lake
+Lake Show
+Lake Valor
LakeMonYew
Laker
Lakeshire
+Lakka
+Lakonic
Laksa
Laku
+Lakuni
+Lakupiippu
Lala
+Lalochazia
Lalundi
+Lam lul
+Lam_12
Lama
Lamanent
Lamb1237
Lambretta62
Lambs
+Lambzilla
Lame
+LamePuttE10
Lamented
+Lamfear
+Lamh
Lamie
Lamiia
Lammen
Lammy
+Lamns
Lamp
+Lamp Burner
+Lamp master
Lampepit
Lampyy
+Lampzki
+Lamshnarf
+LanJiaoDuaKi
Lana
+LanaLuna
+LanceDaPantz
+Lanco
Lancy
Land
Lander
Landeskoging
Landlord
Landofzoa
+Landucey19
Landyll
Laneeta
+Lanell Latta
+Lanesstee
+Lang Chang
+LangeNieWies
+Langeboy
Langecries
Langner
Langosman
Langscape
Langtu102
+Langutan
+Langzzy
+Lanier
+LankFrampard
LankaKekw
Lanky
+Lanky Josh
+Lankyfeed
Lann
+Lanny Pan
+Lanoue
+Lanpzki
Lanrico
LantadymeRey
+Lantern Snow
Lanx
Lanzlol
Laogai
@@ -13025,69 +27281,142 @@ Lap0tai
Lape
Laphloredos
Lapsa
+Lapsapp
Lapsivesi
Lapua
+Lapuz
+Lapy
+LaquishaBaby
+Lar0i
+Laraelias
Larcadum
Larcenex
+Lard Jaysus
Lare
Lare240
+Larecia
Larecio
+Larenz Tate
Large
+Large Chompy
+Large D
+Large Npc
+Large Tasty
+Large Toads
LargeExpLamp
+LargeGrandma
+LargeZock
+Largelad2
+Largeprune
Larie
Larissa
+LarksTongues
Larkypoo
Larotux
+Larrey
Larry
+Larry 0G
+LarryB
LarryIsHere
Larrys
+Larrys btw
Larryz
+Lars Ohly
+Larser
+Larsinosrs
Larsjns
Larso
+Lartsi
+Laruka
+LasBoi
Lascooby
+LaserLad
LaserSchlong
+Laserati
+Lashi
Lasjstts
Laska
+Laska Siara
+Laski
+Laskii
+Lasne
LasoliLeiffi
+LassT
Last
+Last Bison
+Last King
+Last N1te
+Last Stages
+Last Texan
LastAttempt
+LastBoss
LastHours
+LastMark
LastRecalI
LastTexan
+LastWookiee
Lastinis
+Lastkaiii
Latanoprost
Late
+LateKnight
LateOwl
Lateksiuljas
+Latelaturi
Latero123
Latias
Latins
Latissimus
Latitude
Latompachy
+Laturaivo
+Lau396
LauQT
+Laudine
+Laufeyson965
+LaughTale XD
Laughed
Laukage
Laukie
+Laukki1
Laundry
+Laundry Room
LaupieLaupie
Laur
+Laur ex core
Laura
+Laura J
+Laura uwu
+Laurat J
Lauren
+Laurentina
Lautanen
Lauw
LauweEgberts
+Lav x
Lava
+Lava Buster
+Lava rune
+LavaFountain
LavaKitty
Lavadude42
Lavafrost
+Lavagirl420
Lavak
+Lavak Bob
+Lavanis
Lavasat
LavendrGoons
+Lavigne
+Lavina26
+Lavios
Laviuthen
Lavvv
LawOfBirds
+Lawesy
Lawfox
+Lawhrer
+LawlAsYouDie
Lawlie
Lawliet
Lawlimon
@@ -13096,96 +27425,221 @@ Lawn
LawnChair48
Lawncat
Lawnmower73
+Lawre nce
+Lawsilk
Lawson
+Lawyer JD
+LawyerGirl24
+Lax_315
Laxar
Laxx
+Lay
+LayDead
Layden
+Laydwnandr0t
Laydyn
Layes
+Layes X
+Layezy
Laylaa
+Lays
Layzi
+Laz GIM
+Laz Lo Mein
Laz2510
+Laza Ferro
Lazer
+LazerVizion
LazerWork
+Lazgo
Laziest
Lazikiel
LazloDaLlama
Lazy
+Lazy Fare
+Lazy Jazz
+Lazy Lump
+Lazy Matt
+Lazy Mauler
+Lazy Moo
+Lazy Shell
+Lazy Soul
+Lazy Stona
+Lazy XP
LazyB0y
+LazyBoneZone
LazyDevon
LazyFarmer
LazyOwner
+LazyThom
LazyTurtleRS
+Lazydrink
Lazyie_KiD
+Lazysmokes
LazyyySloth
Lblacc
Lbuzz
+Lck
Lda237
Lder
+Lds
+Le Bibu
+Le Biff
+Le Big Sad
+Le Catptain
+Le Doda
+Le Foole
+Le Gio
+Le H0NK
+Le Jeffeh
+Le Peanut
+Le Petit BH
+Le Pogo
+Le Reject
+Le Stu
+Le Sus
+Le Tom
+Le von
+Le4f
+LeAUD
+LeB0ng James
LeBlownGames
+LeBoobie
LeBrianJames
+LeDamos
LeDerpski
+LeIronJims
LeKinguin
LeLuuk
+LeMontBlanc
LeMoonMan
LeMoopey
+LeNnEeX
+LePeach
+LeVarrock
Lead
Leader9922
Leaderless
Leadfeathers
Leadley
+Leads Dead
Leaf
+Leaf 7
+Leaf Parker
+Leaf998
LeafStoneDab
+Leafffy
+Leafpool
Leafyshade
+Leaga
+League Brain
+Leak
+LeakedDMs
Leaks
Lean
+LeanFavaBean
Leanlce44
LearnCatMeow
+Learningosrs
Learti
Lease0fLife
+Leather Top
LeatherJan
+LeatherRat
Leatherr
+Leaux Key
Leavepigrun
+Leb Crotch
+Leb Man
+Lebanesee
+Lebennn
+Lebor
+Lebowski2033
Lebrons
+Lebusoft
Lebzima
LeccaJr
Leckie12
+Leclerc 2024
Lectaminol
+Lectosh
+Lectrix
+Led2000
+LedXia
Ledgendairy
Ledning
+Ledu
+Lee
+Lee Ratt
+LeeFelix
LeeGavGav
LeeHen
+LeeV_V
Leecherboy
Leechy2399
+LeedsUnited
Leegotalo
+Leeleebug210
+Leemer
+Leemi
+Leemo
Leer0y
Leerjet
Leeroyy
+Leers OSRS
+Leeshore
LeesusChrist
Leet
+Leet Blues
+Leet Bug
Leetroopa
Leeuwarden
Leevar
Leezy
Lefonzeee
+Left gf 4 Xp
+Left inPeace
+LeftFistt
+LeftHerFor07
+LeftHerForRs
+LeftTwix
Leftist
+Leftwich22
Lefty
+Lefty-x
+LeftyWarrior
Leftytexan
+Leg Day 99
Legacy-Blade
LegacyOfErik
+LegalCounsel
Legalism
Legally
+Legally Dumb
+LegallyAfk
+Lege
Legend
+Legend 0007
LegendHarold
+LegendKingz
LegendOfShao
LegendSuz
LegendaryDTM
LegendaryFoe
+LegendaryLVP
+LegendaryMe
LegendaryRS
LegendarySte
+LegendaryZ0
+Legenddiary
Legenddreams
Legendelek
+Legendish
+Legends Epic
+Legendsam7
Legened248
+Legggggooooo
+Leggo
Leggy
Leggz
Legikt
@@ -13194,17 +27648,29 @@ Legion2410
Legionals
Legislatore
Legit
+Legit Ape
+LegitGarbage
LegitSamuel
+Legitidrown
+Lego Brick
Lego Fisher
+Lego Mania X
LegoMyBob
+Legolas
+Legolas I
Legolic
Legoliker999
Legosas11
+Legosaur
+Leguminati
+Leha
+Lehawek
Lehmo
Lehnert
Lehoir
Leid
Leider
+Leidmavo
Leif
LeifBestLord
Leiff
@@ -13212,16 +27678,27 @@ Leigh
Leilin
Leimstiift
Leion
+Leist1nas
+Leistus
Leito
+Leitwolf
+Leivermorale
Leivonnaiset
Leiza
+Lejj BTW
Lejoon
+Leka xo
+Lekira97
+LekkerMoeder
Lekkeri
+Lekray
Leky
LelSickMeme
Lelalt
Lelbow
Leldorin
+Leldra
+Lell
Lelott
LelouchV
Lelysia
@@ -13229,113 +27706,230 @@ Lemako
Lemillion141
Lemiy
Lemke
+Lemmelleni
Lemmy
LemmyThePerv
Lemon
Lemon5000123
+Lemon9000000
+LemonTart
+Lemonade max
+Lemonguin
Lemonmooffin
+Lemonowo
Lemonrider
+Lemony Earl
Lemonz
+Lemosgomes
Lemphys
Lempsu
Lemurcow
Lemuria88
Lemursnore
+Lendtable
+Lenegis
+Lenel Devel
Lengzz
+Leni Epiza
Lenience3
+Lenify
Lenlami
+Lenn375
Lennie
Lenning
+Lenny Euler
LennyPro
+Lenovel
Lenreys
+Lenses
Lentiano1
Lentil
LenvisCZE
+Lenya
+Leo Gagner
+Leo Messi
+Leo The Fish
+Leo12_1993
Leo2
Leo96
Leodero
Leoma
Leonatwo
+Leonbozz
LeonidasIV
+LeonidasThor
LeonidasXCIV
Leonl
Leontje
Leorio
Lepek38
Lepkilla
+Lepra
Leprechau
Leprincias
Lerch
+Lernaean
+LeroyDanknz
Leroyvdk
+Lerzbot
LesGetIt
+Lesbean
Lesen
Leshrac
+LesleySnipez
Less
LessIsMore
Lessar
+Lesser Gods
+Lessking
+Lestamsakul
Lestersaurus
+Lesva
+Let Us Dream
LetBrettBang
+LetJimCook
Lethal
+Lethal Blade
+LethalClick
LethalMortal
Lethally
+Letharil
+Lethwei
+Letits now
LetrahL
Lets
+Lets Blaze
+Lets Boss
+Lets Glide
+Lets Plop OK
+Lets Ride
+Lets See
+Lets Toke
+Lets Ziggy
+Lets pep
LetsGetSmity
+LetsGetem
LetsRouQ
+LetsgoDaddy
Letsjjj
+Letspoint
Lettersloth
LettuceLegs
+LettuceLime
+LettuceNut
Lettuce_8
Lettulainen
+Leturpentinr
Letz
+Leukaremmi
+LeukemiaLord
+Levante Frog
Level
+Level Denel
+Levelations
+Leveldegree
Levi
+Levi Squad
+Levi lmao
Leviate
+Levibeelevi
+Leviud
+Levven
+Levyiah
+Lew Sanus
+Lew sid
+Lewd Queen
LewdTouchMe
Lewdberrypie
Lewey
Lewf
Lewfu
+Lewhh
Lewir
Lewis
LewisMcLaren
+Lewis_y
Lewism22
Lewison
+Lewiss
Lewithetui
+Lewu
+Lewwiis
LexaSteel
+Lexatrax
Lexay
Lexdegekte
Lexer
+Lexington73
Lexkai
Lexxi
Lexy
+Leyon
+Leyr
+Leysim
Leyton
Leyzen
+Lezio7
Lezley
+Lfts
+Lhk
+Li am
+LiI Tii Lii
+LiT Clutch
+LiT on Dabs
LiTxEXODlAx
+Liam McPoyl
+Liam1994
Liam6780
+LiamLate
+LiamLollypop
+Liamas
Liberate
Liberaxa
Liberty
+Liberty Cap
Libolik
+Libracorn
Librain
+LichKiing
+LichOneeChan
+Licharus
Licht
+LichterLo
+Lichtert
+Licitness
Lick
+Lick My Wyrm
+Lick Time
LickAhrim
+LickMcFicks
Lickeris
Lickilicky
Lickumss
+LidawgMcChad
+Lidless
+Lidlman
+Lie
Lie4it
+Liebzer
+Lies of S
+Liet Katsu
Lietuviskass
Lietuvisz4
+Lieve
+Lieven
Lif3
Lifal
Life
+Life Road
+LifeInsAgent
LifeIsBaked
LifeIsRockie
Lifeform
Lifehunt
+Lifeisnow13
Lifeliners
+Lifelulz
Lifes
Lifes12Rules
Lifesteal
@@ -13343,247 +27937,528 @@ Lifestyle
Lifewaste
Lifezajoke
Lifticus
+Lifting Fe
+Liggen
Lighning
Light
+Light Ace
+Light Shell
+Light age II
+Light1324
LightAura
LightB0ne
LightRigger
+Lightarrg255
Lightaxo
Lighten
LightenUp
Lighter
Lighterfalz
+Lightfister
Lightg0d
Lighthead45
+Lightlord440
+Lightning MF
+Lightningess
Lightqt
Lightstoria
+Lightww
+Ligma Balzaq
+LigmaMufin
+Ligt
Lihatanko
Lihtnenolife
Lihtsurelik
Lihu
+Liiga-Ari
+LiikeAGlove
+Liite
Liitokissa
+Lijk
+Lik me knie
LikMijnRaid
+Lika C
Likalatopus
Likark
Like
+Like Saint
LikeABrother
LikeAGloveee
LikeCinnamon
LikeToetally
Liketocombat
+Liko
Likrot
+Lil Callisto
+Lil Dickyy
+Lil Donut
+Lil Dor
+Lil Doss
+Lil Eso
+Lil Fika
+Lil Garbo
+Lil Hogg
+Lil Knight
+Lil Koda
+Lil Lilyxo
+Lil Lotus
+Lil MCM4A1
+Lil Moe
+Lil NllLO22
+Lil Rat Mann
+Lil Roli
+Lil Shay
+Lil Stoma
+Lil Tragic
+Lil Weeezy
+Lil Woowoo
+Lil Yeeter
+Lil Yungen
+Lil Zeusy
+Lil Ziik
+Lil Zimp
+Lil parasite
LilBirb
+LilBlueMew
LilBobbi
+LilFaulk
LilGBigThing
+LilGay btw
LilHorny
LilMissSlays
+LilNubbins
+LilPeepBoi
+LilSeany
LilSquidgy
+LilSteamBoat
LilStonks
+LilSuzieVert
LilUziBlyat
LilWitness
+LilYungChitn
Lila
+Lilac Devil
Lilangrydude
Lilbobsters
Lilchris
Lildirt
+Lildischarge
Liles
Lilhotshotv2
Lilinss
Lilith
+Lillia n
Lillie
Lillyz
+Lilmoose99
Lilnenedemon
Lilqtforeva
+Lilsauce72
+Lilsutts
Lily
+Lily Mayy
Lilyalatea
+LilyaxD
+Lilypily0
+Lilysaurs
+Limb
+Lime Light
+Lime Season
Limed
+Limeguy21
+Limewire
+Limit Form
+Limited Room
+Limiwinkz
+Limiy
Limmert
+Limmy
Limo
Limp
+Limp Lime
+Limpsioo
Limpwurt
+Limyt
Linalool
+LincolnButt
+Lind say
Linda
+Linda Lou
Lindegaard
+Lindewyn
Lindsey
Linearr
LinedFury
+Linelis99
Linen
+Linen Cry
Linerz
+Linewa
Liney
Lingwood
Linh
+Linhson
Link
+Link Adam
+Link Click
+Link Noises
+Link Tribute
LinkKing
+LinkTheIron
LinkedList
Linkedln
+Linkin Boy33
+Linkinaz
Linkmoon
Linkseratten
+Linkv21
Linnara
Linsey
Linsunt
+Lintell-lad5
LinusEkedahl
+Linxis
Lion
+Lion Gin
Lion-021
Lion0fZion
Lionbatdog
Lioncheart
+Lionclaw
Lionelliee
+Lionheart
+Lionheart Xl
Lionhrt
+Lionyxia
+Lioui
+LipShits
+Lipalow
Lipperr
+Lippy Jimmy
+Liqu
+Liquar
Liquicity46
Liquid
+Liquid Apple
+Liquid CSGO
+Liquid GZA
+Liquid Mire
+Liquid Nexus
+Liquid Reign
Liquid8
LiquidRmt
LiquidTheory
LiquidTrails
Liquidat0r
+Liquidated
+LiquidatorRS
+Liquidwood0
Liquified
Liquir
LiquorGrain
+Liqwid
+Liridon
Lirrix
Lishenna
Lisica
+Lisle
Liso
+Lissino
Lissoms
Listeffect
Listen2me
ListenMorty
+Listerine_TC
Listics
+Listifyy
Lisuna
+Lit Dawg
+Lit Guy
+Litas
+LiteForge
+Litefooted
Litelii
+Litem
Liten
+LiteralCow
+Literic
+Lites Evil
+Litey
Liteyr
+Lithassa
Lithuano
Littens
+LittieTover
LittjeterRS
Little
+Little Allie
+Little Flirt
+Little Jaxon
+Little Knob
+Little Sloth
Little Snor
+Little Ticks
+Little Twig
+Little meow
LittleGhosty
+LittleIron
+LittleNudger
+LittleTrev8
+LittleWillis
+LittleZorro
Littlebluefe
Littleblueju
Littlechirru
Littlefarms1
+Littlefire01
Littleguyz
+Littletickle
+Litto
+LittyNoCap
Litvintroll
+Lium
Liuo
Liutkemenas
+Livahpewl
+Livand
Live
+Live Jaked
+Live Moose
Live2Win
Live4thefigh
LiveItRight
LiveLoveAsap
LiveYourLife
+Livedasniper
Livepan
+Liverpewle
+Livey
+LividPharm
Living
+Living Life
+Living Lust
+Livingenemy
+Liviu230
Livvii
LivyLo
Liwyn
+Liyum
+Lizard Siege
+Lizily
Lizinginis
+Ljb
Ljudmila
Ljuu
Lkarch
+Lkky
+Lkn
Lkoi
+Lkue
LlHAPIIRAKKA
+LlLY ALLEN
LlLYUFFIE88
+LlMEWlRE
+LlNT
LlON
+LlSA ANN FAN
LlTEWORK
LlTT
+Ll_lK3
Lla234
Llama
+Llama BTW
+Llama Pharm
LlamaDawg
LlamaMcfenis
+Lleucu Ann
Llirik
Lloydyy
+Lluuk1
+Llychlynwr
Lmao
Lmaz
+Lmfao
Lmlxlk
+Lmmortai 07
Lmsjfjksdnhb
+Lmurs
Lncln
+Lng
+Lo Kii
+Lo My God
+Lo cation
Lo07er
Lo0pyy
LoGiiKBah
LoPintos
LoadMySkeng
+Loaded
Loadizzle
Loadstar
LoafOCelery
+Loathed Kmd
+Loathing
+Lobb Dad
Lobby
+Lobby Two
+Lobo Blanco
+Lobo Sonora
LoboStark1
+Lobot96
+Lobotomizer
+Lobstars
+Lobster12
Lobstero
Local
+Local FEmale
+Local Idiot
LocalHero7
LocalJoint
+Locale
Lochi
LockDownLife
+Lockdown v2
Locko
Lockpicks
Lockski
+Locksnap
Lockssley
+LocoDoritos
LocoHamsterz
Locococonut
+Locothegenie
+Locrian
+Locton
+Loda
Lodarion
Loders
Lodestar
Lodestones
+Lodgehunter
+Lodiedoo
+Loebas
Loeffen
+Loez
+LofaBred
Lofi
Log62
LogHog8
+LogHunterKaz
Logan
Logan2x
Loganator34
+LogansPrayer
Logavano
LogiTekton
+Logia
LogicTerror
+Logical God
Login
+Logitech
+Logitekton
Logless
Logos13
LogsKnog
Lohan
Lohkey
Lohruken
+Lohwi
Loikoi
+Loikoi Lee
LoisGriffin1
+LokieDokie
+Lokolow
Lokos
+Lokrand
Lokur
+Lol Ur Dead
Lol466
Loladactylll
+Loldg
Lolek
+Loli Cox
+Loli Neko
+Loli Pantsuu
Loli-Remain
LoliChan
LoliElie
LoliStrangla
Lolicons
+Loligagging
Lolipoparty
Lolitsleeroy
+Lolmanever
Lolmc
Lolopipop
Lolwierdo
Lolwuts
+LomLy
Lombachs
Lombardi
Lomborghini
+Lome
+Lomobuu
Lompardo
Lon3y
Lonan
+Lonan Arikos
Lone
+Lone Gym Rat
+Lone Lee Axi
+Lone Pop
+Lone Requiem
+Lone runkero
LoneCorp
LoneMage
LoneStarWit
Loneful
+Lonehenge922
Lonely
+Lonely Eevee
+Lonely Neo
+Lonely Norms
+Lonely Ride
+Lonely Salty
+Lonely Slave
+Lonely Table
+Lonely Tugs
+LonelyLight
LonelyOnT0p
LonelyRS
+LonelyTugs
Lonelyy
+LonerSushi
+LonesomeSoep
+Lonewolf117
Long
+Long 4skin
+Long Demon
+Long Ol Dong
+LongBoneee
+LongRodGod
+LongSnapper
+Longbow
+Longest Head
+Longie
Longjohnz
+Longmeatlog
+Longnech
+Longo Doggo
+Longstaf
+Longsword950
+Longview
Longwave
+LongySlongy
Lonjick
Lonksu
Lonz
+Loo p
LoofiePoofie
+Loofoo
+Loogs
Loogy
Look
+Look out bro
Looked
Lookin
Lookingman
@@ -13591,62 +28466,166 @@ Lookn4Puzzy
Lookout
Lookup
Loon
+Loon Master
+Loonetick jr
+Looney278
+Loongstickyy
Loonlette
Loony
+Loony RS
+LoonyLunar
Loonykilla
+Loonyluke5
+Looolo
LoopGoon
+LoopSwoop
Loophole336
LoopieFish
Loopy586
Loose
+LooseAnos
LooseLesley
+LoosebuLdge
+Loosh
+Loot Chemist
+Loot Party
Lootcifer
Looted
Lootedyou2
+Lootorz
Lootrich
Lootsharing
+Lootsi
+Lootski
+Loox
+Lopmkinjubhy
+Loppy Killer
+Loquwsea321
Lord
+Lord Amonite
+Lord Bees
Lord Buud
+Lord Bv
+Lord Caldlow
+Lord Conte
+Lord Cryer
+Lord Cypher
+Lord Devil
+Lord Doofy
+Lord Elfen3
+Lord Extropy
+Lord Grefven
+Lord Grim
+Lord Grofyth
+Lord Guam
+Lord Hents
+Lord Jebbe
+Lord Joona2
+Lord Jostyh
+Lord Keithus
+Lord Kratos
+Lord Loss
+Lord M0RG0TH
+Lord Mantra
+Lord Masonic
Lord Mjosh
+Lord Of Cows
+Lord Pengu1n
+Lord Pillow
+Lord Richie
+Lord Runes
+Lord Shayne
Lord Tarkus
+Lord Valzin
Lord Vioarr
+Lord Vishnu
+Lord Xeth
+Lord Yaksha
+Lord Zq
+Lord iFlex
+Lord kuro
+Lord polak
LordArtonius
LordAusticus
+LordBaphomet
LordCoffee2k
+LordCorreia
+LordDanko
+LordDaxel
+LordEpic69
+LordFarquxd
LordFoxy
LordGuthanPK
+LordJRazE
+LordJuba
LordLambo91
LordMullett
LordNorden
LordOfHarems
LordOfOtakus
LordPh1L
+LordPolgoth
LordQuinker
+LordScoobert
LordShrubber
+LordSloppy
LordThyas
+LordUSA
LordYawgmoth
LordZahard
Lordalbert0
+Lorddraconal
Lorde
Lordjoeman
+Lordkaes
Lordstails
Lordtwinky
+Lordy Flame
+Lordy608
Lordza
Loredon
+Lorehold
Loreland
Lorencia
Lorenz
+Lorenzoh sr
+Lorenzokazoo
+Lorithean
Lorkaa
Lorki
+LorqueldIM
+Lorre46
+Lorry
+LortJob
Lorttomies99
+Lorvikatari
Lorwic
LosAngeles
Lose
Losel
+LoserKid
Loshambo
+LosinAllHope
Losing
+Losing Fat
+LosingXP
+Loss1525
Lost
+Lost Angel
+Lost Baby
+Lost Baggage
+Lost Logan
+Lost My Baby
+Lost My Sock
+Lost Oliver
+Lost On You
+Lost Roomba
+Lost Snail
Lost Tadpole
+Lost Weed
+LostBank
+LostBankKey
+LostChad
LostCloss
LostDude28
LostHalls
@@ -13655,258 +28634,608 @@ LostMoon
LostOcean
LostOnThePCT
LostSauce
+LostStatus
LostVorki
+LostandFound
+Lostdog03
LostlSoul
+Lostpetrock
Lostplzhelp
Lostrelic93
+Losty99
+Lot of Beans
Lothariou
+Lotilyx
Lotion
+Lots of Eggs
+Lotsa Regret
+LotsaOSRS
LottaPotAgo
Lotto
Lotu15
+Lotus bless
LotusKid
+Lotwik
+Lou Le Dur
+Lou Red Wood
+Lou Sputho1e
+Lou Surr
+LouBug
LouSass
+Louezzi
Loug
Lougle
LouiVui
+Louie Bags
LouieMurphy
Louiec3
+Louiseyy
Lounckie
+Loupak
+Lousy Drunk
+LouvicDank
+Louzy
+Lov ed
Love
+Love Caley
+Love M Poker
+Love Roman
+Love Taylor
+Love Yourz
+Love me
+LoveMyAnzaa
LoveThat
+Loveable
Lovelili
Lovely
+Lovely Clawz
+Lovely Cola
Lovepoot
+Loverboy
Loveskillin
Lovexdragon
Lovey
+Loveyan823
+Low Alched
+Low Chief
+LowBaller
LowKeyPickle
+LowLifes
+LowPines
LowPower
+LowRunEnergy
+Lowanse
Lowballz
Lowercase
Lowery
+Lowfield19
LowkeyBallin
Lowlander
+Lowlife121
Lowlux
Lowner
+Lowrey73
+Lowstar1
Lowtempterps
Lowy
+LoxoJ
+Loxtos
+Loyal2pvm
Loyalcaptain
+Loyd Nichols
Loze
+Lpfan
Lrauq
+Lrian
+Lric Eotter
Lron
Lronic
+Ls4
LsummerC
+Lsv
+Lt Burgers
+Lt Golpar II
+Lt Mantas
+Lt Purekarys
+Lt-Iron-Lt6
LtCastiel
LtJan
+LtRemigijus
Lt_Torch
+Ltfreggin
+Ltk Iron
Ltman42
Ltmf
+Ltufighterlt
+Lu Diabla
+Lu be
+Lu0nto
+LuauKing
+Lub
Lub3edUp
+Lubbz
Lubed
LubinLen
+Lubos
+Lubosek
Luc4rio
LucSynthesis
Luca
+Lucaemar
+LucarioLVL X
Lucas
+Lucas Solo
+Lucas1192
Lucasmelo11
Luccaa
Lucho
Luchtloper
+Luciah
Lucid
+Lucid Cynic
+Lucid Dream
+Lucid Josh
+Lucid Meme
+Lucid Truths
+LucidFeels
+LucidPie
Lucidcr
Lucidfever
LucidityX
Lucie SkyDia
+Lucifenrir
+Lucifer v2
Lucifer06
+Lucifer4Real
Lucifer_link
Luciifer
Lucil
+Lucina
+Lucipur
Lucivert
Luck
+Luck Lost
+Luck Voltla
LuckRunsAlt
+Luckario
Luckd0ut
Luckeh
Lucker
LuckieStein
Luckless
Luckpvm
+Luckscaper
Lucky
+Lucky Arian
+Lucky B Boss
+Lucky Bambam
+Lucky Baws
+Lucky Cash
+Lucky Chance
+Lucky Clover
+Lucky Clown
+Lucky Duck
+Lucky Greg
+Lucky Kev
+Lucky Link
+Lucky Lombax
Lucky Lukey
+Lucky Mofo
+Lucky Rabbit
+Lucky Sofa
+Lucky Yoru
+Lucky skrue
+Lucky when
LuckyAce
LuckyDog
+LuckyDog x
LuckyEmerald
LuckyKroketa
LuckyLackey
LuckyMatch
+LuckyNrSeven
+LuckyVic
Luckybamboo1
Luckynuts
Luckyxx
+LucoUK
Lucyfer22
+Luczzs
+Lud a
+Luda-Dan
Luderan
Ludo
+Ludo Sand3rs
Ludomo
+Lueis
+Lueke
LuffyAce
LuffyDMonkey
Lufidius
Lufue
+Lug RS
+Lugal Ki En
+LugiaWaifu
Luglys
Lugs
Luider
Luigihbk
Luis
+Luis Anico
+Luis Antonio
+Luis Dk
LuisFarm
+Luis_Vzla
Luka
LukaBrasi
Lukas
+LukasFlux
Lukaz
Luke
+Luke S
Luke3
LukeOS
Lukeee
LukefonFabre
+Lukeh
Lukeicth
+Lukesfish
LuketheDM
Lukey294
+LukeyUK
Lukezz
LukiOne
Lukiekuipie
+Lukio W
Lukiss
Lukoo911
Lukse
Lukytisz
+Lulani 13
+Lulla
Lullie
+LuluTheCat
+Luluca
Lulucifer
+Lumber Yak
LumberStevo
+Lumbidge
Lumbo
Lumby
+LumbyCalled
LumbyCastle
+Lumbys Waits
Lumiaris
Lumifrost
Lumimies
+Luminatti
+Lumm1475
Lummer
Lumo
+LumpiaFan69
+Lumpqua
+LumpsMcgooey
Luna
+Luna Koneko
+Luna Lucero
+Luna Mexi
Lunacy
+Lunaec
+Lunamarie
Lunar
+Lunar Haze
+Lunar Lotus
+Lunar Tear
+Lunar Tones
+Lunar Ursa
LunarDemon99
LunarEquinox
LunarSC2
+LunarTheCat
LunarTigerr
+Lunarann
+Lunarcrow614
Lunardini
Lunarism
+Lunarmoat638
Lunate
Lunati
Lunaticmo1
Lunatric
+Lunaverse
Lunch
+LunchboxLLC
Lunchtime007
Lund
LundXCV
Lundh
Luneasa
LuneyTunez
+LungTied
+Luni
+Luniaxis
Lunie
+Lunier
Lunis
Lunizzzz
+Lunytic
+Luonteri
Luonto
Lupah
Luper
+Lupi
+Lupo
+Lupuloid
Lure2G
+Lurjus
LurkinTurd
+Luru
+Lush Vibes
Lusitropy
Luskidoo
+Lussen1
+Lustwaffle
Lusu
LusyTheGoat
Lutha
Luthien
+Luthien T2
Luthors
Luthstorm
Lutinrouge
Luucy
Luud
Luukie
+Luuloterve
Luuseri
+Luuuseri
Luuuuna
Luuwana
+Luv2spuj
+Luver Focker
Luvholic
Luviii
+Luwucy
+Lux Please
Lux211
Lux7thSaga
Luxatio
+Luxeo
+Luxilie
Luxire
+Luxoul
+Luxumine
Luxury
+Luya
Luzu
+Lv ranger
+Lv 5 Psyduck
+Lv Camo
Lv100
+Lv100 Raichu
+Lv5 Treecko
LvI3stak3
+Lv_1_Mew
+Lvcretivs
+Lvl 1
+Lvl 3 Nub20
+Lvl 99 Goon
Lvl100cheese
Lvl30Ditto
Lvl99
Lvl99Docking
LvlUpUrself
+Lvls Up
Lvqquvs
+Lwy
Lx1I
+Lxbe
+Lxfleur
+Lxnes
+Lycix
+Lycoe
Lycstoned
Lyct
LydeZGrod
+Lyderis
Lydia
+Lydia Kenney
Lydmix
+Lyfe Tyme
Lyin
+Lyin Eyes
+Lyke625
+Lyks
+Lymaks
+Lymez
+LynX ZrLeX
Lyna
Lynamet
+Lynching Leo
Lyngo
+Lyni
Lynics
Lynx
+Lynx Jitan
+Lynx Tiger
+Lynx Titan
LynxTitan
Lynxes
+Lynxy
LyraLyraLyra
+Lyrad002
Lyrich
Lyricidal
+Lyrilusc
Lyron
Lysandra
+Lysdexic4986
Lyse
+Lysmann
+Lyyli PL
+Lyzu
Lzin
+Lzs
+M A G 3
+M 1 KE
+M 3 3 P
+M 4 T R I X
+M 8 A 1
+M A D O X
+M A D Storm
+M A T E J
+M A X O U T
+M A X PAYNE
+M B Z
+M E H I S
+M E L D O
+M E T R O
+M E X I
+M I K B A R
M I T H O X
+M I U
M I Z Z O U
+M INDGAME
+M Itty
+M K J
+M O B I L 3
+M O C 0
+M O C H
+M O ID O K
+M R NaCl
+M Super Buu
+M T C
+M U D K l P
+M X G P
+M a V 3 Rick
+M a d Shrumn
+M a k a i
+M age
+M aikel
+M ak0
+M ammoth
+M ana
+M ankDemes
+M anu
+M aples
+M arcel
+M arquim
+M artin
+M ask
+M athis
+M axou
+M azzz
+M c
+M elz
+M enzy
+M ga
+M gh
+M i t c h y
+M i y a
+M ikasa
+M ike
+M imik
+M int
+M itchel
+M ittens
+M l Q Q
+M merz poL9
+M o C e
+M o r t e n
+M oist
+M onkfish
+M orytania
+M the Maxed
+M ugger
+M ulas
+M urphy 2
+M usashi
+M-theory
+M00CHIE
+M00SE M00SE
+M01
M0IST
+M0IST B0X
M0LE
M0NALISA
+M0NEYM1TCH3
+M0NST3R1PP3R
M0ON
M0ONCAKES
+M0R TEN
M0RG0TH
M0RGE
+M0SS3Y
+M0ST D0PE
+M0hannad
M0ist
+M0ist Midget
+M0ney Swag
+M0nk3y DLufy
+M0nke y
+M0nkey15
M0nsterTuk
+M0obs
+M0resheth
M0rningstr
+M0use
M11CK
+M11ka
M1911A1
+M1GU
M1NG3_GOO
+M1TTLE
+M1ch
M1gos
M1ke50
+M1ksu
+M1nd Master
+M1ntberry C
+M1ss Di0r
+M1stak3nly
+M26
+M3 L
M30W
M30z
+M3GAD0UCH3
M3L10DA5
M3MEL0RXD
+M3MoRY
M3X1CO
M3XICO
+M3ch4nics
M3ll3
M3lllll
M3lviin
+M3ntal
M3rking
+M3ry
+M3t4l1n1S
M40A
M4D399
+M4g3
+M4g4z
M4gnus666
M4k3d0
M4tte
M4xt0R
+M5
+M52
M523
+M6 Mill
+M6N
+M7J
+M7TT
M855A1
M8NoFreebies
M8TT
+MA N E
MAAAAK
+MAAGES
MACKOGNEUR
MADLADz
MADRNGJACK
+MAESTR0FRESH
MAFKINCHAMP
MAGA
MAGA1292011
@@ -13919,140 +29248,275 @@ MANT4S
MARCOPOLO
MARLB0RO
MARMlTAO
+MAS0N
MASKED
+MASSGAINER32
+MASTER DREAM
+MASTER J0KER
MATUTVlTTUUN
MAURERA79
MAUROPICOTTO
MAX3D
MAXABILITY
+MAXED PINOY
+MAXXEDDADDY
+MAX_HER0X
+MAXlME
MAlNEVENT
MAlNTENANCE
MC Cheep
+MC catheter
MCBURNOUT
MCHammered
MCKenny91
+MCSIZZLE
+MCmattt
+MD7
+MD96
+MDE Presents
MDPS
+MDaher
+MDucks
+MEAT G0D
+MEAT HEAD36
MEGATRON
MEK4KK4KK4KK
MELAN00MA
MELT
METM0NKEY
+METR0lD
+METS0
+MEV4NS
MF DC
+MF MORTEN
+MF SofaKing
+MF TEE
+MFE
+MFKU
+MFLI
MFSTEVE
+MG5
MGFS
+MGKRevs
+MGM WAY
+MGreengrass
+MH Therapist
+MHA C
+MHBC
+MHS
MIDAs
MILFmauler
MILSHAKE
MINH
+MISOGl
MISSYGAMlNG
MIST
MITCHY
MIX0R
MJ23
+MJKaboose2
+MJT
MK-HARDSTYLE
+MK6R
MKAM
+MLB
+MLTEEZY
+MLaidman
+MMMahogany
+MMORPGenius
MMTera
MMitchh
+MMtheMachine
+MOABDADDY
MOMHUNTER666
MON5TER
+MOODSWlNGS
MOOSEM3AT
MOTM
MP17
+MP9
+MPB
+MR JOHN WlCK
+MR LETHAL2u
+MR REET
+MR TMR
MR UDZ
+MR556A1
MRButter
+MRC Tugboat
MRGAMEZ
MRHD
+MRLARGE
+MRM
MRPlZZAPRIZE
MRWHlTE
MR_MAITO
+MSPaint64
+MSceneFF
MSpacePotato
MStarkz
MTBMB
+MTPETE
+MTV CRlBS
+MTXP
MUISSS911
MULHERndaEXP
MUMM0
MURMELl
MUSK
MUSK0KA
+MUSUMUMM
MUZAMMIL
+MV Flow
+MV Welshy
MVIII
+MVKirby
+MVP HERO
+MVP Mahomes
MVRDA
MVTIASD
MWwarzone
+MY L U N A
+MYRSKYVIITTA
MYTHICROYXLE
M_Sariol
+Ma Band
+Ma Dood
+Ma Titi
+Ma t t h e w
+Ma5onx
Ma7e
+MaCoMb
MaHeelsHurt
MaJeShTic
MaQtPie
MaX662
+MaXam00se
+MaXeDSani
+MaXx0wnage
Maacc
+Maake88
Maanman
Maasegyr
+Maax2
+Maaxiking
Maazako
+Mabbbs
Mabbs
Mabel
MableLake
Maboe
+Mac Diver
+Mac Donald
+Mac Garfield
+MacDuff
MacFredrik
+MacFredrique
MacMillers
MacMoblins
+MacRae
MacSandwich
MacTheRipper
Maca
+MacaFazoL
Macabre
+Macaron
+Macaroni 73
Macaronni5
MaccaM
+Maccaroni
Macduffe
+Mace Windu
Macedo
+Mach Sigma
+MachV2
Machado
Machfredy
+Machine Girl
+MachoTimo
Machtig
+Machtige
Machtigeman
Machtigemeid
Machto
Mack
+Mack x
+MackD
+Mackadactyl
Mackadee
Mackdizzle99
Mackeo
+Mackerel Sky
+Mackerels
MackhNL
+MacksEntropy
MacksIsland
+Maclairin123
Maclas
Macoinho
Macre demia
MacreedyLove
Macromage1
+Mad Dog Eris
+Mad Flavour
+Mad Krampus
+Mad Max 20
+Mad Papper
+Mad Suss
+Mad Vlad
+Mad Watson
+Mad X
+Mad arrows12
+Mad as heck
MadBoy20
+MadBruh
+MadCanadian
+MadChemist8
MadD0g11
+MadD0gL4d69
MadDogged
+MadJeffs
MadKingMikey
MadMaxMan
+MadPubes
MadSnowman23
MadaRook
Madaddam
Madam305
+Madarah
+Madd177
MaddAntelope
+MaddMann5
Maddape
Madddiieee
Madden
+Maddie Baddy
Maddogjr
Maddux
Maddy
+Made of Sand
Made4Slaying
MadeInAfrica
+MadeYouClick
MadeinTYO
Madeiraa
+Madeleine
Madeweine
Madhu
Madlaina
Madmaxie
+Madness Max
+Madodee
Madona
+Madra
Madrock01
MadsG
Madsenn
Madsermad
+Madshatter71
Madskillz756
Madslasher30
+Madslax2
Madsosaur
Madula
Madvantage
@@ -14062,48 +29526,83 @@ Madysen
Madza
Madzilla
Maeda
+Maegera
Maela
MaerlinTaz
Maertynas
Maester
+Maester Trea
Maestro
+Maestro Heil
+Maestro1
+Mafia-BP
MafiaMan
MafiosiDad
Mafooma
Mag1c
Mag1cJohnny
Mag1c_W33d
+Maga Kahn
Magalator
+Magani C
Magawie
Magc
Mage
+Mage Eh
+Mage Kume
+Mage N Skil
Mage7master7
MageFish
MageHax
+MagePriece
+Mager
Magerold
Magers
Mages350
+Magestus
+Magethirst
Magezi
+Magggorical
+Magginator
Maggot
MagiTurtle
Magic
+Magic Bonus
+Magic Clicks
+Magic Mackee
+Magic Moose
+Magic Rino
+Magic Tree
+Magic Wand
+Magic fTail
MagicAppel
+MagicMemorys
MagicPanda91
MagicSchoBus
MagicSilver
Magic_Elmo1
Magical
MagicalRuby
+Magican
Magicarp
Magicbox
Magicdefence
Magicken
+Magicx
+Magija
+Magik
Magik773
Magikilo
Magiok
+Magisteerial
+Maglet
Magma
+Magnaboy
+Magnati
Magnautism
Magnesium
+Magnesium J
+MagnesiumIV
Magneticism
Magnetite
Magni99
@@ -14111,99 +29610,217 @@ Magnifice
Magnilo
Magnis
Magnu
+Magnus Gram
Magnusungam
+Mago
+Magsd1
Maguneru
+Maguro
Magus
+MagusChum
Magyk
+Magzem
+Mah Jae
+Mah Jong
MahSeed
Mahalusa
Mahanimal
+Mahe
Mahkelroy
+Mahler
+Mahmoud
Mahogany
+Mahomes
+Mahonoken
Mahtitykki
Mahzius
+Mahzka
+Mai kel
+Maiba
+Maide
+Maidenheir
+Maignansdead
+Maikel J
Maikhol
+MailTime
Mailor
Main
+Main 3s
+Main Cactus
+Main Ginger
+Main J0urney
+Main Mynt
+Main Natey
+Main Pando
+Main Path
+Main Product
+Main Twiddle
+Main Wario
MainCharlie
+MainCoach
+MainCringe
+MainDong
MainForever
+MainHamendex
MainHolm
+MainJ
+MainMan_Mads
MainNudley
MainPurp
MainSt
MainStand
+MainStreamx
MainWabbit
Maind
Maindeer
+MaineDeno
+Mainline
Mainly
+Mainly Pure
+Mainly Ricky
Mains
+Mainslet
+Mainuru
Mainz
+Mainz Gainz3
Mair
+Mair017
Maisa
+Maisa Torppa
Maisteri
+MaitoRimpula
+Maix
+Maizon
Maizpilao01
+MajMischief
MajQ
Majakanvahti
Majcew
+Majcew 2
Majehjk
+Majer4
+Majin Buuwu
+Majinbooo
Majinjon
+Majki
Majokko
Majooty
Major
+Major Damien
+Major Gains
+MajorEar
MajorMammoth
+MajorObesity
MajorOwnz
MajorSnizz
+Majora
MajoraMasked
+Majoras WRLD
Majzako7
+Maka
+Maka2201
+Makagago
Makaule
Makaveli
+Makaveli I
+Makaveli II
+Makaveli l
Make
+Make A Pile
Make Carrion
MakeItStack
+MakeMeKing
MakeNotes
Makeboy
+Makeeesful
Maken
+Maken Gainz
MakenMakkara
+Makenna
+Makhachev
+Maki
Makilake
+MakinExcuses
Makiverem
Makk
Makke
Makkeii
+Makker Benja
+Makker Trane
Makkiavelli
+Mako Nox
+Makoea
+Maks Cape
+Maksimit
+Maksoinvelat
Maksuamet
+Maksui
Maksukka
+Makzd
MalaLechita
+Malachai
Maladec
Maladiec
+Malagah
Malbec
Malboulgea
+Malcz
Malding
Male
Maleurous
Malfoy
+Malhavic
+Mali RS
MalibuMan96
Malibuux
+Malignant00
Malik
Malinerix
+Malitiae
+Malkav
Mall
+Mall Gang
+MallbuRo
Malleus
Malli
+Mallieero69
Malloc
+Mallomar
Malmi
Malmot
+Malomalo
+Maloo
Malqy
Malse
Malt
+Maltapkiller
Malteadita
+Malter
+Malterz
Malucoftw
+Malurian283
Malvian
+Malvidus
Malvoliuus
Malware
Mamachii
+Mamas Meat
Mamba
+Mambaaaaaa
MambasWRLD
+Mambo No5
+Mamboita
Mammad
+Mamoul
Mamupatja
+Man Asian
+Man Bag
+Man Killa77
+Man Kip
+Man Raccoon
+Man Throater
+Man gos
+Man-Yak
ManBearPiggy
ManGoBzzzt
ManOfGold
@@ -14213,20 +29830,30 @@ ManWT
ManWoox
Manaburna
Manafont
+Manakiel
ManakuraJP
Manantti123
Manantti321
Manardog
Manawatu
+Manby
+Mancandy
+Manchest
Mancino
Mancunion92
Mand1ng0
Mandelbrot
+ManderSala
+MandoCheese
Mandor1
Mandred
Mandulorian
Mane
Manegaming
+Maneirinho
+Manelzera
+Maneter56
+Manevolent
Manfa
MangJoe
MangeMeister
@@ -14234,95 +29861,179 @@ Mangle
Mangled
Manglican
Mango
+Mango Monkey
+Mango Rat
+Mango Season
Mango10
Mango1997
+Mangobnana
+Mangostangos
Manhoos
Manhunt
+ManiacBison
+ManicNode
ManicRS
Maniek
Manila
Maniwani
+Manju
Manke
Mankitten
+Manlanter
Manletti
Manly
Mannekeuh
+Manni Penny
Mannie
+Mannix270
Mannjpip
+Mannnekala
Mannowrath
+Manny21
+Manokin
Manor
+Manorvic
MansaMusa
Manser2300
Mansup5
+Manswarm
Manswers
Manta
+Manta Wray2
+Mantarayo
MantasA
+Mantaslocoo
Mantelio8
+ManteliseXe
+Manthe
MantorokDIA
+Mantoshka
Manttt
Manuelh3
Manumatti
+Manx_Scaper
Many
+Many Walrus
Manyi
Manyvids
ManzGotViewz
Manzo
+Maose
+Maozn
+Mapanza1
Maple
+Maple Jay
+MaplePoutine
+MapleRoyals
+MapledOaf
Maplejuana
Mapletech
Mapne
Mappl1n
+Mappzz
Mar0e
Mar782
Mara
+Maracruz
Maradonaa
Marassa
Marathonius
Maraud
Marblez
Marc
+Marc NL
+Marc Paul
+Marc Spac
MarcVinicius
Marchmello
Marchuk
+Marcia Ress
Marcikarp
+Marcilicious
+Marcius 7
+Marco225
+Marco7k
Marcoli64
+Marcoo
Marcooow
+Marcos Vibe
+Marcski
+Marcussius
Mardiie
Marducas
+Mardy O G
Mardzz
Mare
+Marenki
+Maret
Marg3
Margana
Marganer
+Margiella
Margins
+Margodx
+Margon
+Margonite Xu
+Marguana
Marheim
Mari
Marianas
+Mariano 1
+Mariasonic
+Marib
+Marijuano
+Marikadere
Marines
Marinez
+Mario Bros
+Mario Goatse
+MarioKartDD
MarioTennis
Marioh
MarioisKewl
+Marioman
Marioneta
MariosPeach
+Maritime
+Maritozzo
+Marjapuuro
+Marjatta
+Mark Pledger
+Mark Swenson
+Mark-777
+Mark-Zuk
+Mark0vDeath
Mark12387
Mark1ta
+Mark5Barki
MarkBuns
+MarkJongejan
Markald87
Marke
Markerr
+MarkhamON
Markie994
Markipedia
+Markku
Marklyft
+MarkoOSRS
Markop100
Markovia64
+Marks Main
+Marks Phone
+Marks lron
Markus
+Markus Stier
+Marky428
Marlbrozo
Marleth
Marleyy
Marlin1993
+Marlon0817
MarlonisGod
+Marlooo
Marlopped
+Marluxia Pwn
Marmita99
Marmp
Marms
@@ -14332,40 +30043,66 @@ Marni
Maro202
MaroO
Maroj
+Marokkaan
Marokkaantje
+Maroko111
Maroon5
Marpollo
MarquiseDmnd
MarrCuzz
+Marrcy
+Marreldil
+Marrer
Married
Marrio
+Marrius
Marro75
Marsal
Marsalkka
+Marsel
Marsg
Marsgl
+Marsh Marrow
Marsha
Marshal
Marshall1
+Marshmont
Marshyy
MarskiLark
Marsmash
+Marsovec
+Marstead
+Marswatt
Mart0103
Marten
+Marten x
MarthProMonk
Martial
+MartianLynch
+Martiba
+Martiiian
+Martijn
Martika
Martin
+Martin 2007
MartinGameTV
+Martindeq
Martinjsh
Martinkyle20
Martins
Martinside
+Martip
MartnShkreli
+Marty
+Marty150
MartyG
MartynMage
+Martyr Main
+Maruna
Marv
Marvelli
+Marvick
+Marvins Dad
Marwan
Marwin
MarxRoux
@@ -14373,16 +30110,22 @@ MarxTheMyth
Mary j4n3
Maryj
Maryland
+Marylandd
Marzcorw
+Marzeo
Marzhy
+Masaca
Masacre599
+Masade
Masago
Masakado
Masandalf
Maschok
Masconomet
+MaseLitt
Maserati
Mash
+MashedOP
Mashimarq
Mashiwo
Masin
@@ -14390,31 +30133,57 @@ Masiron
Maskedpump
Maskin
Masochisttwo
+Mason OSRS
MasonJarr
Masonatorr
Masonitte
+Masons Dong
+Masoo
MasquedMan
+Masryy
+Massa
+Massacre Fc
+MassageMan97
Massif
+Massimo130
Massinissa7
Massive
+Massive Noob
+MassiveJonas
Masss
Massterduel
+Mast3rOogway
MastaHeff
Master
+Master Bakes
+Master Bogs
+Master Byro
+Master Garni
+Master Jos
+Master M V
+Master Riven
+Master Skizz
+Master Vates
MasterB1994
+MasterBarter
MasterBlazee
MasterDragxn
MasterGrogu
MasterKiefff
+MasterMake
+MasterMasa2
MasterNeigh
MasterOzzy
+MasterPanda
MasterPookie
MasterRooshi
+MasterSlayrr
MasterThresh
MasterX
Masteragota
Masterbihno
Mastercat
+Masterdemon4
Masterflick
Masteri
MasteriMori
@@ -14422,43 +30191,79 @@ Masterkindem
Masterrgod
Mastervile
Mastirida
+Masturbeerke
+Masurda
Masuro
Masylvain
+Mat 1
+Mat Jacko
+Mat Share
+Mat thew11
+Matchbox 20
Mate
Matematikk
+Materium
Mateusz1210
Math
+Math Is Fun
+Math ematic
MathVibes
Mathcore
+Mathematics
Matheor
Mathers
Mathers1996
Mathew
Mathias
+Mathias Nemo
Mathisse
Mathmic
Matholemeu
+Mathrotus
Matieus
Matix
+Matkijanarhi
Matmo
+Mato Seihei
MatoPotato
Matoaca
Matrak
+Matreex
Matrix
Matrixpachi
Matruusi2
Mats
+Matsu
Matsuri
Matsyir
Matt
+Matt 162
+Matt Bman
+Matt CFK
+Matt Cat
+Matt GIM
+Matt K
+Matt Lad
+Matt Mo
+Matt Slay
+Matt Smash
+Matt V
+Matt Wy
+Matt1494
MattLeedz
MattMattBro
+MattNDew
MattRanger
MattRoux
MattSeal7
+MattStyle
+MattWallet
Mattaclysmic
+Mattakuda
Mattam66
+Mattaroo
Mattec
+Matteos1
MatterOfTime
Matternot
Mattex
@@ -14468,29 +30273,52 @@ MatthewDK
MatthewRS
Matthewwww
Matthidan
+Matthis
+Mattias
Mattice
+Mattie osrs
Mattie43
+Mattj
Mattniss
Matto
+Mattor
Mattorel
Mattrate
Matts
+Matts RNG
Mattsbro
Matttbob
Matttt
+Mattty
+Mattus50
Mattx1
Matty
+Matty A
Matty Gibbs
+Matty Ic3
+Matty467
+MattyChasee
+MattyLight91
+MattyNW
+Mattych
Mattyflight
Mattys
+Mattyz6
+Matu btw
Matuba
Mature
Matwo
+Matygoyo
Matz
+Maub1
+Maucca
Mauddibb
Maui
MauiBeach
+MauiMallard
Mauidude
+Maukas
+Maukka
MaukuMaija
Maul 0n Top
Mauler4500
@@ -14500,80 +30328,234 @@ Mauna
Mauno
Mauricio555
Maury
+Mauvayy
+Mauvier
+Mavdagin
Mavel
Maven
Maver
Maveric
Maverrick
+MavicAir
+Maviie
Mawch
Maween
+Mawie
+Mawlocke
+Mawn
+Mawsen
+Max 4 Mikey
+Max Ape
+Max Attacken
+Max BD
+Max Blacks
+Max Botter
+Max Cape
+Max Deiron
+Max Eff
+Max Entropy
+Max Gadget
+Max Gav
+Max Here4Pet
+Max House
+Max Karma
+Max Klett
+Max Methi
+Max NoLyfer
+Max O7
+Max Obi
+Max Pkr
+Max Puffs
+Max Re3oo
+Max Relax
+Max Scape
+Max Snek
+Max Temper
+Max The Hero
+Max Tilting
+Max Tonks
+Max Vandal
+Max Weezy
+Max Wotif
+Max XP
+Max Zack
+Max Zeus
+Max btw
+Max cape 420
+Max hits
+Max killz6
+Max plus
+Max uwu
+MaxAchoo
+MaxAnarchy
MaxBTW
+MaxBadAss
+MaxBear
MaxHare
MaxHaus
+MaxHomieJose
MaxIgnorance
+MaxIrl
+MaxKhalifa
+MaxMainJake
+MaxMuffin
MaxNeander
MaxSAVAGERY
MaxTix
MaxTurbo
+Maxchar
+Maxd
Maxe2968
Maxeado
Maxed
+Maxed Beans
+Maxed Code
+Maxed Egirl
+Maxed Emm
+Maxed Eric
+Maxed Groot
+Maxed Hippo
+Maxed II3en
+Maxed Jeff
+Maxed Kiraly
+Maxed Loser
+Maxed M0bile
+Maxed MVP
+Maxed Masak
+Maxed Newfie
+Maxed POH
+Maxed Phells
+Maxed Rat
+Maxed Rob
+Maxed Scaper
+Maxed Spyike
+Maxed Total
+Maxed Twice
+Maxed Velho
+Maxed Whip
+Maxed Zeb
+Maxed Zuk
+Maxed osrs
+Maxed when
+MaxedActuary
+MaxedBruh
+MaxedBurnout
+MaxedButPoor
+MaxedFrog
MaxedIn2074
+MaxedInDa6ix
MaxedMain
MaxedMax751
MaxedMike
+MaxedMobile
+MaxedNbored
MaxedPleb
+MaxedRepel
MaxedYP
Maxedlegacy
+Maxedtoasty
+Maxedwell
Maxell
Maxerder
Maxiboy4a9
+Maxidy
Maxime5100
Maximonster
Maximum
+Maximum Tier
Maximumist
+MaximusAM
+Maxinator87
+Maxing zzz
+MaxingMyMain
+MaxingSucked
+Maxingthis
Maxiorek1200
+Maxisbaws
+Maxisen
+Maxitaxi777
Maxiu
Maxjuhhhh19
+Maxkenzi
Maxmemix
Maxnominus
Maxo
+MaxoBlasto
+Maxoou
+Maxpappy
Maxpro
Maxst
Maxstalker67
+Maxstatz
+MaxtanosXD
Maxwall
Maxx
+Maxx y
+Maxxed Alt
+Maxxed Dusty
+Maxxed Trash
MaxxedNoob
+Maxzet
MayanFuror
+Mayate
+Maybe CIA
+Maybe Idiot
+Maybe Jeff
+Maybe Shady
MaybeMason
MaybeMitch
Maybemnam
Maybez
+Maybizzle
Maybon
Maydole
+Mayerdynn
+Mayhaps
Mayhem
+Mayhem Maker
MayhemMakers
Mayl
Maylive
+Mayo
+MayoForFunds
Mayonaz
Mayor
+Mayor Jiwana
Maytona
+Mayuri
+Mayushii
Mayvex
Mayweather
Maz0n1k
Maza
Mazala
+Mazande
Mazariner
+Mazauu
+Mazda168
+Mazdan
+Mazdaspeeed3
+Mazdraith
+Maze
+Maze of Iron
+Mazel613
Mazersyy
Mazhar
Mazlol
+Mazmarazor
Mazoni
Mazpls
Mazta
Mazuma
+Mazz y
Mazzacre
+Mbox
Mbyoo
+Mc Dragans
+Mc Florry
+Mc Red
McAlakazam
+McAsssBlast
McBurn
McCheddabomb
McChimkenGOD
@@ -14581,204 +30563,402 @@ McChubbin
McCllin
McConaughey
McCreJ
+McCringle
McCune
McDanky42O
McDizzle15
McDongles
+McDoodle_21
McDouble
McFantasy
McFizzleDady
+McFly93
+McFozzar
McGooser
+McGorm
McGregor60gs
McGruff
+McHammock
McIllu
+McIronLeech
+McKennon
+McKerma
+McLOVlN
+McLaeNz
McLeaNz
+McLemore
+McLovin707
+McLowry
McMeekin
McMillan
McNeal
+McNoob10
McNoodle
+McNorm
McNugget
McP0P0
McQuaker
McQueensy
McRibs
+McRibs Back
+McRip
+McSchloogan
+McShrubbery
McSomf
+McSplitter
McStarley
McSuperNoob
McTaskupillu
McThomzie
+McVittties
+McWeaksauce
+Mcards
Mcbelsito
Mcberra
Mcdally
Mcgingerpony
+Mcgregorini
Mckelvie
Mckinconn
Mclaren88
+Mcneill
Mcpatrice12
Mcpielover
Mcturdson
Mcwaffle1
+Mcy
+Mderg
+Mdub Suhh
Mdzvwz
+Me Acoustic
+Me Ca
+Me Dead
+Me No Brains
+Me Woody
+Me and Jr
+Me lvin
+Me phisto
Me3lem
+MeBigPoppa
+MeBlast
MeMillionthD
MeThudZ
+MeTwo
MeadowFall
Meadows
MeagerSkills
+Meals
Mean
+Mean Crusher
+Mean Street
Meano
+MeanrangerFE
Meap
Mearm
+Mears
Measles
Meat
+Meat Rat
+Meat Shank
+Meats
Meatspot
MeatyLoaf
+Meauner
+Mebo
Mech
+MechantBozzo
+Mechaodin
Mechelen
+Mechvengance
+Mecidon
Mecone
Mectofion
+Meddler
+Meddlr
+Medi Mobile
+Medi i
+Medi ocre
+Medical Herb
Medicate
Medicides
Medicinal
+Medicore
+Medievh
MediocreMatt
MediocreRye
MediocreTime
Medispensary
Meditations
+Medium Cloo
+Medler
Medoletics
Medon
Medorable
Medusa228
MedwayDragon
MeechIsCute
+Meechy Dark
Meeeseek
Meelays
+MeenBeans
+MeepBeepMeep
+Meeran
Meerca
+Meerkz
Mees126
MeesKees
MeetMyMeat
+Meetti
Meew
+Meewerp
+Mefaustofele
+Mefco
Meftah
Mefy
+Meg 3
Mega
+Mega Butt
+Mega Farce
+Mega Kyle
+Mega Mort
+Mega konn
MegaAmpharos
+MegaDoris
MegaDrive
MegaMustarn
MegaNaziHatr
Megabyte6
Megadwarf47
Megalo
+Megalodont
+Megamanyo
Megamind
+Megamind Jr
Megans
Megaronii
+Megastoffe
+Megatortle
Megatrax
+Megis
Megnificent
+Megpan
Megumin
Megustio
+Meh Noob
+Mehrunes
Mehts
Mehuelin
+Mehuo
MeideC94_BB
+Meido
Mein lron
+Meinkul
+Meiousei
+Meister Sho
+Meiyo
+Mek
+Mekaanik
Meklo
Meksa
+Mel Meow
+Mel Yakutia
+Mel btw
+Melanderr
Melanoma
+Melayna
+Melc0n
Melchuzz
Melcoor
Meldianx
+Meldynoir
Melee
Melee_Range
+Meleny
Meleven
Melhoop
+Meliodas420
+Meliodin
Melisma
Melk
+Melkin
Melktietje
+Melkzuurtje
Mellakka
Melleruds
Melling
+Mello Gello
+Mello Yello
+Mellodynamic
+Mellow Jingy
+Mellow Tones
Mellow6
MellowSoul
MellowTokes
Melly
+Melly YNW
Melo
+Melodicolt
Meloenschijf
+Melongrab
+Melotoninn
Melpan
+MeltedCash
Meltman
Meltok
+Meltryllis
+Melvin dew
+MelvinTheOK
MemberBerry
Memberlist
Meme
+Meme Loord
+MemeDoge111
+MemeVendor
+Memedalorian
+Memem3
Memeologist
Memeshake
+Memmor
Memory
MemoryCard
MemoryWorm
+Memphis lol
+MemryLoss
Mena
Menap
Menaza
Mend
+Mendicant
Mendieton
+Mendokusai
+Mendota
Meneer
+Meneer Nijn
+Menesus
Menetoeihin
+Menial Luck
+Mennie
Menrey
+Mensphysique
+Mental Coach
Mental4Metal
MentalAbacus
Mentally Moo
Mentalmissy
+Mentoes
+Menyu
Menza
+Menzola
+Meoooow
+Meow Ghost
+Meow Im Hawk
+Meow Softly
MeowKiki
Meowed
+Meowgi
+Meowler
Meowmagic
+Meowrijuana
+Meowskeys
Meowtheduck
+Meowzer7
+Mepiff
+Mepn
Mepthadr0ne
Mer Train
+Merami fan
Meramon
+Meraxus
+Merbz
+Merc-Raa
+Merc_Lobo
+Mercedes F1
+Mercenary V
Merces
+Merch
MerchantUrch
+MerciTwingo
Merciulago
+Mercphobia
Mercules
+Mercury Owl
Mercury15
Mercy
+Mercy Osrs
+MercyfulFate
Mercys
+Merderr
+Mergician
Meric
Meridians
+Meris
Merisalu
Merisorax
Merkdalat
+Merke
+Merked Ko
Merksick
Merlin
+Merlin Otter
MerlinMonroe
MerlinPT
Merloc21
Merlucius
+Merlvin
Merricat
Merry
MerryTuesday
+Mersunperse
Merten
Mertguy2p0
Mertiin
+Mertjaars
Mervyn
Meryam
Meryath
Meryl
+MesH3aL
Mesa
+Meshi510
+Meshkot
+Mesin
+Mesmeriize
+Meso cyclone
Meson
+Messaa
Messersmitti
+Messi
Messias
+Messorium
Mestari
+Mestaristick
+Mester B
MesterAbekat
MestreGlados
+Met Promise
MetDoobie
Meta
+Meta Mammoth
+Meta l
+MetaCTF
+MetabolicPro
Metadragon
Metafisico3
Metagel
Metal
+Metal Booty
+Metal Little
+Metal Shad0w
MetalGear
+MetalMaiden3
+Metalest
Metaling
+Metallic Neb
Metallifog
MetallikDeth
Metallproz
Metalproz
+Metamorphic
Metamorphs
Metamushroom
Metaphwoar
@@ -14787,45 +30967,89 @@ Metaxia
Metbol
Meteora
Meteoriitti
+Meth Teeth
+Methal
Methodical
+Methusal
Methylanara
Metix
Metoprolol
Metropolia
+Metsavaras
Metselaar
Metsiq
Metters
+Metukka
+Metzifer
Metzz
+Meulendijks4
+Meune
Meuosh
Meur
+Meuyou
+Mevvz
MewIlicious
+MewPulse
Mewby
+Mewli
Mewllicious
Mewrad
Mewtwo
MewtwoKing
Mewww
+Mex Arkantos
+Mex_N_Flex
Mexicanchild
MexiePie
+Mexlet123
+Mextex
+Meykaa
Meymer
Mez-qt
Mezane
Mezecs
+Mezenburn
Mezeroth
Meziriti
+Mezmereye
+Mezomel
Mezy
Mezzalarry
Mezzito
+Mf Fe
+Mfey
+Mfin Taylor
+MfknNewports
+MgZz
+Mglegolas
+Mgn
+Mhh
+Mi Hoy Minoy
+Mi1os
+Mi3pelst3in
+MiAdidas
MiIIenia
MiIIers
MiQuu
MiTDro
+Mia Kalphite
+Miacon
+Miami 305
+Miami Cane
+Miami Rebels
Miasm
+Miawnation
+Mibs
+Micaso
+Miccolo3
MiceMan
+Micecream
Micella
Mich
+Mich Bz
Mich49
Michael
+Michael4655
Michael67676
MichaelB
MichaelScarn
@@ -14838,103 +31062,203 @@ Michanderma
Michano1992
Michaud
Michel647
+Michelau
+Michelle jnr
Michiel
+Michiel_96
+Michinaki
+Michism
Michlenn
+Michxa
+Michy Man
+MickZagger
Mickael
+MickeyJoe
Mickeyr4nge
Mickul
Mickyy
Micosa
Micro
+Micro Cosmic
+Micro Nerd
+MicroButt420
MicroShrooms
Microdot
+Microgolf
+Microman0000
Micromelo1
+Microo
+Micropyle
+Microsoft22
+Mictie
+Micxyz
+Mid Fade
+Mid Pack
+MidValley
+Midareru
Midas224
Midday
+Middelkerke
Midget
+Midget Bones
+Midget Rave
MidniteGreen
Midori
+Midori Enju
Midside
+Midway16
+Midweeks
+Midwife Dan
Miega
+Miegalius
Miekka
Mier
Mierdapier
Mies
+Mies Lapsi
+Mig Wizard
Migalos
Miggles
Mighty
+Mighty King
+Mighty MP1
+Mighty Milk
+Mighty Oak
+MightyDolt
MightyNemo
MightyOrange
MightyPieBoy
MightySlappe
+Mightyfrosty
Migjiris
Migou
+Migrainelife
Migraines
+MiguelDyson
Miguu
Migy
Migzee
+Mihu o_o
+Miiammi
+Miig
+Miiiild
+Miika
+MiikeyG
Miillls
Miiori
MiissMandii
Miitt
+Mij
+Mijae
+Mijniebelle
Mijuzo
+Mik
+MikTheKing
+Mika Kuwait
+Mika x
+MikaDMM
Mikael
Mikasana
MikazuAugus
Mike
+Mike DIY
+Mike Davis
+Mike Hochuli
+Mike Hunt
+Mike Mike
+Mike Unit
+Mike Xp
+Mike-NL
Mike1
Mike745638
MikeChang
+MikeConleyJR
MikeDangr
MikeDitka
+MikeHasMoobs
MikeM
MikeMontana
MikePunts
+Mike_Oxmaul
Mikebaker417
Mikeey
Mikeje13
MikelCz
Mikemyers31
Mikerockshhh
+Mikeroscape
Mikeroscope
+Mikes1995
Mikethafarm
Mikey
+Mikey B
+Mikey Bai
+Mikey Hey
+Mikey Milk
+Mikey x
Mikey1plate
Mikey47745
+MikeyBigDick
MikeyPat
Mikeygirl94
Mikeyscape
MikeyyG
+Mikezalwinnu
Mikezilla
Mikezzup
+Miki4
Mikilly
Mikki
Mikkon
+Mikouich
Mikrobangine
MiksuBTW
Miksuuu
MikuNakanoxx
+Miky852
Mikzel
+Mil Z
+Mil ky
Mila
+Milagre
Milaz
MildRussia
+Mile Stoner
+Mileage
MilesQPR
+Miley Cyrush
+Milfcocktail
Milfguardian
Milhous
Mili
+Milico
+Milieu
+Milieudienst
+Milimoowolf
+Miljoona
Milk
+Milk Energy
+Milk Expert
Milk Sausage
+Milk my milk
MilkDaughter
MilkMan227C
MilkOhh
MilkToast
+Milked Cox
Milkki
Milkless
+Milkmate
+Milkn Tiddys
Milkopia
+Milkraze
Milky
MilkyGalaxy
+Mill Reef
Mill385
+Millbrook92
Milleks
+Miller 40
MillerLatte
Millerlite40
Millerlite95
@@ -14943,37 +31267,82 @@ MilliMillzy
Millie
Millionsppl
Millkk
+Milllf
MillsMCR
Millsbay
+MillzyRS
+Milo
+Milo Iced
+Milo Monster
Milol
Milpe
Milsurp
Miltank
Milton
Mim3r
+Mimahh
+Mime Tan
+Mimi20
MimiKe
+Mimic
+Mimori
+Min Botter
+Min XD
Minalinsky
Minar
+Minazuki
Mincene
Mind
+Mind C Crew
+Mind F-ed
+Mind of me
+MindBender84
MindYoStep
Minde
Minde0777
Mindf4ck7
+Mindforce
MindfulGnome
+Mindgrnd
Mindhead
Mindlet
+Mindreaver
+Minds Hunter
Mindys
+Mine is frai
+Miner00
+MinerMvp
Mineraal
+Minerii
Minerock
+Minerock Man
Minesweeperx
+Mineta
+Miney
Minfri
+Minga Minga
Mingdee
+MingeKing
Mingerd
+MinhteaFresh
Mini
+Mini Aurelia
+Mini Biceps
+Mini Chocobo
+Mini Elba
+Mini Hazy
+Mini Jaack
+Mini K
+Mini M
+Mini Misty
+Mini Van
+Mini Xander
+Mini o
MiniBuilt
+MiniBundy04
MiniCoat
MiniDrew
+MiniDuckling
MiniNinjo
MiniSoMini
MiniStew
@@ -14981,96 +31350,201 @@ MiniToast
Minibini
Minidefiant
Miniglass
+Miniguez
Minijazz
Minimaps
+Minimizing
Minimum
Mining
+Mining Runes
+Minioz1
MinipeTh
Minirio
Miniscus
+Minish Gal
+Minisnacks
+Miniuzy
+Minix
Mink
+MinkMiller
Minkyeung
+Minnesoooota
Minnick
Minnie
Minski
Minslee
+Minstrel RS
Mint
+Mint1s
MintEastwood
+MintSoldier
MintWestwood
+Mintaras
Minton
Mintvolcano
+Minty Elder
+Minty Rogue
Minty28
MintyBeaver
MintyBreath
+MintyFreshFe
+Minty_Duos
+Mintyyyy
+Minu Kamp
MinusMinitia
Minyons
Minzy130
+Mio Magic
Mioceen
Mipu
Miqdad
Miqote
Miquuw
Miracle
+Miracle Grip
+Miracle Sun
MiracleToy
Miraculous
MiramiS
+Miran a
+Mirana
Mirari
+Mire
Mirek
+Mirepoix
+Miriage
Mirin_Gloots
Mirith
+Mirize
Mirk
Mirkat
+Mirkoi
+Mirkys
+MiroSemberac
+Miroh
Miroki
Mirthless
Miruki
+Mirxcle
MisClickPro
+MisLilToe
+Misaka 10032
Misakipillow
Misano
+Misantrofia
+Miscellaneum
+Mischief
Miscrint
+Miscy
Misdeal
+MisfitGrinds
Mish
+Mishie x
+Mishigamaa
Mishkkal
Misimo
Miskil
+Misks
MiskySam
Mislabeled
+Miso Horney
Miss
+Miss Amanda
+Miss Amped
+Miss Beth
+Miss Clover
+Miss Inform
+Miss Judging
+Miss Kipatzu
+Miss Kitty
+Miss Nothing
+Miss Piggy
+Miss Tinaa
+MissArcane
MissMockingJ
MissMystique
MissRosie
+MissTowlie
+MissTwistedx
+Missandrist
MissclickGG
+Missel0
Missen
MissinTicks
Missing
MissingRNG
+Mission
+Missu
+Missus
Missvmk
Missy
+Missy Cee
Mista
Mista 1337
+Mista Wright
+MistaPhelps
+MistaWubz
+Mistagainz
Mister
+Mister Chill
+Mister Ex
+Mister Gone
+Mister Jar
+Mister KJ
+Mister Texas
+Mister Tiger
+Mister Xanny
+MisterBass
MisterBensy
+MisterBidoof
MisterCobb
+MisterGurn
MisterJager
+MisterPatego
+MisterStats
MisterTrump
+MisterWhale
+MisteruDongu
Misterwieb1
Mistheos
Misticwok
Mistify
+Mistik Soda
+Mistio
+Misto-Flies
+Mistr Morale
+MistrGiggity
Mistral
+Mistre Apple
+Mistres Pres
Misty
Misty12
Misty7632
Misuryu
Mitabi
Mitch
+Mitch Gate
+Mitch Izle
+Mitch Peters
+Mitch W
MitchHardo
MitchRap
Mitchggee
+Mitchman987
+Mitchs 2nd
+Mitchys Iron
Mith
+Mith Man214
+Mith Scimmy
+MitherHobo
Mithoon
Mithrality
+Mithralking8
+Mithrane
+Mithter T
Mito
Mitologas
+Mitqh
Mittag
MittensRS
Mittum
@@ -15079,18 +31553,26 @@ Mituse
Mitver
Mitzchy
Miuted
+Miuw
Mivo50
+Miwi
+MixBro
MixKit
MixTapeFiya
+Mixes
Mixieg
Mixtape
+Mixun
Mixxush
+Miyags
Miyui
Mizis
Mizo
Mizro
Mizty
+Mizuno Akane
Mizusawa
+Mizz Horror
MizzFrizz
Mizzzura
Mjay
@@ -15101,57 +31583,130 @@ Mk60
MkLeo
Mkiller120
MknlC
+MlCOOL
+MlDGARD
MlKE
+MlKEL
MlLFnCOOKIE
+MlLLlSECOND
MlLO999
+MlXOR
MlZORE
Mlao
+Mlddel1
+Mlopes
Mmgmike24
Mmichel
+Mmkbro
+Mmm Food
+Mmm Mushroom
+Mmm Xp
+MmmBathSalts
+MmmButter
+Mmmmm Bacon
Mmorpg
+Mmu
Mmurder825
+Mmv
Mnemic
+Mnir
MnkyDLufy
+Mnmnnmnm
+Mnts
+Mo Fo Sho
+Mo Hit
+Mo slays
+MoFo Boss
MoIon Iabe
+MoMoYaP1972
MoPhobia
+Moathog63
MoaxD
+Mob Partyhat
+Mob Punch
+Mob Up
+MobILe_Own3R
+Moba All Day
MobbDeep
+MobbyWang
Moberger
Mobiel
Mobile
+Mobile Data
+Mobile Maxin
+Mobile Rng
+Mobile Skiff
+MobilePlayin
+MobileSkeng
+MobileXPOnly
+Mobilekraan
Mobilist
Mobiusyellow
Mobo
Mobs
MobyWoby
Mobz
+Moca Pet
Moccamuna
+Moccies
Moccona
Mochasins
+Mochi Donuts
+Mochyy
+Moe Amien
+Moe Is Back
+Moe You Up
+MoeCipher
+MoeTx
Moeberg
MoedZhafa
+Moedameyer
+Moefugganutz
Moepog
Moer
Moes
+Moestieee
+MoetIkLopen
Mofaer45
MoffelRS
Mofleminator
+Mofo Lt
+Mofo Shadow
+MofoMo92
Mofoe
+Mog Time xD
Mogcow
Moggok
Mogtime
+Moh
Mohahm
Mohamedss
Mohanad
+Mohannah
+Moheed
+Mohh
Mohib
+Mohlo
Mohnday
+Mohphy
+Moiqol
Moist
+Moist Dreamz
+Moist Holy
+Moist Maori
+Moist3allsac
+MoistButh0le
MoistMaker
MoistPainal
+MoistWreck
+Moistium
Mojimot0
Mojito
+Mojo Fiki
Mojojojo171
Moju
+Moju GG
+Mojurico
Mojzis
Mok101
Moka
@@ -15160,78 +31715,149 @@ Mokkasiini
Mokke-senpai
Mokkis
Moksa
+Moksu
Moku
Mokum
+Mokum Syl
+Mola
+Molag x Bal
+Molars
+Moldy Nuts
MoldyChips
Mole
+Mole Slides
Mole1
+MoleMan-II
Molemountain
+Moles Rule
Molinas
+Molkkipo
Molle
Mollem
+Mollium
MolllyPop
+Molloyo
Mollt
MollyLlama
Molokotorby
+Molotoffer
+Moltea
Molten
+Molten B
+Moltenclawz
+Moltres X
+Mom Hunter
+Mom Madness
MomICantPaus
Moments
MomentsApart
MommaCuz
Mommy
+MommyMish
+Mommys Hand
+Momoh flip
Moms
+MomsLasagna
Moms_Spagett
+Mon key
+Mon3yy
Mona
+Monarchis
+Monarchy
Monday
+Monde
MonehBabeh
Money
+Money BTW
+Money Bagz
+Money Grabs
+Money Mann10
+Money tyven
MoneyMalone
Moneyman
+Moneyman 199
Mongke
+Mongrel Hick
+Mongstaman
Moniez
+Monika Liu
Moniosaaja
+Monitor
Monk
+Monk Fists
MonkFishking
Monka
+Monka Blunts
+MonkaFront
+MonkaGrizz
+MonkaSFish
MonkaZter
Monkadile
Monke
Monkees80
Monkey
+Monkey D C
+Monkey News
+Monkey Pox
+MonkeyDGazoo
MonkeyHeadAF
+Monkeyannie
+Monkeyboy991
+Monkeydodo45
+Monkeyhug
+Monkeys Ass
+Monkeysick
Monkie
+Monkphish
Monksmen
Monkster
MonnerMads
+Monnivalas
Monnual
Monny
Mono
+Mono Y Mono
Monopoly
+Monopoly Mvp
+Monotone 07
MonrealkaAfk
+Monroejo
Monsemand92
Monsilly
Monsta
Monstaarr
+Monster Hog
+Monster Tits
Monster333
+MonsterKush
+MonsterTrain
Monsterofpk
Monstrius
Monstrocity
Monsutaa
Montagne
+Montak
+Montanaro
Monterey
+MonthOldMilk
Monty
+Monty Jr
Monumental
Monuu
Monxanvrooo
+MooGoo
Mooch
Moocow910
Moodeer
+Moodoo
Mooffa
MoofinnMan
+Moogly
Moohcake
Mooi
Mooie
Mooing
+Mooing Cow
Moojin
Mookinater
Mooksy
@@ -15239,58 +31865,98 @@ Moon
Moon688
Moon7I8
MoonCard
+MoonDunes
+MoonStaIlion
+MoonWolf
MoonYagami
Mooncrafting
Mooner
Moongazing
Moonish
+Moonish Ale
Moonjock
Moonlightcb
+MoonlitNika
+Moonly
Moonman392
+Moonr0cks
+Moonshadow18
+MooonCakeee
+Mooony
Moopy
+Mooqie
Moordaap3
+MooreNoyce
Moorleey
Moortgat
Moose
+Moose Land
+Moose713
+MooseEatBear
Moosecup
+Moosefangs
Mooseheads
Mooserini
+Moosewizza
+Mooseyt
Moosy
Moot
Moowi
Mooyee
+Mopdussy
Mopeds
Mopedstian
Moppeharry
+Moppy
+Moq puW
+Mor Ul Neck
Moral
Morales
Morally
Moray
Morbid
+MorbinThyme
Morch
MordLacaroni
+Mordacai
Mordenumero2
+Morder-Biest
MordinSolus
Mordy
More
+More AFK
+More Chillli
+More Coala
+MoreThermite
+Moredots92
Morelos
+Morfeusz
+Morgan Donor
+Morgan69
MorganAtkins
MorganaTits
Morghuan
+Morghulish
Morgo
+Morgoth Man
Morgue
Morguhh12
+Mori Memento
Morijo
Moriquendi
Moritz
Morkius
Morkret
+Morkula37
+Morland
Morlun
Morlyx
MormonFTP21
Morniingstar
Moronavirus
Morot
+Morph1ng
+Morpheus Aus
Morphing
Morphogene
Morpice
@@ -15300,71 +31966,311 @@ MorrisTheCat
Morsey
Morski
Mort
+Mort Eater
+Mort Rigo
Mortal
+Mortal Coil
+Mortalize
MortarMan
MortemPlaga
+Mortituros
+Mortle2
+MortonRamsey
+Mortonnizer
+MortresxD s1
+MorttMoryt
Morue
+Morvas
Morytania
+Mosade
Mosaq
Mosbol
Moscosung
Moseley
Mosess
+MoshPitJosh2
Mosio
Mosiph
Moska
+Mosmo
+MossadKiller
Mosse
+Mossels
+Mossgiant
+Mossy
+Mossy Taint
Most
MostDreaded
+Mostly Godly
Mostoes
+Mosychuk
Moteha
+MothQueen
+Moth_29
+Mothafuqueur
+MotherFigure
Mothless
Motikeli
+Motion1010
+MotivaSean
Motivated
Motmans
+Motochorro
+Motor
+Motse
Mottis
Mottly
Mottookaa
Motx
Motyas
Motzimoo
+Moubu
Mougi
+Moukie
Moul
Mouldied
+Mouldy Lamp
+Mouley
Mount
Mountain
+Mountan Drew
Mourn
Mourners
+Mournhold
Mous
+Mousecream
Mousekeys
Mouselifter
Mouseman298
Mousenn
Mousie23
Mouteo
+Mouthful Pip
Move
+Move Over
+Move Ziggy
Move2791
+Movember
+Moviestar
Moving
Moving20
+Mow on mate
Mowgli13
Mowk
Mowt
+Mox
+Moxy Senpai
+Moyaha5
Moyd
+Moyis
Moysey
MozDef
Mptrj
+Mq4
+Mr 0wnage
+Mr 223
+Mr 7o7o
+Mr 9ine
+Mr A
+Mr Airborne
+Mr Alba
+Mr Alex
+Mr Ashh
+Mr Ayye
+Mr Bagel
+Mr Baggy
+Mr Barakas
+Mr Bazzi
+Mr Beefman
+Mr Beekman
+Mr Believe
+Mr Biceps
+Mr Bijpakken
+Mr Bond
+Mr Boogley
+Mr Brunoo
+Mr Burton x
+Mr C0KE
+Mr CHM
+Mr Chonky
+Mr Chopz
+Mr Comrade
+Mr Costy
+Mr Count Up
+Mr Cryin
+Mr Dan Solo
+Mr Darzelis
+Mr Deivis LT
+Mr DirtyDan
+Mr Dong322
+Mr Dreamcast
+Mr Dry
+Mr Dudeicus
+Mr Dumbiller
+Mr Durian
+Mr Dylesxic
+Mr Easyscape
+Mr Egret
+Mr Elmar
+Mr Elysian
+Mr EsKei
+Mr Fathead
+Mr Father
+Mr Foe
+Mr Freezie3
+Mr Fridge
+Mr Funguses
+Mr Geese
+Mr General
+Mr Gentil
+Mr Ghillie
+Mr Ghizar
+Mr GnW
+Mr GodLuck
+Mr Hanki6
+Mr Hassan Fe
+Mr Hollowx
+Mr Hrodbert
+Mr Hulbert
+Mr Infinity
+Mr Iron Bar
+Mr Iron Gray
+Mr Iron Owl
+Mr Iron Poo
+Mr IronAss
+Mr Jacko
+Mr Jam10
+Mr Jam1O
+Mr Jasperr
+Mr Johbi
+Mr Jonh L
+Mr Jordy
+Mr Joshing
+Mr Jot
+Mr Kaasmof
+Mr Kato
+Mr Keyss
+Mr KingCobra
+Mr Kirbo
+Mr Kiwi Bird
+Mr Kman
+Mr Kodai
+Mr Kokkok
+Mr Krabbsss
+Mr L0af
+Mr Laser
+Mr Laz
+Mr Leeee
+Mr Looch
+Mr Loser
+Mr Lysol
+Mr Mackie
+Mr Manual
+Mr Martel
+Mr McCune
+Mr Mentos
+Mr Mikers
+Mr Missiles
+Mr Miyagy
+Mr Moncler
+Mr Mordacai
+Mr MrX
+Mr Nagoh
+Mr Nasty Kev
+Mr Nate
+Mr Nebs Main
+Mr Neckless
+Mr No Rift
+Mr No Sleep
+Mr NoMates
+Mr Nonya
+Mr Ohio
+Mr Oizo
+Mr OldSchool
+Mr Osc ar
+Mr Ozzy
+Mr Palm
+Mr Pandaz
+Mr Pastorius
+Mr Peggers
+Mr Phelipe
+Mr Pita
+Mr Platypus
+Mr Pondman
+Mr Poup
+Mr Pretzels
+Mr Questerr
+Mr RaWaR
+Mr Rebirth
+Mr Rich T
+Mr Robert
+Mr Romm
+Mr Ryker B
+Mr S N S
+Mr SZX
+Mr Sasquatch
+Mr Shaman
+Mr Siege
+Mr Sighco
+Mr Slabs
+Mr Slaw20
+Mr Spark
+Mr Splitter
+Mr Squicky
+Mr Stan Man
+Mr Syvan
+Mr T C
+Mr Takoya
+Mr Tbh
+Mr Teej
+Mr Thornbery
+Mr Troll
+Mr Trump
+Mr Untainted
+Mr Vaidys
+Mr Vanhanen
+Mr Veegs
+Mr Wieler
+Mr Wild x
+Mr Woods
+Mr World 420
+Mr Woz
+Mr Wumbo
+Mr Xray
+Mr XuRu
+Mr Yozef
+Mr Yum
+Mr Yzi
+Mr Zevosh
+Mr Zio
+Mr ensayne
Mr noli Fe
+Mr rubler
+Mr spikey
+Mr stony
+Mr2ndPlace
+Mr44
MrAlcotester
MrAmazing
MrAmbaal
MrAngelxz2
+MrAngerfist
MrAnkan
MrAwesomeNL
+MrB1u3
+MrBananaJoe
+MrBeadyEyes
+MrBeastly
MrBeerNTits
+MrBic
MrBigLoads
MrBigPecs
+MrBigWheels
+MrBingly
MrBlueScreen
MrBooBlocca
+MrBorreby
+MrBouncyButt
MrBraa
MrBry
MrBryne
@@ -15377,36 +32283,62 @@ MrCivilian
MrCoolSkills
MrCoook
MrCoopahh
+MrCowey
MrDTails
MrDairyHeir
+MrDaive
MrDarkBlue
+MrDarkSide76
MrDarling
MrDashwood
+MrDeadInside
MrDevice
MrDevour
+MrDoake
MrDoofes
+MrDraconite
+MrDumbaldore
MrEasty
+MrEdgaras
+MrEmerica
+MrEnd
+MrEwan
MrExterm
+MrFANG
MrFancyboots
MrFarrell
MrFlizz
MrFluffy97
+MrFreakyFrog
MrFrizzesh
MrFro
+MrFrogRS
+MrFuack
MrGaalis
MrGainz
MrGanksta
+MrGatorGnash
+MrGeeeeeee
MrGibbletts
MrGixxer
MrGodBrand
+MrGoodbye
+MrGraveLord
MrGrind
+MrGurbz
MrGurn
+MrGustuv
+MrHatN Clogs
+MrHeftyBag
MrHobokian
MrHummus
+MrHypeK0
MrIWontMax
MrIronChef
MrJTheIron
MrJad
+MrJargon
+MrJermu
MrJoestar
MrJohnnyx
MrJonMan
@@ -15414,17 +32346,32 @@ MrKadir007
MrKerrie
MrKevinR
MrKoalas
+MrKyle
+MrLaffy
+MrMag
MrManny
+MrMatchett
MrMaxLvl99
+MrMayhem
+MrMeeseek420
+MrMeeseexs
MrMell0w
MrMime
+MrMonkeyJock
+MrMonopoly
MrMonsterrr
MrMooCows
MrMose911
MrNL
+MrNaf1
MrNatee
+MrNeverWrong
+MrNice98
+MrNieksas
MrNikeKush
MrNoBank
+MrNoFgiven
+MrNoFilter
MrNoLove
MrNook
MrNorwayOS
@@ -15433,75 +32380,169 @@ MrOceanic
MrOctapus
MrOngh
MrOriginal25
+MrPK74
+MrPaip
+MrPapaJoe
MrPezcu
MrPige0nz
+MrPiggles
+MrPlasters
MrPoopiehead
MrPork
+MrPotionz
MrPowers
MrPutterLite
MrQuaker
MrQuick1
MrRaidUrGirl
+MrRakoon
+MrRangingElf
+MrRawDog
+MrRiceBucket
MrRidder
MrRight4U
MrRobinHood6
MrRoboto
MrRocco
+MrRodgersHD
+MrRojo31
+MrRumarak
+MrRuneDrag
+MrRyo
+MrSanta94
MrScape2Much
MrSensimilla
+MrShneeeebly
+MrShoarma
MrSimQn
MrSirOne
+MrSkydive
MrSlongerton
MrSmiiLey
+MrSmikkel
MrSocorelis
MrSolo
MrSteelYoRNG
MrStickyBudz
+MrSucellus
+MrSuibhne
+MrSupo
MrSusans
+MrSwift00
+MrTanglez
MrTibberfitz
+MrTickMaster
MrToad
+MrTobyG
+MrTooSerious
+MrTough rs
+MrTrashclikz
+MrTryHard69
+MrTurds
MrVillanelle
MrVitable
+MrWallnutt
+MrWeageZ0311
+MrWest
+MrWhetFartz
+MrWobble420
MrWorldwidee
MrYachie
+MrZandra
+Mr_B1ff
+Mr_Hairless
Mr_Kadir007
+Mr_Kapoo
Mr_Manchello
+Mr_Ostroum
Mr_Schmeckle
+Mr_Scoff
Mrawrs
+Mrbadwrench
+Mrbaird
+Mrbd
Mrburnsss
+Mrcoconut22
Mrdeemoney
+Mrevil1
+Mrfuntime517
Mrfuzzy
Mrglex
+Mrhood
+Mrjellyfish
Mrjli
Mrloonetick
Mrm0rm0r
+Mrmagoo0
Mrmanguy
Mrn1ceguy89
+Mrpokoz
+Mrpoopyface1
+Mrs Budie
+Mrs Pure Cut
+MrsFabler
MrsJonesUFT
+MrsMushrooms
MrsPurpTurt
+MrsSocorelis
Mrslipkn0t
Mrwaffleses
+Ms Goblin
+Ms K
+Ms Lizziard
+Ms Trap
+Ms Zik
+MsAnderzen
+MsArachnea
+MsBoothanqq
MsFreakyFrog
+MsGroves
MsSev
+MsethOWarq p
+Mssp
+Mstr Postman
+Mt Eben
+Mt Olympus
+Mthrfckrmike
Mthw
+Mtn Dew Dew
+MtnDewford
MtnGoat
+Mtp69
+Mtra
+Mtv Cribs 07
Muad_Dib
+Muahahaha45
Muahhahaa
Muahuahuahua
+Muas
MuasBtw
+Muay Mat
Muaythai
+Muc Gib
+MuchBetta
MuchGpWaste
Muchly
MuchosAssias
+Muchy
Muckball
+Muco
+Mud Cricket
+Mud Temple
Mud9
MudCatBigDog
+Mudda Focha
+Muddas Main
+Muddy patch
Mudguard
+Mudkins
Mudkip
+Mudmur
Mueezy
MuerteBella
Mues
Mufasa
+Mufasa IXI
MufffinKing
Mufficer
MuffinActual
@@ -15513,7 +32554,9 @@ Mugarooni
Mugen
Mugge
Muggerman3
+Muggled
Muggles
+Muggtjuven
Mugrub
Mugy
Mugzy
@@ -15521,116 +32564,232 @@ Muhaji
Muhamed
Muhfn
Muhkea
+Mui Gokuu
Muilpeer
Muki
Mukkaram7861
+Mukkey
Muktheduck
+MulasRevenge
+Mulberry Mtn
Muleleaveox
+Mulky
Mulle-mek
+Mullet Mafia
+Mullishus
Mullvaden
Mully
MullyMammoth
Multi
+Multiloquent
MultipleRats
Multiplying
Multitalent
Multiway
+Multizeta
Multrix
Mulugga
+Mum3nRider
+MumBanker
Mumble
Mumbles
+MumblinSloth
+Mummzy
Mumriken
Mums
Mumspaghetti
Munansurvain
+Munchise
+Munder
Mundt
Mungles
Mungoe
Mungu
+Munia15
Munich
Munire
Munk
Munkea
+Munkefar
Munkinut
+Munky Munk
MunkyBizness
MunkyKnuckle
Munn
+Munnchicles
Munqqi4862
+Munqqii
+Munshae
Muparadzi
+Muphat
Muppz
+Murasa
Murbez
+Murda Turk
Murder
+Murdered
+Murderings
Murdimius
Murdock
Murdur
+Murgambit
+Muri
Murilokooo
+Murimekko
+MurkWahlberg
+MurlokMurlok
Murogrim
MurphRS
Murphys
+Murphys Lag
+Murpman
Murray
+Murray 1991
Murre
Murrloc
Murrrum
+Murt15
+Murtti
+Murzum
+MuscleNation
Musftw
Mushmom
Mushroom
+Mushroom Mtn
Mushrooms1
+Mushtime
MushuPorkPls
+Musi c
Music
Musica
MusicalMurdR
MusicalStory
+MusiclRevivl
+Musicpunk
Muskets
+Muskintine
Muskogee
+Musky Whale
+Muslimi
Musschoot
Mussy
Must
+Must Slay
MustBeGanja
+MustKillBill
Musta
Mustachio
+Mustamae
+MustangYak1
+Mustangs
Mustard
+MustardXD17
Mustasurma
Mustekala
MusterShelby
+Musto Task
+Musty Ropes
+Musty Sailor
MustyToofer
Musuwu
+Mut3dHasselt
MutaNep
Mutants
Mutapets
Mutated
+Mute Pker
Muteself
Mutilated
Mutsurini
+Mutt a dile
Muttadale
Muttadiddle
+Muttadude
+Muttallica
+Muugz
+Muumipappa
+Muunchyy
+Muurxi
+Muushuu
Muutz
+Muws
+Muy Booty
Muzbo
Muzi
+Muziek Smurf
Muzket
Muzz
Muzzle
+Mv P
+MvP ov RnG
+Mvk
+Mvko
+Mvp Scrub
Mvvs
+Mw2
+MxMay
+MxSloot
+Mxb36
Mxffin
+Mxr
Mxteorites
+Mxtta
+My Damie
+My Dark Hell
+My Dark Soul
+My Death Bed
+My Demons
+My Dont We
+My Dumb Iron
+My Faith
+My Fantasy
+My GF isMILF
My Gentiles
+My God
+My Iron Man
+My Ironmain
+My Ki
+My Kill
+My Kingz
+My Limp GIMP
+My Main Game
+My Maine
+My Mate Elm
+My Name Vyga
+My Pet Mocha
+My Rng Ass
+My Sana
+My Secrets
+My Ticks Now
+My Ult
+My pp stink
MyAssLucky
MyCatKillsMe
+MyCtyNeedsMe
+MyDuck
MyElyNow
MyFitPal
+MyHandyMan
MyIiu
MyLastGo
MyLoveFaith
+MyMercy
MyNAm3BubBA
MyNameIs
MyNameIsCole
MyNameIsKent
+MyNameIsTina
MyNameIsTrev
MyOSAccount
+MyPetRicky
MyProject
MyRifleMyGun
+MyRight Nut
MySeed
+MySkillsKill
MyStinkHurts
MyTakao
+MyWanderlust
MyWyvernAlt
Myams
Myat
@@ -15639,88 +32798,240 @@ Mycreation1
Mydlong
Mydragon8u2
Myers
+Mygary
Mygraine
+Mykeh
Mylar
Myles
+Myles_008
Mylifeisless
+MylilBrony
+Mylle
Mylo
+Mylo 7
Mylos
Mylosas
Myndemo
Myoboku
+Myosarcoma
+Myoshi
Myotoxin
Myriadic
+Myrm
Myron
MyronAynes
Myrupz
Mystearica
Myster
+Mystery Btw
+Mystery X
MysteryGifts
MystiCool
Mystic
+Mystic Mak
+Mystic Pizza
+Mystic Voke
MysticChompy
MysticDrift
MysticErebos
MysticRiver
MysticStrega
+Mysticpuffer
Mysticrobe
+Mystics Main
Mysticvaa
Mystiic
Myth
+MythCerix
MythCraft
Mythic
+Mythic Hiero
Mythicat
+Mythrin III
Myto
+Myuf
Myuk
Mywa
+Myz
Myzi
+Mzaa
+Mziy
+Mzr
+Mztar
+N 10
+N 55
+N A l N E R
+N E L L
+N E N E
+N Gallagher
+N I GH T96
+N I N O X
+N I S H
+N ICK Y
+N O B S Y
+N U B U
+N W M
+N a t t z
+N ang
+N anko
+N arb
+N dejay p
+N e a k i le
+N e i l
+N e0
+N iall
+N ibbler
+N ightgleam
+N l C K O
+N l E V E
+N o m a d
+N occo
+N oggin
+N u d
+N uggies
+N-J-R
N0 H34RT
+N0 Invictus
+N0 pid
+N00biistyl
+N00bslayer27
N04me
N0B4Marri4g3
+N0Ballz
N0ID
+N0LlMlT
N0OneCares
+N0T HC
N0XPWaste
N0blelegend
N0llie
+N0obalhao
N0rse_k1ng
+N0sie
+N0t Maxed
+N0t special
N0tliketh1s
N0ul
+N1 CK
+N17 Jake
+N1C3
N1NJASK1LLZZ
+N1ckai
+N1cwho
+N1nja
N1njaCat
+N3XX
+N3p
N3se
+N3x
+N4L
+N4ruto
+N4styNat3
+N7N
+N8vy
+N9NE420
+N9T7
+N9U
+NABEEL RJ
+NAGAKAMAL
+NANORA
NARPslayer
+NASDBOY
+NASSERN
NASTY
NAVl
+NB8K 2K13
+NBA
+NBA NewMain
+NBA Youngb0i
+NC90
+NCG
+NCG 2
+NCPS
+NEBR0SKY
NECR0DANCER
NEEDAMETHYST
NEENEE
NEET
+NEET forever
+NELSONORS
+NENOS
NEONiC
NEWBEYE
NEWFISHMATE
+NEX IS WET
+NEXFARMER
NEYOVIC
NFed
+NHL Blues
NHrn
+NIIXIIK
+NINJABLEV1NS
+NINJATMNT
NITR00
+NJC20
NJWW
+NKJ
+NL Chronos
+NL Gilbert
NLDeluXe
NLFreakky
+NMM Jaoel
NMOS_giant
NMZLetics
+NO 1s SAFE
+NO CHlLL
+NO FEEL
+NO MlDS
+NO N R G
+NO PlD
NOAH
+NOMETHESPORT
NOOOOOOOOOO
NORTHSEA
NOSTALGlA
+NOTTDY
+NOTaPancake
+NOmki
+NPC Healer
+NPC Icedrake
+NPYJ
+NRA
NSFL
+NSHN
+NST Praise
+NT FiSHvv
+NT Y
NTBeerBandit
+NTMR RADIO
NUEL
NULLI
+NULLlN KUPPl
NUTSHOT
+NVQ
NWHL
+NWI 219 RAT
+NY
+NY C
+NY G
+NY x LEGiiT
+NZ Dave
+NZL
+N_MB
+N_other_day
+Na Mn Or I
NaCl
+NaCl Sprite
+NaCl is salt
+NaQ
Naaath
+Naafiri
+Naais
Naakkeri94
Naakt
+Naaon
+Naautilus
+NabD Rank 5
Nabroleon
Nabshadow
Nabss
@@ -15728,191 +33039,375 @@ Nabua
NabyLad
Nach
NachB
+Nachitto
Nacho
+Nacho Alt
Nacho2030
+NachoByte
NachoDragon
+NachoPapi
+Nacht
Nachtkastje
NachuiTuda
+Nadaa
+Nadeo
+Nader
+Nadsage
Nadund
+Naethera
Naftininkas
Naga
+Naga Morich
Nagisa
+Nags
NagyonJo
Nagyung
+Nah0824
+Nahida
+Nahiida
Nahkamestari
Nahuel
+Nahyol
+Nahyun
NaiiSha
Nailbox
Nailed Hard
+Naimsen
+Nainenoon
+Nairda Niam
+Nairda Nori
Nairino
+Naisu
Najda
+Nakal
+Nakama
NakedTwister
+NakednFeared
Nakke176
+Nakkee
+Nakkesleijer
Nakkimauno
+Naksitr6ll
+Naku
Nakuz
Nakuz0r
+Nalle Puh FT
+Nallieheai
Nalsara
+Nam
+Namcel
Name
+NameECJ
NameRjected
NameWasBannd
+Named
NamedGenius
Namelessdude
Namelus
NamesAreMeh
NamesHisoka
+Namine Silke
+Namir
Nammer
Namuko
Nana
+Nana Steel
Nanado
Nanciscor
Nancyy
Nander
+Nandos
+Nandos Man
+NangMan
Nangdalorian
+Nanimavi
+Naniva
Nannertee
Nanno
+Nannu Baba
+NannyCam69
+Nanoh
+Nanoman360
Nanonymouse
+Nanook IV
+Nanoray
+Nanotech
Nans
NansBeaver
+NansCumTowel
NantaoL
+Nanyts
Naoe
+Naoe Y
+Naoe Yamato
NaofumiLTU
Naoka
Naow
+Nap Tackle
+Napaaaaaaaaa
Napalm
Napanderii
Napettaja
+Naphtic
NapkinFork
+Napnapnap8
NapoleanBra
+Napoleon
+Nappy Head
Napsutaja
Naqu
+Nara ven
Naradas
+Narbose
Narby
+Narcan Saves
+NardDog
+Nareg
+Narel1a
+Narendradath
Narg
+Nargarothian
Narked
Narkon
NarnodesNono
Narrative
Narry
Nartens
+Narth Calior
Narthalion
Naru808
Naruto
Narval
Narvalow
Narwallus
+Narwhal1731
Narx4
+Nas is like
Nasa
Nasaman
+Nascar
Naseeph
+Nashh
Nashluffy
+Nashonic
Nashy
+Naskarsdad
+Nasko 07
Nasper
Nasrullah
Nasseee
Nassim
Nast
+Nastacov
Nastie
+Nastik
Nasty
+Nasty107red7
NastyAss
+NastyCasual
NastyDonger
+NastyGarbage
+NastyGeUsers
NastyV6
Nasuuu
+Nat Scheetje
Natalie
+Natby
Nate
+Nate Dogg g
+Nate Joggers
NateDoge
+NateStayLove
+Natebroh
+Natedog 1104
Naternater
+NatesOSRSAcc
+Nath Meister
+Nath btw
NathJeaL
Nathan
+Nathan A
+Nathan Lyon
+Nathan Novak
+NathanTurn
+Nathandrthal
Nathanyuelle
+Nathn
Nationwide
Native
+Nato is Jake
+Nato888
+Natoh
+Natoroid
Natrox999
Nats
Natsu
+NattNub
Natte
+Natte Dop
+Natte Dream
+Nattetid
+Nattkungen
+Nattmara
Nattraps
Natu
+NaturalBeaut
Naturally
+Naturally Me
Nature
+Nature B0Y
NatureNymph
+Naturealis
Naturejacks
Nauce
+Naudra
+Naught Good
Naughtpure
+NaughtyPanda
+Naukahtaa
+Naukkiss
Nautis
+Nauuyn
Navas
+Navbrah
NaviRio
Naviaux
+Navidson1
+Navn
Navraj
Navtik
Navy
NavyDD214RET
+NavyLight
+NavyPunk
+Navyseals199
+Nawberry
+NawtyMonkey
Nawus
+Nax
Naxacid
Naxiius
Naxito
Naxos
Naxtzi
+Nay RS
+Nay0101
Nayna
Nayrus
+Nayrus Love
+NazTehRpR
Nazgul
Nazty
Nbba
Nbcw
+Nbsniper69
Ncpure
Ncrr
+Ne x is
Ne3po
Ne86
+Neak
+Nealonl4
Nealos
Neals
+Nealvy
Neanderthal
Nearly
Nearomancer
Neatkii
Neav
Neb0lith
+Nebb
Nebbo
+NebbyGo2Bag
+Nebezaidu
Nebijok
Nebrosky
+Neccto
Nechromancer
Nechryass
Nechs
NechtKnecht
+NeckBat
Neckbeardis
Necksnipped
NecroEric
+NecrodedGSF
Necrokingns
+Necromatus
+Necromooser
+Necronomist
Necrophorum
Necrosauruss
Ned1991
+Neddam
NederweertV2
Neduks
Nedus
+Nedved
Nedward
+Neeby
Need
+Need 2m
+Need A Pint
+Need Femboy
+Need GP Now
+Need Protein
+Need Rogaine
+Need Spoon
NeedInternet
+NeedMoore
+NeedPurp4Bed
Needs
+Needs Coffee
NeedsADad
Needtomboy
+Neeech
Neefey
+Neeisnet
+Neekkoco
NeekoNeekoNl
Neekomata
Neekss
+Neelen
+Neems
+NeetScape
+Neetman
+Nefarious fe
NeferSeti
+Nefereous
Neffiz
Neg14
+NegAttiveI
Negan
Neganeogami
Neghed
+Nego Baby
+Negrong
Nehxy
Neil
+Neilthedead
+Neintein
+Neitiznut
+Neitiznut Jr
+Nej tak
Nejvalt
Nejvash
+Nekalbink
+Nekkopanda
+Neko Inori
NekoSayNyaa
+Nekomata Nia
Nekomimi
+Nekromant Cz
+Nekrukeisari
+Nelaimingas
Neleron
Nelhium
Nelkirr
+Nelli Matula
Nelliell
+Nellysan
Nelox
Nels0N
Nelsi
@@ -15926,154 +33421,295 @@ Nemaksciai
Nemba
Nemerrr
Nemesis
+Nemesis2020
Nemf
+Nemijin
+Nemipro
Nemisys
+Nemj
Nemmo
Nemo
+Nemo_o
Nemonia
+Nemoven
Nenah
Nendou
+Neng_Thao02
Nengah
+NeniHead
Nenio
Nentsukka
+Neo
+Neojoramony
Neon
+Neon Christ
+Neon Juan
+Neon Slinky
+Neon Volts
+Neon xxv
NeonChilli
+NeonGenxsis
NeonM1d
+NeonO7
NeonPaladin
NeonRhythm11
Neonik
Neonke
Neopia
+Neoplasia
Nephedes
Nephyrion
Neppe
+Neptune169
+Ner
+Nera Obuoliu
NerbBlaster
Nerbles
+Nerbs
Nerd
+Nerd Body
+Nerd Owns
+Nerd Stone
Nerda
+Nerdbob
Nerdcore
+Nerdier
+Nerdpuff
+Nerf Bowfa
+Nerf Coffee
+Nerf Th1s
NerfMePlz
NerfTG
Nergegante
Nergg
+Nerio x
+Nerithma
+Nermzz7
Neroxcen
+Nerraw
+Nershi
Nerve
+Nerve Cell
Nesk
+Nesquiik KlD
Nesretep
Ness
Nestedloops
+Nesties
Nestl3
+Nestorianos
Nesuvarzytas
NetTrap
+Netamu
Netanelba
+Neteroem
+Netgear
Nethada
+NetherToxin
Netho
Netjes
Netmn15
Neto
+Nettipoliisi
NetturDab
Neturtingas
Neural
+Neuro Lepsis
+Neuro-Tomb
+Neurologist
Neurophys
Neurovelho
+Neut
+Neutral Game
+Neutralised
Neutrally
Neutronas
+Nevar89
+Nevena
Never
+Never Die113
+Never Spoon
+Never die
+Never2Clever
NeverAssume
+NeverBudge
NeverEnding
NeverFreeze
NeverGetRift
NeverGunaMax
+NeverImprove
NeverLateWiz
+NeverMoves
+NeverMyFault
NeverQuest
NeverRespawn
+NeverSailing
NeverSober
NeverTrading
Neverender27
+Nevermaker
Neverover
Nevi
Nevik94
Nevinnn
+Nevit
+New Monkey
+New Tooka
+New journey
+NewAgsWhoDis
NewBoy4321
NewDad
NewFavorite
+NewHobby
+NewMobWhoDis
NewPlayerx13
+NewToBossing
NewWrldHodor
+NewZealands
Newb
+Newb Ranger
Newbillnye
+Newby
NewcastleFC
NewfieTinMan
Newfiebanger
Newguy2003
Newleesh
+Newlut
NewrockkuOS
Newst0nekid
+Newt Jacuzzi
Newtman907
+Newton 1
+Neww Zealand
+Nex Afg
+Nex FFA King
Nex Is My X
+Nex Minion
+Nex Myself
+Nex leecher
Nex1s
Nex2169
+Nexarion
Nexcellent
Nexeiy
+Nexfinity
Nexgen
Nexi
Nexil
Next
+Next Day
NextPet
+Nexus Sire
Nexx
+Neya
Neyburr
Neye
+Neyes
Neyugn
NezFix
Nezqi
Neztea
+Nezuk o
NghtPnda
Ngis
+Ngyessiree
+Nh3r
NhaleXhale
Nhan
+Nhest Cutter
Nhimzo
Nhouse20
Nhyrenn
+Ni
+Ni ke
Niahl
+Niall x
Niawag
+NibblyTitter
+Nibbyus
Nibexx
NiblaNoss
+Nic
+Nic Machine
+Nic Nasty
+Nic Nerc
+Nic co
NicMachine
Nicannand
+Nicao Beck
Nicashi
Nicathan
Nice
+Nice Adept
+Nice Caulk
+Nice Iron
+Nice Nice
+Nice One
+Nice Peaks
+Nice Pets
+Nice try guy
+NiceGuy Edy
NiceGuyEddyy
NiceMarkMark
+NicePotatoes
+Nicely High
+Nichohls
NicholasRage
+Nicholaswei
Nichy
NiciValbuena
Nick
+Nick Grows
+Nick Ints
+Nick Lopes
+Nick Sellers
+Nick X10
Nick0hwolf
+Nick1234101
+NickChubb24
+NickReady
+NickScape
NickSpoof
NickTSMITW
NickVo
NickaClassic
Nickernack55
Nicki
+Nicki Menage
NickisBackyo
Nickk
Nickmitz23
+NickmyKnack
Nicknao
+Nickolai Lol
Nickool4
Nickos
+Nickoss
+Nickoudbier1
Nickroo1234
Nicks
+Nicks OSRS
NicksNipples
NickyPunky
Nickynice23
Nickyy
+Nickyy G
Nico
+Nico BE
+Nico Le Chef
+NicoFreakOh
NicoIas
NicolaSturge
Nicolai
+Nicolaj
Nicolas
+Nicoo
+Nicophilia
+Nicsyth
NidaNewName
Nidalee
+Nidgen
Nidh
Nidhogs
Nidk
@@ -16081,26 +33717,45 @@ Nidmann
Nidoking110
Nidraugas
NieI
+Nief
Niefable
Nielaahh
Niels1608
+Nielscorn
+Nielsen9312
+Nielssjeee
Niely
+Nieman
NietzscheJR
Nieve
+Nieve Hamtaa
+Nieve Rivers
+Nieve Task
NieveIrwin
NieveIsBad
NieveIsThic
NieveMeAlone
+NieveTitties
Nieves
+Nieves Bean
+Nieves Boob
+Nieves Butt
+NievesDead
NievesThighs
Nifelhiem
+NifkeCove
+Nifty Gifty
Nigel
Nighlist
Night
+Night Elf45
+Night Shade
NightNurse
+Night_Furor
Nightbass
Nighter
Nightmare
+Nightmare CX
Nightmare028
NightmareSHW
Nightolas
@@ -16108,174 +33763,354 @@ Nights9
Nightsharp
Nighttman
NightxxShade
+Nightz Watch
Nihilismi
NihilistScum
+Nihplod
Niihilism
+Niiick
+Nijah123
+Nijn
+Nik-fil-A
+Nikab
Nikco
Nike
NikeOnMyFeet
Nikez
Nikit
Nikkerpoo
+NikkiJaxx
NikkiQT
+NikkisDD
+Nikkisaur
Nikko
Niknea
+Niko Solo
NikolasOG
Nikoo
Nikronic
+Nikskill
Nikumei
+Nikun
+Nikz
Niley
+Nilitsu
Nilpferd
+Nils
+Nilwh
NilzZ
+NimaNaruto
Nimajineb
+Nimble Snail
Nimbubu
Nimex
Nimismies2
Nimlasher234
Nimloth_666
+Nimma Crew
Nimmongel
Nimrod
Nina
+Nina Dobrev
+Ninanunana
+Nine E L
NineTs
+Ninef
+Ninesax
+Ninetails
Ninetales4
Ninevolz2
Ninfia
Ningaa
+Nini N Kiki
Ninja
+Ninja Bamsen
Ninja Cow Jr
+Ninja Rasta
+Ninja1978
Ninja66
+NinjaNoodles
NinjaPunch72
NinjaSpeed
NinjaTurt
Ninjaloff
NinjasDark3
+Ninjee xo
+NinjerNick
Ninjunzo
Ninjymate
Ninook
Ninorc
Nintendogz
+Nipaahv
Nipes
Nipitipi
Nipp
+Nipp-on
+NippleSundae
Nippppppppee
Nipps89
NipseyHpvm
Niseraru
+Nishax
Niskha
Nismo
+Nismo Ranqe
+Nisramont
Nissan
NisseIadden
+Nissmo
Nistipata78
Nitefall3n
+Nitepearlz
+Nitetrip
+Nith
Nithe
Niton
+Nitro Crate
+Nitro Dax
+Nitro Rng
+Nitro306
NitroCrate
Nitroalkenes
+Nitrognhorse
Nitros
+NitrosOxide
+Nitrous Bro
Nitsch
+Nitsuj42
Nitt
+Nittany
+NitwitSchool
+Niukkis
Niva
Nivex
Nivory
Nixby
Nixi_NL
+Nixiro
+NixonsJowls
+Nixvet
+Nixxay Iron
Nixy
NixzTez
Nizqa
Nj0y
Nkpi
NlCK
+NlCKT
+NlLREM
NlMBY
NlSO
NllCK
NllL022
NlppleX
+Nmf Euphoric
Nmofm
+Nnavs
Nnoitra
+No 1 There
+No 99s btw
+No Arcane No
+No Autoclick
+No Basic
+No Death Tax
+No DexL
+No Diff
+No Emphasis
+No Fear X
+No Fkeys
+No Honor Yah
+No Joggers
+No Kwuarms
+No Legs Lazy
+No Logic
+No Lucko
+No Means Ya
+No Meds
+No More Bugs
+No Much Bulk
+No Normies
+No Old
+No Pets
+No Rationale
+No Rugrats
+No Saint
+No Senpai
+No Sleepin
+No Souldier
+No Splits
+No Submit
+No Tax Due
+No Tbow Andy
+No To War
+No Xp Waste
+No Zily Luck
+No ah
+No toleranss
+No ur roll
No0dlehead
No53
+No7
NoAntiVenom
NoBankIRL
+NoBanksNoThx
NoBans
NoBp
+NoCreamy
NoDayMercy
NoDealEU
NoDropForMe
NoDurex4you
+NoEdge707
NoFame
+NoFang Wizza
+NoFapp
+NoFlipZone
NoGoodSkills
NoHelp
+NoHesitation
+NoInferno
+NoIronManBTW
+NoLife4Him2
NoLifeCue
+NoLifeLevi
NoLifeMain
NoLifeMcgee
+NoLifeScape
NoLifeSincRS
+NoLiferSoul
+NoLimit
NoLootBag
NoLootNoWoot
NoLove
+NoLuck Mario
+NoLuckBearku
+NoMarinero
+NoMercyUIM
NoMo
NoMore
NoMoreTrades
NoNumbers4me
+NoOlmletSig
+NoPainNoMain
NoPolnT
+NoPrims2k_kc
NoPurpleAku
NoRNGsmalle
+NoScyOrStaf
NoShit
+NoSprayNoLay
NoStore
NoStrategy
NoStress2Day
+NoTangleroot
NoTank4U
+NoTexture
+NoTradeBrad
NoTradeForMe
+NoVa ITI
+NoVow
+NoWaR
+NoXpWast3
NoXpWasted
NoZulrahIM
+No_Dumping
+No_Remedii
Noah
+Noah Dinnae
+Noah G
+Noah Luvs U
+NoahB
NoahGriffith
+Noahfireball
Noahs
+Noam Chompy
Noamonts
Nobber
Nobbys
Nobelanerr
+NobilityTorn
Noble
+Noble Gage
+Noble Oats
+Noble Sticre
NobleCorey
NobleVespo
NoblesForRec
+Noblood
+Nobody Good
Nobodyz
Nobrain
+Nobu
+Nobudy
Nobularlol
Nocando
Nocarred
Nochill
NocnyKoszmar
Noco
+Noctivagous
Nocturnal
+Nocturnal RS
Nocturnal024
+NocwocDaLord
+Nodens
+Nodonge5
Nodorcro
NoeLT
Noeka
Noem
+NoemMeJePapi
Noexi
+Nofolkn whey
+Nogal
+Nogi
Nogoodnms
NoiScape
Noig
+NoirSandy
+Noiserv
Noisy
+Noisy Luigi
+Noita-akka
+Noith
NoizRock
Noizex
+Nokil
Nokiny
NolanAlpha
+Nolch
+Nole Jr
+Noley
Nolifepvm
Nolifer
+Nolifer 28
Nolly
+NoloadRIP
Nolungs
Nolzeyy
Nolzzz
+Nom C
+Nom Ruby
NomCensurer
+NomNomSoulz
+NomadForseti
+NomadRek
NomadsLife
Nommmy
+Nomoenoobs
Nomonater
Nomskichooo
+Nomtiq
Non5ens31
+Noname Nate
Nonc
None
+None Feared
+NoneOther
Nonke
+Nonni
Nonplayer
Nonreal
Nonsense
@@ -16283,29 +34118,50 @@ Nonstop
Nonvalid
Nonwestlee96
Nonwitzki
+Noo Promises
Noob
+Noob Man
+Noob N Smoke
+NoobHey
NoobPkedMe
NoobWrecker
Noobacleese
Noobalhao
+Noobe15
Noobest
Noobicidal
+Noobike00525
+Noobirini
NoobishAct2
Noobs
+Noobsscape
+Noobtyle
Noobtype
+Nooby
Noodle
+Noodle Dude
+Noodle Me
Noodle Soups
Noodles
+Noodlike
Noodz
Nooki
Noolbort
Noon
Noons
+Noonshake
Noopi757
Noorbee
+Noorden
+Noosii
+Nooster
Noot
NopePope
+Noportals
NorCalGreens
+Nora Flora
+Norbet
+Norbsi
Norchis
Nordas
Nordfeir
@@ -16316,270 +34172,660 @@ Nordstrand
Norfok
Norge
Norhig
+Nori Nitsuj
Norilsk
Norimasa
NormHadAFarm
+Normabel
NormanBates
+Normans
Normie
+Normie Main
+Normie helm
+NormieDalzii
+NormieFYI
Normies
+Normy Narked
+Norn
Norqe
+NorrSken
+Norska
+Nortenosk
North
+North No 2
+North Rmmbr
+North1ane
Northerly
Northfork
Northic
+Northnewfy
+Northrod
+Northtoeast
+Northxy
+Norti
Norton
Norton_Gman
+Nortoon
+Nortron
+Noscythe bad
Nose
+Nose Beerz
+Nose Puncher
NoseBeersies
Nosetkl
Nosevesey
NosferatuBoi
Nosni
+Nosnorb
Nosorow
Nost4lgia95
+NostalgiaNp
+Nostalgic
+Nostalgic00
Nostalgimon
Nostos
+Nostrily
+Not 0A
+Not A Lover
+Not A Robot
+Not Bad
+Not Brizz
+Not Carlyle
+Not Cynical
+Not Dzop
+Not Eternal
+Not Flicking
+Not Frac
+Not Gaming
+Not Ice
+Not Internal
+Not Ketho
+Not Level
+Not Lime
+Not Lorppe
+Not Med
+Not Mesijus
+Not Mikers
+Not Muppet
+Not Muppz
+Not Panik
+Not Perry
+Not Rudy
+Not Ryu
+Not Salinger
+Not Schuproo
+Not Sharp
+Not Soft Yet
+Not Sotetseg
+Not Tanzu
+Not Tarczon
+Not Tarny
+Not Twistie
+Not Vaxx
+Not Yakosu
+Not Your Nan
+Not ZB
+Not Zema
+Not a Fan
+Not a UIM
+Not all
+Not an elf
+Not enough
+Not even Dan
+Not main btw
+Not rn Babe
+Not trivial
+Not wow man
+Not-afraidem
NotAFKenough
+NotAJ
+NotALurer532
NotASkrub
NotAStreamer
NotAlright
NotBiabanana
+NotBot893294
+NotEp3
+NotEvenRare
+NotGilthresa
+NotHCJames
NotKD
+NotKailey
+NotKnowMadss
NotLefty
+NotMatched
+NotMaxinSoon
NotMinty
+NotN07NeMo
NotNecro
NotPker
+NotPlateWolf
NotReady
NotShaneska
+NotSoCasual
NotSoHCZoro
NotThaFather
+NotUIM
NotUrAvgTim
NotUrBisnis
NotValidName
NotYerGuyPal
NotaCola
+Notanedgepkr
Notanoob12
+Notfatprism
Nothard
+Nothin Lasts
Nothing
+Nothing Sold
+Nothing2die4
NothingMate
+NothinqThere
Notjoeybloom
Notlayla
Notmyrsname
Notori
Notorious
+Notorious N1
+NotoriousALB
Nottarg
+Nottingham
+Notutoring
+Notwind
Notz
+NouGIM
Nour
+Nouvelle Vag
+Nov
Nova
+Nova Lova
+Nova NK
Nova Rez
+Nova X1
NovaDragonX
+NovaNovNov
NovaNova_v1
+NovaaDay
+Novacult
Novahearts
Novahria
Novalisky
+Novamus
Novaqueen
+Novaspell
+Novelled
Novem
+November Air
Novesey
NovicePlayer
+Novist
Novizy
+Now Boarding
Nowa
+Nowa Lyfe
Nowlan2
Nowoxifer
Nowt
Nowuh
+Nox Irea
Nox1de
+Noxai
+Noxeek
Noxelder
Noxia
Noxied
+Noxif
+Noxifer Nino
+Noxifer Noob
Noxifers
Noxiti
Noxitrall
+Noy rs
+Noys
NozFox
+Nozel
+Nozzie
+Nozzles
+Npc Contact
Nppb
+Npzu
+Nrsa
Nrse
+NsG Flames
Nshit
+Nsns khalifa
Nsoak
+Nsor
Nssc
+Nstfu
Nt0y
NtQuiteRamb0
Ntsf
+Nu ff
+Nub Cakes
+Nub Cape
+Nub Die Plx
+Nub II Elite
+Nub at PvM
Nubby
+Nubby Nubnub
NubbyOtter
+Nubciclez
Nube
Nube101
Nubje
+Nubslie
+Nubthhh
Nubutraum
+Nuc1ear
Nuck
+Nuck Formies
Nuckie34
+NuckinPhutty
+NuckkinFuts
+NuclearDron3
NuclearShift
+Nucleons
Nucleotide
Nucu
+Nue
+Nuffedyr
+Nuffers
Nuffyz
Nuffz
+Nuge Hews
Nugget
+Nugget Farm
+Nugget8453
+Nuggo
Nugs
Nuhapiippu
Nuigaia
Nuirokay
+Nuk3rO
+Nuke
Nuke Rofl
NukeDuke98
Nukkumassa
+Nukooa
+Nukster
+Null God
+Null Quiet
+Null Scaper
NullObject
+NullTalisman
+Nulliko
Nullish
Nullly
Nuloh
+Nulsen
+Nuluki
+Num1 StepSis
NumTaker
Numazu
+Numb God
+Numb Too
+NumbButWhole
+NumbaWanGIM
Number
+Number Forty
+Number is 47
Number1
+Number1 Bass
Numbermatch
Numel
Numenor21
Numerater0
+Numerikaali
Numidium
+Numinious
Numismatist
Numpad
+NunWithAGun
Nuna
Nunac
Nunc
Nuno
NunsRtight
Nunsbox
+Nuoli Z
+Nuori Karhu
Nuparu22
Nupayne
Nupiso
Nuqubba
+Nuqx
NuranJeezes
+Nurco
Nurdal
NurgleBurgle
+Nurrminatorr
Nurse
+Nurse Turbo
Nurselie
+Nursering
Nusky
Nussi
Nust
+Nut Nut
+Nut on Nieve
NutStains
+NutZak
+Nutgood
+Nutipaa
+Nutjes
Nutrino
+Nutta
Nutu
Nutviper
+Nutwic
Nuubby1
Nuubi85
Nuuh
Nuuhi
Nuux
Nuwanda
+NvMe
NvMy
+NvMy Madness
NvUs
+Nvh
Nvidas
+Nvious7
+Nvr Ironman
Nvsh
Nwkz
Nxcv1
+Ny e
+NyThinIsFine
Nyaa
Nyalesh
Nyam2
Nyannoid
+NyarkThunaki
+Nybocs
+Nydarb
+Nydde
Nydloh
Nyesqui
+Nyholmeen
+Nyk X1
Nykat
Nyler
+Nymlonn
Nymph
Nyppe96
Nyquistt
+Nyranger99
Nyraxion
Nyrkki
+Nystuen
+Nythan
Nythos
+Nythsama
Nytrate
+Nytrogen
Nyula
+Nyx Avatar
Nyx296
+Nyx_TrueShot
NyxxiePixxie
+Nz Str
+Nz Boy 96
+Nz Str
Nzfisher
+NzhiaT
Nzpkers
+Nzz
+O C M W
+O E M
+O G Herbs
+O G RasTa
+O K E Y
+O L D Z E
+O Lewis
+O N W
+O O 9
+O O O O O O
+O Rodrigo
+O TUGA LINDO
+O X Y G 3 N
+O ctopus
+O dhran
+O hio
O l m e w
+O m a r
+O o g a
+O s s e
+O stake
+O-Scape
+O-Six Newb
+O-SobaMask
O0BY
+O5O5
+O64
+O7 offroad
+O93
OBD2
+OBGYN doc
+OBKush69
+OBLV Empson
+OBLV KKRKAT
+OBLVPIPEBOMB
+OButterstick
OCBP
OConnell
ODarnUFail
+OEM
+OFFS NFS
+OFS I
+OG AlanEspo
+OG BlowsCOX
+OG Boney
+OG Ezena
+OG Germ
+OG Greenery
OG H4zed
+OG Horizon
+OG IronAaron
+OG K1ng
+OG Kassu
+OG Kenobi
+OG Mr Crispy
+OG PvMer
+OG SUOMINEN
+OG Sage
+OG Soul
+OG StrongBoy
+OG Totti
+OG not OJ
+OG-Bebardo
+OG2
OGBloodFam
+OGJezus
+OGKingRavenZ
OGLman416
OGRockstar
OGTeacher
OGThicPickle
OGWhitePanda
OG_Westside
+OH NO PLZ
+OHC
+OHP
+OH_mes
OHv3rdose
+OINK OINK XD
+OId Nite
OJ AVENGER
OK Thug
+OLD MAKAVELI
OLUTMIES
+OLY Krzanich
+OLlVER
+OMEGAPEG
+OMG U DID IT
+OMG a GIM
+OMGstepbwana
OMNIV0RE
+OMX
OMYLANTAAAA
ONCES
ONDERBOKSEM
+ONE EYE Q
ONEBIGJOKE
ONEM0REBEER
+OON HUMALASA
OOOGAABUNGA
+OP Yoyoei
+OPEN NA N00R
OPIronman
OPName
+OPP2
+OREG0N
ORLZU
ORlCHALCOS
+OS Anthony
+OS BAKA
+OS Badger
+OS Flexin
+OS Gdtn
+OS Glory
+OS Hadley
+OS Iron Life
+OS Jordan
+OS Lou
+OS Maroko111
+OS Masochist
+OS Nat
+OS Reecy
+OS Versace
+OS Weesh
+OS dah
+OSBudknight
OSBug
OSCannabis
OSCastleWars
OSColbyStock
OSGingerkiin
+OSGraham
OSGrindscape
+OSHH
OSRASS
-09Reaper
-09Rhys
-09Rvape
+OSRS
+OSRS Brody
+OSRS Cyze
+OSRS DANI
+OSRS Denmark
+OSRS Dresse
+OSRS Hostage
+OSRS Jim
+OSRS Joshua
+OSRS Keegs
+OSRS Moey
+OSRS Rapaaja
+OSRS STIMPY
+OSRS TOBI
+OSRS Tired
+OSRS Zezima
+OSReaper
OSSD
OSSoulwars
+OS_AndyB
+OS_Jazzy
OSzerox
+OTF SPRINKLE
+OUTSlDERS
+OWE N
OZANN
+O_o
+OachKatzal
+Oak Cliff
+Oak Tree Ted
+Oaonui
+OasisRS
Oathbringer
Oathh
+Oatmels
+Oatre
OavTXXrC2Bc
+Ob1tuary
ObZenpai
Obama
Obama2014
Obanana
Obby
+Obby Apples
Obby Cam
+Obby Cape
+Obby z
+Obby200
Obedar
+Obelisks
+Oberschicht
Obese
+Obese Scrub
+ObeseMaurice
ObeyBdubb
+ObeydaWalrus
+Obfuscatiion
+ObiHiGround
+Obib
Object62
+Objection
+Objektas
Objektijuht
Oblitergator
+Obliticks
+Oblivion
Oblodzisz
+Obloid
Oblv
+Oblv Jass
+Oblv mobi
+Obnoxious
Oboi
+Obos
+ObscureFruit
ObscureHeart
ObscureLogic
Obscuremelon
Obsel
Obsidian
Obsidian222
+Obtain Shade
Obvious
Obviouseboyz
OcaJomba
Ocachobee
Ocara
+Ocara Debrew
+Ocarious 2
Occ0x
Occcy
+OccrumsRazor
Occulent92
Occupation
Occupational
Ocean
+Ocean Fog
OceanMachine
Oceanside
Oceanux
+Oced
Ocellari
+Ocelvon
+Ocg
+Och
Ochen
Ochit
Ochrie
+Ockult
+Oclusvision
Ocra
Ocst
+Octagawn
+Octane07
Octane09
Octanes
OctarineJake
@@ -16587,155 +34833,375 @@ Octave
Octavia
Octet
October
+October 12th
+Octoberain
Octopossy
Octoppus
+Ocuflox
+Ocular Rift
+Oculist
+Ocyd
+Odang
+Odawg121
+Odd Focus
OddPhallus
+OddSaus
OddSnipa
+Oddjob46
+Oddloop
Oddni
Odeee
+OdenKozuki
OdensWinterG
Odeon
Oder
Odezt
Odin
+Odin Slayin
+Odissious
+Odiums Champ
Odlaw
Odonodb
+Odophru
+Odors
Odssy
Odsza
+Odyssey Fe
Odyssey310
Odysseyyy
Oenhausen
Oenonymaus
+Oepeloetje
+Oepsie
+OetOet
Oetje
+Of The Rune
+OfThePirates
+Off Pace
+Off Rate
+Off a Bar
OffMyChest
+OffPeesh
Offer
Offering
Offers
+OfficerTFist
Offka
+Offlime
+Offret
Offset
OffsetPaul
+Og Voldemort
OgAcco
OgChrisCudi
OgDankRiddim
OgHood
+OgSephiroth
Ogazumu
Ogg25
+Ogisek
+Ogkek
+Oglong King
Ogmj
Ogopogo5000
Ogre
Oguussie
+Oh Bee One
+Oh Billy
+Oh Canadian
+Oh Daddy Yes
+Oh Edgeville
+Oh Gzuss
+Oh Hi Marc
+Oh Im Ben
+Oh Its Toast
+Oh No Oreo
+Oh So Alone
+Oh Tylor
+Oh Vacancy
+Oh sh
Oh4Sure
OhDannyBoii
OhEmGe
OhHaiMark
OhHeyGrant
+OhIScott
+OhItsMatt
OhJezuz
+OhLookABot
OhManOhJeez
OhMyJosh
OhMyShoulder
OhNo
OhNoMyHymen
OhTurtle
+Ohbi
+Oheck Im Fe
OhhCaleb
+OhhMikey
OhhTiS
Ohio
+OhioTexas
+Ohlander
+Ohm Calvin
+Ohm Free
Ohpiate
Ohseeya
Ohtoodles
+Oi
+Oi Matey
+Oi You
+Oie
Oifey
+Oij
Oikeisto
Oikis
+OilHawk
+Oiler1k
Oilertay
+Oilux
OilyMeat
Oinky
Oishii
+OisnesA
Oispa
+Oispa Kaljaa
OjibweJohn
+Ojigkwanong
+Ojman
+Ok Bud
+Ok G
+Ok Jose
+Ok a y
+Ok-sail zip
+OkYh
+Okadolf
+Okageo
Okaiko
Okay
+Okay Mommy
+Okay Papi
+OkayCCal
OkayTwilly
+Okeechobee
Okeydoke
Okino
+Okke
+Oklahoma Rat
+Oksa
Okupant
+OkzobRS
+Ol Mucker
+Ol Salty Dog
+Ola Nordmann
Olajuwon
+Olav Jr
Olav2002
Olaveraaa
+Olaviitsio
Olbyy
+Old 9m9a9
+Old Abe 101
+Old Anao
+Old Beer
+Old Bill
+Old Birdy
+Old Boy
+Old Champ
+Old Dabs
+Old Delf
+Old Dry KBAC
+Old El Paso
+Old G ordao
+Old Greggg
+Old Jedi
+Old Lancer
+Old Man Bob
+Old Man Cris
+Old Man Rabb
+Old Maxie
+Old Mog
+Old Monkey3
+Old NlCO
+Old Nutbag
+Old Olorin
+Old Pixels
+Old Player22
+Old Rangoon
+Old Sbi
+Old Schooled
+Old Toaster
+Old Yammu
+Old man Kent
OldBae
OldBlueish
+OldBruce
+OldDirtyMan
+OldFishLife
+OldGamma
OldHitta
+OldHulver
+OldQwaltz
+OldRzzlTrog
+OldSkewlRS
OldSkoolKush
OldSteinlein
+Oldbaldman5
Oldburnzy
Olde
+Olde Nite
Oldemark
+Oldinsh
Oldizjr
Oldman
+OldmanP
+Oldmanhandz
Oldschool
Oldschools
OldskuleRS
+Oldsusik
+Oldtimate
+Oldwhiteman
+Ole
+Ole IrIsh
+Ole Martin
OleFrumpacus
+OleMusky
+OleStinkBait
+OleTejas
Oleg
Olei
Olemand8
Olen
+Olen Iron
+Olenpromees
Olertomb
Oles
OlesDpaul
Olette
Olfre31
+Oli
+Oli xo
+OliTheFarmer
Oliivi
+Oliivi Rouva
Olimpus
Olios
Olivas
Olive
+Olive You
+Oliveinho
+Oliver GIM
+Oliver The G
Olivia
Olkikalsar
+Ollie 01
+Ollivanders
Ollonjonny
Olly
+Olm Alone
+Olm Likes me
+Olm Nut
+OlmMyGod
+Olmar
Olmek
+Olmie Wolmie
Olminous
Olmlet
Olmlit
Olms
+Olms Daddy
OlmsNutz
Olmsbish
+Olmspetwhale
+Olobor
Olrox
+Olspa Rahkaa
+Oltsu
Olvi
+Olympic 33
Olysian
Olze
+Oma r
+Omaci
Omar
+Omar Kai
+Omar Khaldun
+Omar Uchiha
Omarinski
+Omatunto
Omaxiu
+Ome Sjors
Omega
OmegaBeast
OmegaRs3LuL
+Omegathletic
+Omegatron
+Omen Forrest
+Omena3
+Omerta
Omfg
+Omhellz yea
+OminousMan
Ommetje
Ommy
Omne
Omni
+OmniRick
Omnicide97
+Omnient
Omnivaw
+Omolon
+Ompikuusi
+Omroep Max
+On Blocks
+On Rate
+On Steven Dr
+On Tv
+On a Bar
+On the alt
+OnAMeme
OnDeaTHrow
+OnPoint
OnRedPanda
OnTheEdge
+On_log_n
+Onana
Onbekend
Onbekende
Once
+Oncey
Onchune
Oncle
+Oncle Jazz
+Onderwerp
+One Arm Chin
+One Eyed Owl
+One Lazy Cat
+One Leaf
+One Off
+One Piece X
+One Record
+One United
+One Wolf
+One au
One life lad
OneBadNWord
+OneBoxBox
+OneCallBTW
OneClickMan
+OneDayIs2Day
OneFalseStep
OneFive
+OneForAll8th
OneFunkies
OneInchDong
OneInchPeen
OneJohn
+OneLeg1
OneLifeGiven
OneLostMain
+OneManBand
OneManBucket
OneManNoob
OneManTeam
@@ -16748,201 +35214,383 @@ OneSillyBoi
OneSnappyBoi
OneTera
OneTickAway
+OneTickBrick
+OneTickyBoi
+OneWhoKnox
+OneWish
Onebuc
+Onedeadthing
Onehidefrog
+Onelaughbob
Onesecafk
+Onesome
Onetick
Onexia
+Onfight
+Ong Gia
Onidhre
Onika
OnionGoggles
Onism
+Onitir
+Onkdah
+Onke
+Onkel Dunkel
Onkelleif
+Onkologen
+Online Coach
Only
+Only 1 Iron
+Only Bussy
+Only Crazy
+Only Fight8
+Only Scotch
+Only Victims
+OnlyBans
OnlyBrand
+OnlyChompies
OnlyCraig
+OnlyDanss
+OnlyDrags
OnlyFFAns
OnlyFans
OnlyFansss
+OnlyFlies
+OnlyGain
+OnlyJars
+OnlyJoel
+OnlyJordann
OnlyKingKoob
+OnlyKisses
+OnlyKnuup
OnlyPepsiMax
OnlyRussell
+OnlySolos
OnlyTheCold
+OnlyWithTime
Onlyfans
Onlyfarm
OnlyyMike
+Onn
Onno
Onoezeleer
Onoin
Onox
OnthatGrindd
+Onu-sama
+Onubis
+Onus
Onuzq
+Onxaba
Onya
Onyksi
Onyx
+Onyx Farming
+Onyxe
Onze
+Oo Step Back
Oodenssiii
Ooelluoo
+Oof Dankus
Ooft
Oofus
+Ooga Booga C
+Ooh Skill Em
Oohf
Oohfunkyme
+Ooiboi
OokOokStrats
Ookfried
Ooktism
+Oomp
Oompy
+Oooh Baby
+OopsiePoopsy
+Oopsralla
Ooskabible
+Oouu Weee
Ooyf
Ooze
Oozymooz
+Op Closed
+Op Wout
+OpGetGood
+Opa Bravo
+Opa Snipes
OpaJei
+Opacki
+Opal Mafia
+Opalfruen
Opatsuno
+Opel Vivaro
Open
+Open GL
+Open osrs
+OpenAI GPT4
OpenTheTill
+Openpuppygo
Opera
Operacional
Operetta
Opex
Opgezwolle
Ophelia
+Ophelia Prim
Opiez
+Opihr
Opinionated
+Opitz
OpiumWard
+Opkikkeren
Oponn
OppaSky
+Oppai Heart
+Oppai OwO
Oppanox
Oppheng
+Opposite
OppositePoop
Oprego
+Opreus
+Ops
+Opt
Optic
+OpticAGS
+Optical itch
Opticplex
Opticplex09
+OptimistLuke
Optimus
+Optimus Pork
+Optiver
Opts
+Optus
Optyfen
Optyfengauww
+Opus Deo
+Opus149
Opus22
+Opyomi
+Oqagin-san
Oqlak
OracleOf
+OracleStud
Oraclez
Orange1213
Orangeboy333
+Oranje Panda
Oranqe
+OrbWeaver
Orca
Orcanater
+Orch
Orchazm
Orchid
Orchidzx
OreSpasm
Oreano
+Oreeezy
+Oregon Weed
Oreinstein
+Oreo Empire
+Oreo UwU
+Oreo Wafer
Oreos
OreosInMilk
Oretizm
Oreton
Orezzer
Organic
+Organic Hemp
OrganicOnion
Organics
Orgasmique
+Orgo
+Ori lion
Oriaks
Orienterare
+Origens
+Origin Puff
+Original BA
+Original Blu
OriginalGoat
Originaljim
Originexo
Orilion
+Oringl Wafle
+OriobanaOuhi
+Oriole
Orioles
OrionDragon
OrionRenegd
Orjan
+Ork Merchant
Ormi
+OrngFish
OrngeManBad
Orodyn
+Oronius
+Orphaaan
+Orphaan
Orphan
+Orphan Annie
+Orphan Soul
+Orphan Twin
+Orphan8r
+Orpheus
+Orpoerpo
Orrey
+Ors striker
Orthago
Orthiss
OrthodoxJoo
OrthopodMD
+Orvud
+Oryx Aksis
+OryxZebu
+Os Him
+Os Hitman
+Os Rolex
Os SMDJ
OsBlackBolt
OsBrody
OsBudknight
+OsDave
+OsIronCrash
+OsRs Vibes
Osav
+Osbenji
+Oscar Jacob
Oscarnight90
Oscietra
Osdorp
+Osetek
Osgu
Osgub
Oshawnasi
+Osidric
Osimhen
Osiris
Osjuicey
Oskar
+Oskar XVII
Oskari
Oskinathor
Osmo
+Osrs Bane
+Osrs Dimitri
+Osrs Goku
+Osrs Mistren
+Osrs Woolley
+Osrs2007
+OsrsBawlz
+OsrsDavid
+OsrsVibes
+OsrsWiki
+Osrshabibi
Osscar69
Osseb
Ossi666
OstBakarn
Ostengar
+Ostentatio
OsteoSoon
+Osteonics
Ostidecriss4
+Ostmumten
Ostracized
Ostrich
Osumi
+Osvo1d
Oswaldorun
+Oswin Oswald
+Osxu47
+Osykoo
Osyrs
+Otago Nz
+Otakar
Otaku
+Otan Olutta
+OtarsBeast
+Othantos
Othelllo
OtherJackets
+OtherWize
Otho
+Otomycosis
Ottarl
Ottchy
Otter
OtterMG
OtterMan
Otto
+OttokarIII
+Ottoman1907
Ottwanbre
Ottzor
Otyugh
+OuchIFarted1
Oucho
+Oud Nieuws
Oudenophobic
Ought
OuiDaddy
Ouija
+Oukashi
Oulusta
+Oumaji
Oumarou
Oumu
Ounaaja
Ouncie
+Our ClapTrap
+Our Kid
+OurLordAllah
OurPage
+OurTbow
+Out Of Herbs
+Out of Town
OutOfBreath
OutOnBail
OutR
Outbid
+Outblasted
Outblasting
Outbox
+Outbreak46
+OuterBodyXP
+OuterShock
+Outgrinded
Outie
OutlawBTW
OutofQontrol
+Outofcontrol
Outohere
Outperform
+Outplayy
Outra
+Outs
Outsider058
OutsidrR
OuttaThePan
Ouze
Ouzi
+OvO
Ovaryacted
Ovaryacting
Ovela
+Oven Dish
+OvenGold
+Ovenschotel
Over
+OverRoid
+Overburner67
Overcame
Overclockers
+Overdose1911
Overhand
OverkillWill
+Overklokkd
Overlegen
Overload
Overload_inc
@@ -16953,155 +35601,334 @@ OverpowTV
Overprepared
Overrated
Oversight
+Overspan
+Overspec
+OvertPyro
Overtaxed
Overthinker
Overtus
Ovid
+Ovl
+OvrLrd Zaros
+Owed
OwenFever
+Owip
+Owl Full
+Owl MD
OwlMyLove
+Owlea
+Owlpeth
+Owlson
+Owly
+Own Risk
+Own Skillz70
Own617
Ownage
Ownd
Owned
OwnedByMK
+Owner Previn
+Owning
Owning4babes
+Ownsz
Ownt
Ownyouall6
+Owusu
Owwi
+Ox Prez
+Ox0 Ko0ol O0
Ox310
+OxStache
Oxct
+Oxcy
+Oxeon
OxideIon
+Oxidising
+Oxidizing
Oxiduck
Oximas
Oxit
Oxium
+Oxjenks
+Oxoi
+OxyCottN
OxyDream
Oxycotton
Oxyoxyoxyoxy
Oyrn
Oyster
+Oyster37
Oyugock
Oyvin
Ozaiii
+Ozak
Ozcred
Ozeana
+Ozenc
Oziarch
+Ozin
OzirisRS
Ozium
Ozmone
+Oznerbon
+OzokuLight
Ozuhan
OzyMex
+OzzMate
+Ozzb0
Ozzerro
Ozzie
Ozziemate
Ozzio
Ozzy
+Ozzy Hobbit
+Ozzykye
Ozzys
Ozzzyy
+P 0 W N E D
+P 0 E F
+P 0 R G I E
+P A M K A
+P A P Z
+P A R N Y
+P DIRTY SODA
+P EDRAO
+P Eng
+P I T
+P K
+P O L I S H
+P O T A T O
+P O V I
+P Purts
+P R O X
+P R S
+P V M Lew
+P W A Y
+P Y R O
+P a n x o
+P eachy
+P erfect Ten
+P h Z o r o
+P i
+P ix
+P ixe l
+P o z e
+P oH
+P ockets
+P r o g r am
+P udding
+P ure
+P uss Wizard
+P00ksalukes
P0CKETPUSSI
+P0ES
P0PE
+P0RKB0I
+P0ST HUMAN
+P0TIONS
+P0TTER
P0TUS
P0ddy
+P0nti4c
P1CC0L0
P1CK3R1NG
P1Hat
+P1SSBANDIT
+P1ZZA EATER
+P1ZZY
+P1ckleR11ck
+P1ssDr1nk3r
+P1stols
+P1tts
P1zzaTheHutt
+P1zzaa
P2Chill
P2D2
+P2P Race Car
+P2w Scape
+P3C
P3RKELE
P3RLICH
P3RMMUT3D
+P3T3 IS G0D
P3TAR
P3aceful
+P3loce
P3rcy
+P46
+P4CK
P4DLA
P4RKER04
P4cH
P4sk
P5ythix
+P6D
+P7DRO
+P9
+PA N I C
+PACK WATCH
+PACKETLOSS
+PACTV
PALAK1KO
+PALL3N
+PALSAM
PALSANMAKI
+PANTY DROPER
PAPA
+PASTORIKONE
PATPATMAX
PATRlOOT
PAUL
+PAULWALKER
+PB Barbie
+PB Dauntless
+PB J
+PBT Yumi
PBTM
+PBnJ
+PC PrincipIe
+PC0TE
PCCZ
+PCDO
+PCE
PDGA
PDizzleworth
+PE strategy
+PE3ST
+PEAMINlSTER
PEARSON92
+PEC Zwolle
PEEKYNUMBER1
+PEEinAcup
PERMA
+PERSE
PET3R
+PET3R PAN
PETEAIR
+PF Killaz
+PFOF
PFalciparum
+PG MAIN
+PG-13
+PGA_Pope
PGMid
PGmeupe93
PH1SH3DB4N
+PHGomes
PHLP
+PHURY
PIAN0
PICC
+PIITAA
PING
+PINKYxBRAIN
PITFIGHT
PJ Salt
+PJRovers
+PK NOOB BR 2
+PK Shark
PKTHEOTHER
PKing
PL4T1N4
+PLANET SHlT
+PLAYER827324
+PLAZID
PLSDONTPLANK
POGPOGPOG
POGvM
POMP3Y
+PONYRIDER73
POTTER
+POTUS DJT
+PPale
PPorappippam
+PQMF
PQWNEM12XXSS
PRADA
PRAISE
+PRAISE FOOT
+PRAISEHELIX
PRETTY
+PREW0RKOUT
PRIM0B0LAN
+PRIZ0NM1KE
+PRODaintOFFu
+PRlNCEE
+PSMark
+PSO Pokie
PSRB
PSTjager
+PSY OPERATOR
PSacz
PTKNT
PTMN
PUBG
PULL
+PULL A GLOCK
PUNANYCEZZ
PUNANYMASSIF
+PUPPY SIT
+PURP xx
+PURPLE MAN X
PUSHUPS
PV60
+PVM PLUS PVP
+PVM Zem
+PVM lifee
PVMGrim
PVMramranch
PVPJACKUS
PWNJoLee
PWNl
+P_rple
+PaIe Nimbus
PaIm
PaJau
PaPaSaucee
+PaPePiPoPuPy
+PaR0
PaShango
PaTeraNauu
+Paaaants
Paaatriick
+Paarse Kat
Paarty
+Paatse
PabIoEscobar
Pablana
+Pablo Q
+PacDan
PacYakJack
Paca
Pace
+PaceYourself
Pacellino
Paciar
+Pacifico0ler
+Pacifist
Pack
+Pack Yarack
PackAnother1
+PackYakistan
Packapunchd
Packers
+Packers Ammy
+Packfan35
PackingCope
Packmanjr
PacksOfBagel
+Paco 41
Pactii
+Pad of Note
+Paddy Simcox
+Pademelon
Padge
Padraig
Padrew
Paduann
Paehkisfe
Paem
+Pafffy
Paffio
Pagan
PaganFox
@@ -17110,60 +35937,115 @@ Page
Pagman73
Pahapukki
Pahizz
+Pahys
+Paid 4
Paike
Pain deliver
+PainInTheAx
+PainRain
Painb0ws
Painovoima
PaintBoxx
Painta
Painted
+Painz Wrath
+PairODocks
Paixo
+Paiyrd
Paizuri
Pajaaay
+Pajama0sam
Pajaripipari
Pajita
Pakaika
Pakanajumala
+PakasteOlut
Pakford
Pakmaniac
+Pakr04
Palabutoh
Palad1um
+Paladijn Mb
Palapak
+Palataan
Palatro
Pale
+Pale Marble
+Pale Player
PaleCocoon
+Paledeano
+Paleek
+Paleek sucks
Palenaatio
+PaleoRanger
PalestineHC
+PaliRebel
Paliperidone
+Paljad
Pallas
+Pallas Cat
+Palle Panik
+PalliJarn
Pallihintti
Palllister
+Pallof
Palmboom
+Palmboom95
Palt
+Palworld CEO
Paly
PamPams
Pamdora
+Pamela Isley
Pampas
+Pamz
+Pan Biceps
+Pan Jawel
+Pana Sicknez
Panacea
+Panal
+Panarin
+PancakeOSRS
+Pancaker
Pancakey
Pancukeshi
Panda
Panda Godz
+Panda Pride
+Panda Rua
+Panda Seany
PandaBier
PandaBrommer
+PandaKIKI
PandaMan
PandaMcfanda
PandaPowa
+Pandasadge
Pandaux
Pandaz
Pandeh
+Pandemicbowl
+Panderal
Pandiman
+Pandini_O
+PandorazBox
+Panelka
Panera
+Panesii
+Panette
Panferno7
Pangolins
+Pangs
Panic
+Panic King
+Panic Papi
+Panic Switch
+PanicThenRun
+Panicupdate
+Panini
Panixate
Pankekee
+Pankki on
Panky
Pannu
Pano
@@ -17171,32 +36053,82 @@ Panoople
Panorramix
Panqueques
Pans_Gaming
+Pansendoras
PansophicaI
Pantaloon
+Pantelic
Pantera1230
PanteraWalk
Panthalassa
+Panther_Cap
+Panties D0WN
Pantix
+PantlessDuck
+PantsShitter
PanzerMarkV
+PaoZi41
Paoul
+Pap Smoke
Papa
+Papa Beat Me
+Papa Beer
+Papa Chibs
+Papa Falco
+Papa Glock
+Papa Hitman
+Papa John
+Papa Kev
+Papa Peck
+Papa Penguin
+Papa Raniel
+Papa Rook3
+Papa Scape
+Papa Shaydee
+Papa Sheek
+Papa Snacks
+Papa YY
+Papa Zuk
+Papa jinx
+Papa tim
PapaCart
+PapaFozzy
PapaJohn
PapaJoyce13
+PapaMoxie
+PapaParsley
+PapaSarducci
Papabeer
+Papagecko
Papaija
Papalotee
Papapa
Papaya
+Papaya Pete
+PapayaGod
PapayaPetee
Papegaaitje
Paper
+Paperbag
Papi
+Papi Baz
+Papi Chop
+Papi Feb
+Papi Fish
+Papi Gains
+Papi Okapi
+Papi Sam
+Papi Sean
+Papi Six
+PapiTron
Papicito
+Papicodone
+Papido
PapieLexus
PapierHier
+Papierschere
Papii
Paplip
+Papo Sauce
Pappa Mauly
PappaPizza
Pappanopolis
@@ -17204,65 +36136,120 @@ PapperNapper
PaprikaBoi
PapuIsThatU
Papukaia
+Papyea Fruit
+Papz Mage
Paqan
+ParKy_ParK
+Parabhjeet
Parabolic
Paracleis
+Paradoos
Paradox
+Paradox 2277
+ParadoxAU
+ParadoxCrux
Paradoxal
Paralimpian
Parameters
Paramost
+Parandrus
Paranosys
+ParaplegicIM
Parappa
ParasiteHunt
Parasitoid
ParasoxX
Parazino
Parc
+Parc Ferme
+ParchedToast
Parciparla
Parent
+Parfour
Parhaat
Pari
+Pariera
+PariguayoGL
Parikh
+Parikkala
Parish
+Parjesh
Park
+Parkchae
Parkehh
+Parker177
Parker1770
ParkerSquats
Parkerrr
Parkuh
Parky
Parkz
+Parley0
ParmsG8
+Paroni007
+Paront
+Parotis
Parox3tine
Parrot
+Parrot Champ
+Parrot Le Fe
+Parrot Poop
+Parsecs
Partey
Parth4903
Parthnix
+Particulae
Partly
+Partonax
Parttime
Party
+Party Fraud
+Party Pete
+PartyRock
+Partyhaty
Partynexdor
ParuParu
Parvovirus
+Parx98
+Parxe kurita
+Parzival32
Pasadinas
PashkaPushka
Pashmina
Pasianssi
Pasiiba90
Pasikaustes
+Pasito
PasitoBandit
Pasje
+PaskaJatka69
PaskaneHomo
+Paskie
Paskis
Pasmo
+Pasrules
Pasta
+Pasta Lance
+Pasta Mancer
+PastaShel
Pastabrain
+Pastafreezer
Pastagonia
+Pasticcione
Pastor
Pastry
Pasu
+Pasza1357
+Pat NoScythe
+Pat The Nerd
+Pat the Cat
+Pat twumasi
+Pat_y
+Pata2006
+Patalopodus
+PatchRS
Patchley
+Patdog666
Pate
Patella
PatentedName
@@ -17271,6 +36258,7 @@ PathTracker
Pathogen
Pathways
Patio
+Patious
Patmantheman
PatoVelaz9
Patojo
@@ -17279,19 +36267,34 @@ Patrexion
Patrician
Patrick
PatrickClick
+PatrickLaine
Patrickp35
+Patrik Laine
+Patriot88
+Patriotscape
Patriotsp
+Patriottj
+Patrolliin
Patronique
Patrouski
+Patryk 1
Pats
Patsey
PattMyGun
Patta1
+Patte
Pattos
+Patty C
+Pattycakes19
Pattyrick8
+Patyfatycake
Pau1ekas
Pauk
Paul
+Paul 0
+Paul Beer
+Paul Ski
+Paul0 H
Paul007
Paul90333
PaulD
@@ -17299,13 +36302,23 @@ PaulOH10
PaulTheRabbi
Paulchritude
Pauleee
+Paulest Paul
PauletteRose
Paulius
+Paulk23
Paulrat
+Paulrat 3
+PaulyNFS
+Paum No Xeem
+PauperPlayer
Paupy
+PauseGuy
Pauwels
+Pauwels v2
+Pavies
Pavio
Pavla
+Pavlacci
Pavlvs
Pawggrs
Pawgz
@@ -17313,46 +36326,80 @@ Pawko
Pawlmeister
Pawlu
Pawlzer
+Pawn 69
+Pawn M8
+Pawrie
Pawwsy
+Pax Mundus
Paxin
Paxy
+Pay2ClickLol
PayMyDeedFWD
Payne_Trayne
Paznos6
Pazuta
Pazzo-Repack
Pb Fe
+Pb and Jd
Pbby
Pbkillua
+PbyOne
PdaddyReborn
+PdfPKerNoGF
+PdiddyReborn
+Pe en
+Pe t er
+Pe1ipp3r
Peabody
PeacandLove
Peace
PeaceNLove31
+PeaceOfMind
Peacebuild
+Peaceer
Peacefrog
+Peach s
PeachKing
+Peaches5000
Peachh
Peachhh
+Peachy Tank
+PeachyBrute
PeachyDean
+Peaco
Peacoat
Peak
+Peakado
Peake
+Peake7
Peakleaf
Peaky
+PeanutBTW
Pear
+PearOfApples
+PearlNechlis
+PearlWeed
+Pearlito
Pearshaped9
Peasant
+Peasyy
PeatMoss
Peatie
Peba
+Pebbex
Pebblez
PebisGuan
Pebl
+Pebu
Pebz
PecanBread11
+Pecker Punch
+PeckerFish
+Peckerflexer
Pecki
Peco
+Pecs
+Pectorialis
Pecuni75
Peddler
Pederbuus
@@ -17360,30 +36407,57 @@ Pedestrian01
Pedro
Pedro5901
Pedtato
+Pee Jay Salt
+Pee Kay Err
+Pee Mud
+Pee On Irons
PeeJayPlayz
PeePee
Peeanut
+Peeble
+Peeeeeekaaaa
+Peeke
Peel
+PeelMyCarrot
PeeledBanana
Peely
Peen
PeenLover61
+Peep Taimla
Peepo
+Peepo Parker
+PeepoPants
+PeepoRiot420
+Peeps Cx
+Peepzilla
PeerTheSeer
Peernicus
Peeshuuu
+Peest
PeetrusEst
+Peevish
Peevy
Peezerthecat
+Peg Boots
+Peg My Arse
+Pegasian
Pegasians
+Pegasus51C
Pegi18
+Peha
Pehkis
Pehmolelu
+Pei898
+Peighniss
Peiin
Pein
Peipeilaile
+Peipi
Pekaia
+Pekays
Pekdon
+Pekka Elo
+Pekka-Eric
Pekka557
Pekkaa
Pekkaad
@@ -17393,105 +36467,211 @@ Peksaad
Pelaa
Pelaaja1
Pelco
+Pele Marreta
+Peli Moapa
Peligroso
Pelikaen
Pelippper
+Pelirroja
Pelmee
Pelosi
+PeltiPirkka
Peltolammi
+Pemiel
+Pen Sir
Pena
+Penally GIM
+Penance Boom
Pencelis
PencilVesta
Pendax
PendulumC
Penetrader
+Peng Lightey
PengMaster
+Penge1616
Penguin
+PenguinBelly
Penguino
Pengwim
+PeniAnus
+Peniel
Peninsula
Pennstate
Pennsylvania
PennyPinchnJ
Pennybag
+Pennycord
Pennywise
Pennywise070
Pentagrammi
+Pentektonyx
Penthera
+Penthrox
Penthus
Pentu
+Penward
Peopledud
Peoples111
+Peor
+Pep Kroket
Pepar
+Pepar Kakan
Pepclub101
Pepco
PepeGUH
PepeHang
PepeLaughing
PepegaScape
+Pepeh
Pepemiguel
+Pepo Is Me
Peppey
+Peppi
PeppiEnSossi
+Peppusieni
+Peppy Pete
Pepsi
+Pepsi Maxed
+Pepsi Maxia
+Pepsi575
+PepsiMaxL1me
PepsiTwist
Pepsies
Pepsipowars
Pept
+PeptoGlizmol
Pepuszka126
Pequenaud
Pequette
+Per Ke Le
+Perc 3m
+Perceive
+Perceptivity
+Perch Curry
Perchlorate
+Percy Grail
+Percy Nash
+Percy Turner
+Perduh
+Peremees
Perfect
+Perfect Dark
+PerfectCurse
+PerfectJerni
PerfectProof
+Perfectaaa
+Performax
Perfringens
Pergert
+PerhapsGuy
Peridots
Perikles460
Peril
Perkinatored
Perky
+PerkyPorker
Perlen
+Perm II Mu8e
+Permabulk
Permded
+Permedd
+Permer
Permuh
Pernix
+Pero Scoped
+Perox
Perp67
Perpl
+Perplox
Perrault
+Perrif
+Perry Hubes
+Perry T
Persephatta
Perseveranca
Persian
+Persilja
+Perspective
+Pert
+Perterritus
+Perth
+Pervy x Sage
Pesiz
Pesoprkl
Pessimism
Pest
+PestGodd
Pestilance7
+Pestilent Bt
Pestle
+Pet Alpaca
+Pet Awowogei
+Pet Cape
+Pet Crusader
+Pet Eric
+Pet Hunta
+Pet KBD
+Pet King
+Pet Luck
+Pet Meowtain
+Pet Smuggler
+Pet The Cats
+Pet Ty
+PetBoost
PetCorp
+PetHuntBrad
PetHuntGrind
PetHunta
PetHunting
PetPlease
+PetSpooner
PetUrSausage
+Petal
Petalite
+Petar228
Petarss
+Petched
+Petchy inis
+Petcord
PeteRePete
+Pete_901
Petega
+Petelgeuse1
+Peteniice
Peter
+Peter DIY
+Peter Dupas
+Peter Kent
+Peter97
+PeterLimbeek
+PeterPlanker
PeterRS
PeterTheSalt
+Peterh
Peterm
+Peterszoees
+Petey pleb
Petit
PetitKeBeQ
Petite
+Petite Poire
Petless
+Petooted
Petpet
+Petrenkovitz
+Petricsh
Petriq
PetroX77
Petrosian
+Petting GIM
PettyName
Petuhh
Petz
+Peuramaa
PewTheMeow
+Peweherman
+Pewming
Pex3
PexBoi
Pexci
@@ -17499,56 +36679,97 @@ Pexezz
Pexterity
Pextill
PeytyPoo
+Pez xX
+Pez za
Pezy
Pfiny
Pfister
Pfle
Ph0g
+PhD Fred
+PhD Funk
+PhD in TCG
PhaMaTics
+Phader
Phaero
Phai
Phainesthai
+Phalamon
Phallic
PhallusBigus
Phamia
Phamit
Phant
+PhantomDred
PhantomFiend
+PhantomLogic
PhantomVS
+Phantombear7
Phanton
PhappleSauce
+Pharaoh Chad
+Pharaoh Ion
Pharmafia
+Pharqen
Phase
+Phasedd
Phasing
Phasmatus
Phasmatys
Phat
+Phat Dik
+Phat Pat
PhatAsher
+PhatFrat
Phathead
Phatman348
+Phats
PhatsoCallum
Phatt
Phatty
Phattyftboy
Phaxe
+Phd n Arteez
Pheasant
+Pheasant Egg
+Phels
PhenXX
+Pheniex2
Phenomenal
+Phensa
+Pheonixess
+Pher
Phernix
Phetty
Pheus
Phex
Phi184
+Phibes
Phil
+Phil Coulson
+Phil Mcrakin
Philip
+Philip424
Philipp
Philkwl
+Phille
+Philli Blunt
+Phillies
+Philliez
Phillip
+Phillip R
Phillipp
Philly
+Philly Sucks
+PhillyFiller
+Philoi
Philosophia
+Philou
+PhilsBent
+PhilsUnlucky
Philth
Philtration
+Phin_C
Phinxu
Phinz
Phipple
@@ -17556,90 +36777,181 @@ Phishn
Phizo
Phlaja
Phlegmy
+Phlemming
Phloppster
+Phlopsy
+Pho Z
Phobias
PhobosDeimos
Phoibos
Phonatik
Phone
+Phone Number
+Phone Scaper
PhoneHC
Phonebook
Phoneman
+Phools
Phoque
+Phor Skin
Phosani
Phossa
+Phostus
Photographs
Photon
Photonic
+Photos
+Phragasm
Phrak
+Phrexyian
+Phrez
PhriarPhace
+Phrizo
+Phrocks
Phsteven
+Phug
+Phugma
Phuke
Phuket
Phwan
+Phxrm
Phylum
+Phyrlo
Phyro
Phyronex
Physics
+Physics Jedi
+Phytz
Phyzxs
+Pianio
+Piano Hands
+Pianoanddrum
+Piantissimo
Piasa
+Pic of Feet
+Picante
Piccoloownsu
Piccy
+Pichi Slayer
Pickl3Lover
+Pickle Josh
+Pickle Vick
PickleKez
+PickleSaucy
+PickledWater
Pickles4Me
+Pickles69314
Picklzz
PicnicBomber
+PicoDico
Picolo
PictureID
+Picuu
+Picuwu
+Pidbull
+Pidbull 1
+Pidgeot18
Pidgey
+Pidgy
Pidiot
+Pidrux
+Pie
+Pie Dish
+PieGPT
Piecekeeper2
+Pieces
Pieck
+Pieerio
Piemaksa
Piemans
+PiemieJurrie
Pieper
+Piepieweenie
+Pier Just
+Pierced Wolf
+Pierenbadje
Pierniczek00
+Piestove
Piet
+Piet 21
PietKrediet
Pieter
+Pieter Zwart
+PieterPep
Pieterjan
Pietermans
Pietn4
+Pietrangelo
+Pietrnogiets
Piety
Piety Prease
Pieza
+Pieza de oro
Piffen
Pigeon
+Pigeon Soup
+Pigeonmight
+Piggi Smalls
Pigi373
Piglette
+Pigman461
+Pigmeu
+Pigpikerush
Pigpuffer
Pigs
Pigwardfrog
Pihl
+Piip MEEGA
+Piipar
Piirivalvur
+PikaChar222
+PikaChin
+Pikachewed
Pikachos
Pikachu
+Pikachu87
+Pikachurine
Pikachuz
Pikkets
+Pikkett
+Pikku
+PikkuSheikki
Pikkupbrix
Pile
+Pile O Poo
+Pile o Dirt
Pilgrimage
Pili
+Pilli
+Pilliad
Pillifnutten
PillowBoy
PillowCowCow
+Pillukarva23
Pilmir
Pilodro
PilsToTheMax
Pilsners
+Pilum
+Pim Pam
+Pimay
+Pimfortune
Pimp
+Pimp Ralpert
+PimpWeazel
+PimpWhistle
Pimpert
+Pimpin Thots
Pindaro
Ping
PingFlopped
Pingu
Pink
+Pink Avocado
+Pink Bar
+Pink Cow34
+Pink Iron
+Pink Lube
PinkDrinkSip
PinkShopRag
PinkVoidZ
@@ -17650,99 +36962,205 @@ Pinkywinky9b
Pinkyx0xo
PinndOutGoon
PinnkBunny
+Pinnn
Pinpi
Pinquana
Pinsamt
+PintOfMilf
Pintel
+Pinterests
+Pinu
+Piolin
+Pioniers
Piovendo
+Piparikissa
PipeQlo
+Pipluppp
+Pipo-badeend
Pippinmary
PippleNinchy
Pipposan
Pippuri
+Pir Alain
+Pirat
Pirate
+Pirate Kanye
+Pirate Patch
Piratey
Pirelly
Piri
+Pirig0
Pirihuora666
Piripaque
+Piripippeli
+Pirjo
+Pirjo69
+Pirk the pk
+Pirkka Olut
+PirkkaJokeri
+Pirkkamies
+Piroskinha
PirpleSlirpy
Pirres
+Pirulitim
Pisatronas
Pisau
+Piscarallius
Piscis
Piscolaz
Pistacchio
Pistoliftero
+Pit Stain
+PitGamin1311
+Pita Diver
+Pitbulterje
Pitby
Pitchfork
Pithikos
+Piticarus
Pitiless
Pitinator
Pitt
+Pittaaaaa
PitterPattr
+Pittsburqh
+Pitudin
+Pivach
+Pix Pixelle
+PixarMarsTTV
Pixel
+PixelMuffin
+Pixie Henge
Pixieragnar
Pixkekoa
+Pizdec
Pizza
+Pizza Addict
+Pizza Box
+Pizza Flip
+Pizza Mang
+Pizza Patron
PizzaDaHutt
+Pizzaman5510
+PizzasIron
+Pizzler
+Pj The Pj
+Pjotr
+Pjt77
+Pjumi
+Pk Bot 37
+Pk M4ster007
+Pk Wit P Hat
+Pk3iru_Osrs
Pk3r Range 7
Pk996
PkGoW
PkMeIfUgey
PkTheKid
+Pker nr 1337
+PkerTrysHard
PkforFun
Pking
+Pkingranged9
PkmnTrnrRED
+Pkmort
Pksorwd
+Pkyr
Pl0xed
Pl3b
PlELS
+PlFFMAN
PlGGY
+PlHLAJA
+PlMP
PlMPPl
+PlMl
PlPPY
+PlRATE KING
PlSS
+Plaagen
Plaasda
Plaat
Placedoemax
+Plaeggs
+Plaid10
PlaidMarquis
Plain
+PlainIronMan
+PlainNoGood
Plaininsane
+Plamt
Plan
+Plan B-gs
Plane4611
Planet001
+PlanetPaul
Plank
+Plank Egger
+Plank Sodplo
Plank2G
PlankForBank
+PlankTan
Planken bos
+Planker
+Planking Brb
+Plankrunner8
PlanktSoms
+Plant Herbs
+Plantdaddyy
Plap
+Plasma Taco
Plasmore
+Plastikos
+Plastiscines
+Plat Kont
PlatGX
+PlatScrub
Platinum2008
PlatinumHerb
+PlatinumSage
PlatinumSeif
Platnuim
Platnum112
Platpus3000
+Platyroo
Play
+Play Lazy
+PlaySoloBro
PlayToAFK
Playbunny
+PlayedBe4EOC
Player
+Player 0ne
+Player 4519
+Player Gap
+Player Name
Player235711
Player35254
+PlayerIsBusy
+PlayerSlayaa
+Playpro5
+Plays high
+Playtest
Playthious
Pleasantries
+Please pot
Pleasurehole
+Pleb Nick
+Plebbocs
Plebiside
+Pleblio
Plebnex
+Plebs
Plebz
Plece
Plegh
Plexasaurus
Plexx
Plez
+Pliemp
Pliep
+Pliep Ploep
Plips
Plisski
Plixious
@@ -17750,210 +37168,412 @@ Plocc
Plogbilen
Plogdog
Plomono
+Ploop
Plootbot
+Plop deez
Plopi
+Plopr
+Plopzorg
Plorky
Plorr
Plostic
Plot786
+PlovasYonder
+Plovilas
Plow
Plowthrough
PlsAName
Plsmrlizard
Pluc321
+Pluckky
+Plug In Baby
Plugatron
Plugged
Pluggen
Pluhdl
+Plukketje
PlumTickler
+PlumbThatA
+PlumpGiraffe
Plumper
+Plundered
Plunkton
Plunukki
+Plupian
Plus
+Plus Vite
PlusZack
+Plush Mole
Pluto
Plutonium
+Plutonium 94
+Plym
Plz LD Nat5
+PlzGiveBonds
PlzRnGesus
+PlzSpoonFeed
+Pm Me Imps
+Pm me to spy
+Pm4 eloboost
PmFun
Pmy39
Pnak
PneFc
Pnia
+PnutButtrJly
PoachedLion
+PoakedSussy
+PoaneFoane
PoarIIneemn
+Pocholo
Pocket
+Pocket Cards
PocketBandit
PocketSock
+Pockipickle
Pocy2
+Pod x
+Podvodnik
+Poeiermolke
Poem
Poenes
+Poephoofd
Poepi12
+Poepjong
+Poepsiee
+Poerto
Poet1321
Pofka
+Pog Dog
+Pog isma
+Pog-kek-Lul
PogChampagne
PogMeister
PogTato
+PogTato Iron
Pogba
+PogoPochette
Pogsled
+Pogue4Lyfe
Poikanen
Point
+Point Guards
PointTax
+Pointstormy
+Poison Ives
+Poison x Ivy
+PoisonCobra
PoisonX7
Poisonblack
Poisonous
Pokaroo2
+Poke Champ3
+Pokeaotics
+PokedexNo258
Pokefreud11
Pokemaster
Pokemon
+Pokemon Ruby
+PokemonScape
+Pokemonguy16
+PokerPro
+Pokerboy19
Pokergod720
+Pokifeet
+PokimanesBF
+Pokoloko
+Pol o
Polaar
PolakYT
+Polar
PolarTrip
Polarin
Polarisi888
Polarus
Polarward
PolderLatina
+Pole Met
+PoleVault
Polio23
Polish
+Polish Eagle
Polite
+Politoed
Polixo
Polkapolkka
Polkastarter
Poll
+Pollar i
Pollekeuh
+PollenJ0ck
Polllie
+Polllo420
Pollnivneach
+Pollo Dry
PolloGrande
Pollofrit0
Pollum
Pollywog
PoloG
+Poloskyy
Polter
+Polyamorous
+Polycoffin
+Polyesterday
+Polygonise
+Polyhedra
Polynomail
Polyphobia
+Polywoggle
+Pomi Xd
Pommy
Pompeyo
Pomposity
Ponas
+Pond Scum
+Pondres
+Ponkito
+Ponobi
Pont
Ponti
+Pontifex
Pony
PonyOwner938
+PonyPorker
+Ponzy FTW
+Poo Socks
PooAtPVM
+Poobanans
+Pooby Bag
+Poodle
Poofpooh
+Poogen
+Poogster
Pooh
+Pooh Breezy
+Pooh Say
Poohead92
Poohsea
Poojabber364
Pook
+PookiDaPooki
+PookieB3ar
+PookieBearOG
+Pool Noodlez
+Pool Toucher
PoolboyFiji
Poon
+Poon Lips
+PoonHandleMe
+PoonTangPie
PoonTappa
Poonanjo
Pooned
Poonjuu
+Pooohie
+Poop
+Poop Shidder
+PoopyRico
Poor
+Poor Advice
+Poor Clicker
+Poor Content
+Poor Nooby
+Poor You
Poortom24
Pooscaper
PootLoops
Pootzie
+Pootzie_xox
+Pop In Smoke
+Pop N
+Pop-up ad
+PopTheIron
Popcornachi
Pope
+Pope VI
+PopeChamp
+PopeDenis
Popeet
+Popepu
+PopeyezGain
Popfumes
Popkorni
+Poplo
Popovich
+Popoyoi
Poppa
+Poppa Bev
PoppaChoonie
Poppajohns
+Poppin Awf
+Poppscotti
Poppy
Poppymatt
Pops24
+Popstar2
Popular
PopyHarlow
+PorWrx
+Pordiosero
+Pore
+Pork Jerry
+PorkCH0PZ
Porkkanakana
+Porksters
+Porrie
Porsche
+PorscheDaddy
+Port Khazard
+PortUnionMan
Porta Pro
+Portal of I
+PorterRobnsn
Portrays
Portsari
Portuguese
Portvakt
+Porunga
+Porygon-Z
PoseidonDrip
Posemann
Posh
PoshPenguin
Poshker
+Poshki
+Poshkii
+Posino
Positivar
Positive
+Positivehp
Possessed
+PossiblyAFK
PossumPally
Possumi
Post
+Post Malone
+Post Max
+Post-Absurd
PostCodee
Postie
PostmanPatt
PostureCheck
Posty2k
+Pot Gatherer
+Pot Of Greed
+Pot Often
+Pot Sharer
+Pot cms
+Pot v X
PotScape
+PotScape CC
+Potapto
Potato
+Potato D Ben
+PotatoButGay
PotatoLlorch
PotatoRangr
Potatoqueenn
+Potecito jr
+PotentJay
Potezny
+Potge
Pothaaai
PotionFayD
Potland
+Potland o_0
PotoSekwati
Potoo
PotsAlots
Potsi
+Pottawatomie
+Potter Paypa
Potth
Pottieface
+Pottsi
+PottuTatti
+Potzy
Poucher
+Pouches
+Poucie
+Pounake
+PoundSandNub
PourMeBleach
+Poussemoila
Poutz
Poverty
+Povvo
Powacat
Power
+Power Aid 4
+Power H
+Power Outage
+Power Surge
PowerJoe
+Powerade
Powerdude153
Powerful
+PowerfulBram
Powerfull
Powerlines
Poweron6
+Poww LUIS
+Powwil
+Powxrs
Poxuistas
Poyig
Pozar
+Ppl
+Pposkyor
+Pql
+Pr0 Ph3t
+Pr0pvm
Pr0way
Pr1MaL
+Pr3par3 2die
Pr3ttyW0man9
+Pr3y
Pra1seTheSun
Practical
+Prada
Praecellemus
Praedy
+Praenthos
Praes
Praestantia
Praetor
+Prage699
Prahlad
+Prairiez
PraiseCorn
Praisemyrng
+Pramikon
Prankzy
Prari
Praskle
+Pratt Mario
Praxahr
Praxys
Pray
+Pray Salah
+Pray for me
+Pray t o God
Pray4TheWin
+Pray4me
PrayForDeath
+PrayForYou
+PrayToAres
PrayarN
+Prayer Pro
Prayerr
+Prayis
+Praynr
PreMDPepper
PreNew
PreRuined
Precise
Precixion
+Precondition
Predaxx
Predicition
Preedy
@@ -17961,12 +37581,21 @@ Pregnant
PregnantSock
Prelash
Prelet
+Prelex
+Prellifunky
+Prem
PrematureNut
Premie
+PremierZarry
+Premium Dude
Premz
Prep
Prepared2
Preposo0
+Prepotting
+PresPoon
+Presearing
+Preserve
PresidentMo
Presley93
Presley93BTW
@@ -17977,42 +37606,90 @@ Prestor
Pretendy
Preternal
Preto
+Preto Ownsss
+Pretten
Pretty
+Pretty God
+Pretty moist
+PrettyGood
+Prettyokqt
Pretved
Pretz
Prevengeance
+Previn
Prey
Prey4Pocius
+Preying
+Priapismi
+Pricy
Priestopher
+Prif Daddy
+Prifddinas
+Priide
+Priimitive
Prilliam
Prim
Prima
Primacy
Primal
+Primal gain
Prime
PrimeSeries
+PrimeToaster
Primed
+Primetime190
+Primetime829
+Primevil
PrimexReborn
+Primid
Primiitive
+Primilivum
Primitive
+PrimoVG
Primordial
Primster
Prince
+Prince Drt
+Prince Ferro
+Prince Mate
+Prince Tuten
+PrinceCrypto
+PrinceJozef
PrinceZuko
Pringle287
Pringles
Prins
+Prins Pi1s
Prinses
PrintedCash
+Prion
Priority
+Priorrr
+Priselac
Prisimenu
Prismalitic
Prison
+Prison Joe
+Prison M1ke
+Prison Soap
Pritje
PrityBoiSwag
PrivateSmorc
+Prix
Prixma
Prncss
+Prncss II
+PrntScr
+Pro Flicks
+Pro Per UIM
+Pro SKiiLLz
+Pro Slacka
+Pro Slacker
+Pro Tanto
+Pro Tato
+Pro Zoe
+Pro twin33
+Pro-tag
ProForm
ProFortnite
ProLegend
@@ -18020,18 +37697,30 @@ ProSKatona
ProSups
ProTweakius
Proba
+Probability
Problemski
+ProbzDrunk
Procedures
Proclivitas3
+Procoptodon
Proctiv
Procts
ProddyP
Prodigy 99
+Prodigy Matt
ProdigyTape
ProdigyThief
+Prodigy_77
Prodoughtype
+Product99
Prof
+Prof Bruce
+Prof Cheese
+Prof Ribeiro
+Prof Shroom
ProfGanon
+Prof_Plums
+Prof_Snack
ProfanityBox
Professa
ProfessorBot
@@ -18039,50 +37728,85 @@ Proficent
ProfoundPnda
Prog
Project
+Project Deku
+Project Paat
+Project Sept
ProjectGamma
+ProjektUri
Proklus
Prokopios
+Prolapsi
+Prolly High
+Proly high
+Promacta
Promepheus
+Promise
+Promtel
Prone
Prongs97
+Pronx
Proots
+Prop Gun
Propagate
Propas
Proper
+Proper bald
ProperTroll
Prophecy
+ProphetSnayk
Prophylax
+Proponi
Propulsions
Prosit
+Prospicktor
Pross
+Proster
Protagg
+Protanopia
+Protassium
+Protease
ProtectdLeft
Protectlilb9
Protectorate
Protege
Proteiini
+Protixen
Protlong
Protocell
+Proton Drum
+Protopteryx
PrototypeGOD
Protox
+Prouser
+Provei
ProvidenceL
+Providential
Proviro
+Provoke Rage
Provokeskill
Provoxo
+Prowz
ProxDemSox
Proxeum
Proximitus
+Proxymine3
+Prozac Manic
+Prozac Peter
PrrMeowPrr
Prro
Prrr
+Prrr Perry
Prryvdoof
Pruillip
Prune
+Prune Slayer
PruneHub
PrusaSlicer
Prutturp
Pryn
Pryxl
+Pryypsas
+Pryza91
PsYcHo130
Psalm
Psalms116
@@ -18092,219 +37816,435 @@ Pseudo
Pseudomonas
Pseudonimas
PsiTempest
+Psichedeliks
Psiki
Psiklone
Psmaster
+Psoup
Psuedoniem
+Psy0tic
Psy13m
PsyDellic
PsyWaps
Psybae
Psyc
Psyc Paladin
+Psyc0-I
Psyched
PsychicL10n
PsychicType
Psychinis
Psycho
+Psycho Fungi
Psycho11111
PsychoPatty
Psychodeathk
Psychohexane
+Psychokilla
PsychoxX
Psyco
Psycub420
+Psydvekoosi
+Psygo
PsyhexGOD
+Psykoz
Psylocin
+Psyminds
+Psynar
+Psyqualogy
Psysyk
+Psytoro
+Psytrnce
+Psyyke
+Pt 79
Ptalm
+PteShank
Ptfo
+Ptol
+Ptopaz
Ptyh
Pu-94
Pubeless
PubicThumb
+Pubicon
+Public NJP
Publics
Publuske
PuchaLibre
Puck
Pudding
+Pudding Man
+Puddingdude
+Puddingtons
Pudge
+Pudge Pudge
+PudgeJackie
Pudgeegee
Pudnik
Pudota
+Pudota basso
+Puerto Varas
+Puff Daddy
Puffed
Pufffml
Puffy
+Puffy xx
+Pufr
+Pug
+Pug Boots
+Pug Champ
+PugToots
Pugasaur
Puggin
Puggzy
Puglet
Pugna
Pugsyy
+Pugwest
Pugy
+Puhd
Puhd1staja
Puhuri
+Pui
Puin
PuinguimGOD
Pukeking
+Pukeko
Puli1111
Pulkjes
Pull
+PullOutKing
PullOutRange
Pulli
Pulma1
PulpFlctlon
Pulza
+PumGiver
Pumba
+Pumba Bot
Pumba89
PumpUpTheJam
Pumper
+Pumper Joe
+Pumpflexin
Pumpkin
PumpkinLatte
Pumpui
Pumuckl
+Punani MD
Puncakes
Punch
+Punch Main
+Punched
Pundareen
Punde
Pune
+Pune rouch
Punegonde
+Pung
+PunishinBird
PunjabSamosa
+Punk-06
PunkPang
+Punkt
Punt
+Puntenjagert
+Puntje ket
+Puny Duck
+Pup
+Pup in a Cup
+Puppadile
Puppana
Pupper1
+PuppySeal
+Puppysaysftw
Pur3
+Pur3 Bow99
Pur3death2
PurMain
Purate
Purcey
Purcs
Pure
+Pure Evil99
+Pure Great1
+Pure Hunk
+Pure Paprika
+PureBread
+PureFilth
PureIronEyyy
PureOGIronMn
+PureOwner
+PureWax
Pureanger728
+Purebas alt
Purebasalt
Purebish
+Purell
Pureloot21
Purely
Purelybo0ty6
Purenerd
+Purepappa
Purepappa66
Purescarybuu
+Purey Arcane
+PurgatoryBro
+Purgy
+Purifyin
+Purjj
Purka11
Purkkatukka
+Purkkaukko
Purkkius
Purko
Purnex
+Purolator Pl
Purp
+Purp Nasty
+Purp Nips
+Purp Please
+Purp or Bust
+Purp where
Purp1eWizard
PurpLightPlz
+Purpl3 Lean
Purple
+Purple Flap
+Purple Meeep
Purple-Broly
PurpleDabz
+PurpleGoat
PurpleHippoo
+PurpleMurple
PurpleNinjja
PurplePlez
PurpleTeemo
PurpleThorax
+PurpleVex
PurpleWhaki
Purpledile
+Purplefox
Purplekills
Purplemudkip
+Purpleowns
Purppurainen
+Purpsauce
PurrPig
+Purse seine
PursuantACE
Pursuedd
Purtherapist
Pusat
+PuscSquirt
Puse
PuseSlayer
Pushgold
+Pushovermage
+Pushy Bubes
Puss
+Pustut
+Put Me 4th
PutMeInCo4ch
+Putaria
+Puthiegh
Puthy
+Putkipommi
Putrescent
Putse
Putyte1
PutziVikat
Puud
Puujalka10
+Puukko Pekka
PuuluuP
+Puumba
Puuteri
Puylayer
+Puzzle Drops
+PuzzleTheCat
+Pv Was Here
+PvEmerald
+PvM Andrew
+PvM Beireh
+PvM Bhunt3r
+PvM Blake
PvM Boganeer
+PvM Cas
+PvM ColdBeer
+PvM Crooky
+PvM David
+PvM Eestlane
+PvM Gemeos
+PvM Grindz
+PvM Hawk
+PvM Hero92
+PvM Items
+PvM Jack
+PvM MeK
+PvM Miku H
+PvM Muzzy
+PvM Nex
+PvM Nug
+PvM Oliver
+PvM Packers
+PvM Panda
+PvM Rev
+PvM Rin
+PvM Spectral
+PvM Tom
+PvM Wiz
+PvM guy
+PvM zoom
+PvMAlone
PvMCerlow
PvMKoala
PvMNightmare
PvMNotorious
PvMProfessor
PvM_Nugg
+PvMalexDR
PvManchester
PvMs
+PvP
+PvP Master
PvPRoTiGy
PvPete
+PvPs
Pvkk
+Pvm 4 Pets
+Pvm Aero
+Pvm Demigod
+Pvm Garley
Pvm M0lz2
+Pvm MageBoss
+Pvm Runeboyz
+Pvm Tigers
+PvmBrad
PvmQ
PvmRNGesus
Pvmpets
Pvoet
PvtStevens
Pvul
+Pw4
PwDhorizons
Pwca
Pwdz
Pweet
Pwew
+PwincessK
+Pwn Dat Noob
PwnTommy
Pwnage
Pwnbaa
Pwnd
+Pwnna
+Pwnnzz
+Pwno
+PwnrPizzaman
Pwnslayibex
Pwpw
+Pwxn
Px_7UX8Cy8
+Pxcs
+Pxie
Pxtrick
+Pxxch
+Pxzls
+Pyet
Pyfa
Pygmysteaks
+Pyia
+Pyjamas99
Pyki
Pyloric
Pylseboden
+Pyocola
+Pyra
+Pyrate Aeon
+Pyre Lord3
+Pyre Mouse
Pyretic
Pyrl
Pyro238
+PyroEagle13
+PyroF3AR
Pyro_OO1
Pyrocore
Pyrotemplar
PyrrosDimas
Pyssu
Pyst
+Python
+Pythonx135
Pyux
Pyykki
Pyyli
Pyzdalupi
+PzK
+Pzju
PzzaPredator
+Q 1
+Q K M Nophis
+Q Proserpina
+Q S L
+Q cs
+Q l ii Ma X
+Q of Spade
+Q uincy
+Q-Dance Jr
+Q-Qs
Q1NH4N
Q33N
+Q53
+Q60
+Q7L
+Q8 I
+Q8vv
QAWSED
+QGM
QIKNQFRDNUQF
+QKen
+QPR
QPness
+QQ3
+QQQ Gang
QQQQQQRRRRRR
QQuaLLeH
+QRcoding
+QT Bri
+QT0
QTRDS
+QTY1
QTZedd
QTom
+QU0TE ME
+QU42TION
QWIWRDIGIDFG
Qadir
Qaem
+Qaidos
Qajvha
+Qapz
Qash
+Qc power1
Qc-Elfmage
Qeassaris
+QeeQ
Qego
+Qeko
+Qeln
Qemi
+Qeni
+Qenobii
+Qi Kua Mai
+Qi Ling
QiangxD
+Qilat
+Qiok
QlKNQFRDNUQF
+Qlhp xD
Qlioux
Qmain
QnBumbleBee
@@ -18312,38 +38252,79 @@ Qnon
Qoil
Qoki
Qombat
+Qosmio
+QpSc
+Qpaki
+QpzQ
+Qragon
+Qrax
+Qridan
Qrischin
+Qrollop
Qrwewa
Qryptic
Qtey
+Qtreb
+Qu3stm4st3r
Quacamole
+Quack Attk
+Quack Boom
QuackForMe
+Quacka
+Quacker
+QuadJake
+Quadder 4444
+Quadralobsta
Quadrifoglio
Quadrioo2
Quaerd
+QuaffPotion
Quaffle9
Quahzai
+Quakbou
+Quakenet
+Quakoss
Qualitative
Qualities
+Quality Kek
+Quality Name
QualitySleep
Quang
Quantities
+Quantization
Quantuh
Quantum
QuantumTurtl
Quarentitty
+Quarks
+QuarterToBen
+Quarterback
Quarters
+Quartia
Quav
Quawka
+Quazi
+Qucks
Qucu
QueBolaAsere
+QueefInMyEar
QueefMaestro
+QueefWiggum
QueefedOnYou
Queeffing
Queen
+Queen De
+Queen Juggle
+Queen Keegs
+Queen of CoX
+Queen0fScots
+QueenBadJuju
QueenJada
QueenOfCorn
+Queenmystque
+Queenn Elsa
Queer
+Queer Peter
Queerzzly
Queijo9
Quelana
@@ -18351,131 +38332,329 @@ Quenched
Quero
Quessswho
Quest
+Quest Dodger
+Quest Giver
+Quest Lckd
+Quest Noobi
+Quest Person
+Quest Plug
Questikels
+QuestsAreBad
Quety
+Queue Pea
+Queueie
Quew
Quey
Quezzimoto
+Quf
+Qui GonJinn
Quica
+Quick200
QuickClicks
+QuickELMN8
+QuickNDeadly
QuickShot
+QuickShot x
Quicken
+Quickman1000
+Quickshot343
Quiddich
Quiet
+Quiet Place
+Quiet Please
+Quiet Toot
QuietStorm44
+Quiettravlr
Quikstache00
+Quilicura
Quillninety3
Quimbo
+Quinker
Quinncidence
Quinnyb0y
Quintendo
Quirkless24
+QuirkyBeaver
QuirkyPurple
+Quit 4 iron
QuitForIron
QuitForRS3
Quite
+Quite Shy
Quitegoddish
Quitoris
+Quitting Alc
Quiz
+Quizav
Quizzy Dee
+QukinoTe
Quonloo
Quorhum
+Qureshi
Quria
Qurix
Quti
Qutie
+Quukske
Quvma
Quweix
Quyron
+Quz
Quzzini
Qverkuz
+Qwagmire
Qwaltz
+Qwd
Qwezz
+Qwibz
Qwinny
Qwinoa
Qwozii
Qxevym1
+Qzbxd
+Qzst
+R 0 E
+R 0 w d y
+R A L L S
+R A V I
+R A Z T A
+R E
+R H Y T H M
+R I J K A R
+R I K
+R I P B R O
+R L
+R N G Pwnz5
+R N Geo
+R O B B IE
+R O E L
+R O O N
+R O X
+R P N
+R S J
+R S Life
+R S M
+R U A Terd
+R U MAD BRU
+R Y A N
+R Y D
+R You Jelly
+R a uL
+R a z u z
+R ack
+R amon
+R eece
+R em
+R hin o
+R i a d
+R ift
+R l C H
+R mr
+R o r o no a
+R ob
+R obert
+R oger
+R osss
+R uiN
+R ya n
+R yun
+R-66Y
R00M
+R00P
R00SE
+R00T
R0AD
R0B0C0P
R0BBO
+R0FL AT L1FE
R0GAN
R0KKIN
R0LX
R0MICH
+R0NES
R0NNIEB0Y
R0OZ
R0R0R
+R0Y
R0YAL
R0ad
R0bain
R0bbby
+R0binho
R0n13L
+R0seofthorns
R0yksopp
+R14H
R1CO
+R1chs
R1ghtupth3r3
+R1ku
R1ng
+R2TB
+R32 N Z
R33c0NN
+R34
R3Dtjee
R3d3mtion
+R3dlegend
R3vq
+R4 n g 3 r z
R4LLY
+R4g4n4
R4ndomUs3r
+R4ndyM0n
+R4ndy_lahey
R4ng3
+R4ng3 Nubie
+R4ng3r 00
+R4nge
+R4nge 2 Lpk
+R4re Pepe
+R4v2n
+R6boi
R8nny
+RA NG ED
RAB9
RACELIS24
+RAD x GLiDeR
+RADATOUILLE
RADlATAstory
+RAFA LOKO
+RAG YOUR A55
RAKETTAA
+RAPPUHN
+RATMON3Y
RAUTA ARTO
+RAlN
+RAlSED
RBNY
RBeardWBrow
+RC Blows
RC350
+RC93
RCFreak
+RCW
+RCY
+RD Alten
RDHG
RDJ94
+RDT King
+RDW_Dark
+RE2PECT
RE4LG4LIFE
+REALLY RITCH
REBOOTING
REC0N
+RECEPTED
+RED DEM0N
+REDBUHLL
REDD0GJR
REDLlNE
+REDRACECAR99
REEEject
+REEEsuns
REINCARN4TE
REKNAW
REKTmlg99op
REMAlN
+REMIIIX
+REN0
REZlN
+RElNHARDT
+RF Bushee
+RF Genesis
+RFDesigner
+RGB Titties
RGGregar
RGet
RHCP-Solo
RHK Ezze
+RI Sleepy
+RIP Base
+RIP Meme Man
+RIP Mitch
+RIP Pork Pie
+RIP life
+RIPAUGUST
+RIPAccount94
RIPT4H
+RIPgirthgirl
+RIllipieru
RIpuim
+RJCI
+RJE
RJL129
RKBM2
+RKN
RKOd
+RKOd My Mum
+RKTA
+RKZY
+RL Adam
+RL Wolf
RLBurnside
RMAC-97
+RMF Dead
+RMG solo
+RMax
+RNG Alche
+RNG GOD
+RNG Kevin
+RNG MAD
+RNG Msg Me
+RNG Replace
+RNG Tomas
+RNG dez nuts
+RNG9518
RNGBandit
RNGVRNG
+RNGiesi
+RNGrim
+RNGsetMeFree
+RNJohn
+RNJoseph
ROADTO100B
+ROBAlN
ROBBOsickdog
ROCCAT
ROCKYY
+RODRlCK
ROF0LFOR
ROFOLFOR
ROHTEENMUTSI
ROKO
+ROLL TlDE
ROLLinPEACE
+ROMBU
+RONNIE COLE
+RONZE
ROR0
ROSTA
+ROT LOST 6K
ROVANIEMl
+RR Fourshore
+RR55
+RRAMPIDD
RREKKLES
+RRX YY RRX
RRayhan
+RRevelation
RRickkert
RRobert
+RRocket02
+RS Bread
+RS Cinema
+RS Jesus
+RS Myrthe
+RS Nico
+RS SLAG
+RS UFC NRL
+RS ape
+RS2 Legend
+RS3 Refugee
RS3izBetter
+RS6 Quattro
+RSB Fox
RSBadLifeBad
RSDonny
RSGO
@@ -18483,231 +38662,462 @@ RSLtSgtZen
RSMAXD
RSPSisBETTER
RSPup
+RSQT
+RS_Tytin
RSfork
+RSmake
RStrength99
+RSuomivihu
+RTGoldleader
+RTK86
RTLadNumber4
+RU B Y
+RU Petrified
+RUBBERI
+RUUNIKUNN
+RU_Engineer
RUlS
+RWB Codeine
RWSDOUG
+RX S
+RX7 FC3S
+RXen0
+RY N0
+RY P
RYAN
RYN16
RZAlex
+R_D TRAJANO
R_andy13
+Ra
+Ra fi
Ra1d
RaMR0D
+RaRaJuana
+RaSToG
RaaWa
Raaagnaar
Raab
Raaban
+Raahe
Raahh
Raakanipsu
+Raamsdonkje
Raanduin
Raassig
+RabarberBarb
+Rabbagust
Rabbie
+Rabbit MD
RabbitFlats
+Rabbitdude
RabbitsDong
+RabidDolphin
Rabidherring
Rabiosa
+Rabrt
+Rabs xo
RacccAttack
Raccoon
+Raccoon King
Raccooncow
+Raccoonus
Race
Rachael
+Rachey B
+Racholini
+Rachscape
+Racteal
+Rad Renegade
RadFeenix
Radacia
+Radaenne
Radar
Radeo
Radia7ion
Radiance
+Radiant Lux
+RadiantSkye
Radiator
Radini
Radio
+Radio DJ Dan
+Radio Love
Radiohead66
Radiologics
+Radish55
Radja333
RadoslavvBG
Radrieldor
Radsurlak
Radsy
Radtastic
+Radusa-Two
Raeghal
+Raelir
Raen
+Raf0da
Rafaael
+Raffealy
+Rafff
+Raffineret
+Rafi Tafy
+Rafiniya
+Rafn
Rafnar0G
Raft15
+Rafy
+Rag
+Rag Demon
+Rag Doll
+Rag Gdz
+Rag List
RagToRiches
Ragani
Rage
+Rage Fuel
+Rage233
RageCold
+RageCombo
RagedIronMan
Ragefire1
+Ragegold1163
+Ragez Fury
Ragga
+Ragga Muffyn
Raggedy Jeeb
Raggers
+Raggnag
+Raggy Reapzz
+RaginBatts
RagingK9Fury
RagingReddit
RagingTroll
+Ragingg
Ragnar
+RagnarOsborn
Ragnariukas
Ragnarok96
Ragnell56
Ragni
RagsIIRichez
RagucciRafa
+Ragurain
+Ragy rag
Rahamasin
Rahamies
+Raharu
RahbHurt
Rahdyxc
+Rahedo
+Rahimo
+Rahis
Rahjer
+Rahy King
+Rai
Rai_3
+Raibu
+Raichue
Raicun
Raid
+Raid Lewis
+Raid My Body
Raideris
Raiderrediar
+RaidriarTGK
Raien
Raihan
+Raihou
Raii
+Raiicrow
Raikesy
Railee
Raimar1
Raimiss
Rain
+Rain Days
+Rain Please
+Rain ee
+Rainbird
+Rainbow
RainbowBeast
Raine
Rainer
Rainforest
Raining
Rainingbroz
+Rainingmeltz
Rainman446
+Rainnos
Rainold
+Rainshower
Raintown17
Raisedbycows
Raiskausrapu
Raisson
+Raisson X
Raistlin
RaistlinFasa
+Raisya
Raivan90
Raizerr
Rajat76
Raje
+Rajgo
+Rajs
+Rajvir
Rakaah
RakadB3
+Rakblood
+Rake
+Rake ur weed
Rakettikala
RakiRaki
+Rakiata
+RakingPurple
+Rakkir
Rakoins
+Rakru1
Rakuko
Rakun Rakan
Rakupenda
+Ralalallei
+Ralgurr
Ralle1208
Rallis
RalorLeetor
+Ralos Rise
Ralp
+RalphLauren
Ralphed
Ralphie3
+Ralphy Jnr
Raltsz
RalvekZul
RamYe
+Ramae
+Ramallah
Ramathorn
+Rambling
Rambo
+Rambo Prods
+Rambo The 3
+Rambo The 4
+RamboBrad
RamboDaddy
+RamboKiddo
+RamboOmega
+RamboSambo
+Rame
+Rame s
Ramen
+Rameses B
Rami
+Rami Tsunami
Ramleh
Rammdude
+Rammmsteinn
RamonZera
Ramonix
Rampa
+RampageOnly
Rampauttaja
+Rampenisse
Ramrod
Ramsas
+Ramsay
RamsayGrejoy
+Ramxious
Ramzis
Ramztad
+Ran-D
RanShakHazar
+Rana pipiens
Ranamen7
Ranarr
+Ranarr Bowl
+Ranarr Czar
RanarrScape
RanarrSmoke
+Ranarrjuice
Ranarrseole
Randalf
Randalfen
Randalicious
+RandallOG
+Randdall
Randeaux
Randecker
Randinator42
+RandlesAlt
+Random Day
+Random763
+RandomGuy771
RandomLemon1
Randomguy38
Randomized
+Randomkul
Randomojojo
+Randsoms
+Randy Rawdog
Randy Rolex
RandyBanger
Randyke
+Randys
+Ranestumies
Rang
+Rang3d Xp
+RangPang
Rangahhh
+Rangatan44
Range
+Range 4 mage
+Range AR
+Range Kiing2
Range4Free
RangeGawd
RangePs
Rangeddddddd
Rangedly
Ranger
+Ranger Fain
+Ranger Hood
+Ranger Uhle
Ranger82592
RangerBoots
+RangerFain
Rangerofgold
+Rangerrr
Rangish
+RangoII
RanjaForLife
Rank
+Rank 1
+Rank 1 Gamer
+Rank 1 Korea
+Rank 1 Norge
+Rank 1337
Rank1Espada
Rank1NA
+Rank350
Rank62
RankOneTurk
+Ranox
Ranty
+Ranul Oracle
+Ranusian
+Ranzo
+Raoul
+Rap50Cents
Rapasuu
+Rapid
RapidCycling
+RapidPancake
+Rapidd
Rapiers
Rapolas
Rapolu
+Rapt0ram
+Rapterzz99
Rapthor
Raptor
+Raptor Jesuz
RaptorLuck
Raptorcaw
+Raptorjk
+Raptorman
Raptorsin6ix
Raptz
Rapu
+Raquelo
Rare
+Rare Arugula
+Rare Chance
+Rare Doggo
+Rare Hat
+Rare Panda
+Rare Pets
+Rare Vibes
+Rareinpepe
Raresocks
Rarity
+Rarity Belle
+Rarma
Rasa
Rascus
+Raseni
+Rasenkage
Rashford
+Raskasta
Raspatil
Rasput1n2k13
RaspyLemon
+Rassaasolo
+Rasta Panda
Rastaclat
+Rastafarlion
Rastamain
Rastaman
+Rat Digward
+Rat Flicker
+Rat Has Dice
+Rat Hunter23
+Rat L Traps
+Rat Lettuce
+Rat Sensei
+RatKing365
+RatWithAGat
+Rata
+Ratchet48
Ratcliffe
+Ratdrin
+Ratenda
RathianSP
Rathmai
+Ratikka07
+Ratlifenerd
Ratlordmax
Ratm
+Ratpno
Ratrace12345
Ratrero
+Ratsy J
RattleSsnake
+Rattled
Rattlerskill
Rattlesnake
+Rauhanrekka
Rauokse
Raur
+Raurshank
+Rauski696
+Rauss
Rauta
+Rauta Juoppo
+Rauta Sorsa
+Rauta Tuomo
+Rauta Urho
+RautaGoblin
+RautaLeksa
+RautaPertti
+RautaPizza
+Rauta_Kessu
Rautafantic
Rautakuma
Rautis
+Rauzee
Ravac
+Ravangerous
Ravanth
+Rave Pants
+RaveBoy21k
Ravedeath
Ravemaste476
Raven
+Raven Frost
Ravency
Ravensword
+Raventodt
Ravers
Ravesyy
Raving
@@ -18717,119 +39127,267 @@ Ravlar
Ravs
RawPhazon
RawRyan
+RawToast_13
+Rawbean
+Rawduggie
Rawest
+Rawke
Rawr
RawrItsKirby
Rawrr
Rawsome
Rawssss
Rawst
+Rawwr Austin
Raxen Light
+Raxorn
+Ray Btw
+Ray Kurzweil
+Ray Rwars
+Ray Sensei
+Ray Squared
+RayCon
+RayMarshall
Rayfort
+RayiiRios
Rayjin_Storm
+Raykin
Rayleighs
Rayleight
RaymanXo
+Raymo
Raymone
Rayne
+Rayne Drop
+Raynel
Raynelie
Rayner91
+Rayo McFly
RayofLight2
+Raypac
+Rayrunner
+Rays Max
+Rayye
+Raz Wolf
+Razaia
+Raze
+RazenOh
Razer
+Razer Elite
Razeren
+Razguld
Razie
+Razih
RazleBadazle
Razor
+Razor Beast
Razor654991
Razorblat
Razoriginal
+Razorshark
+Razrback
Razz1eDazz1e
+Razzle
Razzzoor
+Rb Salvation
Rb2790
+Rc
+Rc Dark Rang
+Rc_Power
+Rcardio
Rcer
+Rckr
Rddrz
+Rds 44
+Rds Nerd
+Rdushi
ReDrOc
+ReFueld
RePeTiiTioN
+ReRemakeAndy
+Re_Rauzo
ReachAround
Reachinator
+Reactate
+Reaction Tec
Reactionary
+Reactionss
+Reactor15
+Read Art
+Ready 123
Ready4pwnage
ReadyToReap
Reah
Reaks
Real
+Real Cute
+Real Earth
+Real Friends
+Real Jesiah
+Real Kev
+Real Me
+Real Reasonn
+Real Skyline
+Real Umbreon
+Real Unlucky
+RealAndBased
+RealBoobs
+RealBruceU
+RealDrSeuss
RealJonner
RealKing11
+RealKingBee
+RealLifeBot
+RealLyre
RealMemeVPJr
+RealPeelBoat
RealRicFlair
RealScythe
RealShyGuy
+RealSpeed
RealStoney
Realcorkpig
Realdent
Realflamesss
Realismi
Realissm
+Realist Knut
+Realistg
+Reality
RealitysGod
Really
+Really Spicy
+ReallyToxic
Realpk2004
+Realtank
+Realtor R1
Reap
Reapa
Reaper
Reaper0321
ReaperLucid
Reaperkiller
+Reaping Inc
+Rearrange
+Reaver Tru5t
+Reavus
+Rebaulten
Rebel
+Rebel Serj
+Rebelatto9
Rebelgian
Rebelican
+Rebellgutt
Rebelqt
+Rebir7h
Rebirth
+RebirthFlame
+Rebis
+ReboKhaihang
+Rebooting
Reborn
+RebornMuscle
+RebornNips
+Reborninc
+Rebounder234
Rebuild
Rebuild4free
RebuildLewi
RebuildMitch
Rebuildep
Rebuilders
+Recable
RecentKill
+Recess
Recharge
+Recited
+Recker1o1
Reckless
+Reckless Ell
+Reckless Fyb
+Reckless Lad
Reclaimar
Reclaiming
+Recline
+Reclined
+Recnamalad
+Reco Fam
+Recolddone
Reconjack
Recore
Recover
+RectalRoni
RectalRumble
Rectophobia
Recuder
+RecyclePls
Recyr
+Red Asia
+Red Cavalier
+Red Courier
+Red Duke
+Red Hick
+Red Hippo
+Red Hood
+Red Hot Go
+Red Kool-Aid
+Red Nine
+Red Osrs
+Red Pepper65
+Red Rays
+Red Rockin
+Red Simon
+Red Staal
+Red Style
+Red The Pom
+Red Wings
+Red XIII FF7
+Red hat
+Red partyhat
Red3
+Red6
RedCavalier
RedDwarf
RedGraceful
+RedMare
+RedRambler
RedRatedGame
+RedRathalos
RedRegent
RedRusker
RedTwisted
RedWarlock31
+RedWol
+Red__Mage9
Redael
+Redarekun
+Redbackpker
Redben45
+RedberryLean
Redbull
+Redbull Od
Reddo
Reddragon884
Redflame
+Redgit
Redikarp
+Redisleft
Redius
RedkaWodbull
Redland
+Redlonghorn
RedneckYoshi
+Rednecks
Rednex
+Redninja02
Rednipplee
Redo
+Redo Undo
Redouan94
Redrevolve11
Reds
Redshapes
+Redshok
Redshoker
Redsk1ns
Redskin
@@ -18838,12 +39396,16 @@ Reduced
Reductive
Redus
Redux
+Redux Lux
Redz
Redza14
+Ree Mastered
Reeb
Reececup
Reecesoa
+Reecie
ReedBadass
+Reee
Reeebow
ReeeeZ
Reeeps
@@ -18854,7 +39416,10 @@ ReefyReefer
Reel_Arphios
Reels
Reemov3d
+Reer
Reeyu
+Reeze Tech
+Reflection44
Refleksfrode
Refleksi
Refluxerino
@@ -18863,168 +39428,346 @@ Reformer
Refried
Regal
Regan
+Regelios
Regement
+Regent Pve
+ReggieWeggie
+Reggin Cx
Regie
+Regiis
+Regio
Regular
+Regular Iron
RegularJerry
RegularPlank
+RegulusAurum
+Rehbein
RehlapzZ
Rehoboam
+Rehst
+Rehzzy
Rei-chan
Reibnitz
Reichart
Reidar
+Reids
+Reidtheweed
Reign
ReignInBlood
ReignOfThor
Reigns
+ReikenGIMP
Reimie0x
Reimo
ReimuHakurei
+ReinLassen
ReinMoose
Reince
+Reinkmyster
Reipas
Reisnom
Reisy
+Reita
Reizzaz
+Reject q p
+Rejected Alt
+Rejected Son
+Rejected btw
Rejects
+Rejet-01
Rejey8
Rejuvenating
+RekaScape
+Rekans
Rekenz
Rekkaboi
Rekkerta
Rekkt
+Reklats
+Rekna
+Rekt
+RektHavok
Rekunleashed
+Relaaax
+Relapse
Relapses
Relative
Relatived
+Relax to Alt
+Relent1ess
+Relevancys
Relianah
+Reliefed
ReligionBad
Reliinqish
Relik
Relinquishh
+Relit
RelivinYouth
Relizent
+Relizent2
+Relizents
Rellnquish
Relloktion
+Relmu
Reload
ReloadFaster
Reloox
Relrekis
+Reluctants
+Rem Dogg
+Rembs
Remcodingho
Remedial
Remiejj-BV
+Remiel
Remillia
+Reminded
Reminiscon
Remitin
Remix
+Remixed
+Remmos
+Remmyy
+Remn
+Remo
Remorsed
Remspoor
+Remtar74
+Remvrkable
+Remylz
+Remytouille
+Ren to
RenLady
+RenZelus
Ren_Otori
Renacan
+Renall
Renarin
Renas
Renato
Renauddd
+ReneeIsMaxed
Renegor
Renesau
Renewed
+Rengar
+Rengeki
Renger
+RengokuRS
+RengokuSmile
+Renixion
Rennuts
Rennz
Renovato
+Rensafari
Rent
+Rentb0y
+Renzo Bamf
+Repathor
Repeats
+Rephia
Replayroyke
+Replenished
Replikantti
Replo
+Reply To Me
+Report Biden
Reported
+Reporting U
Reppin519
RepresentRS
+Reprexain
Reps4Jesuz
Reptile
+Reptile God
Reptiliano
Reptillian
+Republic55
+RepublicofRS
Reputism
Reqtile
Requaahv
Requilog
Requin
RequireBone
+Reredrum
+Rero
+Resallude
ResenBallZ
+Resentfully
Reseriant
Reserv3D
+Reshop
Resident
+ResignWonki
Resilient
+Resistzz
Resizable
+Resk
+Resoluutio
Respaze
+Respeat
+RespecTheMax
+Respect Me
+RespectMyDab
Respek
Respire
+Responders
+Respy
+Respyy
ResrvdFinest
+Ressara
RestIess
RestInPce
+RestTooLaid
Restinp3ace
+Restless99
RestoredIron
Restrial
+Restrio
+Resultss
Resultzs
Resupplying
Retendous
Rethie
+Retired Dead
+RetiredMaboe
+RetiredStic
+Retr0virus11
Retro
+Retro PvM
+RetroDeviant
+RetroRaz
+Retrohiili
+Retrovision
Rettent
+RetuKettu
Retupelle
ReturnToOne
Reub
+Reubon
+Reuborn
+Reudo
+Rev Hayter
+RevDragon
RevZamorak
Revamp
+Revamp cF
Revanche
+Revellius
Revelwood
+Revenant MKX
+Revenant Rag
RevenantBoy
RevengerII
Revent
ReveredB3ard
Reverenciar
Reverenz
+ReverieDC
+ReversEffort
+Reversedd
Revi21
+Revilia
Revofev
Revoke
Revolted
Revolving
Revs
+RevsRebuild
Revus
+Revvanth
Revx
Revzvy
+Revzy
+Rewbs
+Rewinds Iron
Rewnlite
Rewns
+Rewo
+Rewriting
+RexCox
RexM
+RexMouser
Rexicur
+Rexkat
Rexun
+RexxNotReal
+Rexxasaurus
+Rexxer69
+Reyes407
Reyko
ReynoldsWrap
+Reystov
+Reyswaldo
+Rez X
+Rezi
+Rezident
Rezka
+Rezki
+Reznx
+Rezy
+Rezz Main
Rezz79
+Rezzn
+Rfsu
+Rgimenez007
+Rgk
+Rgnfrg
Rhaegalion
Rhaegar
Rhaegard
+Rhaegor
+Rhagaea
+Rhastae
+Rhcprule6
+Rheal
Rheece
Rhette
+Rhezmyn
+Rhianne
+Rhien
+Rhiley
+Rhino
+Rhino Art
+Rhino Prime
RhinoNuts
+Rhit
Rhiyia
+Rhk
+Rho Ur Boat
Rhoads
+Rhocky
Rhodesia
Rhogue
Rhondda
+Rhorrn
+RhuBarb3
+Rhubarbino
Rhuina
+Rhyio
Rhyl
+Rhyme
Rhyming
+Rhyninn
Rhynoob
+Rhys Irl
+Rhys25
RhysieBoy
Rhysos
Rhythm
+Rhythm Games
Rhythms
+Rhyw Peth
+Ri v en
+RiJect
RiKoCheP
+Riaever
+Riamo
+Rias
Ribb
+Ribeye1611
Ribinha
Ribitz
Riboku
@@ -19038,30 +39781,63 @@ Riccario
Rice
RiceAndTacos
RiceWrangler
+Ricefishie
+Ricepicker89
Rich
+Rich 1 Hita
+Rich Noob
+Rich Snoe
+Rich13
RichAround
RichGuy X
RichHarambe9
+RichMansDrip
+Richaard
Richard
+Richard Baer
+Richard Moss
+Richard12391
Richards2705
+Richart 123
Richguy3213
Richie
Richterr
+Richxrd
Richy
+Richy Rich
Rick
+Rick scape0
RickAndVorki
+RickDeckard
RickEscobar
RickRab
+Rick_NLD
+Rickard
+Rickeh 1
+RicketyReck
Rickhs
+Rickky Bobbi
+Ricklet
+Ricklewinks
+Rickness666
+RicknessAlt
Rickolas
+Rickos
Ricksking
+Rickstaverse
Ricky
+Ricky Bob E
RickydeRoach
+Rickyj13
+Rickyrevine
+RicoMangos
Ricoo
Ricotayqueso
Riddim
RidePine
+Ridemyhomies
Rider
+Rider Galara
RiderOfRohan
Rider_99
RidgeRacerR4
@@ -19070,166 +39846,309 @@ Ridley
Ridley1990
Ridored
Rie1yReid
+Riektanminol
Ries2
+RiesBatsbak
+Rif
+Rif T
+Rifampicin
Rifen
+Rift Archer
RiftOversoul
+Rig Pig
Riga
+Rigelius
+Riggas
Rigged1
Riggerlyworm
+Righ
Right
RightKnight5
Rightthisway
+Rigid Tony
Riglr
+Rigondead
Rigondeaux
Rigourlas
Rigr
Rigtop25
Rihmakallo5
+Rihsky
Riickkert
Riiggs
Riii
+Riiico Suave
+RiimuRatigan
Riippptttt
Riisi
Riitasointu
Rijst
+Rik M
+RikCastle
RikSavage
+Rikador
Rikalero
+Rikeez
+Rikka-kun
+Rikka-san
+Rikky Flames
+Riksaah btw
+Rikten X
+Riku887
RikuLehDeku
RikuRNG
RikvWesting
Rilah1212
+Riled Up
RilesWright
+Riles_Nation
+Riley Mort
+Riley1098
RileyReidx
RileyVoelkel
+Riltor Storm
Rimbton
Rimorix
+Rimppa97
+Rimuru BTW
+Rinby
Rindos
Ringboi5
+Rinhx
+Rini Keeper
+Rinky
+Rinoa
Rinrus
Rinsumageast
+Rio-Dono
Riolu
+Riona
Riot
+Riot Breaker
+Riot Starter
Riotdeath
+Riotz v4
+Riou
Riouha
+Rip David
+Rip25kChins
RipBigDoinks
+RipFeKeenan
RipLo
RipMagikarp
RipRoidie
RipSnorter46
+RipTheBilly
Ripd
RipePineappl
Ripper
Ripperhino
RippleBear
+Rippn
Ripsin
Ripstart
Ripulieinari
Ripulirulla
Riri488
RiseOfTerror
+Risencambrie
+Rishhh
Rishloo
+Rising serum
RisingHonour
Risingodslay
Risk
Risker
RiskinPixelz
+Riskule
+Risky Pete
+Risky Ryan
+Riskz92
Rislearn
Rismani
+Risotto
Risperdal
+Risque Moose
Risqy
+Ritchi026
Ritle
Ritopikachu
Ritrole1
+Ritthback
Rittz
Riubuli
RivalIron
+RivalTitan
Rivalguy25
Rive
RivenGasm
+River Kelda
+River OSRS
RiverOfIron
RiverOut
+RiverToSea
+Riveriea
RiverzRaging
Rivy
Riwer
Rixhy
+Riyazzz
RiyuK
RizeNSkrine
+Rizi Bizi
+Rizla King
Rizos
+RizzardWizrd
Rizzhole
+Rizzzoo
Rizzzyisback
Rj8532
Rjtyyi
+Rkaksi
RlCE
+RlCEHEAD
RlFK
RlGBY
+RlP Harambe
RlPMYMANX
+Rlly G
Rmus1
+Rmve
RnBieber
+RnGator
+RnGisFocked
+Rndl
+Rng Depleted
+Rng Maestro
+Rng Rami
Rng4Display
RngIshit
Rngclown
Rnjeesus
+Rnkji
Ro The Boat
+Ro s
Ro2no
RoBoRhino
+RoBoat
RoNNalDis
RoSki
+RoT Nick
+RoT is GAY
Roach
Road
+Road Run
+Road sign 73
+Road to kek
RoadBoat
RoadSpartan
RoadToALLPet
Roadbiker15
+RoadetoMax
+Roadways
Roadz
Roam
+Roaming Sky
Roanen97
Roastedsteak
+Rob Aero
+Rob Hot Dog
+Rob Iron
+Rob Pooner
+Rob Zombie
+Rob2G
+Rob94401
RobDirkson
RobThePole
+RobWilliams
RobWorker
Robb
+Robb uwu
Robbbana
+Robbbbb
Robbiboi
+Robbie EN
+RobbieJ547
Robbin
+RobbinDaHood
Robbo
Robby
+RobbyMatrix
+RobbyRott3n
Robeartoe
Robejose
Roben
+Roben Jr
Robert
+Robert Pires
+Robert Stein
+Robert T
+Robert1f
Roberto700
+Robidoux
Robigo
Robin
+Robin Van H
+Robin564
Robinhoodnow
Robjee
+Robjon7
+Roblit
Robln
+Robln l-l00d
+Robodinho
Robodyx
Robok0p
+Robokiller86
Robolisten
Robologist
Robot
Robpar6
RobsonV
+Robtoe123
Robust
Robyn550
+Roc3
RocheLimit
Rochette
Rock
+Rock Knight
+Rock Nin
+Rock Rage
+Rock The Red
+Rock Wizard3
+Rockabbages
Rockadelic
Rockafellah1
RocketRock88
Rockfists1
Rockford
+RockfordT
Rockin
+Rockin Ness
Rockland
Rocklore
+Rockmaker
Rockrets
+Rocktail
+Rockwell
Rocky
+Rocky 1535
+RockyYourMom
+Rockydig
Rocokoko
Roczor
+Rod Goesinya
+Rod Man
+Rod Monan
+Rod My O
+Rod i
+Rodefe
Rodeva
Rodimus55
+Rodje
Rodney
+Rodney Farva
Rodnirt
Rodnizzle
Rodrick
@@ -19238,77 +40157,133 @@ Roe2
RoeGut
Roebie1
Roei
+Roekoeloos
Roel
Roerbakei
+Roexzy
Roff
+RoffXD
+Roffie
Roffy
Rofie
RoflOs
+Roflaye
Roflmao
+Roflmaomg
Roflologist
Roga
Rogerthatxd
+Rogier504
Rogiertjuuuh
RogretheOger
Rogue
Rogue nr2
+RogueSoul03
Roguestoney
+Roguor
+Rohafin
Rohekonn
+Rohman
Rohmu
+Rohr
Roice
Roid
Roidsy
+Roihuvuori
+Roithamer
+Roixie
+Rojas
+Rokec993
Rokki
Rokushoo
Rolann
+Rolav
+Rold
Rolde
Roldeh
Roldie
Rolex
+RollOurOwnJs
Rolla
+RollandSmash
+Rolleston
Rollin
+Rollin Clean
Rolling
+Rolling Kush
Rolling2Hard
Rollingo
+Rolls
Rollsie
Rolluik
Rolly83
+Rolpharoni
Rolson
+Rom3
Roma
Romad
+Romare
Romarigo
+Romboy619
Rome
+Romein
Romen
+Romen Ranges
+Romeo for u
+Romeos GIM
RomeowL
Romic
Romka
Romo
RompLord
Rompmaninov
+Romway
+Ron Swansong
RonBurgundy
+RonCumtastic
Ronald
+RonaldReagan
Ronbiara
Ronch
Ronco6
+RondVierkant
Rondey
+RoneRackal
Ronescape
+Ronggo
Rongor
Rongrongie
+Roni Hagert
RoniKysh
+Ronn Coleman
Ronnicle
Ronnie
+Ronnie Fe
+Ronnie Ponny
Ronnie518
RonnieKray
+Ronniebob
Ronny
Ronokroo
+Ronpoo
Ronti
Rony
Ronz
Roof
+Rooftop Laps
+RooieRotzak
+Roolon
+Roomhoorntje
Roommaster1
+Roon2h
+RooneyDUNX
+Roonscape
Roosa
Roosevelt19
+Roosevelt69
Roosevelt79
+Roost Coffee
+Root Exoi
Rootman34
Roover
Rooxy
@@ -19316,77 +40291,146 @@ Roozom
Rope
RopeDart88
Ropemaker
+Ropew
+RoqeSVK
+RorannoaZ
+Rorek
RorekMalc
Rorr
Rorvis
+Rory Gall
+Rory Stone
RoryBurnout
+RoryJb
Rorys
+Rosalktha
+Rosco Jenkn
Rose
+Rose Fritz
+Rose of May
+Rose tiara
RoseGold_A
+RoseOnCasket
+Roseanne
+Rosemarrie
Rosemary
+Roses R Red
+RosetaStoned
Roshidragon
+Roshyz
RosieBtw
+Rosieflower
+Rosin0nly
RosinHead710
RosinScape
+Roskamaster
Ross
+RossOSRS
Rossaboy
Rossed
Rossssi
Rossys
+Rosters
+RostiKz
Rosv0
Rot3x
+RotJofaJofa
Rotagilla
+Rotated
Rotation
+Rotelli
Rothen
RothesLatrin
+Rothgor
RotiPrata
Rotiforms
Rotom
Rotta
Rottapoju
Rotten
+Rotten Vale
+Rotten Wang
+RottenEyeMoe
+RottenGurl
Rottencotten
+Rottenzotten
+Rotterdam
+Rotzschrank
Rouge
RougeDev
RougeManiac
RougeThief02
Rough
+Rough Games
RoughINSERT
Rounded
+Rounded Xp
Rounder
+Rounding
Rousey
Rousseau88
Route
Rova
Rove
+Rovicus
+Rovka
+Row Sripple
+Rowdy Tobias
+Rowe5000
Roweeee
Rowg
+Rowinovich92
Rowls
Rowoep
RoxanX
Roxasroxs564
Roxer
+Roxie Valor
+Roxxe
Roy385
RoyLay
RoyZay
Roya2Face
Royal
+Royal 69
+Royal Chief
+Royal Death
+Royal Rain
+Royal Violet
+Royal Wax
RoyalD3sire
RoyalMess
RoyalPurps
RoyalRolf
+RoyalScumbag
RoyalShaco
+Royal_Shock
+Royal_inc
Royan
+Royboy16
Roye
+Royo
Royollie
Roysrols
Roytang5
RoyyyAfca
+Rozensho
+RozirPanda
Rozkol
Rozlucka
Roztomily
Rozzaa
RricketyREKT
+Rro
+Rs Bartender
+Rs But Afk
+Rs D
+Rs God
+Rs Jamal
+Rs Kajcsa
+Rs Olm
+Rs Pikachu
+Rs Wiki
RsBryce
RsGoku
RsOverGirls
@@ -19396,59 +40440,116 @@ Rs_ReeCe
Rsanaded
Rsebb
Rset
+Rsh Katje
Rsh10
+Rsky B
+Rsn Kmt
+Rsn_Adam
Rsn_Dillon
Rtlo18918B
+Rtslash
+Rty
+Ru Ru
+Ru2uo
+Ru6
RuMoRRs
+RuRu-nyan
RuRu09
+Ruan
Rubber
+Rubber Alt
+Rubber Apple
+Rubber Luffy
RubberApple
Rubbery
+Rubbery Ra
Rubee
RubenD
+Rubenich
RubiconGuy
+RubikMouse
+Rubinx81
Rubish
Rubrek
RubsSandwich
Rubss
Ruby
+Ruby Opal
+Ruby Runes
Ruby5001
RubyBlue
RubyBoltSpec
RubyEvelyn
RubyLvledUp
+Rubystealer
+Ruck
+Rucked Faw
Ruckus
Ructions
Rudadoodadoo
Rude
+RudeBoiElj
Rudekid1035
Rudetopia
+Rudi Andre
+Rudii
Rudin
+Rudin Alt
Rudolph
Rudy
RudyGiuliani
Rueben
+Ruel
Rufie
+Rufles
Rufu
+Rufus Shaw
+Rufus xD
+Rug Klachten
Ruge
Rugg0064
+Rugpijn
Rugrat
Ruhl
+Ruhpetitive
Ruhtrik
+Rui HIMimura
+Rui Sand
RuiMariz
Ruimte
RuimteMan
Ruinationnn
+Ruined
+Ruined Kap
+Ruint
+Ruizoeki
Ruk1a
+Rukavi
Ruker
+Rukias Feet
Rukusama
+Ruky
+Rule Elite
+Rule34 Grogu
Rulesy
Rulesyy
Rullmane
+Rum Lad
+RumJeDobry
+Rumble519
RumbleYT
+Rump
+Rump Kicker
+Rumpetask
+Rumpkondens
Rumpleminze
Rumpstag
+Run Alt
+Run Down Mid
+Run n Alch
Run1t3
+Run1t3 Cape
+Run2paradise
RunCMP
RunFreek
RunNhideZom
@@ -19459,104 +40560,199 @@ Runcatsmith
Rundamental
Rundi
Rune
+Rune Scimmy6
+Rune Strg
+Rune Toi
+Rune Trophy
+Rune Tunes
+Rune Woolf
+Rune l Scape
+Rune lennyFe
+Rune mendigo
+Rune-Taneli
RuneAlt1
RuneArguero
RuneBri
RuneFiend
RuneKing2h
+RuneLight
RunePuuro
+RuneShape
+RuneWeems
Runebie93
Runeblaizer
+Runebryter
Runechi
Runecraft
+Runecrafts
+Runed Ltd
Runeiro
Runely
Runeman3134
+RunenSohn
Runepalmu
Runeranta1
RunesCrafted
RunescepxD
RunescepxDD
+Runeshaft16
+Runesniffer2
+Runesr4nerds
Runester9999
Runeukko431
+Runeveeti
+Runeventure
Runey
+Runey Toons
Rungne14
RunicXanadu
Runita
Runite
+Runite Ricky
RuniteNerves
+RunkoPalkki
RunnerTwoD2
RunninBlood1
Runnn
+Runny Rectum
Runnynumber2
+Runolf
Runs
+Runs Laps
Runtellthat4
+Runtu Reiska
+Rup
+RupOSRS
+Rupea
Ruperd
+Rupert Whale
Rupiss
+Ruptured
+Rupus
+RureScape
Ruri
+Rus s
Rush618
+RushAl0t
Rushana
Rushflame555
+Rushing
RushnSuch
+Rushoo
Rusinahousu
+Rusinapulla
Ruskajan
+Ruskeareika
+Russano
RussianLives
+Russian_Fire
Russkill1000
Rust
+Rust Oxide
RustLasagna
+Rustaaaagh
Rusted
+Rusted Ape
Rustee
+Rusticis
Rusticus
Rustig
Rustigggggg
Rustix
Rustu
Rusty
+Rusty Spoons
Rusty99
RustyFoot
+RustyPlastic
RustySimon
RustyStipps
RustyTuna
+Rustydog125
Rustynice
Rustyw
Rusy002
Rut469
+Rutgar
+Ruthacus
Ruthers
+Rutje
Ruto
+Rutten
+Ruttuperse
Rutu
+Ruudcz
+Ruuddie
+Ruup
Ruut
Ruutana
+Ruwe Dollo
Ruzafa
Ruzy
+Rvght
Rvilleboy
+Rvndy
+RvneHQ
RvrseGiraffe
+Rvsta
+Rvvvy
Rwkw
+Rwolfe
+Rx bones
Rx-ll
+RxHarmacist
+Rx_Sparky
+Rxscro
+Rxzm
Ry Jones 21
+Ry T
+Ry n
+Ry-07
RyGuyyy1
+RyKush
RyQzz
+RyRgrMcFrly
+Ryaite
Ryalae
Ryan
+Ryan 178
Ryan8529
RyanApollo
+RyanC203
+RyanFar25
RyanKristoph
+RyanNagato
+RyanPick
RyanTW
Ryanandneal
Ryaneal
RyangalO
+Ryanmattin0
Ryann737
Ryanpage
RyansRebuild
Ryanwouldsay
+Ryawh08
+Rybizzle
Ryca
+Rycerz Arek
+Ryd
Ryder
Ryders
+Ryderwear
+Rydwarf
RyeAnn
RyeEx
+RyePie
+RyeYun
+Ryeron
+Rygelon
Rygo111
Ryhan
+Ryi
Ryjgar
Ryking
+RylanIsLive
Ryleegh
Ryley
Rylios
@@ -19568,76 +40764,216 @@ Ryokojin
Ryolm
Ryoma
Ryougi
+Ryougi Shiki
+Ryouma
Ryoush
+Ryronman
+Rystaloid
+RystyRane
Rytacus
+Rytis
+Ryu Deadass
+Ryu L
Ryugo
Ryuk
Ryukiral
+Ryuko
+Ryul Silvyr
Ryvik
Ryxidius
+Ryyd
Ryzelf
Ryzema
Ryzho
Ryzloh
Ryzou
Rzasa
+Rzy4k
+S 0 R A
+S A S H O
+S A VV A G E
+S C N
+S C U Z Z
+S E T C H
+S G M B
+S I N
+S J H
+S M A S H ER
+S M I L E S
+S O Z O
+S P E E E D
+S Q5
+S Rye
+S Spirit
+S T ACK E D
+S T E F AN
+S T E N
+S T I L L
+S T R 4 ever
+S T R Pwnz5
+S U F F
+S V N E
+S W A N N
+S a z z y
+S acrificed
+S aevar
+S aii
+S ammmy
+S co t t
+S cruffy
+S e 7 e n s
+S e a f o
+S e e j
+S ebbe
+S emi
+S enu
+S err
+S h a n e oo
+S hadw
+S hayzz
+S hea
+S hep
+S imply
+S k u ll y
+S kari
+S l M B A
+S l3
+S nipz
+S ofa
+S offa
+S ofus
+S orrow
+S oulz
+S outh
+S p00ky
+S secy dy
+S t e v e n
+S t i
+S t i g
+S t i x
+S tas
+S u b j e ct
+S uffa
+S unz
+S wan
S-525
+S-Market ll
S00000O0000k
+S0FTPUPPY
S0L0
+S0L0 SL0AN
S0MALISLAYER
S0O0O0O0O00S
+S0S JERRY
+S0UVLAKI
+S0Z4
S0ar
+S0ciety
+S0dra
+S0gg3
S0ldern
S0lomon44
S0lty
+S0nical
S0phie
S0tg
+S0thra
+S11om
+S1MPSLAYER
S1N6
+S1NA
+S1ORM
S1SU
+S1ayzAllDay
S1n0fWrath
S1ngul4rity
+S287
S2u2
+S3 Matt
S3ID
S3W3RSLVT
+S3n4_Hc
+S3oulful
S4M0HT
+S4M20N
+S4v4s
S5peedy
S60RDesign
+S7arburst
+SA alter ego
SAAB_Toxic
SAAIXX
SAGLAM
SAINt
+SAINt Steff
SALM00O00N
SALM00OOON
SAMCRO
SAMMMMMY
+SANDFROG53
+SANFEWLUVR78
SANO
+SANRIPOSYCHO
SANTERCOMTER
+SANTO5
+SANYANOSTRAH
SAPl
SARAH
SARPBC
+SATAN GOD
+SATORIIN
SAUCEnJUICE
SAVVON
SAWPREME
SAlNT
SAlNTS
+SAlYAJlN
+SB DRIFT
+SB Luke
+SB Mac
+SB Mully
SB2K
SBSBSBSBSBSB
+SC0V
SCARED
SCHOOTSFIRED
SCOTUS John
+SCR0TUM
+SCRAMMMBLED
SCRIMS
+SCRT SAUCE
SCYukino
+SC_Josh
+SClarky
+SDC Thursday
+SDV
SDVX
SDemotivated
+SE Alaska
+SE N SE
SECDEF
SELF
+SEMI CHUB ON
+SEMl DEAD
SEPTlC
+SESACO
SETU
+SEXY GRETA
+SFTYALWYSOFF
+SG
+SGNG
SGTA
+SGTX
SH333S
+SH5
SHAD0WBANN
+SHAGED
+SHANK SAMA
SHELDOR
+SHERMnNATOR
+SHElD-HEDA
SHIA
+SHIA_WIRE
SHIDDED0N
SHIIIELDS
SHINY
@@ -19645,76 +40981,143 @@ SHINZ0N
SHOTGUNSUGE
SHRIIlIlIIMP
SHlESTY
+SHlFTER
SHlNl
SHlVER
SIBS
SIDB
+SIGMA MALE69
SIGNZ
SIKKaudio
SILENT
SIMAA
+SIR KIRSI
+SIR_WHAT_NOW
SISDIS
+SIayer
+SIoopie
+SJ7
+SK octorock
SKBToast
+SKBerk
+SKD
+SKDMRX
+SKDee
+SKEEZUZ
SKKi63
+SKlDMARK
SKlNNY
+SKlTZO
SL0AN
SL1T
+SL3DNECK
SL3VEN
+SL90
+SLAAYEEER
SLAP
+SLAP A SL0TH
SLAY
SLAYER
+SLBM
+SLE Casper2
SLEEEZY
+SLNT
SLOpro
+SLV
+SM Esura
+SM Tech N9ne
SM0KE
SMANisonfire
+SMEGMAEATER
+SMGO
SMHeMbRBoB
+SMKoolin
SMOrc
+SMOrc Weeds
SMOrc3000
+SMRT KO
SN0W
SN0WBUSH
SN3AKBO
SNAX
SNAlIlIlIlIL
+SNUIVEEEEEH
+SOCIAL SCARE
+SOLO D0L0
+SOLlD
SOMALISTEVE9
+SOUL MASTER
+SP1NK
+SPAICC
SPANKWlRE
SPLEEBTEZ
SPLODGE
+SPOODERMENNN
SPOOKAH
SPlCER
+SPlCY RAMEN
+SPlDER-MAN
+SQLite
SQSHD
SR0o0RM
SR20
+SRH IM
+SRSwiper
+SS Iron
+SSF Fe BTW
+SSJ2 GhostMO
SSS-Latch
SSamm
SSco0by1
SSironMage
+SSlavic
+SSnakeling
ST0n3
ST3AKS
STAIGZOR
STALlN
STAMPEE
+STARSZSZ
+STAUNCHEST
STEEZ
+STEEZ UwU
STERGS
+STEVEYZERMAN
STEVIO
STElNSGATE
+STElNSGATE 0
STIFT
+STM32 F103
+STOERE OMA
+STPN
+STR m8
+STRZI
STRlCKEN
STRlDERMAN
STSTSTSTSTST
+STUB0RN
STYG
STZY
STlFFMElSTER
+STlNGRAY
SUBAROO
+SUJET0
+SUP3RCLAUDIA
SUPA
SUPERSET q
SUPERTAIKURI
SUPREME
SURPRlSED
+SV_Exon
+SW3GG3RZ
SWAGL0RD
+SWE4TY
+SWlPE LEFT
SYMBI0TE
SYMPATHY
SYRpaperclip
SZP-Qlimax
+S_nacky
SaHiB
SaItbender
SaSoeur
@@ -19723,61 +41126,144 @@ SaZz
Saagarius
SaakeliMies
Saambellah
+Saaq
Saarinen
Saassz
+Sabba
Sabbatix
+Sabbelaar
+Sabeket
Sabel26
Sabelt
+Sabeltann26
Saber
+Saber Alter
+Saber Lilli
+Saber Six
Saberloco
+Saberos
+Sabich
Sabina
+Sabitoo
Sabler
Sabo
+Sabor Fresa
+Sabotaging
+Sabre Doge
Sabretooth
Sabu549
+Sabuwu
+Sac
Sacck
+Sacha Boeyy
Sachets
+Sack 2 Dirty
Sack_Lunch
Sackofeyes
+Sacolyn
+Sacre
Sacred
+Sacred Eli
+SacredArtist
+Sacrificed
+Sad Boi J
+Sad Fat Ugly
+Sad Juggler
+Sad Leaf
+Sad43
SadClownP
+SadJB
+SadPanda94
SadWhiteFalc
SadamBHangin
Sadass
Sadcatxd
+Sadge Izzy
+Sadge2407
+SadgeCry
+Sadgetseg
Sadiq
Sadism
+Sadistic
Sadivy
Sadness
+Sadting
Sadystic
Sadz
+Sadz Rax
+Sae Bae
+Saena
+Saenmin
Saeph
Saerdna97
Saerom
+Saetama
Saetre
+Safavid
+Safcon
+Safe N Sound
SafeFromWork
+SafeUp YOLO
Safecamp
+Safelyfast
+Saff
+Saffat
Saffi
Safiir
+Saftsack8
+Saga
+Sagar
Sage
+Sage Lao Tzu
+Sage Lily
+Sage North
Sage Vegas
SageO6
Sageinventor
Sageme
Sager
+Sager Main
+Sagev
Saggy
+Saggy Weenis
+Sagittarios
Sags
+Saguaro Joe
+Sah D
+Sahin
+Sahonym
Sahra
+Sai
+Sai Chosis
+Sai Saici
Sai1420
+SaiPhai
Said
Saifphire
+Saigyouji
Saiin
Saika
Saikoh
+Saikoo
+Saikou
Saikshin
+Sail Door
+Sailing Prod
Sain
Sainola
Saint
+Saint 7
+Saint Acura
+Saint Andrew
+Saint Bjorn
+Saint Fabioo
+Saint Fellow
+Saint Hatred
+Saint Hyde
+Saint JJJ
+Saint Silver
+Saint Tmi
+Saint Zero
SaintBurgs
SaintDienda
SaintDovey
@@ -19786,253 +41272,466 @@ SaintMilk
SaintPablo68
SaintShiba
Sainted
+Saintri
Saitam
Saitama
Saivaa
Saiyajin
Saiyan
+SaiyanSkinn
Saiyanns
Saiyans
Sajjad
+Sajzi
Sakhmett
+Saki Nikaido
+Sakix
Sakk
+Sakke
Sakkyun
+Sakobi
SakooR
Saksa
+Sakuragi
+Sal Magluta
SalBobo
Salacity
Salad
+Salad Car
+Salad Kareem
Saladhead25
Saladsoup
SalamPacanam
Salamalion98
+Salbo
Salcal
Salda
Saledor
Saleen
Salford
+SaliBronze
+Salih
+Salii
+Saliis Main
Salista
Sallad
+Sallariina
+Salllamander
Salma
Salmelainen
Salmo
Salmon
+Salmon Ikura
SalmonCookr7
+SalmonsRule
Salmos33
Salms
Salomon
Salomon666
+Salone
Salorassi
Salsa
SalsaMurango
Salt
+Salt Mines
SaltInTheCut
SaltPJ
SaltasVolfas
Salte 55
SaltedCorona
+Salten
Saltia
Saltigast
Salty
+Salty 4 Life
+Salty Cris
+Salty First
+Salty Fooker
+Salty Gimp
+Salty Guava
+Salty Slimy
+SaltyNakul
SaltyPears
SaltyPilgrim
SaltyQuackr
+SaltyShrimp
+Saltydivo
Saltzpyre
+Saluskenas
+Salvats
+Sam Biddle
+Sam F
+Sam II
+Sam Knight
+Sam S
+Sam Tha Man
+Sam Zi
+Sam btw
+Sam1
Sam5453
SamFC
+SamGaspacho
SamManSnow
SamV007
SamW
+SamWisely
+Sama ntha
Samadier
Samadieron
Samaji
Samalorian
Samanthix
+Samantics
Samay
Samb0Slice
+Sambal Sauce
Samblader
+Sambwo
+Same Deal
+Same Kid
+Same Thanks
+SameerM0
+Sameling
Samfew
Samfundet
Samgonz3
SammGemm
Sammi80
+SammieRose
Sammito2
Sammjoey
+Sammstera
Sammuel
+SammyGer
Samo
Samoski
+Samphet
+Sample size
SampleText
Samprini
Samps0n
Sampson
Samqqa
Samri
+Sams Main
+Samsara Kama
Samsoniene
Samsora
+Samster8812
+Samu Saukko
Samubidladin
+Samuel Hall
+SamuelBrian
+SamuelP223
+Samuell C
Samurai
Samusar7481
Samwse
Samxy
Samzh
+Samzju
Samzor
+Samzy
+San Quentin
San0
+San200
SanHolo
SanPaid
SanSheng
SanTie
+Sana
Sanada
+Sanark
+Sanbir
Sancta
Sancte
Sand
+Sand Raider
+Sand Shrew
+Sandal Slap
Sandbar
+Sanddemon527
Sandelzi
+Sanderr
+SandhillFrog
Sandhog
+Sandhur
Sandiey
Sandman1
Sandmannen9
Sandogan
Sandokan
+Sandoval Btw
Sands
+Sandviper40
SandwichBag
Sandwichfish
Sandy
+Sandy Claps
+Sandy Land
+Sandy OS
+SandyLand
+SandyMonkey
SandyWexler
+Sane Panda
+SanePizza
+Sanellyyy
+Sanfew Serun
Sangers
+Sangi
Sangotha
Sangtuary
+Sanguinala
+SanguineHawk
Sanguinezti
+SanguisDurus
+Sanitary Poo
SanityCntrl
Sanjachi
+Sanjai13
Sanjin
+Sanka
+Sanka93
SanodersNL
Sanoske13
+Sanphew
+Sans Soleil
Sanshou
Sansos
Santa
+Santa 07
+Santa Chielt
+SantaChristo
+Santapwner
Santasos
Santeri
Santeri333
Santhacine
Sanzoku
+Sanzoku HC
+Sanzu_o
SaoriHayami
Saoro
Saosiiin
+SaphiTheBear
Saphie
+Saphirakush
Saphiro
Sapin
+SapphicDiana
+SapphicEmmmy
+SapphicJade
Sapphirebear
+Sapphirelove
SappieWappie
+Sappihron
Sappphire
+Sappx
+Saqi
Saqib
+Sar a
Sara
+SaraNotDomin
Saradominas
Saradontmin
+Saragomin
Sarah
+Sarah Hagan
SarahWalker
+Sarahsaurus
Saraie
Saran
+Saran07
+Sarangae
Saraph
+Saras BBD
Saratomi
Saraziel
Sarbles
+Sarcasmder
Sarctopus
+Sarcy Csp
Sardaukar
Sardlz
+Sarecren
Sarfar
Sarge
+Sargon III
Sariel
Sarkie
Sarmagedonas
+Sarms Knight
+Sarodin
Sarrafo
+Sarrdukar
+Sarri
Sarriesque
Sarro
Sarrz
+SarthaMewart
Sarthe
+Sarthinox
Sarthorm
Sarumite
Saryit
+Sarytis
Sascha
+Saserdoti
Sash
Sashadow
Saskel
SaskiaNaka
Sasser
Sasslax
+Sasssie
Sassy
+Sassy Rookie
Satada88
Satamari
Satan
+Satan Claus
SatanSquared
+SatanarchyXX
SatanicGrill
+Sataniciocus
+Satans Ktten
Satchmoi
Satchyl
Satisfyed
+SativaDreams
Satizfy
+Satoo
+Saturdayxz
SaturnHippo
Saty
+SauLau
+Sauce McBoss
+Saucestad
+SauceyFox
+SauceyHorsey
Saucy
Saug
+Saugy
Saul
+Saul Bloom
+Saul Pvm
SaulMozarela
Sault
Sauna
+SaunaPaska
Saund
Saunders
SaundersRNG0
Saundo
Saunty92
Saurogar
+Sauroiv
SauronsTower
Saus
+SausageRyder
+Savabeel
Savage
+Savage City
+Savage Gamer
+Savage Kush
Savage Mind
+Savage Pimpn
+Savage Titan
+Savage izJkD
+SavageBigL
SavageSource
Savaged
Savakuda
Savalar
Saved
+Saved Me
Savg
Savilahti99
Savior
+Saviour
+Savj
Savjry
Savoureux
Savpryan
Savu
+Savu Nahka
Savustettu
+Savvo
+Savvune
+Savvvy
Savvy
Savy
+Savy Neals
+Saw Em Off
+Saw Siege
Sawanne
Sawaz1
+Sawbonez
Sawdey
+Sawrik
Sawzall12
+Sax
+Saxerpillar
+Saxlord2500
Saxon
+Saxon_knight
+Say Allo
+Say Freeze
+Say Geronimo
+Say Go Put
+Say Gz Rn
+Say aligh
SayMyName
+SayNo2Ebola
Saya
Sayadzin
Sayersi
+Saylorbtw
Saymouseart
Sayonara
+Sayooo
+Saypa
Sayrim
Sayrr
+SaysNiceAlot
+Sazch
+Sazere
Sazme
Sazzarull
+Sboy_90
Sbraga
+Sc ruffy
+Sc0nesy
Sc0ttishDave
Sc1ttl3
ScOx
+ScOx ChrisM
+Scabrick
Scaf
Scaggy
+Scaha
ScalerSlut
+Scales
+Scampr
ScandalousHC
ScannerBen
Scape
+Scape Jam
+Scape Snake
+Scape Steve
+ScapeChad
ScapesGhxst
Scapeskater
+Scapin
Scaping
Scar
+Scar TNL
+Scar of Time
+Scarb OS
Scare077
Scared
+Scared Jr
+Scared Zebra
ScaredOfAll
Scarfade
Scargut
@@ -20041,63 +41740,99 @@ Scarlett
ScarredScape
Scarsx
Scarves
+Scary Face
+Scary Me
+Scary Parrot
+ScaryBrandon
ScaryShadows
ScaryTerry
ScaryVacoom
Scat
Scat19
+Scatheful
+Scatter
+Scea
+Scemblix
SceneGfX
Sceneryy
Sceptile
Scew
Schaapers
+Schams
Scharnhorst
+Scheemz
+Schepo
Scheubz
Schienenwulf
SchijnWerper
+Schildkroote
Schildpad
+Schileru
Schiller1994
Schimy
Schiphol
+Schismo
+Schizphrenia
+Schlaide
Schlak182
Schlanged
+SchlipityDop
+Schlitz
Schlock
Schlowmo
Schlynn
Schmaltz
+Schmelting
Schmidtty641
Schmokeyboii
Schmoovin
+Schmuck
Schmuel
Schmuk
+Schneemann90
+Schnei Yo
Schneidster7
Schneyy
Schnitzel
Schnitzl
+Schnocks
+Schnoob
Schnops
Schnozz
Scholi
Schoolies
Schools
+SchoonCombat
Schooner
Schoonzoon
Schoopity
Schorr
Schout
Schovaval
+Schretty
+Schricky
+Schrodingus
Schuabinator
Schuck
Schuyler
SchwanzLord
+Schweiaos
Schweigende
+Schwiemann
Schwingy
+Schwog
Schwoopity
+SciCloan
+Sciamachy
Sciario
Scids
Scils
Scimi
+Scimista
Scimmy2face
+Scion 1T
ScizR
+Scizorp
Sclass707
Scodran
Scoffs
@@ -20105,79 +41840,160 @@ Scofiz
ScoobaQ
ScoobiedO0
Scooby
+Scooby T1
+Scooby Yew
+ScoobySnack
+ScoobySnacks
+ScoochPoooch
Scoopie
Scoops12
+Scooter999
+Scootr
+Scoots
Scoped
Scorchbeast
Score
+Scoreox
+Scoreyy
+Scori
+Scorial
Scorialator
Scorlibran
Scorpiex
ScorpioBoy
+Scorpslay
+Scorqion
Scortyx
+Scot ty
ScotianHerbz
Scotse
Scott
+Scott 0888
+Scott Men
ScottJ
+ScottKZ
Scotteh
Scottie
ScottieP
ScottsTotlol
+Scottsdale
+Scottvc
Scotty
ScottyPippen
+ScottyThrall
Scottyx
Scourging
+Scouse Lyfe
+ScouseBandit
+ScouseThanos
Scout
+Scout Dorvis
+Scout Troopr
+Scout a raid
+Scouting UIM
ScoutnStake
Scowder
+Scp-2786
Scr0t
Scradmaster
Scraex
+Scrafo
Scrambledleg
Scrap
Scrappy666
+ScratchGolfr
Scratchzilla
+ScreamIM
ScreamSavor
Screeb
Screen
Screws
+Screws Floor
ScrewstonTex
+Scrig
+Scringo
Scrkidzl12
Scrotboy
+Scrotetseg
Scrruff
Scrub
Scruba10
+Scrubgod
Scruffy
+Scrums
Scryzen
SctyDsntKnow
+Scuba Steev7
ScubaSnacks
+ScubaSteveOG
+ScubaStweeb
Scuff
Scuffed
+Scuffed Jesu
+Scuffed Ming
+Scuffed Sire
ScuffedGoose
+Scuggie
ScumBagAlex
Scumbag
+Scumbag Joe
Scummy
ScummyMonkey
+Scumpi
Scurlll
+Scuro
Scurrilous
Scuto
ScuttleAway
+Scuzz OS
Scvthe
Scwubs
Scybin
+Scyld
Scythe
ScytheOrNeck
+ScytheShreds
+Scytheer
Scytheplease
Scythes
Sdelta230
+Sdsdsd789
Sduckk
+Se Ki
+Se rena
+Se7en Rye
SeBambi
+SeDzz
SeLeV
+Sea 7urtle
+Sea Anemone
+Sea Buoy
+Sea Hawkins
+Sea Lobster
+Sea Monk
+Sea More
+Sea Saint
+Sea Slugs
+Sea Turtle
+Sea Turtles
+SeaManTaster
+SeaShanty
+SeaShellKing
Seagal
+Seagaru
+Seagate
Seal
Sealab
+Sealegs Btw
+Seamlessly
+Sean E
+Sean Is
Sean278
+SeanIsHiding
+SeanRich1
+Sean_C
Seande4
+Seangie 91
Seanii
Seantjl
Seany4444
@@ -20185,22 +42001,54 @@ Seanye
Seanz
Seapy
Searched
+SearingPain
+Searob
Seas
+SeasTheDay
+SeatGeek
+Seated
Seater
+Seater HC
Seath1552
+Seatoad
Seaweed
+Seazeee
+Seb Fe
+Seb Lt
+Seb Sob
+SebBTW
+Seba Iron
+Sebis
Sebla
+Seboeber
+Seboobs
+Sebukai
+Sebzy
+SecBongToke
Secho
+SecondMars
SecondStage
+Secondary
+Secondes
Secret
+SecretlyACat
Secretly_Bad
+Sectokin
+Sector Six
Seculish
Secwai
Sedap
Sedentary
+Sedlom
+Sedrf23
+See Too Far
+See u em
+SeeMeGoing
SeeYou
Seed
+Seed Of Dee
Seed386
+Seeeek
Seeejay
Seek
SeekerofIron
@@ -20208,222 +42056,425 @@ Seekerz
Seeking
Seeliss
Seems
+Seems Legit
SeemsFair
Seen
+Seen A Babe
Seenoevil
+Seery
Seerz
Seffer Kover
+Sefirah
+Sefka Sil
+Segelpaatti
+Segma
Sego
+Segs69
SeibaRaion
+Seifeltz
+Seifer666666
Seig91
Seighilde
+Seigneur5000
+Sein Blut
Seiskalehti
Seiverna
+Seiya216
+Seize
Sejaeek
+Seje
Sejj
SejjNesta
+Sek Loso
+Sekaiyatra
+Sekava
Seko
SektorQ
Selaphiell
+Selastiri
+Selbyen
Seldrium
Selectic
+Selena Gomes
+Selesi
Self
+Self Attempt
SelfStanding
Selfie
+Selina Kyle
Selj
SellMaxMain
+Sellerz
Selling ROTS
+Sello_Hunter
Sellu
Selmer
Selostaja
+Selyk
+Semantic
+Sembient
+Seme
Semestro
Semeul
Semi
+Semi-Stable
SemiReliable
Semih
Seminary
Seministi
Seminoles
+Semirare
Semlan
+Semours
Semper
SemperOP
+Semperlex
Senarii
Senbonzakra
Sencillo
+Send Backup
SendItKing
+Sengster
Senhor
+Senhor Prego
Senia
+Seniab88
Senior
+Senior Wells
+SeniorCui
SeniorLep
+Senis6
Senjor
Senkaiye
Senkuu
+Sennno
+Senny Bridge
+Seno 45
Senor
+Senor Grumpy
+Senor Nub
+Senor Patata
SenorMarcSux
Senpai
+Senpai Avv
SenpaiDecer
SenpaiiGod
+Senpenbanka
Senpukyaku
+Sens Army
Sens249
+Sensas
Senses
+Senses Fail
Senses12
+Sensie
SensualSnail
Sentinel
Sentristi
Sentrosi
Senturia
Senzel
+Seoyeonnie
+Separi
Sephiore
+Sepi testaa
Sepper
Seppiee
+Seps
+September 26
Septic
Septimus
+Sepv
+Sequenced
Sequin
Sequinex
Sequissimo
SequissuAnau
+Ser Bone
+Ser Boris
+Ser Kelvin
+Ser Paddles
+Ser Percy
+Ser dracarys
Seracid
+Seraff Fe
Seraph
+Seraphine BF
+Serblicious
SerenShadows
+SereneMarine
Serenity
+Serenity Now
+Sereri
+Serfival
SergeiSativa
+Sergonomicus
Serial
+Serialist
Serine
+Serioga One
SerionKiller
SeriousLip
Seriousruss
+Serkr
Serkus
+Serls
+Sernara
Sero87
+Seroplex
Serori
SerotoninBTW
+Serpent Sin
+Serpico
Serpula
+Serpy
+Serros
SertCocuk
Server
Servia
Service
+Service Jobs
+Service user
Sese
Sese778
Sesil
+Sessanna
+Set h
SetItToWumbo
Seta
Seth
+Seth1711
Seth6191
+SethH350
Sethalas
Sethliu
Sethmare
+Setko
Seto292
Settled
+Setzal
Seut
Sevadeg
Sevalt
Seved223
+Sevenation
Seventh
+Seventh Son
Seveoon
Seveoonn
+Severith
Sevie
Sevvy
Sewdri
+Sex Beast
+Sex Gods
+Sex Sea
+Sex Vibe
+SexEZ
SexFerguson
+Sexi Rat
+Sexperience
+Sexsi
Sext0n
Sextor
+Sextuple
+Sexy Carl
+Sexy Cholo
+Sexy Style
+Sexy Will
+SexyFatGirls
+SexyLefty
+SexyPeaches
+SexyShooterr
+Sexyteurs
+SeymourAses
Seyriu
+Seytan
Sfa05
Sfannie
+Sfd
Sfen
+Sfouf
+Sg Mini
+Sgn
+Sgs flames
+Sgt
+Sgt J0hns0n
+Sgt Jacques
+Sgt Moogoo
+Sgt Ru642
+Sgt Salliss
+Sgt SaltySac
+Sgt-Sub0_99s
SgtBuurman
+SgtSausy
+SgtSlaughtur
+Sgtbea93
Sgtfatboy
Sgtsoldier
Sh00t3r2O2O
+Sh0rt Lived
Sh0rty
Sh0w
Sh3pathome
Sh4d0w009
Sh4dowfox
Sh4rice
+Sha r k
Shaan
ShabooBopWoW
Shabot
+Shaboun
Shabuski
Shaco
+Shaco Bot
ShaddyB
+Shade T
ShadeSlay
+ShadedWizard
Shadedmedic
Shadeknightt
+Shadesypoo
Shado
+Shado Man69
+Shadonnon
Shadow
Shadow Flare
+Shadow Left
+Shadow Specs
ShadowBobado
ShadowBoy001
+ShadowFink
+ShadowGodEU
+ShadowJosh
ShadowMakerz
+ShadowPrism9
ShadowSinz
ShadowSniper
+Shadow_006R
Shadowclysm
Shadowcra
Shadowlimes
+Shadowmax666
+Shadows Fall
Shadowscreen
+Shadowsun
+Shadowwheel
Shadsnp2017
+Shadum
ShadwRoca
Shady
+Shady 716
+Shady Glade
+Shady Shin
+Shady417
Shady78
ShadyMilkMan
+ShadyMinkins
+Shadys Bro
+Shadysider
ShaftyKrafty
Shafu
Shagnarok
+Shags Bussy
Shagzy
+Shahe D
+Shahub
ShakaLakaInU
Shake
+Shakeem
+Shakeman
ShakenSoda
Shakkas
Shakuuuur
+Shalamaar
Shalendra
Shallistera
+Shalomga
+Shalysa
+Sham on Osrs
+ShamSavior
Shaman
ShamanJon
ShamanLizard
Shamanletics
Shambler96
Shame
+Shamiina
Shampoe
+Shampoo
Shamsal
+Shamu
+Shandaie
+Shandooobie
Shane
+Shane F3
ShaneSJ
Shanee-oo
+Shanem24co
Shaneobrahhh
Shaner
Shanfew
Shania
+Shania Twain
+Shanizmo
Shanked
+Shanked it
Shanks
+Shanks Haki
Shanksen
+Shantaaa
+Shantar
+Shanteven
Shantideva
+Shapalo
Shapaz
Shape
Shaper
Shapii
Shaqs
+Shaqster1k
+Shaquayquay
Shard
+Shard 2
+Share E R
+Share Sucks
Shareit
Sharing
Sharingan
+Sharingan x
SharishaXd
Shark
SharkTheBait
+SharkiFan
Sharkie200
+Sharkie92
Sharktail
Sharkyyyyy
Sharmac
Sharmz
+Sharn
Sharoxi
Sharp
Sharpeyy
Sharpgut
+Sharpi e
+Sharpie
Sharpman767
SharpyClaw
Shart
+ShartEnjoyer
+Sharven
+Shasan501
+Shat 2 Hard
Shatllef
Shatter
+Shatter Day
Shaun
+Shaun R
Shaun135961
+Shauna Vayne
+Shaunhunni
Shaunni1
Shaunrnm3
Shaunyx
@@ -20434,234 +42485,460 @@ ShawnBW
ShawnBay
ShawnXL
Shawni
+Shawnoh
+Shawrysx
+Shay Kirbuti
Shaya
+Shaya Rene
+Shayd
Shaykolade
Shaymuz
ShaynRS
Shayne
+Shayne 1
+Shayne Topp
+ShayneW
+Shaziyen
+Shaznon
Shazu00
Shazzys
+Shckizm
+She Moist
+She Slackin
+She is lvl18
+Sheashanera
Shebbi
+Sheep
SheepKhalifa
SheepTrainer
+Sheepi
Sheeppo
+Sheer freeze
+SheeshSkicka
+Sheeshlor
Sheetm3tal
Sheetz
+Sheev
+Sheff-Rah
+ShegoSimp
Sheguey
+Sheikk
Sheilaaaa2
Sheivattu
+Shelbgasm
Shelbi
+Shelburz
Sheldore
Sheldozer
Sheli
Shelios
+Shelkun
ShellBeRight
ShellLeeBee
Shelldunk
Shen
+Shen Btw
+Shen-pai
Shenfu
Shenkie
Shep
+ShepShep95
+Shepher
+Shepherdess
Sheq
+Sherbert96
+Sherkey
Sherlock
+Sherlock 07
+Sherlockness
+Shernz
Sherry
+Shertie
+Shes Nasty
+Shes Royal
+Shesterkin
Shev64
+Shevzzz
+Shewolf Nova
Shezwick
+Shh
+Shh Im Maxed
ShiaLaBuff
Shiba
+Shiba Miyuki
+Shibidy
Shiddy
+Shieldy
+ShiftWorker
+Shifteroo
+Shifterr
Shiftless
Shifty
Shiftynifty
Shiftyy
Shifu
+Shigure
+Shihyi
Shiifty
Shiiftyy
Shiit
+Shiit head
Shikhar
Shilo
+Shilo Void
Shilomies
+Shilvah
+Shimmeister
Shimosh
+Shin Nohara
ShinMalphur
Shinchi
+Shine tales
Shing
+Shinichiro
Shinigami
+Shinigami 07
+Shininess
ShiningStar0
+Shining_Bind
ShinnGee
Shino
+Shinobi
Shinook
+Shinox
Shintaz
Shintygod
Shiny
+Shiny Dragon
+Shiny Glue
+Shiny Mew
+Shiny Olm
ShinyMimikyu
ShinyNoctowl
ShinyShyvana
Shionono
+Shioshii
+Ship I
+Ship s
+ShipCaptCrew
+Shipoden
+Shipppo
+Shippy
+Shir
+Shir0u Emiya
+Shirakami
Shiramasen
Shiranaii
+Shire Fox
+Shiredragon
Shiri
+Shirlan
Shirts
+Shishkemax
Shiskey
+Shiv HD
+Shivals
Shivered
+Shiveron
Shivers888
Shivoc
+Shiyah
+Shizlo
+Shizzus
+Shmazza
+Shmeckington
+Shmecko
+Shmelf
+Shmerlin
+Shmew
+Shmexy
+Shmidtie
+Shmo
Shmoah7
+Shneeb
Shnoobed
+ShoToy
+Shoarma
Shoarmadyl
Shocka
+Shocked
Shockedme
+ShockerMe
+Shockzeyy
Shogaol
+Shompy
Shongrislomg
Shonion
+ShooK em
Shoog
+Shook
Shoopdiesel
ShootYaSkool
Shootem40
+Shooty Tater
Shop
+Shopferix
Shora57
Shore
+Shorelyy
+Shorez
Short
+Short Mike
+Short Tale
ShortHoppe
+Shortec
Shortguy
Shortstop819
+Shortz360
Shot
Shot1200
Shotixx
Shotoer
+Shotzz
+Shoulderr
Shouto
Show
+ShowFeet
+ShowUrPits
Showby14
Shower
+Shower Maxed
Shown
Showtek
Shozen
Shpee
Shpikey
+Shpongle
+Shrabbaa
Shran
Shredded
+ShreddedMD
Shregz
Shreikkiller
Shrek
+Shrek 6
+Shrek BTW
+Shrek2
ShrekLovr
+ShrekazoidPR
Shreksalot
Shrik
Shrikems
+Shrimp 72
ShrimpForx
ShrimpStick
Shrimpa
+Shrimping
Shrimpster
Shrimpy5
Shroden
+ShrogTheBarb
Shromik
Shromu
+Shroom God
+ShroomLord17
Shroomjak
Shrtct
+Shrumes
Shtankybruce
+ShuZ
Shuaston
Shuckle
Shuddie
Shuffleee
Shuiin
Shultzy
+Shun Conery
+Shundo Mew
+Shungite Bar
Shuno
+Shunolog
Shunpown
Shunrai
Shunseh
Shupa
+Shure
Shurty
Shut
+Shut Up Megg
+Shut Up Mmeg
Shutnik
+Shv
Shvne
Shwift
+Shwiftzy741
+Shwoompy
Shwoop
+Shxtn
+Shy Kirino
+Shy Mew
+ShyElfTrap
ShySphincter
+Shyhorsegirl
+Shyphii
+Shypsena
+Si Ya
+Si d
+Si mp
SiFu
+SiIver Fang
SiRzZ Zeref
+Sia
+Siallus
+Siamees
SiameseCat
Siamogale
+Siane
+Sianna
Siber
Sibling
+Sic Mundus
SicSolaFide
+Sicariiarum
Sicily
Sick
+Sick Degen
+Sick Ego
+Sick Giraffe
+Sick Irony
+Sick Main
+Sick Mark
+Sick Pet
+Sick Skill
+SickFam
+SickGainsBru
SickNasty
SickPete
+SickPump
Sicka
Sicker
Sickhuman
+Sickhunt
+Sickle76
Sicknez
Sicko
+Sicko Stronk
+Sickvibe
+Sicxness
+Sid and Geno
Sidabras
+Side B
+SideChump
+SideMeatt
+Sidecutters
Sides
Sidewinder15
Sidge
SidijuS
+Sidin1
+Sidka60
Sido
Sidocahn
+Sidro
+Sie
SiebScho
+Siegmeyer14
+Sielunveli
+Siemke
SiennaEhtycs
+Sierra Echo
Sierzant
Sierzy
Siesta
Sifu
+SifuPlankton
+Sig Man
+SigSauer
Sigarda206
+SigeFrid
+Sigefride
Siggen
Siggie
Sigh
Sighlent
SightUn
+SightUn Seen
Sighted
SightlessDog
Sightlines
Sigiis
Sigin
+Sigma Blood
+Sigma Oasis
+Sigma Seven
+Sigmarz
Sigmazeous
Sigmet
Sign
Signd0g
+Signoth
+Sigrudson
Sihana
+Sihl
SihuiRS
Sihva
+Sihva Dark
Siida
+Siiiiiiix
Siimon3
Siimse
Sijmen
Sika
Sika-Mika
Sikauss
+Sikerrim
Sikko
+Sikko NL
Sikkosaurus
Sikn
Sikruz
Siks
Sikskilla
Silanz
+Silasco
Silavex
Silcaria
Silcooper
Sild
SilenceSC2
+SilencedAF
Silent
+Silent Sky
Silent too
SilentEnmity
SilentFabric
SilentFaux
+SilentQ
Silentzsword
Silicon Z
+Silinsh
Silixi
Silky
+Silky Beauts
Silly
+Silly Asian
+Silly Kev
+Silly Rum
+Silly Virgin
+Silly Zilly
SillyPsybin
Sillyibexe
Silmarilli
+Siloxane
SilvaAlzir42
Silvaa
Silvado
+Silvanla
Silver
+Silver Cave
+Silver King
+Silver Lugia
SilverForM
SilverLining
+SilverPuni
SilverRizlas
SilverTeej
+Silverado
Silverang
Silverbluds
Silvercrux
@@ -20671,89 +42948,244 @@ Silverimo
Silverxlion
Silviii
Silvoan
+SilvrLining
Sim Aero
Simeeon
Simel
Simetra
+Similuck
+Simmcheck
Simmi091
+Simmie
Simmololol
+Simmondz
+Simmumah
+Simno Karys
+Simoggy
+Simon Bruh
Simon Jnrr
SimonCookie
+SimonCowell
+Simone Weil
+Simp Andy
+Simp4Jessy
+Simp4Science
Simp4Tanz
+Simpa
+Simpinz
Simple
+Simple Helm
+SimpleSlays
+Simplekinz
Simplest
+Simplex
+SimplexDabs
Simplicitey
Simplicityx
Simply
+Simply Quiet
+Simply Sam
+SimplyBadass
SimplyBetter
SimplyFresh
SimplyLlama
+SimplyNikki
SimplyPro
+SimplyRiolu
SimplySendIt
+Simply_JS
+SimppCatcher
+Simpson
+Simse
SimulatedYou
Simutrans
+Sin Cena
+Sin Cere
+Sin City
+Sin Dragon
Sin0fWrath
SinCrux
+Sinappihauki
Sinasappel
Sinatra
Sinbad
Sinbvd
Since
SinceOldDays
+Sinclair Oil
Sincoura
Sindo
+Sinefeld
Sinerule
Sinetine
+Sinferna
SinfulDesire
+SinfulDingo
Singerderek
+Singulares
+SingulariTx
+Singularry
+SinikOG
Sinister
+Sinister C6Z
+Sinister Key
SinisterLeft
Sinisterz06
+Sinistr Dave
Sinitank
Sinixx
Sink
Sinka
+SinkingUnder
+SinnerUK
Sinner_Blue
Sins
+Sins of Thor
+Sint Truien
Sinta
+Sinterglass
+SiontC100mph
Siorri
Sioux
+Sip Cleeko
+Sipa
SippinBeers
Sippy
+Sippy 1
+Sipsta
+Sipuliparoni
+Sir Zhao
+Sir 0wnalot
+Sir Ali
+Sir Ante
+Sir Boberton
+Sir Botje
+Sir Brandito
+Sir Burritoe
+Sir Chancho
+Sir Colossos
+Sir Daven
+Sir Deedge
+Sir Delwin
+Sir Doland
+Sir Doobies
+Sir Elusive
Sir Epic 3rd
+Sir Ferreus
+Sir Fire Ki
+Sir Frekkel
+Sir Fudmire
+Sir FurDude
+Sir Galleth
+Sir Godfree
+Sir Graj
+Sir Ial
+Sir Idwaly
+Sir Iron 4th
+Sir Jamie N
+Sir Jinhai
+Sir Junn
+Sir LafaLafa
+Sir Lanofg
+Sir Leadfoot
+Sir Lidd
+Sir Lobster
+Sir Luke1627
+Sir Max Tb
+Sir Mordacai
+Sir Mr Bro I
+Sir Nak
Sir NichoIas
+Sir Nuggers
+Sir O Tonin
+Sir One Shot
+Sir Peg
+Sir Poisonfa
+Sir Pur Paul
+Sir Queeffin
+Sir Reflex
+Sir Reos Lee
+Sir Rhaenir
+Sir Rolf exe
+Sir Seifer
+Sir Shrimps
+Sir Slyck
+Sir Son Goku
+Sir Sparhawk
+Sir Stidi
+Sir Stitch
+Sir Sucellus
+Sir Sven
+Sir Tanner
+Sir Ton4
+Sir Towliee
+Sir Truble
+Sir Var4
+Sir Ving
+Sir Vkk
+Sir Whipit
+Sir Wismar
+Sir Wojtek
+Sir Zakar
+Sir friezer
+Sir philippe
+SirAirik
SirAmikVarze
SirAngo
SirArcAngel
+SirArimal
+SirBabbers
SirBerus
+SirBjustice
SirBoma
+SirBoopin
SirBroderick
SirCapper
+SirChknNuget
SirCoolAsian
+SirCumsAlil
+SirDanSolo55
SirDarrBear
SirDeimos
+SirDouglass
SirDougles
+SirDoyvid
+SirDude
SirEfficient
+SirEskimo
+SirFroggits
+SirGillespie
SirGoki
+SirGrimsby
SirGrizzly
SirHines
SirHmm
SirHollywood
SirHumanBean
+SirIronyMan
SirKakoiml
SirKefir
SirKill
SirKulls
+SirLarry55
SirLoinalot0
SirLunarias
SirNexALot
+SirOcean
+SirPegAsians
+SirPhockQ
SirPoo
SirPwn
SirRebs
+SirRuck
+SirSanders
+SirSchmoopy
SirShakes
SirSilky
SirSlayalot
SirSpicius
+SirSplinge
+SirSunTitan
SirSwaggzz
SirTrea
SirVenompool
@@ -20763,49 +43195,92 @@ SirYiffer
Sir_massmo
Siraxis3310
Siraz
+Sircamm
+Sircarenot2
+Sirdedalot
+Sire Edward
SireSucks
+SirenMan
Sirhca
Sirius
Sirixen
+Sirjoshihad2
+Sirkuspelle
Sirlagger
Sirlightboy
Sirmordred44
Sirnuclear
+Sirroyce
+Sirsa
+Sirsteve99
Sirstynkalot
Sirswish4
Sirtippy23
+SisiJones
Siste
+Sit Quietly
+Sit xD
+Sita Koll
+Sita Rama
+Sitharii
Sithlord
Sitinduck
Sitt
+SiuMan
Sivior000
+Six 3 Ohh
+Six Dix
+Six Kills
+Six Seasons
+Six Sen6e
+SixFootAmigo
SixOhFour
Sixcess
+Sixfoot0001
Sixint
Sixpkabs
Sixpounders
+Sixten106
+Sixthflag
Sixty
+Sixty N9ne
SixtyNine73
+Siynistr
Sizashi
SizeMan
Sizer
+Sizzle Cat
+Sjaak
+Sjak
Sjakk
+Sjakk Spill
Sjappy
Sjeb
Sjele
Sjenjatje
Sjenkie
+Sjokoladebit
Sjoni
SjonnieDon
+Sjonsen
Sjotha
Sjulstad99
+Sk Gollum
+Sk Scooter
+Sk ky
+Sk u lly
Sk1llzy_RS
Sk1ttlz
Sk8rgrl474
SkHiCharisma
+Skaaddoosh
+Skaane
Skachoo
Skada
+Skada N
+Skade
Skaduw99
+Skaf
SkaffeAgent
Skaicius
Skaikru
@@ -20813,69 +43288,124 @@ Skailas
Skakkae
Skal95
Skanderbeg
+Skank Hunt32
+Skarboeblie
+Skarking
SkarmBliss
+Skars Iron
Skaryth
Skate
+Skate Squirt
+Skatemyboard
+Skater 1299
+SkaterJord
SkaterSkillz
Skatergod
Skaterlegs
Skaterune3
+Skaufel
+Skcoot
+Skedeby
Skedsauce
Skeeb
Skeer
+Skeesh
+Skeeterstein
SkeetlzPopz
Skeff
Skeggy
Skelebral
Skelethon
+SkeletonSex
Skelex
Skelnik
+Skelpy
Skely527
+Skelytom
+Skepp
+SkeptasMum
+Skeptical
+SkepticalSol
Skere
+Skere Bert
Skermy
Skerp_Perp
Skertt
Sketch1e
+Sketchiin
+Sketti Water
+Skewp
Skezi
+Ski Gim
+Skiba
+Skibidi Tob
Skibidibills
Skidoodlee
SkiemLord
Skifree
+Skilane
Skill
+Skill Will
+Skill issues
+SkillFatigue
SkilldSkitzo
Skilldriver
Skilled
+Skilled Boof
+Skilled Roy
Skiller
SkillerC4
+Skillerbabes
+Skillersj
+Skilless
+Skillexi
Skillhunter1
Skillian89
Skillius
Skilll
+Skilllzdan
Skilln
+Skillpace
Skillpadden
Skills
+Skills Ahoy
+Skills Boss
+SkillsPets
SkillzGainz
SkillzLmao
Skillza
Skillzzz
Skilor
+Skimer
SkinStitches
SkinTone5
SkinnedYoshi
Skinny
+Skinny Mage
Skinthix
Skinyoualive
+SkipTheTask
Skipi
Skipper996
+SkipperMcgoo
SkipperPing
Skippy
+Skiptutorial
+Skito
+Skittlz Doc
SkitzRs
+Skitzad
Skitzpatrick
+Skizzles
+Skj
Skjaera
Skjeberg
Skjelve
Skkarpz
+Sknnywhteboy
Sknor
+Sko Birds
+SkoalSnus
Skodem
Skoh
Skol
@@ -20883,6 +43413,7 @@ Skold
Skolder
Skolzera
SkoobiDooby
+Skooier Bibs
SkoomaPls
Skopix
Skopusnik
@@ -20892,22 +43423,37 @@ Skorne
Skorned
Skotten
Skov
+Skovduen
Skovtt
+Skox
+Skral
+Skramlan99
Skreecher
Skreeeech
+Skreeeech Z
Skriptz
Skritman
Skrl
SkroTam
+Skroooodge
Skrote
+Skrrrtle
Skrudzas
Skruf
SkrumpKing
Skrychi
Skryze
+Skubert
Skuddar
+Skul
SkulbIaka
Skuldebrev
+Skull 2148
+Skull Cove
+Skull64
+SkullDemise
+SkullFkdNex
+SkullFricker
SkullTrailYT
SkullTricked
Skulled
@@ -20915,46 +43461,77 @@ Skullhead6
Skullking199
Skullpit
Skulls
+Skulls Jr
+Skumbag Xell
Skummi
Skummy
Skumpy
Skundos
Skunk
+SkunkAsylum
+Skunkerinho
Skunkieblow
+Skwat MD
+Skwurtle
+Sky BIues
+Sky Em
+Sky Mages
+Sky Satan
+Sky VR46
+Sky and Sea
+Sky is mine
SkyBouncer
+SkyBroadband
SkyFlyPie
SkyKnight
+SkyRizzy1
SkySailing
SkySkyClover
+Skyblownet
+Skybussa
Skyda
SkyeKuro
Skyenss
+Skygirl Tami
Skyleosaurus
Skymonster77
Skymore
Skynet1188
+Skyom
+Skype Call
Skyreacher
Skyrider
Skyrider50
Skyrion993
Skywalkingyo
Sl yx
+SlGURD
SlGlL
SlLPH
+SlRCUMSlZE
Slaats
SlabOfCorona
Slabs
Slackington
Slacky
+Sladdbarn
Slade9100
+Sladist
+Slagter
Slain
+SlainThemis
+Slaked
Slakito
Slakje
Slakoth
Slam
+Slam Daddy
Slambo
+Slamdabooty
+Slamdark
Slamer1993
SlammDaddy
+SlammalS
Slamz
Slance
Slap
@@ -20963,35 +43540,71 @@ SlapShot777
Slapen
Slaphead28
Slapmeister
+SlappChopped
SlappaBogan
+SlappeStront
Slappenn
+Slappers
SlappinMango
+SlappybagsFC
Slaps
+Slaps Nuts
Slapzinger
Slaqk
+Slarkan
Slash
Slasher
+Slasher z99
Slasher0708
Slaskepott
+Slate Snake
+Slats
Slaughta
+Slaughtered
+SlaughtrMeat
+Slav Kings
Slava
Slave
Slavish
Slavtonio
Slay
+Slay Addict
+Slay More
+Slay Or Bust
+Slay Pets
+Slay R
+Slay Tim
Slay0rDie
Slay3rmate
SlayAChicken
SlayEeryDay
SlayForFame
SlayForJoy
+SlayImpulses
SlayIsMyfame
SlaySir
+SlayToSkill
Slayaholic
Slayborhood
Slaycation
+Slaydenoob
Slaydo
+Slayem Maul
Slayer
+Slayer 247
+Slayer 267O
+Slayer Azye
+Slayer Clues
+Slayer Helmz
+Slayer King
+Slayer L0G
+Slayer Mid
+Slayer Rome
+Slayer Shark
+Slayer Task
+Slayer XPs
+Slayer bond
+Slayer n gp
Slayer314
Slayer360
Slayer7515
@@ -21000,6 +43613,8 @@ SlayerKingv2
SlayerRyan
Slayerburger
Slayerdog
+Slayerg1g
+SlayerisGame
Slayerknox
Slayerman
Slayers
@@ -21009,22 +43624,32 @@ Slayhades383
Slayic
Slayin
SlayinSkills
+Slaying Poon
SlayingBooty
SlayingDave
Slayingit14
Slayn
+Slayology
Slayosaur
Slayr
Slays
SlaysIronman
+Slayscaped
+Slayter
+Slaytr
+Slayv
Slaywolf
Slayyer59
SlayzyDayz
+Slck Mark
SleanClate
SleazySEAL
+Sleazyscape
Sledgendaddy
Sleeep
Sleep
+Sleep Cycle
+Sleep When
Sleepercell
Sleepgoood
Sleepierz
@@ -21032,181 +43657,376 @@ Sleepiness
Sleeping
SleepingCow
Sleepinonice
+SleeplessC47
+Sleepnaut
Sleeps
Sleepy
+Sleepy Fr0st
+Sleepy Hoop
+Sleepy Mulli
+Sleepy Tired
+Sleepy sound
SleepyPlantz
SleepySus
Sleepybear
Sleepzy31
Sleet56
Sleete
+Sleighbor
Sleightyyy
+Sleighyour
Slemmy
Slender
SlepinHose
+Slepinn
Slepping123
+SleppySnek
+Sletmar Kets
+Slettenbak
+Sleuth
+Slev711
+Sleve
+Slevenderrrr
Slewwyy
Sleya
+Slibbon
Slice
+Slice Dice85
+Sliced1Bread
+Slicer3 0
Sliceseau
Slick
+Slickslipply
+Slicore
+Slidecast
Slides
Slidpanther
Slidz
+SlieNinja
+Slienced
+Slievemore
+SlihgtyWrong
+Slikjee
Slim
+Slim Gandalf
+Slim Paul
+Slim Yogurt
SlimJD
+SlimeShat
+Slimey Fish
+Slimjim
Slimy
+Slimy Uim
+Slingin
Slinkeh
Slinky
+Slioter
+Slipery Peet
Slipory
SlipperySnek
Slise745
Slit
Slizzle
+Sll8
SlnOfWrath
+Slo
Slo w th
+Sloanee
SlobOnMy
+Slojsarn
Slokei
Sloopie
Sloothy
Sloper
+Sloppy Joey
+Sloppy WAP
+Sloppy Zoot
+SloppyGnomes
+Sloppyninj
Slorkie
+Sloshpack
+Slotche
+Sloth
+Slothenly
+Slothery
Slothhs
+Slothly
Sloths
Slothy
SlottedPig
+Slough
Slow
+Slow Down
+Slow Spirits
+Slow blow
+SlowRoaster
+Slowky
+Slowly Dying
Slowpoke
SlowrolI
+Slowxpgamer
Sludgy1
+Slug Kiss
+Slugggy
+Slugjob
Slugr
+Slum Village
SlumberGoose
Slumptality
Slurggi
+SlurmsMcnzie
+Slurmz
+SlurpDaTerp
Slurpez
+SlurpinBrews
Slus
Slush
Slushhy
Slushii
Slushiiii
Slushyy
+Slusserbust
Sluthra
Slutism
+Slutzilla
Sluwe
+Sluwe Odin
Slxpz
+Sly CHRlS
+Sly Guy Matt
+Sly Shy Guy
+Sly Spyro
+SlyPancakes
Slyfocs
Slyjack
Slymax
Slypes
Slythiren
+Slyzuh
Sm0keyMcpot
+Sm0rc420
+Sm1thyy
+Sm6
+Sm8 AJ
+Smaarips
Smac
+Smack Snr
+Smacka Fish
+Smackatosh
+Smacking 0s
Smackintoshh
Smaeow
+Smai
Smajli
+Smal Iron
Small
+Small Chief
+Small Idea
+Small Iron
+Small Paul
Small3y
SmallBlock
SmallBrained
+SmallPepino
+Smallemans
+Smalley
+Sman
Smang
+Smart Dog
+Smart Foam
+Smart One
Smartbabe
SmarteeRS
SmarterMop
+Smartfon
Smartiest
Smartyross
+Smash Vials
Smashing
Smaug
SmaugSlayer
+Sme Cape
Smeared
Smecher
+Smeeezy
Smeegoles
+SmegGIM Gr8
Smeggyweggie
SmegmaJesus
SmegmaL0rd66
Smegmatism
+Smegmboy123
+Smekkes
Smeklius
Smeli0das
Smelix3
SmellMyClam
+SmellingMill
Smelly
+Smelly Butt
+Smelly Guy
+Smelly Kip
SmellyGymSox
+Smellyjeans
Smellypillow
Smess
+Smetvrees
+SmexyBaker
+Smezzie
SmiTHSaNiTy
Smiddels
Smiddle
Smidjorgen
Smii
Smil
+Smil3r
+Smile My Boy
SmileBro
Smiled
+Smilee
Smiles
+Smiley AK
SmileyCyrus
+SmileymanTim
Smilf
+Smiliprophet
Smilts
+Smimi Smumu
SmiqelAngelo
+Smirk
Smit
+Smite Bait
Smite4Ags
SmiteForAgs
+Smited Time
+Smites
Smith
+Smith Inc
+Smith a Cat
Smith2109
SmithRebirth
Smithin
+SmithingWhip
Smithinz
Smithoxmagic
Smithy
+Smithy NZ
Smittyk15
+Smo3
Smoak
Smob
+Smoel Dicht
SmoggyB
+Smokahontaz
Smoke
+Smoke A Bag
+Smoke Brb
+Smoke J Brb
+Smoke Oil
Smoke2Fly
+SmokeChedFTM
+SmokeCheds
+SmokeM0B
SmokeSocial
+SmokeandCum
+Smoked Bacon
+Smoked Ed 92
Smokedale
Smokee
SmokeeLoki
SmokerOfDank
Smokes
Smokey
+Smokey Eyes
Smokey201
+Smokeynutz
Smokeynz
+Smokiecat
+Smokin Clans
+Smokin Perks
SmokinBlunts
SmokinChills
Smoking
+Smoking Hash
SmokingFlax
SmoknDReefer
Smol
+Smol Big Toe
+Smol Kupo
+Smol Lyra
+Smol Pikachu
+SmolDeer
Smoland
+Smolrice
Smooooove
Smooth
+Smooth Draft
+SmoothRabbi
+Smoothlu
Smoothpossum
+SmoqueWeed
+Smork It
+Smoss
+Smot Poking
Smpli
Smuddy
Smug
+Smug Advice
+Smug Grin
+Smulknul
Smurf
+Smurfboard
Smurfed
Smurfingt0n
+Smurfman254
Smurfukas
+Smurghilda
+Smurky Maart
Smurphington
+Smush
+Smush Things
+Smushma
SmushyCows
+Smuvies
+Smuzzle
+Smythy
Sn0op
Sn0rkath420
+Sn0wb4ll
Sn1p3
SnYp
Snabba
+Snack Bar
SnackJack
+Snackspace
Snacktime
SnafuPC
Snaggapus
+Snaghyrnd
+SnailNipples
Snake
+Snake Boss
+Snake Jazz
SnakeSpec
Snakebite37
+Snakebites
Snakedeath2
Snakedogbear
Snakeling
+SnakeskinRag
+Snaks
Snaky
+Snaky Snake
SnapMyCarot
+Snapa7
+Snapboog1e
+Snape Grass
+Snapeeh
+SnapperSnafu
+SnappySplash
SnarTheCook
+Snarbo
+Snarf
Snarflaxus
Snarfsnah
Snarglefox
@@ -21214,62 +44034,110 @@ Snarl
Snarx
SnaszAndrejj
Snatchquatch
+SnazzyLt
Sneak Dissin
SneakEnergy
SneakKhajit
+Sneakbo
Sneakee
Sneaky
+Sneaky Chair
+Sneaky IM
+Sneaky Shark
+Sneaky47
SneakyBaloup
SneakyCake
SneakyEmu
+SneakyFrogg
SneakyGnomne
SneakyOD
SneakyPete
SneakyTay
+SneakyZoot
Sneakymag3
Sneakyvicn
Sneakywaffle
+Sneakz
Snee
Sneekerz
Sneekey
SneekyBeeky
+Sneekydied
+Sneeuwpoeper
Snefnuk
+Sneide O_o
+Snek zy
SnekInMyBewt
Snekkerboden
Snekling
Snekty
+Snekty Jr
+Snelms Deep
Snelmz
Snibzy
Snickers
Snickersbite
+Snicklesz
Snide
+Snide Senpai
+Sniff K
+Sniff this L
+Sniffi
+Sniffin 24-7
+Sniffin Bags
SniffinBags
+SniffingClue
Snifflematt
SniffmySmoje
SniffyMonkey
Snike4
Snikepaven
Snipe
+SnipeOne045
Sniper
+Sniperfrank1
Sniping
Snipor
+SnkyGreninja
+Snlly
+Snny
SnoWorm
Snobby
+Snobby Elite
Snoep
+Snollen
Snoobsteri
+Snoogens
+Snookies
Snoop
+Snoop D9
+SnoopSiah
+Snoopfyzle
Snoopy
Snoot Boops
+SnoozeBolton
SnoozingBear
+Snoper
+SnoreLunaLax
Snorff1
Snorklarn
Snorlax
Snorlax9030
+Snorlaxz iLy
Snorona
Snot
+Snotlapje
Snow
+Snow Day
+Snow Poff
+SnowBunnyhvn
+SnowEmpress6
+SnowManSam
+Snowangel18
Snowballerz
+Snowbaru
Snowclub
+Snowdaze
Snowearth
Snowelle
Snowfall
@@ -21279,71 +44147,144 @@ Snowiest
Snowii
Snowmen
Snowscythe
+Snowsmith43
Snowvof
+Snowy Winter
Snowy2653
Snowyo26
+Snowys Main
SnuSnuShi
Snubby
+SnugLikeABug
Snuge
+SnuggleSnail
Snugglez
+Snugins
Snuift
+Snuite
SnusMumr1ken
Snuskig
+Snusti
+Snuup
Snuus
Snuuska
+Snype_U
+So Far To Go
+So Flattered
+So Inagawa
+So Iron BRUH
+So Jamiezing
+So OSRS
+So Quiche
+So Warm
SoHighhhh
+SoLoH DoLoH
SoMoist
SoSimPol
SoSleepy
SoStronk
SoUhBtw
SoVeryInvis
+Soaa7
Soad
+Soally
Soap013
Soaphia
+Soapybubble
Sobe
+Sobe VII
Sober
SoberFarmer
+Sobibor
+Sobotka
Soburin
+Sobzy
Socca
Soccerc12
Soccermom02
+Soccy
SocialAnxty
+Socialism
SocialistGuy
+Sociality
+Sock Jesus
+Sock Starch
+Sock Stealer
Socket
+Sockks
Socks
Sockum
Socrates
Socrates001
+Socratestes
Soctch
+SodaGrab
SodaLambz
SodaPopPunk
Sodaseg
Sodasokwa
+Sodd
+Sodo Pop
Sodobrasil1
+Soecara
+SoegLeppel
SofaKingHI6H
+Sofakingdom
Soffachka
Sofia
+Sofia Cooper
+SofiaVergara
Sofiero
+Sofoni
Soft
+Soft Chicken
Soft Dump
+Soft Geeves
+Soft Jesus
+Soft to Hard
+Softboil
+Softcorejmac
Softer
Softest
+SoftestFox
+Softice
SogSteelrock
Sogeking
Soggy
+Soggy Napkin
SogxNeutro
Sohcahtoa090
Sohh
Sohl
Sohrac
+Soi
+Soi Cowboy
Soija
+Soisox
+Soivio
Sojuah
+Sol Buendia
+Sol Heredic
+Sol Heretit
+Sol Leo
+Sol Rock
+Sol o
+SolTeevo
+SolaDuaeManu
+Solakoust
Solan
+Solar Stone
+Solar754
+Solarized
+Solarrr
Solaryohm
Solarys
+SolasLexeth
Sold
+Sold GF 4Gp
+Sold My Name
SoldMyRNG
+SoldMyWife
SoldUrDad4GP
Soldaat
Soldaat824
@@ -21352,80 +44293,169 @@ Soldjer
Soldtheman
Sole226
Solek
+Solely
Soley
Solibiobois
Solid
+Solid Snack
Solid Stache
SolidSnape
+Solidtag
Soliform
+Solimanx
Solitary
+Solkrieg
+Sollor
+Solmlet
Solo
+Solo A7X
+Solo Aero
+Solo Arron
+Solo Blitzy
+Solo CM
+Solo Chumb
+Solo Dani
+Solo Foxy
+Solo Geeber
+Solo Gira48
+Solo H3llz
+Solo Hayden
+Solo Herbo
+Solo Idenn
+Solo Jawn
+Solo Jones
+Solo Jord
+Solo Kev
+Solo Mace
+Solo Mus
+Solo Road
+Solo Romte
+Solo Russian
+Solo Sieb
Solo Sirva
+Solo Trojan
+Solo Umbreon
+Solo Ward
+Solo Wind
Solo Xenopus
+Solo Yoyo
+Solo kris
+Solo snapper
Solo2424
+SoloBandit
+SoloBongo
SoloCanadian
SoloDeicide
+SoloDeth
SoloDynamix
SoloFireFist
+SoloFlar
SoloFletcher
+SoloHotDog
+SoloIron30
+SoloMerx
SoloMishMosh
SoloMission
+SoloNotAlone
SoloProject
SoloRob
SoloShow
SoloSloop
SoloSmackbar
SoloSnhaas
+SoloSupOnly
SoloTibbs
Soloable
+Solobussy
+Solocek
+SolohellRat
SoloingLife
Soloman50
Solomasi
+Solomon
+Solomon Kane
+Solomopp
+Solos Turn
Solowerkz
Soloyo
Solsa
+Solucki
+Solufana
Solus
+Solus RS
Solvent
+Solvent less
+Soly Handal
SomalianRats
Somalor
+Somavrana
Some
+Some Pets
+Some Ranger
+Some Use
Some mad dog
+Some1youno
SomeDirtyOar
SomeGoldDust
SomeRSIdiot
Somix
+Somniac One
Somnolent
+Somoshoho
Somppup
+Son Goku MF
+Son Huntr
+Son LeGeND
+Son o Rous
+Son of Akkha
+Son of Hail
SonArtorias
SonBuns
SonIron
+SonNamedBort
SonOfDecay
SonOfGandalf
SonOfWright
SonVsStepmom
+Son_Jo
Sonc
+Sondey
+Sondr
Sondra
Sonekta
Sonett
Song
+Songs Of
+Songsteel
Sonhov
+Sonia Strumm
+Sonic 513
+Sonic Kp3
+SonicYouth
Sonicgg1
Sonics
+Sonics Alt
+Sonidoo
Sonjini
SonneTeufel
+Sonol
Sonsofkyuss
+Sonx
SonyVegas17
Sonycboom
SooCrispyy
SooUnlucky
+Sookadiik
Soolo
Soon
SoonAHusband
Soonifer
+Soop Pock
Soop3rpig
SootSpritez
Soothe
SootyWhale32
+Soph
Sophinx
Sophlex
Sophomaniac
@@ -21436,18 +44466,31 @@ Sora
Soraaxle
Soradin
Sorado6
+Sorarpegius
Sorbits
Sorbosander
Sorcere10
Sorcerer5555
SorcererOdin
+Sorcerio
SorceryFish
+Sordnatra
+Sore
Sorec
+Sorenisbad
Sorenn
+Sorgrum
+Sorinvv
+Sormeton
Sorose
Sorry
+Sorry Iron
+Sorry1mLate
+Sorryganster
Sortable
Sorted
+SorthIon
+Soruve
SosBoerrr
Sosig
Soskiller6k
@@ -21456,131 +44499,244 @@ Sosraid
Soss
Sossukorva
Sossumafia
+Sosuke Aizen
+Sotamage
+Sotetseg
Sothe1
+SotonSteve
+Sottetseg
Soujy
Soul
+Soul Burger
+Soul Scaper
+Soul Sleep
+Soul v9
SoulEater957
+SoulMadness
+SoulOfMidir
SoulSteala
SoulUnleash
+Soulbarrier
Soulbearer
+Soulcape
+Souldia
+Souled 0ut
+Soulja Lance
Soulkilled3
Soulkn
+Soulles
SoullessMask
SoullessWood
+Souloh0
Soulololol
Soulplay Gee
+Souls Mate
+SoulsRampart
+Soultiller
Soulxicution
+Sound Soul
Soundbar
+SoundsOfSoul
Soup
+SoupEyes
+SoupOfTheDay
+SoupTheDuck
+Soupshi
Sour
Sourzilla
SousChefLuna
Sousse
South
+South Dakota
+South Park55
SouthPillar
SouthSide
Southampton
Southenders
Southern
+Southp0le
Souvenierr
Souvis
+Souvis5
Soux
+Sovacam
Sovakat
Soveth
+Sovetskie
+Sovi
Soviet
+Soviet Union
Sovryn
Sow Love
Sowodasoap
Sox207
+Soxinder
+Soy Duro
+Soy Sauce
+SoyBhoy
SoyJuanEuro
SoySoySoySoy
Soyez
+Soylemagne
Soylo
+Soz Misclick
Sozan
Sp00n
Sp1cy
+Sp1cy Ramen
+Sp1cyAvocado
+Sp33Dkillz
Sp33dy
+Sp3c Deck
Sp3nC
SpARioN
SpBongile
+Spaar Lampje
Spaca
Space
+Space Bussy
+Space Lily
+Space Marine
+Space Orbs
SpaceC
+SpaceEnter
+SpaceScape
SpaceToker
Spacealt
+SpacedPinata
+SpaceeCowboy
+Spacejumper0
+Spacing Outt
+Spade-e
Spadey
Spag
+SpagBolCol
SpagHacked
Spaget1111
Spagett
Spajina
Spalling
+Spam Lite
SpangeBerb
Spangebob
Spangl
+Spangledbun
Spanish
+Spanish Dave
+SpankFox
+Spankies Lit
Spanky
+Spann
Sparacino916
Sparc
+Sparc Mac
SpardaWallet
Spare
Spark
+SparkRS
Sparkles
Sparklesbean
+Sparky3433
+SparkyD5
Sparkyo
+Sparre
+Sparta2
+Spartac_us
+Spartacus855
SpartanDrgon
SpartanSheep
SpartanSlick
+Sparte
Spartin028
Sparty
Spasian
+Spat Fastic
+SpatialMagic
+Spattu
+Spaustin80
+Spauz
Spaynce
Spctwm
+SpdrBiteJosh
Speak
Speakerbocks
+SpearRue
Speat
+Speats
+Spebi
+Spec A Ho
+Spec Master
+SpecAgent713
Special
SpecialBus
SpecialGuest
SpecialPVM
Speciiik
+Speckles
SpectrlHeist
Specz
Speechwriter
+Speed Colas
+Speed Wobble
SpeedPony44
+SpeedSouls
+Speedalot ak
Speedball1
Speede
+Speedlund
+Speedrun
Speedster
+Speedy Cd
+Speedy Click
+Speedy Rulzz
Speedy9921
SpeedySpider
Speeldoos
+Speen Big
Speeze
SpejsonNM
Spek
+SpekKas
Spektur
Spellgoth
Spenc
+SpenceSuh
+Spencee
Spenceey
Spencer
+Spencer O
Spencerr
Spencerz
Spend
+Spendlove
Spengineer
Spennel
+Spennel V2
+Spenno 1
+Spensaurus
Sper
Spermlet
Spero
Speshal
+Speshl
+Spesho
Spettkaka1
+Spewis
Spewler
+Spewlie
Spezza
Sphere
Sphinx
+Sphinx66
Sphooner
Spice
+SpicelessJoe
SpiceyBoy39
Spici
+Spici Boi
Spicy
+Spicy Noods
+Spicy Rahman
SpicyMemeGod
SpicyMoney
SpicyPepe
@@ -21588,41 +44744,71 @@ SpicyVitus
Spide
Spider
Spider1357
+SpiderPhenom
Spiderhead
+Spiderpig
Spidersnot8
Spiderw5
+Spiderz 3
SpideyC
+Spidoo
+Spiering
+Spierpijn
+Spigniv
+Spike05
+SpikesterHC
+Spillage
+Spillingx
Spin911
Spineweilder
+Spinkle
+Spinnenking
Spinnenweb
Spinolyp
Spirit
+Spirit Box
+Spirit Cube
+Spirit Owner
+Spirit Rok
+Spirit Sin
Spiritcraft
Spisek
+Spit man
SpitfireSR
+Spitiz
Spizazzy
SpizzyMarz
Splarf
Splarn
+Splash LT
Splash-8
Splashattak
+Splashcarrot
Splasher
+Splashes
Splashley
Splashworlds
Splasion
Splatter300
Spleaner
+Splessp
+Splezaa
SpliceTFY6H
Splidge
SpliffMaster
+Spliffore
+Spliiffy
Splinta
+Splinterhand
Splitarellie
Splitfaction
Sploof
+Spluge
Splyce
Spo0n
Spocuch
Spodey
+Spoice
Spoilted
Spoka
Sponch
@@ -21631,17 +44817,36 @@ Sponkz
Spoodersussi
Spoog
Spookachtig
+Spookadoodle
Spookfish
+SpookiBoogi9
+Spooky Beech
+Spooky Ramen
SpookyCarl
SpookyMain
Spookyou
Spookytoot
Spoon
+Spoon Full
+SpoonFedFred
+SpoonFedii
+SpoonMePlz
+SpoonTracker
Spoonay
+Spooncera
Spoondow
Spooned
+Spooned Simp
+SpoonedBunni
+SpoonedNormi
+SpoonedWhen
+Spoonfed BTW
Spoonihomo
+Spoonku
+Spoonletics
Spoonmannn
+Spoons
+Spoood
Spoookems
SpoopyDooToo
SpoopyNooper
@@ -21649,191 +44854,365 @@ Spoorwijk
Spooxky
Spop
Sporer
+Sport Leader
+Sport425
+Sports Bike
+Sportsnut911
Spotifee
+Spotmaster 5
SpottedBass
Spottednoble
SpotterN
Spottie
SpowSaus
+Spr1ditis
SprLemonHaze
Spraahz
Sprattet
SprayM0re
+SpraynMantis
SpreadButter
+Spreader
Spria
Sprice
Springer
Springii
+Sprinty
+Spritbilist
+Spro max
+Sprog Legend
+Sprogdor
Sprooti
Spruit
Spry
Spubb
Spud
+Spudalumps
Spudge
Spudinator
Spuge
+Spuhcific
+Spuhgetti
+Spuitopbruid
Spunknik
SpunkyLlama
Spurted
+SputtyBTW
+Spyder Sin
+Spydig
Spyike270
+SpykeZim
Spykes
Spyriano
Spyro
+Spyro 3
Spyrooooooo
Spytech44
+Sq Head
Sqe3zy
Sqeat
Sqiit
+Sqix
+Sqoub
+Sqreech
+Sqrwl
+Squab Cat
Squabs
+Squad of one
Squadleader
+Squaire
Squall
Squall44444
Squallicious
+SquanUK
+Squanch Rat
Squanchhy
Square
+Square One
Squarebodies
+Squat Slav
SquatCobbler
SquatJogsBro
SquatNation
Squatting
Squaw
Squeakes_x
+Squeaky Cow
+Squeedly
+Squeeeegs
SqueegeeLord
Squeeze
+SquidNumber0
SquidSquad
+SquidTofu
Squidby
Squiddle
+Squidgling
Squidie
+Squidler
+Squigiglius
Squigs
+Squigtime
+Squinch
+Squinch Alt
+Squinton
Squintts
SquintyNinja
+Squire Yaper
Squirlruler
+Squirly69
+Squirrel
+Squirrel Pop
SquirrelTM
Squirreled8
+Squirrely W
+Squirt2God
+SquirtsAlot
SquirtyHersh
SquirtyMcD
+SquishySir
Squonking
Sqwalle
Sqwarka
SqwezMyLemon
+Sr Dipper
Sr8d
+SrBambino
SrMick
SrMuerte
Sraracha
+Srelek
+Sri
Srogi Wujek
+Srs
SrslyTired
SryAFK
+Sshscaptain
Sshuggi05
+Sssnakepit
+St Chrewin
+St Liam
+St Newman
+St eve
+St itch
+St un
+St0kStaartj3
St0ney
St0oge
St4bU
+St4rCh11d
+St8hunter
+StBasilthGr8
StDecker
+Sta Mama
StaIemate
StaJeOvo
Staasi
Stab3r
+Stabalot
+Stabobis
Stacii100
Stackdude
+Stackey
Stackieks
Stackin Dosh
+StagBeer
Stagden
Stagmuss
StagnantAlt
Stagnation
Stago
+Stahlinski
+Stain Master
Stak
+Stake Me
StakeOrQuit
+Stakebril
Stakens
Staker
+StakerOhWait
Stalactites
Stale
+Stale Chips
+Stale Dough
+StaleBagle
Stalefloe
Staley
+Stalifax
Stalk
+Staller
Stalline
Stalphie
Stamin
+Stamina Pot
+Stamkoz
Stammer
+Stampie
Stams
Stamuhnuh
Stan
StancedMK
Standard
+Stanimal
Stanimal244
+Stanjuuh
Stank
+Stank Rat
StankBreath
+Stankfist
Stanley
Stanleye
Stanlux
Staparik
+Staparik Lt
Stapper6
Star
+Star Doctor
+Star Say 962
+Star Scourge
+Star Spoon
+Star zy
StarDreamSam
StarFell
StarGlimmy
StarKist
+StarSnitcher
Starboyyyyy
+Starbuckss
Starcharts
+Starchild
Starcry
Starfallx
+Starfight789
+Starfish
+Starjoker8
+Stark Btw
+Starlette
Starlighte
+Starmaker
Starmemoria
Staropramen
Starr
Starrlightss
Starryfina
Stars
+Stars Hockey
+Starshark
+Start Game
+Started Late
StarvedLlama
+Starvi
Starwulf
+Starzhine
Stash
+Stashes
Stasik25
+Stasik77
Static
+Static Peak
+Staticshook
Statoke
StatsisZero
Stattelsson
Statuhs
+Status Bar
Statutory
Statykk
+Statzy
+Staubach
+Staunch
+Staunch_BJD
+Stax I
Stay
+Stay Breezy
+Stay Frosty
+Stay Hurt
+Stay Hustlin
+Stay Ready
+Stay Salty
+Stay Shady
+Stay Sic
+Stay West
+Stay wise
+StayFinessed
StayPulls
+StayPullsBTW
+StayThirsty
+StayinClassy
StaysmallEZ
+Ste Gerrard
+Ste f
SteSkillalt
Steady
+Steady Loot
+Steady Mobn
+SteadyFlexin
SteadyetiBTW
+Steak Ramen
+SteakWitWiz
+Steaked
+StealCutOats
+Steals
+StealsThings
Stealth
+Stealth Ownz
StealthChop
Stealthcy
Stealthi
Stealthweed
+Stealthwolf
Stealy
Stealy Boi
Steam
+SteamboatJim
+Steamed H4ms
+Steamfitting
+Steammm
+SteamyBuns
SteamyCreams
Steanox
+Steb
Stedy
Steeam
Steebert
Steeermy
+Steekkha
Steel
+Steel Gods
+Steel Stud
+Steel Tarkus
+Steel VIK
SteelRoxas
+Steelbird16
+Steeleos
+Steelpan
Steen
Steenkoe
Steezed0ut
Steezi
Stef
+Stef West
Stefan
StefanLivNo1
+Stefar
Stefen
Steff
SteffenHax
Stefo
+Stego
+Steiger
Steikluet
+Steinbeck
Steinphite
Stela
+Stelisss
Stellacea
+Stellamara
StellarLG
StellarWhey
Stellard
+Stellas Dad
+Stelli
StembaWalker
Stenfen
Stengo
@@ -21841,21 +45220,43 @@ Stenicki
Stenny
Stenuism
Step
+Step Barrow
+Step mummy
StepBroHung
+StepBroImZuk
+StepDabs
+Stepbro
+Stepbro Paul
+Steph Browne
+Steph a nee
Stephan
+Stephand
Stephane
Stephen9320
StephenMoore
Stephenns
StephhRS
+Steppage
Steppaz
Steppenwulf
+Stepy
Stereofuzz
Sterlander
Sterlington
Sterrenstof
+Stervolz15
+Stetko
+Steum
Stev
+Stev en
Steve
+Steve Beanie
+Steve Tobs
+Steve Tombs
+Steve Zissou
+Steve ffs
+Steve is Pro
+Steve07
Steve51
SteveAustin
SteveChamp
@@ -21864,38 +45265,66 @@ SteveMCOG
SteveMerch
SteveOwner09
SteveSnow15
+SteveStamos
+SteveTheGimp
SteveTheMuss
Stevee
Stevefr3nch
Stevemck
Stevenrds
+Steves Blade
Stevet7125
Stevey
+Stevie ESQ
Stevo
+Stevo Lad
Stevo29
Stevoguy
+Stewge
Stexie
Stian
+Stian Olsen
Stian2
Stibby
+Stickasaurus
+Sticker
Stickers
Stickman
+Stickman Zeb
Stickman0011
Stickmeister
SticksNbugs
Sticky
+Sticky Icky
+Sticky Nut
StickyBeardo
+StickyShroom
+Sticky_BIBLE
+Sticky_Lip
Stickypooman
+Stickz Alt
StierK
+Stieren Lul
+Stiffies
Stiffish
+Stifighter X
+Stiflers mum
+Stigel
Stigiam
+Stigmaster
Stijco
+Stijf Stefke
Stijin
StikSt0f
+Stikjob
Stil
Still
+StillANormie
+StillCoughin
+StillFap2ash
StillFarmin
StillNoBan
+StillNoTBOW
StillRemains
Stillblazing
Stillen
@@ -21905,16 +45334,24 @@ Stiltz
Stimu
Stimulated
Stin
+Stindebinde
StingWisher
Stingy
Stink
+Stink Soep
Stinka
Stinker
Stinks
Stinkwiener
Stinky
+Stinky Adam
+Stinky Wench
StinkyFatBoy
+Stinkyfeat1
+Stinkypooper
Stinkywon
+Stino33
+Stiorra
Stipples
StirG29
Stirner
@@ -21922,118 +45359,222 @@ Stitcha
Stiven117
Stixc
Stiznai
+StlthyPanda
Stnmn
Stnyzky
StockMyRam
+StockOlm
+Stocker T
+Stockphish
+Stocksund
Stocktone
+Stockyard
Stodie
Stoel
+Stoere Kip
+Stoerebos11
+Stoern
Stoffer
Stoffins
+Stoggy188
+Stoic Christ
+Stoic Sloth
+StoicGod
Stoke
+StokedMaggot
Stolen
+Stolen Ego
Stolen Grunt
Stolen Herbs
Stoli
+Stoli za
Stolid
Stolpz
Stolte
+Stoltzkin
+StolzRS
+StompaHhh
+Stompadile
+Stompea
+Stomped
+Ston3d Arrow
Stone
StoneDwarf
StoneOkami
Stoneator
Stonebeech
Stoned
+Stoned Abra
+Stoned Sober
+StonedGSXR
+StonedNormie
StonedTTD
+StonedTurtle
Stonedtime
+Stoneplus
Stoner
+Stoner Morty
+Stoner Pov
+StonerGod
+StonerL0ve
+Stonerling
Stonesoul15
Stoneyvangel
Stonkx
+Stony 420
Stoobie
Stoogaroni
Stooley
+Stoolz
Stoonly
Stoopy
+Stoopy Scape
+Stoovey
Stop
+Stop Acts
+Stop Mules
+Stop Now
+Stop StepDad
+StopCapping
+StopDabs
StopDontDoIt
+StopStepSis
Stopitjoe
Storgie
Stories
Storkie
Storm
+Storm Monkey
+StormFly
+Stormlight
+Stormmaker98
+Stormy RS
Stormzy
Storn42
Stortford
Story
+Story Arc
+Story of Man
Storybot
StoryofPete
Storys
+Stothelayer
Stouse
+Stouty
+Stovall_9
Stover
+Stovete
+Stowa
Stowty
Stox7k
+Str Owner07
+Str Takes U
Str0ng8ad
Str8
+Str8 Maxed
Str8backatya
Strabz
Stradarts
+Stradinger
Straf
Strafe
+Strafes
+Straffen
+Strafi n
StraightSimp
+Straighter
+Straka
Stralia
+StralianBtw
+StrangeChris
+Stranger bud
Stranger56
+Strangerz
Stranges10
Strangler
Strap
Stratazz
+Straton
Stratty
StratusQc
Straubrey
Strauss
Strav
Straven89
+StrawHatMatt
+Strawbs
+Strawhat01
Straya
Strayday
Straynaneeee
+Streakin
+Streammmmmmz
+Streammz
Streepken419
Street
+Street Fever
+StreetSweepa
+Strefi
Stregano
Strelitzea
StrenIron
Strength
+Strength Lvl
Strengthy43
Strepski
Stresset
Stretch
+Stretch 07
Stretchy
Strickend
+StrictNein
Strictly
Striddle
+Strideless
Strife
Strijden
Strijder
Strikedown
+Striker796
Striker8
+Striker8 0
Strikes
Strikingvipr
+String Benis
StringsLogic
+Strip Club x
+Stripa
+Stripgwyn
+Stripred
+Strive
Strix Tactic
+Stro Sr
Strobax
Strocks3
Strocules
+Strohs
StrokeMuh
StrokeMyWand
Strokemon
StrokmyGroot
Stroller
StrollerBaby
+Stroma
Stromboli
+Strong Chonk
+Strong Left
StrongKush
Stronger
+Strongman613
Strongrune
+Strongsad Jr
Strongtank11
+Stronkmoscle
Stronku
+Stroople
+Stroppy
+Strosity
+Stroxers
Strr
Strubber
Strudelis
@@ -22044,47 +45585,82 @@ StrydarGrim
Strykijzer
Stryneguten2
Strytegy
+Stu Pid
+StuartLittle
+Stubo
Stud
+StudMonster
Studderd
Student
+Student t
+Student tort
+Study Hours
+Stuffe
Stuffed
+Stuffed Hog
Stuffmypanda
+StufnDatMufn
Stugey
Stuggo
+StuieShadez
Stukatz
Stuksken
Stumbles
+Stunflame
+Stunlax
+Stunnaz
Stunts
+StunuuR
Stupendous
+Stupid My
+Stupid Swagg
+Stupid444
StupidMagnet
+StupidTrader
Stupidcoin2
Stupsus
+Sturdy Base
+Sturdy Wrist
+StureStork
Stureplan
Sturminator3
Stussy
Stuxi
+Stuzington
StvnSmth
+Stvx
Stxrbursts
Stye
Style
StylesP
+Stylistx
StyxHatred
SuBRifleS
SuNnY_AuStiN
SuRviVoR
SuaNorte
Suadela
+Suavity
+Sub Ironman
+Sub Taz
+Sub3Marathon
SubEntity
Sub_Void
Subaru
+Subaru Bow
Subarue
Subarus
Subatinijo
SubiSpeed
Subiaco
+Subiaco Oval
Subie
+Subie_rex22
+Subigrl
+Subkultured
Sublanza
Sublimation6
+Submerging
Submug
Subnautica
Subnet
@@ -22095,56 +45671,103 @@ SubtleAsnTrt
Subtotal
Suburu
Subwaysurfer
+Subwooferman
Subwrx
+Suc
+SuccMyMilk
Succeed
Successful
Succulent
Such
+Such Mlg
Suchislifee
Sucjk
+Suck At Zuk
+Suck my dig
+SuckItBrandn
SuckMyBot
SuckMyDuels
SuckTube
Suckle
+SucksTehSuck
SucksToSuck
+Sucuk
Sudan7a7
+Sudas
SudoBash
SudoFox
+Sudsy Mule
+Sudz
+Sue Lynder
Suede
Suedezor
+Suemi
+Suephoria
Suffer
Sufferance
+Sufferi
+Suffering
+Suffi
Sufflavus
+Suffspector
Sufwah
SugaNoCoffee
+Sugab
Sugar
+Sugar Leafs
+Sugar Lily
+Sugar STR
+Sugar Shilo
SugarDaddyNL
SugarFr3
+SugarFre
+Sugarbunny
+Sugaree
Sugarly
Sugge
+Sugma Newt
Sugmabum
+Sugru
Suhado
Suhec
Suhgundees
+SuhhP
Suhk
+Suhkmedaddy
Sui29
+SuiSaii
Suikerwafel
Suing
Suited
+Suizy
+Sujn
+Suket
+Sukit Trevek
+Sukiti
SukkerLyn
Sukondikis
Sukoru_VIII
Sukotto-Sama
Sukz
+Sulcius
+Suldan Serar
Sulg
Sulliusceps
Sully
+Sully Bear
+Sult an
Sultan
+SultricMY
Sulu34
+Sum
+Sum 1
+Sum Tuum
Sum41
+SumBeers
Sumh
Sumin
Sumlettuce
+Summ
Summah
Summer
Summerson1
@@ -22152,8 +45775,16 @@ Summit
Summit603
Summon
Summond
+Summoneering
Sumper1
Sumuinen
+SumwanSpeshl
+Sun Devi1
+Sun Isukki
+Sun Muijja
+Sun Riser
+Sun Rising
+Sun Sioux
SunBar
SunG0han
SunaLAD
@@ -22161,34 +45792,84 @@ Sunbite
Sunchester
Sunda0wner1
Sunday
+Sundo
+Sundxy
SundyWundy
SunflowerMan
+Sungravel
+Sunguinesti
+Sunine
+Sunky Kong
+Sunlust
Sunni
Sunny
+Sunny Boy
+Sunny Coast
+Sunny Otso
+Sunnyi
+Sunoric
+SunriseEagle
+Sunrises
+Suns in 2025
SunsShine
Sunsa
Sunscape6
+Sunset
+Sunset Riot
+Sunshadow
Sunshine
+SunshineBus
+Sunskit
Sunta
Sunti
Sunuwar
Sunyikata
+Sunzz
Suola
Suolane
Suolitussari
Suomen
SuomiKP
Suomiprkl
+Sup Mike
+Sup3r Ziko
+SupAndSupply
SupDutch
Supa
+Supa Saper
+SupaHottFiya
+SupaWarmFire
+Supaidahman
Supdude
Supeerbusy
Super
+Super 16
+Super Bossy
+Super Cinos
+Super Cool
+Super Duke
+Super Fish
+Super Fr3ak
+Super Katze
+Super Tails
Super4
+SuperChunk3
+SuperFlow
SuperHeroWiz
+SuperJoy
SuperJuicy
+SuperKoi
+SuperKriss
+SuperMcFresh
+SuperMiika
+SuperMuffins
SuperNJ
+SuperNinja0
+SuperPPMan
+SuperPochaco
SuperScaper7
+SuperSem1
+SuperShane
SuperShif
SuperT0aster
SuperTussu
@@ -22198,351 +45879,759 @@ Superb
Superbigblnt
Superbusy
Superdoer
+Superdrol 50
Superfire444
+Superguaygix
Superior
Superjim111
Superjoden
+Superkman12
Superkoi3000
Supernate91
Supernatti
Supernova
Supersam142
+Superstition
Superstuffz
+Superwarz96
+Superzu 0ne
Supo
+Suppertmain
+Supple Flaps
+Suppp
Suppression
Supra
Supra2JZ
SupraTurbo
+Supragirl94
Supreeme
Supreme
+Supreme Iron
+Supreme NYC
SupremeDanz
SupremeSpike
SupremeTeam
+SupremeWoody
+Suprie
Suprreme
Supsep
+Supultura
+Suq Maddic
+SurNtly
+Sura Lust
+Suraato
+Surah An-Nas
Suraii
Sure
SureDeth
+Sureal
Surfboarder
Surg1n
Surge
SurgeHunter
+Suricate
Suris
+Suriv
Surkastunut
+Surkee pelaa
Surlygrump2
Surok
Surrey
Suruinen
+Surullista
+Susan Boyle
Suse
+Susej Dog
Susell
+Sushi Cult
+Sushi Eater
+Sushi Life
+Sushi Water
+SushiToyota
Sushidame
Susilapsi
+Suspence
Suspiria
+Susser Tod
Susurrous
Sutdellen
Sutho15
Sutty
+Suur L6vi
+Suvalkietis
Suvorexant
Suxe
Suzakuin
Suzn
Suzshenron
+Sv
+Svampus
SvartaOdhner
Svartalvheim
Sveden
Sveitsi
+Sveka
Sven
+Sven med D
Svenpai
Svenskafyren
Sverd
Svetta
+Svikkipedia
+Svinepels
+Svisha
+Svt500
+Svurt
+SvvK
+Sw0llenPlums
Sw3Frost
Swaars
+Swabby
Swabski
Swacked
Swadloon
+Swaffeldomin
Swag
+Swag Ponu
Swag420
Swagbopeep
Swageroneus
Swagex
+Swagg Goat
Swagger
+Swagger Pkr
+Swaggy Ballz
SwaggyMaggee
+Swagittarius
+Swagohod
+Swagomancer
Swagslicer
Swagturtle
Swagunit
Swahilson
SwamiNate
+SwammyHolds5
Swamp
+Swamp Crotch
+Swamp People
Swampy
+Swampy Sloth
+SwampyAce
Swan
+SwangleSauce
Swanheart
Swanney
+Swanni D
Swanny
Swapski
Swarm243
Swarme
+Swarme d
Swarmyard
Swatfighter7
Swatson
Swaxel
+Swe Flame
+Swe Fred
+Swe Jerry
+Sweatiest Xp
Sweatscaper
Sweaty
+Sweaty G0OCH
+Sweaty King
+Sweaty Nurse
+SweatyBeard
+SweatyBurger
+SweatyMoobs
+SweatyScrot
SweatySockZz
SweatySunday
Sweden
Swedgeville
Swedish
+Swedish Fika
+Swedish Myth
Swedushi
Sweensicle
+Sweepstakes
Sweepyjoe
+Sweeqy
Sweet
+Sweet Boyy
+Sweet Dee
+Sweet Es Mmm
+Sweet Guy 94
+Sweet Pigeon
+Sweet Potato
+Sweet Vodka
+SweetSugR
SweetVan420
+Sweetchild0m
Sweetermanz
Swell
Swer
Swerve
Swerve0311
SwerveJ
+Swervy
+Swerze
Swift
+Swift btw
Swift738
SwiftCobra08
SwiftSteps
Swiftamine
+Swiftly546
Swiftmend
Swiggitywall
SwiggyMcSwig
+Swiigs
+Swiim Shady
+Swiirl
Swild0
Swilza
Swimfatman
+Swimmor908
Swimpa
Swine
Swingers
+Swip3rR
+SwipeMyCard
Swirly
Swirly248
Swishers
SwissPigeon
+Switch Dropz
SwoIe
+Swole Milk
SwoleBadguy
Swolerbear
SwoleyGhost
+Swolga
+Swoli
SwollSoul
Swollbroham
Swolverine
Swoofii
+Swootz
Sword
+SwordBoy110
+Swordcode205
Swordied
Swordillo3
Swordlord524
Swordman1173
Swordmank
Swordmast756
+Swordmother
Swords
+Sworzis
+Swoule
+Swown
Swtbnd
+Swtshrt
+Swuido
Swurl
Swxv
+Swyxia
+Sxng
+Sxrup
Sxstyl
Sxves
+Sy
Syaniide
Sybe
Sybke
+Sybr
Sycamore
+Syche
Sycily
Syck Memes
Sycrem
Sycther
Syed
+Syfer
+Syh
Syjac
Sykeaux
Sykes
+Sykes Xo
+Sykes33
+Sykezer
Syliith
Sylist
+Sylite
Sylixx13
Sylosis
Sylph Rings
Sylth
+Sylthrakis
+Sylvaria
+Sylvee Serum
Sylveon700
Sylveonn
Sylvian
+Sylwia
Symb
Symba12
Symblic
Sympathize
Symphonicx
Symtai
+Syn-er-gy
+SynGates07
SynTechRS
Synacyde
+Synaii
Synced
+Synchronizer
+Synchronous
Syncire
Syncronia
Syncshot
Synd
+SyndaXatrix
Syndalen
+Syndicete
Syndok
Syndra
Syndrious
Synepxd
Synepxo
+Synergy Sam
Synesthesian
Synfidel
+Synister9090
+Synizta
SynkNZ
Synn
Synnri
+Synoz
Synq
Syntax
+Synthy
Syntipukki
+Synyster
+Sypanite
Syphikins
Syracusa
Syrile
Syrilius
+Syringe
Syrius
Syrups
Syrus
+Syrus Virus
+SyrusDaVirus
+SysTeM 07
Sysf
+Sysfea
+Syssla
System_Fail
+Syte
+Syvette
+Syzgy
+SzechuanJuan
+Szenarien
+Szethe
+Sznd
Sztarky
+Sztr
+Szyrup
+Szyther
+T 0 0 A S T
+T 0 B
+T 1 ta n i c
+T A B S
+T A R O
+T Bagmotion
+T C 3
+T C J
+T D
+T E L O
+T H C
+T H O R M
+T IV
+T McLeod
+T Montana
+T Nymphadora
+T O M M M Y
+T O N N l
+T O N Y N Z
+T OXI C
+T P I E
+T R A V
+T R U 3
+T S M
+T S O M
+T Shadow T
+T T E X X
+T U B M A N
+T U R K 96
+T U U M A
+T W I S T Y
+T W l C E
+T a v e r
+T alon
+T aqn
+T emby
+T enrin
+T h a w
+T imboy
+T imm
+T omahawk
+T otem
+T otz
+T r as h
+T rigger
+T ripwyre
+T rist an
+T u m p p i
+T ubby
+T ylor
+T yrr
+T-A nina
+T-BONE STEAK
T-Hugs
+T-Lai
+T-Rabb
T-city
+T0 BE FRANK
+T00K3N
+T00LB0X
T00ManyCooks
T0AD
+T0KEN
T0KK
+T0M
+T0M ATO
+T0RB3N
+T0RlN
T0bbbE
+T0ber
+T0fi
T0ilah
+T0lne
T0mbak
+T0mz
+T0oth
T0othbrush
T0ry
+T0tally lll
T0vergasje
+T1gBits
+T1m
+T1mmaayy
+T2NK
T3KT0N
+T3T
+T3URASTAJA46
T3mu
T3vas
+T4TE
+T4a
+T7
+T70TYE
T7mon
+T8OW
+TA Greenie
+TA xBravo
TAA66
TAARA
+TABS1E
+TANK ED
TANKTOPTIGER
TANRfromHS
+TARFUII
+TARV05
+TATERT1TS04
TB12
+TB3N
+TBA Ness
+TBA Poppi
+TBAC
TBNinja
TBOW
+TBSE Stupid
TBSG-Baine
TBonFirstCoX
TBoneZzzz
TBoyd4138
+TC NeverLift
TCHAMl
TDPred
TDRS
TDie
+TDog
+TE Omni
+TE-toimisto
+TEAMFORTDUDE
+TEATMCBRIEF
+TEAxBAGGER
+TEBA
+TEDDl
+TEEMUXXD
TERMlNATE
+TERRORHYPE
+TESTOKEIJU
+TFS
TFreeze
+TGCONCEPTION
TGDekuTree
+TGI Vendredi
TGOBS
+TGSH
TGSpaghettiM
+TH0MAS
TH0MM0
+TH0TDETECT0R
+TH5
+THA CHR0NIC
THANIT0
+THANKS D0C
THATSCARCASM
+THAl LADYB0Y
+THC BOOSTED
+THC and EXP
THCGods
+THCiron
+THE CH1N0
+THE JEDl
+THE MOOR
+THE MUUMI
+THE TOSH
THEHAZE
THEIKOS
THEST0RM
+THEchronic 8
THICC
+THICC UIM
+THICCCBWANA
+THIIIIITH
THRALLGOBRRR
+THT
THUMBTHUCKER
TIIIIIIK
+TIM BEREN
TIMBO
TIOTEEE
+TITr fishy
+TJ UCF
TJay
+TKO Rage
+TKOsh
TKfromNC
TLT5
TLTBT
+TM Riddle
+TM8
+TNA INUS
+TNDSH
+TNF
+TNT Stealth
TN_Biscuits
+TOA Main
+TOA Rebuild
+TOA3
TOASTA
+TOB Inc
TOBplank
+TOHIGH2FLY
TOLIPTSET
+TOM RlDDLE
TOMMMY
+TOMMYSHELBEY
TOMMonyzzz
+TONNI re mix
+TOOlateN0B
+TOR0
+TORVA BTW
+TPD-Vladik
TPGG
+TR Ugur
+TR0UT CURS0R
TR0X
+TR3N ABUS3R
TR75
+TR9
+TRABZ10
+TRAJANO RD
+TRAPH0UZE
+TRAPorGTFO
+TRAVllS
+TRCSup
TRESTOLONE
TRI0DE
TRIPPlE
TRUMP
+TRUMPbtw
+TRUTH OF JFK
+TRXeatsRAPTR
TRYNAHANGWU
+TSA
+TSI
TSMCharizard
TSMsOAZ
+TSR Mishiah
+TST
TSWRX
+TSwiftSucks
+TT17
TTBtw
+TTT
TTTSpiceTTT
TTTTT
TTVCardyUK
TTVPandaBear
+TTommynator
+TTurret
+TTyrannical
+TULK4S
+TURBOPEN59
TURDENATOR
TURK
+TURKISH HERO
TURM0IL22
TVAnime
+TWISTED T
TWITTERSUPP
+TWL
+TWO000
+TWlNKE
+TX Bonefrog
+TX-15
+TXR3
+TYC Beatrice
TYCANN
TYEY
+TYL0RD
+TYTYTYYYTTYT
+TZTOKHUGEKOK
+T_ShelbyLtd
T_Swishh
+T_apka
+Ta C oS
+Ta ks
+Ta1ntzilla
Ta2kaz
+Ta7e
+Taakxic
+Taargus
Taathum
Taavik6iv
+Taavit
Tabagie
TabascoGrind
Tabbed
Tabbscoot
+Tabby Cat4
+TabbyCat97
Taberknackle
Tabesco
+Tabiun
+TableLamp
+Taboo Tim
+Tac
+Tach
+Tachr
Tachycardy
+TackTick
Tacklebox
Taco
+Taco Bit
+Taco Krydder
+Taco Log
+Taco Paws
+TacoCat
+TacoKittenz
+TacoTimma
TacoWithGuac
+Tacos Pump
Tacotueaday
Tactic
TacticNoodle
Tactical-RSP
Tactics
+Tactics Ogre
Taders
+Tadz
Taekwon-Do
+Taekwondoo
+Taelium
Taelos
+Tafboy
Taffarell
+Tafff
+Tag 7
Tagei
Taggeman
Tagi
+Tagz
Tahdeton
+Tahdonvoima
+Tahfi
+Tahimik
+Tahm83
+Tahuna Beach
+Tahx
+Tai
+Tai Mai Shuu
Taikajim
Taikanz
Taikapoika
+Tail Gory
+Tail Raiser
Tailight
Tails
Tailsnake
Tainoo1
Taint
+TaintFondler
+Taintedhappy
+Taintehds
Tairoun
Taiwan
Taiyi2
Taizur
+Taj Mahballz
+Takalaaaa
Takaloo
Take
+Take My Sp3c
+TakeARedPill
TakeNaps
TakeUhSeat
Takea12
+Takedown Jr
Takeitilslay
Takens
+Takeout24
Taker
Takfil
Takimoto
+TakingADab
Takis
Takji
+Takobocchi
+Taks
Taky
Talal
+Talaxim
Talcron
+Taleah
+TalenteDK
Tali
Talia
Talito
Talk
+Talkamar TT
+TalkingMoose
+Tall Greg
+Tall Vince
TallChair
TallPaul24
Talla
+Talla Keyali
Tallented
TallerKiwi
Tallink
@@ -22551,57 +46640,104 @@ Tally
Taloroar101
Talos
Talppa
+Talrith
+Taltt4
Talu
Talvedon
+Talviel
Taly
+Talzn
+Tam Ranch
+Tam The Bae
+Tam k0nijn
+Tamacti
Tamadra
Tamaki
Tamale
+Tamara
+Tamaraa
+Tamayura
Tamber
+Tamberi
Tame
Tamerr
+Tamis
Tamjam
Tamlin
Tammii
Tamminga
+Tammy
TampaTHC
+Tampered
+Tan Toad
+TanDumb
Tanatos
+Tandanus
Tanden
+Tanduay Rum
+Taneesha
+Tang Eater
Tangar
+Tangela
+Tangelo T
TangerineFly
+Tangibility
Tangle
+Tangle Root
+TangleEllis
+Tangleboot
Tangledroot
Tango
+Tangshan
Tangzu
+Tanie
+Tanime
+Tanis513
+Tanjiro
Tank
+Tank VS Bear
TankMageJon
TankProphecy
Tankarino
Tanked
TankedAgain
Tanker
+Tanker 685
Tanker773
+Tankerton
+Tankkimies
Tankky
+Tanknique69
Tankster360
Tankytank
+Tanna
Tannnk
Tanny
Tanoak
+Tanoak alt
TanqueRamos
+TantusV
Tantza
+Tanuliina
Tanz
+Tanz Mutagen
+TanzFang
Tanza
Tanzagen
TanzerReborn
Tanzoo
Tanzu
Taozi
+Tapanui
Tapas
Tapdaddy
Tape
Tapir
+Tapir Squad
Tapirslayer6
Taplop
+Taplu
+TapoinItteni
Tapu
Taqi
Taradrial
@@ -22610,122 +46746,262 @@ Tardysoap
Tarezed
Taringa
Tarki
+Tarkista Hv
Tarlach
Tarns
Taro
+Taro Buns
TaronRS
+Taroshik69
+Tarouco
Tarpon
Tarroo
TarzanNinja
Tarzzan
Tasarorm
+Tascar
+Tase T
Tashee
Tashkas 007
TaskMan
+Tasset Man
Tassoth
Tassy
+TastefulNote
Tasty
+Tasty Burger
+Tasty Nan
TastyBoiMilk
TastyKnight
TastyToilet
Tata
Tataa
Tatanchis
+Tatankaa
Tatapie
Tatepon
Tater
+Tatertots
Tatimary
Tato
+Tatorz
Tattoo
+TattrTots
Tatuu
+Tau Lord45
+Tau Neutrino
+Tau Tau
Taucher
+TaunkChicken
+Tauno
Taunos
Taurideum
Tauros
Taut
Tautvif
Tava
+Tava Monster
+Tavern slut
+Tavernic
Tavi
Tawa
Tawakoni
Tawer
+Tawhid
Tawny
+Tax Audit
+Tax Wax
+Tax Wizard
+Taxing
+Tay Lore
Tay3rell
TayMoney
Tayleth
Taylor
Taylor672
TaylorMarcus
+Taylort07
Tayluh
+Taynq
+Tayri
Tays
+Tayunu
Taz762009
+Tazmina90
+Tazner
+Tazplan
Tazy420
+Tazz2006
+Tazzin
+TazzoTezz
+Tb knakworst
+Tbix
+Tbk
Tbone5876
Tbow
+Tbow Joe
+Tbow Todd
+TbowCourtois
Tbrs6
+Tchambz
+TdTapsa
+Tdblindmonke
Tddun
+Tdmiro
Tdogg31
Tdurocher
+Te
+Te Awa
+Te x a s
+Te zzz
TeBroHimself
TeCurt
TeJay
TeMuD
+TeQuiL A
+Tea Farmer
+Tea Witch
+Tea n Milk
+Tea on Wayne
+TeaIe
+TeaMerchant
+Teaandliquor
Teabz
Teachan
+Teadribble69
+Teafuse
Teagan
TeagueDaBoss
+Teal AV
Tealer
Team
+Team Chubby
+Team Flow
+Team Rocket
+TeamCleaned
+TeamJono
TeamSoloMid
+TeamVaChimpy
Teamwork
+Teand
Tears
+Tears of Avo
+TearsOfWeezy
+Teazor
Tebal1
Tebowowns
+Tebus
+Tec-Grind-95
+Tecc Legacy
Tecco
+TechCo
+TechColor
TechContraps
+TechFreakTwo
+TechOnMaxed
+Techart
TechiePicker
Techmenjoe
+Technician
Techno177
Techno9
+Techo
+Techtonique
+Teckczar
Teckerz
Teckie16
+Tector OSRS
+Ted Beneke
+Ted Striker
+TedRS
+Teddii Bear
Teddy
+Teddy Brum
+Teddybareman
TeddysMoo
+Tedication
Tedsticles
+Tedua
+Tedzudo
+TeeBee
+TeeBee11
TeeSchaf
+TeeTee1772
+Teebo 727
Teegious
+Teegzie
+Teekiz
Teemu
+Teemu126
+Teemuz
+Teena
+Teenagers
Teenyduck
+Teequoze
Teeqy
Teeray
Teetoh
+Tefak
Teff
+Tefilah
TeflonCancer
+TeflonJavon
TegridyF4rmz
+Tegriidy
Teh Only God
+Teh W H I P
+Teh Yumm
+TehBigNub
TehBriBri
+TehKillaaa
+TehPum
TehShowerMan
+Tehebow
Tehh
+Teigur
Teittinen
+Teivanna
Teixo
Tejmaster
+Tekannan
+Teke Toucher
+Tekkenfury
Tekkies
+Tekkies nub
Tekknow
Tekkuza
Teknoid
Tekoflex
+Tekryael
+TekstPlekshT
Teksti-TV666
+Tektiny
+Tektom
Tektonio
Tektons
TektonsTaint
+Tektos
+Tel3
Telboy
Teledogs
Telee
+Teleport 125
+Teleportoise
TelesBehindU
+Telesh69
+Tellum
Telluric
+Telope
+TemBROross
+Temdom
Temeria
+Temmer
+Temmie
TempVVS
+Tempal2
Tempest
+Tempesta1
+Tempick
Templaris
Temple
Templooit
@@ -22734,177 +47010,477 @@ Tempoctrl
Temponazz
TemporaryBls
Temppuliina
+TempstRimuru
Tempthric
Tempz
+Ten Letters
TenOnTheFlop
TenPieceNug
+TenPly Bud
Tenacious
+Tender Nuts
Tenderrrrr
Tendinosis
TendoTheTux
+Tendulkun
+Tenebri
TenebrisMeam
+Tenenwasser
Tenereus
Tenga
Tenh1s
Tenhou
Tennis
+Tennis Socks
TennisLad
+Tennnessee
+Tennu
Tennysee
Tenorman
Tenraikash1
+TenryuuKaiNi
+Tensilean
Tensor
+Tensor Trace
+Tentacle
+Tentpolepie
Tenya
Teotl
+Tep3lstreel
Tepeksi
+Tepezki
+Teplan
+Tepoa
Tepponen
Teqila
Teqq
TeraLokien
+TeraVit
Teras
Terbleg
Terial117
Tering
+Tering Tiete
Term
Termite
Termiz
TermnaLcpL
Termoil
Tero
+TerpWrangler
Terpedout
+Terpily
+Terppa1775
TerpySlurpy
TerraToffey
+TerraTony
TerresFatum
+Terrible Edd
+Terro
Terror
+Terror Earth
+TerrorJaxx
Terrorise
Terroristi
Terry
+Terry Munro
+Terry61RS
Terrybear
Terva
Tes Iron
Tesaticles
+Tesco
Teserve
+Tesla bot
TeslaDiva
+TeslaHero
+Tesni
+Tessei
Tesseria
+Tessies Bits
Test
+Test Dummy
+Test Strip
TestStrip
Testate
TesticularCa
+Testikeln
+Testoepa
+Testsubject
TetYun
+Tete3 0
Tetragrams
+Tetrah Blue
Tetsu
+Tetsu Nurtaw
+Tetsu Steel
Tetsu2
Tetsunohigan
Tettekop
+Tettezotteke
Teurastamo
Teus
Teus777
Tev0
+Tevreden
Tewocp
+Tewty
Tewwer
+Tex Zen
TexanzOS
Texas
+Texas Hou
+TexasAggie
TexasPlayer
+Texasholdems
+Texastea2
Texman
Text
Texx
Teyrill
+Teyzr
+Tezyn
Tflo
+Tfue
Tfulkyou
+TgMofo
+Th Abigor
+Th0m
+Th3 K1ng P1n
+Th3 Wolf
Th3IronMan
Th3KiNG
+Th3KiNG_Paul
+Th3Tool
+Th3Villager
+Th3_DoN
Th3uns
+ThAngelSlayr
ThEDievolved
+ThSheerman
+Tha Bser
+Tha Crazy L
+Tha Decided
ThaDankantor
ThaDragonSM
+ThaGiz
ThaLawl
+ThaNewArcher
+ThaRealRambo
ThaStepBro
ThaaMunchies
+ThaaOne
Thaerokem
Thai
+Thai Girl
+Thai ler
Thaichili
Thalarios
ThaliN1
Thamasta47
Thameslink
ThanaWee
+ThanatosRise
Thangkang
Thanked
Thanks
+Thanks Jeans
+Thanks4Pet
+Thankz Mom
+Thano
+Thanos btw
ThanosIsLife
Tharendel
Tharic
+Tharin
+Tharok
+Tharrogant
+Thasos
That
+That Noob
+That RNG
ThatBoiii
ThatBoyBurly
+ThatDamAss
ThatFishhGuy
+ThatGuyGoob
ThatGuyJordy
+ThatLipGrip
ThatLuck
+ThatManBez
ThatOldskool
+ThatOlmlet
+ThatOneAsian
ThatSandNoob
ThatSickBoi
+Thatonesock
Thats
+Thats Gang
+Thats Not PC
+Thats Thicc
ThatsNotRite
+Thaumat
+Thaurison
Thav022
+Thawk410
+The 0ld Nite
+The 0xymoron
+The 1 liquid
+The 11th
+The 2nd GIM
+The 3rd Main
+The 90s
+The Actuary
+The Aegis
+The Aod
+The Apina
+The Atreus
+The BPO
+The Baad Man
+The Big Chum
+The Bleez
+The Blue Owl
+The Blyat
+The Bonk
+The Booger
+The Boys
+The Brawler
+The Broskie
+The Bubbsy
+The Buffalo
+The Cage
+The Catowl
+The Champy
+The Chopper
+The Cleaned
+The Cleaning
+The Coffin
+The Comeup
The Crogamer
+The Crows
+The Dabbler
+The Danny
+The Dark
+The Dark165
+The Data Guy
+The Debated
+The Decided
+The Deli
+The Diamond
+The Dink
+The Dipshit
+The Dothraki
+The DrNick
+The Dragona
+The Dre
+The DripLord
+The Duffman
+The DwOrfe
+The Echo
+The Eco
+The Effected
+The Em8
+The End
+The Engine
+The Ex Zerkr
+The Expanse
+The Fat Toad
+The Fe Woman
+The Fig
+The Fisher
+The Fugitive
+The Gas Tank
+The Ginga
+The Giznooch
+The Grouch
+The Grower
+The Guppy
+The HRE
+The Half Man
+The Harambae
+The Havok
+The Hibbs
+The Hivemind
The Hobo
+The Hoffner
+The Hundred
+The Hunter
+The I Am
+The Iron Cpt
The Iron Era
+The Is0lated
+The Jedi Way
+The King 023
+The Kiwi
+The Labfreak
+The Lager
+The Last Act
+The Latvian
+The Law 98
+The Locust
+The Logger
+The Long Day
+The Lope
+The Lord Ra
+The Lovers
+The Lurifax
+The MCG
+The Magic
+The Maiden
+The Marco
+The Maskara
+The Matth
+The Mediator
+The Midlands
+The Mks
+The Mouldy
+The Mr Spec
+The Murder21
+The Muscles
+The Nexian
+The Nicollai
+The Noob
+The OSU
+The Office
+The Old Fonz
+The Old Kite
+The Old Mike
+The Omun
+The Onceler
+The Only Sin
+The OnlyPyro
+The Paladin
+The Peak Pro
+The Pet Farm
+The Playoffs
+The Pocket
+The Proline
+The Prophet
+The Ptolemy
+The Pwnes
+The Qwinner
+The Real Cat
+The Sabre5
+The Sarge
+The Schnopps
+The Sea Bee
+The Seahawks
+The Serval
+The Shy Guy
+The Shy Oni
+The Sly Fox
+The Snail34
+The Snapback
+The Steele
+The Steward
+The Stranger
+The Surveyor
+The Tardis
+The Thanator
+The Tils
+The Tiny Dog
+The Trap
+The Triple T
+The Use
+The Victory
+The W0rst
+The Wael
+The Warp
+The Wraith
+The Wupp
+The keho
+The thin 1ce
+The-Wind-Up
The0G
The1
+The1_2watch
+The1stmage
+The3dge
The3rdOlive
+The3rdTrike
The888
TheAdzz
TheAirIsDead
TheAlbatross
TheAllSorts
TheApe
+TheArcheType
+TheArchthief
+TheAsic
TheAssailant
+TheAusSpade
TheAvenger56
TheAvgJon
TheAzimuth
TheBandit777
TheBassIsRaw
+TheBazaBrown
TheBean
TheBearJ3w
+TheBeltMan
TheBezal
TheBidness
+TheBigShield
TheBigZofNYC
+TheBlackest
TheBlindy
+TheBlueShore
+TheBlueWrath
TheBoltzy
TheBoomfire
TheBopp10
TheBotReaper
TheBowJob
+TheBrain
+TheBranFlake
TheBrundone
TheBudWiser
+TheC0W
+TheCanada
TheCapist
+TheCarrotMan
TheCaseAce
TheCheezywiz
+TheChosnOnes
TheCokeFiend
TheCollected
TheCondemned
TheCorrupt
TheCuckening
+TheCzarnian
TheDaedalus
TheDalek
TheDampBush
+TheDangs
TheDankShow
TheDawg
+TheDayWalker
TheDayman
TheDeadMann
+TheDeadTeam
TheDeen
TheDisgusten
TheDog
+TheDoubee
TheDreamKing
TheDrips
+TheDry
TheDuckChris
+TheDuckDaddy
TheDucksNut
TheDuud
TheDyr61
+TheEricShaun
TheEstonian
+TheEvaElfie
TheEvlManRay
+TheExtracted
+TheF0rg0ten9
TheF1ash
TheFabDabber
+TheFallen1x
TheFeOdyssey
+TheFeres
TheFizzCC
TheFlammers
TheFlopyTaco
@@ -22916,51 +47492,78 @@ TheFunkyHomo
TheFunnyLove
TheFuzzball
TheGaGee
+TheGaryy
TheGiggleMan
TheGlawce
+TheGodFathxr
TheGodGuthix
TheGodfather
+TheGoodLife
TheGoonie
TheGordinfla
+TheGoryGlory
TheGr8Jimbo
TheGrainGoat
TheGreat
+TheGreat One
TheGreatThor
TheGreenBowl
TheGugguru
+TheGurrag
+TheHabduL
TheHackedOne
+TheHapa
TheHartstopr
TheHerbSack
+TheHuffDaddy
+TheHugLife
TheHungOne
TheHungRoid
+TheHydra69
TheInilator
+TheIronBarra
+TheIronBoy
TheIronDolan
+TheIronHoser
+TheIronMouse
TheIronTwist
TheIronVault
TheIronZoid
TheIsamaru
+TheJele
TheJosephe
+TheKappaCorn
TheKhun
TheKid
TheKillerB
TheKnight
TheKnightman
TheKolector
+TheKop
+TheLaggyDad
TheLampKing
+TheLastTheef
+TheLaxBrah
TheLazyNinja
TheLewhole
TheLionn
TheMaadKing
TheMachine39
TheMadWolf
+TheMainZeus
TheMamba
TheManInBush
+TheManJordo
TheManatee
+TheMaskie
TheMavrick
TheMaxPvMer
TheMayne
+TheMetaNow
TheMikkel
+TheMorloc8
TheMuel
+TheMuffin8or
TheMursk
TheNegative
TheNerve
@@ -22968,47 +47571,80 @@ TheNewLue220
TheNewMonkey
TheNexu
TheNinjaH0b0
+TheNoPurp
+TheNooby
+TheOG Logo
TheOGGrimm
+TheOGslacker
+TheOSRSWiki
+TheOllieBoi
TheOlmlet
+TheOne772
TheOneMatrix
TheOperative
ThePTWY
+ThePaceAce
ThePardos
+ThePariah
+ThePerfect G
+ThePolak
+ThePraetors
ThePrenti
+ThePrestiege
+ThePrideS1n
TheProfess0r
TheProvider
ThePureRingR
TheRanger
+TheRealBean
TheRealBew
TheRealDest
TheRealIdean
TheRealKanye
+TheRealKush
+TheRealKyle
TheRealKyle9
TheRealMidus
TheRealShway
TheRedNas
+TheRedRaider
TheRevRip
+TheRewriter
+TheRobin129
TheRoulette
TheRsBug
TheSaggyOne
+TheSaltyYew
+TheSandFoxx
TheShadyMile
TheShyFn
TheSimpSonny
TheSinner
TheSkippyBoy
+TheSlim1
+TheSneakyOne
TheSoggyOne
+TheSoloHades
+TheSpaceSaus
TheStonedElf
+TheSwumpMan
+TheTKsmith
TheTankProd
TheTerug
+TheTimeLord
TheTinPeach
+TheToyMaster
TheTree7
+TheTrue Goku
TheTrueNorth
+TheTrueOOGA
TheTrueSatan
TheTruthOnly
TheUnbeloved
TheUndified
TheUnluckyIM
TheValuable
+TheVerve
TheVeryBest
TheVnom
TheVoodoo2
@@ -23016,313 +47652,603 @@ TheW1tcher
TheWerebear
TheWetDuck
TheWhlteWolf
+TheWiseLoner
TheWitcherr
TheWizaad
TheWrongName
+TheYahtzee
TheYak
+TheYimYim
TheYugo
TheZoracks
TheZurvan
The_Dave666
The_Dunster
+The_Eoline
The_Hillboy
The_Jimmy
+The_Krang
+The_Man146
+The_Sturg
The_Zob
+Thea1a
Theatres
Thebano
+Thebig76
Thecascade
+TheclawMVP
Theconn
Thedriesj11
+Thedyolf
+Thee Khed
TheeMohican
TheeSkill
+Theel
Theem
Theeweaver
Theez
+Theezak
Thefunto
Theguymann
Thejessman1
ThelAvent
+Thelastmane
+Thelegend4uk
+Thelmacat342
Thelvereas
ThemanwhoisB
Themenchman
Thengalin
Theoatrix
+Theodensa
+Theodora605
Theohhhh
Theoklitos
Theoneburger
Theophobia
+Theorized
+Theory
Theoryist
+Thepawgchamp
Thepiefour
+Theracords
+Theralion
+TherapyGroup
+Theravasa
ThereTheyre
Therealhook
Therens1
+Therer
Thermynator
Theruler333
Thery
Thesaurusus
+These
+Thesonicking
+Thespok
Theunfrgiven
Thew
Thewoodle
They
TheyTukMyJob
+TheyXciteMe
+Theynika
+Thgll
Thibaut
Thibi
+Thic Glizzy
ThicBudget
+ThicCreature
ThicKoontang
Thicc
+Thicc Aku
+Thicc Budget
+Thicc Fil A
+Thicc Flair
+Thicc Momma
ThiccBird91
+ThiccCowboys
ThiccDaddyXL
ThiccDonut
+ThiccQueen
ThiccSkips
ThiccZwans
Thiccapedia
Thick
+Thick Cut
+Thick Nick
+Thick Red
+Thick nun
Thick2g
Thick4Head
+ThickGlute
+ThickIronBum
+ThickMike
ThickSenpai
ThickSpak
+Thickenei
Thickest
Thickkmommy
Thics
+Thiery
Thies
Thiesen
+Thievette
ThievinKills
ThievingL
+Thievs
Thigh
Thighhighs
ThiiComplex
+Thiibaut
Thillam
+ThinBlueL1ne
ThinPeepoSad
ThinkB4Hit
Thinkoclet
+Thinxo
Third
+Third-ages
+ThirdAge
ThirdAgeBoss
ThirdEye
Thirdborn
+Thirsty 4PvM
+Thirtys
This
+This Gimp
+This Leo
+This Schmuck
ThisAint
+ThisAint-Wow
ThisAintSkil
+ThisGuySkip
ThisPieIsDry
Thisious
+Thissa
Thlrd
Thoakline
+Thocasu
Thogdad
+Thogidar
+Thohon
Thom
Thomarse
Thomas
+Thomas Juice
ThomasticIM
+Thomastic_1
+Thombstone
+ThomiusTeGr8
Thommetje
+Thommyy
Thonack
Thonq
Thoomin
Thor
Thoradin
+Thoraldd
ThoraxPurple
Thordej
+Thorgal
+Thorgoth1
Thorkar96
+Thorn
Thornet
Thornnforge
+ThorntonM
Thorvesta
+Thot Jadiels
Thotalopolis
Thoth
+Thotmince48
Thotscape
+Thoughting
+Thoughtseize
Thounde
Thoupeppi
Thrasmion
+Thrax OS
+Three Twelve
ThreeOneNine
+Threemars
+Threesunders
+Threkeld
Threno
ThreshDaOg
Thrihyrne
Thrilbo
+Thrilerrr
Thrillhousee
+Thrisel
Thrivaldi
Thrlll
Throat
+ThrobGodTod
Throbba
Throbbing
Thrombi
+Thromur
+Throupled
+ThrownFury
+Throxx
Thru
+Thru ur poo
ThruDaStorm
Thrust
Thrustaxe1
Thueh
Thug
+Thug bone4
Thugbug808
Thugg
+Thugge
ThugsBunny
+Thugsbunny73
Thulean
Thumb
ThumbBwana
+Thumper
+Thunadaja
+ThundaBear
ThundaJunk
+Thundac
Thundahcatz4
Thunder Dog
Thunder Gate
+Thunder Nerd
+Thunder Zeus
ThunderBirdz
ThunderRolts
+Thunderbo1tz
Thundercat
Thunderite
+Thunderoxgod
Thunderpb28
+Thunderst0rm
+Thundito
+Thur go
Thurbs
Thurison
Thusly
Thutmose
+Thuvian
Thuzd
Thve1ivan
+Thwart
+Thy Odama
+Thy Victory
ThyIronGiant
+ThyLegend
ThyVonR
+Thybo
Thyclops
Thyhead
+Thyming
+Thyreus
+Thys
Thysa
Thyymabotnus
+Ti Blade
TiXN
+Tia
Tiaan
Tiaeuth
+Tiafoe
+TiagoM
Tiak
+Tian Guo
+Tianzi
Tiazen
+Tibadis
Tibador
+Tibaul
+Tibbsyy
+Tiberium SvK
+Tiboot
+Tic Fart
+TicImperfect
TicTacSensei
Ticano
Tice300
Ticina
Tick
+Tick Behind
+Tick Ma Nip
+Tick Manips
TickAteUrMom
TickTickRun
Tickable
+TicketGoblin
Tickets
+Tickflow
+TicklMySickl
TickleBerry
+TicklesIM
Tickmark
Ticks
+Ticks missed
Tict
Tictacdingus
+Tid Eez
Tidders
Tiddy
+Tiddy Winks
TiddyLactate
Tidev
Tidy
Tiedemanns
+Tiedustelija
+Tiegra
Tielemans
Tier
+Tier 05
Tierney
+Tierra Bella
+Tiesto
+TifaL123
Tiffs
Tiftanlar
+Tig Bittty
TigTheWelder
+Tigas TT
Tiger
+Tiger Tea
+Tiger Trap
+TigerYouDied
+Tigerheart07
Tigerheart09
Tigerlady
Tigerlady203
Tigerr
Tigersrule23
Tigerwolf
+TiggoGnomes
+Tiggrat
+Tighe
Tight
+Tight Helmet
+TightSpace42
+Tigor
+TigreRosso
Tigrio
+Tigy
+Tiiimon
+Tiimari
Tiistai
Tiistia
+Tiit Hepa
Tiivo
Tijmen
Tijn040
Tijs
Tijskid
Tijuude
+Tiki Haha
TikiTyrant
Tikk1s
+Tikka
+Tikkix
Tikru
Tiktok
+Tikwah
+Tila
Tilburg
+Tild0
+Tilfreds
+Tilidin
+Till Bored
Tillah
+TillerPloww
Tillykke
Tilted
+Tilted I Am
+TiltedGoblin
+TiltedIM
Tilur
+Tim Pedwar
+Tim Puri
+Tim The Jedi
+Tim bo Slice
+Tim-O-thy
+TimShutDown
TimSkilling
+TimTheLegend
+Timaaaay
+Timaaay
+TimbaWimba
Timbeettius
Timber
+Timbertail
Timbito
Timboball
+Timbuktu25
+Timbulz
Time
+Time For Me
+Time Leap
+Time Voyager
Time2Lose1
TimeFlies
+TimeIsStrnge
TimeLion
TimeMuffins
+TimeSink2000
+TimeSpan
TimeZebra
+TimedxBeast
Timespacing
Timetokill19
Timew8ster
Timex
+Timex 07
Timka
Timkempp
Timm
Timmay111865
Timmeh
Timmies
+Timmuuhh
Timmy
+Timmy Jim
+Timmy Tbow
+Timmy Tiime
TimmysCoffee
TimnI2
+Timonkey
Timos
TimosTime
+Timotej
Timsey
+Timzee
+TinFoil Joe
TinHongetech
+Tincoinco
Tincup
+Tindatinn
Tindell23
+Tinder lvl 1
TinderMatch
Tine
Tinfawn
TinfoiledHat
Tinfoilhat
+TingSumWong
TingleTingle
+TingleUwU
Tingot
+Tingsha
Tink
Tink200345
+Tinkelsia
+Tinmanone
+TinnMan
+Tinnitus
Tinsmith
+Tinted Rock
Tintti218
+Tinuvial
+Tinvicuna
Tiny
Tiny Bagel
+Tiny Buddha
+Tiny Bun
+Tiny Dck
+Tiny Feet
+Tiny Lego
+Tiny Secrets
+Tiny Teemo
+Tiny Triceps
TinyFnRick
+TinyIronDong
TinyLebowski
+TinyLes
+TinyTaro
TinyToasters
TinymafaRick
Tinypns
+Tinytiger17
Tinzo
+Tip Zee
+Tip of Dik
TipTheTank
+TipeF
Tipeeee
Tipit
+Tipoz
Tipper
+Tippin_toes
+Tips Iron
+Tips Touched
+Tipsy PvMer
TipsyBeard
+TiptopSundae
Tipu
Tiqu
+Tiques
TiramisuTart
+Tire Slayer
Tired
+Tired Hero
+Tired of IRL
TiredPidgeon
+Tirex
Tiring
TirmenaT
TironTula
Tironade
+Tirpz
+Tirsonek
Tisalia
Tisch
+Tism Tanner
+Tit Bow
TitMcghee
TitPoker
Titan
+Titan Luke
TitaniteSlab
+Titanium Mag
+Titas P
TitePoire
Title
+Title Fight
Titsferdayz
Tittsnbiches
+Tittyboi5
Titus
+Titus Furius
+Tivaaa
Tivinter
+Tizra
+Tizzcdn
+Tj Russo
+Tj Watt
+Tj0epert
+Tjaa
Tjabalabaaa
+Tjalo
Tjar
Tjarie
+Tjarles
Tjbakel
+Tjf12
+Tjob
TjockaBengt
+Tjs109
Tjuv
Tkit
Tksquad
Tktn
+TlCK LOST
+TlLLER
+TlLT
+TlME 2 QUlT
+TlNUS
+TlTANlC
Tliltocatl
TmSmT
Tman
Tmarvy
+Tmilllz
+Tmm
+Tmmm
Tmoe
Tmoe123
+Tmoneyyyy123
+Tmppa
+Tmtiger16
+Tnt Harder
+To Ashes
+To Be Sure
+ToAPlanker
+ToBeAgile
+ToLoNi
+ToMyTailFin
+ToNFisKrs07
ToTheRanch
+Toad Pond
+ToadKar TV
Toas20
Toast
ToastBTW
@@ -23335,125 +48261,239 @@ Toasterly
Toastie
Toasty
Toat
+Tob Braidy
+Tob Carvery
+Tob Marley
+TobOnMyCox
+TobSpoon69
+Tobak
+Tobbeloba
Tobias
TobiasFate
+Tobiasz
Toboogan3
Tobser
Toby
+Toby Raz3
+Toby1889
TobyMcCrier
+TobyRax
+TodWhispers
+Todays N00B
Toddlet
Toddo25
+Todt Thot
+Toe Biden
+Toe Crocs
+Toe Moss
+ToeRag
+Toedeloe
Toedels
+Toeh5
Toek
+Toekie
+Toeristje
+Toermalijn
+Toes B4 Bros
Toets
Toews
Toffenboi
Toffer_99
+Toffffu
+Toffoli
Tofs4pk
+Tofthagen
Tofu
+Tofu Python
+Tog
+Toge6343
+Togepi
+Togica
+Togo Mouri
+Tohni
Tohveli
Toilet
+Toilet Humor
ToiletBowlbb
+Toiletpaper9
Toimin
+Toiney
Toinzy
Toivo_43
Tojosodope
+Tok in
+Tok-xik-Hex
TokHaar
Tokah
Toke
+TokeSevere
Tokedaddy
Toker11
Tokin
+Tokin Ranarr
Tokin99
TokkHaar
Tokkie01
+Tokonu
+Tokoya
Tokoya11
+Toktz-ma-cox
Tokyo
+Tokyo Ghost
+Tokyo Prose
+Toldasor
+Tolhuis
ToljaSo
+Tolo Ar Nin
+Tolweg
+Tom Adamo
+Tom Cx
+Tom Decoene
Tom Fn Brady
+Tom Is Huge
+Tom Shanks
+Tom T
+Tom Vercetti
+Tom Waited
+Tom btw
+Tom from 561
+Tom is Sharp
+Tom o_0
+Tom vs Log
Tom9
TomAce
+TomFlinn7
TomHilRigour
TomMazilian
TomMerrilin
TomOfTheWest
TomTehCat
Toma
+TomaMvp
+Tomaatti169
Tomarti
Tomastor
TomatoAndEgg
+TomatoFarm19
TomatoTom9
Tomazon
+Tomb
+TombLooter
+Tomba
Tombalo
Tombat
Tombazv2
Tombea09
+Tombing
Tomdabom
+Tomdoc14
+Tome
TomehhG
TomiL
Tomiee
Tomik85
+Tomlyn
Tomm
TommieSalami
+Tommm
Tommmo
Tommy
+Tommy 901
+Tommy J C
Tommy2Tick
TommyGunn204
TommyJay
TommyTalapia
Tommyhawk
Tommyyy
+Tomn
Tomo
Tomori
Tomorrowlxnd
Tompi
+Tompp1
Tompsi
Toms
+Toms PvM
Tomsdk
Tomson177
Tomtastrophe
Tomtom032
Tomukas
+Tomvdh
Tomxi
+TomzodoubleO
+Tond3
TondeK18
Tone
+Toneez
Tonester03
Tonfa
Tong
Tongo
+Tongue Baths
Toni
Tonicto
+Tonk A Wiz
Tonka742
+Tonkade
TonkatsuLife
+TonkerEx
Tonnie
Tony
+Tony D
+Tony Gwynn
+Tony P
+Tony Soap
+Tony Soprano
+Tony Tuna
Tony23
TonyCaawk
Tonyde
Tonydidles
Tonyhood
Tonzaww
+Too Original
TooBasic
TooBigDad
+TooManyCooks
+TooManyKinks
TooMuchIan
+TooMuchSauce
TooMuchTuna
TooReal
TooShredded
+TooWhite4You
Toobias
+ToogaTank
Tooheys
Tookkul
+TookyDaWooky
+Tool
Toolbox
+Tools1977
ToomBooii
Toomas
+Toomi
Toonic
Tooodley
Tooomo
Tooq
+Tooqan
Toortles
Toostie
Tooterz
+ToothhurtyPM
Tooves
+Top Gear
+Top Glock
Top Milk
+Top Monents
+Top Mong
+Top Trends
+Top V1
+Top Vestain
+Top10
Top5Worst
TopGlitch
TopGunt
@@ -23463,34 +48503,58 @@ Topez
Topgolf
Topi
Topkeklethal
+Topkerel
Topman
Toppavenger
Topstad
TopsyTurve
+Tor Btw
+Tor Cool Guy
+TorBlueJays
+Torag Tony
Torags
+Torags The C
Torchbringer
+Torchfall
Torchiclover
Torchpix
+Tordenknold
Tordue
Toreador
Toreransu
+Torgonis
Tori
Torille
+Torille btw
Toris
Torkoal
+Torky Bow
+Torlux
+Torm
TormentingU
+Tormood
+Tornaddyne
+Tornado Kim
TornadoGang
TornadoShit
Torned
Tornjak
TornoDB
+Torok
Toronto
TorontoOVO
Torr3nHunt3r
Torra
+TorraTwo
+Torretto
+Torrfly
+Torrud
Torsinclair
Torso
+Torstol
+Torstol Todd
Tortanium
+Tortcher
Tortelini
Tortew
TortiIIa
@@ -23498,36 +48562,68 @@ TortillaChip
Torttunaama
TortugaBooga
Tortugas
+Tortuous
+Torture Iron
+Torva boy
Torvee
Torvesta
+Toseki
Tosetti
+Toshiba
+Tossin
Tostada
+Tot1
Total
+Total Lvl
Total Pede
+Total Spoof
+Total Vanity
+Total Zero
Totaldumm
Totaled3
Totalis
+Totallymad20
+Totalxq
+Totato
Tote
+Totemas
Totnum
+Tott
+Totti
+Tottie
Toucan
Toucann
+Touch My Wii
+Touch Tablet
+Touch Touch
TouchPinis
TouchedByXp
Touchkin
Touchmydig
Touchpad
+TougeAttack
Tough
Tounii
+Tour Guide
Tourino
Tournx72
Tousart
Tove
Towely
+Tower Guard
TowerOfGod
Towerbros
Town
+Town Square
+Towney Stark
+Towton II
Toxic
+Toxic Dice
Toxic Emre
+Toxic Joda
+Toxic Mfer
+Toxic Outlaw
+Toxic Waltz
Toxic017
Toxic125
ToxicBropipe
@@ -23535,12 +48631,22 @@ ToxicDroPipe
ToxicKenny
ToxicSimp
ToxicWaster
+Toxzeek
+Toy Chest
Toycutter
Toyger
Toyne
Toyocoma
ToysRusK1d
Toysalami
+TozzinSalads
+Tpc Chris
+Tpc Jimmy
+Tpc Ken
+Tqnks
+Tqrb
+Tr Farmer
+Tr hoca
Tr0gdor
Tr1ckyD1cky
Trabelco
@@ -23548,85 +48654,164 @@ Trac
Trace
Tracing
Trackpad
+Tracktix
Trackzor
+Tracto r
+Tractorjoe13
+Tracxy
Trad
Trade
+Trade Me 70k
+Trade Parade
+TradeForItem
TradeMeBro
TradeMeUWont
+Tradebarrier
Tradeophobia
Trae47
+Traenalai
+Trage Gast
Tragick
+Tragon33X
+Trail
+Trail Sodas
+Train Track
+Traincore
Trained Fish
Trainer
+Trainer Bad
Trainin
+TrainingDay
TrainingDays
+TrainingWill
+Trainor BTW
Trains
Traiths
+Trakiya
Traktori
Traktorman
Tralan
+Tralfamadori
Tramayne
Tramfix
Trample
+TranSfused
Trance
+Trance Heals
+Trance666
TranquilGod
+TranquilHaze
Tranquillia
Transfer
Transgressor
+Transpiler
Transpose
Tranziztance
Trap
+Trap Carrot
+Trap the Cat
+Trap-A-Holic
TrapGdReptar
TrapGood93
Trap_Capo
Trapking
+Trapking 8
+Trapping
Trapski
Trasclart
Trash
+Trash Pvmer
+TrashBlast
+TrashManJ0hn
+TrashServers
Trashu2
+Trashua
Trashy
Traumahh
Travee
Traveler
Travis
+Travis 42
+Travis on Rs
Travis473
TravisThott
Travish
Travor
TravviePatty
+Travy D Law
+Traxic
Traxxed
+Trayvon King
Trazaeth
+Trazez
+Trazza001
Trebluh
Trebyzond
+Tredderss
Tree
+Tree Form
+Tree Oils
+Tree43210
Tree50
TreeNut11
+TreeTopsFart
+TreeWeasel
+Treedemption
+Treehuggers
Treelo23
Treenut
Treinen
+Treio
Trejoracine
Trekhoar
+Treldinn
+Trem Bao Uai
+TremensInc
Tremorx00
+Tremzy
+Tren Culture
+Tren Hex
TrenbolonAce
+Trench Ben
Trendeon
+Trendiness
Trenl
Trennel7
Treno
Trensational
+Trentovitch
Trentt
Trepa
Trepador
Treps
Tresemmee
Trev
+Trev the dog
+Trevenant
Trevo
Trevor
+Trevor Died
+Trevor M
+Trewg
+Trews
Trey
+Trey is
Treygor
+Treyvor
+Trezler
+Trgx2
+Tri Flamingo
+Tri-P0LAR
Tri9py_J
TriBalanced
+TriFlea
Tribe
+Tribe Leader
+Tribe of 123
+Tribryd26
Trick
+Trick Blue
+Trick Statue
Trick-demon
TrickRoom
Trickiac
@@ -23636,11 +48821,15 @@ Trickster122
Tricomb
Trictagon1
Trictagon2
+Tricx
+Trid3nt
Trieuce
Triforce13
Trigamy
+TriggaTriggs
Triggadd
Triggahappy
+Trigger Me
TriggeredMot
Triggeredm3
Triggering
@@ -23650,22 +48839,44 @@ TrikiRiki
TrikyCutworm
Trikzed
Tril
+Trilipe
Trilligy
+Trillogy
Trillotani
+Trilogies
TrilogyXO
Trim
+Trim Jr
+TrimmedGrimm
Trimmedguy
TrinitySauce
Trinix
Trio
+Trio MF
Trip
+Trip Machine
+Trip Masta
+TripEatIRL
+TripJaw
+TripSquad
Tripachu
+Tripae
Triple
+Triple Deuce
+Triple Dex
+Triple U
TripleBeans
+TripleHyphen
+TripleNeck
Triplet
+Tripod Neb
TripodDog
+Trippie Damo
Trippinsac
+TrippleMarty
Trippy
+Trippy Mind
+Trippy Troll
TrippyReefer
TrippyScapee
TrippyTony
@@ -23673,78 +48884,155 @@ Trips
TripssAcid
TrisomyMumky
Triss123456
+Trissee
TristV1
Tristann
+Trito
+Triton Blue
+TritonSaber
Triumph
Trivi Beast
Trivit
Trivium
Trixcet
Trizak
+Trizepz
Trldude7
TrocSan
+Trocko4
TrodOnLego
Troetelbeer
Trogbite
+Trojan Steed
Trok
+Trolerage
+Troll Chad
+Troll464
TrolleVV
TrolletTruls
+Trollevv
+Trollface
+Trollheimusk
+Trolli
TrollinPony
TrollinTony
+Trollinguy
+Trollzzy
Trololosaur
Tromal
+Trombalski
+TronixxIM
+Tronkshark
Tronse
+TroopIronman
Trooperke
Tropec
TrophieTyler
Tropical97
+Tropicaux
+Tropidelics
Tropsic
Troskals
Tross
Trottero
Trottington
+Troulis180
Trounced
TrousrMonstr
+Trout Wallet
+Trovam
+Trovo
+Troxicus
+Troy Buckle
+TroyPolamalu
+Trreezz
Trrrpfosdss
+Tru3Iron
+Trublians
Truce
TruckTruck
+TruckYacht
+TruckerLiam
+TruckerTuck
TruckersLife
+Trucki
+Truckstop0
True
+True Flex
+True Joker
+True Knight
+True Owl
+True Repent
+True Tones
TrueBadApple
TrueBank
+TrueNorth95
+TrueSatan
TrueTech
TrueTeller77
+TrueYoshi
Truegreed
Trueplaya
+Truers
Trueth
Trulieve
Truly
+Truly Lifted
+Truly Loving
TrulyForever
+Trump
TrumpCard
TrumpSuxAss
Trumpet
+Trundholm
Trunker
Truno
Trunsa
+Trusejageren
TrustIssues
+TrustNoOne
Trusted
Trustifarian
+Trustin
+TrustyThrust
+Truth Hurtts
+Truth Seekir
+Truxy One
+TrveKvlt
+Try Casual
+Try Die Cry
+Try Hard Jr
Try2IronMan
TryAltF4
+TryCBD
TryHard
+TryHard DBag
TryHardi
Tryactin
+TrygveLegend
Tryh4rder
Tryhard
+TryinNot2Die
+Trym
+TrymeTrick
+Tryna Max
+Tryna match
+Tryndaflex77
Trynottodie2
Trypophobia
Tryptamind
Tryptopane
Tryuumph
+Trzaskowski
+Ts Danne
+Ts Me
+TsMaxed
Tsakahele
Tsar
+Tsar Douglas
Tsarina
Tschinelas
+Tshotz
Tsiquli
Tsitika
Tsjok
@@ -23758,27 +49046,42 @@ Tsudo
TsukasaS
TsukiAkuma
Tsukihi
+TsukikoBaka
Tsukiya
Tsuku
+Tsuku yomi
Tsukuyomi
Tsumikitty
+Tsumoso
+Tsurubebi
Tsyphoid
Ttffdd
Ttoz
TuNxZbs
Tubbless
+Tubbzzy
+Tube Dood021
Tubmasta95
+Tubs
Tubz
Tuca
+Tucker Jeb
Tuckerajf
+TudoLaDentro
Tuerro
Tuexo
Tufan
Tuffa
Tufs
+TugBoatWilly
+TugMeTwice
+TugMyCox
+Tuga9
Tugboat
Tugboats
+Tuii
Tuisku
+Tuittu
Tukeldaja
Tukkairti
Tulf
@@ -23786,20 +49089,37 @@ Tulip
Tulipssonmyd
Tully03
Tulppu
+Tumbdownlog
TumbleDore
+TumblingSand
+Tumeken Tay
+TumekenToday
+Tumma Paahto
+Tumms
+Tumnus
Tumppe
Tuna
+Tuna Juice
+Tuna Shuffle
Tunaking420
+Tunasafarii
Tunda
TunderBog
Tundra
+Tunez
Tung
+Tung Fu Rue
Tungsten
+TungstenGyro
+Tunguska
+Tunkky
Tunnellord
Tunppii
Tunsberg
Tuntun
+Tuoppi1230
TupacShaakur
+Tupackid
Tupakki
Tupeli
Tuperrovski
@@ -23807,97 +49127,188 @@ Tupla Olut
Tuplaa
Tupoopsa
Tuppu
+Tuppu hoitaa
+Tuppuu
+Turambarr
TurangaNui
+Turb0uu
Turbanator
Turbie
+Turbin
Turbo
+Turbo IM
+Turbo Junkie
+Turbo Toes
+Turbo Zero
TurboMilf
+TurboSoak
+TurboTez
TurboWet
Turbokjepp
+Turbotymer
+TurdFlicker
TurdFurgeson
Tured
Turha
Turiak
+Turjilin
+Turk Monsta
Turk3H
+Turk3HH
TurkBird
+TurkeyPro
+Turkije
+Turkish One
Turkish3agle
Turkled
Turkos06
Turks
Turn
+Turn It Left
TurnMagic
+Turnalar
Turner Coach
Turnii
Turnt
+Turqish
+Turqy
Turri
Turrner
Turrox
Turskaa
Turso
+Turssuttaja
+Turtelloo
Turtle
+Turtle Rak
+Turtle s
Turtle7
+TurtleCoddlr
TurtleWurdle
Turtlebutt
+Turtledog
Turtleliest
+TurtlesClimb
TurtlesRdank
Turtleso3o
+Turts
+Turuii
+Turvasana
Tusc
+Tushy Taker
+Tusk
Tusondude25
Tusseladd92
+Tustea Kossu
+Tutorial
Tutoroo
+Tutta
Tutter
TuttiFruttii
+Tuttimango
Tuttimelon
Tuuri
+Tuuri haukka
Tuvisitt
+Tux
Tuxy
Tuya
Tuzle
+Tvanderlaan1
+Tvb Cx
+Tw0Pack
Tw1ZzT
+Tw1nsPurr
+Tw1nz
+Tw1st3d_B0W
Tw1stedBow
TwTv
Twald10
Twas
+Twas Xmas
+Twashua
Twaste
+Tweaky
+Twee Barkie
Tweeder
Tweek
+Tweekzor
Tweetart
Tweeznap
+Tweezr
TweezyShadow
Twelvyy
+Twenie Wan
Twerk
+Twerk 132
Twet
Twice
+Twice Flo
TwickerTweet
Twiddle
+Twiddle Twix
+Twidgets
+Twiested
+Twift
Twigbert
+Twigglet
TwiggyC
Twigler
Twigster
Twiisted
Twilight2326
TwilightPony
+Twilly Spree
+Twillz
Twin
+Twin Fists
+Twin Kinz
+Twin Peaks
Twinflip
+Twinick
Twink
+Twink Ripper
Twinkle
+Twinkle Park
+Twinklekat
Twinr0va
Twins
+Twist2K
Twist3d
Twist3dData
Twisted
+Twisted Boog
+Twisted Bung
+Twisted Cook
+Twisted Echo
+Twisted Jam
+Twisted Matt
+Twisted Titt
+Twisted cat
+Twisted garg
TwistedAegis
+TwistedBeer
+TwistedBerns
+TwistedBowlz
TwistedBr0
TwistedCybrg
TwistedGuard
TwistedHeart
+TwistedLike
TwistedOffer
TwistedWally
Twisted_Ry
+Twisted_newf
TwistedxAura
+Twister Nips
+Twister XIII
Twistertjeee
+Twistie
TwistsedT
Twitch
+Twitch Fear
+Twitch simp
+Twitch507
TwitchFear
TwitchSeljan
Twitchen004
@@ -23905,220 +49316,491 @@ Twitchin
TwixTM
Twizler74
Twizzlers88
+Twnkles
Twntythree23
+Two Elites
+Two Fears
+Two Ounces
+Two2SixToo
TwoBeerBuzz
TwoDigitJish
TwoDogs
TwoInTheSink
TwoLegedDog
TwoShue
+TwoTwentyTwo
+Twoconch
TwojaStara
+Twoy
Twpz
Twstd
Twum
+Tx2
+Tx3 Poseidon
+TxNock
+Txbor
Txfr
Txga
+Txh
+Txlon
+Txture
+TxunaTuna
Txyus
+Ty
+Ty God
+Ty Sit Idiot
+Ty bears
Ty1er
Ty4F
+TyDyPooFingr
+TySkidmore23
Tybear575
Tyberium
+Tybones
Tycen
+Tycens
Tydigidy
Tydollatree
TyeMeUp
Tyelca
Tyepo
+Tyfr
Tyfus
+Tyfus Bende
+Tyfus Mug
Tyfuslija
Tyga
+Tygr
+Tyhger
Tyin
Tyixx
+Tyjes1
Tykaman
+Tyl r
Tyler
+Tyler Razz
+Tyler Stone
Tyler051095
+Tyler4rs
+TylerGBR
+TylerMike
Tylerknight3
Tylerton
+TylerxBandit
+Tylo54
Tylooor
Tylz2
Tym8
+Tyney
+Tyngre
Tyom
Tyontaja
+TypOneg4tive
Typhose
Typical
Typisch
+Typto
+Typtooka
+Tyq
+Tyr 24
+Tyr Ara
Tyra
Tyrael
+Tyrael OG
Tyran88bid
+Tyraniana
Tyranids
TyrannicaI
Tyrants
Tyrep
+Tyrex
Tyro
Tyrus
Tysh
Tyskie
+Tyskie38
Tyskn
Tysn
+Tyson11
Tysonn
Tyst
+Tysterisk
+Tytastic
Tythle
+Tytto
Tywonia
+Tz-Kek-Twang
Tz-Ket-Kush
TzCal
TzCok
+TzCok-Hard
TzDeez
+TzDeez-Nuts
TzHaar
+TzHaar Meej
+TzHaar-Doug
TzJal
TzKal
+TzKal Majora
+TzKal-AszZuk
+TzKal-Cumsok
+TzKal-Gio
+TzKal-Mike
+TzKal-Thad
+TzKal-Zuky
TzKalFatkok
TzKalSuk
TzKarl
+TzSuk-Dis2
TzTok
+TzTok Chris
TzTok-1gBud
+TzTok-Fart
+TzTok-Flame
+TzTok-Izzy
+TzTok-Jaffa
+TzTok-Jahd
TzTok-Jeffy
TzTok-Joka
+TzTok-Kekw
+TzTok-KetKok
TzTok-Ladz
+TzTokTitties
Tzek
+Tzhaar Bower
+TzhaarThicc
+Tzhaar_PvP
Tzharzh
+Tziis
Tzikit
+Tzkal Edgar
+Tzkal Tygo
+Tzkal-Reborn
+Tzok-GigaKok
Tzoski
+Tztok Shaz
Tztok-Met-Al
+Tzuyuwu
+U A E
+U A V Online
U Ded Boi
+U Mirin Brah
U N X
+U R Lame
+U Tele Nub
+U W8
+U n I f Y
+U nknown
+U0Q
U0sunpeh
+U3
+U4
+U71Q
+UAWMAN
UB02
+UBWare
UBaKr
UConn
UENDELIG
+UFOTurtle
UFOs
+UG Juppa
UGLYMONKEY58
UGLYS
UGam3zOS
+UI GOKUU
+UI UC
+UIM BUTT3RS
+UIM Brah
+UIM Burni
+UIM Chayula
+UIM Illusive
+UIM Liar
+UIM Lobotomy
+UIM Log
+UIM Loki
+UIM Nathanjb
+UIM Ori
+UIM Paperbag
UIM Pepper
+UIM Pidbull
+UIM Shen
+UIM Shrift
+UIM Sorrows
+UIM Spongie
+UIM Stephan
UIM Thor
+UIM Vas
+UIM Warriorh
+UIM Wedey
+UIM Yoga
+UIM Zoldyck
+UIM whozan
+UIM7
+UIMBerg
+UIMaqtpai
+UIMatti
+UIMpostor
+UIPanda
+UIdahoKush
+UIspice
+UKB0b449
UKnowItsB
+UL7RA
+ULF Tagger
ULTMA
ULTRA
+UN-FAZED
UNBIQUOUS
UNC0RN
UNCEL
UNCLE
+UNCLE LEET
+UNCLESAMY
+UNDEAD EXO
+UNDERURBED4
UNEX1ST
UNH0IY
UNLOADED999
+UPDOGS
+UPSdeliveree
+UQV
+UR 0 HP LMAO
+URA Noob
URAMESHl
URSS
+US Postal
+USA Tyler
+USA USA USA
+USA is Dev1l
USAF
USAO
USBthe2th
USMARINEHYDE
+USNavyOver70
USSpaceForce
USTreasury
+USirHaveLost
USirHaveWon
+UTT
+UWCB
+UWF
+UWUSTELIJA
+UZY VS JAD
Ualt
+Uamee
Ubar
Ubaru
Uber
Uber Logan
+Uber Yeats
Uberamazing
+Ubersmind
+Ubicorn
+Ubu
+Uccino
Uchiwa
+Uchr
Udacity
+Uderp
Udhariol2
Udingus
+Ufda
+Uffe Persson
UgliestIncel
Ugly
+Ugly Hipster
+UglyFishArm
Uglybeetle27
Uglyyo93
UgranDag
+Ugursuz IT
Uh-0h
Uhbove
UhhhBoneless
+Uhhhh Wut
+Uhm
Uhscended
+Uidi One
+Uim Beyonce
+Uim IRL also
+Uim Zuko
UimSian
+Uimakoulu
+Uk Bristol
+Uki Kukkamaa
+Uki Skillz
Ukko
+Ukko-Pekka
+Ukkonenn
+Uknow Yunho
UknowPotter
Ukonvasara
+Ulappa
+Ulibarri
+Ulik madiq
+Ulillillia
Uliss
Ulizius
+Ullerton
UltDrewes
+UltRise
Ultebor
+Ulthane120
Ultima
+Ultimat3ly
Ultimate
+Ultimate Low
+UltimateH0bo
UltimateSami
+UltimateWare
+UltimateZe
Ultist
Ultistic
+Ultorman
Ultra
+Ultra Miami
+Ultra Primal
+Ultra Sloth
+Ultra Space
+Ultra Teuz
+UltraGOOP
UltraJack
UltrasTomi
+Ulvhilde
Ulyanyx
UmUUmuUmU
+Umarra
Umbr
+Umbrah
Umea
Umek
Umiland
+Ummfufu
+Ummz
+Un Dutchable
+Un M-U-T-3-D
+Un puma
+Un-Expected
UnDutchable
+UnGoof
UnHoLyxMaTTy
+UnOrderly
+UnRuleD
+UnTaMed X
+Una999
Unacceptab1e
+Unaclogger
+Unaided
Unass1sted
Unassisted
Unavailable
Unbacked
+Unbann me
Unbiased
+UnboundLeaf
Unbreakable
Unc1e
+UncJo
Uncaged1776
UncagedOne
Uncandled
Uncel
+Uncel Ben
+Unchunk Man
Uncle
+Uncle Exci
+Uncle Julien
+Uncle Rocho
+Uncle Solo
+Uncle Somnus
+Uncle THC
+Uncle Trippy
+UncleBigBob1
+UncleCuckle
UncleDaddiii
+UncleGuy
UncleSlappy1
+Unclear
+Unclesam137
Uncode
UncomfyPants
Uncommon
Uncooker
+Uncool Gary
+Uncr3at1ve
Uncut
Uncy Duncy
Und3r0ath
Undead
UndeadElk333
+UndeadYenny
Undeadd
Undefeated
+Undelivered
Undeniable
Under
UnderExiled
+Underaged
Undercatt
Underlogged
Underoos
+Underrs
+Understars
Understated
Underverse
Undine
Undoubtful
+Undra
+UndrgrndSalt
Undulaatti94
Unemati02
+Unemployed
Unequalized
Uneven
+Uneven Mango
+Unexposed
Unfair
Unfearful
+Unfergetable
+Unfi
+Unfollowing
Unfriended
+Unfunno
+Ung
Ungolianty
Unhappy
+Unhapytuna
Unhealthy
UnhingedE
Unho
+Unholy Bains
+Unholy Cult
UnholyAbyss
Unholybucket
+Uni Mike
+UniQ
+Unicat
Unicorn
Unids
Unii
+Unik
+Unimaginary
+Unimander
Unintended
+Union Dixie
+Uniqlorn
Unique
+Unique Am I
Unit
+Unit Tests
United
+UnitedLeeds
Uniteds
+Unity 3D
Universe
Unkh
+UnkindPastry
UnkindledTwo
Unknown
UnknownBeing
@@ -24127,158 +49809,353 @@ UnknownValue
Unknownchuck
UnkoPlayer
Unkoly
+Unkownkiller
+Unlash
Unlds
+UnlimitedHC
+Unlit Sky
+Unlock Death
+Unluckerdile
Unluckers
Unlucky
+Unlucky Jord
+Unlucky lmp
+UnluckyNGay
+Unlugy
+Unluigi
Unmasked
Unmaxed
Unmerkable
Unmoist
Unnerving
Unohdettu2
+Unomia
+UnorthodoxGF
Unorthodoxfo
+Unown397
Unprofitable
+Unread
+UnrealGecko
+Unrecord
+Unreliab1e
Unrot
Unruliest
Unsafest
Unsainted
+Unsavior
Unscuff
+Unscythed
Unseen
+Unshaven Cat
+UnstopFork
Unstrung
+Unsubscribed
Unsung
Untameable
+Unthinkable
Until
+Until Dawn
+UntrimCraft
Untrimmed
+Unus Divinus
+Unv
+Unwiii
Unzkiboi
+Uoziz
+Uozu
+Up N Ur Mom
+Up ya mom jr
+UpBad
+UpNorthCha
UpRoaRs
UpThaSaints
Upeo
+Upi
Uploading
Upluk
+Upper Four
+Uppercuts
+Uppotukki
Upriser
Uprising
Uproot
Upsi
+Upthe1rons
Uptime
+Ur Exp 2 Me
+Ur Obsession
+Ur a baish
UrASalmon
UrBabyzDaddy
+UrBoyBilbo
+UrDadsLov3r
UrJustXpToMe
UrMomLvedIt
UrNansMan
UrPureSucks
UrScr3wed
+UrSuchaShita
+UrWifeLuvzMe
+UrYe
UrZoggy
+Ura Juanker
+Uragaan Dude
Urakas
Urakkapallo
+Urallia
+Uran ium
Uranus
UrbanMerza
Urbdayy
+Urbn
Urdead
Urea
Urek
+Urekzera
+Urfe
+Urheiluiatka
Urheilujatka
+UricOddball
Urkchar
+Urked
Urkerhard
Urock16
+Uross
+Urotsuki
+Urpokarhu
+Urri
+Urs
+Ursa
UrsaOmega
+Urskog
Urthron
+Uru p
+UsainBloat
+Usb Doe Tin
+Usb Flies
+Use
+Use Tongue
+Use2bHC
UseToBeGood
Useable
+Usecsythang
UsedApplePie
+UsedLube
+UsedRubbers
Useless
+Useless Main
User
+User 27
UserApproved
+Useranme
Usos
Ussin
+UsualAntZ
Usva
+Utahime
+Utahn
Utareita
Utca
Utini
Utis
Utsuwu
Utter
+Utter Pleb
Utvisa
Uunijutsku
Uunipelti
+Uuo
+Uus kaust
Uuti3
+UwU Leo
+UwU Noctis
+UwU Otaku
UxXwpasdiioa
+Uzin
Uzot
+UzrielBoi
Uzunar
+V 3
+V 9
+V A K U
+V A L O R
+V A M 0 S
+V A N D E R
+V Bros
+V E F
+V E H
+V G
+V GK
+V Gamemaniac
+V L A D Y
+V Lestat V
+V NL
+V Nichushkin
+V OO D 00
+V R I L
+V e c n a
+V endetta
+V ergetend
+V ezi
+V i 1 e
+V r o l ij k
+V the Victim
+V-43
+V-EuSoto
+V-SaTanjiro9
+V-Tek
+V-olRagnarok
V043
+V0F
+V0WZ
V0XA
+V1BER
V2int5
V3NQM
+V3XY
V3lnias
V3n3natis
+V3rtigo btw
+V43
V4SKI
V4sia
+V5C 2
+VAIDUOKL1S
+VALH0WLA
+VALHA LL A
VALK0
VALORANTJETT
+VAMPYRlC
+VANlLLA RUM
+VB TINNS
VB24PK
+VBoss
+VBsec
+VDB Niffooo
VDHG
VEDA
VEGANDIET
+VEN0M13
+VENNY MOCKER
+VERYBANANNA
+VET DMaZ
+VHS or DVD
+VIAL1
+VIE T
+VIII
+VIIVII
+VIKING0
+VILIONKKAA
VLEERMUlS
+VODKANATOR
+VODs
VOIVID
VOREVERAIONV
VORKl
+VOlDWAKER
+VP N1ck
+VPSxSam
VPixels
VRScotty
+VS0P
VS367
VUNDA
VVDance
VVJuul
+VVS1
VVStoner
+VVade
VVanderer
VVarden
+VVeems
+VVhite0ut
VViggle
+VVilson
+VVinni
+VVintage
VVona
VVoods
+VW Crafter
Va1ynx
Vaal
Vaalbara9
Vaalberg
Vaandah
+Vaca Preta
+Vacant V
Vache
+Vache Verte
Vad3
Vader
Vado
Vaealin
+Vaelleruen
+Vaelte Peter
Vafan
+Vafthruthnir
+VagAngler
+Vagabond
+Vagina Bad
+Vahagis
+Vahagn
Vahidil
Vahlyte
+Vahn
+Vaikuttava
Vailokas
Vain
Vainis
Vaishe
+Vaisu
VaitkiS
Vaizki
Vajengo
+Vakstu
+Val Rex
+Val3ntlne
+ValOnMyChest
Vala
Valadrak
+Valarfax
Valaron
Valdevon
Valdomiro B
+Valdyra
Valendale
+Valentijn
+ValentinaLuv
Valete
ValgeHunt09
ValheraUK
Valhk
+Valiant Nite
+Validde
Valiente
+Valienton
Valiiim
Valiralith
+Valirion
Valivill
Valknir
+Valkore
+ValkyraeS1MP
+Valkyrie btw
+Valkyrie xo
ValkyrieNora
Vall
Valliance
+Valliate
+Vallies
Vallk
Valluu
Valmar
+Valmora
Valo
+Valo Ville
Valo247
Valor
ValorantJohn
+Valorate
Valorisatie
Valorise
Valorpoint
@@ -24288,10 +50165,17 @@ Valverdi
Valxn
Valzar
Valzor
+Vam pire
Vamo
Vampeodia
+Vampire Bob
+Vampirehunt
Vampiress
Vampurr
+Vampyire
+Vampza
+Van Cold
+Van Hellsing
VanDarkhome
VanHeisma
Vanaic
@@ -24300,79 +50184,154 @@ Vandahl
Vandaine
Vandalize
Vandalized
+Vanderhek
+Vanderstorm
+Vandery
Vandetto
Vandmand
Vandorann
Vanek
+Vanek-26
Vang
Vanh0
VanhaKettu
Vanhal000
+Vanilla Best
+VanillaBum
VanillaDonut
+VanillaFlow
VanillaSwirl
+Vanillawaifu
Vanity
+Vanity Fair
+VanityNugett
+VanityRS
+Vanityyh
Vanja
+Vanja M
+Vanki
+Vannara
+Vanskid
Vanss
Vantiron
Vanupimphi
Vape99
VapeMonster
+VapeNGapeLLC
Vapeape1
Vaperan
+Vapid H
VapinTiger
+Vaping Cloud
+Vaporion
Vaporized
+Vapsjeeee
+Var Laslore
+Varamyr
+Vardorfister
+VardorvisSux
+Vardovish
+Varduka
+Varenagan
+Vargen96
+Vargo
+Vargrmoon
Variabulls
Varixed
+Varlanazz
+Varlot4
Varm
+Varm Kaffe
Varnilla
VarockVirgin
+Varonom
+Varpu
+Varradero
+Varro
Varrock
+Varrok Obama
Varroq
+VarrrokObama
Varsa
Varsii
+Varthon
Varulven
Varxas
Varz
+Vas R
Vasar23
Vasd
Vasdeffernce
Vaskapotti
Vaskekort
Vasquez
+Vassaa
+Vassago0111
+Vassal
+Vastrakal
+Vastuuvapaus
Vasuki
Vasyliev
+Vatenkeist
Vatix
Vauderus
Vaull
+Vault Hunter
+VaultTecs
+Vautumn
+Vaux
+Vava471
Vaveti
+VawnHeuf
Vaxx
+Vaxxil
+Vaxyr
VayQ
Vayda
Vaynon98
Vaz0r
+Vazier
Vazoo
+Vb Panther
Vbiqve
+VeKnow
+VeZuu
Veas
Vector
+Vedam
Veddunreal
Vedroulian
+Veecal
Veeena
+Veekkuu
+Veerpalu
Veersnof
Veetu76
Vefsn
+Vegabond
Vegakargdon
Vegan
+VeganFemboy
VeganVibes
Veganstho
Vegard
Vegas
+Vegas Gunman
+Vegas Mike
+Vege-Mauri
Vegeetta
Vegeta
+Vegeta MF
Vegetah
+Vegetas Veng
Vegetunks
+Veggie Mate
Veghan
+Vegitation
Vegito
+Vegito Meta
Vegolse
+Vehicle Tech
Vehms
Vehru
Vehtamin
@@ -24382,205 +50341,416 @@ Veinin
VeitiKKa
Vekie
Vekuuu
+Velaynx
Velbain
+Veld
Velegro
Velek
Velgreed
+Velhote
Veli
+Veli Iron
+Velikan
Veliki
+Velite12
+Velkennar
Velkija
Velli
Velmir
+Velociraptor
+Veloxrapt0r
Velreth
+Veltsi
+Velvetgunner
+Velvsy
+Velzun
+Vemba
Venado
Vendall2
+Vender
Venderik
Vendet27
+Vendum
+Venemies
Venenatis
+Venerate
Venereology
Venetsia
+Venfour
Veng
+Veng BTW
+Veng Me Not
+Veng Waster
VengDeezNutz
Venganza
+VengeMeDaddy
Vengeance013
VengeanceTR
Vengeancen
Vengeful
+Venizar
+Venkeltje
+Vennythizer
Vennyv99
Venom
+Venom Vegeta
Venom00
VenomTears
+Venomousbite
+Venomxkillz
+Venous Cobra
+Venpu
+Ventia
Ventile
+Ventril0qist
+Venus Nyan
+Venzdroid
Venze
+Venzy
+Veo s
Veos
+Verac Obama
+Veracs
Veracthus
+Veraen
Veratyr
+Verbac
Verbal
+Verbal Kint
+VerbalIrony
+Verbia
Verbo
Verche
Verdantys
+Verdoemd
Verdux
Vereco
Verelya
+Vereoris
+Vergi Drakan
+Veri Eze
+Vericity
+Verify
Verin
+Verissimum
Veritasium
Verity
+Verix
Verjj
Verkyz
+Verliax
+Vermachelen
+Vermeill
+Vermithrax91
+Vermont Iron
+Vermyapyre
+Vern29
+VernalTDevil
+Vernon
+Vernossiel
+Vernyxitas
+Vernz1337
Verokostaja
+Veromnis
+Verrario
Verrtus
+Verruckt
VersGrind
+Versacce
VersaceGuap
+VersaceSofa
Versalix
Versatio
Versily
+Vertigo 2
+Vertsu1
+Vervyyy
Verweel
VerxaRS
Very
+Very AFK
+Very Typical
VeryAvgRNG
VeryGoodRNG
+VeryLarry
VeryLilRng
Veryloo
Verysharp988
+Verywarm2246
+Veryx
+Verzicky
Verzik
+Verzik BTW
+VerzikDaCuck
+Verzika
Verzy
+Verzy Werzy
Vesal
Vesaris
Vesipiisami
Vesku
Vesley
+Vespina
Vespulia
Vesqu
Vesryn
+Vessim
Vest
+Vesta 1000
Veste
Vestergaard
+Vestorius
Vesture
+Vesunna
+Vetala
+Vetem
VeteranGamer
+Vetilation
+Vetinari37
+Vetionarian
+Vetr Skaoi
+VettePolle
+Vex Viper
+Vex Virus
Vex8
Vexare
+Vexed Viper
+Vexeed
+Vexer07
Vexero
Vexers
+Vexflame
Vexing
Vexinity
Vexrip
+Vexstrom
Veylantz
Veyron
Veysel
+VezTa
Vezka
+Vezon
+VgbndUnicorn
ViIlageIdiot
+ViaCarter
Vial
+Viallinen
Viat
+Vib3Ch3ck3r
Vib8
Vibby
Vibe
+VibeCentral
+Vibeke Gar
+Vibeology
+Vibes Check
VibesTooWavy
+Vicardi
+Viccuri
Vicente1111
+Vicenza 173
Vices
+Vicious Dest
+ViciousPawg
Vickies
Vicky
VictheStud
+Victimised
Victor
+Victor Dogg
+Victor Lim
VictorHo
+Victorize
Victorp75
Victoryw
Victreebel
+Victur
Vida
Vidacks
+Viddii
+Video Gamic
+Videogam3r
+Vidlmao
Vidy
Vidz
Viech
+Viema
Vienas
Viera22
+Viesker
Viesty
Vietnamees
View
+View Bot
View0
ViezNegertje
+Vieze Jongen
Viggi
+Vigi V
Vigilamus
+Vigly
Viguro
Vii23
+ViiPV
ViiViiVii
Viiduus
Viiiral
+Viikonloppu
Viiksi-Vallu
ViinaGoblin
Viinakramppi
ViisYsiKuus
+Vijand
Vijay
+VikSC
Vikat
VikeSkol
Vikerne666
+VikiLord
Viking
+Viking Dad
+Viking768
+VikingKnees
Vikingfe
+VikkiVance
+Viklok
Vikram
Viktor
+Viktor Wins
VilainLutin
Vilbeee
Vile
+Vile Arcane
+Vile Cabbage
+Vile Squid
Vileblood
Vilemaw
+Viliant
Vilke
+Villagers
+Villain Dude
+VillainLife
Villanovaguy
Villanovan
Ville
Ville921
+VilleGallle
Villix
Villllu
+Villosa
+Villrix
Vilnis
Vilty
Vilunki
Vimpsen
Vims
+Vin 08
+Vin B
+Vin Vista
+Vinaegre
+Vinbum43
+VinceBennett
+VinceOfMince
Vincen
Vincent
+Vincent D2
VincentDaMan
+Vincentimetr
+Vinceut
Vinchops
+Vindi IM
+Vindruen
+Vindruva
+Vinh y
+Vinish
Vinkmaster1
Vinland
+Vinloxx
+Vinn28
+VinnFrazz
Vinneh
Vinnie
+Vinnie Dabs
+Vinnie Pazz
Vinnie526
Vinny
+Vinny NZ
+Vinny Speedy
+Vinny Verac
+Vinny-G
+Vinnyaldo
Vinoloog
Vinopenkki
Vinostondis
Vinous
VinsanityGG
Vintage
+Vintages
Vintner
+Vinxe
+Vinxion x
Violas
Violent
+ViolentPudd
+ViolentToxin
ViolentWaves
Violetti
+Violon
+VipStar
Viper
+Viper Aurora
+Viper G40
VirZuk
Viral
+Virbatum
Virbliud
+Virelith
+Virgin Creep
VirginGirl
+VirginHunteh
+VirginUwU
+Virginism
+Viriato
VirtRemnants
Virtaheepo
Virtuaalnuss
+Virtual
+VirtualAhri
Virtuart
Virtuous
Virunypel
Virus
+Virus LSSZ
+Virus Soup
+Viruss
ViruzTehNub
+Virzik
VisagePlease
+Visarin
+Viscera
Viscx
Visdom
Vishno
+Vishnu
Visibly
Visigothic
Visine
Vision
+Viskan
+VismaBlet
+Vister
Vistopherson
VisuallyMatt
Viswiel
Vita
VitaLemonTea
VitaMineralz
+Vital Dude
+Vital Hope
+Vitality
+Vitamin See
+VitaminCnote
+Vithark
Vito
Vitor
Vitreous
@@ -24588,260 +50758,533 @@ Vitrified
Vitruvio2
Vitryssen
Viturbio
+Viturscy
Viva
+Viva La Vida
+Viva Mehico
VivaLaWeegee
Vivalask8r
Vivalla
Vivants
+Vivascape
VividAzura
VividDreamss
+Vivido
+Vivij
+Vivk
+VivziePop
+Vixca
Viyrew
Vize Senpai
+Vizima
+Viziyo
+Vjee
+Vk
VlBZ
+VlGGAN
VlNTER
+VlRAL
+VlVID
VlaamsePlank
Vlad
+VladTheBwana
+VladThePaler
Vlada
Vladek284
Vladi
Vladibjoern
Vladictorian
+Vlaendren
Vlambare
Vlast1n
+Vlncent
Vloxx
+VnG Lynds
+VnG Zenyte
+Vnce
VngH
+VnilaGorilla
+Vo Amice
VoHiYo_Nami
Vobia
Vocaloida
+Vodbi
Vodec
Vodka
+Vodka ice
VodkaBarrage
+VodkaBreath
VodkaPlz
Vodke
Voekus
Voetbalkous
+Vogefur
Vogues
+Vogven
Void
+Void Fanatic
+Void XVII
+Void-Cho
VoidMySoul
+VoidOnyx22
VoidWraith
Voidberg
Voidnight
Voidpaw
+Voidrow
Voidseeker
+Voidwaker op
Voittosumma
Vokon
+VolProMan
Volai
Volantis
Volary
+Volblaffen
+Volc
Volcan
+Volcance
Volcanos
+Volco
Volcwinder
Voldesad
Volgos
Volkert
+Volkie
Volkrah
Volkzy
Volmortt
Volrod
Volrum
+Volt
+Volt OSRS
+Volt268
+Voltimolt
Voltz Tzkek
Volucris
+Volunteer
Volux
+Volzo
Vomiting
+Vomiting Cat
+Vompiainen
Vomuao
+Vomure
+Von Beck
+Von Dylan 2
+Von Locke
+Von Reibnitz
VonThaine
Vonbony
Vonderhaar
+Vondoom
Voneirus
+Vonhinten
Vono
+VonoV
+Vonschatten
+Vonsv
Vonty
VooLis
VoodooCells
Voodookie
Voorheees
Vopi
+Vor The Ape
VorGole
Vorare
+Vorarlberg
+Vorcan
+Vorikar
Vork
+Vork Planker
VorkathsMate
Vorki
VorkiAlt
Vorkscaping
+Voroth
Vorpal
Vorpeo
+Vorsamu
Vorschlag
Vorso
Vortob4
+VosOc
+Voss V2
Vossen
+Vosty
Voted4Kanye
+Vovi
+Vox Whoppa
+VoxMachina
Voxna
Vozion
Vpdz
+Vrauri
Vrayl
Vreaper
Vref
+Vrekked
Vriendschap
Vriix
+Vrijer
+Vrillionaire
+Vroeg
VroomMasheen
Vrzn
+Vsian
Vsmoke
+Vsnn
Vt Flavourss
+Vt99
Vuallis
+Vubbe
+Vud
Vueko
Vukodlak
+Vuku Doll
Vulcan
Vulcant
+VulcunLogik
Vule
Vuleka
+VulfRS
+Vulia
+Vulklet
+Vulm
+Vulo Lives
Vulp
Vulpes
+Vulpes Audax
+Vuohi
Vurx
+Vurzik
+Vus
Vusa
+Vuto
+Vutox
+Vuuln
Vuur
Vuuututututu
+VvM Otter
+Vxmm
+Vxus
Vyagruhh
+Vyaraeaen
Vyaza
Vyby
+Vycarious
Vycos
+Vyluxian
Vymera
Vynlx
+Vyrelady Em
Vyrza
Vysaraine
Vyseri
+Vytauts
+Vyukris
+Vzb
Vzla
+Vzr
+W 0 R D
+W A G M I
+W A G U S
+W A V V E S
+W E K A
+W I L L 777
+W I N 3 D
+W J M V
+W L F
+W O W S K I
+W Rizz
+W a r s
+W ak
+W amo
+W anted
+W e r
+W elfare
+W i i
+W i l l y
+W i r e tap
+W ifi
+W iggly
+W illy
+W ilmer
+W l S E
+W ll Z A R D
+W olf
+W orx
+W-2 Form
+W-A-M-M-E-R
W00D
+W00DINTUNA
+W00X W0N DMM
W0MB
+W0RY
W0SS
W0fle
W0nderwall
+W0t Rng
+W141 Legends
W1ETzakje
+W1F
+W1G
+W1Z3
W1ldman
W1nch
+W1ngedDragon
+W2P_III
W330
+W349
W370
+W3SL3T7
W3ST0RZ
-W4R3
W420
+W489
+W4R3
+W4T3RM3L0N
+W4Wumbo
+W56
W5O7
W7uQs7s1uKyS
W7uQsTu1KsyS
+W8 letme pot
+W88SSKILLER
+W8ST UF TIME
+W8ing4Name
+W91 forever
+WA2
WAGINGWARS
+WAKANDA JEFF
WAKEUPSWEATN
+WAP Munchlax
WAQQQ
WARLOCKTIN
WAZABl
+WAxsTAche
+WBA Scott
+WBMA
WE0DEND
+WE3N
+WEEDY Woody
WEGOINGCRAZY
WEGSIR
+WFH Gains
WFTWP
+WG Affect
+WGWGWGW6W6W6
WH1TECHAP3L
+WHITE E92
WHITEEEEEEEY
+WIMThighs
WINNINGrng
+WIRE PULLING
+WISEB0LDMAN
WIZRD6
+WLJ
+WM94
+WMAF
+WMATA
WO0DSIE
WOMYNAREDUMB
WONT
+WOOGLlN
+WPNsuper
+WS Hubris
+WS Kyzza
+WS Phora
WSOP
+WTB GF 1 GP
+WTF No Luck
+WTF S7VEN
+WUDS
+WV Boi
+WW I
+WW2 Champs
WYBD
+WYD STEP M0M
WYDStpSis
+WZ95
Wa Wa Master
+Wa t
WaIk
WaVy
+Waaaan
WaaduuuHek
+Waafty
Waager
+Waai Do
+Waassssaaap
+Wabanaki Son
Wabbert
+Wabo
+Wack Sparrow
+Wackabie
+Wacko Swaami
Wacoltx
Wadbot
Waddlez
+Wadee
Wadeo369
Waderik
+Waem
Wafcfreak
+Wafe
+Waffle Cone
+Waffle Jr
Waffleboy
+Waffleici
Wafflekin
Waffles700
+WafflesYo
Wagada
+Wagblump
Waggit
WaggsTheDog
Waggz
Wagit
Wagn1984
WagnBurner
+Wagyu
Wahb
Wahido11
+Wahpahp
Wahpan
Waifuism
Waifus
WaikatoChris
+Waikit8
+Waine
Wait
+Wait Quick
+Waitforit14
Waitin
Wajiiro
Wake
+Wake Boarder
WakeAndDrake
+WakeUpF1lthy
+WakeUpGirl
+Wakey Wines
Wakisaka
+Walborg
Waldrin
Waldron530
+Wales164
Walker
Walkin
+Walkofshane
WalksOG
Walktellfox
+Wall-enberg
Wallabies
+Wallabillah
+Wallace D S
WallaceTusk
+Wallah Krise
+Wallah Lag
+Wallahper
Walleen
Wallerz
Wallex
Walli
+Wallstboi69
+Wallsunny
WallyGator
Walnutt
+Walo CZ
+Walpie6
+Walsamer
Walshy
Walshy00
Walshyo
+WaltJnr
Walter
WaltersPub
+Waltt
Waltzz
Waluigi
+Walzu
Wampire
+Wan E
WanPanMan
Wandel
+WanderTheSee
Wandereer
+Wanem
WangSohLong
+Wanhe
+Wanistan
Wanna
WannaBeE-tje
WannaGetABag
+Wannebet
Want
Want2beIron
Want2mess2
+WantTacos
Wantsome909
Waonnman
Wapf
+WapitiSmackr
+Wapol
Wapsi
+War Dwr
+War Force
War12Ready
WarFawk
+WarHawKVJ
WarOnOurMind
WarSoc
+War_x
Warbler
Warchee
+Warcloud
Warclown
+WarcraftOSRS
Ward988
Warden
+WardensFe
Wardle101
+Wardless 1
+Wardy791
+Ware Adelaar
Warfeh
+Warforged
Warg
Wargames11
Wargowitto
Warhammer70
WarheadZ91
+Warking 5099
+Warlolz
Warlord
+Warlord Kek
+Warlord Oli
+Warlord Papi
+Warlord Sage
+Warlord Tyth
Warlordjinx
Warm
+Warm Alfredo
+Warm Beer
+Warm Donuts
+Warm Pasta
+Warm Pillows
WarmLoaf
WarmManBlast
Warmantus
Warmly
+Warmongoloid
Warmouth
Warnac
+Warney
Warnings
+WarpedDeath
WarpedMatrix
Warph
+WarrgMG
Warrior
Warrior09rs
WarriorHome
@@ -24853,41 +51296,66 @@ WartoysCandy
Wartt
Warwick 1080
WasHcimLoL
+Wasabeh
Wasbeertjes
WashMachine
+Washed CJ
Washyleopard
Waspoeder
Waspraa
Wasserohne
Wassillie
+Wasstyr
WasteOfBond
Wasted
+Wasted Toxic
+Wasted Xj
+WastedSpecs
+Wastedgr1ny
WastingTicks
Wastinmylyfe
Wastoid
Wasup725
+WasupMyBwana
Watafara
Watamei
Watamelun
Watanuki
+Watardid
Water
+Water Skink
+Water-T
Waterbender
Waterbury
+Watercress
+Waterdrop
WatermelonTV
+Waterpijp
+WaterrBoy
+WatersHorse
Watertodt
+Waterwraith
Watr
Watschi
Watson92
Wattledaub
WattsyMain
+Wattua
Waugh
Waulez
Wauzemaus
+Wave 10
+Wave 69
WaveBtw
WaveSkill
WavesOnMars
Wavezz
Wavy
+Wax Dabs
+Wax i
+Waxby
+WaxbyDonkey
+Waxing Sun
Waxtap
Waxy
WayOfKings
@@ -24898,113 +51366,240 @@ Wayabove
Wayde
Waydens
Wayert
+Wayfarers
+Waylor
Wayne
+Wayne1149
WayneBretzky
+WayneMain
WayneStated
Wayney
WayofWonder
+Waypanaator
+Waypastfear
+Wayt
Wayward
+Wayward Soul
+Waza131
Wazp
+Wazup31
Wazupfighter
Wazzlewop
+Wbd
+Wcrocks
Wcs139
+Wct
+Wdfamidoing
+Wdges
+We B Trollin
+We Feed
+We Grinded
+We Guard
+We Love Dogs
+We Tad
+We The Team
+We sley
+We0921
WeAllGucci
WeAreDoomed
WeAreGroot
WeAreMoksi
WeChat
+WeDaBstMusic
+WeLoveToB
WeRageAsTwo
+WeTheCha
WeTsHaDoW
+WeWanking
+Wea Boo
WeaIth
+Weak Iaugh
+Weak Mindset
+Weak Terror
+Weak Wrists
WeakLesss
+WeakSpot
Weakcob
Weaker
+Weaki
Weaky
+Wealth herbs
Wealthy
+Wealthy Pro
+WeaponNovice
WeardBeird
Wearwolf
+Weasel07
Weasel09
WeaselToast
+WeaselTuco
Weaselious
+Weatherwatch
+Weatherzx
Weav
+Web 2
Webb
+Webbe
+Webben
Webdow
Webs
Webstar
+Webtastic
+Weby Elite
Wecanmakeit
Weddn
Weder
WedhusGembel
+Wee
Wee Seapy
WeeDRekT
+WeeMissSlays
+WeeWab
Weebcrusher
Weebmurderer
+Weed
+Weed B0Y
+Weed Barrage
+Weed Farm
+Weed OG
+Weed PhD
+Weed Strains
+Weed VIII
+WeedWizzard
+Weedbucks
+Weedle
+WeeeWoooo
+WeekndWorior
+Weel
Weelechts
WeenieHut
Weeperz
+Wehby3K
Wehsing
+Weichey
Weight
Weighting
+Weightless
Weighty
WeirdChimp
Weirhere
+Weis578
+Weistalief
Weki
WelbyBree
+Welcome
+Welcome Beck
Weld
+Weld Arc
Weldar
+Welfare PvM
+Well Done
+Well-ChromeD
+Wellar21
Wellbutrin
Welld
Wellfence18
Wellpower10
+Wellrun1076
+Wellschit
WellyWonka
+Weloy
+Welp
Welsh
+WelshNProud
+Welshfuryy
Welshhy
+Welshy 07
+Welshy94
WelshyRhys
+Wemh
Wench
+Wendy Page
Wendyy
Weng
Wenja
Wenkey
+Wenzhou
Were2341
+WereWaffles
+WereWolf II
Werebanana
+Werk
+Werknemer
+Wermin
+Werrett
Werrtus
+Weru
Wery
Wesh
Weshzz
Weslee
Wesley
+Wesper
Wessen
+Wesss
West
+West Mids
+West Shiv
+West Tigers
+West Varrock
WestFlag
WestTxBoyz
+Westardythot
Western
+Western PA
WesternBlot
Westleafer
Westly
Westwich
Weszie
+Wet Boxes
+Wet Garbage
+Wet Land
+Wet Ottr
+Wet P
+Wet Sneeze
+Wet Thot
+Wet and oily
WetDreamMeme
WetForPet
WetRnG
Wetex
Wetone2880p
+Wetta
+WetterPussy
+Wevile
Wexom
+Wexs
+Wexxorz
Weyerbacher
Wezl
Wh1teSox
WhaIe
+Whaddup
+Whag
Whai
Whale
WhaleeWatch
+Whaletorsk
Whalkatraz
+Whamburgers
+Wharebadjer
Wharncliffe
+What Da Hell
+What if
WhatASpoon
WhatAThot
+WhatAreDrops
WhatItDoBoo
WhatSheZed
WhatTheDaze
Whatapure101
Whats
+Whats Canada
+Whats Good
+Whats Reddit
+Whats Trade
WhatsHonour
WhatsRsSober
WhatsThisRNG
@@ -25015,262 +51610,501 @@ Whavenlad
Whaxt
Wheatleyprop
Wheel
+Wheelchair
+Wheelied
Wheelies152
+Whees
+Wheesnaw
WhenPigsFly
WhenRuneLife
WhenYouCute
Whensfull
+Where is GE
WhereAreWe
WhereIsPeace
WhereTheCats
+Whereisme7
Wheremeballs
+WheresMyPets
+WheresMyPurp
+WheresMyRNG
WheresPurple
WhersMyPet
Whesh
Whey
+Whey God
Whiff
+WhiityTosser
WhilyWhip
Whimsicat
Whina
Whinnie
+Whipppy
WhippyMong
Whipsaw
Whiskerfish
Whiskey
+WhiskeyWhip
WhiskyVault
Whiskywayne
Whisp3r
+Whisper_2
Whitah
White
+White Beauty
+White Mage
+White Mantis
+White Owl
+White Rnger
+White Shark
+White Soul
+White Wolf
WhiteBTW
+WhiteBoySam
+WhiteChuky
+WhiteCricket
+WhiteDeathh1
WhiteMagnet
+WhiteMaleHre
WhitePilled
WhiteProdigy
WhiteWolf216
WhiteZephyr
+WhiteZetsu
Whiteboy016
+Whitecoast
+Whitecrow
Whitefire68
Whiteflashh
Whitemambz
+Whitetoes
+WhizsuJr
+Who Add
+Who Nose
+Who8mypaint
+WhoDatDJ
WhoDoICatch
+WhoHaxdMe
WhoLikesIron
Whoa
+Whoa Gaming
WhoaKemosabe
Whole
+Wholelottabk
Whomp923
Whomst
+Whomst MD
Whoratile
+Whorrid
Whos
+Whos Jo3
+WhosUrDabby
+Whosjason
Whosyourmac
Whothehell
+Whruum
+WhtKndofCake
+WhteLilySeed
Whuo
Whurse
+Whurse Meat
+Why 8ank
+Why Play
+Why SkaR
+Why Try Guy
+Why are u ge
+Why u N0ob
WhyBank
WhyCantIPick
WhyIsRumGone
+WhyNevaLucky
+WhyRyan
WhySleeping
+WhyTryAtOsrs
+Whyase
Whydoubother
+Whymcie
+WhyteGoodman
+Whyto
+Wibbity
+Wibbix
Wibbleforce
Wicea
+Wichel
+Wick3d Bet
Wickaboag
WickedKlowns
+Wict
Widdly
Wide
+Wide Client
+Wide Vibe
+WideBoyy
+WideDommy
Widmee
+Widows Kiss
+WiebMasterly
Wiebah
Wiebere
Wiebren
Wiebstar003
Wiegedood
+Wielebny
WienerWipe
+Wierie
+Wiesel
Wife
+Wife or RS
Wifi
+Wifi Beater
+Wig Lops
WigWacker
Wigan
WiganRS
+Wiggety
Wiggie
WiggleMcTuff
Wiggly
+Wiggly Woo
Wiggoth
Wigins
+Wihbane
+Wihwy
+Wiigg
Wiiillllsonn
Wiiize
+Wiji
Wijji
Wijsheid
+Wikas1337
+Wiki Flipper
WikiLiex
WikiWorm
+Wikinger
Wikingpedia
+Wikked
+WikuliK
+Wilby
Wild
+Wild Bill 71
+Wild Clicks
+Wild Cowboys
+Wild Fury
+Wild Orange
+Wild Pump
+Wild Raven
Wild Rivers
+Wild Spirit
+Wild Squidi
+Wild Stylez
+Wild Whim
+Wild chickie
WildAbandon
+WildGothGirl
WildSF
WildSnorlax
+WildTokes
Wilda83as7
Wildapple
+Wildbasher
Wildboy181
+Wildcard
+Wildcatface
+Wilde Bizon
Wildfire
Wildlands
Wildly
Wildmon
+Wildy Back
Wilk
Will
+Will Compton
+Will Smif
+Will T
+Will i b
+Will man
+WillCosby69
WillG
WillNight
+Willasaurus
WillfulNomad
WillfulTiger
+Willi
William
+William Way
William2133
+WilliamChris
Williamsburg
Williamwrc
+Williamwurld
+Willianderma
Williard
Willicous
Willie
WillieP
+Willlowsap
Willo
+Willoweeper2
Willowisp
+Willsy_828
+Willy
WillyMonka
+WillySneeze
WillyTickles
WillyVanilly
+Willyams
Willymule
WilmaCokfit
Wilnafe
+Wilpu
Wilro
+Wilso
Wilson
+WilsonBro
WilsousGoods
Wilters
Wiltings
+Wilwork4stuf
Wilza
Wilzy
Wimm
+Wimpy Hulk
+Wimpy Worm
+Wimpy127
Winanda
Wind
+Wind River
+Wind the ham
Windal
+Winded
+WindexWipes
Windi
+WindmillBoy
Windowpie
Windows10
Windrun
+Winds Tormnt
Windwaker
Wine
Wineapple
Winedolphin
WinexBlaze
+Wing Daddy
+Wing Reaper
+WingToe
Winged
+Wingedlemur
Wingednebula
Wingknutts
Wingless
+Wingman Skre
Wingmanfire
+Wingmastah
Wingnut
Wingnut277v2
Wingoficarus
WingsXIcarus
Wingz
Wink
+Winner Chris
Winner1Class
+Winning Life
Wintage
+Wintaj
Winter
+Winter Slays
+Winter Woede
+Winter mage
Winterpropht
+Wintersaurus
+Wintertarwe
Wintertoad
+Wintis
WintonOS
Winze
Wipe
WipeRZ
+Wippy Spuds
Wipzed
+Wirbi
Wirusas14
+Wis
+WisCheez
Wisdem
Wise
+Wise Andy
+Wise Bloke
+Wise New Man
+Wise OlMan
+Wise Old Guy
+Wise Old Roy
+Wise Pug
+Wise Up
+Wise9884
+WiseBlackMan
WiseOIdMan
WiseOld
+WiseOldCam
WiseOldNeef
+WiseOldNut
WiseOldSimp
+WiseOldWench
+WiseYoungOne
+Wish
+Wishen
Wishidie
+Wishies
+Wishwandewe
+Wishy Walshy
+Wispa
WispyWolf
Wissfx1
+Wisundaz
Witch
+Witch Aileen
+Witch Elf
+Witchkraft
+Witchprick
+Witchz
+Witeout LLC
+With Skills
Witha
+WithoutAGe
+Witicism
Witkus
WitlessFox
Witness
+Witte
WitteLijnen
Witteri
+Wittu
Wittytoad
Wixsie
Wixxa
+Wiz master
WizKaleeba
WizKawifa
Wizard
+Wizard Weird
+Wizard of Oz
Wizard012345
+WizardFish11
WizardIRL
WizardKing
WizardMascot
WizardSleeve
+Wizardmatt6
Wizardspike
Wizfujin
Wizidross
Wizreefer
+Wizyweirdo
+Wizz Z
Wizzie
Wizzti
Wizzy
Wizzypoop
Wizzzard
+Wkd Br0
+Wkedjester
+Wkndr
WlLDERSGEERT
WlLL
+WlLL1am
WlLSO
+Wlatt
Wlsperingeye
+WnB
WnnB
+Woadblu
Woah
+WoahDudeNice
Wobbery
WobbleyPOP
+Woblin
Wobos
Wobs
Wobufett
+Wocka
Wocky
Wodka
+Wodka Orange
+Woe Woe
Woedipoe
Woemance
+Woeppa
Woes
Wofford
+Wofford2
Wohdii
Wohrx
Woikaz
+WojoWins
Wojtas
WokeUp
Wokkel
+Wokki
Wolf
+Wolf Berserk
+Wolf66
WolfApple
WolfLucifer
Wolf_Hunter
Wolfazal
Wolfboi70
Wolfboy1209
+Wolfden95
Wolfeena
Wolferno
+WolfgarrX
+Wolfgarth
Wolfhearth
Wolfie
+Wolfie Daddy
Wolfiezzz
Wolfinger
+Wolfique
Wolfjob
Wolfman
+Wolfman00777
Wolfmans
WolfnBane
WolframOxide
Wolfshade
Wolfshook
+Wolfspeed
Wolfy3777
Wolfz
Wolles
+Wolq poW
+Wolverine V8
Wolvesy
Wolwa
WomanScorn
+Womaz
WombatLife
+Wombats
Wombayaga
+Won Alll Day
Wonderful
+Wondo
+Wonka44
WonkyShlonky
+Wonn
Wonnawonka
+WonterJodt
+Woo Hee
+WooGGi
Wood
Wood Choppin
+Wood Scimmy
+Wood Style
+Wood VI
Wood4all
WoodJablowm3
Woodcrest
+WoodcutterQw
+WoodenSword
Woodland
Woodsboro
Woodson
@@ -25279,31 +52113,57 @@ WoodsySmells
Woody
Woody540
Woody8
+WoodyBussy69
Woodys
Woodz90
Woof
+Woof Woof Jr
Woofaire
+Woofi
Wooh
+WookieBread
+Wool Socks
+Wool Tar
+Wooli
+WoollffMain
Woolly
+Wooo Blod
+Wooody125
+Woooglets
+Wooogy
Wooooo91
+Woopie Doop
Woopsx10
Woopuh
Woord
+Woorm
+Woos
Woosa
Woot
Woowoh
Woox
+WooxFromWlSH
Wooz
Woozie400
+Wophel Iron
Word
+Word Bird
Word2urmum
+WordCheck
Work
+WorkUkko
Workahaulix
Workath
Workin
+Working Man
+Working Poor
Workouts
Worland
World
+World 46
+World 526
+World 61
+World Of Rat
World345
WorldEndero
WorldWarTwo
@@ -25313,23 +52173,39 @@ WormInHeaven
Wormeater66
Worms
Worning
+Worning Mood
+Worst Herp
+Worzo
Worzord
+Wosby
Woshy
+Woste
Wostyn
WotCee
+Wotnel
+Woudie
Woul
Wounded
+Wounds
Wourlow
WouterMarni
+WouterPils
Woutertje
+Woutertje 93
WowAUnicorn
WowDerek
+WowoW
Woww
Wowzer1482
+Woz X
+Wozi
+Wozol
Wozzah
+Wozzy
Wqlq
Wrackbar
WraithSx
+Wramn
Wrap
Wrap5
Wrath
@@ -25337,11 +52213,17 @@ Wrath0fMath
Wrathchildxd
Wrathinsea
Wrav
+WreXham AFC
+Wreck These
+WreckAndRoll
Wreckage
Wreckanism
+Wrecked
Wreckfull
Wreckin4Days
Wreckon
+Wreckonize
+Wrecky
Wreckzu
Wrekdum
Wrektem
@@ -25349,139 +52231,283 @@ WrektumRalph
Wrenny
Wrigzer
Wrijo
+Wrinkle Meat
Wripzi
+Writing
+Written
+WrmFzy
+Wroggi
Wrong
+Wrong Focus
Wrot
Wruumze
Wryd
+Wrynn
Wsupden
+Wtf Burgers
+Wtf Bwana
+Wtf Is Elmo
+Wtf Michael
+Wtf happen
WtfJad
Wtf_Stake
+Wtfisabook
Wtfxcreepy1
+WuLuZ
+WuTangDan
WuTangRs
WuTangflame
WubbaRs
Wubj
+WuceBrayne
+WuckFeeaboos
Wucky
Wudkip
+Wueu
Wuhan
Wulfeh
Wulkanaz
Wullets
+Wulong Rush
+Wumbolii
+Wumox
Wundy
Wungz
+Wunk
+Wuntch Meat
Wur1
Wurgon
Wurj
+Wurrior
Wurstfest
Wurtziite
Wuteng
Wutlife
Wutru
+Wutta Beast
Wuuluu
+Wuz H
Wuzn
Wuzzi99
Wwalrus
Wwarlock
Wxll
Wxyz
+Wy 1853
Wyan
Wyard
+Wyatte
+Wybb
Wybo
Wyborowa
+Wyd
+Wydie
+Wyel
+Wyiphi
Wyldar
WyldeKirito
Wylie
Wyliecoyote2
Wylyne
Wynand
+Wynmao123
WyoFletch
WyrdStoned
+Wyrlor
WyvernBreath
+WyvernMage
WyvernSlayer
+Wz Karmish
Wzurd
+X X V
+X 0H
+X Axis
+X Bullet X
+X Dsmith X
+X E L E X
+X E R 0
+X Ecuted
+X I L E
+X Ice Break
+X Japan
+X King Jehu
+X Landie X
+X Mars
+X Mathiew X
+X OUT OF RS
+X Robert X
+X Rorschach
+X SUR X13
+X Seabridge
+X WAVE 70 X
+X Y P O
+X e x i m
+X pelz
+X-Jabs
+X-Man
+X-SVNTH
+X0N3X
X1xfa11enx1x
+X65
+X9Y
XAAXAA
+XANSEB
XARlQUE
XATHD
XAyYxlMaOxX
XCShark
XCortezX
+XD XDDD XD
XD8D
+XDQ
XDamage
XERTNARG
+XESPIS
XEback
XFitVapeVegn
+XHCD
+XI J
+XI5
+XIBT
+XIX Zeta XIX
+XIXIXIXVXIVI
XIXXI
+XJT
XKappaX
+XL Peen
+XL Succ
+XL itikka
+XMR
XNovaCainX
XOBLIN
XORB
+XP All Night
+XP Hobo
+XP Jake
+XP Thieving
+XP for gains
+XPOQ
+XRP Glandorf
+XRV
+XRay Mike
+XS3X
XSandwich18
XSapocalypse
XTCarlo
XTIF
XUJ0RKI
XV73J
+XXGrimorgXX
+XXTENTACI0N
+XXaan
XXera
+XZoTicTB
+X_Ouchies_X
+X_Streetz
+Xa1e
Xaaan
+Xaberphel
+Xadia
+Xaeram
Xafirox
+Xahp
+Xaint
+Xalastar
+Xalcvs
Xalrir
+Xam Renz
Xambitz
+Xamphion
+Xan Gogh
+XanaxXR
+Xandahr
+Xandayn
+Xanefeo
Xanfan
Xann
+XanomaliuX
Xanq
Xanthophylle
+XanthousKing
Xantiasto
+Xar
Xarigue
Xarious
+Xarkus
Xarnathos
Xarov
+Xarpus Decay
+Xarqn
+Xartes253
Xaryn
Xasdaxs
XaskiM
+Xasthur
Xatar
Xaud
Xaussiemaulx
Xav777
+XavieerL
Xavieerr
Xayrus
Xazz12
Xbalan
Xbogaerts
Xbox
+Xbox Account
Xbox kid 99
Xboxkid33
+XcL ady kila
XcalenX
Xcalumet
Xcelorin
Xcuuuse
XeNeaxaxa
+Xebstrika
Xecki
+Xedoria
Xeem
+Xeet
+Xefi
+Xefn
Xelas
Xelcab
Xeldin
Xelian
Xelzathar
+Xemnax
+Xems
Xen0phyte
XenaDior
Xenastry
Xendel
+Xenece
Xenethos
Xenfire
+Xeniat
+XenithStar
+Xenlon
+Xennofobia
+Xeno X Human
Xenofiel
Xenofile
Xenoforms
+Xenorith
XenoviaZhao
+Xenria
Xenses
Xentric
+Xentric I
Xenzah
XeoX
Xeqo
Xeretus
Xeric
Xerics
+Xerics Exile
+Xerics Solo
+Xerile
+Xerkom
Xerloz
Xero
XeroBlitzAce
@@ -25491,14 +52517,25 @@ Xerona
Xeroscape
Xerosenkio
Xeroso
+Xerphias
Xertrius
+Xerxe
Xestox
+Xetarillos
+Xewne
+Xeyler
Xfebruari23X
Xflowerz1
Xgen2004
Xghostbx
XgodofironX
+Xhaloz
+Xhq
+Xi Bogan iX
+Xianerth
Xiang
+Xiang Ying
+Xiao Wei
Xick
XicoDoAnzoL
Xidos
@@ -25506,19 +52543,37 @@ Xielt
Xiff
XigZig
Xiglaan
+Xijaxer
Xilamz
Xillious
Xilphy
XinXani
+Xinbonddon
Xinck
Xiom
+Xiphoz
+Xipi
+Xipo
+Xirenia
+Xists
+Xityx
+Xiuol
Xizor
+Xizxuka
Xizz
+Xj Driver
+Xl Pat lX
+Xl Tango lX
+Xlarss
+Xlogmore
+Xmas Santa
+Xmasvibes
Xmerl
Xnam
Xname4
Xniklaz
XoXdr34mzXoX
+Xofal
Xoir
Xojix
Xolca
@@ -25530,319 +52585,739 @@ Xoobs
Xorphas
Xorx
XoutofRunes
+XpTitan
+Xpect2die
Xpelz
Xperiencer
Xplay2slayX
+Xplicits
+XploitClamps
+Xpm
+Xpreme
+Xqcksilverx
Xqkiller
Xquick
+XrRipple
Xsk1l3rX
Xskillz
XslayerkingX
+Xsy
+Xtan
+Xterioz
+Xternal VZ
+Xteven
+Xth
+Xtian
Xtopheris
+Xtreme Kill
+Xu
+Xu3
+XuRuP1Ta
Xufo
Xuhe
+Xulaa
Xulreh
Xupafion
+Xuro
Xutera
+Xuxe
Xuxy97
XvalQ
+XvalentiX
XvegetaX
Xvim
+Xwb
Xwoprl
+Xx A ll y xX
XxBABY
+XxBriDGExX
XxCoponerxX
XxJIMBUSKID
XxKaakkimusx
+XxMOPExX
XxPoliSwagxX
XxRXZ60xX
Xxhel
+Xxpyroxx20
XxrigourXx
+Xxsagexx30
+Xyagrius
+Xylarium
Xyler
Xylr
+Xylym_pilot
Xymox
Xynamic
Xyrath
Xyresic
Xyryu
Xyzcanon
+Xz8
Xzavier
Xzil
+Xzpect
+Y DynHaearn
+Y Fx
+Y O D A
+Y O K A I
+Y arok
+Y ellow
+Y em
+Y ogo
+Y oshi
Y0N3
Y0l0mees
Y0usless
+Y2K38
+Y2k Survivor
Y3RBA
+Y3w
+Y4P
+YBank_Mak 69
YCTH
+YCantPigsFly
YChewyYOS
+YEEEZY
YERTII
+YExTI
+YGBigTank
+YKW
+YM
+YMJFL
+YNW Kushy
YOKiki
+YONGWOLRANG
+YOOOH JOEE
+YORJ
YOTJ
YOUR
+YOURMOMSMAN
+YS3
+YSL
+YSL for Life
+YSinpo
+YTPO
YTrySoHard
+YUSEF
+YWM
+YYST
YYose
+Ya Boi Suff
+Ya Boy Lachy
+Ya Boy Ryan
+Ya9
+YaBoiCrisps
YaBoiSlip
YaBoiWestie
+YaBoiiQuan
YaBoyCosmo
+YaDoons
YaLilMupp1t
YaOldHeffer
+YaSillyRAT
+Yabai
+Yabbary
+Yabbie Pump
Yaboiskee
Yaboitrek
Yaboku
Yabui
Yachi
Yachiri
+Yackill
+Yackity Yak
+Yackley C
Yagyu
+YahRamen
Yahe
+Yahtz3
Yahtz3e
Yahya10100
Yaik
+Yaimzz
+Yak Elves
+Yak of Iron
YakYak
+YakimaValey
+Yakka Stacka
Yakosu
+Yakushima
+Yakuza
+YakuzaDragon
+Yalazar
+Yall Raycist
Yalloune
Yalomi
+YamR6
+Yama XCII
Yamagata
Yamakato
Yamata
Yamda
Yami
+Yami Bakura
+Yammed
Yampay
+Yampay II
Yamsaretasty
YanKeDooDle
+Yand0
Yang
Yangtze
Yangus456
Yani
+Yanilla
+Yanilla Kush
+Yank on This
+Yankee Run C
+Yann78
Yannick177
+YannickH
Yannis
+Yao Yo Xin
+Yaossynx
+Yaprakdal
+Yardi
+Yarfn
Yaribel
Yarne
Yarny
+Yaseki
+Yasen 105
Yasuos
+Yasuuo
Yato1God
+Yaukai
Yauz
Yavrum
Yawan
Yawgg
YawningPanda
+Yawp
+Yaxfe
YayItzTyler
+Yaysuo
+YazanBates
Yaziro
Yazo
Yazuki
Yberi
Ycinho
+Ydmyk
Ydorog
Ydrasil
+Ye Magekilla
+Ye Mate
+Ye Olde Ace
+Ye Olde Ned
+Ye Olde Oak
+Ye ti
YeBankWicked
YeBoi
+Yea UrBanned
YeaAiiiiite
+YeahIMineIM
+Year
YearUp
YeastPocket
YeastyPussey
+Yeblehs
+Yechs
Yeda
YeebusGeebus
+Yeeeeehaww
Yeeetist
Yeeetscape
+Yeern 101
Yeeska
+Yeet Dan
+Yeet Thyself
YeetMemes
+Yeeted One
+Yeetu
+Yeezy
YefTalks
Yefim
Yehtii
Yeiw
+Yek
Yekhsad
Yekouri
+Yeland
YeldariIII
Yeli
+Yelling
YelllowFlash
Yellow
+YellowForest
+Yellowfox21
Yellowhoody
+Yem o
+Yemly
+Yemrisnen
+Yenie
+Yenil
+Yenofthunder
Yenom
Yentelke1998
Yeoubi
Yeoz
+Yep Cup
+Yerbal Tea
Yerd
+Yeren
Yerico Tsu
Yerkinoff
+Yerm da worm
Yeroen
YerrBanned
+Yerradu
Yerrrrey
+Yes Click Me
+Yes No Maybe
YesOk
+YesYesYall
+YeshuaShalom
+Yeso Pro
Yessir
Yesze
Yetagaindied
Yeteri
Yeti
+Yetiburger
+Yetlon
+Yetsu
Yettiez
+Yetzne
+Yevop
+Yevral
+Yew 2
+Yew Burn
+Yew Root
+Yew Tree
+Yew Wu
+Yew a sloot
+YewEssBee
+YewGnomeSayn
Yewcutter
Yewise
Yewna
Yewp
+Yews pnas
Yewsanity
Yewse
YexaC
Yezzi
+Yfer
+Yffud Gnik
+Yggdrasverre
+Ygh
+Ygritte8686
+Yharnam Soul
+Yhul
Yiatse
+Yid
+Yidy
+YikesScooby
+Yilver
Yimo
+Yinlin Simp
+Yippe
+Yippiyak
+Yisabela
+Yja
+Yke
Ykeykey
YlFF
Ylikivaa
+Yllattyneet
Yllig
Ylmn
+Ylpistynyt
Ylulawo
+YmanThe1
Ymbyydi
+Ynastra
+Yne
+Yng Xehanort
Ynka
+Ynun
+Ynza
+Yo Caspian
+Yo Griff
+Yo Its Devo
+Yo Kev
+Yo L
+Yo MyUSD
+Yo Soy Dios
+Yo lm Lee
+Yo uu
+Yo wyd
Yo2021
+YoCerberus
+YoGurttt
YoHighRoller
YoHimiiTsu
YoIronManBtw
+YoKristaps
+YoMomsFavBF
YoSinNow
+Yobew
Yocan
+Yoco
Yoda
+Yoda Adf
+Yoda Corona
+Yoda NSZ
YodaEvans
+YodaPen
+Yodamainn
YodasNo1Fan
YodasYoda
+Yodasquad
Yodati
+Yoder
+Yoerias
Yoeshua
Yofang
Yoghurtis
Yogi
+Yogi DMT
+Yogi Surfer
Yogololo
+Yogusun
Yohny
Yoink
+YoinkYoink
Yojak3
Yokie
Yolkysky
YoloSwagHope
+Yolp
+Yolvert
+Yomaku
YomamaPro
+Yomashu
Yomdo
Yondu
+Yondu Poppin
+Yonemid
+YongZhong
+YongZonnegod
+Yonkers
+Yonko Buggy
+YooDuragon
Yoodish
+Yoooord
Yoorah
+Yor
Yorga
Yorick
Yorick095
YorickMorty
+Yoriichan
Yorinky
+York Rite
+Yorkson
Yoru
Yosep
Yoshi
+Yoshi Man17
+Yoshi Suyumi
Yoshi6380
+YoshiThick
YoshisStory
+Yoshiwaptor
+Yoshizilla
+Yotaak
+Yoteii
+Yotsuya Miko
+Yottie
+You Are Zach
+You Be Love
+You Die71
+You Ok Fam
+You R D3d
+You rc 2
+YouGotRoll3d
YouGotSeabed
YouNeverKnow
YouOverThink
+YouSuck
YouWontScare
YouareGE
Youbartonz
+Youme
+Youncies
Young
+Young Bucket
+Young G4
+Young Guthix
+Young Krazed
+Young Logic
+Young Mooch
+Young Mullet
Young Tango
+Young li
+YoungCatFish
+YoungNoot
+YoungScuba
YoungThugga
+Youngdaddyg
Younge
+Younglleff
+Youngn
Youngsters
Youngvet
Your
Your Amity
+Your Future
+Your Idol
+Your Misery
+Your Mom67
+Your Mothers
+Your Toilet
YourDadIsMe
YourFrenRen
YourObsessed
YourPaperm8
YourSolution
+Youre Joshin
YoureAllTalk
YoureIgnored
YoureMySam
+YoureSoCool
Youssef
+Youthful
+Youtube Luck
Youwillcower
Youxi37
Yowarrior40
+Yowch
Yowzer
Yoxz
Yoyaaaaaaaaa
Yoyo
Yoyo502
+Yoyoma007
+Yrasa
+Yrdna
+Yre
Yrjo
+Yrok
+Yrrabo
+YsL Dom
Ysdragos
+Yshtola
+Ysr
Yster
+Yster Bunny
+Ysuke
+Yu Seolha
Yu Stinkipu2
+Yu Zi Jiang
Yubs
+Yubz
+Yucan Tucan
Yuck
+Yuck Aroma
YuckFou
YuckMouth
+YuckNoYums
Yudi
Yuengllng
+Yug Cipe
+YugiMoto666
Yugioh
+Yuhai
Yuigahama
+Yuiii
Yuiku
Yuipster
+Yuka Takaya
Yukaiaiaiai
+Yuki Kitsume
Yukika
Yukionna
YuliusCaesar
Yulong
+YumYumSauce
+Yuma az
+Yumaad
Yumbo
+Yumhumgao
Yumiko
Yummy
Yumped
Yundastan
+Yundruh
+Yuneekh
Yunery
Yung
+Yung Belial
+Yung Birdie
+Yung Deaner
+Yung Nice
+Yung Swoosh
+Yung Zach
+YungDuski
+YungIron
YungMoistGod
YungPredator
+YungSlick
YungThimothy
YungTungsten
YungWhiteBoy
Yungsik
+Yungsingteng
+Yungyonder
YunnT
Yuno
+Yuno Yuno
Yunozen
+Yunq
Yunthers
+Yuoni
YupImMadBro
Yupal
+Yuqi Dab
+YuqiShuhua
Yurimo
Yurix
+Yuriy
Yusaris
Yusko
Yutorgborm
+Yutzz
Yuudachi
YuugeJohnson
Yuuki
Yuuma
+Yuuuuurd me
Yuuzu
Yuyevon2003
+Yuyu Shirai
+Yuzumii
Yveaux
Yvno
+Yvoa100
Yvon
+Yvuar
+YxY
Yxskaft
+Yzanagi
+Yzap
Yzyszn8
+Z 0 D I A C
+Z 84
+Z A D O
+Z A R G O T
+Z A V Y
+Z Barrows
+Z E R0
+Z I K O
+Z Jay
+Z M P
+Z O R 0
+Z O V K O
+Z O ZO
+Z Rowz
+Z a a K i R
+Z aeBae
+Z e e e f
+Z e x
+Z ebak
+Z edd
+Z erkie
+Z ev
+Z i g g e h
+Z igZag
+Z ion
+Z y g y
+Z ygis
Z-TheReaper
+Z00STER
+Z0K0
Z0MBI3
+Z0MBIFIED
+Z0NK3D
+Z0RB0
Z0bbey
+Z0deac
Z0ops
Z1pn
Z1pn_xD
+Z26 Man
+Z3
+Z3FRAN
+Z3R0 CO0L
Z3ds
+Z3ymour1
Z4phy
+Z4ppie
+Z6L
Z7Z7Z777ZZ
+Z900
+ZACCU
+ZADDYGANG
ZALCANOPET
ZALGlRlS
+ZAQWRY
ZB84
+ZBLOCKA
ZEIVI
ZEKEDAFREAK
ZELDRIS0
+ZER0 EHP
+ZER0Z
+ZGJ
+ZHG
ZIARED
ZILLER
+ZJ
+ZL1 Devin
+ZLA
+ZMB Scary
ZMithrilMan
+ZNDX
+ZOEY 101 FAN
ZPWUZZLED122
+ZRegi
+ZSYD230207
ZUCK
+ZUK EXPERT
ZUwUBI
ZWUNK
+ZWlFT
+ZX
+ZY
+ZZ
+Z_Z
ZaPhiRoxD
+ZaadTeef
Zaane
Zaanstad
+Zaatar
Zabe
+Zabey
Zabini
+Zabky
Zaboxi
ZacAynsley
+ZacBallsHard
+ZacFx
+Zacariah D
+Zaccchhh
+Zaccy
Zacflame
Zach
+Zach 6464
+Zach Patino
+Zach est13
+Zach q p
+Zach07
Zach314
+Zach4211
Zachagawea
Zachatank
Zachawy
@@ -25852,38 +53327,86 @@ Zachs
ZachsAccount
Zachulous
Zack0ry
+Zack504
+ZackAsch
ZackSparrow
ZackWasTaken
+Zackary
+Zackle Berry
Zackly
Zackman
Zackology
+Zackree
+Zacky P
Zacoron
+Zacxion
+Zaddy Bully
+Zaddy Zo
+ZaddyCool
+Zadek
Zadior
Zadok
+Zae
+Zae The Bae
+Zaenil
+Zaeres
+Zaf
Zafaron
Zaff
+Zafrot
+Zaga911
Zaggly
+Zagustin
+Zagz
+Zahard Army
ZahellGlarus
Zahellina
+Zahiirr
Zahnae
+Zahrani
+Zaion
Zairin
Zairx
Zaitsev
Zaixii
+Zaixyyuu
+Zakhary
+Zakje Pep
+Zaku Rs
Zakz
+Zala
+Zalaberto
Zalar
+Zalat
Zaleander
Zalen
Zalerae
+Zalotus
Zalphyrus
+Zalse
+ZaltyPretzel
Zalux
+Zam
ZamPeZu
+Zaman
Zamanr
Zameul
+Zami
Zamianx
+Zamicxus
+Zamirok
+Zammiy Slay
Zammy
ZammyHasjta
+ZammyJesus
+Zammys Flame
Zamorak
+Zamorak 61
+Zamorak Book
+Zamorak Tome
+Zamorak808
+ZamorakBrews
+Zamorakz
Zamorangue
Zamorizzle
Zamowrecked
@@ -25897,225 +53420,461 @@ Zandous
Zane
Zanfew
Zanfis
+ZangKeera
Zangola
Zaniels
+Zanimoto
Zanithic
Zanity
+ZannyBatsbak
Zanryu
+Zans
Zansus
Zantaril
Zanwk
+Zanzu
+Zaom
Zaon
ZapWasTakn
+Zapah
+Zapatos
+ZaphiasTM
Zaphyan
+Zaphyrim
+Zapii
Zapio
Zapky
Zapleno
Zapletics
+Zappaforever
Zappman123
Zapppy
+ZappyLand
+ZappyWabbit
+Zapsticle
+Zaque
+Zara Mobile
Zaraffa
Zararod
Zarasth
Zarathos
+Zarchonias
Zardee
Zardua
+Zarf
+Zarfa
+Zargole
+Zariah
+Zariky
+Zariser
+Zarke
+Zarkh
+Zarkino
Zarkoz
+Zarley
Zarliona
+Zarmos
Zaro
+Zaro M
+Zaroki
Zaros
+Zaros2k
+ZarosCorrupt
+ZarosRex
Zarosadomin
+Zarosian Rat
+Zaroux
Zarov
Zarpedon
+Zarrix
+Zarude
+Zarvern
Zary
+ZaryteKnight
Zasi
+Zasilus
+Zastava Ak47
+Zastavo
+Zatailex
Zatch175
Zathul
Zatom
+Zattix
Zauberbiest
+Zausbaus
Zav555
Zavaren
+Zavikk
Zavilia
Zavinor
Zavorak
+Zavvia
+ZavylonCG
+Zawro
+Zawts
Zaxbys
Zaxcord
Zaxm1
Zaxxxsoldier
Zaza9119
Zazian
+ZbraCakez
Zbychu
+Zch
+Zcj
+Zcu
+Zdawg
+Ze Golo
+Ze Own
+Ze Punheteir
+Ze Ubernoob
ZeOblitz
+ZeProx
+ZeQuYaa
+ZeZienMaar
+Ze_balla
Zea1ous
Zeal
+Zealandra
Zealea
Zealicious
Zealoe
+Zealous Love
+Zeals Max
Zeather
+Zeb Slays
+Zebak
+Zebak Acid
+Zebaks Jugs
+Zebedank
+Zebede
Zebest605
Zebras
+Zebs main
+Zebs scuffed
Zebu
Zebuck
+Zecca
Zechuchith
Zect
+Zed7
+Zed_11
Zedanko
Zedar
Zedd
+Zedd UwU
Zedd180
Zedek
Zedirex
Zeds
+Zedz
ZeeAyyBee
ZeeEL
+ZeeZeeZee
Zeebers
+Zeec
Zeedith
+Zeehox
+Zeeke
Zeekheart
Zeelmaekers
+Zeemoee
+Zeeny
+Zeeon
+Zeep
+Zeepra
Zeerkel
+Zeeshan
Zeeshan01
+Zeeuun
Zeeuws
+Zeeuws Tuig
Zeeve
Zeeyk
Zeezki
Zeffe
+Zefrank
+ZefyX3
Zegetable
+Zeh Zimah
ZehThijs
Zehbu
+Zehf
+Zehiret
Zehv
+Zeilex
Zeinovyah
+Zeious
+Zeitgaist
Zeithex
Zeken
+ZekimusPrime
Zekje
Zekkels
+Zekley
Zeko01
+Zekrom
ZelaooReturn
Zelatrix
+Zelcano
Zelcode
Zelda
+ZeldaHaxor42
+Zeldamen
Zeldaza
+Zelle Me GP
Zelnite53
+Zelroy2
+Zelten
+Zelzoy
+Zemiak
+Zemie
Zemix
Zemmy
Zemoko
Zemps
+Zemyrrah
+Zen Moments
+ZenBtw
+ZenRaidz
+Zena96
+Zenathrius
+Zenci
Zenearys
+Zenemz
+Zenez
Zenfor
+Zeni Master
Zenithina
+Zenitsu
+Zenium
Zenki
+Zenki RS
+Zennyte
Zeno
+Zeno Pho Bia
+Zenoce
Zenpep
+Zenqii
+Zenqs
+Zenrrrr
+Zensai
+Zentae
Zentra
Zenytum
Zenzulo
+Zeon Clone
+Zeorun
+Zeos
Zeoth
+Zeou
Zeoxr
Zeph
Zeph0s
Zepher138
+Zepherahs
+Zephere16
Zephrinne
+Zephxa
Zephylius
Zephyren
+Zephyrhills
+Zephyric
Zephyrot
Zeplin1
+Zeppelin IV
Zer0Requiem
Zer0Tw0
Zer0mancer
ZerUmh
+Zeratul259
+Zerbeh
+Zerberous
+Zeref
Zerendipity
+Zergonaut
+Zeri0n
ZerkByDay
ZerkInDaYard
+ZerkMeOffPlz
+Zerkeee
Zerker
+Zerker fe
Zerkism
+Zerkom
Zernag
Zero
+Zero Cals
+Zero DeNiros
+Zero Saber
+Zero Scope
+Zero Suit
+Zero Talent
+Zero Tol
+Zero Zeros
Zero92922
ZeroAltruism
+ZeroBodies
+ZeroCake
ZeroDignity
+ZeroFox8576
ZeroGravity3
ZeroHour
+ZeroHpAgain
+ZeroTheKing
+ZeroValor
ZeroXJD
ZeroZero
Zerobeat
Zerodareborn
Zeroeagle
+Zeroen
+Zerololz
Zeroly2
Zeroswift
Zerq
Zerrilis
Zerro
+Zersers
+ZertUwU
+Zerx
+Zesima
Zeskater
Zesty
+Zesty Bvrnsy
+Zesty Senpai
+Zesu
+Zet_RS
Zetani
Zetardo
Zetore
Zetreker
Zetrus
+ZetsuboSekai
Zetsubou
Zetta
Zettty
Zeug
Zeus
+Zeus Jr
+Zeus07
Zeus09
Zeusvdl
+Zeven
Zeveria
+Zevlim
Zevosh
Zevvo
Zewx
+Zexma
+Zexra
+Zexual
+Zeyora
Zeyzima
+Zezaroth
Zezergz
+Zezima Simp
+Zezima W q p
+Zezimaislife
Zezimas
Zezime
+Zezus
+Zezynx
+Zfg Fan Girl
Zfsalt
+ZgeL
Zgrite
+Zgzi
Zhacarn
Zhaoyl
Zhava
Zhinky
Zhiqth
+Zhonny
+Zhops
+Zhotaro
Zhqith
+Zhuxiong
Zhuzh
Zhykiel
ZhyloFlex
+Zi P
+Zi1y
+ZiNikor
Ziauze
+Zick Licker
+Ziclone
Zidi
Ziega
+Zierikzee
+Zigfrid
+Ziggey
Ziggurattus
Ziggydog7
+Ziglar
+Zigory
Zigzagoonfmt
Ziicatela
+Ziidz
Ziinc
Ziincor
+Ziisus69
+Zijwiel Iron
Zikry
+Zil o
Zilandraa
Zilanthra
Zilex
+Zilexion777
Zilly
ZillyLovesMe
Zillya
Zilpha
Zilvia
Zilyana
+Zilyana Gr
+Zilyana Jr
+Zilyanas Dad
+Zilyarma
+Zim
Zim8
ZimFlare0003
+Zimak
+Zimaterasu
+Ziminiar
+ZimnyZielony
+Zimpathizer
Zinc
Zinct
Zing
Zingg
Zinixon
Ziniy
+Ziniyy
+Zinnialexis
Zinogre
Zinoto
+Zinryia
+Zinshaw
+Zinsmaster
+Zinsmeistro
Zioh
Zion
+Zion Fire
Zioo
Zip Lynx
+Zipacna
Zipit
+Zipm
Zipo259
+Zipp0Fluid
Zippeeee
+ZipperTrout
Zippy909090
Zipsap
Ziqs
Zireal
+Zireb
ZireneV2
Zirkisi
Zirn
@@ -26123,74 +53882,143 @@ Ziron
Zirrub
Zirvzaa
Zisam
+Zitaya
+Ziti Sauce
+Zitri
Zittte
+Zivile
Zixcon
+Zixon
Zixxen
+Zixxty
Ziyai
+ZizZazZuz
Zizarius
Zizou
Zizzle
+Zji
+Zjoelini
+Zkilrr
+Zkyui
ZlGGEY
ZlNQK
+ZlZl
Zlap
Zlatan
+Zleek
+Zleepeey
+Zlig
+Zlomble
Zlote
+Zlug
Zmancool
Zmanonthego
+Zmazek
ZmaziWasHere
ZmbieShepard
Znked
Znorox
+Zo e y
+Zo m B
+Zo nk
Zo7al
Zoak
Zoanthids
Zoaxyl
Zobbe
+Zobny
Zoca
+Zoca BD
+Zodden
ZodiacIsTed
Zoeh
Zoet
Zoey
Zofad
+Zofu
+Zogggii
+Zoggy Marley
+Zogloid
Zogurk
+Zohi
+Zoik
Zoil
+Zojun
+Zok
+Zoka
Zolarf
+Zolaris
Zolcome
+Zoli
+Zolkaria
Zollo
Zolon
Zolrisma
Zolruh
+Zolt09
+Zoltan Uk
Zoltanious
+ZolwoZ
Zombah
+Zombi Zack
Zombie
+Zombie Cody
+Zombie Zack
Zombiezparty
+Zomboide
+Zombrons
Zomi
Zomimi
+Zomp
+Zone Red
ZonichGG
Zonir
+ZonlyAlex
+Zonnedael
+ZonoxRS
Zonse
Zonum_Knight
+Zoo Orleans
+Zoo scape
+Zoobloo7
+Zookly
+Zool
+Zoolander
Zoolander011
+Zoom
Zooming
Zoommaster97
+Zoonix
+Zooted
Zoppy
Zorb49
Zorblet
+Zorcar
Zoret
Zorg
Zorh
+Zorie
Zorin
+Zorkath
+Zorkz
ZornDurag
ZoroRoronoa
Zorolith
+Zoros son
Zorrac
Zorrita
Zorros
Zoryov
+Zos
+Zosc
+Zossssssssss
Zostok
Zoteize
Zotetz
Zoudrex
+Zoumok
+Zouns
+Zown
Zowski
Zozma
Zozo1232
@@ -26198,54 +54026,116 @@ Zpizz
Zqw6
ZrankerF
Zrax
+Zriv
+Zrr
Zsedcx
+Ztneff
+Ztxch9
+Zubaritis
Zubora
+Zubsolv
Zuburus
Zucchini3
+Zuchini
+ZuckZyZock
Zucu
+Zuel
+Zuened
Zuggster
+Zugmah
Zugs
Zuibbi
+Zuiox
Zuipe
Zuipen
Zuipvlek
+Zuk
+Zuk Bot
+Zuk Cucker
+Zuk Meh Off
+Zuk My Toa
+Zuk Sucks
+Zuk a Duck
+Zuk a Zik
+Zuk at 1 Kc
+Zuk my Tzok
+Zuk was here
+ZukDisLilZik
ZukMadic
+ZukMyAss
ZukOrBust
+Zukala
Zukmos
+ZukoTheMcoon
+Zul-Bot Farm
+Zul-tul
+Zulandra
Zulax
Zulex
Zullander
Zullrah
Zullu
+Zulrah Goat
ZulrahSlave
Zultora
Zulu
ZuluLippen
+Zum
Zumaz
+Zumaz Her
+Zumb ass
+Zumwalt
Zundaddy
Zundix
Zunkrah
+Zup Rap1
+Zurad
+Zuramaru
Zurcal
+Zure Kut
Zuremate
Zuriel
Zuriel321
Zurius
Zurkzes
+Zurlofix
+Zurn
+Zurper
Zurqos
+Zurthur
+Zurvan
+Zurxas
Zuubi
Zuuqe
+Zuurkast
+Zuv Arik
+Zuviel
+Zuwy
Zuxar
+Zuxf
+Zuxi
Zuzad
Zuzas23
+Zvg
Zvirbulis
+Zvotne
Zw3d
Zw4rtjoekel
+Zwabba
+ZwangerePapa
Zwanneke
+Zwartbeast
Zwartbest
+Zwarte Iron
+Zwarte dief
+ZwarteAapMan
+Zwartehand
Zwef
ZweiBeer
Zwei_02
Zwerky
+Zwette Draak
+Zwieber Vos
Zwiers
Zwift13
Zwijg
@@ -26254,65 +54144,152 @@ Zwimps
Zwinter
Zwlr
Zwwwnbeast
+Zx J3SS3 xZ
+ZxFe
+ZxbeeRs
+Zxeon
Zxirl
Zyad
Zybes
+Zyck o
Zydecolarry
Zyer
Zyev
Zygalo
+Zygameux
Zygy
Zykaite
Zykonic
+Zyl
Zylco
Zyleta
+Zyliana
+Zyllami
+ZynGardener
Zynerith
+Zynnocent
Zynthe
Zyntixero
Zyper89
+Zyrem
+Zyrinth
Zyrok
+Zyrona
Zyrpex
ZyruviasDied
+Zyunkko
Zyxla
Zyxuz
Zyyra
+Zyz
Zyzziima
+Zyzzy
+Zyzzz brahh
+ZzJ0SH
Zzanoss
Zzayo
+Zzuma6
Zzyzzx
Zzzax
Zzzd
ZzzzG
+[#OA0VWICQ8]
+[#SG1JGUXTW]
+_Untrimmah
+_gria
+a Cairn
+a Dang
+a Mikey
+a Miko
+a Venenatis
+a Venny
+a Weeman
+a bean
+a black cod
+a casul
+a cooky
+a cool bug
+a eu
+a f o
+a gentle sir
+a little sad
+a ndo
+a p p l e
+a pathetic
+a pb
+a sad kraken
+a sad waffle
+a sk y
+a the sniper
+a tnQ
+a trash cat
+a zo
+a-x51
+a07
+a1liez
+aDome
+aDuNaz
aGamerGaming
+aGamingDad
+aGlasgowGrin
+aGoober
aIIfather
+aKSU nPC
aKash20i3
+aMiniDude
aMiniGorilla
+aMiniHitMark
+aNERDYsloth
+aNStarFury
aPinkBunny
+aPinkKitten
+aShavedLlama
aSnowTiger
aSunnyPotato
aSwiftyBoi
aThoms
aTinyChimp
+aVolk
aWildSeal
a_SaladKing
+a_duncan
+aa noob
+aaah
aaahChu
aalucard
+aanmaken
+aanwaz1g
+aaron_diaz
aaronparkerr
+aatudoz
aaty
ab0u
+aballer09
abbruzi
+abbruzie
abcz
abdi
abdimajiid
abdulllah
abis
+abk144
abni
+about blank
+abqve
abra238
+abrakadabraZ
+abray
+abu hassani
acceleratism
+ace375
acecoffee2
acerkush
achillies
+achillies zy
+achinadav
+achterkamer
acidshit
+actionbob
actlater
actofvalor24
acuile
@@ -26320,41 +54297,78 @@ adPEXtwinDnG
addaaam
adem6792
adizzle444
+adogg0323
adopt
adrian
adsdadasdgtd
+adsh55
+adue
adul
+adul t
+advia
+advies
+advit
+aeej
+aeggefar
aejfd
aenpaa
aezthetic1
+afatslug
aferraro
+afh
+afk 2 2277
+afk a bunch
+afk n doc
+afkayscape
afkdontattac
afkingRS
afkvsehp
afkwarriorzz
+aflk
afraid2boss
afraid2boss2
african
aftrthxght
+afzi
agent_of_fox
+agentdd_4
agfdbzIM
+aggain
agic
+agieee
agoraphob1a
+agrovation
agsmanpro11
+agytagtyewaq
+ah oh uh
ahahah
ahippi3
ahokusa
ahrlhyrslylh
+ai eye q
ai3i42Iaaskl
+aiden m8
aidibohx
+air strikes
+airborn frog
aito
+aitoBeruna
+aiwodas
+ajiffniff
ak47afghan1
+ak47ags
akaExploit
akaNorman
akae
akbennyboy
+akeep
+akidnamdjrmy
akipf
+akirahokuto
+akkha kum
akleb
+akq
+akspew
aksta
aku aku1212
al0x
@@ -26362,82 +54376,139 @@ alabasta1
alabthemoola
alans
alaric
+alaxam
+albersson
albiguerra
albioon
alchetraz
alders0n
+aldi warrior
aldrichmax
+aldrichs
alecbeats
aledank
+alexjberroc
+alexlangman
alexs99s
alfafa20
alfhershey
algotrader
+alias ilias
alic3
alimpweenus
+alipandh
alittlepig
alkaizerx
alkkis
+alkkis pk
+all en
+all love man
+all to 200m
+all4four20
+allcaps
+allebylund
+allenbb3
allez
allluminati
+allomax3
allora76
allowitplz
allzeras
+almoggar
+alpacathund1
+alpacka toke
alpalmchal
alpha
alphabosss
already
also
alsobosspros
+alt f4 gn
+alt maxed
+alt rite
alt0n
+alt2kil
+altairanezio
altehnub
altforusa
altiarblade
+alvexn ltu
alvinhic
+always win
alwayscurius
alwrighty
+am sam
+am so sleepy
amagna
amay
+amfoine
+amheeh
+amikiri
ampharos61
amputated
anasacez21
ancapistan
anchor
+anchor seb
+ancientskye
andhetakes
andhim
+andmcadams
andreable
andriuttt
+andtony
+andynew2007
anelebar
+angel995
angeline1711
angrydump
+aniki chan
anime
+anime member
animeF3tish
animegirl73
anizan
+anklez
ankou4smokin
annie
+annie r u ok
+annni
annull
anoldfatdude
+anon1606
+anotha 0ne
+another gay
anti
antibully
+antituuri
antivaxer
antombomb
anttimage3
anxiousbeef
+any1
anygirls
+anyma
+ao
aocha
+aod retired
ap1ska
+ap3xOo
apacifist789
+apcays
apeman8731
apenzoon
+aperts
aphr0
+apikeppa
apina
apiph3ny
apou
appelkneuz
applee
+aqp frog
aqqqqqqqqqqq
aquafx
+araenel13
aratsanus
arcane
archyiop
@@ -26445,342 +54516,692 @@ arcvnaxiii
arcwriter
ard lad 06
ardazz
+ardy guardy
arengs
+arevles
arexmeister
arfih
argilah
+ari abdul
+ari shaffir
ariman22
+arkoudaphile
+armadyyyyldo
armyofkids
+arnr
+arocardo
arookie
+arouze
arreydn
arrowbob2
+arrows2ashes
+art possible
+artaax
artan
arteefact
+arth urr
+arthadeos
arthurdebart
+artist_60
+artizia
+artogoes
arvothepure
arzier
ascipulus
ascott1
+asdafsdafsd
asdasdasdf1
asdsdafsa
asedviss
asfand
ashster25
asian
+asianbunnyx
asibioass
+asidb
+asm
asmoooo
+ason jones
aspiraring1
asrdftgffdsh
+ass chance
+ass jiggles
assaultvests
+assbergerler
+assdrag
+asseaterbtw
assoffire
+astgferallah
asuhcuh
+at0
+atob7
atoma619
attaaM
attack2much
auditore28
audrey
+audrey horne
auma
+aus j osh
+aussieyobbo
+aut AT5
aut1st1c
autism
+autisticboiz
autumnbound
+av av
av8bgo
+avantoeftish
avewy
+avg Jake
+avg gov ee
+avg idiot
+avikntos
avmech31
avocabo
awple
+aww fk
+axeleebob
+axeli
+axetoons
axoblaster
axperson808
ay96
aydrian
+ayeetbix
+ayhank
aynull
+ayos ayo
+ayrball
+ayshinx
ayte
ayvz
ayyreynolds
+az3r bulbul
+azerke
azilim
+aziz8mohd
+azj
azura
+b a g
+b a l r a j
+b b o x x
+b eeg
+b enjy
+b ezos
+b i g s t
+b kuz
+b l u rr
+b oe
+b on ass
+b oo n
+b ooth
+b u l
+b ulba
b-ray29
b00ty
+b00tyw1zard
b0btehcool
+b0dybilder
+b0gadu
+b0nelesstofu
b0rn2grill
+b0urb0n_kid
b1ackcoxdown
b1apoody
+b2bpurple
b2bs
+b33 rabbit
+b39
b3cc
b3kiy
+b3rgo
b4Mb00B0NGG0
+b4iforget
b4nyluckypvm
b5 s4 0000
bIack
bIrkaoff
bLeatzker
+bMat95
bSteeezy
bVibin
bZabii
+ba1tti
+baIIs3
+baami
+babewatch
babstah
babugo
baby
+baby peb
+baby peba
babybuffalo
babygirl
+bacbacbacbac
+baccybaxter
backseatrs
bacodie
+bacroonX
+bad bee
+bad boy602
+bad british
+bad data
badalts
+badass1337
badat3tick
badcold611
+badderjari
+baddspella
+badger fan 7
badsadmac
+badtechnique
+bag milk
+bagans
baglokale
bahumat
baile
+baile y
baitmem8
+baj69
+bajadam
bajj
+bak3d bean5
bakareru
bakesome
bakkerbtw
+bakplaat11
balding
+balisongg
+balkare
ballenbak
+ballerbebbo
+balsson
+bam
bam-BA-lamb
+bambera2
bamfhitman
bamsi
banana
bantrok
+baraho
barakozle
+barcrestboy
bard006
bardj
+baritone888
+bark bark
+bark f0r 0ff
+barkirion rs
barkmeat
+baron nash
+barou
barry
+barrybacon
+barrysdad
barryslet
bartelbarel
based
+based af
+bash the rat
bashong
basic
basically
basiel
+basispiloot6
bassdrum
bassfortexx
+basspro76
bastukid
+bat flack di
batchela
batdog183
bates
batje vier
batseflats
+batterym1es
+battlebus33
+battleman36
battried
+baumannii
bawky
bawsi
+bawz zaa
+baywest
+bazjunior
+bbALL
+bbb
bbest
bblood
bbones
bboyalec
bbtarget
+bbully
+bc22
bcguppy
+bck2kickass
bcollier94
+bdb
+bdw reborn
+be one
+bean flick3r
beanbag173
beanieton
beanskunk
bear
+bear66881
+beard3djesus
beardZy
+bearia
+bearitimus
bearjack
+bearplusiron
beatthebot
+beaver 5
+beaver 9
+beaver win
beaverboy47
+beavitte
bec0me
+becarius
+becca boooo
beckles96
+bedabin247
bedburn
bedtime
beech
beeelake
beenus42
+beer sweats
beggar
+behaardezak
belanin
belgibeer
beliver96
+belizianos
bellatarius
+bello0
+belub
bemw
bendy
+bengnomonkey
+benisbutts69
benjabii
+benjimin
benjiswaggod
+benlovesyo
+benrj91
+benroxo
bent
benyatta1
berd007
berkut87
berrytrials
+berseke1
+berserkbear
+berserkku
bertucci2575
berzerks
+besouley
+best bojji
+betleejuice
betonimuna
+betty wu
+beverlly
beverwijk
bevh
+bevsteve
+bff
+bfxrturbo
+bg s
+bgs ownez
+bhicks
bhuffs3434
+bibilush
+biccc
bicycle666
+bidls
bidof
bieltanman
+biffsy
bifket
+big bad jon
big bojangle
+big gay ig
+big gmbino
+big head
+big man shaq
+big rart
+big snood
big tree 63
+bigbadheskey
+bigbig horse
bigbigbone
bigblade28
bigbluntbrnr
bigbologna31
+bigboybarlow
+bigboybrips
+bigboymansir
+bigbud
bigchoocher
+bigcuff
bigdbandioto
bigdoggtrock
+bigdoinks42
+bigg bud
biggest
+biggest fan
+biggiefries7
biggledoinkz
biggreenbush
biggs
+bigjuicybutt
bigl
+biglenz
+bigmoney jim
bignipnik
bigonevs
+bigotslayer
+bigpkz
bigpompom
+bigreddogV2
bigschlong33
bigsee
bigshrub45
+bigsnail
+bigspick
+bigsugoi
bigtuner
bigz4p
bike
+bike trail
+bilbsay
bilet92
bilfey
+bill one
+billbosaurus
+billsta46
billy
+billy g0at
+billy mayne
billy5454
+billyj0e
billyjoewo
+bilo xd
+bimblebunk
+binaev12
binch
bincho420
bindi
bingels
binkie
+biolemonhaze
biozahard
+bipiee
bipoc
+biq pp gamer
+bir d
birbeon
+birdieputt
birkki
+bisp
+bisse
bitten by
bitter
+bitter fruit
bj0rne
bjassen
bjpc
bjuti
+bkguytd6
+bl00d twinz
bl00dShaman
bl0wMyPlpe
+bl0wdakushh
+bl4ckdelt4
black
+black coffee
+black cum24
+blackbelt
blackburrito
+blackedmarko
+blacksshad0w
+blackstyl579
blackzranger
blade2k9
+bladee
blaktraksoot
+blame war
blankownz
blarbydoo
blastmaster6
+blawblaw
+blazar58
blaze59
blazed
blazekin
blazertrail4
+bleenkie
+blessn
bleu
+bleu kayn
+bleubeard
bliksem269
bliksuiker
blind
+blind idiot
+blink 1 8 2
blinkforlife
+bliss
blky
bloQQe
blobaman
+blockteleing
blonkie45
bloo37
blood
bloodhound96
bloodrain202
+bloodredd
bloodtheatre
blothbather
+blowmebuddy
blubbystr699
blue
+blue in vain
+blue max6
+blueTofu
blueWagonMan
bluebean2596
+blueberry624
+blueberrydev
bluebop
blueergon059
+bluetrane
bluewahfull
+blunt tank
+blurite boy4
blutorch
blvckstvrr
blynaas
+bman5
+bmeow
bnff
+bnndt
+bnqy
+bo bby
+bo nk
bo2Lawrence
bo3rke
bo4r
+bob bob bob
+bobby ross
bobby45153
+bobbyb727
bobbyitsme
bobbyjoe
+bobbytronx
+bober vvittu
+bobfish66
+bobness
+bobondowski
bobsushi6396
boer
bofflepopper
bogie297
+boglad4ket
boident
+boinkerton
+boke smowls
+boksepoeper1
bollocksed
+boltwitdick
+boltzy
bombadinski
bombycrahan
+bon4ri
+bonSwole
bond
bondalorian
+bonderoeven
+bonelessrice
+bonfire
bongohonkers
bonkbonk
bonna1994
boo0ty
+boob boob
+boob nut
boodje1993
boofablebass
+book of ra
boom
boomboom
booogieoogie
+boooosh
+boorito
boosbear
+bootn98
bootylips
+bootyters
boratas13
bored
+boring hobby
born
+borpxatu
borsi
boss
+boss hogs
+bossboy420
bosscat56
bossdemon88
+bossdog99
+bossedit123
bossy momma
+bostonbb2g
+bosway
bota2
+botchx
+botilabaca
+botleFluff
bottleo
+bottn
bottomfeed
bottypedpsw
+bounsn
bouquetboy
bouwjaar1990
+bouzouki
+bowfa bob
+bowfaaddict
bowl
+bowl loaded
+bownd
boxofbears
+boxtrapgod
boycie420
+boydi
+boydt
+boyuniverse
+boz pwr
boze
+bozo
+bp9
br0wnardRS
+braap poster
+bradrian
bragegutten
brain
+brain rotted
brainbusterr
+branderx gim
+brandom lol
+bratnt
brawling
+brb cigy
bread
breakingood
brecht181
bree
breeze
+brejch
+brekitutta
brett
+brett 69
bretthomas3
brettiz
+brettjournal
brettmanx7
brettrae
+brew bar
brewi
brexit
+brian285
+brian289
brianknight7
briareus
brics
bridder
bridgeport
brika
+bring ya ass
brisingr vin
briskyhot
+brixs22
brizzle
+brky
+bro its hamz
+brock soup
broetie
broker
+bronson99
+bronzelvl
bronzenohkie
brooskii
+brotha in Ra
brotherkjell
brothervoid7
brown
brownell
brownjesus
brtsbrg
+bruh
+brushy1
brutals
bryike
+bsavs
bsct
+bskiller10
+btc
btd6king
+btw Im Nakey
+btway
+bu bla
buIberpikmin
bubbakush
+bubbith
+buckethead12
bucketnipple
buckul
budabaii
@@ -26789,47 +55210,108 @@ budge1
budhato
buds
buff
+buff T O N Y
+buff boobies
+buff outlaw
+bug salesman
+bugeye freak
bugsijs
+buhm
buldog89
+bulk up
+bulpster
+bumbler
bumpyD
+bumpywalnut8
+bunchface0
+bundun
bungaku
+buornos
+burakaflocka
burlyman
+burnedpotato
burnindank
burnsalinas
+burntfish55
+burntjar
burt
buryafriend
bushkada
+bussi eater
bussmandrew
+busta bunny
butlesha
+butt boobies
+butt chug
+buttercord
+buttonbags
buup
buurman111
buurtvader2
buwatt
+buying ai gf
+buying girls
+buying sloth
+buzzin
+bwaby
+bwana69man
bxhxdir
+bxmbi little
+bxther
+by Juddy
byEmilsson
+byll
byrny
bzerk
+c a b l a y
+c bro
+c greyson
+c h u c kles
+c hainz
+c j t
+c m l
+c o 1 a
+c onorr
+c rompt
+c ubic
+c xx zz c
c-ross93
+c00lbeer
c0vid
c11ntz
+c3h8 seller
+c95
c9hype
cBold
cDive
cFraze
cMehuu
+cMoney62
+cRunX
+cT Kura
+ca mel
caaaazaaa
cache
cad5112
+cadeano
+caesarsantin
cafedenbas
+cagasaurio
cage
cagesitter
caiomhinnn
cajzbi
+cakemusclez
cakepillows
+cala mity
+calamity meg
calgore10
+calisme
call
+call me Q
callbackc4ll
calliott14
+callmedaddie
callmeqel
callmeson
callum23394
@@ -26839,148 +55321,291 @@ calvo
camberland
cameindamail
cameliorate
+camellia
+camognome
camrbidge
+can o fish
+can smoker
canadian
canalope
cancer
+cancer ruin
canman794
+cannot pvp
cantgetdrops
cantsoloraid
+canyon crab
+cap byakuya
cap3r
+cape kraken
capinkiller1
cappin
captn_dabbin
car oussel
+carbonclock
carefree
+carltonking1
carlwalter
+carmito999
+caronita
carrotepic
carrus65
+carti stan
+carx
casadri
cash pls
+cash19400
+cashcache
+cashflowgwap
+caspar O8
casperium
+cass
cassa
+cassidyz
+cast iron 99
+cat goose
+cat the rat
+cat yo quack
catJAMgif
catdog183
+catdog184
caterpie
+catgirl41
catlice
catlover68
+catmummy18
cats
+cats go meow
catsandogs
catsarepeopl
catsntatts
+cattierjam
cattsts
causey
+cave zizil5
+cawn man
caykk
+caza
+cb0ndy
cbbr
+cbf maxing
+ccc kyle
ccc kyle BTW
+cccccc
+cce
ccoinstar
ccvtw
+cdryz
+ceef
ceerial
ceh9
+celery dog
+celestial177
celliott94
certifythat
+cestlez
ceus
+cgmirin
+ch oi
ch00s3n
chach47
+chadduker
+chadmaro
chadsmurfin
chaffedlips
chakra
+chamby
+champagnedon
champinjon
champions
champrocks
chamskillz
+changa nndmt
changemyrng
+chao keng
+chaossarim2
+chaoswizzard
+chaps on
chargnar
+charliety
charlyzard
charred
chat
chatandinan
+chats 0ff
+chavito_mobi
+chazsti
+cheapscape
+cheddaphile
cheekraider
+cheenos
cheese
+cheese nuts
+cheese tots
cheesed
cheesesmoka
+cheesesnake
+cheesie odst
cheesy05
cheetboyx90
+cheetodust
cheffffffa
chemistmike
chemistryphd
+chenswok
chent
+chenzoh
+cherenkov
+cherrygrove
chessboxing
chewbacca814
chewybeaver
+chi huahua
chickenarise
chickenbyrd
+chickennug74
chicknsoup3
+chicknugets
chicom
+chicom shill
chidavantlez
chie
+chie na wei
+chien belge
+chigas
+chilli
chillimayo
chillscape99
chillummen
+chimney15
chimonas
+chinchinchin
chinkbox
chinorondon1
+chipndale
chirspls
+chisssa
+chlodotexe
+chnged
+chobby bong
+chochise
+chodell13
chogey
chokemepleas
chokemysword
choobocka5
chook1e
choppers
+chopsbwana
+chorkin
+chr0nic k0
chris
chriscrossz3
chrisdude
+chriskr9
chriskys
christimgood
christinet
+chronicwax
+chuI2ch
+chubbybeagle
chubysack
+chum god
+chumboyee
chunkydaddy
+chvi123
chxpo
+ciggen3
+cigonusargas
+cimmins
cimsoK
+cindur
+cinekmiszcz
cinim
circa445
cityless
+civo
cjim
+cjrr3
cjskillet
cjuul
clabby
clac
clancy272
+clangy544
+clara ravens
+clardiiii
claryzz
class1k
clayylmao
cleanhell
+cleann
+cleanscape
clevesbch2
click
+click boss
+clickin boss
+clickrtraind
+clienting
cliff
clifsideGang
+clig fish
+clini
+clippng
+clodoaldo23
+clogs please
closeline194
cloudroamer
clouds
+clownViking
+clownsrus2
+clownzeta
+clrjones964
clubsammich
cluemaster7
+cmer
cmiite
+cmiuehye
cml852
cmm6364
coatria
+coats
cobrafrost
cobraslyer
coco
+coco coconut
+cocoa
codga123
+cody curls
+coffeechuno
coffeemug91
+coin btw
+cojestkuwa
colafanboy
+colb 45
coldumber
coleeeeee
colekay
+colemak
+collect butt
collessin
colon
colt
+coltsfan1287
+coma afk
come
+come in bum
commandrsnow
+compact cat
+concert
conig
connie
connor420sit
+connorkwl
+connorosrs
containment
+content days
+continental
contra145
conww
cookiedunker
@@ -26988,59 +55613,118 @@ cookiekill
cookieman
cookys
cooldude2845
+cooleodotty
coolgasje
+coolish funt
+coop ananas
+coozin_killa
copy166
+cor tapijt
cordnog
core63
corgi
+corgi fan73
+corgsterr
corn
+corn8holio7
+cornstarchII
coronel
coronieverus
corps
corpse
+corpslave18
+correctmymis
cosec
cosineeee
cosmic
cosmicphetus
+coszzyy
+council pops
+count beck
+countjupiter
covid
covidconvict
covidsurvivo
+cow abandon
+cow cede
+cow20
+cowpigj
cowpker4life
cowpoo99
+cowpuncher19
+cows
+cox finisher
+cox for cash
coxchambers
+coxfcksme
+coxnass
+cp5
cpenn
+cpt-cujo
+cr ai g
+crZbY
crab
+crad le guy
cradleguys
+crag slayer
+craigbr-1994
craigobaker
+craigs cool
craj
+crajan
crannerz
crash
+crayfish1
crazecanuck
crazycow913
+crazyloLer14
+crcsofkrks
+creamiboi
crenux1st
crep
+crevebach
crew-z
+criddd
+crimsonlily
+cringis khan
+crinkes
cripsystrips
+cris7ronaldo
+crisVao
+crisp damage
criticism
critiode
cross
crownchyfled
+crppironman
+crueship
cruisingmap
+crumble
+crunchyfrog6
+crunchyrolll
crushsquid
crustymcfk
cruuton
crybcdry
+cryme wave
crypto
crystalbluu
crzybrady
cskt
csramsus
+cstk1Ng
ctmv
+ctq
ctraltdelet
+ctsRasta
+cu ck
cub1c
+cubbear
cubezor99
cucked
+cumstrosity
cunnys
+cupma
cupofpeepee
cups
cursed_angeI
@@ -27048,43 +55732,94 @@ curt
cus345
cuscusrevers
cute
+cute lil elf
+cutekitten7
cutemuppit
+cutepenguin9
cutetoeluvr
+cutie cat24
+cutie frog
cuvae
+cvbj
+cvl
+cwazi
+cxir
cyanicide
cyberdunk
cyberyux
+cyi
+cynth ia
cyxxa
czaroiemao
czechit
+d arb
+d e v o u t
+d io r
+d urrin
+d y lan
d00she
+d0g eat d0g
+d0gz
+d0nnie-d0rk0
+d0rq
d0ugjudy
d1sh
+d216
+d2n
d3mot10n
d4rkk
+dDillyDilly
dEAd0dhz
dEdjamaL
dXLeamXb
da jiin
+da ph
da6god
daMteG
daPeanut
+dab 710
+dab face
+dab marino
+dabaig
+dabbtheslab
+dabilitation
daboiz
daboo420
+dabs n smoke
dabtchel
+dad bad
+dad tree
+dadcoma
+daddds
+daddy sharky
daddyfred
daddys
daddywaluigi
+dadfcker69
+dads bulge
+dadsbelt
dadsilou
+dadson23
daedbent
+daft plonker
+dagens mand
dagg3
+daggry
daghostwoman
+dagond0rk1
+dahhyunnee
dahlinho
+dahlukeh
dainiux2014
daisyfletchy
dallas
+dallee
+dalunk
+dalvik
+damage222
damo332
dan73
+dan_hua
dance
dancol00
dandy man
@@ -27092,51 +55827,89 @@ danielccm
danielfanacc
dank
dankburgers
+dankin606
+danklingt0n
danliciouso
+danny4490
dannytjuhhh
danthebankid
danzing
+dapipelaya
daprincess21
+daredevildog
+daretodair
darigondeath
darius_v_2
dark
+dark binding
dark hays
dark0hawk
dark5pac3r
darkandrew7
+darkanimal86
darkclues
+darkcyco
darkgirl79
darkhex0
darkjustin54
+darklordc
+darkmagicdad
darkness
darkstagx
darkxaotik
darkyChao
+darranegobli
+darranekarhu
+darranekives
+darth gainz
darthbuddatv
darthv102
+darvan
+dascarytaco
dasor012
dataenz
datakrash
+datalogi
datboi2456
+datstonerlal
datweekaz74
davadof
daveb123
+david442p
+davidpain
dawaj
dawningofwar
+dawnsend4
+dawocar
+day of dog
dayoh
+daysack
daystar
+daystar 0-0
+daz 11
+dballl
dbau
+dbopp
dbow4pking
dbstf94
dc22000
+dc22000_1509
dcPain
dcfgs4
+dcing always
+dcross9999
ddSyndrome
dddvlot
+ddr
ddsfornubs
+de Fe Dad
+de em tee
+de metro
de00
deZoet
+de_rono
dead
+dead tee
dead2Mfarmer
deadazztec
deadcentred
@@ -27148,69 +55921,157 @@ deadmeadow
deadskiller7
deadwildyXD
dear
+dear sleeper
+dearlola1
death
+death to wdr
death0183
deathax10
deathchecks
deathe
+deathlifiron
debbie
+deci m8
deciphered
+declaw3d
+decoy110
+ded R N G
+ded pixels
+dedarec
+dedcell
+dedfin
+dee2801
+deeezey
deep
+deepbowlz
deeptechouse
deesnertz
deetuu
+deez ntz
+defblacklawl
+defender3355
defenderCX
degie
degraded
degryser
dehula
deivvn
+dekane
deketamingo
deku
delboy1964
delete
+delete from
demaguz
+demerstrand
+demon ssss
+den n y
dennyispro
densenuggett
denver
+denver nugs
denzarr
+departusa
deperni Jr
+derdepoging
derrybarry
+des9re
+deserved pet
+desksitter
despotroast
dessverre
desteezdubs
+detnia f
+detrater mi
+detzy detzy
+deuce
+deuzzz
+dev rat
devils
+devilz ashes
+devious man
devonjt1
dewsh
dexaur
+dexless 4eva
+dfkjgkjfdgj
+dfordumm1ed
dftba
+dg eco
+dgndfgjnmfdh
dgro
dgwiD
dharokjonsin
+dhe
+dhl
+di Trevi
+diK
+diabolicdth
diamanda
+dibdabber33
dibdibdibdib
+dickchair
+dickenbals
+dickfield
+dickin
+didak
+diddy420
+didnt rwt
dids
didugetrekt
+dieHosen
+dies at zuk
+dietc0ke
+difjnuee
+difluenz
+digigrind
+digimonOtis
digthat
diguper
dikke
+dikke vogel
dikorbut
+dilaudid dad
+dilbertt
dill
+dill picklez
+dinklebrah
+dinwy
dioshka
+dirt box
dirty
+dirty rat420
+dirtyman
+dirtyydan
+disc o
+disco sminny
disdudsauf
disease
disrespected
distracktion
diti
+diu nay lomo
dive
divibee
+dixon butts
+dizma
+dizzee l0l
+dj en sander
+dj poolboi
+dj roblox
+dj1111
dj_khaaaled
+djawns
djerfen
+djfistingodx
djhonnyc22
+djk1168
+djm 0813
djschaum
dkb15
dkirk
+dlaldus
+dmersaregay
dmgx
dmh3464
dmmeguy
@@ -27218,170 +56079,340 @@ dmmskuhled
dmolishall
dmorgzz
dmxbutwhite
+dnb demon
+dnd5
+do o d
+dobiz
+doctorbeefus
doctorkrysis
doctorstig
+doeby1
doesnt
+dog dog baby
+dog rs
+dog yum
dog22
dogGoesMeow
+dogluvr42
dogofrivers
+dogongod
+doing time
+dokus
dom1nation97
dominicpm008
+domiuxas52
dommegekke1
+don paro
+don3tsc3m
donaldsocool
+dong bone
+dongiebong
+donkeykong2
donmaners
donnyr2hcim
+donohuey
dont
+dont eatass
+dont relax
dontiane
dontpickme24
+dontsmokemid
donzy
doobie8
+doogleweed
dookie
+dooknukem3d
doom
+doomcat67
doominizer
+doomsiclepop
doorbel
doors
+doot scooter
+dop
dopa
+dopey smurfy
dopeyaf
+doris negra
dorkSine
+dormanth
+dorschbag10
+doteslintrrc
double99
+doublecross
+doublegulps
+dox
+doyc15
dp23wnnabe
+dpi
+dps7
+dr crabman
+dr evil
+dr smurf
dr3wst3rk
dr4ll1m
drag
drag0n
dragneel132
+drago_jr555
dragonizer11
dragtom
draind
drakh
drakonic
+dratini213
draxyboo
drazil7
drdrinkwater
+dreads iron
+dreadthefate
dreamworld
+dreiph
+drewsky
drickvatten
drillbit_10
+drink toilet
dripcuck
drogodon
+droidfarmer
+droopsnoot
drotRS
drouzeee
drphil10203
+druedainx
drug_yew
+drugandbass
drugs
drugsrbad
drunk
+drunk f00l
drunkwpants
drwilly92
drxfluffeeee
dssctn
+dstortion
+dstroyd
dsvgs
+dt duby
dtfmslogan
duMonster
+dubba z
dubdubbronco
+dubies4days
+duckwax
+dudash
dude
duder
+dudrid BTW
dudylson
+duedeman
duel
duets
+duette
duff skill
duffman1992
duhpho
+duked
+dulitrai
+dull needle
+dulle00
dumb
+dumbass hick
+dumbweeb22
+dumple
+dumpy rat
+dun2kaz
+duncan c
+dunerat
+dung_eater31
dunnman
+dunt
+duo virgin
+durche93
durgs
duriol
+durkology
+dusp
dusq
+duve melker
+dvnny
+dwarFcaNnOn4
dwayne
+dwvb
+dylaaan6
+dyldied
+dylodide
+dymo
dynastyzero
+dyrachyo
+dyskletiker
dyssection
+dyzi
dzhy
+dzmomolungma
+e LFa s
+e acc
+e c e e R
+e c stasy
+e ji
+e med
e pinke
+e rui
+e031420e
e1ght
+e50
e500
+e621net
eKaleb
+eL Lavish
eLSD
+eLas
eLeeT
eLqTLN
+eM Be
+eMiSk AU
eNCH
ePicnicEMan
+eSquence
eStimatic
+eXtr3Mer btw
eacy
eaekk
eagl393
+eagle shed
+easily thero
easterparty
easyMEDIA
+eat a udon
+eat my bewty
eatcox
+eathelwulf
eatmyfries
+eatmypie
+eatsdonut49
eazybreazy
eazygps
eazyws
ebbe
ebijah
+eboy gamer57
ecce
+echo cooks
+eckla
ecofine
+eddimunstr
+eddyb
edgarsjm
edible
+edilot
+edmu
edunit
+eegor
+eek monkey
+een pint aub
eenzeven
eerx
+eesau
eetbordleeg
eetuliiniBTW
+efcherry
+efci
effectiiveRS
+effing sheet
+efog
efren189
egcept
+eggo death
+eggu
eggzotic
egirl qt314
+egirl tile
egirl73
egyptasaurus
egypton
egzoff
ehdion
ehoov92
+eiaraieaieai
+eid ola
+eiflA
eigh
+eilhart
+ein Bier
+einu miegot
ejobs
ekcivtec
+ekhoplex
+ekm
+el Laneo
+el is
+el peppo
+el tubo
elDiablo666
elGoblino
elbo
+eldanari
+elden lawd
elder
+elder jam
+elder poul
elderimpking
eldestlance
+eldrich ball
elefantsrul
elfje185
elitharion
+elkcarc
elkcark
+elletwo
elli
+ellias
elliott1650
+ellipsism
ello
ellran
elm43
elmeroguero
elon
eloquent
+elsieh
+eltomatero12
elyaxo
email12345
emaq
emaru
emaw
emiiru
+emilviperHIM
emilyqt666
emiracle
+emm
+emokid93
emopapi
emptyhead
emptysoul88
emuulzzz
emvelienenko
+en Au
encoa
endless
endlessgrnd
+eneco
enemy2mad269
+enen
energymango
+eneslannn
+engrave
+enjoiskate
enlmatek
enlot
enneUni
enormousguy
+enservices
+entiesman
envetoids
eocri
+eow btw
epcr
epic
epickayle
@@ -27390,62 +56421,123 @@ epocsorekiM
eptul
er2002
eraie
+eric verdonc
erik020
+erikj20
+erilthil
+erk is cute
+erlendolstad
ermer
+ermer fudd
ernestoch
ernieK
erniethecat
+erpponen
+errikkold5
error
+error nope
+error occurd
errorwithnam
+ersatzquatch
+eruze
ervin
+erzin
+esc
eseeg
+esportspker
espress
+esssaa
+estra jen
+eteelS
eternatus
etha
+ether-or
+etsii naista
eujamaispkei
euonym
+euphoria btw
+eureka 4
euxy
+ev tesla
evanthenewb
evidencez
evil
+evil drudge
+evils ault
evirgin
evoL
evol
evonaabi
evoshiva
+ew its paul
+ewechoose
ewenn
ewgility
+ewmu
+ewvn
ex0dus
ex_shadow
+excalipoodle
excitedz
exila
exile
exodiass
exolyte
+exp waste 07
extesyturtle
extinct
extra
+extra big pp
extrastark
extratrippy
+eyes fire2
+eygs
+eyniss
ezAce
+ezzychu
ezzymc
+f a r r r
+f ainted
+f c gee
+f d b
+f ern
+f q
+f r o st y
+f reS
+f0r 20
f0rbes
f0rev3r
+f0rzca
f1elder
+f1ll2
+f1oh
f1sh1ngcrazy
f2pkiller420
f3n1kz
+f41r unknown
+f4az
+f4fight
+f8
fEmshi
fJack
fa1lure
fa2kil
+fa43ws5gdrxn
fabsku
+faceeee
+facehunt
fadc2
failbloug
+fairies ring
+faiyaz911
+faka jackson
fake
+fakeironman
+falcon30040
fallen
fallenbouse
fallengodxx
+falneek
falsehope
familypp22
famousbutnot
@@ -27453,61 +56545,123 @@ famousdavies
famwell
fan3to
fancybunny84
+fanof
+fanook kill
+fansh
+fapital one
+fapyqt
+farmerman111
+fart taker
farth4lyf
+fartypants64
farva5001
fastfoodguy
fastsalmon34
+fat bish0p
+fat miso
+fat n ugly
fatalzgs
fatalzick92
+fatblimp
+fatcactus99
fatdabz
fatdemon
+fatfish44
fatiimma
fatpapi
fatrat095
fattig
fatty
+fatty_ironmn
fattymcthick
fawaka
fawkin
fawnt
+fayeuk
+fayfey
fazIlioilol
fbah2
fcemee
+fdegierr
fdsd
+fe ar none
+fe fi fo ben
+fe fleton
+fe hessu
+fe shredder
+fe unclefro
+fe-ma-le
+feaker
fearma
+fearnooaths
+fearsome
+fech
+fed the rat
+fedposting
+feed water
+feet r neat
+feet shui
+feet tickle
fegorus
feinkostbob
fellman250
felsic
+femaledhide
+femboy fever
femiketyson
+femra
fems
+femtanyl
fenimore133
fenty
+ferbies
+ferderb
fergina
ferkyy
fernezi
fernibosh
+ferric thane
+ferrotopamin
+ferrousnub
fettnerd
+ffa btw
+ffakin roids
+ffs cmon
ffun15
+fghtmeirl
+fhb ruby
fhisher9
+fi1LMma8Ke7R
fiddy
+fieryflame55
fifiz
+figey
figgiolly
+fighter8888
fighttme
fighu
figit
fiiks
+fiishcat
+fijurgt
fiko
+fikset
fill2
+filma kraken
filnrozdor
+filthiefrank
+fin hupu
final dip
finalkid
finally
+finance king
+findmydog4
finerunes7
finfinnegan
fingerd
finn
fire
+fire skull99
firebrotha2
firebwan
fireflyman3
@@ -27515,67 +56669,145 @@ firemadara
firewood149
firework19
first
+fish cook
+fish slut34
+fishbomb83
+fisher ilhan
+fishfiinger
fishnforfun
fist
+fist n twist
fistaah
fistofzeuz
+fitjamal
+fixedmanose
+fixx ur face
fizoo
+fjuc
+fk bud
+fkMushrooms
+fkWiiz
fkn seale
fl0ppy
+fl0rals
fl0xen
flabb
flaccid
+flacidzillaa
flaggeding
flaminstu
flapdrol2000
flatbroke
+flatjack78
flatpancakes
+flawskee
flax somker
+flenis
+fleqk
+flexmaniac
flexxygreen
+fligh4
+flimzzy
+flink1145
flint
+flip555
flipdoggydog
flipouu
+flipperkid69
+flke
+floch
floie
floopily
+florda v2
+florida1992
flow
+flow states
flowerbunz
+flowers
+flowerworks
+flowing past
+flpi
fluffy
+flunkerr
+flwc
flyingfather
flyingpigs
+flymouse
+flywoodhead
fmPalm
fo77y
+fo_of
+focusor
foldoutchair
+folklore
+fondledeez
fonytergus0n
food
+foom
+foookz
+foot fe tish
footbag
+footgobble9
+forbiddengol
forcestealer
forevercc
+forfun_ED
+forgeleader4
forkheals
formazion
+formerly act
fornitesweat
forrestriley
forss1
+fortnitecuum
forty7
fortyfour44
fortyfours
fotjonxd
+found RS2019
fourecks
+fowrt
+foxMcCl0udd
+foxair
foxdude909
+foxi melissa
+foxmr2
foxological
+foxspirit
foxxit
+fp
fp4bank
+fpsbowser
+fr0stys
fr0zen46
+fractalion
+frail
+franklinzule
frantam
+frawzti
+fredz1
free
+free rations
+free willy1
freeheadbutt
freekek
freekface99
freepknub337
freeze4peeps
+fremenik
+freshaf
+freshdougie
fressi
+friccSailing
+friday x
+friedz
friendlyduck
+frierenfan69
+frodobaggens
+frog37
frogggggggg7
frogmeme420x
+frogposting
froock
frootl00p233
froppy
@@ -27583,147 +56815,269 @@ frosteazz
frostfire089
frostkatss
frothsy
+froxey
frozen
+frqke
fruitdeeps
fryguy20
frzen
+fskencha219
+fsnack
fsteve
fsxd
ftSlimShady
+ftmg
fubar
fudkingname
+fuhrari
fukduelarena
fuktig
+full service
+fullrune383
+fun e name
+fund issues
+funk
+funk it
funky
+furi xD
+fusarium5
+future days
+fuwamoco fan
fuzzlumpkin
fuzzydenuts
+fuzzypapi
+fuzzypupz
+fwapdokopjai
fwft09
+fwip
fxck
fxck versace
+fxdb
fyfaen
+fymcgee
+fyr irony
fyromaniac
+g arre
g o o w
+g u L z
g00dz
+g0_ober
g0d slayer19
g0dofgames
+g0dz target
g0ld
+g0rgelzak
g1g1tyg0o0
g1n00tj3
+g1o
+g4rug
gIassy
gOWObs
+ga zr
gaaaaleth
gabba-jabba
gabbe314
gadnukB0W
gaffel
+gagifidi
gaht
+gaht dangit
+gainsaid
gainz
+gainz no
gainztrain9
+gallidogs
galx37
game
+gamedbroski
gamelsbad
gamer
gamer63738
gamerb0y
+games sheet
gamesalright
+gamin hard
gang
+gang gastino
ganger34u
+gangstersfly
ganjah lord
ganoze
+gapin ass
gaping
+gargalonmyd
+garn woolies
+garra
+garymunzen
+gas watah
gasang
+gatekeepr
gatlin
+gatorbait61
gatorclue
+gaumcat14
gavin
+gay avenger
+gay corn
+gb
+gd5
ge1uk
gecs
gege4646
+gegebee
geitz4
general_a3
generalneos
genghys
+geniuswinner
gentle
geof
+georgemonger
gerdlol
gestrikt
+get pregnant
+getcance
+geten30
getpixelz
getsnipez
getting
geusjj
+geve en neme
gewoonhendri
gezzle
+gfink
+gg Goombas
gggochu
ggremlin
ggroeffus
+ggrr
ggwpezgame
+gherkins
+ghliz
ghost
+ghost of CVS
+ghostlyjon
ghostmahi
+ghrimdrakan
+ghxstboy
gianni025
+giannnnni
giant
giantsbane10
+gibsons dog
+giffnamepls
giga
+giga zooted
+gigglybear
gijsro
gilgir
+gim Bam
+gim ajuin
+gim so bad
+gimeurgpm8
+gimhunter02
+gimmey bear
+gimpeta
gimpinator14
+gimtmbj
gingasnapz
+gingerr
ginjembre
gino2315
gintoki
+gioh
girl
girlbossed
girthing
+git gud kekw
give
+give in
+give me 1 gp
giveortake
givmemonyplz
giza
gizmywizz
+gkfdhsjbgpas
+gl barnie
+gl gf i win
+gl lmfao
gl0s2n
gladwin97
glazura
glgl
glica
glingster
+glitch1128
+glooboowhoo
glotis420
glowmastree
glumburger
+gmac33
gmtn
+gnak
+gnariska
gnarrrkilll
+gnobo
+gnome pegger
goGETTER87
+goal freak
goat
goated
goatflocker
goblinsyler
+gochugaru
+godblaster69
godfreeB
godmiljaar
godmysavior
godofvoid
+godsdankweed
godss
godver
+going2maxnow
+gokhanakan
goku9172
+gokublk409
golaguard
+goldenN0B0DY
+goldest cat2
goldiepawper
gomikasu
+gon dor
gonarusinat
+gone numb
+gonewild
gonsoLE
+gonz o
good
+good duck 4
+goodboi525
goodlife
+goonette
goontuna
gooootsby
+goos fah bah
goose
goosegoose22
gor7
goranfr
+goreshitfan
+gorgewkush
goroka
+got u m8
+goth mime
gothic
gothorian
gotmadtree
gotoschool
gottaRash
gotzeeben
+goy street
gp294
gpawshaft02
gpf93
gr0ve
+grace life
graftosh
gramss
gran chorizo
@@ -27731,310 +57085,648 @@ grandp4
grandpa
grandpashome
grandslamhit
+graphist II
grashuis
+grass hopper
gratis
gravetheif
+gray ass
+greasy bacon
greasyguy19
great
+great bazza
+great blazer
+great keith
+great pkay
greeaf
green
greenbuds1
greenfleet1
greenie14
greenm4444
+greeny4
+greenzyyy
greg
+greg btw
grey
+grilecheese
+grillmagnum
grindin2bond
grinschen
grizzy77
grlobe
+grogybog12
gronoc
+groogns
+grossedinde6
gruelsipper
grumpyy
+gt i
gtrpower3
+guardy
gucci
guirkle
gularies
gulibleidiot
+gullefjun2
+gulp my knob
+gumlord54
+gunbladelh
gungaman3
+gunnmoses
gunnybear
gunzip
+gurz
guttsberserk
+guuvin
+guy123452345
+guyfranklin
guyhasaname
+guyladriel
+guzzlinbrews
gvfsa
+gwaph
gwaphics
+gwapo gwapo
+gwb
+gwen-artemis
+gwiffdakid
+gwogoudain
+gwug
gypzys
+gyxl
+h ertog
+h re
+h ugo
h00cares
h0rseZ
+h2j
h3hz
+h4h4h
h4ndshake
+h8browns
+h8dip
+h9g
hEAdGLiTcH
hOsujaRS
+haaksrikko
+haam
habitus
hacchi
hackening
hadibaam
hagerlund
haha
+haha lul
+haha nice xd
hahaLMAOlol
hahaa
+hahaa-ukko
hahaha
+hahaha LOL
+haiiG
hairahcaz
hairy
hairyraccoon
hairytaent
haistavittu9
+hakuikoyori
+hakumaata
halal
+haldfhaklfa2
half
halfcrimp
+halfrightfox
+halftimegod
halling1
halo
+halo 238
+halo is scum
+haloumbs
hamdrip
hamers
+hamhand
hamilton
+hamilton fan
hammade
hammershark
hammu666
hamptonboys
hamthenoob
hamzullah
+han sohee
hanakarjala
+handi 0_0
handi9900
+hangry_bird
hanh
+happi hippo
+happyprophet
+har tig
hard3x
hardcoresque
+hardstuck gp
+hareby
harelmatlaw1
+haringbata
hark
harleybegum
+harmony
+harmony w
harrpp
harryderoest
harts0295
harziol
+hasansahl
hasbulla
hash
hassbulla
+hat foe
+haterz
havfherter
+haw yee
hawkesbay
+hayati enta
+hayden787
+hazel nut
+hc pilszen
hc_karadeniz
hcgoldslaye
+hcim gud btw
hclirongang
hcmemekiller
hdhd
+he a 1O but
+he box jonge
+he r b
+he4
+heGee
hear
+heartvessels
+heast oida
+heatassnugs
+heatwave305
+heavygim
+heavyiron94
+hebrewmytea
heca
+heckn frick
hedonismbot
+hee haw 255
heegeer
heel
heelgoed
heeming
heeyhallozeg
+heftZEUS
hehe
+hehe heheh
hehehehe
hei954
+heimy22
+heizenberg11
helgrimm
+helicopta12
hellobob488
hellofpures
hellohello
+hellohelloom
+hellper
hellreaper25
help
+helpa
+helpusobi1
+hembree
+hemmingsson
+hemmy
+hemran
+hemstad
henkka89
henkleingeld
+hennnin
henson23
henzer
heppytako
+her mager
herb
+herb btw
+herb l0rd
+herb l0rd jr
+herbdean0981
herbi
herbibear
here
herezacsko
herkimer
heros
+herrasmies68
+hesedona
+hesi pullup
hestakuken
heuj speulen
hexergeralt
+hexxers
+hexzie
+hey axel
hey im ben
+hey its zul
+hey_imgrump
+hey_rayray
heywoodya
+hh r
hhdrgu
+hi im miku
+hidde xddd
hiddeboven
+hidesonkush
hidlandboys
high
+high bonsai
+highIMcamila
highelolux
+higher man
+highfly94
highprice
+highright
highsassy
hightoo99
highventure
+hih
hiiggiinss_5
hiirihaukka
hikipastori
+himokarpaasi
himself99
+hiphopdied
hipocracy
+hippofart27
hippyjump3
hippytrippin
hirai
+hirai momo
his7
+hit trees
hitchclimber
+hitsumabushi
hitto
hitz
hiunknown
+hiya jase
+hizli maymun
+hlen
+hlua
hlucky
hm08
+hn k
+hnge
+hnsky
hoangbach456
+hobbit head
hobosloveme
+hodl link
hoffnungslos
+hol my got
holdadoor
holden21
holdenrulz6
+holidayRus
+hollowking
holonomy
holy
+holy chad
+holyfizz
holypalo
+home2get
homestank
homie jaquan
+hompkerbenis
honda
honeywheat
honourpig48
+honscy
hooah89D
hooliganism
+hoonyboony
hoosier4life
+hootis4
hopOFFbish
+hopeakettu25
hopeless0ne
horkkaaja18
horror
horsedik7
+hos
hoswoo
+hot otter
hotdogmum99
hotpants
+hotyogapants
+how 2 use ge
+howliett
+hows it garn
howyadurrr
+howyodo
hrby
+hrsn
+hs
+hs3
huang9296
hub154
+huealldaym8
huge
+huge cog
+huge man big
+huge ovaries
hugh
+hugh_who
+hugheberto
hughjazznut
hugjam02
+hulikopteeri
hulikopteri
hulken532
hulrikon94
+human6000
humble
+humjiboi
+hummerspeck
humpmedumpty
hunden
+hungrypit
hungwonglow
hunter
+hunter01132
+hunter123216
+huntin_pets
+huor4hansu
+huoranpenska
hurt
+hurtswhenip
+husbandowo
hush
huskyheaven
+hut dugs
huutonaurua
hwow
+hxdd
+hxzy
+hyasf
+hycoda
hydra
hydraboss
hymke
hypez
hyphynx
+hypofelix10
hyprmax
hyung
+hyvintoimii
hzpascal
i 0nly skill
+i Bmx
+i C D
+i Kelly
+i Kyle
+i Shin Chan
+i Spartan
i Stugbert i
+i URNn
+i Val
+i am hua ren
+i am iron xd
+i am nickle
+i am rocky
+i am soo dry
+i bets i
+i ch i
+i dandy
+i dcd 4 sets
+i disabled
+i done
+i eat noods
+i forte
+i gag
+i gor
+i got dust
+i grug
+i hit 420z
+i i i i
+i john 96
+i look great
+i lose gp
+i need top
+i need you
+i ok can win
+i poop alone
i praise mvp
+i preferhead
i r muffin
+i r4piid i
+i ronman
+i vexterr
i-i-istutter
i0 strength
i0am0the0one
+i126
i2eally
i2legit
i2me
+i3nd Legends
i420u
+i50
+i8 2 l8
+i9
iAIex
+iAM Pleb
iAUSSIE
iAdriaan
iAlch
+iAlchedNieve
+iAmNotSharky
+iAmaWiseAss
+iAmen
+iAttributes
+iB Lifted
+iBal
iBallr
+iBeDorky
iBeanie93
+iBeast It Up
iBeatNavy
+iBeleti
+iBelg
+iBlack Zeus
iBlake
+iBloodsicle
iBlurks
iBosstastic
iBoughtpizza
+iBrandon
iBukowski
iBunZoot
+iBurkie
+iBurn Dro
iBustedaNUT
+iCakoRS
iCarna
iCbarr93
iCh0sen
+iChangeling
iCheezedOff
iCheze
+iChugBleach
+iCiga
+iClickYellow
iCmurda
+iCoconut
+iCrank a lot
iCrash
+iCreeme
iCyantist
+iD Dazza
+iDH
+iDabbedOut
iDan
iDanny13oy
+iDark Jesus
iDashio
iDashwood
iDeathlok
iDerpo
+iDez
+iDo RageQuit
iDoNot
iDontWinSad
iDrankCOFFEE
iDrebin
+iDrexler
+iDrops
+iDuiveltje
+iElfy
+iElysian
iEmery
iEpa
iEprod
iEuph
iEuroVamp
iEvergarden
+iFailAgainnn
iFatalFoei
iFerrumMan
+iFeud
+iFightClouds
+iFightGiants
iFire
+iFoRGe
+iFrads
+iFradz
+iFrogs
+iFry
+iFucter
iFukFatChix
+iFurb
+iGab
+iGarns
+iGlaceon
+iGlitched
iGlowGreen
iGohan
iGotDds
+iGotDibs
iGotem
iGreig
+iGuDMaFF
iGuessUrNew
+iHazelnut
iHenrie
iHenry
+iHiyori
iHockey
+iHolydude
+iHuntie
iHydroxity
+iHydroxityv2
+iIimesiahiIi
+iJ0HN
+iJ4CK
+iJCLEE X
iJake
iJamPancake
iJesslag
+iJezuss
iJfr
iJohn
+iJomm
iJwu
iKHole
iKILLN
+iKantu
iKarl1s
iKerry
iKitch
iKitz
+iKonijn
iKoning
+iKozak
iKristov
iKurko
iKushUp
+iLEFTmyGF4RS
+iLL Sushi
iLeftHer4XP
+iLegacyX20
+iLetaker
+iLeveled
+iLikeTacos
+iLikeTheStok
iLikeuAlatte
iLoner
iLove
iLoveYou3OOO
iLuckout
+iLuv Pandas
iLuvMyMilf
+iLuvSubs
+iM3RKEDu
iMADbro
iMahjarrat
iManiac
+iMark 1
+iMarkl
iMartin11
iMatey
+iMeeger
iMellek
iMelli
iMementoMori
iMeo
iMichaelN
+iMikail
+iMikey
+iMogUCope
+iMotown
+iMushh
+iMuste
+iMx
+iN3K0
+iNamaste
iNeedBeaver
iNeverMor3
+iNewbcake
+iNewton
+iNibble Bats
+iNz
+iOPeveryday
+iOhmz
+iOsmumten
iOwl
iOwnU4ss
+iP1
iPIMP
iPKedEpstein
+iPacmanSam
iPaki
+iPalumor
iPatrickN
iPegAsians
iPerfectoX
@@ -28044,6 +57736,7 @@ iPink
iPlugg
iPod
iPop
+iPray_Guthix
iPresident
iPunchCones
iPure
@@ -28056,9 +57749,14 @@ iQuittedCiao
iRNGizzed
iRekt
iRepToronto
+iReue
+iRev Man
iRezlo
+iRoN cUj0
iRoNmAnSdUmB
+iRonAllot
iRunTh3World
+iRunzo
iRycoda
iSaran
iScape
@@ -28068,115 +57766,255 @@ iScream03
iScrewedUp
iShibby
iSkane
+iSkript
+iSlay Girls
iSlayCookies
iSlayGoat
+iSlenderMann
+iSmashUrGF
iSniffCows
+iSnowmobile
iSoulReap
+iSpare
iStayLowKey
iStealSex
iSteele
+iStick2Corp
+iStonee
iStream
+iStreetfight
+iSuhdle
+iSwarly
+iSweat
+iSweatyYeti
iT0m
+iTan
+iTaz
+iTed2cold
+iTheDarkKing
+iTheodore
iThiellie
iTisk
iTmetzo
+iToxic
+iTrin
iTunder
+iTw1sted
iTyler
+iTz Command
+iTz Frosty
+iTzBoo420
iTzGoinInDry
iTzKATalyzt
iTzSnypah
+iTzTurtlexD
iTzTyLeRXD
+iTzWho
iTzZ
+iTzxLiMiiTz
iTzzVanquish
iUberz
+iUsed2Corp
+iUub
+iWilkel
+iWillz
+iWithdrawal
+iWonderWhy
iWyatt
iYahwehi
+iYellowClick
iYunis
+iZ4
iZorru
+iZuny
+i_murder_bh
iafx
iain19
+iamAFK
iamCanadian
iamMcLovin
iamfish
+iamfried247
+iamfuss0100
iamgreatrng
iamlucas19
iamonfiyaaaa
iamperkins
+iamvery cool
iamvoldemort
iamzed
+iandrehehexD
iateyourpie
ibbenbueren
+ibn Mukhtar
+iboomedyou
+iboyfly
ibr4him
iburythebone
+ibushmani
ic3d
+ic3d c0ffee
icannotboss
+icanread321
icantspelle
+ice beam
+ice juice
+ice-nine9
+icearrow28
icebolt19987
iceburg189
icecoldbreez
iced
+iced marbles
iceman000
icewall0w
+ichau
icjbi
+icky sticky
icutL0g5
+icy ded ppl
icyT
icydilldos
+icypolarbear
+id c
+idc
idcy
+idfap
+ididnthither
idiedonmyhc
+idiom
idiot
+idiot game
+idiothead
+idk chill
idkgoogleit
+idkh0wtoplay
+idkwhatdo
idle
+idle1
idpoen
idrater
+iduggz10
+iekaajer
iekgaa
+ienai
+ifantomas6
+ifarted42000
ifootfondle
+ight
igiddeni
+iglo16
igotdaice
igotnolifee
igotnoolife
+igotwingz
igotyour99s
+igrimmerz
+igugh
ih8urkind
ihan
ihaveanxiety
ihavitunopee
+iheartBBLs
+ihopeurope
+ii Sahir ii
+ii am teaser
+ii bad guy
+ii forte ii
+ii love cats
+iiBink
iiDivine
iiDrackidii
iiGallardoo
iiHydra
+iiLuckyVibes
+iiTz Nothing
+iiZEEii
+iiZno
+ii_TrYHaRd
iiaannaa
+iiiRood
+iijelloo
+iikasoyi
+iimperious
+iinsin
iioktb
iirc
+iitsjarod
+iitz deebz
+iitzz Ryan
+iivy11
iizoneout
+ijoinedthis
ijust
ijustgotreal
+ijzer ali
+ijzer vreter
ijzeren
ijzerenman1
+ik itachi ik
ikea
ikeep1r0lled
ikil
ikillstuff
+ikiroz
ikoyouboy
+ikp0wnsz
+ikpakjou
ikrr
iksalion
iksd
iksdeee
+il malocchio
ila161
ilapaR
ileax
ileft
ilegalTruble
ileppmot
+ilfi
ilike2gamble
ililliiilli
+iljang
+ill Dottore
+ill-Money
illadelph
illenials
+illisible
+illmaister
+illmatic
+illmindhop5
illotex
illumea
illuminavi
illyreia
+illysia
+ilookcat
+ilovecitywok
+iloveinsulin
ilswisa
+iluvducks
+ily stepmom
ilyakchuk
+im 1v9
+im Jaacob
+im Noah
+im Z a n e
+im a learner
+im a pur8
+im at cox
+im bad tbh
+im batu kham
+im cats
+im dandy
+im huge
+im in charge
+im nlf
+im pogging
+im ruben
im solo rose
+im tr4vis
+im ttZ
im4everxerox
imAcidic
imAhri
@@ -28187,123 +58025,302 @@ imJT
imNEWY
imPapu
imStef
+imWebby
+im_pro_jones
+ima big boy
+ima survivor
imafatscaper
+imago loop
imaybegod
imbaconyum
+imbueddog212
imbutz
imbuyingf
+imcahos
imcaprise
+imdrunkashit
imdud
+imfi
imflavio
imho
imhuge
iminarager
+imjeremy
+immachin
+immaturely
immef
+immirgant
+immmersion
immortalz
+imnotdani
impaired
impartial
+impek
+imteddybear
+imthenalls
+imtogepi
+imusualyhigh
+imzahikell
+in africa
+inSec
inTheSlum
+inb4elysian
+inc
incant
+incci
+inclibe
includingtea
+ind
+indebara
+indian
inescate
+inf nick
infamousO775
+infamousjew
+infare
+infernalwhen
+infessian
infragant
+initiator
iniu
inject
+injinourme
inked
inldgwetrust
innSink
+inner child
insaned17
+instagation
+intja
intwystis
+invictecum
+invirtua
+invisybl
+invynsable
inwervs
inwnucleus
inxx
+ioe
iojerfwpjiof
ioliteKnight
iolm
+ioncolliderz
ionlypickadc
+ionman
iorcsrox
+iownw69
+ipfreely939
+ipwnkthxbai
ir0nschlong
+irak93
+ireq
+irhunter
+iriee NZ
iron
+iron Dreven
+iron Fapkin
+iron Nido
+iron bewts
+iron carly65
+iron chur g
+iron colb
iron cuzibro
+iron d
+iron dafanek
+iron dumle
+iron evoo
+iron gariks
+iron grogu
+iron hobbs
+iron i jad i
+iron imp 89
+iron kobe
+iron kydrol
+iron mazie
+iron nakno
+iron nkellen
+iron sfgiant
+iron snak3s
+iron snurd
+iron t2
+iron te_un
+iron to main
+iron tylerr1
+iron veil902
+iron veyydot
+iron vow
iron xarcher
iron0
+iron0_o
ironBellukka
iron_day54
ironandwhine
+ironarrow
ironbandiit
ironbass
+ironclimber1
irond
ironderp
+irondude686
ironerextion
ironerrosann
ironeye
+ironfara
+ironfather8
+ironfyi
irongaga
+ironguxiz
+ironhuuu
+ironic it is
ironikcronik
ironinfinite
ironjssnoob
ironjustice
+ironjutku
ironkendall
+ironkevkev
ironlizrdfuk
+ironlog215
ironlooks
+ironly fans
ironmortel85
+ironoujust
ironpower29
ironpuni
ironskunkki
ironspig
irontsuki
+ironvesku
ironwortel
ironwoss
irradiated
+irregularly
+iruste
+is an option
is skimpin
isCatrileo
+isayswegyolo
+isleepwith3s
islugo
+isoPROpain
istealyoloot
isuwu
+it do be
+it ends now
it0b
it0keup
itachi9113
itbch
+itirof
+itisdre
+itmeautim
+itroy v2
+its Bread
+its DeFib
+its Hoffman
+its Knetter
+its Mewtwo
+its Polle
+its a ginger
+its aight
+its an 8th
+its leviosaa
+its not mine
+its the game
+its20after4
+itsAden
+itsErnie
itsGLD
itsJayy
itsNoki
+itsSt1cky
itsWum
+itsa
itsa_feature
itsaart
+itsalic
+itsbenny
itsbill
+itsdanlol
+itself
+itsfwhobar
itsmewarreng
+itspajamaday
itsthedirtyJ
+itwasme
ityttmom
+itz Ozie
+itz Tastey
itzjaycie
+iua
iusedtosleep
ivao
ivibondivi
ivlr
+iw
iwearIRONirl
iwinulosety
+ix7
+ixGOONIExi
ixJake
ixoniron
iyyghg
izmibence
j e company
+j o h n z
+j o l s
+j sta1in
+j uddr
+j wet
j0rd
+j0rdb98
j0shNZ
+j0shwah
+j1nx
+j311yb311y97
+j3ffmaill3
+j3rvi5
+jDaledge
+j_mes
jaakqoo
+jaatzy
+jackBingus
jackLonghorn
jackancoke7
jackjester
+jacksonlol
+jacola
+jae Bee
jaguarundi
+jagweed
+jagweedle
jahan
+jahmelo
jahnjo
jahrezeiten
+jaitt075
jajademonrat
+jajajad
jake92
+jake9549
+jakeyvil
jakkaru
+jakste r
+jaksterlite
+jakuusa24
+jallon
jalucox
jamaz8
james1234269
james68889
+james9f
+jamesishere
+jamesw
jamflex
+jamgyo
+jamie g 456
+jamjarrrs
+jamm
janguy
jani
jankywanky
@@ -28312,50 +58329,104 @@ jaq0
jargonship
jarjoevis
jarngrimre
+jarno561
jarnrisi
+jarnwoodchck
+jarsko
jaseDemon
+jaseGrumpy
+jauu
+jaxta
+jay 6ird
+jay oh kay
jayst1n
+jayveedee
jaza
+jaza maxwell
+jbirrd
+jd345
+jdockett
jdore
jdsgsxrthou
jeREEEEEmy
jedi
+jeeeeee
jeep
jeezuschrxst
jef skhiii
jeff
jeffswifty
jegerklog
+jehhjr
jekkujaba
+jellyfish49
+jellyjam20
+jem is cool
jerome
+jerrys ags
+jerrys venny
jerzieboy18
+jesjesjo
+jesus bone
+jesus vape
jesus4gives
jesusiswrong
+jesust
+jetalexnder
+jettyrr
+jewellski
jewjoking
jfan
+jfc
+jfrank127
+jfy
+jfyulopaef
jheezuz
+jhinnessy
jhonlee48
+jhoog
+ji mbo
jibmask
+jicc
+jigx
+jihal2020
+jikrak
jiksee
+jim jones it
jimbob1
jimbobeda
jimdeut06
jimmy
+jinjji
jippey
+jjammerweer
+jjerrbo
+jjingx
jjpanther95
+jkfizzy
jkre
jkthekilla
jman
+jmjmjt01
jmusilli11
jmw1031
+jndi
+jnjo
+jnlffs
+jnyjny
jobljobl123
jochieboy6
jodilynne
+jodo wollos
+joe the pop4
+joepie
+joestrider2
joey0343
joeyisstoned
johhny2hatz
johndalton95
johnnyandtam
+johnsmain
johnstaLoL
joje9
joji
@@ -28363,7 +58434,10 @@ jojojo357
jokaranpampu
jokemyster
jokerpoker
+jokkefar
jokr
+jolle rmm
+jon ko
jonehehe
jones
jonk33n
@@ -28371,56 +58445,106 @@ jonko
jonnetuinen1
jonnywormy99
jonppeli
+jonwillbert
+jonyants
jonzii90
joohhhnnn
joop59
jordaaaan
jordlar
jords
+jordy8878
jordymans
jorfee
+jorge w
+jorma heat
jortdebonobo
+josheroni
joshuab98
joshy872
+joshykun uwu
jossejoks123
+jossiee9
joster
jouv
+jovic
joygi
+jozn
+jp s
+jpjpj
+jpmonkeyboy
+jpruee
jqzz
jre257
+jrwheelyy
+jslashk
+jsoaksdawg
jstrot
jta1992
ju1ce
+juaco torta
juan09gon
jubbediah
juggernaught
+jugiwow
juice
juicy jones
juicyj03
+juicyjoystic
juju
+juke
+juketsauli13
juks
+julia uwu
jullbrew
+jumpe
jumpshot7
+junami14
jungle
jupi234
+jupilersjuk
jupl234
jusiuke
just
+just living
just2own
justJust
justLush
+just_willie
justamemerr
+justaname20
+justapethunt
+justarabbit
+justin5454
justinttu
+justluxy
+justsomenoob
justsomewood
justwin4head
+justwitching
jutku22
+jutmeister
juwgrehg8w30
+jwalty
jwheaties900
+jwles
jwov
+jxdoo
+jye2014
jynzziii
jyripetteri
jyyhnas
+jzhua
jzm0
+k a p s
+k anao
+k e y e r
+k ep
+k ian
+k oga
+k u h
+k um man
+k-rock94
k0ed y0oh
k0mpact
k0nch
@@ -28428,73 +58552,145 @@ k0nna
k0rrup7i0n
k1dnam3dcud1
k1lla
+k1lla cam
+k1ngzinho
k3yblade
+k6k3
k80may
k9k9k9k9k9k
+kFlipsta
kMikey
kUwUmiko
+ka r el
+ka vi
+ka wa
+kaaf
kaali
+kaalwo
+kaaskrok3t
+kab000m123
kabal1995
+kacy
+kaffetime
kahleparta
kahvi
kahzaohimark
+kaii tangata
+kaimann
kaiokenz
+kaizen1
+kajyboyyy
+kak_kis
kakes
kako666
+kako666 ii
kaksaking
+kalacaodan
kalev
+kalijaveikko
kaljunaama
kaloopsia
+kalusto123
+kalxb
kamekazi
+kamerucito
kamika
kammoooooon
+kanchazi
+kandids
+kanga roe
kangaroo
kannv
+kanyefan22
kapot
+kappachino
+kappaross420
+karambamb
karelzzzz
karibola
karil
+karilol
+karma dies
kaspery0
kasperyo1
kasrug
+kassi
kastekann007
+katelate
+katiegore
katinnekke
+kavachi
kavinskie
+kawasakki
kawi
kawkky
+kawnoz
kaynori
kayxiv
kbest777
kbuns
+kc3
+kc3477
kcaaJ
kcmeatlover
+kdani
+kdawg710
+kdog420
kdw27
+ke-bun
keatonboss
keegan789
keekluulz
keep
+keep going33
+keepitdedpls
keesie7
keezuth
kehd
keilaaa
+keiniks
keittokinkku
keittoo
+keiwa
kejo
kekipua
+kekw9001
kela
+kela fan
kelan
+kelan miehii
+kellapea
+kemabi
kembot
+kemosabi
kempster8
+kenchuuuu
+kendawwwg
kennynoodles
+kenya help
kepijuku
keppuli
+kepwontmax
+kerekewere
+kerm jump
kerwin
+keskorian567
+ket boof
+ketaccino
ketawuss
ketchupfles
kevin
+kevinator41
+kevinnnggg
kevpurp
+kevvaGG
+keyggre
+kferd
+khaki cuffs
khxn
+kiba420
kibeleza
+kibsy
kica7
kickback
kiddoseta
@@ -28502,98 +58698,166 @@ kids
kidsteve18
kidz
kiefcheef
+kiiiiiiiiid
kiix
+kil lu a
kill
kill3r
killah
+killakristy
+killanoob93
killconey84
+killcrab
killd0zer666
killedual0t
killerline
+killnack
killthatree
+killwi5e
killy
kilpi
+kimachevich
kimbo
kimpsa
+kinako4
kind
+kinda soft
kindaanxious
kindocool
king
+king lee166
+king stuff1
+king-tiddus
+king420smokn
kingblackops
kingcuzh
+kingdaddyIM
kingdale26
kingerr
+kinghrvatska
kingknightf3
kingkong1211
kingofmanse
+kingprince
kingrizzla2
kingsardine9
kingsje
kingswood
kingvoid1083
+kinky fish
kinobi
kinzyyy
kipitril
kirby421blzt
kire7693
+kireeh
kiri2kun
kirkaye
+kirky 127
kisipicka
kisses
kissmyassetz
kitashan
+kitkats GIM
kittymeow556
+kivipaska
kiwidson
kiwie
+kiwiibear
+kjekken
kjellingeee
kjeltringen
kjems
+kk lol
kkDV
kkangaroo
+kkarl
kkjamin
+kkman45
kl00g
+klaaore
klacen
klampo
+klankerclean
+klassiskt
klef
+kleshkebem
kleu
klexosfox
+kleyver22
+kliefhead
kll4mee9
kloh510
klojo103
klojo105
klopt
+kluizen
klycko
+kms fast lol
+kn0ws beers
knani
+kneel2me
kneeslapperr
+knickname
+knifemanha
knight
+knightnate8
knobb
knobby
knokro
+knotts
knox
kodakid98
+kofelad
+kojak1211
kokimon
kokinaattori
kolb
komari_k
+konar simp
+konb
konch99
+koning broer
+kontiainen
+kony
+koo de gras
+kooks only
+kooltrickz
+koronaaaa
kosiq
koudekroket
kounga
koyhalaulaa
kozel
+kozina
+kozzuu
+kpt
+krZ
+krab meat
krad
+krakenwsn
+krakim
krakkakkak
krakodile
krat
+krazyfaken
+krb 16
+kreepingdeth
kreeq
+kreesie
+krewl
krikenator
krillzscape
krioyo
kripu
krisaaferfi
+krnjellytv
+krobi
kronicganj
kronopes
kroodjebaass
+krp
+kruizin
kruuuuben
krxW
kryptocookie
@@ -28604,157 +58868,344 @@ ksubbi
ktsmo
kudryavtseva
kugelencas
+kujan2
kukerino
+kukko soosi
kukrishikari
kulers
+kulers bsk
kulju
kulso
kulwreck
+kumiko okada
+kurasaki21
kurdikana
kuro 275
+kuromi irl
+kursa sucks
kurtebener
kush
+kush tacos
kushmas
+kusib
kusimursu24
kuvaiti
+kuwait333
kveemanne
kwak
+kwak eend
+kwall
+kwarkje
kwdn
kwinus
+kwuantadyme
+kxde
+kxlle
+kxzu
kyaa
+kyanochaites
kybl
kyfu
+kyle of pvm
kylehwog
kyles
kylop
kyssysmeua
kyurem_vrah
kyykanhenki
+l Am Mathew
+l Athena l
+l BTW Envy l
+l Buzzsaw l
+l Click l
+l Darken l
+l EARN MAN
+l Elija
+l Fam l
+l Feather l
+l Floss Fish
+l Flynn
+l Freya le
+l Hav Ligma
+l Kelpie l
+l Killua l
+l Lena
+l Love You
+l Macca l
+l Misfit l
+l Mister l
+l Nz l
+l RSK l
+l RWT l
+l Snus l
+l Steph l
+l Succubus l
+l Sw0rdm3n l
+l Viz l
+l am RON
+l am cute
+l cup
+l failex
+l lemon
+l u g i a
+l unchbo x
+l-LEVY-l
+l-Relinquish
l-l-L_l-lL_l
l0H3aV3nLy0l
l0ne0ne
l0rellai
+l21
+l23
+l33tsuperh4x
l3LACK
l3W0FPI
+l3en
l3enjie
+l3ezzerk
l3ishop
+l4n
+l5h
l7ivine
l8tenite
l995
+lA R R O Wl
+lAlexAnderl
lAnomaIy
lBaecob
+lBakin
lBrent
lCEBERGSLIM
+lCONlC
+lD an
+lDFC
lDalel
lDanilo
lDark
+lDark ice
lDerby
lDezzy
lDokkum
+lE N VY
lGuess
lHawke
+lHong Kongl
+lI pv M l
+lIHlIIlHIllI
lIIIlIlIIII
+lIIlllllIlll
lJWl
lJoynerl
+lKanel
+lKeith
+lKenna
lKenny
+lKlas
+lKyle
+lLY Harambe
lLewis
+lLupo
+lM Nathan
lMarkl
+lMercyl
+lMr Zaros
+lNSF
+lNTOXlCATlNG
lNerdRage
lNolan
+lPaleHorsel
+lParticle
lPeriphery
+lPoe
+lR0NM4N
lREKEEN
lReece
+lRossy
lRyan
+lSaiyanl
+lSellFeetPix
+lSkinny
+lSlayer
+lTS ON SIGHT
lTedl
lTextbookl
lTlTITlTlTIT
+lVIaGiK
+lVictorl
lVitor
lVlango
lYungPlaguel
l_Thunder_l
+l_wyverns_l
+la flare
+lacefield07
lactosebad
+ladsquiron
lady-yoshi78
ladyspartin
+lafreniere13
lagamuffin
+laggium
lakde99
+lakey peak
+lakeypooh
laks
+lala u death
lamJason
+lambar
lambreturns
lame
lamepun3than
+lamironben
lamshnarf
+lamyourdeath
+lanch
+lanthe
+lapyflapy
laqsative
lardosio
large
+large moist
+large nob
large pox
+largewillow9
larinen
larl
larsbeuk99
larsnjun
larvacorium
lash209
+lasseboi
last
+last katana
lastdcplz
lasyy
+later gater
+latinamx
+laughingbisc
laura
+laura froggy
lawkingkong
+lawo1
+laxasia
lazarus
+lazy aiz
+lazydj2
lazyhitman
lazzabazza11
+lcefiend
lckle
+ldy
+le iromax
leafsevens
+leak organs
+learncox123
+least toxic
leather74
+lebanon d0n
lebusoft
+ledy0710
leech
+leech iron
+leech keeper
leechyGP
+leehi
+leesha locks
leetjojo
leevi22
leewhiffy
leewi
leggie
+legioen
+legionbgbear
leglizeRanch
+legn-dary
legohuis99
leipo
leivonnainen
lejhobs
+lejhonni
+lekkergras
+leld
+leliwuz1837
lellikedraak
lemeborrowgp
+lemm y
lemon
+lemon 25
+lemon cookie
lenda
+lengf
+leo vzla
+leos main
+leoshnoire
lepetitpois
+lepicklenick
lepo
+lerpledore
+lesel
+letos111
lettam
+lettername
level-103
+level-125
level-596
levendi
levon
lewcifer8118
+lewdogg
lexi
+lexi bell3
lexicon7
lguana
+lhommerun
liamde
+libad5343
libertador
liberteeeee
+licdik21
lick
+lick my chad
+life is shit
lifesalaugh
lifter
light
+light year
lightfader96
lightningess
ligma
ligma2
ligmadich
lihaamm
+lihavadino69
+liisa
liisankissa
+lijkenpikker
+like cooking
+lil Mamacita
+lil b
+lil bumpp
+lil chris 15
+lil ducky69
+lil gay cat
+lil jev
+lil mage013
+lil zeze
+lil zuck
lilBula
+lilJacklil
lilNoob2341
lilbitlifted
lilchiken
+lilcjay11
lilcuff
lilgreasy
+lilkcough
+lill misfit
lillelar92
lilliilillil
lilmasterOG
+lilmuscles
lilseveron
lilsquiddy
liltunechi
@@ -28763,195 +59214,385 @@ lima
limona5
lindyman
line
+linebacker
linkhg100
linlithgow
lintydeer
linusforsman
lionking-PVM
+lip length
+liquidchese
+lirska
lisher100
+listentonano
+litger
litheum
+litranmaito
+littering an
+little boat
+little man 9
littlebumble
+littleman699
littlemc14
liubei4444
livdumb
livil
liz_mar70
ljjjt
+ljzerenmes
lkalgo
lkaoz
+lkeaurhteakl
lkigai
lkjhsdfglkjh
+lkkle
+ll Grey ll
+ll Zeke ll
+ll jacob ll
+llBear
llIIIlIIIlII
+llIIllIIll
llKaren
+llKris
+llNephilim
+llRevenantll
llStevell
llab
+llaurune
llerb
+lletya sugma
lleygo
llhan
+lliigmanuts
+llitl
+lllIlIlIll
lllPeppalll
lllnifflll
lllogical
+lllustrious
+llo yd
+lloytronn
lluH
+lm Drunk69
+lm H o T
+lm Jard
+lm Scoob
+lm Stark
+lm Washed
+lm batman
+lm scrub
lm2fas4u
lmAddicted
lmBarryAllen
+lmTrash
lmao
+lmaonation
+lmfao ffs
lmgur
+lmmorral
+lmmortall
+lmpart
+lmpatiences
lmperishable
+lmplication
lmplode
+lmpostar
lmposter
+lnSpectre
lnYourDreams
+lnc
+lncendie
+lncest Steve
+lncestralTop
lncline
+lncredibilis
lndain
lndecisive
lndika
lnfa
lnfernal
+lnfiltrate
lnfinitesoul
lnformed
lnitial
+lnitialed
lnkd
lnquisitor
lnsanewolfy
+lnsec
lnsertname
lnspect
lnspiration
+lnv
lnvictxs
lnya
+lo0o0lo0o0l
loadedhuggie
loadingman
loasted
lobi
+lobssss
+lobster pot4
+lobswordie
local
+lockluster
+lococonut92
lococsgo
+locustchrist
+lofi cow
+log item
logMs
logger2222
+loggiee
logic
+login down
loginxtor
+loisakurvi
+lokdead
+lolaskiller
lolbert
+loldatfunny
+lolekx6969x
+lolerrofl
loli
loliconflict
loliron2main
+loller63
lollydeepthr
+lolnicebank
loloharqia
lolol
+lolw
+lolwhoplays1
lolxdmeme
lolzzii
lone
lonely
+lonely rider
+lonelybutter
lonewolf200s
+lonewolf99s
long
+long hcaeb
longbodd
+longlabia
lonko
look1nAzz
look2thepast
look4clues
+looking ass
loopyloos
loose
+loota-criss
lootshark
loox
lopiwer
lopldopl
loraxkiller
lord
+lord bimby
+lord boozer
+lordlazzy
lordrandomZE
lordrunekeys
lordsamzju
lordzyzzbrah
lore2
lory
+losbandito
losee1
losing
lost
+lost to time
lostchuck
+lostingame
lostpanda21
+lostwithiel
+lotion on my
loucks
loueyyy
+louisa
loumit
louw
love
+love bees
+love haaze
loveNfungus
loveT0spooge
loveablepand
+lovebeastx
+lovebite
lovegoroe
loveh8hero
+loves a beug
+loves moms
+loveyoub1tc8
lovezz2pwn
+low lQ gamer
+lower caste
+lowlyworm
+lowrandom
+lowstat
lowwpower
lpman
+lreful
lrin
lron
+lron Bladder
+lron Fill
+lron Kev
+lron Mar
+lron Mennis
+lron Paladin
+lron PvM
+lron Taint
+lron Tom
+lron patriot
lronBud
lronConquer
lronman
+lronmanBtw
lronmanCraig
+lronnan
ls32o0
lsdx
lssabella
ltachi
+ltachi_01
ltaychi
ltsJor
+ltsJustified
ltsMiller
ltsYaBoi
ltsYourBoi
ltsuki
+lu is
+lu1gi00
+luc1d dream
+lucaniste
lucid
+lucid olm
lucifer290
+luck wheelie
+luckeG
+luckey7744
+lucknesshcim
lucky
lucky female
+lucky never
luckyweeb13
+luckyy vii
lucuh
lucyramon
ludaftpitbul
+lufteohl
+luierick
luis
lukas
+lukas2518
+luke the npc
lukehm8o
lukek22
+lukem0n
lukewarmrod
lukey
+lukey pookey
lukis159
+lukutty
+lulllopiet
+lulu
+lummby fam
lummywk17
lunamelina
+lunar frost
lunch roll
lunchbox
lung
luolapeikko
luthas
luut
+luv da grind
luwl
+luxyy
+lv ie
lvan
lvarLothbrok
+lvl 1 sleep
lvl3
+lvon
+lwesche
lweyffaM
lxli
lymitz
+lynx zan
+lynxix13
lysander640
lyzolda
lzrdlvr1
+m 62
+m e e p y
+m i d s
+m i n i m
+m i t s u
+m inimum
+m miq
+m nice guy
+m x e
m-moi
+m00fen
+m00fin
+m00nrock
+m0ker
m0mentum
+m0saic
+m0stert
m1ssing
m1xos
+m3g4m4n
+m3nd3nhall
m3rkzz
m3tku
m4ge4life4
m4gi
+m4n
m4ttay
+m5q
+m6ngel112
m8tio
m8zi
+mBucket
+mGu
+ma shnibbla
+ma61187
+ma7shee
+maadar sag
maahhtt
maawee
mabeltwinkle
mac_moneyy
macflag
+macgleeznorg
machurrohard
+macjonge
mackbhamRS
macke064
+maclean93
+mad bor
+mad dogs son
+mad hjorn
+mad4cashh
madara666
+madeustilde
+madgamer45
madhat86
+madironman45
madman456789
+madmat38
madnijz
madpaul1
madwebbie
+mady I green
+madzey
maeonia
mafiaz
mafiz
@@ -28960,16 +59601,25 @@ magerageftw7
magesticx
maggpagg
magic
+magic me92
+magicarp420
+magick pp
magicmike117
+magiskt het
magnacarta
+magnum0008
magnumdong94
magyarok3
+mah nickel
+mahamoho1
maiden
mainCallum
mainyMCmain
+maiy
makarena
makemon
makenator
+makkan69
makosoup
maksavelat
malfoy
@@ -28978,57 +59628,103 @@ malmstrom
malte313
mamadou11
mamatriceps
+man spreader
+manaakitanga
+manameisjeff
mangkj
mango
+mangocry
+mangoszn
manmeowmagic
+mansbridge
mantequille
+manwhofish
+manxster
manyfac3god
+mao
maon
maori
maplegamer6
+mapletits
maqr
marbelo
+marchdog
marcinrulz
marcmaralou
marcwins123
marioflame
marioswe7
+mark uk
marketmoney
+markobae
markypoo
+marmO0n
+marmalarm
+marr66
marrab
marrciee
+marrrcoman
marshyymarsh
marth2king
+martickle
marvypoo
+mas koff
+masdebator
+masonkillem
+masta132
mastafarmer
master
master9782
+master_box
masterloveme
+mastermisch
masterpi314
masterseppi
masteryi01
+matata23
+matiks
matis6080
matiteusz
mats
+mats643
matsxe
matt182xx
+matteuce W
matthew6500
matthoot88
+mattrabbit
mattv
matzRRR
matzkia1
mauberries
+maulnak
maupz
+mauriveitaas
mausre
+mav daddy
mavrooo
+max acc btw
+max all max
+max pet hunt
+max yet jake
maxcapealt7
maxed
+maxed nelis
+maxedtheaxe
+maxgt96
+maxiicano
maxiwiz
+maxiyogi
+maxplayer
maxrevenue
+may him
+may lay
+may thai
maybe
maybejarrod
mayhemrs
mazzahS
+mb
mcbig12
mcbreeeeee
mcdonald
@@ -29036,231 +59732,502 @@ mcgigity
mcmadpac
mcnuggetcons
mcrane1202
+mcsoftee
mdawg
+me disabled
+me espresso
+me handicap
+me ineffable
+me no bueno
+meOwNYXx
+meat jun
+meatball47
+mebigbob
mechmillz
+medicmain
+medictbh
+medium cloos
+medium unit
+meds bad
meekmook
+meemimestari
meepify
meerks
meermaijer
meetoihi22
mega
+megabass
megajoeck
megatricks
megoodpvmer
megret
+megxolotl
mehloncoly
+mehmuss
mehunder
+mei
meinen
+melangina
melborn44
+meldrahn
meleonlyslay
mellaa98
+mellagro
mellonman
+mellow jack
+melncholy
melog
+melog dog
+melvin quit
memephis
+menaceirl
+menarehot69
+mendier btw
+mentasltu
+meow for gp
+meow for raf
+meowthc
+meowtism
merryrice
meskil
+metblo
meth0d
+methcathione
+method888
+mettleman149
meurtpo
+mewby
mezins
+mf Catleesi
+mf Giggle
+mf neeko
+mf yappin
mfHank
+mfHank Hill
+mferJones
+mg
mhe00
miTzy
+mia celtic7
+miaka yuki
+mianbaoroll
+miceworkteam
+michaelma4
micheal
michixranged
+microham 69
microwave62
+mid clicker
+midget man
+midzy
mie19
+mielas
+migboincan
+migidi
migilicuty
mihalys
mikbea
+mike 6
mike2290
mikefizzled
mikeohtran
mikh
+mikko2112
mikkoyy
miko
mikomiko
miksuwu
+miku qwq
milahreigne
mild farm
+mildMuscaria
milfnmybed
+milkpatty
milkthegoat
milkuwu
milkybestdog
+million sof
miltryguy248
mims2dank4me
+minato
minatokill
+mind goblin
+mindislost
+mini booty
+mini r00d
+mini rocklee
+miningas
+mininimum
+minit
+minky
+minmax
+minni mile
+minor flex
+minorhazzard
+minsy
minty1981
+mintyale
mintyclintyy
minus
+minus Left
minyhitsk0
miokaen
mippim
miqli
+miramyra
+miregal1
mirhagk
+miriti
+mis
+misery2018
missingIink
+missuy
mister
+mitchelle1
mitchrocks
mitchvvs
+mixed snacky
+mk6
+mkden2
mkl782
mks200
+mksu
+mkvo
+mlars300
mlbg
mlgb
mlgkittycat
mlkia09
mlong06
+mmaxie
mmigo
+mmmkay02
mmmmmmmmhmm
mmmmmmnmmnm
mmmuurrddaaa
+mndo
mniml
+mno
+mnt
+mo an
mobile
+moer
+mogwire
mohak45
mohrs0
moist
+moist P00P
+moistSwan43
+moistcltoras
+moithab
mokkakulli44
moksi
+mol 99
moldsack
mole
moleflair
molkyrion
mologgi
+molten ass
mombasaa
+mombasaa D
mondklapje
+monero gay
moneybandz
moneypants
+mongelman11
monkaS
+monkasusdog
+monkegrip
monkey
+monkeybisz
+monkeymatt
monkeywilly
monkieturd
monnan56
+monstaa
+monsterje11
montaxus
monteurtje
+moo vo4life
mooblesyrup
+mooch86
moocowfish
+moogz
mooiboy
+mookixx
moomoocrab
moonlighterr
+moonona
+moonpapa
+moonrat2
+moonwyrms
mooofy
moor
morPL8morD8S
+morgan renee
morgf
morsotiikeri
morty
mortymoo
+mos f
+moscuz
moska
most
+mostalpha
+mothaload
motmyfanny
+motorbichael
mountcaedo
mpathetic
+mpel
+mpxd
+mpz00ne
mqaccat
+mr atheist
+mr boobrie
+mr buying gf
+mr mage t
+mr pink1
+mr rob iron
mr shroom
+mr triggerd
mr10inches
mr12345
mrDragon2009
+mr_adore
mrb97
mrbreadst1ck
+mrdickbals
+mrfox2
+mrgeck
mrkaramazov
+mrpurpdrank
mrvortex3
mrwoffy2
msHyde
+msb2595
msimmo93
+mss
mstfu
+mstr nay nay
mtash96
+mthic
+muchderanged
mucserup
mudbitedlite
mufassa
muffing
muggfac
mugii
+muh
+muh sheen
muhName
muhnamezjeff
+muhnkydluffy
+muin101
mulletman360
+multi genius
+mum ranger
+munalutkutin
+mungero
+mungkee
munney
munoz316
muovaz
murders
murphy
+murphy XD
musashi2109
musei
+mushpinator
+musnew
+musta_matto
mustaa
+mustardsurma
+musterdsauce
+musty04
mustypill0w
muta
mutanen
mutsCateer
muufaanchu
+muy bien
+mv3
+mvgatron
+mx
mxgali41
+mxpurp
+mxq
+my fruit
myballskin
mychaelven
+mycrazy life
+mydmallsick
myexdidntrs
+mygf
mykohchoo
+mymoonkeyz
+myname Borat
mynamesDog
+mypp
+myrtlecat
+mys_try
mystic
myturngranny
mzsc
+n a g a
+n k h
+n o m i s
+n oge
+n os
+n00b tax
n00btube
+n00dIe
n0DaT
+n0n Believer
n0ns3nse
n0rthmemphis
+n1ch0las
n1ghtmares
n3cromans3r
+n4ts
+n8m
+n8n
+nSubordinate
nVox
+nYer
+n_koo
+na cba
naamarihomo
+naapurintati
+nabritches
+nachoss
+nae drops
nagezz
+nagoog
+nah cba tbh
nahbo
nahhhh
nahka
+nahkasaurus1
nahkasohva
nakneemo
naksuu89
+naldy
nalon34
+nalyD yrraB
nambourian
+name is damo
namelessRS
+nami skin
namnori00
namtar elite
+nancyy
naner
+naniichan
naomi
+naoshika
napkins r us
nappera
+narbsta
+nas xy
+nashmvpx2
naskend
+nassikka
nasty
natalya
nathank498
+nattte krant
+natty nest
natur3za
naturesque
+natuurhuisje
+naughty ruz
naunas
naven
+navi my dude
+nawilsi
+naxe
nayo123jo
+nbyo
ndrs
+ne cro
+ne hi
+nebegyd1k
nebula3
+nechs minute
+neck bungee
+neckals
+nedpvm
+nee ceri
+neebzor
need
+need drops
+need panoche
+needs tips
+neeeefe
+neeloy
neenisneen
+neeshmow
+negative
neggibo
neil
+neil v
neiti
+neitsytkulli
+nekemaribo
nelrb
nemofishtits
neocritter
+neoneu
+neophyte8
+nerdneck irl
nerf
nerpkin
netsh
neuber
+neukbare
neutekind
neuz
+never lucker
+never s0ber
+never subtle
+neverblume
nevercash
+neverenought
+neviilz
+new pfp
newaccbtch
newallmaster
+news
+newt merch
next
+next 99
nexus
+ney spook
+nezumileo
+nfandango
+nh0x
nhy0x
+ni ox
niaya
+nibbla
nice
+nice to game
+nicelah
niceslime
nick
+nick at nite
nickdv
nickel
nickfx
+nicky
+nicnad
nico
nicoxpico
+nieve nooooo
+nightmareram
nigriV
nikhil
nikler
@@ -29272,20 +60239,53 @@ nimlif
nioem
nipsunaapuri
nishkid64
+nisq
nitro
nitsuj315
nivk420
nizmoNL
+njitram
+nk spy
+nko
+nl Airo
+nmb
nmhbu
+nmzcow
nnick999
+nnko
nnmf
+no birds
+no engraving
+no flek zone
+no gag
+no gay ok
+no l00t
+no purp bug
+no use
+no1evrnos69
noDDD
+noTheOwNeR
noThumbz
+no_odles
noahcous
nobankpin
+nobjockey400
+nochoc
+nodeLT
+nodropman
noek1
+noeyi
+noice garrry
+noiteerIW
+noki keppi
noldaddy
+nomiS
+nominMaxCape
+nomlaS norI
nomorelies22
+nona nona
+nonamechange
+nondedjuu
nont0xic
nonuboko
noob
@@ -29295,21 +60295,41 @@ noodle
noong
nopies
noplanhere
+nor so osrs
+norI Ryan
+nora cat
nori
+norm HARDY
normal
normie
nornavsoc
norrisi
+nos
nosemar
nosepack
noskilljoe
nosnhojgib
+nosoberday
nostalgiaeng
noswaL
+not Duncan
+not chop
+not cumingbk
+not gods
+not heppi
+not herbo
+not him dude
+not shaken
+not tiv
+not tk
+not today m9
+not ual
not1stepbak
notEdited
notPape
notRoyal
+notanjiro
+notazerk
notbennie
notdead91
notefficient
@@ -29317,54 +60337,119 @@ notepad0164
notepad14
notlikedis
notsoB
+notsosmart11
nottrade
+notwack
noutonme
novali1
+novike
+novikid
nrakneS
+nrdz
+nt combos
ntarallucci
nthing
+ntrstng
+nucnad
nufnufaz
nuggeets
nugs
+nullbeing
nulluserid
+numb3r go up
number
+number 11
+numbly
numnut
+nuoli tulta
nuopisa
nurbaya
nurriez
nusta
+nusta but
+nut low
+nut5ack
nutes
+nutpeanut
+nuubbaa
+nuubii
+nvcu
+nvrpurplight
+nwate
nyareet
+nyc ramme
nyet
+nymue
nysyGG
nzskater
+o Buffy o
+o Galaxy
+o Jay o
+o NEK o
+o Pug o
+o SiLeNce o
+o Steven o
+o c c u l t
+o chem
+o n e i n v
+o tp
+o tu
+o0 Rang0r 0o
o00dan00o
o0Ganktank0o
o0mni
+o3d
+o9
oAQu1LeSs
oAlsen
+oAmber
oBugz
+oBuster
+oChezzeRo
oClairebearo
oClay
+oColeeey
+oDemko
+oDriew
+oDrizzyyy
oFelipe
+oGMRKay
oGreene
+oGun Smokeo
+oHEXo
oHoriizon
oHxD
+oIce Teak
oKsirf
oMDmA
+oMalevolence
oMoJo
oOGeorgeOo
oORagnarOo
oOoITITIoOo
+oRonde
+oSanta
+oSea
oSpecialx
+oTARNAo
+oWags
+o_o SEMA o_o
+oaenii
oaflion
oaisjgljlak
+oaj
+oakypinkre
oatenz
obama
+obamas ass
+obbE x
obees
+obej
+obese_man61
obican
obitokun
obosk
+obvi_no_gf
ocbslim
ocian
ocruT
@@ -29372,100 +60457,222 @@ octazookaa94
octopussi11
od1np1ck
odafan
+odd woof
oddfinn
+oddniffler
odenthas
+odinsjourney
odio
odlolien
+odty
odyssey
oerinn
+of a china
+of booze
+off balance
+offends
offshore
+og kasi
+ogag
+ogbrittney
+ogeesus
ogg25the2nd
ogned
ogogog
ogteleblock
+oh no fuse
+ohSmelly
+ohai ohai
oheesnose
ohgoshyjoshy
ohh_man200
+ohhh nooooo
ohhnnnoooo
ohia
+ohio is for
ohioisonfire
ohiostate347
+ohly
+ohmyrod
ohtukurva
+ohyep
+oi ranga
oids
+oigia
+oily rod
+oilysurprise
+oixi
+ok baba
okannah
+oke
oksen32
+ol Twizted1
+ol kq
+ol pleb
+ol_l
olatrekuk
+old Soul rs
+old kind 911
+old man agst
+old man zedd
+old meat
+old mem
older
+older fruit
oldsports
oleNeilyBob
+olen lahe
olindaelostz
oljon112
ollie
+olliedamage
olliethekat
olllllllo
+olllllllo TJ
olmec
olmmmmm
+olms beach
+olovi kolome
olsyboi
+olvia
omavi
omegaOnepump
+omff
+omgbabestop
omgimacarrot
+ompahelppoo
omrip96
+omwtotob
+omyefge
+on 9
+on the fella
onalite
+onbak1992
oncenterlink
+one 69
+one1one1one
oneblade
onelifehaze
onespringday
oneticktony
onex
+ongelmanuori
+onizuka
onle
onlinetares
only
only4pvm
+onnetar
+ons va
+onthebook
+ontspan maat
ontv1992
onyo
+onyx no
oo7jordan
oobent
ooblued
+oof mikael
+oofbored
+ooi
+ook Thunder
+ookbye
ooli
+ooo Papi
oooRush99ooo
+ooooby
oooopsiee
+op
+op P
openyoarmpit
+opiumwet ii
opneemvot
opticsnail
opzu
+orangeluke
orangetree34
orb in bag
+orb knob
ordy
orebac
+oreo lil
oreru
+orexinergic
orez66
+org asms
+orgasmdonor
+orielor
orig
+orir
+oritx
orkans
+orkut
+ormz
+orophyr
+orra
orrichimaru
+os SlayScape
osJuhiss
osbhuda
ose420
+osmati
+osn
+ososrswhen
+osquiver
+osrs Apathy
+osrs MCFS
+osrsbilly
ossaciM
+osu
+osynlig
otallone
+otdog
+oteb
otherguy3668
otoboR
+ottledread
ottx
+ouic
+oum
ouououuoouuu
outohere2k
+outsmart3d
outsourced
ouwe
+ovas bis
+overact
+oversize rat
ovox
+owen4boro
owenwilson
ownsome1
+ownt by flan
owo0
+ox
+oxifaze
oxoxoxoxox
+oxtale
+oxyy
+oysni tu
ozos
+ozztrevor
+p hd
+p n g
+p x v x m
+p000r
+p0ge
+p0tat0_baked
p0w3r
p0werSinn
+p0werliftin
p2pell
+pAj4ri
pHqiXfQb5rpO
pRandgris
pRiesty
+p_tane
+paatttxxi
+pacack
pacbackpack
paccerz
pack
@@ -29477,18 +60684,29 @@ padq
pagakoning
pahe
painter2020
+pajiaobin
pakgg
+pakkohoito
pakoonjuokse
+pakwatch
palacePier
paladylan
panda
pandahands
+pandas flail
pandascapes
+panel v2
+panelupgrade
+papa jjinx
papaisthatu
papatec
paper
+paperbutter
parB
para1911
+parsakeito
+party-joiker
+partyinferno
partymonkey
partypooyan
partypossum
@@ -29496,6 +60714,8 @@ pashol
pasismi
paskapylly6
pastry
+pat summitt
+patbeerpants
patches4623
patnazNkryme
patriciogmz
@@ -29503,9 +60723,18 @@ patrol
paul94nl
paulimvitor
paulmacawk
+paw fetish
+pay peru
payout
pazmar
+pb tiramisu
+pbagel
+pbj eater
pbjt
+pcce
+pd3
+pdi
+peace love h
peaceofbread
peaceoverwar
peacsenur
@@ -29513,151 +60742,280 @@ peajy
peakyberry
pebbles256
pecemker99
+pecker neck
pecko517
pedagoog
peeje
peenwa
+peepeepeepe
peepichu
peepoGamer
+peepoParker
peerks
pegfemboys
+pegge jr
peksi
pelaan
peliken2
pellemaailma
+pelmot
+pemmex
+pen gee23
penakonda
penally
+penile pain
+penny 4 thot
penteroinen
+peoples0123
+pepe max
+perc ceo
+perc5
perckey
+perigor22
perlecta
perm
+pernieuw
+pernix
+persepullo
persesreign
+persisted
person
personajay22
personal
+pesto pasta
+pet melon
+pet my mole
+petc0
+peternguin
petesmcskeet
petlucksucks
+pettyrogue
pewbs
+pezzler
pfiati
phatpunch
+phatsocallum
phattymaster
phen0mXD
phenotype
pheras
phetagoras
+pheyyw
phinex
+phlayme
phonon
phoop
phorme
photolstamp
+pi n g
pibbi
+pickle llama
pieater_314
pierke
pietu
pietun
pieww
+pigeonkisser
pigeontoeman
+piggybosspen
pigusvaistai
+pihseurc
+piia potka
+piie
pikir
+pikknu
+pikkukala
+pikkupeppi
pillman
+pilludemoni
+pimmscup
+pineapples56
+pink soup
+pink spoon7
+pink4
pinkdragon76
pinna67
piomon
+pipiopi
+pippelisurma
+pippy 429
pipratoos
pir0tekniq
+piraat bwana
+piratedog7
+pisk naxui
pixelpeat
+pixiedrank
+pizano
pizzaforce33
pizzaloksi
pizzalord321
pizzerr
pj137137
+pjmonkey03
pk3rsh34v3ns
+pk_all_pk1
pk_by_me
+pkdrwho2
pkdude116
pker
+pker ice
pkerdude559
pkew
pkpk
+pkshitomario
+pkwy
+pl33k_supa
pl3d
plaatshouder
planetflat
+plank r
+plankforsure
platygirl
play
player198792
+plea
pleadingface
pleadtha5th
please
pleasebuyckb
+pleb Remains
pleb166
+pleben
plebminister
pletsjer
ploomert
plopko
plszulpet
+plum lee
+pluma
plumb
+plumb bum420
+plumit
+plumpy nut
+plz dont kry
plzl
+plzvenmome
+pm 2 spy
+pm4 boost
+pmax
pmmefeetpics
+pneck
+pnn
+po0z
+poachpenguin
+pocar
+podginator
+podolskee
poesiewoesi
poesiwoesie
poffdragon1
+pogarmyy
+pogdoor
poggersgif
poggie
pogglewogger
pohaku
+pohwe
pointn
+pointright
+poire
+pok758758
pokas
pokemonsunim
+polentusmax
politieman
+polo gee
poly
ponderer
pontlarge
+ponyika
+poo from bum
poobutton
pooga
poohwell
poolbadger
+poon fisher
+poon nanny
poop81
poopeepeeman
poopsm0ke
+poorlyhung
pop-tato
pope
popstantot
popwig
porkchop-kun
+porkchop87
+poro600500
+porpleRanger
poseidon0928
post
+post nut sad
potato
+potato pleb
+potatogod62
+potatolove20
potatoplayer
potholderz
potionsell3r
power
+power helmie
+powercheck6
+powerpluging
powerslide
+pp 73
+ppb
+ppdandelions
ppengu
ppfighter
+ppidd
pr0jectcarry
+pr0kkeh
pr1est
+prQmethazine
practice
+praskiepas
+prayfx
preachably
pregnant
pretty
prillage
+princesstktk
pripps0
prkr
prncss
pro90
problitz1
+progmog
+project eggs
prom
+prostate
proud2bbalin
prtck
prut257
+ps1 jrpg
+pshot25
+psp 11O6
pssssssh
psykotic12
pt37
+ptdn
pubnroh
+puddskape69
pudgy
pugginSpooky
+pugmen
+puhkipantu
+pul uk
+pulinaseppo
+puljulaine
+pullo viinaa
pulpfree
+pumiss
pummi984
pumpkinslaye
+puncher
punchlineNL
pungur
punken
@@ -29665,63 +61023,137 @@ puny
pur3gh0st99
purEvil808
pure
+pure owns al
+pure wood23
pure10693
pureblackid
puregluttony
+purity
purpfanatic
+pusha tree
pvm bioodz
pvm-owning
+pvmingbr0
pvmrob
pvpmirage
+pvtRyansPvts
pvvm
+pwn me plox
pwn0grapphy
pwn2b3w1ld
pwnnya
+pwuh
px yra
pxls
+pxtchy
+py ze
pynergy
pyro
pyro255
+pyromaangast
+pyttyyn
+pz
pzqlpwbma
+q Aleks
+q Nossie p
+q b0nkerz q
+q f z
+q l l u
+q sl
+q-Mini-p
+q0k
q9q9q
qJezza
qOsMoSiSq
qPepsi
qQazp
qTiger
+qazi
qazio
+qbc
+qbi
+qbt
qckr
+qerw22
+qez
+qi e
+qiany
qiunc
qiyamah
qlxxlp
qnzjosh
+qoao
+qooo
+qop
+qorbin
+qp
+qpwoei1029
+qqgoat
qsse
+qtAlice
+qtb
qtei
quazepam
+quekchose
+questarila
queundas
+quickiies
+quickmoist
quickster61
+quit afking
+quit cry
quitb42k
quiver81
quky
+qwaylub
+qwerps
qwertralph
+qwerty2431
+qwertyboll93
qwertyuiozxc
+qwl 2
+qwopr8
qwruqwpourqr
+qy
+qz
qzxz
+r a i n i n
+r a i q
+r d x
+r eflex
+r ehab
+r i ley
+r n g o d
+r o c h i
+r pt
+r u a pussy
r0adh0g
r0jasss
r0mera
+r0p3_tv
r0yalrag3r
+r1ch3r mitch
+r1chmond
+r1ddlbox
+r1z1n
r3laxed
+r3mov3k3bab
r4cky
rAEbl88
+rIcHmAn4
rMatey
rVino
+r_rl
+raando
rabid
+raccy rac
+rackee chan
rackelzz
rackemballz
rackzcity
racoon96
raddawgg
+rademakertj3
radox
rafa2424
rafnek1
@@ -29731,28 +61163,45 @@ ragegoon206
raid
raiden
raildex
+raisin canes
rakete
+rallikaar
ralliss
+ram this
+ramafie
ramblin
+rambo 1206
rambombon
+rambroze
+ramjamyelham
ramsesthecat
ranarr
ranarrbiss
random
rang2d
range
+rangedp00wns
rangoraus
ransty
+rarefleas
rarekia
rarru
rarurrer
+rat catcher4
+rat ritual
ratboysteve
rateddd
+ratirl
+ratirlAlfred
rats
+rattiyanee
ratzzzzzzzzz
+rautamon
+raves m4ck
raving
ravioliwren
rawheadshot
+rawkneedong
rawr
rawrsmashh
rayhoon
@@ -29760,31 +61209,56 @@ raymanvh
razorwheels1
razzdnutz
razzex
+razzmatazz23
+rb winter
rbjk
rbootsGOD
+rcr333
+rcyy
rdrluvr77
+re-frozen
reBoosted
real boyo
real-derin
realAxu
+reallityfail
reallyhigh
realpcooktho
reamillion
rebirthofyay
rebuildd
+rec me
reclinedgmr
recognizable
+reconjack
+red eye jedi
+red fox8
red504
+redank
redberry
redditlucio
+reddragon950
+redeye q p
redgorilla12
+redhunter193
redman211
+redpatch
redracecar27
+redrumyliad
+redsheik
redsox216
+redsp3c
redwagon9
+reenur
reese
+reetznutz
reflexlols
refurb99
+reggie v2
+reggieblunts
+regorydog
+regular ph
+rei1315
reikimastr
reilaria
reistje
@@ -29794,298 +61268,604 @@ rekrog
rektum
relac
relaxed
+relaxed now
+rellu riku
+reluf
+remind
remind309498
+remko maxed
+renaissance
+renasue
+renruB
+reopened
+report you
+reptil51
+reptile reas
reptilepoop8
+repulz
resU
resetcentral
+resupplyalt
+retern
retrrd
+retuson
retzc
reznas5
+rezpek
+rfr0sti
+rg44
rgfji
rhey
rhiller83
rhygan1
+rhys c
ribalibali
+ribe4
ricard0live
ricardos78
richarb14
richy
+richy rain
rickrko
+rickthick73
+rickystackss
+ridewitme
riilis
+riipx
+rikkertik
riksa123
riku230
+rikuirl
riller
rils2
rimpati
+ringo794
ringosting0
rino
+rip dj
ripHuyy11
ripbobthecat
+ripend
+ripsrc
+risbarn
+riskbizz
+risker
+ritcey
rithvik
ritotrisoto
riuCooler
+rizn
+rjh300
rjweb
rl9g10rs
+rlkgfseorhfe
rnatt
+rng god x
+rng limey
rnom
rnue
+rnv
+ro0b0
road2broke
rob nagle
+robbinator27
+robhode
robilo123
robinchris
robo
+robombalt
+rockcrabpvmr
rockeroHN
+rocketberg
rockhead7746
+rockstarwht
+rocky leeg
rockyandtaz
+rockyou 2
+roest
roflbaker
roggy
roldan_one
roldunogene
+rollsyy
+rommmey
romper
+roofy
rornburst
+ros n
+rosati924
+roshambee
rossdark1234
+rossmain
rostiefrosti
+rosullivan8
+rot popstar
+rotceleS
rouge
+round cat
+round kc
+royalpanda53
+royce ranger
rqkrtzjvbsuh
rrautamies
+rriot
rrrpR
rrrrrrc
rryutie
+rs3 blows
+rs3dansgame
rsoby
rsruinmelife
+rstr expert
+rsyux
rthgo200
+ru-ne
rubengouveia
rubikslayer
rubj3llyonme
rubtuge
+ruck ur dad
+ruding
ruikkuapina
+rukdingme
+rullakebaani
+run amuk
+run its bc
+runaru
+runaway iron
rune
+rune dogger
+rune enjoyer
+rune poon
runedongs783
runedragslay
+runeferyearz
runehol1st1
runeika
runep3
runequeen163
+runesc4pe
+runesoftime
runetraction
runite
+runite bars
rupt
+russien
rusted
+rusted shaft
+rustigggggg
+rustinged
+rustys word
rusvet
rvrse
rxbi
+rxylvrn
ry1n
+ryh
ryppyreika
rythail1
+s h l o o p
+s hok
+s i r tinly
+s k i p o w
+s laack
+s n u f f e
+s nekk
+s t i l
+s tress
+s0spwnz
s0uln0te
s0ultage
s10w
s11gm4
s1ayerg0d
+s1pa
+s1r maximus
+s3fa
s3nna
s3nt
s3ppa
s3vuu
s4mu
+s4nc
s7v7nty
+s7vey
+sCUM Runner
sKDestine
+sNEXyBaker
sSahm
sSpring
+sTs W33D
sTxje
+sYo
+s_ck it
+sa ko
+sa-ku
+sabfas
+sackiltrog22
+sackmen
sackmyduck
+sacredchange
+sad nmad
saddest
sadgeboi
sadnmad
sadnmad666
+safe bunnys
safermoon
saffyO1
saffyO2
safino
saguyuyu
saiko
+sailsouls
saintffs
saiyansmithy
+saknoM rD
+sakuyaaa
salad
+saltia
saltycups
saltynads
saltypepper
+saltysealife
+sam ofc
samdegreat
same
+same hada
+samo0o
+samoht10
samothon
samqwop
samtatt1
samuraigod13
samwise1133
+sandai korky
+sande108
sanooJ
+santa cloud
+santa ho ho
+santorio
saphinix
sara
+sara 35
+saralandry
sarcasmz
+sari essayah
+sarppatsu
sashamii
saskecas1
+sassy fool
+satisfried
+satsuJima
+saturos159
+sauna41
sausage
savPalestine
+savage_grey
+savi 2
+savukorilas
sawb
+sawb0ssnl
+sawl7
+sawshoulders
sawyfabj
+saynototofu
sayyless
sbrand0n8300
+sburzz
+sc arlett
sc00ben
scaffidi
scallicci
scape for 1
scape4ever20
+scapey123
+scaredbunny1
+scat wagon
+scb
+sccrub
+sce nes
scerp
+schaamlap
scherzmfromz
schetts
+schiggs
schildknaap
schmashmu
+schneeple
schneky
+schnibbyy
schzu
scidder123
+scitles
scnick
scone99
scoobydooby9
scoobysdooby
+scotian 902
+scottslipper
scottuzamaki
+scottydo27
scout
+scout robot
+scrollspirit
+scrotumfart
scrubEE
scuffedbrain
scuffi
+scumbag 66
scuterholmes
scythe
scytheXI
sdfsd125
+sdotmaxedout
sdzl
+seBlait
+sea owl
+seabird
seachrome
+seacowcow
seamondemon
+search0
seared
+seawolfsam
+sebbe osrs
secs
securite
+see attached
+see me whip
+see4limbs
+seepah
seetod
sefeeee
+seffimz
seizure
sekkuso
selfShow
selfcurse
+selfish coal
selling
+sembino
semper
+semperstrik3
senZe
senapsgasen
sendu2edge
+sendykap
+senggg
senpai
+senpai btw
senseyf
+sentterih
seppem
seppes121
seppevb
seppohaa
septynetas
+ser angus
+ser tugger
+seraphine jo
+serbuttkiss
serious
seriouslee98
serpentSmelt
+servix
+sessarrow
settyboy66
+settyz
+sex mum
+sexy skuxz
sexypersian
seyed
+sezery94
+sfinx71
sfnative
sfsdfg
+sgaben
+sgf419
sgg9779
+sgk
+sgq
+sgurdevolii
+sh-Y-ft
sh1nan1gans
+sh1ttyrng
sha0ski
sha7y
shabado
+shad y
shadex94
shadow
+shadow brr
+shadow btw
shadow77440
+shadow926629
+shadowarmy
+shadracker
+shafli
+shakedabooti
+shaking irl
+shamabeast
shamans
+shambbles
shanemck
shantyklawsh
+shape
share
sharingbox
+sharkey_32
sharpshot776
sharto86
+sharyn cox
shasd whip
shawnn1
+shayge
+she btw
+shed dabber
+sheep5
sheev85
shekelgoblin
+shelfy 2
+shents
+shere khan1
+shes sleepy
shezze
shhit
+shiddingpant
+shields_zzz
+shift drop
shifty
+shiftydaboss
shigha
+shiky
shio
+shishiodoshi
shisui
+shizcake
+shkoB0
shliure
shmoopaladoo
+shnizzlebear
shoarmamama
shokki
+shoopa
shoot162
+shordilele
+shore
+shortsleeves
shortstroked
shower
+shoyu
shreddin
shredness
+shredskater
shrek5
+shrigma
shrlmp
+shrooon
shroooooooms
+shrootfarm
shroudyroudy
+shtos
+shturpants
shumili
shushlik
shvxstxchla
shxg
+shxyzzz
+shy lo
siNusas
+sibeepboop
sickGeneral
sicklyhare
sideways640
sidney3241
sienna
+sienna sleep
sieracki
sigh
sign0ut
siik
siimzz97
+siiz
+sikatopi62
+sikazz
+silburr
+silemani
+silenthenk69
silentical
+silenttrew
+silim acac
silk
+silly cowboy
silvar93
+silver bean1
silveraze123
+silverwar33
+silvethril
+silvio lol
+simi sai
simmeg
+simp 4 life
+simple
+sims Hsp
+simz
+sinannani
sinappi688
sindicalism
+sindulis
sinfulnature
+singlemom34
sinsofmany
sippin
siptar
+sir ecnar
sir skau
sirlotje
+sirmesoulier
sirpaul
sirpoopball5
sissijuustox
sisuwu
sitonmaface7
+six2midnight
sixanddagger
sixerr
sixovercrest
sjaq
sk0me
+sk1rttt
sk9bord
skaiii
+skaios24
skandaali
+skaring kids
+skateenjoi
skaterdogz
skatermatt91
skatterpunk1
+skaugi
+skcusxegaj
+skedie
+skeide
skek
skeletoon
skeli
sketchdreams
+ski
skidipoppop
skilgrave
skill
+skillachris2
skiller270
+skilleuhjong
skillmaster
+skillngbot41
skills2millz
+skillz davoo
+skin suit
skinny227419
skinnypimp71
skipz1419
+skittels
+skittlesour
+skiu_21
skizzurp
+skizzy sammy
sknzor
+skoalintry
+skoowu
skorthen
+skowotek
skranzii
+skrenne
skrtskrtpvdb
+sks110
skuccy
+skuirk
+skunk nugs
+skunkpaste
skunkskillzz
skyE
skyelar27
@@ -30093,50 +61873,101 @@ skyffoxx
skyz
skzs912lav
slaack
+slack austin
+slacky456
slajdaren
+slap her box
+slappfisken
slartiste
slavhouse
slay
+slayJTIaster
slayer
slayer92
slayerfrog57
+slayerxp
+slayetd
slayhore
slaying
+slayzerot
sle3k
+sleek2d
+sleepinonice
sleept1ght
+sleepy 940
sleepysleeky
sleepyweasel
+sleightest
+slemgaedda
slice
+slice O pie
+slickstick21
+slickvick21
slidesteps
slidtegitte
slight
slight7
sliginz
sliim
+slim in dar
+slim j3sus
slimski
+slinnGimme
+slippaa
+slipstrides
slobthyknob
+slowmopwns
sludgebag
+slundersc0re
+slurpeeboi9
slurpeeking9
slurpy40
slurpydong15
sluz
+slvtty slvt
+sly seyda
+slyhitman
slypupper
+slyr4ng3d
+sm0ke herbs
sm0kebeers
smChi
smackbo
+smaddz
+smaggd
+smalcano
+small boaty
smallmichell
smallppbigxp
+smalsey
smasher12121
+smasher95
smaugs
+smbonn2005
+smeerpijper
smel
+smelly fuss
smellyducks
+smerq
+smettjes1
+smh Monkey
smiithy
smirqqel
smithdarts
smittty2009
smoe
smoke
+smoke buds
+smokesIetsgo
smokin
+smokin turdz
+smokingalone
+smol bat
+smol chris
+smolBen29
+smoothcamel
+smoothlover
+smote
smoug007
smrgn
smuqu
@@ -30144,142 +61975,276 @@ smurfrookie
smurpfy
smushman
snaggle
+snagnURkill
snailydog
snakehuntr94
snakenbaked
+snaplocket
+snapped neck
snarfoo
snck
+sneakY geeB
+sneakyleazrd
+sneakyyj
+sneekeysnek
sneeky
snek
+snek killa69
+snek man_44
+snidletics
sniff
sniffmapouch
snikkels
+snipper143
+snoogensss
snoppen97
+snorlax481
+snot aap
+snow dude678
+snowdance
+snowfild
+snowkeepuh
snowy
+snowyhawk45
snowysonic
snoxxyl
+snp500
snubsnub
+snurtfe
snuskfet
+snuskukken
+snusnuending
+snygg o smal
+so joe
+so jung mijo
+so much ass
+soarix
+sobsk
soccerdog
+soccermom82
soccerrad177
sock
socopb
sodChamp
+soderfalk
sodynamic
soft
+soft dab
+softer bugg
+sofus64
soggybread4u
soggywaffel9
+sohju
soiled
sojraal
+sokoudjou
solfam
solidon
solo
solodiyloner
+solodoloyolo
+soloeraut
solopops
solos
solost7
+sombb
+somber
some
some1saybags
someBODY325
+somos papaya
sondrep
sonera
+sonoboymw
+sonofablitz
+soobli
+soombie
+soon2bxwife
+sophiebear69
soppel
+sorris alt
+sorry
+sorry pls no
sorrymatey
+sotaneekeri
soul
+soul et luna
souldrainer
soulkamikazi
soulkra
+soundspeeds
+soupnbannock
+sourkraut
soxx
+sp3edie
+spOnsOrr
+space craft
+spacemanriff
spaceonion44
+spagh bol
spam123
spangulation
spankmoi
sparkoftruth
+spartan1137
+sparterrang9
+special k258
+specialton
specuri
speed
speeder269
+speedtrain
speeeeeen
spell
+spenmaso
spete
+sphicologo
spiLLLLL
spicke21
+spiderman 13
+spidey
spigems
spinova
+spiwit twee
spladay
+spleiner
spletcher2
spliffens
sploobie
+spoiled mayo
+spondonicles
+spooki xd
spookib
spoon
+spoondrngplz
spoonfed
+spoontarded
spoonyg
+spoooficus
spootineftw
spord8
spozz
+sppak
sppoh
+spratel
springAnonce
springplant
springsteen3
+sprite zero
spritelum
sprits
+sprsp
+spudmyster
+spugEddi
spunkontitz
+spyde96
+spyrolegend4
+sq shield
sqad
+sqrls
+squareheadfk
squatlownslo
squidnstab
+squirrel1991
+squirt fan
+squirts
+sralisas
+sray
+srd
srgynt
+ssA taE
ssei
+ssh keys
ssj3
sspiriNut
sssu
ssttaann
ssyd
+st aeryn
st4k3l0rd
staarii
stabbycut
stabekk
stackables
+stackagawea
+stahldog
stainalt
+staleburrit0
+stan darshhh
+stannaz
+stannum
star
starcrosdlvr
+starfalI
starknightsy
starshoppinn
+starvn-marvn
+static void
steadiskill
stealthwolf
steckubnU
steel
+steel slime
+steeljake
steelplums
steeveee
steezybear
+steezyledge
stefanopt
+steflon don
stekkeT
stella1
stepbro
+steph n
stephvn
steponnopets
+stereos
sterre1ch
+stertanz
steveagogoo
stevenovak6
+stew thru
stewiii
stfn
sticc
stickuppix
sticky clay
sticky holes
+stickygirl
stiff
+stig sucks
+stiice
+stikybandit3
still
+stingray2018
stinky
+stinkybunny9
+stinkymooner
+stokstaart
stoned
stoned84
stonedowned
+stonerwelds
+stoneybolgne
stony
stoodzy
+stop log
+stopbegging
+stopy wersow
+stor m
storkis95
storm
stormynight
+stouterikk
+stp3ach
str3tch33
+str8 balling
straangeDayz
+stradiSlay
stranglege
+strap locks
strateigo
+straw cup
strawbery
strawnk5
streetshark2
@@ -30288,63 +62253,125 @@ striker
strnagetamer
stroudlee
strp0tzz
+stugex
+stuntti
stupid
+stupid game
stupidcape
stupot845
stylebend3r
styrkekram
styxRYAN
+sub merge
sub2purple
sublime
+submunculus
subooptimal
+substring
subzero
+suchti
+sudden sloth
suga
+sugar d0nkey
sugarfreeman
+sugarwater
+sugme nob
+suheil69
suhuan123
+sukau
sukc
+sukidarkra
sukii
+sullz
+sum1elsecall
summa
+summa arte
+sumsy
+sun delusion
sunaert
+sunday tea
+sundburgaren
+sung101
sunkir
+sunkirrr
sunny
+sunny sponge
+sunrakuz
+sunris
+sunu
+suolahappo
+sup J
sup3r0n3
supagorilla
+supalordwar
supbruh
super
+super slooow
+super system
+super-thoms
superbuds
supercolds
superj4
+superlisko
superlonely
supermanJJ
+supermarket
supermaxx
+supermoist
superr
supnoobs10
suppertmain
+suppus
supra
surfboardcat
susanno
+susdog
+suspect12
suss
suwo
+suxc
+suzuky
svedanya
svennepen
svenskeren80
+svettnisse
+svimmelskam
svoji
svrN
+svstre
+svti
svver
+sw x
swag
+swag dr
+swagburgler
+swaggabawz93
swaggb0y0wnz
swaggie365
swagscape666
+swake420
swamp
+swamp man_43
swampertman8
swampwitchx
+swampy fool
+swansoup
+swasian
sweaty
swed
+swed 420
+sweet ass
sweetpissin
+sweety 77
sweggdaddy1
+swerve q p
+swfc50
swfc51
swftz
+swiet
+swiftmango21
swissbagette
+swol
swolelord
swooinc
sword
@@ -30352,130 +62379,256 @@ swordngun3
swordsplay62
swxasxx
sxkes
+sxtt0
+sxybro
sycp
+syklo
symmm
synack
+syndra007
+synnistra
synterrafox
syua
syytu
+szer
szeth17
sztuk
+t iel
+t imbo
+t r a m
+t rio
+t u k e
+t ux
+t-Wrench
t-painn
+t0_valhalla
+t0ast mal0ne
t0c00l
t0nni
+t0xicpoptart
+t1n3
t1tz1
t4aker
+t4t frot dog
tOxI
tRIPdoubt
tRNA
+tSessa
tZiMiNt
+ta det lugnt
taasen
+tabbionny
+tabulast
taco
+tad3j
+taeyeon
tage3xx
+tak0981
take
+takimoto
+takotime
+tala 7t
talinklion
talisam
tallest
+tallwhitebr1
+tamesh
+tandem dooks
tanfastics
tanguay478
tanklesss
tankyster
tanuliina
+tanzfangplz
+tar
targ119
targa
tarpGC
+tastenz
tatarsauce
tatuwah
taxed2
taybonejones
+taysmehu
tayyab
+tazzen
+tazzzz31
+tb 3O3
tbaballers
tbach
tboowscouter
tbow
+tbradz
tbrey24
+tcorky
tcroft
+tdawgthekid
tdoe
+tdogtsw
+tdslaterG
tdufflebags
+teagantime
teakte00
+techev
techeverria
technitions
+teem0her0
teemerco
+teh_new_guy
tehe302
tehskoozy
teini_horo
+tellymantel
+temmi69
temx
tenac
tentacion
+tentacruel38
tepaseohijo
terenerd
teroy
terrence
+terroristiI9
+terrryfold
+tescoworker6
+tess tlckles
+testokersa
+tetinhaaa
tetsundo
teum
+tevlevdeR
+tewwowism
tezje
tfortal3nt
tfsi
+tfw
+tfzx
tgchick3n
+tgkiller
+th0my188
+th3engineers
th3m0nrr0
+th3physicis7
thaiboygoon
thajokerkid
+thames1000
thasonn
that1stoner
+thatbaldkid1
+thatbuttguy
thats
+thats bone
thatthicksix
+the 2 of us
+the G herbo
+the Unreal
+the Zec
+the afg-gun
+the assail
+the big girl
+the capt
+the creaper
+the girls
+the kleeborp
+the lupo
+the lurkkii
+the mighty R
+the ocean
+the suns
theDazzling
theFish
theH0witzer
+theHNC
theMatan123
theSuperb0wl
theWOODchpr
+the_blindguy
theachaian
thealemdar92
thebestgf
thebrucelee
+thecoolbro97
thecwakecake
+thedamoes
+thedarclit
thedarklit
thedyermaker
theebeker
+theeib
+theforkster
+thefunkmonk
thegamebad
+theguyman160
+thehow112
theironlotus
thejonsson
+thekingkane1
thelanco
theletterbla
themaestrox
thematrixgg
themrgiggles
+theon
theonebrova
thepirateman
therangetank
+thereal bi n
+therealAxu
+therealchr1s
+therealinfex
+therealramba
therminy
thes5016
+thesavior315
theserpent
+thesmurfster
+thetibo
thetoday
thewooshh
+they gave up
thezucc
thhxd
+thicassglass
+thicc dady
thicccc
thicchode
thiever05
+thijssb
thinker
thinky
this
+this blunder
+this gu y
thiseku
thisthat2019
thongmasterb
+thoomed
+thosma777
thot
+thot tub834
thotortiana
thoughtz
thrakataluk
+thrashcan86
+three2one0
+thricer
+throat queen
thrynandwen
+thug z9
thugger
+thugli
thundeman999
+thurgo pie
+thwison
thx4zloot
+tibbs plural
+ticklemesack
+tidnabregdab
tienermoeder
+tigerturtle0
tightteen97
tijgertje3
+tiktok rizz
timaye56
timejumpsolo
timmaxio
@@ -30486,187 +62639,376 @@ timmyjoe643O
tinmer
tinnaytookit
tintaria13
+tippystick
tipua
+tipyt0p
tire
+tiredcloth
tisbea
tissiliisa
+titches wit
titsanddrags
titty
tittyjuggler
+tj44
tjappko
+tjcombro
tjd1233
tjomka
tksnevrlucky
tmahones
tmeer
+tmeer 18
+tmjdx
tmued
+to dd
to0Oldf0r1t
to_o
toad
toad03
+toasted max
toastfinder
toastypoast
+toatsme42
+tobiasalex4r
tobinoo
+todd crosset
todtplanker
+toe2
toebumper
+toes
+toesmeller87
toff
+toff haha
+toffelboy
+toffij
tojo228
toks
+tolerable 24
+tom hutch
+tom widdle
tombaum
tombradynfl
tominator87
tommybun
+tommys488
tomrichmond9
tomriddle09
+tonko
tonttitonder
+tony danza
tony el gros
+too bad
+too known
+toolbar
toomastoomas
toonits
tooowise
toot
+top her 1000
+topdollar
topgun 17
topgun343
+topie
+toptom90
toqs1986
+torfy
tormutrose
+toronomans
torpedox1
+tosspot12
+tossta
tostaempo
+totip46
+tottti
touhutimppa
+touma
+toxi
+toxicburn13
+toxiclun
toxicsaitama
+toy Owner
+tozmic
+tq
tr0nberg
tr0nd
tra1nwr3ck13
trade
tradescreen
+trading law
traevitz
traffic
+trafficly
trainman222
+tramayne
+tranquiltoad
tranqzz
+trans
trapbag
+trapizium01
trashy
trattqunnar
+trav50
travym66
+trcky americ
treboolks
treetardo
+treezy
tremmu
+trenboloneyy
trevor4ever
trevs
+trevs iron
+treyblob
triangle28
+trickyerrr
trickyricky
+trickytoad59
triggaevery1
trikyricky
trilla
tripin
+triple fin
triple pre
+triple zero
triplefiter
triplelmao
+trippel agen
+triv hamzy
trojan break
troll
trolling
+tropiiix
trout
troutking96
+troy the mak
trso
tru3
trucker74
truskey
trustfundcat
trustsfund
+truucas
+try the wiki
+trying2quit
+tryksta
trytohuntme
+ts4ever
+tsqq
tstrong5689
tsukemen
+tsumino
tsurie
+tsw
tswiftfan82
tthe
ttnq
+tubu
+tuggly
tuhdhuderr
+tulieee
tum0ppi
+tumeken jyra
+tumme
tummytickler
+tumunduktu
tunalife
tunnepelaaja
turban911
turbo
+turbo nut
+turboChett
+turboboost93
turboed son
+turbogamer12
turbojoey
turbothots
turkishh
+turkles ahmo
turn the 6
+turnt
turntBurrito
turntgod711
turtl111
tututu
tuumas
+tv_vt
tvmv
twasnotready
+twelve bags
+twelvecharac
+twelveswords
twiceascool
+twink irl
+twinr0va
+twisted tina
+twistedgirls
twisty
twitterclans
+twixinthemix
twiztid5000
two4nine
+twohandedfap
+twotoedsloth
twrangles
+twubble
+ty RuneLite
+ty zmith
ty4flail
tyguy
tyler1041
tylorLotus
+typage
typedef
typto
tyrant
+tz13
+tztok-worm
tzuyah
tzuyufan14
u dead now09
+u got a dart
+u got beaned
+u itachi
+u kno de wae
+u r gay 4 rs
+u0h
uEnv
uKnoTheRules
uLiveButOnce
+uRattt
uSnAvYsEaLs7
uTBER
+u_u sunshine
+uberHasu btw
uberstunts
ubiquitous96
ubug
+uchar
+udq
+udr
uetzcayotl
+ufnn
+uganstolfin
ugivahrimjob
+ugly 67
uglyandfat
+uiaF
+uiliuiliu
+uilz
+uimi
+ukn0w
ukwolf1
ukzharry
ulab
+uliuli reps
+ult u fk jzs
ultimo0se
+ultracet
+um Cya
+uma pyoi
+umer
+umexx
+umr
+umw
+un deux
un1versa1
+unFolly
+unaroc
unawareaxe
+unazegamoth
uncle
+unclefro
uncleskrt
+und
und3adedd
undeadgun
underslept
+undoc
uneek2you
+ungafknbunga
+unholyblood
unitewankers
unkyjay
unla
unless
unlucky2020
+unluki
unravel
+unravelslapz
+unreaL294
unrequited
+unsoy
+untc
untilnextyea
untitled
unwarranted
+unzips
uppahoods
upset
+upset berry
upwindnofear
+uqx
+ur a bird
+ur buttugly
+ur cool
+ur so mad
+ur stinky
+ur6
+urBunsRDone
urNANS
+urano O_o
+urashitpker
urfault
urgirlisf2p
+urgnah8me
urondelekk
+urqt
urvinis1
urza
+usainb0ltrag
+uselessbozo
+uselessmap
+user187
usergoeshere
+userjman1428
+usinlefthand
usma6100
+utiliser
+utpaatur
utsw
+uu Sauce
+uub
uubaidaus
+uul
uuuoouuououo
+uuuuhhh
+uwja
+uwu merchant
+uwu noises
+uwu24
uxbridgekid
+uyakO
+uz x
uzei
+uzis akimbo
+uzui
+v Simba v
+v olksu
+v oltage
+v tsng
+v uka
+v yp
v-yordan0702
v0i kehveli
v0mbat
+v13
v3kz
v453
+vAnthony
+vBlankie
vCamel
+vDragzi
vFoley
vJace
vJordxn
@@ -30675,310 +63017,662 @@ vLeqacy
vNicholas
vPikis
vRoso
+vSnoop
vSpectre
vTaqq
vaderex-1
+vaflyga
vageet
vaghairs
+vagtap
+val val val
valeriaT3amo
valithi
+vallihauta96
+vampfrog
vampir
vampiremiyo
+van est
+van soi
vanVoren
+vanacis
vanacularr
+varla phase
vasia
+vasxx
+vaux One
+vavmaster
+vb cannsss
+vb1
vbehn44
vbhos
+vc
+vcl
+vcnyew
+vcw
+veEXP
veergolio
+veetuli10
vega591
+vegiebobs
vegiitto
+vekter1
veldow
+velek
+ven g
+venazuelan
vene
venefae
veneruuti
venezuelan76
+vengedclaws
vengedurmom
+vennie123
+venom nate
vent
venturo
venzano
vepie
+veri2222
verlord
vernonb2688
versacejean5
versatility4
+vertigo love
vertztheone
+verychillguy
+verzikius
+vesikulho22
vesq
vestapol
+vftvmv
vgtrs
+vibe check
vibing
victoriauwu
video
+video peli
videogamer
+viento suave
+vierges
+viet dragon
+vieze sjomp
vigilant
+vihervasuri
+viikzt
+viilipytty
viki
+viktor main
viktoras300
+villavolta80
villeh
vinigha
+vinke00
vippaa
virtualsucks
+visdayox
viserbro
+vislegis
vispikauha
vissiman
visualduck
visuna
vitunhomo
+vitunkoyha
+vitunneekers
+vitur scythe
vitutor
+vituvahe35
vivaa
vizzN
+vkt
vlaamsbelang
+vlees petje
vllekoo
vlyn
+vmooo829
vmxn
+voddeman
vodka
vodkapro
vodke
+voi vattu
void-e-d
void5
+volconhammer
voldersnort
volga34
vomax
vork4sh
vorosity
+vosol
+vougz
+voui
voxi6
+voyage_zjo
+voyej
vpxl
+vraakmanus
+vriskafan888
+vro
+vubervos
vulnaamin
vulxe
vunts
vuokko22
vurn
+vursa
vutr
vuur
+vuzvuz
+vvBearded
vval
vvtt
+vw
+vzi
+vzkg
+w Danko
+w e b r l
+w en
+w ert
+w vy
+w00_88
+w00d pecker
+w00tgh0st
+w00x titan
+w00xy
+w0Ive
+w0ked
+w0lcomcz
+w33dplanter
+w3n
+w4kenbak3
+w5s
+w6rst
wYungen
waaayneee
+waaluigii
+wack pack
+wacup
+waga iron
wagen
wagween
waitwhyudead
+wakecub
+wakingupsad
wakuser
walk
+walker80
+walli
+walloftime39
wallyally13
+walmart nuts
+walmart used
walnutmonkey
+waltjrs legs
+wanShy
+wana corp
+wanna quit
wanolo
wapwap
warcauser33
+warcraftgame
+wardongs
warestoteles
+warface125
warm
+warm cuddles
+warm is vuur
+warmclouds
warrior
warteryyy
+waseem76786
+waste of alt
watch
+watch hp ty
+waterbender
+waterdrink
+wathx
+wavej4
wawuweewa
waxRS
+waxhitwonder
+wayabove
+wayne s new
+wcdak
+wdx
+we died fast
+weThoom
+weak dummy
weaknd
+wealldiesoon
wealthletics
weaponman54
+wear croc
+weary pigeon
wechilling
wednesdvy
weeb
+weeb doggo
weebew
+weedkillsppl
+weegthe32nd
+weekendfun
weenscape
weh8ironmen
+wehde
weight4
weir19
+weirdo
+wekkes
+wenwick
weoh
weppend
weregild
werkd
+wermz8
+werndoggaa
wertyer2
wesley 256
+wesley biets
+wesrrules92
westsider011
+wet da bed
+wet oven
weve
weweweweoox
wewkek
+wf_solo123
+wfh atm
+wfsdfvwwfsdq
+wfsn
wh1tey95
whale
+whale come
+whathitu
whatiswork
whats
+whats skills
+whatsoup
when
+when I chant
where
+where ask
+where moon
+where noon
+where yat
+wheresyaboy
whip2b
whipbanned
whiskey bow
+whisoserious
whispery
white
+whitedog8
+whitless
+whizprjazpxr
+whk
+who is react
whoawhoami
+whodo
+whodoyouknow
whololo30
whoopdidy
whoppinknob
whoscherry
+whotf
whtmicrowave
+whuchaka v
+why afk
+why ego
whyaintyoume
whyamisofat
whynotp2p
+whyuboolyme
whyzerkbro
+wi f
+wibeton
widefang
+wiegehtsmir
wienerbread
wife4sale
wifes
wifibananas
+wiidziss
wikedfix
+wil je ket
wildarko
+wildberryRS
wildcheery77
wildystuff6
will
+will vv
+will win 2
will_mello
willc893
willeehawk
willie432
willis28
+willmissit
willmott
willsand2405
willsuck4GMK
win we must
+winnur
+winterburnI
winterdaze
+wiseguy2187
+wiseoldPapi
wiseoldnam
wispykarma
+wistfulgyre
witchbladezz
witeboi
+witenry
with
+witnesspower
+wiw
wizard129
+wizardyoda7
wizkid499
wjsn
wkurtin
wlkerTXrangr
wndow
+wndy
+wngo
woah
wocket
+wodg
woesh0
wohc
+wokkejzzbak
+wolfbless
wolfy
+wolrus
wombo_zombo
womp
wonder_wenis
wonnie
wonniwonkaka
woodchopp
+woofmaster
+wooohooo
wooooom
woopingcrab
+wooski43
+wootex
woox
woox10k
+wormple
woshishabi
+wowda
woxzard
+wrdd
wrdflexoke
wrong ranger
wrsrule
+wruhtra
wsodonnell76
+wsvolt
wtbzenyte
+wtffixthis
wtfix
wubzh8black
+wucebrilllis
+wuckedenergy
+wucy
+wudi
+wudup9696
+wuil10
wulfwulfson
wussupfool
wutzgood
wutzit
wwTakun
wweadge2
+www
+wwwMusic-Map
wyat
wyattearp99
wyked
wytch
wyverns4days
+wzav423
wzrdddddyo
+wzrds
+wzs
+x 0lev x
+x ABBlE
+x Argonath x
+x Chainz x
+x Chelli
+x D E E x
+x Dante
+x Fabinho
+x FiFi
+x Flux
x GS Cookies
+x Haste
+x Kane x
+x Kierac x
+x L i o n
+x Lady
+x Lafferty x
+x LostBoy
+x Mayhem
+x Ndo
+x Nex
+x Not blue x
+x Nym
+x Pho
+x Red Rum
+x Ryu
+x Ryuu
+x Sorvete
+x Verzik x
x Zela
+x Zink
+x a t
+x e l a b
+x gladiat0r
+x husla
x iNtrigue
+x iyad x
+x lollage x
+x mk ultra
+x preska x
+x r
+x warri0r121
+x zi
+x zn
+x073x
+x0Mag
x0Tub
x12ob1n
+x1deag
+x1flyx
+x235
+x2u mania
+x3 nuzzle
+x7 Curvelo
+x86
+x8737
x8mz3hg7zm5f
+xAFK_BTWx
+xAbysss
xAddictive
+xAeroWolf
+xAndrew
+xBL00DSTREAM
xBaNeSoldier
+xBarlah
xBayLiss
+xBeefStonks
xBeerbear
xBehavior
xBellax
xBenny
xBlackDahlia
+xBongzilla
+xBootySlayer
xBottleCap
+xBotty
+xBowlofPhox
xBrendyy
+xBrimz
xBrown
xBusse
+xCUFFSx
xCallT0Armsx
+xCarter
+xCastiiel
xCheeseheadx
+xChemistry
+xCherish
+xChew
xChiro
+xChyeaa
xClf
+xClifffff
xCloudie
xCodeh
xComposure
+xD1E
xDCx152
+xDOMIN1C
+xDRAYx
xDab of Iron
+xDaf
xDagon
+xDapzz
xDat
xDevastor
+xDevil
+xDied
xDieter
xDijon
+xDilexro
+xDingy
+xDora
+xDoremonx
xDrawingDead
xDuckyV
xET99
+xElliott
xElsa
+xEnforcerx
+xEtiquette
xExclusive
xFMSx
xFailBoatx
+xFirespiritx
+xFlea
+xFloaty
+xFranku
xFraz
+xFremmy
xFruity
xGallarzax
xGigz
xGoat
+xGongo
xGrant
xGusBus
xH1ckz
xH4rry
xHades
xHamzha
+xHannna
xHartliss
xHarty
+xHayez
+xHearTBow
+xHerp
xHmongHerox
+xHugsi
xHussla
xI3reeze
+xIron Senpai
+xJeb
xJiren
xJlN
+xJolt
xJord
xJordd
xJulia
xJuve
+xKAJJEx
+xKadi
+xKdpunx
xKing
xKodai
xKrab
+xKril
+xL2MUZZx
+xLayLay
+xLelooToo
+xLester
+xLrc
xLuXx
xLumby
xLunatiQ
xLynn
xMBx
xMEKANIKx
+xMMGx
xMardy
xMarkos
+xMassx
xMatah
+xMatty
+xMedicate
xMentalXx
+xMetharos
+xMewzic
+xMochiix
xMonkey
+xMp5
xMyrupz
+xN I K Ex
+xNatureladx
xNeilzus
xNerevar
+xNgocdol
+xNickaap
xNova
+xO Poe
xOBG
+xOG420
xOnetickFap
xPager
+xPedu
xPhil
+xPortgas
+xPussSmasher
xQSS
xQuantumxx
+xRICK OWENSx
+xRadagonx
xRakine
xRaptor
+xReaperx666x
xReckless
+xRedGlow
+xRefactor
+xRektByAMain
xRemyLacroix
xRipple
+xRivv
xRobdebankx
xRobertox22
+xRobscapes
xRxmeo
xSPAGHETTIx
xSamR
xScooter
+xScribbz
+xScrimp
xSecret
xSeized
xServing
@@ -30992,184 +63686,419 @@ xSleepgoodx
xSlysoft
xSnaytronSx
xSnvw
+xSoKi
+xSteezy
xSweetHopex
xSword
+xSxAxMx
xSynn
+xT o m
+xT0A
+xTERRIBLEx
xTKOx
xTWM
xTerpenes
+xThirlmere
+xTopher
+xTorsti
xTransfer
xTrigger
xTwister
xVektor
xVenomx9
xVoidRange
+xW R A T Hx
+xWANNTEDx
xWar
+xWarface
+xWillowTreex
xWillx93
xWoke
xWoodChopx
+xX Bez Xx
xXBlitzO
xXCaBiDeXx
+xXDurryXx
+xXGIMP420Xx
xXJoshUKXxHD
+xXNaliXx
xXightx
+xXshadowz7Xx
+xYogibear
xZAKATAKx
xZCH
xZITOx
+xZayin
+xZeeBaby
xZuk
x_Goddess_xz
+x_Huzy_x
+x_Theron
+x_x Fish
+x_xMGKx_x
+xaa2
+xaarpus
+xal din
+xangoose
xansinmybody
xaoeu
xapd
xaro
xaxon
xbox
+xboxkid
xc00lxDawgx
+xceasea
xcoda
+xcrolles
xcvbg
+xd domi
+xd jumper
+xdamanx
+xeem
xegaF
+xemulate
+xenaines
xeney
+xenomuslol
xenvzi
xeravier
xerkin
+xexezinh0
+xfishngrillx
+xfxe
xgamerxx
+xhamstr
xhard82x
xhennamariax
xhoq
+xi execut3 x
+xi li er
+xiBubbax
+xiaohongshu
+xiaolingxiao
+xienn
+ximix
+xinnox
xir0nm4skx
+xirampagezz
xironluckx
+xiwitl
+xjawz1e
+xl Aaron lx
+xl cook
+xlDerekxl
+xlReversal
xlibrio
xlr704
+xlxl xlxl
+xmikeyx
+xmxxmx56
xoKt
xoRUNExo
+xolindseyxo
+xoreZ
xoro
xoxoverdose
xozoca
+xp per hour
+xp waster 47
+xpabax
+xpcumsez
xpeyotex
+xplo it
+xpoltergiest
xpwast3d
+xrated
xslayerbobx
xson
xspacedoll
xstic
xtcoming999
+xthn
+xtothedee
xttx
xtyrantix
+xvn
+xvrph
+xvza
+xwl
xwuwesxdrf
+xx darkminer
xxDerp
xxMatter
+xxREVENANTxx
xxSabin09xx
xxSe7en
+xxTanner
+xxcombatgodx
+xxero
+xxok
xxpurskillxx
xxx2sp3cuxxx
+xyujah
xyzn
+xzanle
+xzb
+xzizzil
+xzn 2
+xzwu
+y om
+y w
+y0y0keepitup
+y37ir
y8s1
+yTried
+ya pig
+ya winning
yaJaeT
yaboyalex
+yack daniels
yacobson99
+yae
yahn
yai5
yamawaro
yamb0
+yamsauze
yankmynads
yannickal4
+yanq10
+yaowiee
+yapgragim
+yasuo god69
yayasquirrel
ydoc
+ye idc
+ye ki M
+ye p to
+yea im jebus
yeahboi9992
+yeahsmitty
+yeahyoink
yearstowaste
+yeastyboys
yechu
+yedgy
+yee yee fkrs
yeet
+yellow car01
yeniL
yerrakunt
yesigame
yesy0u
yinghao870
+yinksnerf
yinonormal
yipcl
yippie1317
yispaulcute
+ykO Ops
+ykeL
+yleisradio
ylliB
+ym y
ymca4life
+yna
+yo eight
+yo itz ep
+yobacha
yodA
yoda
+yoda monkey
yohaha123
yolomuffin
+yonex
+yonghoon
+yooyeet
+yorkietootz
+yorue
+you died123
+you r a qt
youb1n
+youneedcope
+young meows
+young vibby
+youngbriks
+youngmachine
youngtrop21
youngwings
+youpougou
your
+your thrall
youralterego
+youssef
+yowasupppbra
+yoyoma361
+yp
+ypoodle
+ypool4
ypools
+yragbackward
+yrhs
yribbles
+ytsud mi
+ytuiop
+yugiiii
+yuh huh
+yum
+yummybolete
yung
+yung chubs
+yung cody
yung inf
+yungando
+yungcozzy
+yuor
yurciq
+yuy165
+yves klein
+yvonko
ywwoT
yxow
+yyknaH J
+yyttam
yyzanadu94
+yzyzyzy
+z 5 x
+z Animal z
+z Rhodes
+z Shane
+z a p s
+z iQ
+z man827
z0nk
+z0rrda
z0up
+z1ftz
+z4np
+z5p
+z7co
+zBando
zBenn
zBonesz
zCocoa
zDaremeth
zDeku
+zFalcone68
+zGameDance
+zGanj
+zGibao
+zGz
zJenga
zKamp
+zKno
zKuru
zLost
+zMonchi
+zNico
+zNolan
zRarePiece
+zRavenx
zSlay
+zSpaceRaptor
+zSwanny
zTitan
zWxLF
+za2
za33erklan
zaaza
zacharial
+zachhy
zachte
zack
+zack_0333
+zacyy
zaddy
+zak vol zalm
zakaru9999
+zakk0
+zakrey
+zakrobgames
zalem
+zancan2
+zapper920
zarehp
zarfeq
+zartrez
zasmaru
+zatch_maxed
+zazalover69
+zazazhizhma
zazyga
+zbra
zclx
zcollins
+zdi
zdin
+zdya
ze4l
zeKrD
zeachh
zeall
+zeano
+zebakkes
+zeccStake
+zedabranca
zeddicus676
zedisabled
zedzke
+zeeebak
zeeno
zegg
+zehstee
+zeikhannes
zeker
zeldris
+zelo1
zendendead
zenmort
zensix
+zenuk zay
zenyte4money
+zeppelin0ooh
zeqha
zer0
zer0sirisFHK
+zerker seven
zerkhelm
zero
zero gd
+zero u_u
+zeroblade81
zeroixx
zerotwonine
zeroz136
zerzerz
+zeus energy
zewos
+zewzh
+zhengu
+zhipowerz
zi0n1
+zibri7
+ziewe
zifyr
+ziggy man 77
+ziily
zilyana
zina
+zina n chill
zinax
+ziniD
+zinzares
+zionari
+zippp
zirreael
+ziurbtw
+ziuys
ziyi_wangler
+zjh
+zjind
+zlayaa
zlink10
zlliM
+zlowden
zmakisan
znap5
zoan
@@ -31177,35 +64106,55 @@ zoboz
zohcysp
zokunashi
zole
+zomff
zomgrick
zonares
zookwaa
zoomixd
zop1
zorkie
+zoro u
zouse
+zparky
+zppr
+zq0
zreL
+zrl
zruG
zrzwns
ztaM
ztkfps
+zu b
zubor1
zuenzima
+zujal
+zuk a cuck
+zuk xd
+zuk2hard4me
+zukushichi
+zulogz
zulrah
zuluTriPig
zummorak
zurcc
zurlond
zuuryy
+zw
zwah
zwint
zwolle
zwqpDEOXl23
+zxpf
zyeetz
+zygarde92
zygis323
+zykez
zymaa
zymz
zysuna
+zzad
zzai
+zzben
zzero
zzigma
+zzzJonno
diff --git a/Server/data/cache/main_file_cache.dat2 b/Server/data/cache/main_file_cache.dat2
index 376fd9153..245fa6081 100644
--- a/Server/data/cache/main_file_cache.dat2
+++ b/Server/data/cache/main_file_cache.dat2
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d6b92de1ed8601bc3961de4466e961cffe5777887cb87c7ffed1d466a3d08491
-size 91621090
+oid sha256:b5431211b019b9403b4cfca933f4c9635c1d5278d3730995dced0d8672b1cc91
+size 91702293
diff --git a/Server/data/cache/main_file_cache.idx255 b/Server/data/cache/main_file_cache.idx255
index a437d6da5..6e504259a 100644
--- a/Server/data/cache/main_file_cache.idx255
+++ b/Server/data/cache/main_file_cache.idx255
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:86269328a9c606c683569c2d9ea200a391e08c04c1591071aaed9a36978b744b
+oid sha256:83a2292c515596af0423764c48e41dfe1aac482920dca0b89ecb343db6dd4c30
size 174
diff --git a/Server/data/cache/main_file_cache.idx5 b/Server/data/cache/main_file_cache.idx5
index dad8dfec7..f19fd00c7 100644
--- a/Server/data/cache/main_file_cache.idx5
+++ b/Server/data/cache/main_file_cache.idx5
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9ef6807f6653e09be9b6e2299055f1132c34dc6108e8b92fbae5add2233c2d64
-size 22092
+oid sha256:32bda84b31731cd60f7bc4e90caf7d55671e966fa958d60f2ec91da16340743d
+size 22188
diff --git a/Server/data/configs/door_configs.json b/Server/data/configs/door_configs.json
index 8d6a61db5..ec17288a2 100644
--- a/Server/data/configs/door_configs.json
+++ b/Server/data/configs/door_configs.json
@@ -301,7 +301,7 @@
},
{
"id": "2025",
- "replaceId": "1534",
+ "replaceId": "2026",
"fence": "false",
"metal": "false"
},
@@ -312,7 +312,7 @@
"metal": "false"
},
{
- "id": "2036",
+ "id": "1530",
"replaceId": "1531",
"fence": "false",
"metal": "false"
@@ -925,7 +925,7 @@
},
{
"id": "3747",
- "replaceId": "1534",
+ "replaceId": "3748",
"fence": "false",
"metal": "false"
},
@@ -943,7 +943,7 @@
},
{
"id": "4148",
- "replaceId": "4248",
+ "replaceId": "4246",
"fence": "false",
"metal": "false"
},
@@ -1759,7 +1759,7 @@
},
{
"id": "14245",
- "replaceId": "14248",
+ "replaceId": "14246",
"fence": "true",
"metal": "false"
},
@@ -1984,16 +1984,14 @@
"replaceId": "28518",
"fence": "false",
"metal": "true",
- "autowalk": "true",
- "questRequirement": "Icthlarin's Little Helper"
+ "autowalk": "true"
},
{
"id": "28514",
"replaceId": "28518",
"fence": "false",
"metal": "true",
- "autowalk": "true",
- "questRequirement": "Icthlarin's Little Helper"
+ "autowalk": "true"
},
{
"id": "21065",
diff --git a/Server/data/configs/drop_tables.json b/Server/data/configs/drop_tables.json
index 2e5f8b80e..b726152c4 100644
--- a/Server/data/configs/drop_tables.json
+++ b/Server/data/configs/drop_tables.json
@@ -3262,7 +3262,7 @@
}
],
"charm": [],
- "ids": "73,74,75,419,420,421,422,423,424,1826,2714,2863,2866,2869,2878,3622,4392,4393,4394,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5375,5376,5377,5378,5379,5380,5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,6099,6100,6131",
+ "ids": "73,74,75,419,420,421,422,423,424,2714,2863,2866,2869,2878,3622,4392,4393,4394,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5375,5376,5377,5378,5379,5380,5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,6099,6100,6131",
"description": "",
"main": [
{
@@ -5858,205 +5858,165 @@
"charm": [
{
"minAmount": "1",
- "weight": "100.0",
- "id": "12158",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "12159",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "12160",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "12163",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "5600.0",
+ "weight": "1000.0",
"id": "0",
"maxAmount": "1"
}
],
+ "tertiary": [
+ {
+ "minAmount": "1",
+ "weight": "4986.5",
+ "id": "0",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "12.5",
+ "id": "10976",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "10977",
+ "maxAmount": "1"
+ }
+ ],
"ids": "114",
"description": "",
"main": [
{
"minAmount": "1",
- "weight": "50.0",
- "id": "7844",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "5.0",
- "id": "10977",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "5.0",
- "id": "10976",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5323",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5298",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5281",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5301",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5280",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5294",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5297",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5104",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5100",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5106",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "12176",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5293",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5296",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5311",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5105",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "25.0",
- "id": "5292",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "5.0",
- "id": "5295",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "5.0",
- "id": "5303",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "5.0",
- "id": "5302",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "5.0",
- "id": "5321",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "5.0",
- "id": "5299",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "5.0",
- "id": "31",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "0",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "3.0",
+ "weight": "39.0625",
"id": "6666",
"maxAmount": "1"
},
{
"minAmount": "1",
- "weight": "3.0",
+ "weight": "78.125",
"id": "6665",
"maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "13.0",
+ "id": "14422",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "13.0",
+ "id": "14430",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "156.25",
+ "id": "345",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "156.25",
+ "id": "327",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "156.25",
+ "id": "371",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "2",
+ "weight": "156.25",
+ "id": "372",
+ "maxAmount": "5"
+ },
+ {
+ "minAmount": "1",
+ "weight": "156.25",
+ "id": "359",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "156.25",
+ "id": "360",
+ "maxAmount": "3"
+ },
+ {
+ "minAmount": "1",
+ "weight": "39.0625",
+ "id": "383",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "39.0625",
+ "id": "349",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "39.0625",
+ "id": "331",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "5",
+ "weight": "156.25",
+ "id": "313",
+ "maxAmount": "15"
+ },
+ {
+ "minAmount": "1",
+ "weight": "156.25",
+ "id": "1511",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "39.0625",
+ "id": "1383",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "78.125",
+ "id": "407",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "4",
+ "weight": "78.125",
+ "id": "402",
+ "maxAmount": "8"
+ },
+ {
+ "minAmount": "5",
+ "weight": "4.0",
+ "id": "555",
+ "maxAmount": "18"
+ },
+ {
+ "minAmount": "3",
+ "weight": "78.125",
+ "id": "6664",
+ "maxAmount": "6"
+ },
+ {
+ "minAmount": "1",
+ "weight": "39.0625",
+ "id": "401",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "39.0625",
+ "id": "6667",
+ "maxAmount": "1"
}
]
},
@@ -11426,47 +11386,11 @@
"weight": "100.0",
"id": "526",
"maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "1506",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6065",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6067",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6069",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6068",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6070",
- "maxAmount": "1"
}
],
"charm": [],
- "ids": "347,348,357,369,370,371,372,717,718,719,2349,2350,2351,2373,2374,2784,3216",
- "description": "",
+ "ids": "370,357,348,369,347,371",
+ "description": "all combat mourners",
"main": []
},
{
@@ -18161,7 +18085,7 @@
"maxAmount": "1"
}
],
- "ids": "1183,1184,1201,2359,2360,2361,2362,7438,7439,7440,7441",
+ "ids": "1183,1184,1201,2359,2360,2361,2362,2373,7438,7439,7440,7441",
"description": "",
"main": [
{
@@ -20143,6 +20067,208 @@
}
]
},
+ {
+ "default": [
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "526",
+ "maxAmount": "1"
+ }
+ ],
+ "charm": [
+ {
+ "minAmount": "1",
+ "weight": "55.0",
+ "id": "0",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "13.0",
+ "id": "12158",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "6.0",
+ "id": "12159",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "25.0",
+ "id": "12160",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "12163",
+ "maxAmount": "1"
+ }
+ ],
+ "ids": "1338",
+ "description": "Chaos Tunnels / Lighthouse Dagannoths",
+ "main": [
+ {
+ "minAmount": "1",
+ "weight": "5.0",
+ "id": "1237",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "5.0",
+ "id": "1239",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "1243",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "15",
+ "weight": "4.0",
+ "id": "555",
+ "maxAmount": "15"
+ },
+ {
+ "minAmount": "15",
+ "weight": "2.0",
+ "id": "886",
+ "maxAmount": "15"
+ },
+ {
+ "minAmount": "3",
+ "weight": "1.0",
+ "id": "828",
+ "maxAmount": "3"
+ },
+ {
+ "minAmount": "1",
+ "weight": "18.0",
+ "id": "14428",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "12.0",
+ "id": "301",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "3",
+ "weight": "4.0",
+ "id": "345",
+ "maxAmount": "3"
+ },
+ {
+ "minAmount": "5",
+ "weight": "4.0",
+ "id": "327",
+ "maxAmount": "5"
+ },
+ {
+ "minAmount": "1",
+ "weight": "3.0",
+ "id": "311",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "15",
+ "weight": "2.0",
+ "id": "314",
+ "maxAmount": "15"
+ },
+ {
+ "minAmount": "50",
+ "weight": "2.0",
+ "id": "313",
+ "maxAmount": "50"
+ },
+ {
+ "minAmount": "1",
+ "weight": "2.0",
+ "id": "377",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "2.0",
+ "id": "359",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "10",
+ "weight": "2.0",
+ "id": "402",
+ "maxAmount": "10"
+ },
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "413",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "2",
+ "weight": "1.0",
+ "id": "411",
+ "maxAmount": "2"
+ },
+ {
+ "minAmount": "56",
+ "weight": "29.0",
+ "id": "995",
+ "maxAmount": "56"
+ },
+ {
+ "minAmount": "25",
+ "weight": "9.0",
+ "id": "995",
+ "maxAmount": "25"
+ },
+ {
+ "minAmount": "44",
+ "weight": "8.0",
+ "id": "995",
+ "maxAmount": "44"
+ },
+ {
+ "minAmount": "41",
+ "weight": "6.0",
+ "id": "995",
+ "maxAmount": "41"
+ },
+ {
+ "minAmount": "12",
+ "weight": "2.0",
+ "id": "45",
+ "maxAmount": "12"
+ },
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "405",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "5733",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "14426",
+ "maxAmount": "1"
+ }
+ ]
+ },
{
"default": [
{
@@ -28343,60 +28469,10 @@
"maxAmount": "1"
}
],
- "charm": [
- {
- "minAmount": "1",
- "weight": "85.8093",
- "id": "0",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "10.9113",
- "id": "12158",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "1.6775",
- "id": "12159",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "1.6019",
- "id": "12160",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "0.0",
- "id": "12163",
- "maxAmount": "1"
- }
- ],
- "ids": "2044,2045,2046,2047,2048,2049,2051,2052,2053,2054,2055",
+ "charm": [],
+ "ids": "2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057",
"description": "",
- "main": [
- {
- "minAmount": "1",
- "weight": "1.0",
- "id": "1",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "124.0",
- "id": "0",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "3.0",
- "id": "7848",
- "maxAmount": "1"
- }
- ]
+ "main": []
},
{
"default": [
@@ -29330,6 +29406,18 @@
"id": "1438",
"maxAmount": "1"
},
+ {
+ "minAmount": "1",
+ "weight": "25.0",
+ "id": "1456",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "25.0",
+ "id": "1450",
+ "maxAmount": "1"
+ },
{
"minAmount": "1",
"weight": "25.0",
@@ -29502,6 +29590,18 @@
"id": "1438",
"maxAmount": "1"
},
+ {
+ "minAmount": "1",
+ "weight": "25.0",
+ "id": "1456",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "25.0",
+ "id": "1450",
+ "maxAmount": "1"
+ },
{
"minAmount": "1",
"weight": "25.0",
@@ -29674,6 +29774,18 @@
"id": "1438",
"maxAmount": "1"
},
+ {
+ "minAmount": "1",
+ "weight": "25.0",
+ "id": "1456",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "25.0",
+ "id": "1450",
+ "maxAmount": "1"
+ },
{
"minAmount": "1",
"weight": "25.0",
@@ -39691,7 +39803,20 @@
]
},
{
- "default": [],
+ "default": [
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "532",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "9080",
+ "maxAmount": "1"
+ }
+ ],
"charm": [
{
"minAmount": "1",
@@ -58663,6 +58788,26 @@
"description": "Ram",
"main": []
},
+ {
+ "default": [
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "526",
+ "maxAmount": "1"
+ },
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "1583",
+ "maxAmount": "1"
+ }
+ ],
+ "charm": [],
+ "ids": "6108",
+ "description": "",
+ "main": []
+ },
{
"default": [],
"charm": [],
@@ -58676,5 +58821,19 @@
"maxAmount": "1"
}
]
+ },
+ {
+ "default": [
+ {
+ "minAmount": "1",
+ "weight": "1.0",
+ "id": "592",
+ "maxAmount": "1"
+ }
+ ],
+ "charm": [],
+ "ids": "8127",
+ "description": "Dark energy core",
+ "main": []
}
]
\ No newline at end of file
diff --git a/Server/data/configs/ground_spawns.json b/Server/data/configs/ground_spawns.json
index 6b94f4807..ca2b6f773 100644
--- a/Server/data/configs/ground_spawns.json
+++ b/Server/data/configs/ground_spawns.json
@@ -233,7 +233,7 @@
},
{
"item_id": "946",
- "loc_data": "{1,2903,3148,0,80}-{1,3205,3212,0,80}-{1,3224,3202,0,80}-{1,3218,3416,1,90}-{1,2820,3450,0,90}-{1,3106,3956,0,60}-{1,2566,9526,0,30}-{1,3215,9625,0,80}-{1,3218,9887,0,33}-"
+ "loc_data": "{1,2903,3148,0,80}-{1,3205,3212,0,80}-{1,3224,3202,0,80}-{1,3218,3416,1,90}-{1,2820,3450,0,90}-{1,3106,3956,0,60}-{1,2566,9526,0,30}-{1,3215,9625,0,80}-{1,3218,9887,0,33}-{1,2700,3407,0,100}-"
},
{
"item_id": "952",
@@ -241,7 +241,7 @@
},
{
"item_id": "954",
- "loc_data": "{1,2094,3152,0,150}-"
+ "loc_data": "{1,2094,3152,0,150}-{1,2785,3279,0,150}-{1,2786,3287,0,150}-{1,2786,3286,0,150}-"
},
{
"item_id": "960",
@@ -339,6 +339,14 @@
"item_id": "1422",
"loc_data": "{1,3320,3137,0,150}-"
},
+ {
+ "item_id": "1467",
+ "loc_data": "{1,2784,3289,0,0}-"
+ },
+ {
+ "item_id": "1469",
+ "loc_data": "{1,2766,3277,0,100}-{1,2766,3289,0,100}-"
+ },
{
"item_id": "1510",
"loc_data": "{1,2576,3334,0,100}-"
@@ -619,6 +627,10 @@
"item_id": "4707",
"loc_data": "{1,3571,3312,0,40}-"
},
+ {
+ "item_id": "4838",
+ "loc_data": "{1,2593,3103,1,40}-"
+ },
{
"item_id": "5008",
"loc_data": "{1,3230,9609,0,44}-"
@@ -627,6 +639,10 @@
"item_id": "5523",
"loc_data": "{1,2935,3282,1,90}-"
},
+ {
+ "item_id": "5586",
+ "loc_data": "{1,2473,4941,0,90}-"
+ },
{
"item_id": "6291",
"loc_data": "{1,2681,3111,0,30}-{1,2673,3112,0,30}-{1,2674,3094,0,30}-{1,2671,3089,0,30}-"
diff --git a/Server/data/configs/interface_configs.json b/Server/data/configs/interface_configs.json
index 50a5a64ed..95087003a 100644
--- a/Server/data/configs/interface_configs.json
+++ b/Server/data/configs/interface_configs.json
@@ -95,6 +95,30 @@
"walkable": "false",
"tabIndex": "-1"
},
+ {
+ "id": "68",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "69",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "70",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "71",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
{
"id": "74",
"interfaceType": "4",
@@ -365,6 +389,30 @@
"walkable": "false",
"tabIndex": "-1"
},
+ {
+ "id": "245",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "246",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "247",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "248",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
{
"id": "256",
"interfaceType": "8",
diff --git a/Server/data/configs/item_configs.json b/Server/data/configs/item_configs.json
index 667cb0a3d..3c29faaa8 100644
--- a/Server/data/configs/item_configs.json
+++ b/Server/data/configs/item_configs.json
@@ -4243,8 +4243,8 @@
"tradeable": "false",
"destroy": "true",
"archery_ticket_price": "0",
- "id": "456",
- "weight": "0.15"
+ "weight": "0.15",
+ "id": "456"
},
{
"destroy_message": "You will need to speak to Thormac to get another cage.",
@@ -4254,8 +4254,8 @@
"tradeable": "false",
"destroy": "true",
"archery_ticket_price": "0",
- "id": "457",
- "weight": "0.175"
+ "weight": "0.175",
+ "id": "457"
},
{
"destroy_message": "You will need to speak to Thormac to get another cage.",
@@ -4265,8 +4265,8 @@
"tradeable": "false",
"destroy": "true",
"archery_ticket_price": "0",
- "id": "458",
- "weight": "0.2"
+ "weight": "0.2",
+ "id": "458"
},
{
"destroy_message": "You will need to speak to Thormac to get another cage.",
@@ -4276,8 +4276,8 @@
"tradeable": "false",
"destroy": "true",
"archery_ticket_price": "0",
- "id": "459",
- "weight": "0.175"
+ "weight": "0.175",
+ "id": "459"
},
{
"destroy_message": "You will need to speak to Thormac to get another cage.",
@@ -4287,8 +4287,8 @@
"tradeable": "false",
"destroy": "true",
"archery_ticket_price": "0",
- "id": "460",
- "weight": "0.2"
+ "weight": "0.2",
+ "id": "460"
},
{
"destroy_message": "You will need to speak to Thormac to get another cage.",
@@ -4298,8 +4298,8 @@
"tradeable": "false",
"destroy": "true",
"archery_ticket_price": "0",
- "id": "461",
- "weight": "0.175"
+ "weight": "0.175",
+ "id": "461"
},
{
"destroy_message": "You will need to speak to Thormac to get another cage.",
@@ -4309,8 +4309,8 @@
"tradeable": "false",
"destroy": "true",
"archery_ticket_price": "0",
- "id": "462",
- "weight": "0.2"
+ "weight": "0.2",
+ "id": "462"
},
{
"destroy_message": "You will need to speak to Thormac to get another cage.",
@@ -4320,8 +4320,8 @@
"tradeable": "false",
"destroy": "true",
"archery_ticket_price": "0",
- "id": "463",
- "weight": "0.225"
+ "weight": "0.225",
+ "id": "463"
},
{
"ge_buy_limit": "10000",
@@ -5719,7 +5719,7 @@
},
{
"shop_price": "35",
- "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.",
+ "examine": "Allows you to rest in the luxurious Paramayer Inn.",
"durability": null,
"name": "Paramaya ticket",
"archery_ticket_price": "0",
@@ -5727,7 +5727,7 @@
},
{
"shop_price": "35",
- "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.",
+ "examine": "Allows you to rest in the luxurious Paramayer Inn.",
"durability": null,
"name": "Paramaya ticket",
"archery_ticket_price": "0",
@@ -16309,6 +16309,7 @@
"examine": "Maybe I should read this...",
"durability": null,
"name": "A magic scroll",
+ "tradeable": "false",
"archery_ticket_price": "0",
"id": "1505"
},
@@ -16324,7 +16325,7 @@
"equipment_slot": "0"
},
{
- "examine": "Quite a small key (Plague City).",
+ "examine": "Quite a small key.",
"durability": null,
"name": "A small key",
"archery_ticket_price": "0",
@@ -16869,7 +16870,7 @@
"id": "1583"
},
{
- "examine": "Apparently my name is Hartigan",
+ "examine": "Apparently my name is Hartigen.",
"durability": null,
"name": "Id papers",
"tradeable": "false",
@@ -20559,7 +20560,7 @@
},
{
"ge_buy_limit": "1000",
- "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.",
+ "examine": "Yuck, I don't like cabbage.",
"grand_exchange_price": "41",
"durability": null,
"name": "Cabbage",
@@ -20578,7 +20579,7 @@
"id": "1966"
},
{
- "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.",
+ "examine": "Yuck, a cabbage from Draynor Manor. I don't like cabbage.",
"grand_exchange_price": "55",
"durability": null,
"name": "Cabbage",
@@ -33982,7 +33983,7 @@
{
"requirements": "{1,40}",
"ge_buy_limit": "2",
- "examine": "Rune platebody with complete gold trim & plating.",
+ "examine": "Rune platebody with complete gold trim & plating.",
"durability": null,
"weight": "10",
"absorb": "3,0,6",
@@ -38817,7 +38818,7 @@
"name": "Crystal bow 9/10",
"archery_ticket_price": "0",
"id": "4215",
- "bonuses": "0,0,0,0,96,0,0,0,0,0,0,0,0,0,68"
+ "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70"
},
{
"requirements": "{4,70}-{16,50}",
@@ -38838,7 +38839,7 @@
"name": "Crystal bow 8/10",
"archery_ticket_price": "0",
"id": "4216",
- "bonuses": "0,0,0,0,92,0,0,0,0,0,0,0,0,0,66"
+ "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70"
},
{
"requirements": "{4,70}-{16,50}",
@@ -38859,7 +38860,7 @@
"name": "Crystal bow 7/10",
"archery_ticket_price": "0",
"id": "4217",
- "bonuses": "0,0,0,0,88,0,0,0,0,0,0,0,0,0,64"
+ "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70"
},
{
"requirements": "{4,70}-{16,50}",
@@ -38880,7 +38881,7 @@
"name": "Crystal bow 6/10",
"archery_ticket_price": "0",
"id": "4218",
- "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,62"
+ "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70"
},
{
"requirements": "{4,70}-{16,50}",
@@ -38901,7 +38902,7 @@
"name": "Crystal bow 5/10",
"archery_ticket_price": "0",
"id": "4219",
- "bonuses": "0,0,0,0,80,0,0,0,0,0,0,0,0,0,60"
+ "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70"
},
{
"requirements": "{4,70}-{16,50}",
@@ -38922,7 +38923,7 @@
"name": "Crystal bow 4/10",
"archery_ticket_price": "0",
"id": "4220",
- "bonuses": "0,0,0,0,76,0,0,0,0,0,0,0,0,0,58"
+ "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70"
},
{
"requirements": "{4,70}-{16,50}",
@@ -38943,7 +38944,7 @@
"name": "Crystal bow 3/10",
"archery_ticket_price": "0",
"id": "4221",
- "bonuses": "0,0,0,0,72,0,0,0,0,0,0,0,0,0,56"
+ "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70"
},
{
"requirements": "{4,70}-{16,50}",
@@ -38964,7 +38965,7 @@
"name": "Crystal bow 2/10",
"archery_ticket_price": "0",
"id": "4222",
- "bonuses": "0,0,0,0,68,0,0,0,0,0,0,0,0,0,54"
+ "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70"
},
{
"requirements": "{4,70}-{16,50}",
@@ -38985,7 +38986,7 @@
"name": "Crystal bow 1/10",
"archery_ticket_price": "0",
"id": "4223",
- "bonuses": "0,0,0,0,64,0,0,0,0,0,0,0,0,0,52"
+ "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70"
},
{
"requirements": "{1,70}-{16,50}",
@@ -39028,7 +39029,7 @@
"archery_ticket_price": "0",
"id": "4226",
"absorb": "6,0,12",
- "bonuses": "0,0,0,-10,-10,49,52,51,0,78,68,0,0,0,0",
+ "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0",
"equipment_slot": "5"
},
{
@@ -39042,7 +39043,7 @@
"archery_ticket_price": "0",
"id": "4227",
"absorb": "6,0,12",
- "bonuses": "0,0,0,-10,-10,47,50,49,0,76,66,0,0,0,0",
+ "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0",
"equipment_slot": "5"
},
{
@@ -39056,7 +39057,7 @@
"archery_ticket_price": "0",
"id": "4228",
"absorb": "6,0,12",
- "bonuses": "0,0,0,-10,-10,45,48,47,0,74,65,0,0,0,0",
+ "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0",
"equipment_slot": "5"
},
{
@@ -39070,7 +39071,7 @@
"archery_ticket_price": "0",
"id": "4229",
"absorb": "6,0,12",
- "bonuses": "0,0,0,-10,-10,43,46,45,0,72,63,0,0,0,0",
+ "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0",
"equipment_slot": "5"
},
{
@@ -39084,7 +39085,7 @@
"archery_ticket_price": "0",
"id": "4230",
"absorb": "6,0,12",
- "bonuses": "0,0,0,-10,-10,41,44,43,0,70,61,0,0,0,0",
+ "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0",
"equipment_slot": "5"
},
{
@@ -39098,7 +39099,7 @@
"archery_ticket_price": "0",
"id": "4231",
"absorb": "6,0,12",
- "bonuses": "0,0,0,-10,-10,39,42,41,0,68,59,0,0,0,0",
+ "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0",
"equipment_slot": "5"
},
{
@@ -39112,7 +39113,7 @@
"archery_ticket_price": "0",
"id": "4232",
"absorb": "6,0,12",
- "bonuses": "0,0,0,-10,-10,37,40,39,0,66,58,0,0,0,0",
+ "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0",
"equipment_slot": "5"
},
{
@@ -39126,7 +39127,7 @@
"archery_ticket_price": "0",
"id": "4233",
"absorb": "6,0,12",
- "bonuses": "0,0,0,-10,-10,35,38,37,0,64,56,0,0,0,0",
+ "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0",
"equipment_slot": "5"
},
{
@@ -39140,7 +39141,7 @@
"archery_ticket_price": "0",
"id": "4234",
"absorb": "6,0,12",
- "bonuses": "0,0,0,-10,-10,33,36,35,0,62,54,0,0,0,0",
+ "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0",
"equipment_slot": "5"
},
{
@@ -42660,7 +42661,7 @@
"id": "4619"
},
{
- "examine": "It looks horrible.On ground: Not good for eating.",
+ "examine": "It looks horrible.",
"durability": null,
"name": "Black mushroom",
"weight": "1",
@@ -42749,7 +42750,7 @@
"equipment_slot": "12"
},
{
- "examine": "Frank's shiny silver coated pot.",
+ "examine": "A silver pot made by Ruantun.",
"durability": null,
"name": "Silver pot",
"tradeable": "false",
@@ -42766,7 +42767,7 @@
"id": "4659"
},
{
- "examine": "Frank's shiny silver coated pot.",
+ "examine": "A silver pot made by Ruantun filled with your blood.",
"durability": null,
"name": "Silver pot",
"tradeable": "false",
@@ -42775,7 +42776,7 @@
"id": "4660"
},
{
- "examine": "A silver pot made by Ruantun and blessed on Entrana.",
+ "examine": "A blessed silver pot made by Ruantun filled with your blood.",
"durability": null,
"name": "Blessed pot",
"weight": "2",
@@ -42783,7 +42784,7 @@
"id": "4661"
},
{
- "examine": "Frank's shiny silver coated pot.",
+ "examine": "A silver pot made by Ruantun filled with blood and garlic.",
"durability": null,
"name": "Silver pot",
"tradeable": "false",
@@ -42792,7 +42793,7 @@
"id": "4662"
},
{
- "examine": "A silver pot made by Ruantun and blessed on Entrana.",
+ "examine": "A blessed silver pot filled with blood and garlic.",
"durability": null,
"name": "Blessed pot",
"weight": "2",
@@ -42800,7 +42801,7 @@
"id": "4663"
},
{
- "examine": "Frank's shiny silver coated pot.",
+ "examine": "A silver pot made by Ruantun filled with blood and spices.",
"durability": null,
"name": "Silver pot",
"tradeable": "false",
@@ -42809,7 +42810,7 @@
"id": "4664"
},
{
- "examine": "A silver pot made by Ruantun and blessed on Entrana.",
+ "examine": "A blessed silver pot filled with blood and spices.",
"durability": null,
"name": "Blessed pot",
"weight": "2",
@@ -42817,7 +42818,7 @@
"id": "4665"
},
{
- "examine": "Frank's shiny silver coated pot.",
+ "examine": "A silver pot made by Ruantun filled with blood, garlic and spices.",
"durability": null,
"name": "Silver pot",
"tradeable": "false",
@@ -42826,7 +42827,7 @@
"id": "4666"
},
{
- "examine": "A silver pot made by Ruantun and blessed on Entrana.",
+ "examine": "A blessed silver pot filled with blood, garlic and spices.",
"durability": null,
"name": "Blessed pot",
"weight": "2",
@@ -43126,13 +43127,13 @@
"id": "4702"
},
{
- "shop_price": "975000",
- "examine": "A magic stone to make high-level furniture.",
- "grand_exchange_price": "977755",
+ "shop_price": "1",
+ "examine": "Doesn't look very special.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Magic stone",
- "tradeable": "true",
- "weight": "1",
+ "tradeable": "false",
+ "weight": "2.267",
"archery_ticket_price": "0",
"id": "4703"
},
@@ -48987,7 +48988,7 @@
"id": "5419"
},
{
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There is one potato in this sack.",
"grand_exchange_price": "1276",
"durability": null,
"name": "Potatoes(1)",
@@ -49004,7 +49005,7 @@
"id": "5421"
},
{
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There are two potatoes in this sack.",
"grand_exchange_price": "1276",
"durability": null,
"name": "Potatoes(2)",
@@ -49021,7 +49022,7 @@
"id": "5423"
},
{
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There are three potatoes in this sack.",
"grand_exchange_price": "1276",
"durability": null,
"name": "Potatoes(3)",
@@ -49038,7 +49039,7 @@
"id": "5425"
},
{
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There are four potatoes in this sack.",
"grand_exchange_price": "1276",
"durability": null,
"name": "Potatoes(4)",
@@ -49055,7 +49056,7 @@
"id": "5427"
},
{
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There are five potatoes in this sack.",
"grand_exchange_price": "1276",
"durability": null,
"name": "Potatoes(5)",
@@ -49072,7 +49073,7 @@
"id": "5429"
},
{
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There are six potatoes in this sack.",
"grand_exchange_price": "1276",
"durability": null,
"name": "Potatoes(6)",
@@ -49089,7 +49090,7 @@
"id": "5431"
},
{
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There are seven potatoes in this sack.",
"grand_exchange_price": "1276",
"durability": null,
"name": "Potatoes(7)",
@@ -49106,7 +49107,7 @@
"id": "5433"
},
{
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There are eight potatoes in this sack.",
"grand_exchange_price": "1276",
"durability": null,
"name": "Potatoes(8)",
@@ -49123,7 +49124,7 @@
"id": "5435"
},
{
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There are nine potatoes in this sack.",
"grand_exchange_price": "1276",
"durability": null,
"name": "Potatoes(9)",
@@ -49141,7 +49142,7 @@
},
{
"ge_buy_limit": "1000",
- "examine": "There are <number of potatoes> in this sack.",
+ "examine": "There are ten potatoes in this sack.",
"grand_exchange_price": "1052",
"durability": null,
"name": "Potatoes(10)",
@@ -49333,7 +49334,7 @@
"id": "5459"
},
{
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There is one cabbage in this sack.",
"grand_exchange_price": "1304",
"durability": null,
"name": "Cabbages(1)",
@@ -49349,7 +49350,7 @@
"id": "5461"
},
{
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There are two cabbages in this sack.",
"grand_exchange_price": "1304",
"durability": null,
"name": "Cabbages(2)",
@@ -49365,7 +49366,7 @@
"id": "5463"
},
{
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There are three cabbages in this sack.",
"grand_exchange_price": "1304",
"durability": null,
"name": "Cabbages(3)",
@@ -49381,7 +49382,7 @@
"id": "5465"
},
{
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There are four cabbages in this sack.",
"grand_exchange_price": "1304",
"durability": null,
"name": "Cabbages(4)",
@@ -49397,7 +49398,7 @@
"id": "5467"
},
{
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There are five cabbages in this sack.",
"grand_exchange_price": "1304",
"durability": null,
"name": "Cabbages(5)",
@@ -49413,7 +49414,7 @@
"id": "5469"
},
{
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There are six cabbages in this sack.",
"grand_exchange_price": "1304",
"durability": null,
"name": "Cabbages(6)",
@@ -49429,7 +49430,7 @@
"id": "5471"
},
{
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There are seven cabbages in this sack.",
"grand_exchange_price": "1304",
"durability": null,
"name": "Cabbages(7)",
@@ -49445,7 +49446,7 @@
"id": "5473"
},
{
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There are eight cabbages in this sack.",
"grand_exchange_price": "1304",
"durability": null,
"name": "Cabbages(8)",
@@ -49461,7 +49462,7 @@
"id": "5475"
},
{
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There are nine cabbages in this sack.",
"grand_exchange_price": "1304",
"durability": null,
"name": "Cabbages(9)",
@@ -49478,7 +49479,7 @@
},
{
"ge_buy_limit": "1000",
- "examine": "There are <number of cabbages> in this sack.",
+ "examine": "There are ten cabbages in this sack.",
"grand_exchange_price": "917",
"durability": null,
"name": "Cabbages(10)",
@@ -50376,10 +50377,18 @@
"id": "5584"
},
{
- "examine": "It's a metal spade without a handle.",
+ "examine": "I hope the mould was accurate enough...",
+ "durability": null,
+ "name": "Bronze Key",
+ "weight": "0.01",
+ "archery_ticket_price": "0",
+ "id": "5585"
+ },
+ {
+ "examine": "It's a metal spade with a wooden handle.",
"durability": null,
"name": "Metal spade",
- "weight": "2.5",
+ "weight": "1.814",
"archery_ticket_price": "0",
"id": "5586"
},
@@ -50387,7 +50396,7 @@
"examine": "It's a metal spade without a handle.",
"durability": null,
"name": "Metal spade",
- "weight": "2.5",
+ "weight": "1.814",
"archery_ticket_price": "0",
"id": "5587"
},
@@ -50399,101 +50408,101 @@
"id": "5588"
},
{
- "shop_price": "6",
- "examine": "This needs refining.",
- "grand_exchange_price": "42",
+ "shop_price": "20",
+ "examine": "A tin layered with some stuff from a vial.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Tin",
- "tradeable": "true",
- "weight": "2.25",
+ "tradeable": "false",
+ "weight": "0.101",
"archery_ticket_price": "0",
"id": "5592"
},
{
- "shop_price": "6",
- "examine": "This needs refining.",
- "grand_exchange_price": "42",
+ "shop_price": "20",
+ "examine": "It's full of a white lumpy mixture that seems to be hardening.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Tin",
- "tradeable": "true",
- "weight": "2.25",
+ "tradeable": "false",
+ "weight": "0.101",
"archery_ticket_price": "0",
"id": "5593"
},
{
- "shop_price": "6",
- "examine": "This needs refining.",
- "grand_exchange_price": "42",
+ "shop_price": "20",
+ "examine": "There is an impression of a key embedded in it.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Tin",
- "tradeable": "true",
- "weight": "2.25",
+ "tradeable": "false",
+ "weight": "0.101",
"archery_ticket_price": "0",
"id": "5594"
},
{
- "shop_price": "6",
- "examine": "This needs refining.",
- "grand_exchange_price": "42",
+ "shop_price": "20",
+ "examine": "There is an impression of a key, filled with tin ore.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Tin",
- "tradeable": "true",
- "weight": "2.25",
+ "tradeable": "false",
+ "weight": "0.101",
"archery_ticket_price": "0",
"id": "5595"
},
{
- "shop_price": "6",
- "examine": "This needs refining.",
- "grand_exchange_price": "42",
+ "shop_price": "20",
+ "examine": "There is an impression of a key, filled with copper ore.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Tin",
- "tradeable": "true",
- "weight": "2.25",
+ "tradeable": "false",
+ "weight": "0.101",
"archery_ticket_price": "0",
"id": "5596"
},
{
- "shop_price": "6",
- "examine": "This needs refining.",
- "grand_exchange_price": "42",
+ "shop_price": "20",
+ "examine": "There is an impression of a key, filled with tin and copper ore.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Tin",
- "tradeable": "true",
- "weight": "2.25",
+ "tradeable": "false",
+ "weight": "0.101",
"archery_ticket_price": "0",
"id": "5597"
},
{
- "shop_price": "6",
- "examine": "This needs refining.",
- "grand_exchange_price": "42",
+ "shop_price": "20",
+ "examine": "There is a bronze key surrounded by plaster in this tin.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Tin",
- "tradeable": "true",
- "weight": "2.25",
+ "tradeable": "false",
+ "weight": "0.101",
"archery_ticket_price": "0",
"id": "5598"
},
{
- "shop_price": "6",
- "examine": "This needs refining.",
- "grand_exchange_price": "42",
+ "shop_price": "20",
+ "examine": "There is a strange concoction filling this tin.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Tin",
- "tradeable": "true",
- "weight": "2.25",
+ "tradeable": "false",
+ "weight": "0.101",
"archery_ticket_price": "0",
"id": "5599"
},
{
- "shop_price": "6",
- "examine": "This needs refining.",
- "grand_exchange_price": "42",
+ "shop_price": "10",
+ "examine": "I could probably pour something into this.",
+ "grand_exchange_price": "0",
"durability": null,
"name": "Tin",
- "tradeable": "true",
- "weight": "2.25",
+ "tradeable": "false",
+ "weight": "0.1",
"archery_ticket_price": "0",
"id": "5600"
},
@@ -50523,8 +50532,8 @@
"grand_exchange_price": "41",
"durability": null,
"name": "Shears",
- "tradeable": "true",
- "weight": "0.1",
+ "tradeable": "false",
+ "weight": "0.113",
"archery_ticket_price": "0",
"id": "5603"
},
@@ -55730,7 +55739,7 @@
"equipment_slot": "4"
},
{
- "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.",
+ "examine": "These are in need of a good tailor.",
"durability": null,
"name": "Mourner trousers",
"weight": "2.25",
@@ -55738,7 +55747,7 @@
"id": "6066"
},
{
- "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.",
+ "examine": "A pair of mourner trousers.",
"durability": null,
"name": "Mourner trousers",
"weight": "2.25",
@@ -58301,7 +58310,7 @@
{
"shop_price": "150",
"ge_buy_limit": "100",
- "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.",
+ "examine": "A brown armband, as worn by the Tai Bwo Wannai locals.",
"grand_exchange_price": "734",
"durability": null,
"name": "Villager armband",
@@ -58434,7 +58443,7 @@
{
"shop_price": "150",
"ge_buy_limit": "100",
- "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.",
+ "examine": "A blue armband, as worn by the Tai Bwo Wannai locals.",
"grand_exchange_price": "672",
"durability": null,
"name": "Villager armband",
@@ -58545,7 +58554,7 @@
{
"shop_price": "150",
"ge_buy_limit": "100",
- "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.",
+ "examine": "A yellow armband, as worn by the Tai Bwo Wannai locals.",
"grand_exchange_price": "823",
"durability": null,
"name": "Villager armband",
@@ -58656,7 +58665,7 @@
{
"shop_price": "150",
"ge_buy_limit": "100",
- "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.",
+ "examine": "A pink armband, as worn by the Tai Bwo Wannai locals.",
"grand_exchange_price": "1697",
"durability": null,
"name": "Villager armband",
@@ -59756,7 +59765,7 @@
},
{
"destroy_message": "You will not get a replacement for the present. Open it for your reward.",
- "examine": "Thanks for all your help! Love, Bob & Neite.",
+ "examine": "Thanks for all your help! Love, Bob & Neite.",
"durability": null,
"name": "Present",
"tradeable": "false",
@@ -59950,6 +59959,7 @@
"attack_speed": "5",
"turn180_anim": "1206",
"equipment_slot": "3",
+ "attack_anims": "419,419,419,419",
"grand_exchange_price": "423100",
"stand_anim": "813",
"tradeable": "true",
@@ -70684,7 +70694,7 @@
},
{
"ge_buy_limit": "100",
- "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...",
+ "examine": "Nice bit of crafting!",
"grand_exchange_price": "3236",
"durability": null,
"name": "Toy doll",
@@ -70702,7 +70712,7 @@
"id": "7764"
},
{
- "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...",
+ "examine": "Nice bit of crafting!",
"grand_exchange_price": "3289",
"durability": null,
"name": "Toy doll (wound)",
@@ -72394,6 +72404,7 @@
"id": "7973"
},
{
+ "examine": "I should get it stuffed!",
"durability": null,
"name": "Crawling hand",
"archery_ticket_price": "0",
@@ -72458,6 +72469,7 @@
"id": "7981"
},
{
+ "examine": "I could mount this on my wall!",
"durability": null,
"name": "Crawling hand",
"archery_ticket_price": "0",
@@ -72465,7 +72477,7 @@
"id": "7982"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "I could mount this on my wall!",
"durability": null,
"name": "Cockatrice head",
"tradeable": "false",
@@ -72475,7 +72487,7 @@
"id": "7983"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "I could mount this on my wall!",
"durability": null,
"name": "Basilisk head",
"tradeable": "false",
@@ -72485,7 +72497,7 @@
"id": "7984"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "I could mount this on my wall!",
"durability": null,
"name": "Kurask head",
"tradeable": "false",
@@ -72495,7 +72507,7 @@
"id": "7985"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "I could mount this on my wall!",
"durability": null,
"name": "Abyssal head",
"tradeable": "false",
@@ -72505,7 +72517,7 @@
"id": "7986"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "I could mount these on my wall!",
"durability": null,
"name": "Kbd heads",
"tradeable": "false",
@@ -72515,7 +72527,7 @@
"id": "7987"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "I could mount this on my wall!",
"durability": null,
"name": "Kq head",
"archery_ticket_price": "0",
@@ -72530,7 +72542,7 @@
"id": "7989"
},
{
- "examine": "Whopper! I should get this stuffed!",
+ "examine": "I should mount this on my wall!",
"durability": null,
"name": "Big bass",
"weight": "6",
@@ -72545,14 +72557,14 @@
"id": "7991"
},
{
- "examine": "Whopper! I should get this stuffed!",
+ "examine": "I should mount this on my wall!",
"durability": null,
"name": "Big swordfish",
"archery_ticket_price": "0",
"id": "7992"
},
{
- "examine": "Its a monster! I should get this stuffed!",
+ "examine": "It's a monster! I should get this stuffed!",
"durability": null,
"name": "Big shark",
"weight": "0.7",
@@ -72560,7 +72572,7 @@
"id": "7993"
},
{
- "examine": "Its a monster! I should get this stuffed!",
+ "examine": "I should mount this on my wall!",
"durability": null,
"name": "Big shark",
"weight": "0.7",
@@ -73289,6 +73301,7 @@
"id": "8248"
},
{
+ "examine": "A trophy of a mighty slayer!",
"durability": null,
"name": "Crawling hand",
"archery_ticket_price": "0",
@@ -73296,7 +73309,7 @@
"id": "8260"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "A trophy of a mighty slayer!",
"durability": null,
"name": "Cockatrice head",
"tradeable": "false",
@@ -73306,7 +73319,7 @@
"id": "8261"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "A trophy of a mighty slayer!",
"durability": null,
"name": "Basilisk head",
"tradeable": "false",
@@ -73316,7 +73329,7 @@
"id": "8262"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "A trophy of a mighty slayer!",
"durability": null,
"name": "Kurask head",
"tradeable": "false",
@@ -73326,7 +73339,7 @@
"id": "8263"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "A trophy of a mighty slayer!!",
"durability": null,
"name": "Abyssal head",
"tradeable": "false",
@@ -73336,7 +73349,7 @@
"id": "8264"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "A trophy of a mighty dragon-slayer!",
"durability": null,
"name": "Kbd heads",
"tradeable": "false",
@@ -73346,7 +73359,7 @@
"id": "8265"
},
{
- "examine": "I should get it stuffed!",
+ "examine": "A trophy of a mighty kalphite slayer!",
"durability": null,
"name": "Kq head",
"archery_ticket_price": "0",
@@ -77088,16 +77101,16 @@
"requirements": "{1,20}-{2,10}",
"ge_buy_limit": "10",
"examine": "A magic cave horror mask.",
- "grand_exchange_price": "989400",
"durability": null,
"rare_item": "true",
+ "weight": "10",
+ "equipment_slot": "0",
+ "grand_exchange_price": "989400",
"name": "Black mask (10)",
"tradeable": "true",
- "weight": "10",
"archery_ticket_price": "0",
"id": "8901",
- "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0",
- "equipment_slot": "0"
+ "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0"
},
{
"ge_buy_limit": "10",
@@ -93147,7 +93160,7 @@
},
{
"requirements": "{1,40}",
- "examine": "Rune platebody with complete gold trim & plating.",
+ "examine": "Rune platebody with complete gold trim & plating.",
"durability": null,
"weight": "10",
"absorb": "3,0,6",
@@ -93769,6 +93782,9 @@
"archery_ticket_price": "0",
"id": "10858",
"stand_turn_anim": "7040",
+ "defence_anim": "7050",
+ "attack_anims": "7041,7041,7048,7049",
+ "attack_audios": "2503,0,2504,0",
"bonuses": "-4,27,21,4,0,0,0,0,4,-1,0,26,0,0,0"
},
{
@@ -93911,7 +93927,7 @@
},
{
"shop_price": "128",
- "examine": "I can keep my grub in here.",
+ "examine": "I can keep my items in here, but I'll need a banker to get them out.",
"durability": null,
"name": "Plain satchel",
"weight": "0.1",
@@ -93920,7 +93936,7 @@
"equipment_slot": "5"
},
{
- "examine": "I can keep my grub in here.",
+ "examine": "I can keep my seeds and herbs in here.",
"durability": null,
"name": "Green satchel",
"weight": "0.1",
@@ -93930,7 +93946,7 @@
},
{
"shop_price": "128",
- "examine": "I can keep my grub in here.",
+ "examine": "I can keep my summoning charms in here.",
"durability": null,
"name": "Red satchel",
"weight": "0.1",
@@ -93948,7 +93964,7 @@
"equipment_slot": "5"
},
{
- "examine": "I can keep my grub in here.",
+ "examine": "I can keep my ores in here.",
"durability": null,
"name": "Gold satchel",
"weight": "0.1",
@@ -93957,7 +93973,7 @@
"equipment_slot": "5"
},
{
- "examine": "I can keep my grub in here.",
+ "examine": "I can keep my runes in here.",
"durability": null,
"name": "Rune satchel",
"weight": "0.1",
@@ -98749,6 +98765,7 @@
"bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0"
},
{
+ "requirements": "{0,40}",
"ge_buy_limit": "100",
"turn90cw_anim": "1207",
"examine": "A rune-tipped, one-handed hasta.",
@@ -105233,28 +105250,28 @@
"id": "12196"
},
{
- "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.",
+ "examine": "A hatchling green dragon.",
"durability": null,
"name": "Dragon hatchling",
"archery_ticket_price": "0",
"id": "12197"
},
{
- "examine": "Baby: Little NipperAdult: Bigger Nipper.",
+ "examine": "Little Nipper.",
"durability": null,
"name": "Baby giant crab",
"archery_ticket_price": "0",
"id": "12198"
},
{
- "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.",
+ "examine": "A stripy little baby raccoon.",
"durability": null,
"name": "Baby raccoon",
"archery_ticket_price": "0",
"id": "12199"
},
{
- "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.",
+ "examine": "An experienced nut-thief.",
"durability": null,
"name": "Squirrel",
"archery_ticket_price": "0",
@@ -106487,28 +106504,28 @@
"id": "12468"
},
{
- "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.",
+ "examine": "A hatchling red dragon.",
"durability": null,
- "name": "Hatchling dragon",
+ "name": "Dragon hatchling",
"archery_ticket_price": "0",
"id": "12469"
},
{
- "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.",
+ "examine": "A hatchling blue dragon.",
"durability": null,
"name": "Hatchling dragon",
"archery_ticket_price": "0",
"id": "12471"
},
{
- "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.",
+ "examine": "A hatchling green dragon.",
"durability": null,
"name": "Hatchling dragon",
"archery_ticket_price": "0",
"id": "12473"
},
{
- "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.",
+ "examine": "A hatchling black dragon.",
"durability": null,
"name": "Hatchling dragon",
"archery_ticket_price": "0",
@@ -106555,16 +106572,17 @@
"id": "12480"
},
{
- "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.",
+ "examine": "Can't fly and can barely walk, but adorable nonetheless.",
"durability": null,
"name": "Baby penguin",
"archery_ticket_price": "0",
"id": "12481"
},
{
- "examine": "I can hatch this in an Incubator.",
+ "examine": "I can hatch this in an incubator.",
"durability": null,
"name": "Penguin egg",
+ "tradeable": "false",
"archery_ticket_price": "0",
"id": "12483"
},
@@ -108960,14 +108978,14 @@
"id": "12761"
},
{
- "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.",
+ "examine": "Can't fly and can barely walk, but adorable nonetheless.",
"durability": null,
"name": "Baby penguin",
"archery_ticket_price": "0",
"id": "12763"
},
{
- "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.",
+ "examine": "Can't fly and can barely walk, but adorable nonetheless.",
"durability": null,
"name": "Baby penguin",
"archery_ticket_price": "0",
@@ -119726,6 +119744,7 @@
"equipment_slot": "0"
},
{
+ "requirements": "{11,62}",
"shop_price": "100",
"examine": "It burns, burns, burns...",
"durability": null,
@@ -119741,20 +119760,22 @@
"point_price": "50"
},
{
- "destroy_message": "To get another pair of Flame Gloves, you need to keep ten beacons alight simultaneously and then talk to King Roald.",
+ "requirements": "{11,79}",
"shop_price": "200",
"examine": "The hottest gloves in town.",
"durability": null,
- "name": "Flame gloves",
"destroy": "true",
- "archery_ticket_price": "0",
"attack_speed": "4",
- "id": "13660",
"absorb": "0,0,0",
- "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
- "equipment_slot": "9"
+ "equipment_slot": "9",
+ "destroy_message": "To get another pair of Flame Gloves, you need to keep ten beacons alight simultaneously and then talk to King Roald.",
+ "name": "Flame gloves",
+ "archery_ticket_price": "0",
+ "id": "13660",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
},
{
+ "requirements": "{11,92}",
"shop_price": "300",
"examine": "Danger: risk of fire.",
"durability": null,
@@ -122109,7 +122130,7 @@
{
"lendable": "true",
"destroy_message": "Drop",
- "examine": "Rune platebody with complete gold trim & plating.",
+ "examine": "Rune platebody with complete gold trim & plating.",
"grand_exchange_price": "2034838",
"durability": null,
"name": "Gilded platebody",
@@ -130871,7 +130892,7 @@
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
},
{
- "destroy_message": "You gained this orb from Dark Squall's base. You can probably get another one from visiting the same place.",
+ "destroy_message": "You can make another by casting the Charge Air Orb spell on the Abyssal Rift in the center of the Abyss.",
"examine": "This orb can used to teleport people...somehow.",
"durability": null,
"name": "Strange teleorb",
@@ -132080,5 +132101,20 @@
"archery_ticket_price": "0",
"id": "14658",
"equipment_slot": "0"
+ },
+ {
+ "examine": "Emperor of all he surveys.",
+ "name": "Penguin",
+ "id": "12482"
+ },
+ {
+ "examine": "Emperor of all he surveys.",
+ "name": "Penguin",
+ "id": "12762"
+ },
+ {
+ "examine": "Emperor of all he surveys.",
+ "name": "Penguin",
+ "id": "12764"
}
]
\ No newline at end of file
diff --git a/Server/data/configs/music_regions.json b/Server/data/configs/music_regions.json
index 80dfcc0cb..ebfb70c82 100644
--- a/Server/data/configs/music_regions.json
+++ b/Server/data/configs/music_regions.json
@@ -2079,6 +2079,18 @@
"region": "12880",
"id": "441"
},
+ {
+ "region": "12888",
+ "id": "445"
+ },
+ {
+ "region": "12889",
+ "id": "445"
+ },
+ {
+ "region": "12890",
+ "id": "445"
+ },
{
"region": "12944",
"id": "606"
@@ -2199,6 +2211,18 @@
"region": "13142",
"id": "459"
},
+ {
+ "region": "13144",
+ "id": "445"
+ },
+ {
+ "region": "13145",
+ "id": "445"
+ },
+ {
+ "region": "13146",
+ "id": "445"
+ },
{
"region": "13199",
"id": "388"
@@ -2271,6 +2295,18 @@
"region": "13373",
"id": "586"
},
+ {
+ "region": "13400",
+ "id": "445"
+ },
+ {
+ "region": "13401",
+ "id": "445"
+ },
+ {
+ "region": "13402",
+ "id": "445"
+ },
{
"region": "13456",
"id": "452"
diff --git a/Server/data/configs/npc_configs.json b/Server/data/configs/npc_configs.json
index 9250ea47f..71d194eab 100644
--- a/Server/data/configs/npc_configs.json
+++ b/Server/data/configs/npc_configs.json
@@ -2810,53 +2810,51 @@
"attack_level": "47"
},
{
- "examine": "Small",
+ "examine": "Small, even by gnome standards.",
"melee_animation": "191",
"range_animation": "0",
- "defence_animation": "0",
+ "defence_animation": "193",
"weakness": "9",
"magic_animation": "0",
"death_animation": "196",
"name": "Gnome child",
"defence_level": "1",
"safespot": null,
- "lifepoints": "1",
+ "lifepoints": "2",
"strength_level": "1",
"id": "159",
"range_level": "1",
"attack_level": "1"
},
{
- "examine": "Seems to crawl the caves.",
- "melee_animation": "266",
- "range_animation": "266",
- "attack_speed": "5",
- "defence_animation": "267",
- "weakness": "9",
- "magic_animation": "266",
- "death_animation": "265",
- "name": "Gnome child",
- "defence_level": "23",
- "safespot": null,
- "lifepoints": "21",
- "strength_level": "23",
- "id": "160",
- "bonuses": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
- "range_level": "1",
- "attack_level": "23"
- },
- {
- "examine": "Small",
+ "examine": "Small, even by gnome standards.",
"melee_animation": "191",
"range_animation": "0",
- "defence_animation": "0",
+ "defence_animation": "193",
"weakness": "9",
"magic_animation": "0",
"death_animation": "196",
"name": "Gnome child",
"defence_level": "1",
"safespot": null,
- "lifepoints": "1",
+ "lifepoints": "2",
+ "strength_level": "1",
+ "id": "160",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Small, even by gnome standards.",
+ "melee_animation": "191",
+ "range_animation": "0",
+ "defence_animation": "193",
+ "weakness": "9",
+ "magic_animation": "0",
+ "death_animation": "196",
+ "name": "Gnome child",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "2",
"strength_level": "1",
"id": "161",
"range_level": "1",
@@ -4786,131 +4784,130 @@
"range_level": "1",
"attack_level": "1"
},
- {
- "examine": "A mourner, or plague healer.",
- "melee_animation": "422",
- "range_animation": "0",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
- "death_animation": "836",
- "name": "Mourner",
- "defence_level": "24",
- "safespot": null,
- "lifepoints": "34",
- "strength_level": "24",
- "id": "347",
- "range_level": "1",
- "attack_level": "24"
- },
- {
- "examine": "A mourner, or plague healer.",
- "melee_animation": "422",
- "range_animation": "0",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
- "death_animation": "836",
- "name": "Mourner",
- "defence_level": "24",
- "safespot": null,
- "lifepoints": "34",
- "strength_level": "24",
- "id": "348",
- "range_level": "1",
- "attack_level": "24"
- },
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "0",
+ "range_animation": "",
"combat_audio": "511,513,512",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "attack_speed": "4",
+ "defence_animation": "404",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Man",
- "defence_level": "2",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "2",
+ "lifepoints": "13",
+ "strength_level": "1",
"id": "351",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0",
"range_level": "1",
"attack_level": "2"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "0",
+ "range_animation": "",
"combat_audio": "511,506,505",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "attack_speed": "4",
+ "respawn_delay": "50",
+ "defence_animation": "404",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "2",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "2",
+ "lifepoints": "10",
+ "strength_level": "1",
"id": "352",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0",
"range_level": "1",
"attack_level": "2"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "0",
+ "range_animation": "",
"combat_audio": "511,506,505",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "attack_speed": "4",
+ "respawn_delay": "50",
+ "defence_animation": "404",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "2",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "2",
+ "lifepoints": "13",
+ "strength_level": "1",
"id": "353",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0",
"range_level": "1",
"attack_level": "2"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "0",
+ "range_animation": "",
"combat_audio": "511,506,505",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "attack_speed": "4",
+ "respawn_delay": "50",
+ "defence_animation": "404",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "2",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "2",
+ "lifepoints": "13",
+ "strength_level": "1",
"id": "354",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0",
"range_level": "1",
"attack_level": "2"
},
{
"examine": "A child of West Ardougne.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "magic_level": "",
+ "defence_animation": "",
+ "poison_amount": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Child",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "movement_radius": "",
+ "lifepoints": "",
+ "strength_level": "",
"id": "355",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
+ },
+ {
+ "examine": "A child of West Ardougne.",
+ "melee_animation": "",
+ "range_animation": "",
+ "magic_level": "",
+ "defence_animation": "",
+ "poison_amount": "",
+ "magic_animation": "",
+ "death_animation": "",
+ "name": "Child",
+ "defence_level": "",
+ "safespot": null,
+ "movement_radius": "",
+ "lifepoints": "",
+ "strength_level": "",
+ "id": "356",
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A holy man.",
@@ -4953,22 +4950,24 @@
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "422",
+ "range_animation": "",
"combat_audio": "511,506,505",
"attack_speed": "4",
+ "respawn_delay": "50",
"defence_animation": "404",
- "weakness": "9",
- "magic_animation": "422",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "3",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
+ "lifepoints": "13",
"strength_level": "1",
"id": "360",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"range_level": "1",
- "attack_level": "3"
+ "attack_level": "2"
},
{
"examine": "One of Gielinor's many citizens.",
@@ -4976,56 +4975,62 @@
"range_animation": "422",
"combat_audio": "511,506,505",
"attack_speed": "4",
+ "respawn_delay": "50",
"defence_animation": "404",
- "weakness": "9",
- "magic_animation": "422",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "3",
+ "defence_level": "10",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "1",
+ "lifepoints": "13",
+ "strength_level": "10",
"id": "361",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"range_level": "1",
- "attack_level": "3"
+ "attack_level": "10"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "422",
+ "range_animation": "",
"combat_audio": "511,506,505",
"attack_speed": "4",
+ "respawn_delay": "50",
"defence_animation": "404",
- "weakness": "9",
- "magic_animation": "422",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "3",
+ "defence_level": "2",
"safespot": null,
- "lifepoints": "7",
+ "lifepoints": "10",
"strength_level": "1",
"id": "362",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"range_level": "1",
- "attack_level": "3"
+ "attack_level": "1"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "422",
+ "range_animation": "",
"combat_audio": "511,506,505",
"attack_speed": "4",
+ "respawn_delay": "50",
"defence_animation": "404",
- "weakness": "9",
- "magic_animation": "422",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "3",
+ "defence_level": "10",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "1",
+ "lifepoints": "23",
+ "strength_level": "10",
"id": "363",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"range_level": "1",
- "attack_level": "3"
+ "attack_level": "10"
},
{
"examine": "King Lathas of East Ardougne.",
@@ -5089,23 +5094,6 @@
"range_level": "1",
"attack_level": "1"
},
- {
- "examine": "A mourner, or plague healer.",
- "melee_animation": "422",
- "range_animation": "0",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
- "death_animation": "836",
- "name": "Mourner",
- "defence_level": "24",
- "safespot": null,
- "lifepoints": "34",
- "strength_level": "24",
- "id": "369",
- "range_level": "1",
- "attack_level": "24"
- },
{
"examine": "She's quite a looker!",
"melee_animation": "0",
@@ -8073,32 +8061,43 @@
"attack_level": "1"
},
{
- "slayer_exp": "0",
+ "slayer_exp": "",
"examine": "A local civilian.",
"name": "Edmond",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "combat_audio": "",
+ "strength_level": "",
"id": "714",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
- "examine": "In charge of people with silly outfits.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
- "name": "Head mourner",
- "defence_level": "1",
+ "slayer_exp": "",
+ "examine": "A local civilian.",
+ "name": "Edmond",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
- "id": "716",
- "range_level": "1",
- "attack_level": "1"
+ "lifepoints": "",
+ "combat_audio": "",
+ "strength_level": "",
+ "id": "3213",
+ "range_level": "",
+ "attack_level": ""
+ },
+ {
+ "slayer_exp": "",
+ "examine": "A local civilian.",
+ "name": "Edmond",
+ "defence_level": "",
+ "safespot": null,
+ "lifepoints": "",
+ "combat_audio": "",
+ "strength_level": "",
+ "id": "3214",
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A member of the Ardougne Royal Army.",
@@ -8144,39 +8143,42 @@
},
{
"examine": "One of Gielinor's many citizens.",
- "melee_animation": "0",
- "range_animation": "0",
- "combat_audio": "511,513,512",
+ "melee_animation": "",
+ "range_animation": "",
+ "combat_audio": "",
+ "protect_style": "",
+ "respawn_delay": "",
"defence_animation": "0",
- "magic_animation": "0",
+ "slayer_exp": "",
+ "magic_animation": "",
"death_animation": "0",
"name": "Man",
"defence_level": "1",
- "safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "safespot": "",
+ "lifepoints": "",
+ "strength_level": "",
"id": "728",
- "clue_level": "0",
- "range_level": "1",
- "attack_level": "1"
+ "clue_level": "",
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "One of Gielinor's many citizens.",
- "melee_animation": "0",
- "range_animation": "0",
- "combat_audio": "511,513,512",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "combat_audio": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Man",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "729",
- "clue_level": "0",
- "range_level": "1",
- "attack_level": "1"
+ "clue_level": "",
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "One of Gielinor's many citizens.",
@@ -8500,51 +8502,51 @@
},
{
"examine": "A citizen of Ardougne.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Civilian",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "785",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A citizen of Ardougne.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Civilian",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "786",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A citizen of Ardougne.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Civilian",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "787",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A gnome who's supposed to be cleaning up a mess.",
@@ -10473,6 +10475,11 @@
"range_level": "1",
"attack_level": "22"
},
+ {
+ "examine": "A rather nasty looking crustacean.",
+ "name": "Sea slug",
+ "id": "1006"
+ },
{
"examine": "A servant of Zamorak.",
"combat_style": "2",
@@ -12884,7 +12891,7 @@
},
{
"examine": "It looks very hungry!",
- "melee_animation": "7183",
+ "melee_animation": "1264",
"slayer_exp": "50",
"death_animation": "7185",
"name": "Vampire",
@@ -12898,6 +12905,8 @@
"attack_level": "52"
},
{
+ "examine": "It looks very hungry!",
+ "melee_animation": "1264",
"slayer_exp": "40",
"name": "Vampire",
"defence_level": "1",
@@ -12910,6 +12919,7 @@
"attack_level": "1"
},
{
+ "examine": "It looks very hungry!",
"name": "Vampire",
"defence_level": "1",
"safespot": null,
@@ -19216,6 +19226,21 @@
"range_level": "1",
"attack_level": "1"
},
+ {
+ "examine": "A human zombie.",
+ "melee_animation": "5568",
+ "combat_audio": "931,923,922",
+ "defence_animation": "5567",
+ "death_animation": "5569",
+ "name": "Zombie",
+ "defence_level": "30",
+ "safespot": null,
+ "lifepoints": "50",
+ "strength_level": "30",
+ "id": "1826",
+ "range_level": "1",
+ "attack_level": "30"
+ },
{
"examine": "Flies like a rock.",
"melee_animation": "9454",
@@ -19926,49 +19951,70 @@
"attack_level": "1"
},
{
- "examine": "A tough-looking criminal.",
- "melee_animation": "412",
- "range_animation": "412",
+ "examine": "Ice warrior.",
+ "melee_animation": "440",
+ "range_animation": "440",
"attack_speed": "5",
"defence_animation": "404",
"magic_animation": "412",
"death_animation": "9055",
"name": "Kamil",
- "defence_level": "20",
+ "defence_level": "135",
"safespot": null,
- "lifepoints": "50",
- "strength_level": "55",
+ "lifepoints": "130",
+ "strength_level": "80",
"id": "1913",
+ "bonuses": "0,60,0,0,0,35,60,35,0,0,0,100,0,0,0",
"range_level": "1",
- "attack_level": "20"
+ "attack_level": "190"
},
{
- "melee_animation": "422",
+ "examine": "A vampyre warrior of Zamorak.",
+ "melee_animation": "1264",
"respawn_delay": "60",
"defence_animation": "425",
"death_animation": "836",
"name": "Dessous",
- "defence_level": "1",
+ "defence_level": "99",
"safespot": null,
"lifepoints": "200",
- "strength_level": "1",
+ "strength_level": "99",
"id": "1914",
"aggressive": "true",
+ "bonuses": "0,0,50,0,0,10,150,150,0,0,0,50,0,0,0",
"range_level": "1",
- "attack_level": "1"
+ "attack_level": "99"
},
{
- "melee_animation": "422",
+ "examine": "A vampyre warrior of Zamorak.",
+ "melee_animation": "1264",
"respawn_delay": "60",
"defence_animation": "425",
"death_animation": "836",
"name": "Dessous",
- "defence_level": "1",
+ "defence_level": "99",
"safespot": null,
"lifepoints": "200",
- "strength_level": "1",
+ "strength_level": "99",
"id": "1915",
"aggressive": "true",
+ "bonuses": "0,0,50,0,0,10,150,150,0,0,0,50,0,0,0",
+ "range_level": "1",
+ "attack_level": "99"
+ },
+ {
+ "examine": "Luckily, I can't see much of his face.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "defence_animation": "0",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Ruantun",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "1916",
"range_level": "1",
"attack_level": "1"
},
@@ -20022,6 +20068,22 @@
"range_level": "1",
"attack_level": "58"
},
+ {
+ "examine": "One of Morytania's vampyric nobility.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "defence_animation": "0",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Malak",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "1920",
+ "range_level": "1",
+ "attack_level": "1"
+ },
{
"examine": "Looks like a rough-and-ready type.",
"melee_animation": "0",
@@ -20220,6 +20282,98 @@
"range_level": "1",
"attack_level": "64"
},
+ {
+ "examine": "A troll frozen in a block of ice.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "respawn_delay": "1",
+ "defence_animation": "0",
+ "weakness": "9",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Ice block",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "1943",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "A troll frozen in a block of ice.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "respawn_delay": "1",
+ "defence_animation": "0",
+ "weakness": "9",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Ice block",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "1944",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "A troll frozen in a block of ice.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "respawn_delay": "1",
+ "defence_animation": "0",
+ "weakness": "9",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Ice block",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "1945",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "A troll frozen in a block of ice.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "respawn_delay": "1",
+ "defence_animation": "0",
+ "weakness": "9",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Ice block",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "1946",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "An ice troll.",
+ "name": "Troll father",
+ "id": "1947"
+ },
+ {
+ "examine": "An ice troll.",
+ "name": "Troll father",
+ "id": "1948"
+ },
+ {
+ "examine": "An ice troll.",
+ "name": "Troll mother",
+ "id": "1949"
+ },
+ {
+ "examine": "An ice troll.",
+ "name": "Troll mother",
+ "id": "1950"
+ },
{
"examine": "Not a man's best friend.",
"melee_animation": "6579",
@@ -20366,17 +20520,17 @@
"magic_animation": "0",
"death_animation": "5555",
"name": "Mummy",
- "defence_level": "55",
+ "defence_level": "90",
"safespot": null,
- "lifepoints": "78",
- "strength_level": "55",
+ "lifepoints": "90",
+ "strength_level": "90",
"id": "1961",
"aggressive": "true",
"range_level": "1",
- "attack_level": "55"
+ "attack_level": "90"
},
{
- "examine": "Spooky",
+ "examine": "Spooky, bandaged dead dude.",
"melee_animation": "5549",
"range_animation": "0",
"defence_animation": "0",
@@ -20384,14 +20538,15 @@
"magic_animation": "0",
"death_animation": "5555",
"name": "Mummy",
- "defence_level": "55",
+ "defence_level": "90",
"poison_immune": "true",
"safespot": null,
- "lifepoints": "78",
- "strength_level": "55",
+ "lifepoints": "90",
+ "strength_level": "90",
"id": "1962",
+ "aggressive": "true",
"range_level": "1",
- "attack_level": "55"
+ "attack_level": "90"
},
{
"examine": "A victim of poor first aid.",
@@ -20402,14 +20557,15 @@
"magic_animation": "0",
"death_animation": "5555",
"name": "Mummy",
- "defence_level": "55",
+ "defence_level": "90",
"poison_immune": "true",
"safespot": null,
- "lifepoints": "78",
- "strength_level": "55",
+ "lifepoints": "90",
+ "strength_level": "90",
"id": "1963",
+ "aggressive": "true",
"range_level": "1",
- "attack_level": "55"
+ "attack_level": "90"
},
{
"examine": "But who's the daddy?",
@@ -20420,13 +20576,14 @@
"magic_animation": "0",
"death_animation": "5555",
"name": "Mummy",
- "defence_level": "55",
+ "defence_level": "90",
"safespot": null,
- "lifepoints": "78",
- "strength_level": "55",
+ "lifepoints": "90",
+ "strength_level": "90",
"id": "1964",
+ "aggressive": "true",
"range_level": "1",
- "attack_level": "55"
+ "attack_level": "90"
},
{
"examine": "A tightly-wrapped monster.",
@@ -20466,19 +20623,20 @@
"examine": "I think they're some kind of beetle...",
"melee_animation": "1948",
"range_animation": "0",
+ "attack_speed": "3",
"poisonous": "true",
- "defence_animation": "0",
+ "defence_animation": "1946",
"weakness": "7",
"magic_animation": "0",
- "death_animation": "1946",
+ "death_animation": "5464",
"name": "Scarabs",
- "defence_level": "62",
+ "defence_level": "10",
"safespot": null,
- "lifepoints": "88",
- "strength_level": "62",
+ "lifepoints": "25",
+ "strength_level": "2",
"id": "1969",
"range_level": "1",
- "attack_level": "62"
+ "attack_level": "255"
},
{
"examine": "A wandering merchant.",
@@ -20508,6 +20666,45 @@
"range_level": "1",
"attack_level": "60"
},
+ {
+ "examine": "The warrior of darkness.",
+ "melee_animation": "440",
+ "range_animation": "0",
+ "respawn_delay": "60",
+ "defence_animation": "0",
+ "weakness": "0",
+ "magic_animation": "0",
+ "death_animation": "836",
+ "name": "Damis",
+ "defence_level": "90",
+ "safespot": null,
+ "lifepoints": "90",
+ "strength_level": "90",
+ "id": "1974",
+ "bonuses": "0,0,0,0,0,60,60,60,60,60,0,80,0,0,0",
+ "range_level": "1",
+ "attack_level": "90"
+ },
+ {
+ "examine": "The warrior of darkness.",
+ "melee_animation": "440",
+ "range_animation": "0",
+ "attack_speed": "3",
+ "respawn_delay": "60",
+ "defence_animation": "0",
+ "weakness": "0",
+ "magic_animation": "0",
+ "death_animation": "836",
+ "name": "Damis",
+ "defence_level": "160",
+ "safespot": null,
+ "lifepoints": "200",
+ "strength_level": "100",
+ "id": "1975",
+ "bonuses": "0,0,0,0,0,100,100,100,80,120,0,100,0,0,0",
+ "range_level": "1",
+ "attack_level": "160"
+ },
{
"examine": "Looks hungry!",
"melee_animation": "6565",
@@ -20527,19 +20724,22 @@
"attack_level": "48"
},
{
+ "examine": "Zamorak's warrior of fire.",
"melee_animation": "799",
+ "magic_level": "100",
"respawn_delay": "60",
"defence_animation": "434",
"death_animation": "836",
"name": "Fareed",
- "defence_level": "1",
+ "defence_level": "135",
"safespot": null,
"lifepoints": "130",
- "strength_level": "1",
+ "strength_level": "120",
"id": "1977",
"aggressive": "true",
- "range_level": "1",
- "attack_level": "1"
+ "bonuses": "0,0,0,0,0,100,100,100,0,0,0,120,0,0,0",
+ "range_level": "100",
+ "attack_level": "190"
},
{
"examine": "A malnourished worker.",
@@ -21495,16 +21695,28 @@
"attack_level": "1"
},
{
+ "examine": "A partially decomposing zombie ogre.",
+ "slayer_task": "64",
+ "combat_audio": "",
+ "melee_animation": "359",
+ "range_animation": "359",
+ "attack_speed": "6",
+ "magic_level": "1",
+ "respawn_delay": "60",
+ "defence_animation": "360",
+ "slayer_exp": "",
+ "weakness": "7",
+ "magic_animation": "359",
+ "death_animation": "361",
"name": "Slash Bash",
- "defence_level": "1",
+ "defence_level": "60",
"safespot": null,
- "lifepoints": "103",
- "strength_level": "1",
+ "lifepoints": "100",
+ "strength_level": "120",
"id": "2060",
"aggressive": "true",
- "range_level": "1",
- "respawn_delay": "60",
- "attack_level": "1"
+ "range_level": "100",
+ "attack_level": "100"
},
{
"examine": "I can see fish swimming in the water.",
@@ -23449,6 +23661,54 @@
"range_level": "1",
"attack_level": "1"
},
+ {
+ "examine": "An observer for the Temple Knights.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "defence_animation": "0",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Sir Spishyus",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "2282",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "An observer for the Temple Knights.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "defence_animation": "0",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Lady Table",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "2283",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "An observer for the Temple Knights.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "defence_animation": "0",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Sir Kuam Ferentse",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "2284",
+ "range_level": "1",
+ "attack_level": "1"
+ },
{
"examine": "A warrior blessed by Saradomin.",
"melee_animation": "400",
@@ -23456,13 +23716,45 @@
"defence_animation": "425",
"death_animation": "836",
"name": "Sir Leye",
- "defence_level": "1",
+ "defence_level": "15",
"safespot": null,
"lifepoints": "21",
- "strength_level": "1",
+ "strength_level": "18",
"id": "2285",
"aggressive": "true",
"range_level": "1",
+ "attack_level": "18"
+ },
+ {
+ "examine": "An observer for the Temple Knights.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "defence_animation": "0",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Sir Tinley",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "2286",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "An observer for the Temple Knights.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "defence_animation": "0",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Sir Ren Itchood",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "2287",
+ "range_level": "1",
"attack_level": "1"
},
{
@@ -23497,6 +23789,22 @@
"range_level": "1",
"attack_level": "1"
},
+ {
+ "examine": "Head of recruitment for the Temple Knights.",
+ "melee_animation": "0",
+ "range_animation": "0",
+ "defence_animation": "0",
+ "magic_animation": "0",
+ "death_animation": "0",
+ "name": "Sir Tiffy Cashien",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "strength_level": "1",
+ "id": "2290",
+ "range_level": "1",
+ "attack_level": "1"
+ },
{
"examine": "A carpet merchant.",
"melee_animation": "0",
@@ -23971,39 +24279,233 @@
},
{
"examine": "A Mourner showing his true identity.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Head mourner",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "2372",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A mourner, or plague healer.",
"melee_animation": "428",
- "range_animation": "0",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "range_animation": "",
+ "attack_speed": "4",
+ "defence_animation": "",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Mourner",
- "defence_level": "61",
+ "defence_level": "80",
"safespot": null,
"lifepoints": "87",
"strength_level": "61",
"id": "2373",
"aggressive": "true",
- "range_level": "1",
+ "range_level": "",
"attack_level": "61"
},
{
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2381",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2382",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2383",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2384",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2385",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2386",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2387",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2388",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2389",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2390",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2391",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2392",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2393",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2394",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2395",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
+ "name": "Mysterious ghost",
+ "defence_level": "1",
+ "safespot": null,
+ "lifepoints": "10",
+ "combat_audio": "436,439,438",
+ "strength_level": "1",
+ "id": "2396",
+ "range_level": "1",
+ "attack_level": "1"
+ },
+ {
+ "examine": "Seems to flitter in and out of existence...",
"name": "Mysterious ghost",
"defence_level": "1",
"safespot": null,
@@ -24015,6 +24517,7 @@
"attack_level": "1"
},
{
+ "examine": "Seems to flitter in and out of existence...",
"name": "Mysterious ghost",
"defence_level": "1",
"safespot": null,
@@ -24026,6 +24529,7 @@
"attack_level": "1"
},
{
+ "examine": "Seems to flitter in and out of existence...",
"name": "Mysterious ghost",
"defence_level": "1",
"safespot": null,
@@ -24037,6 +24541,7 @@
"attack_level": "1"
},
{
+ "examine": "Seems to flitter in and out of existence...",
"name": "Mysterious ghost",
"defence_level": "1",
"safespot": null,
@@ -24048,6 +24553,7 @@
"attack_level": "1"
},
{
+ "examine": "Seems to flitter in and out of existence...",
"name": "Mysterious ghost",
"defence_level": "1",
"safespot": null,
@@ -24059,6 +24565,7 @@
"attack_level": "1"
},
{
+ "examine": "Seems to flitter in and out of existence...",
"name": "Mysterious ghost",
"defence_level": "1",
"safespot": null,
@@ -26686,51 +27193,51 @@
},
{
"examine": "Digging.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Slave",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "2785",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "Digging.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Slave",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "2786",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "Confused.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Slave",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "2787",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "Drill Sergeant from heck!",
@@ -26765,7 +27272,7 @@
"attack_level": "1"
},
{
- "examine": "An angry Ogre in a funny hat.",
+ "examine": "Big, ugly, and smelly.",
"melee_animation": "359",
"range_animation": "359",
"attack_speed": "6",
@@ -26773,14 +27280,14 @@
"magic_animation": "359",
"death_animation": "361",
"name": "Ogre",
- "defence_level": "30",
+ "defence_level": "54",
"safespot": null,
- "lifepoints": "48",
- "strength_level": "30",
+ "lifepoints": "60",
+ "strength_level": "54",
"id": "2801",
"aggressive": "true",
"range_level": "1",
- "attack_level": "30"
+ "attack_level": "54"
},
{
"examine": "They just call him 'Coach'.",
@@ -30212,22 +30719,6 @@
"range_level": "1",
"attack_level": "1"
},
- {
- "examine": "A mourner, or plague healer.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
- "name": "Mourner",
- "defence_level": "1",
- "safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
- "id": "3216",
- "range_level": "1",
- "attack_level": "1"
- },
{
"examine": "Loves mining.",
"melee_animation": "99",
@@ -52542,7 +53033,7 @@
"name": "Entrana firebird",
"defence_level": "1",
"safespot": null,
- "lifepoints": "1",
+ "lifepoints": "5",
"strength_level": "1",
"id": "6108",
"range_level": "1",
@@ -60748,17 +61239,21 @@
{
"examine": "A bird. Literally terrifying.",
"melee_animation": "1010",
+ "range_animation": "0",
+ "magic_level": "50",
"respawn_delay": "0",
- "defence_animation": "1011",
- "death_animation": "1012",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "1013",
"name": "Spirit terrorbird",
- "defence_level": "1",
+ "defence_level": "50",
"safespot": null,
"lifepoints": "74",
- "strength_level": "1",
+ "strength_level": "50",
"id": "6794",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "50",
+ "attack_level": "50"
},
{
"examine": "A bird. Literally terrifying.",
@@ -60821,18 +61316,23 @@
"attack_level": "18"
},
{
+ "examine": "Wax on",
+ "melee_animation": "8069",
+ "range_animation": "0",
+ "magic_level": "60",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "8065",
"name": "Praying mantis",
- "defence_level": "1",
+ "defence_level": "60",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "8064",
- "strength_level": "1",
+ "lifepoints": "107",
+ "strength_level": "60",
"id": "6798",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "8066"
+ "range_level": "60",
+ "attack_level": "60"
},
{
"examine": "Wax on",
@@ -60854,18 +61354,23 @@
"attack_level": "60"
},
{
+ "examine": "He ent such a bad guy.",
+ "melee_animation": "7853",
+ "range_animation": "0",
+ "magic_level": "60",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7854",
"name": "Giant ent",
- "defence_level": "1",
+ "defence_level": "60",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "7853",
- "strength_level": "1",
+ "lifepoints": "111",
+ "strength_level": "60",
"id": "6800",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7852"
+ "range_level": "60",
+ "attack_level": "60"
},
{
"examine": "He ent such a bad guy.",
@@ -60887,18 +61392,23 @@
"attack_level": "60"
},
{
+ "examine": "Serpentine.",
+ "melee_animation": "8152",
+ "range_animation": "0",
+ "magic_level": "55",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "8153",
"name": "Spirit cobra",
- "defence_level": "1",
+ "defence_level": "55",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "8152",
- "strength_level": "1",
+ "lifepoints": "90",
+ "strength_level": "55",
"id": "6802",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "8154"
+ "range_level": "55",
+ "attack_level": "55"
},
{
"examine": "Serpentine.",
@@ -60920,18 +61430,23 @@
"attack_level": "55"
},
{
+ "examine": "Face the thing that should not be!",
+ "melee_animation": "7786",
+ "range_animation": "0",
+ "magic_level": "65",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7780",
"name": "Spirit dagannoth",
- "defence_level": "1",
+ "defence_level": "65",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "7786",
- "strength_level": "1",
+ "lifepoints": "115",
+ "strength_level": "65",
"id": "6804",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7785"
+ "range_level": "65",
+ "attack_level": "65"
},
{
"examine": "Face the thing that should not be!",
@@ -61002,19 +61517,24 @@
"attack_level": "19"
},
{
+ "examine": "Kneel before squid!",
"combat_style": "2",
- "melee_animation": "7970",
+ "melee_animation": "7963",
+ "range_animation": "0",
+ "magic_level": "50",
"respawn_delay": "0",
- "defence_animation": "7967",
- "death_animation": "7979",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "7964",
"name": "Karamthulhu overlord",
- "defence_level": "1",
+ "defence_level": "50",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "82",
+ "strength_level": "50",
"id": "6809",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "50",
+ "attack_level": "50"
},
{
"examine": "Kneel before squid!",
@@ -61095,23 +61615,28 @@
"defence_animation": "7742"
},
{
- "combat_style": "1",
+ "examine": "Definitely not teenaged",
+ "combat_style": "0",
"melee_animation": "8286",
+ "range_animation": "0",
+ "magic_level": "55",
"respawn_delay": "0",
- "defence_animation": "8287",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "8285",
"name": "War tortoise",
- "defence_level": "1",
+ "defence_level": "55",
"safespot": null,
- "lifepoints": "348",
- "strength_level": "1",
+ "lifepoints": "95",
+ "strength_level": "55",
"id": "6815",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "55",
+ "attack_level": "55"
},
{
"examine": "Definitely not teenaged",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8286",
"range_animation": "0",
"magic_level": "55",
@@ -61141,19 +61666,24 @@
"attack_level": "1"
},
{
+ "examine": "It's an extra-planar little blood hoover.",
"combat_style": "2",
- "melee_animation": "7675",
+ "melee_animation": "8910",
+ "range_animation": "0",
+ "magic_level": "50",
"respawn_delay": "0",
- "defence_animation": "7670",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7671",
"name": "Abyssal parasite",
- "defence_level": "1",
+ "defence_level": "50",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "77",
+ "strength_level": "50",
"id": "6818",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "50",
+ "attack_level": "50"
},
{
"examine": "It's an extra-planar little blood hoover.",
@@ -61176,18 +61706,23 @@
"attack_level": "50"
},
{
+ "examine": "Lurking like only a lurker can.",
+ "melee_animation": "7680",
+ "range_animation": "0",
+ "magic_level": "55",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7684",
"name": "Abyssal lurker",
- "defence_level": "1",
+ "defence_level": "55",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "7680",
- "strength_level": "1",
+ "lifepoints": "88",
+ "strength_level": "55",
"id": "6820",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7681"
+ "range_level": "55",
+ "attack_level": "55"
},
{
"examine": "Lurking like only a lurker can.",
@@ -61314,19 +61849,24 @@
"attack_level": "17"
},
{
- "examine": "It's mean and green.",
+ "examine": "It's mean and green!",
"melee_animation": "8208",
+ "range_animation": "0",
+ "attack_speed": "5",
+ "magic_level": "55",
"respawn_delay": "0",
- "defence_animation": "8205",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "8209",
"name": "Stranger plant",
- "defence_level": "1",
+ "defence_level": "55",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "91",
+ "strength_level": "55",
"id": "6827",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "55",
+ "attack_level": "55"
},
{
"examine": "It's mean and green!",
@@ -61388,18 +61928,24 @@
"attack_level": "16"
},
{
+ "examine": "Surprisingly slime-free.",
+ "combat_style": "1",
+ "melee_animation": "7795",
+ "range_animation": "0",
+ "magic_level": "18",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7797",
"name": "Desert wyrm",
- "defence_level": "1",
+ "defence_level": "18",
"safespot": null,
- "lifepoints": "47",
- "melee_animation": "7795",
- "strength_level": "1",
+ "lifepoints": "25",
+ "strength_level": "18",
"id": "6831",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7796"
+ "range_level": "18",
+ "attack_level": "18"
},
{
"examine": "Surprisingly slime-free.",
@@ -61423,6 +61969,26 @@
},
{
"examine": "If you think he's evil",
+ "combat_style": "1",
+ "melee_animation": "8248",
+ "range_animation": "0",
+ "magic_level": "42",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "8250",
+ "name": "Evil turnip",
+ "defence_level": "42",
+ "safespot": null,
+ "lifepoints": "60",
+ "strength_level": "42",
+ "id": "6833",
+ "range_level": "42",
+ "attack_level": "42"
+ },
+ {
+ "examine": "If you think he's evil",
+ "combat_style": "1",
"melee_animation": "8248",
"range_animation": "0",
"magic_level": "42",
@@ -61440,18 +62006,23 @@
"attack_level": "42"
},
{
+ "examine": "It vants to suck my blood!",
+ "melee_animation": "8275",
+ "range_animation": "0",
+ "magic_level": "31",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "8276",
"name": "Vampire bat",
- "defence_level": "1",
+ "defence_level": "31",
"safespot": null,
- "lifepoints": "20",
- "melee_animation": "8275",
- "strength_level": "1",
+ "lifepoints": "44",
+ "strength_level": "31",
"id": "6835",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "8274"
+ "range_level": "31",
+ "attack_level": "31"
},
{
"examine": "It vants to suck my blood!",
@@ -61473,19 +62044,24 @@
"attack_level": "31"
},
{
+ "examine": "Salt and vinegaroon.",
"melee_animation": "6254",
+ "range_animation": "0",
"combat_audio": "3611,3612,3610",
+ "magic_level": "19",
"respawn_delay": "0",
- "defence_animation": "6255",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "6256",
"name": "Spirit scorpion",
- "defence_level": "1",
+ "defence_level": "19",
"safespot": null,
- "lifepoints": "67",
- "strength_level": "1",
+ "lifepoints": "27",
+ "strength_level": "19",
"id": "6837",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "19",
+ "attack_level": "19"
},
{
"examine": "Salt and vinegaroon.",
@@ -61542,6 +62118,7 @@
"lifepoints": "101",
"strength_level": "60",
"id": "6840",
+ "bonuses": "90,50,50,60,90,80,50,30,40,100,0,0,0,0,0",
"range_level": "60",
"attack_level": "60"
},
@@ -61587,18 +62164,23 @@
"attack_level": "17"
},
{
+ "examine": "It's like a little suction pump with eyes.",
+ "melee_animation": "7657",
+ "range_animation": "0",
+ "magic_level": "49",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7656",
"name": "Bloated leech",
- "defence_level": "1",
+ "defence_level": "49",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "7657",
- "strength_level": "1",
+ "lifepoints": "70",
+ "strength_level": "49",
"id": "6843",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7655"
+ "range_level": "49",
+ "attack_level": "49"
},
{
"examine": "It's like a little suction pump with eyes.",
@@ -61620,18 +62202,23 @@
"attack_level": "49"
},
{
+ "examine": "Violent little so-and-so.",
+ "melee_animation": "7928",
+ "range_animation": "0",
+ "magic_level": "32",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7925",
"name": "Honey badger",
- "defence_level": "1",
+ "defence_level": "32",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "7928",
- "strength_level": "1",
+ "lifepoints": "45",
+ "strength_level": "32",
"id": "6845",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7927"
+ "range_level": "32",
+ "attack_level": "32"
},
{
"examine": "Violent little so-and-so.",
@@ -61717,6 +62304,7 @@
"lifepoints": "105",
"strength_level": "60",
"id": "6850",
+ "bonuses": "93,90,65,90,30,40,50,50,60,40,0,0,0,0,0",
"range_level": "60",
"attack_level": "60"
},
@@ -61746,7 +62334,7 @@
},
{
"examine": "He's just a big bully.",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"magic_level": "1",
"respawn_delay": "0",
@@ -61764,7 +62352,7 @@
},
{
"examine": "He's just a big bully.",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"range_animation": "0",
"magic_level": "1",
@@ -61785,7 +62373,7 @@
},
{
"examine": "He's just a big bully.",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"magic_level": "25",
"respawn_delay": "0",
@@ -61804,7 +62392,7 @@
},
{
"examine": "He's just a big bully.",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"range_animation": "0",
"magic_level": "25",
@@ -61826,7 +62414,7 @@
},
{
"examine": "He's just a big bully!",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"magic_level": "28",
"respawn_delay": "0",
@@ -61844,7 +62432,7 @@
},
{
"examine": "He's just a big bully.",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"range_animation": "0",
"magic_level": "28",
@@ -61865,7 +62453,7 @@
},
{
"examine": "He's just a big bully",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"magic_level": "30",
"respawn_delay": "0",
@@ -61884,7 +62472,7 @@
},
{
"examine": "He's just a big bully.",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"range_animation": "0",
"magic_level": "30",
@@ -61905,7 +62493,7 @@
},
{
"examine": "He's just a big bully.",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"attack_speed": "",
"magic_level": "35",
@@ -61925,7 +62513,7 @@
},
{
"examine": "He's just a big bully.",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8024",
"range_animation": "0",
"magic_level": "35",
@@ -61980,18 +62568,23 @@
"attack_level": "40"
},
{
+ "examine": "Well",
+ "melee_animation": "7816",
+ "range_animation": "0",
+ "magic_level": "55",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7818",
"name": "Smoke devil",
- "defence_level": "1",
+ "defence_level": "55",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "7816",
- "strength_level": "1",
+ "lifepoints": "87",
+ "strength_level": "55",
"id": "6865",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7817"
+ "range_level": "55",
+ "attack_level": "55"
},
{
"examine": "Well",
@@ -62013,18 +62606,23 @@
"attack_level": "55"
},
{
+ "examine": "Putting all three of its best feet forward.",
+ "melee_animation": "7896",
+ "range_animation": "0",
+ "magic_level": "40",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7897",
"name": "Bull ant",
- "defence_level": "1",
+ "defence_level": "40",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "7896",
- "strength_level": "1",
+ "lifepoints": "57",
+ "strength_level": "40",
"id": "6867",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7900"
+ "range_level": "40",
+ "attack_level": "40"
},
{
"examine": "Putting all three of its best feet forward.",
@@ -62088,19 +62686,24 @@
"attack_level": "1"
},
{
- "melee_animation": "853",
+ "examine": "I suppose it could smell worse",
+ "melee_animation": "7769",
+ "range_animation": "0",
"attack_speed": "5",
+ "magic_level": "28",
"respawn_delay": "0",
- "defence_animation": "851",
- "death_animation": "852",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "7770",
"name": "Compost mound",
- "defence_level": "1",
+ "defence_level": "28",
"safespot": null,
- "lifepoints": "96",
- "strength_level": "1",
+ "lifepoints": "40",
+ "strength_level": "28",
"id": "6871",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "28",
+ "attack_level": "28"
},
{
"examine": "I suppose it could smell worse",
@@ -62164,21 +62767,26 @@
"attack_level": "112"
},
{
+ "examine": "If looks could kill... Wait",
"start_gfx": "1467",
"combat_style": "2",
"melee_animation": "7762",
+ "range_animation": "0",
+ "magic_level": "43",
"respawn_delay": "0",
- "defence_animation": "7761",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7763",
"name": "Spirit cockatrice",
- "defence_level": "1",
+ "defence_level": "43",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "61",
+ "strength_level": "43",
"id": "6875",
- "range_level": "1",
+ "range_level": "43",
"projectile": "1468",
- "attack_level": "1"
+ "attack_level": "43"
},
{
"examine": "If looks could kill... Wait",
@@ -62203,21 +62811,26 @@
"attack_level": "43"
},
{
+ "examine": "If looks could kill... Wait",
"start_gfx": "1467",
"combat_style": "2",
"melee_animation": "7762",
+ "range_animation": "0",
+ "magic_level": "43",
"respawn_delay": "0",
- "defence_animation": "7761",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7763",
"name": "Spirit guthatrice",
- "defence_level": "1",
+ "defence_level": "43",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "61",
+ "strength_level": "43",
"id": "6877",
- "range_level": "1",
+ "range_level": "43",
"projectile": "1468",
- "attack_level": "1"
+ "attack_level": "43"
},
{
"examine": "If looks could kill... Wait",
@@ -62242,22 +62855,27 @@
"attack_level": "43"
},
{
+ "examine": "If looks could kill... Wait",
"start_gfx": "1467",
"combat_style": "2",
"melee_animation": "7762",
+ "range_animation": "0",
"combat_audio": "703,705,704",
+ "magic_level": "43",
"respawn_delay": "0",
- "defence_animation": "7761",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7763",
"name": "Spirit saratrice",
- "defence_level": "1",
+ "defence_level": "43",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "61",
+ "strength_level": "43",
"id": "6879",
- "range_level": "1",
+ "range_level": "43",
"projectile": "1468",
- "attack_level": "1"
+ "attack_level": "43"
},
{
"examine": "If looks could kill... Wait",
@@ -62283,21 +62901,26 @@
"attack_level": "43"
},
{
+ "examine": "If looks could kill... Wait",
"start_gfx": "1467",
"combat_style": "2",
"melee_animation": "7762",
+ "range_animation": "0",
+ "magic_level": "43",
"respawn_delay": "0",
- "defence_animation": "7761",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7763",
"name": "Spirit zamatrice",
- "defence_level": "1",
+ "defence_level": "43",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "61",
+ "strength_level": "43",
"id": "6881",
- "range_level": "1",
+ "range_level": "43",
"projectile": "1468",
- "attack_level": "1"
+ "attack_level": "43"
},
{
"examine": "If looks could kill... Wait",
@@ -62322,21 +62945,26 @@
"attack_level": "43"
},
{
+ "examine": "If looks could kill... Wait",
"start_gfx": "1467",
"combat_style": "2",
"melee_animation": "7762",
+ "range_animation": "0",
+ "magic_level": "43",
"respawn_delay": "0",
- "defence_animation": "7761",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7763",
"name": "Spirit pengatrice",
- "defence_level": "1",
+ "defence_level": "43",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "61",
+ "strength_level": "43",
"id": "6883",
- "range_level": "1",
+ "range_level": "43",
"projectile": "1468",
- "attack_level": "1"
+ "attack_level": "43"
},
{
"examine": "If looks could kill... Wait",
@@ -62361,21 +62989,26 @@
"attack_level": "43"
},
{
+ "examine": "If looks could kill... Wait",
"start_gfx": "1467",
"combat_style": "2",
"melee_animation": "7762",
+ "range_animation": "0",
+ "magic_level": "43",
"respawn_delay": "0",
- "defence_animation": "7761",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7763",
"name": "Spirit coraxatrice",
- "defence_level": "1",
+ "defence_level": "43",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "61",
+ "strength_level": "43",
"id": "6885",
- "range_level": "1",
+ "range_level": "43",
"projectile": "1468",
- "attack_level": "1"
+ "attack_level": "43"
},
{
"examine": "If looks could kill... Wait",
@@ -62400,21 +63033,26 @@
"attack_level": "43"
},
{
+ "examine": "If looks could kill... Wait",
"start_gfx": "1467",
"combat_style": "2",
"melee_animation": "7762",
+ "range_animation": "0",
+ "magic_level": "43",
"respawn_delay": "0",
- "defence_animation": "7761",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7763",
"name": "Spirit vulatrice",
- "defence_level": "1",
+ "defence_level": "43",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "61",
+ "strength_level": "43",
"id": "6887",
- "range_level": "1",
+ "range_level": "43",
"projectile": "1468",
- "attack_level": "1"
+ "attack_level": "43"
},
{
"examine": "If looks could kill... Wait",
@@ -62439,20 +63077,23 @@
"attack_level": "43"
},
{
- "examine": "The only creature with a mouth big enough to hold a cannonball.",
+ "examine": "The only creature with a mouth big enough to fit a cannon ball into.",
"melee_animation": "7260",
+ "range_animation": "0",
"magic_level": "55",
"respawn_delay": "0",
- "defence_animation": "7257",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7256",
"name": "Barker toad",
- "defence_level": "1",
+ "defence_level": "55",
"safespot": null,
- "lifepoints": "10",
+ "lifepoints": "94",
"strength_level": "55",
"id": "6889",
"range_level": "55",
- "attack_level": "1"
+ "attack_level": "55"
},
{
"examine": "The only creature with a mouth big enough to fit a cannon ball into.",
@@ -62716,6 +63357,7 @@
"combat_style": "2",
"melee_animation": "8304",
"attack_speed": "5",
+ "magic_level": "28",
"respawn_delay": "0",
"defence_animation": "8306",
"death_animation": "8305",
@@ -63064,18 +63706,23 @@
"attack_level": "28"
},
{
+ "examine": "On Gielinor",
+ "melee_animation": "8569",
+ "range_animation": "0",
+ "magic_level": "50",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "8570",
"name": "Spirit jelly",
- "defence_level": "1",
+ "defence_level": "50",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "8569",
- "strength_level": "1",
+ "lifepoints": "78",
+ "strength_level": "50",
"id": "6992",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "8571"
+ "range_level": "50",
+ "attack_level": "50"
},
{
"examine": "On Gielinor",
@@ -63097,19 +63744,24 @@
"attack_level": "50"
},
{
+ "examine": "Hail to the Queen",
"combat_style": "1",
- "melee_animation": "8519",
+ "melee_animation": "6223",
+ "range_animation": "0",
+ "magic_level": "25",
"respawn_delay": "0",
- "defence_animation": "8518",
- "death_animation": "8517",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "6228",
"name": "Spirit kalphite",
- "defence_level": "1",
+ "defence_level": "25",
"safespot": null,
- "lifepoints": "77",
- "strength_level": "1",
+ "lifepoints": "35",
+ "strength_level": "25",
"id": "6994",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "25",
+ "attack_level": "25"
},
{
"examine": "Hail to the Queen",
@@ -64874,7 +65526,7 @@
"attack_level": "1"
},
{
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8222",
"magic_level": "70",
"respawn_delay": "0",
@@ -64892,7 +65544,7 @@
},
{
"examine": "Do you hear duelling banjos?",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "8222",
"range_animation": "0",
"magic_level": "65",
@@ -64952,6 +65604,24 @@
"range_level": "25",
"attack_level": "28"
},
+ {
+ "examine": "It spins.",
+ "melee_animation": "8172",
+ "range_animation": "0",
+ "magic_level": "34",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "8176",
+ "name": "Void spinner",
+ "defence_level": "34",
+ "safespot": null,
+ "lifepoints": "48",
+ "strength_level": "34",
+ "id": "7333",
+ "range_level": "34",
+ "attack_level": "34"
+ },
{
"examine": "It spins.",
"melee_animation": "8172",
@@ -64971,21 +65641,28 @@
"attack_level": "34"
},
{
+ "examine": "This one will burn right through the net!",
+ "combat_style": "1",
+ "melee_animation": "7863",
+ "range_animation": "0",
+ "magic_level": "60",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7864",
"name": "Forge regent",
- "defence_level": "1",
+ "defence_level": "60",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "7863",
- "strength_level": "1",
+ "lifepoints": "108",
+ "strength_level": "60",
"id": "7335",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7865"
+ "range_level": "60",
+ "attack_level": "60"
},
{
"examine": "This one will burn right through the net!",
+ "combat_style": "1",
"melee_animation": "7863",
"range_animation": "0",
"magic_level": "60",
@@ -65004,18 +65681,23 @@
"attack_level": "60"
},
{
+ "examine": "Fast cat is fast.",
+ "melee_animation": "5228",
+ "range_animation": "0",
+ "magic_level": "50",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "5230",
"name": "Spirit larupia",
- "defence_level": "1",
+ "defence_level": "50",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "5228",
- "strength_level": "1",
+ "lifepoints": "81",
+ "strength_level": "50",
"id": "7337",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "5227"
+ "range_level": "50",
+ "attack_level": "50"
},
{
"examine": "Fast cat is fast.",
@@ -65038,6 +65720,7 @@
},
{
"examine": "It'll kill your enemies, and makes a great cup of tea.",
+ "combat_style": "1",
"melee_animation": "7879",
"range_animation": "422",
"magic_level": "70",
@@ -65059,6 +65742,7 @@
},
{
"examine": "It'll kill your enemies, and makes a great cup of tea.",
+ "combat_style": "1",
"melee_animation": "7879",
"range_animation": "422",
"magic_level": "70",
@@ -65080,24 +65764,29 @@
"attack_level": "70"
},
{
- "combat_style": "1",
+ "examine": "Made of lava.",
+ "combat_style": "0",
"melee_animation": "7980",
+ "range_animation": "0",
+ "magic_level": "65",
"respawn_delay": "0",
- "defence_animation": "7981",
- "death_animation": "7692",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "7979",
"name": "Lava titan",
- "defence_level": "1",
+ "defence_level": "65",
"safespot": null,
- "lifepoints": "528",
- "strength_level": "1",
+ "lifepoints": "115",
+ "strength_level": "65",
"id": "7341",
"bonuses": "100,120,90,100,90,90,40,50,0,0,0,0,0,0,0",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "65",
+ "attack_level": "65"
},
{
"examine": "Made of lava.",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "7980",
"range_animation": "0",
"magic_level": "65",
@@ -65118,6 +65807,7 @@
},
{
"examine": "The King of the Titans!",
+ "combat_style": "1",
"melee_animation": "8183",
"range_animation": "8183",
"magic_level": "70",
@@ -65140,6 +65830,7 @@
},
{
"examine": "The King of the Titans!",
+ "combat_style": "1",
"melee_animation": "8183",
"range_animation": "8183",
"magic_level": "70",
@@ -65198,18 +65889,23 @@
"attack_level": "60"
},
{
+ "examine": "If a normal black cat is bad luck",
+ "melee_animation": "5989",
+ "range_animation": "0",
+ "magic_level": "60",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "5990",
"name": "Talon beast",
- "defence_level": "1",
+ "defence_level": "60",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "5989",
- "strength_level": "1",
+ "lifepoints": "110",
+ "strength_level": "60",
"id": "7347",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "5988"
+ "range_level": "60",
+ "attack_level": "60"
},
{
"examine": "If a normal black cat is bad luck",
@@ -65231,18 +65927,23 @@
"attack_level": "60"
},
{
- "death_animation": "7979",
- "name": "Abyssal titan",
- "defence_level": "1",
- "safespot": null,
- "lifepoints": "667",
+ "examine": "Big",
"melee_animation": "7693",
- "strength_level": "1",
- "id": "7349",
- "range_level": "1",
+ "range_animation": "0",
+ "magic_level": "70",
"respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7691"
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "7692",
+ "name": "Abyssal titan",
+ "defence_level": "70",
+ "safespot": null,
+ "lifepoints": "125",
+ "strength_level": "70",
+ "id": "7349",
+ "range_level": "70",
+ "attack_level": "70"
},
{
"examine": "Big",
@@ -65265,6 +65966,26 @@
},
{
"examine": "It torches.",
+ "combat_style": "2",
+ "melee_animation": "8235",
+ "range_animation": "0",
+ "magic_level": "34",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "8236",
+ "name": "Void torcher",
+ "defence_level": "34",
+ "safespot": null,
+ "lifepoints": "48",
+ "strength_level": "34",
+ "id": "7351",
+ "range_level": "34",
+ "attack_level": "34"
+ },
+ {
+ "examine": "It torches.",
+ "combat_style": "2",
"melee_animation": "8235",
"range_animation": "0",
"magic_level": "34",
@@ -65282,21 +66003,28 @@
"attack_level": "34"
},
{
+ "examine": "Looks a little...volatile.",
+ "combat_style": "1",
+ "melee_animation": "7755",
+ "range_animation": "0",
+ "magic_level": "29",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7758",
"name": "Giant chinchompa",
- "defence_level": "1",
+ "defence_level": "29",
"safespot": null,
- "lifepoints": "1",
- "melee_animation": "7755",
- "strength_level": "1",
+ "lifepoints": "41",
+ "strength_level": "29",
"id": "7353",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7753"
+ "range_level": "29",
+ "attack_level": "29"
},
{
"examine": "Looks a little...volatile.",
+ "combat_style": "1",
"melee_animation": "7755",
"range_animation": "0",
"magic_level": "29",
@@ -65316,6 +66044,7 @@
},
{
"examine": "Scorching!",
+ "combat_style": "2",
"melee_animation": "7834",
"range_animation": "7834",
"attack_speed": "5",
@@ -65339,6 +66068,7 @@
},
{
"examine": "Scorching!",
+ "combat_style": "2",
"melee_animation": "7834",
"range_animation": "7834",
"attack_speed": "5",
@@ -65453,24 +66183,29 @@
"attack_level": "40"
},
{
- "combat_style": "1",
+ "examine": "This bat burned down the belfry.",
+ "combat_style": "2",
"melee_animation": "8257",
+ "range_animation": "0",
"attack_speed": "3",
+ "magic_level": "22",
"respawn_delay": "0",
- "defence_animation": "8256",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "8258",
"name": "Spirit Tz-Kih",
- "defence_level": "1",
+ "defence_level": "22",
"safespot": null,
- "lifepoints": "62",
- "strength_level": "1",
+ "lifepoints": "31",
+ "strength_level": "22",
"id": "7361",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "22",
+ "attack_level": "22"
},
{
"examine": "This bat burned down the belfry.",
- "combat_style": "1",
+ "combat_style": "2",
"melee_animation": "8257",
"range_animation": "0",
"attack_speed": "3",
@@ -65490,19 +66225,24 @@
"attack_level": "22"
},
{
+ "examine": "Those spikes are pretty big!",
"start_gfx": "1367",
- "melee_animation": "5228",
+ "melee_animation": "5229",
+ "range_animation": "0",
+ "magic_level": "50",
"respawn_delay": "0",
- "defence_animation": "5227",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "5230",
"name": "Spirit graahk",
- "defence_level": "1",
+ "defence_level": "50",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "81",
+ "strength_level": "50",
"id": "7363",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "50",
+ "attack_level": "50"
},
{
"examine": "Those spikes are pretty big!",
@@ -65525,19 +66265,24 @@
"attack_level": "50"
},
{
+ "examine": "Those teeth are pretty big!",
"start_gfx": "1365",
"melee_animation": "5228",
+ "range_animation": "0",
+ "magic_level": "50",
"respawn_delay": "0",
- "defence_animation": "5227",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "5230",
"name": "Spirit kyatt",
- "defence_level": "1",
+ "defence_level": "50",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "81",
+ "strength_level": "50",
"id": "7365",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "50",
+ "attack_level": "50"
},
{
"examine": "Those teeth are pretty big!",
@@ -65559,6 +66304,24 @@
"range_level": "50",
"attack_level": "50"
},
+ {
+ "examine": "It shifts.",
+ "melee_animation": "8131",
+ "range_animation": "0",
+ "magic_level": "34",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "8133",
+ "name": "Void shifter",
+ "defence_level": "34",
+ "safespot": null,
+ "lifepoints": "48",
+ "strength_level": "34",
+ "id": "7367",
+ "range_level": "34",
+ "attack_level": "34"
+ },
{
"examine": "It shifts.",
"melee_animation": "8131",
@@ -65577,6 +66340,24 @@
"range_level": "34",
"attack_level": "34"
},
+ {
+ "examine": "It ravages.",
+ "melee_animation": "8086",
+ "range_animation": "0",
+ "magic_level": "34",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "8087",
+ "name": "Void ravager",
+ "defence_level": "34",
+ "safespot": null,
+ "lifepoints": "48",
+ "strength_level": "34",
+ "id": "7370",
+ "range_level": "34",
+ "attack_level": "34"
+ },
{
"examine": "It ravages.",
"melee_animation": "8086",
@@ -65615,22 +66396,27 @@
"attack_level": "60"
},
{
+ "examine": "It's like a little stomach on wings.",
+ "melee_animation": "7994",
+ "range_animation": "0",
+ "magic_level": "60",
+ "respawn_delay": "0",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
"death_animation": "7996",
"name": "Ravenous locust",
- "defence_level": "1",
+ "defence_level": "60",
"safespot": null,
- "lifepoints": "10",
- "melee_animation": "7994",
- "strength_level": "1",
+ "lifepoints": "100",
+ "strength_level": "60",
"id": "7374",
- "range_level": "1",
- "respawn_delay": "0",
- "attack_level": "1",
- "defence_animation": "7995"
+ "range_level": "60",
+ "attack_level": "60"
},
{
"examine": "He is an iron man!",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "7946",
"magic_level": "65",
"respawn_delay": "0",
@@ -65649,7 +66435,7 @@
},
{
"examine": "He is an iron man!",
- "combat_style": "1",
+ "combat_style": "0",
"melee_animation": "7946",
"combat_audio": "0,0,0",
"magic_level": "65",
@@ -65668,6 +66454,24 @@
"range_level": "65",
"attack_level": "65"
},
+ {
+ "examine": "Where did I put the marshmallows?",
+ "melee_animation": "8080",
+ "range_animation": "0",
+ "magic_level": "46",
+ "defence_animation": "0",
+ "weakness": "10",
+ "magic_animation": "0",
+ "death_animation": "8078",
+ "name": "Pyrelord",
+ "defence_level": "46",
+ "safespot": null,
+ "lifepoints": "65",
+ "strength_level": "46",
+ "id": "7377",
+ "range_level": "46",
+ "attack_level": "46"
+ },
{
"examine": "Where did I put the marshmallows?",
"melee_animation": "8080",
@@ -68113,6 +68917,28 @@
"range_level": "38",
"attack_level": "28"
},
+ {
+ "examine": "Not the best of vocalists.",
+ "combat_style": "1",
+ "melee_animation": "9449",
+ "range_animation": "9382",
+ "combat_audio": "284,286,285",
+ "magic_level": "65",
+ "respawn_delay": "60",
+ "defence_animation": "9451",
+ "weakness": "0",
+ "magic_animation": "9382",
+ "death_animation": "9450",
+ "name": "Mighty banshee",
+ "defence_level": "65",
+ "safespot": null,
+ "lifepoints": "85",
+ "strength_level": "65",
+ "id": "7786",
+ "aggressive": "true",
+ "range_level": "0",
+ "attack_level": "65"
+ },
{
"examine": "A big, scary hand! ",
"melee_animation": "1802",
@@ -71281,11 +72107,6 @@
"name": "Sir Vyvin",
"id": "605"
},
- {
- "examine": "Head of recruitment for the Temple Knights.",
- "name": "Sir Tiffy Cashien",
- "id": "2290"
- },
{
"examine": "An armourer.",
"name": "Wayne",
@@ -71324,6 +72145,7 @@
{
"examine": "A sea bird.",
"name": "Gull",
+ "water_npc": "true",
"id": "2726"
},
{
@@ -72138,9 +72960,9 @@
"id": "796"
},
{
- "examine": "The hat is a dead give away.",
"name": "Wizard Cromperty",
- "id": "2328"
+ "id": "2328",
+ "examine": "The hat is a dead give away."
},
{
"examine": "An intelligent-looking shop owner.",
@@ -72212,6 +73034,14641 @@
"name": "Balnea",
"id": "7047"
},
+ {
+ "id": "17",
+ "name": "Schoolgirl"
+ },
+ {
+ "id": "70",
+ "name": "Orc"
+ },
+ {
+ "id": "94",
+ "name": "Skeleton Mage"
+ },
+ {
+ "id": "129",
+ "name": "Skavid"
+ },
+ {
+ "id": "135",
+ "name": "Mammoth"
+ },
+ {
+ "id": "136",
+ "name": "Mounted terrorchick gnome"
+ },
+ {
+ "id": "149",
+ "name": "Gull"
+ },
+ {
+ "id": "150",
+ "name": "Gull"
+ },
+ {
+ "id": "151",
+ "name": "Fly trap"
+ },
+ {
+ "id": "152",
+ "name": "Butterfly"
+ },
+ {
+ "id": "155",
+ "name": "Butterfly"
+ },
+ {
+ "id": "156",
+ "name": "Butterfly"
+ },
+ {
+ "id": "157",
+ "name": "Butterfly"
+ },
+ {
+ "id": "165",
+ "name": "Gnome shop keeper"
+ },
+ {
+ "id": "167",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "171",
+ "name": "Brimstail"
+ },
+ {
+ "id": "177",
+ "name": "Witch"
+ },
+ {
+ "id": "195",
+ "name": "Bandit"
+ },
+ {
+ "id": "197",
+ "name": "Barbarian guard"
+ },
+ {
+ "id": "200",
+ "name": "Lord Daquarius"
+ },
+ {
+ "id": "207",
+ "name": "Lollk"
+ },
+ {
+ "id": "209",
+ "name": "Nulodion"
+ },
+ {
+ "id": "211",
+ "name": "Sir Percival"
+ },
+ {
+ "id": "213",
+ "name": "Merlin"
+ },
+ {
+ "id": "215",
+ "name": "Peasant"
+ },
+ {
+ "id": "217",
+ "name": "Crone"
+ },
+ {
+ "id": "218",
+ "name": "Galahad"
+ },
+ {
+ "id": "225",
+ "name": "Bonzo"
+ },
+ {
+ "id": "226",
+ "name": "Morris"
+ },
+ {
+ "id": "228",
+ "name": "Big Dave"
+ },
+ {
+ "id": "229",
+ "name": "Joshua"
+ },
+ {
+ "id": "232",
+ "name": "Austri"
+ },
+ {
+ "id": "234",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "235",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "236",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "239",
+ "name": "Sir Lancelot"
+ },
+ {
+ "id": "240",
+ "name": "Sir Gawain"
+ },
+ {
+ "id": "241",
+ "name": "Sir Kay"
+ },
+ {
+ "id": "242",
+ "name": "Sir Bedivere"
+ },
+ {
+ "id": "243",
+ "name": "Sir Tristram"
+ },
+ {
+ "id": "244",
+ "name": "Sir Pelleas"
+ },
+ {
+ "id": "245",
+ "name": "Sir Lucan"
+ },
+ {
+ "id": "248",
+ "name": "Morgan Le Faye"
+ },
+ {
+ "id": "249",
+ "name": "Merlin"
+ },
+ {
+ "id": "250",
+ "name": "The Lady of the Lake"
+ },
+ {
+ "id": "252",
+ "name": "Beggar"
+ },
+ {
+ "id": "260",
+ "name": "Kelvin"
+ },
+ {
+ "id": "261",
+ "name": "Joe"
+ },
+ {
+ "id": "263",
+ "name": "Hengrad"
+ },
+ {
+ "id": "276",
+ "name": "Winelda"
+ },
+ {
+ "id": "287",
+ "name": "Ernest"
+ },
+ {
+ "id": "292",
+ "name": "Guard"
+ },
+ {
+ "id": "301",
+ "name": "Twig"
+ },
+ {
+ "id": "302",
+ "name": "Hadley"
+ },
+ {
+ "id": "303",
+ "name": "Gerald"
+ },
+ {
+ "id": "304",
+ "name": "Almera"
+ },
+ {
+ "id": "305",
+ "name": "Hudon"
+ },
+ {
+ "id": "306",
+ "name": "Golrie"
+ },
+ {
+ "id": "309",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "310",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "311",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "312",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "313",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "314",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "315",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "316",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "317",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "318",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "319",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "320",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "321",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "322",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "324",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "325",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "326",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "327",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "328",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "329",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "330",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "331",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "332",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "333",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "334",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "337",
+ "name": "Da Vinci"
+ },
+ {
+ "id": "343",
+ "name": "Guidor"
+ },
+ {
+ "id": "349",
+ "name": "Kilron"
+ },
+ {
+ "id": "350",
+ "name": "Omart"
+ },
+ {
+ "id": "366",
+ "name": "Jerico"
+ },
+ {
+ "id": "379",
+ "name": "Luthas"
+ },
+ {
+ "id": "381",
+ "name": "Dwarf"
+ },
+ {
+ "id": "383",
+ "name": "Stankers"
+ },
+ {
+ "id": "399",
+ "name": "Legends guard"
+ },
+ {
+ "id": "400",
+ "name": "Radimus Erkle"
+ },
+ {
+ "id": "403",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "404",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "405",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "406",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "409",
+ "name": "Genie"
+ },
+ {
+ "id": "410",
+ "name": "Mysterious Old Man"
+ },
+ {
+ "id": "431",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "433",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "434",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "436",
+ "name": "Fallen Man"
+ },
+ {
+ "id": "463",
+ "name": "Murphy"
+ },
+ {
+ "id": "464",
+ "name": "Murphy"
+ },
+ {
+ "id": "465",
+ "name": "Murphy"
+ },
+ {
+ "id": "466",
+ "name": "Murphy"
+ },
+ {
+ "id": "467",
+ "name": "Shark"
+ },
+ {
+ "id": "468",
+ "name": "Shark"
+ },
+ {
+ "id": "471",
+ "name": "Bolkoy"
+ },
+ {
+ "id": "472",
+ "name": "Remsai"
+ },
+ {
+ "id": "473",
+ "name": "Khazard trooper"
+ },
+ {
+ "id": "480",
+ "name": "Gnome troop"
+ },
+ {
+ "id": "484",
+ "name": "Local Gnome"
+ },
+ {
+ "id": "486",
+ "name": "Kalron"
+ },
+ {
+ "id": "488",
+ "name": "Observatory professor"
+ },
+ {
+ "id": "510",
+ "name": "Hajedy"
+ },
+ {
+ "id": "511",
+ "name": "Vigroy"
+ },
+ {
+ "id": "513",
+ "name": "Yohnus"
+ },
+ {
+ "id": "514",
+ "name": "Seravel"
+ },
+ {
+ "id": "536",
+ "name": "Valaine"
+ },
+ {
+ "id": "537",
+ "name": "Scavvo"
+ },
+ {
+ "id": "553",
+ "name": "Aubury"
+ },
+ {
+ "id": "560",
+ "name": "Jiminua"
+ },
+ {
+ "id": "563",
+ "name": "Arhein"
+ },
+ {
+ "id": "565",
+ "name": "Lunderwin"
+ },
+ {
+ "id": "568",
+ "name": "Zambo"
+ },
+ {
+ "id": "575",
+ "name": "Hickton"
+ },
+ {
+ "id": "576",
+ "name": "Harry"
+ },
+ {
+ "id": "578",
+ "name": "Frincos"
+ },
+ {
+ "id": "584",
+ "name": "Herquin"
+ },
+ {
+ "id": "585",
+ "name": "Rommik"
+ },
+ {
+ "id": "588",
+ "name": "Davon"
+ },
+ {
+ "id": "589",
+ "name": "Zenesha"
+ },
+ {
+ "id": "590",
+ "name": "Aemad"
+ },
+ {
+ "id": "591",
+ "name": "Kortan"
+ },
+ {
+ "id": "592",
+ "name": "Roachey"
+ },
+ {
+ "id": "593",
+ "name": "Frenita"
+ },
+ {
+ "id": "594",
+ "name": "Nurmof"
+ },
+ {
+ "id": "597",
+ "name": "Noterazzo"
+ },
+ {
+ "id": "600",
+ "name": "Hudo"
+ },
+ {
+ "id": "601",
+ "name": "Rometti"
+ },
+ {
+ "id": "602",
+ "name": "Gulluck"
+ },
+ {
+ "id": "603",
+ "name": "Heckel Funch"
+ },
+ {
+ "id": "607",
+ "name": "Gunnjorn"
+ },
+ {
+ "id": "608",
+ "name": "Sir Amik Varze"
+ },
+ {
+ "id": "612",
+ "name": "Greldo"
+ },
+ {
+ "id": "622",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "623",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "624",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "625",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "626",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "627",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "628",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "629",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "630",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "631",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "632",
+ "name": "Gnome baller"
+ },
+ {
+ "id": "634",
+ "name": "Gnome winger"
+ },
+ {
+ "id": "636",
+ "name": "Cheerleader"
+ },
+ {
+ "id": "642",
+ "name": "Katrine"
+ },
+ {
+ "id": "644",
+ "name": "Straven"
+ },
+ {
+ "id": "647",
+ "name": "King Roald"
+ },
+ {
+ "id": "653",
+ "name": "Fairy Queen"
+ },
+ {
+ "id": "654",
+ "name": "Shamus"
+ },
+ {
+ "id": "661",
+ "name": "Megan"
+ },
+ {
+ "id": "662",
+ "name": "Lucy"
+ },
+ {
+ "id": "664",
+ "name": "Boot"
+ },
+ {
+ "id": "666",
+ "name": "Caleb"
+ },
+ {
+ "id": "668",
+ "name": "Johnathon"
+ },
+ {
+ "id": "669",
+ "name": "Hazelmere"
+ },
+ {
+ "id": "671",
+ "name": "Glough"
+ },
+ {
+ "id": "672",
+ "name": "Anita"
+ },
+ {
+ "id": "673",
+ "name": "Charlie"
+ },
+ {
+ "id": "675",
+ "name": "Shipyard worker"
+ },
+ {
+ "id": "676",
+ "name": "Femi"
+ },
+ {
+ "id": "685",
+ "name": "Tower Advisor"
+ },
+ {
+ "id": "686",
+ "name": "Tower Advisor"
+ },
+ {
+ "id": "687",
+ "name": "Tower Advisor"
+ },
+ {
+ "id": "693",
+ "name": "Competition Judge"
+ },
+ {
+ "id": "695",
+ "name": "Bailey"
+ },
+ {
+ "id": "697",
+ "name": "Holgart"
+ },
+ {
+ "id": "699",
+ "name": "Holgart"
+ },
+ {
+ "id": "700",
+ "name": "Holgart"
+ },
+ {
+ "id": "701",
+ "name": "Kent"
+ },
+ {
+ "id": "702",
+ "name": "Fisherman"
+ },
+ {
+ "id": "703",
+ "name": "Fisherman"
+ },
+ {
+ "id": "704",
+ "name": "Fisherman"
+ },
+ {
+ "id": "710",
+ "name": "Alrena"
+ },
+ {
+ "id": "711",
+ "name": "Bravek"
+ },
+ {
+ "id": "712",
+ "name": "Carla"
+ },
+ {
+ "id": "721",
+ "name": "Ted Rehnison"
+ },
+ {
+ "id": "722",
+ "name": "Martha Rehnison"
+ },
+ {
+ "id": "723",
+ "name": "Billy Rehnison"
+ },
+ {
+ "id": "724",
+ "name": "Milli Rehnison"
+ },
+ {
+ "id": "725",
+ "name": "Jethick"
+ },
+ {
+ "id": "740",
+ "name": "Trufitus"
+ },
+ {
+ "id": "746",
+ "name": "Oracle"
+ },
+ {
+ "id": "748",
+ "name": "Angry barbarian spirit"
+ },
+ {
+ "id": "754",
+ "name": "Peaceful barbarian spirit"
+ },
+ {
+ "id": "759",
+ "name": "Kittens"
+ },
+ {
+ "id": "761",
+ "name": "Kitten"
+ },
+ {
+ "id": "762",
+ "name": "Kitten"
+ },
+ {
+ "id": "763",
+ "name": "Kitten"
+ },
+ {
+ "id": "764",
+ "name": "Kitten"
+ },
+ {
+ "id": "765",
+ "name": "Kitten"
+ },
+ {
+ "id": "766",
+ "name": "Kitten"
+ },
+ {
+ "id": "768",
+ "name": "Cat"
+ },
+ {
+ "id": "769",
+ "name": "Cat"
+ },
+ {
+ "id": "770",
+ "name": "Cat"
+ },
+ {
+ "id": "771",
+ "name": "Cat"
+ },
+ {
+ "id": "772",
+ "name": "Cat"
+ },
+ {
+ "id": "773",
+ "name": "Cat"
+ },
+ {
+ "id": "774",
+ "name": "Overgrown cat"
+ },
+ {
+ "id": "775",
+ "name": "Overgrown cat"
+ },
+ {
+ "id": "776",
+ "name": "Overgrown cat"
+ },
+ {
+ "id": "777",
+ "name": "Overgrown cat"
+ },
+ {
+ "id": "779",
+ "name": "Overgrown cat"
+ },
+ {
+ "id": "780",
+ "name": "Gertrude"
+ },
+ {
+ "id": "782",
+ "name": "Philop"
+ },
+ {
+ "id": "784",
+ "name": "Kanel"
+ },
+ {
+ "id": "788",
+ "name": "Garv"
+ },
+ {
+ "id": "789",
+ "name": "Grubor"
+ },
+ {
+ "id": "791",
+ "name": "Seth"
+ },
+ {
+ "id": "792",
+ "name": "Grip"
+ },
+ {
+ "id": "797",
+ "name": "Helemos"
+ },
+ {
+ "id": "807",
+ "name": "Pierre"
+ },
+ {
+ "id": "808",
+ "name": "Hobbes"
+ },
+ {
+ "id": "809",
+ "name": "Louisa"
+ },
+ {
+ "id": "810",
+ "name": "Mary"
+ },
+ {
+ "id": "811",
+ "name": "Stanford"
+ },
+ {
+ "id": "814",
+ "name": "Anna"
+ },
+ {
+ "id": "815",
+ "name": "Bob"
+ },
+ {
+ "id": "816",
+ "name": "Carol"
+ },
+ {
+ "id": "817",
+ "name": "David"
+ },
+ {
+ "id": "818",
+ "name": "Elizabeth"
+ },
+ {
+ "id": "819",
+ "name": "Frank"
+ },
+ {
+ "id": "822",
+ "name": "Ana"
+ },
+ {
+ "id": "823",
+ "name": "Ana"
+ },
+ {
+ "id": "824",
+ "name": "Female slave"
+ },
+ {
+ "id": "826",
+ "name": "Escaping slave"
+ },
+ {
+ "id": "828",
+ "name": "Shanty Claws"
+ },
+ {
+ "id": "829",
+ "name": "Mercenary Captain"
+ },
+ {
+ "id": "832",
+ "name": "Al Shabim"
+ },
+ {
+ "id": "844",
+ "name": "Horacio"
+ },
+ {
+ "id": "846",
+ "name": "Kangai Mau"
+ },
+ {
+ "id": "848",
+ "name": "Blurberry"
+ },
+ {
+ "id": "849",
+ "name": "Barman"
+ },
+ {
+ "id": "853",
+ "name": "Og"
+ },
+ {
+ "id": "854",
+ "name": "Grew"
+ },
+ {
+ "id": "855",
+ "name": "Toban"
+ },
+ {
+ "id": "857",
+ "name": "Ogre guard"
+ },
+ {
+ "id": "860",
+ "name": "Ogre guard"
+ },
+ {
+ "id": "861",
+ "name": "Ogre guard"
+ },
+ {
+ "id": "865",
+ "name": "Skavid"
+ },
+ {
+ "id": "866",
+ "name": "Skavid"
+ },
+ {
+ "id": "867",
+ "name": "Skavid"
+ },
+ {
+ "id": "868",
+ "name": "Skavid"
+ },
+ {
+ "id": "869",
+ "name": "Skavid"
+ },
+ {
+ "id": "871",
+ "name": "Watchtower Wizard"
+ },
+ {
+ "id": "876",
+ "name": "Ogre trader"
+ },
+ {
+ "id": "880",
+ "name": "Weakened Delrith"
+ },
+ {
+ "id": "886",
+ "name": "Claus the chef"
+ },
+ {
+ "id": "888",
+ "name": "Philipe Carnillean"
+ },
+ {
+ "id": "889",
+ "name": "Henryeta Carnillean"
+ },
+ {
+ "id": "890",
+ "name": "Butler Jones"
+ },
+ {
+ "id": "891",
+ "name": "Alomone"
+ },
+ {
+ "id": "892",
+ "name": "Hazeel"
+ },
+ {
+ "id": "896",
+ "name": "Nora T. Hagg"
+ },
+ {
+ "id": "901",
+ "name": "Mouse"
+ },
+ {
+ "id": "902",
+ "name": "Gundai"
+ },
+ {
+ "id": "903",
+ "name": "Lundail"
+ },
+ {
+ "id": "906",
+ "name": "Kolodion"
+ },
+ {
+ "id": "918",
+ "name": "Ned"
+ },
+ {
+ "id": "921",
+ "name": "Prince Ali"
+ },
+ {
+ "id": "926",
+ "name": "Border Guard"
+ },
+ {
+ "id": "927",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "928",
+ "name": "Gujuo"
+ },
+ {
+ "id": "929",
+ "name": "Ungadulu"
+ },
+ {
+ "id": "930",
+ "name": "Ungadulu"
+ },
+ {
+ "id": "933",
+ "name": "Siegfried Erkle"
+ },
+ {
+ "id": "935",
+ "name": "Viyeldi"
+ },
+ {
+ "id": "936",
+ "name": "San Tojalon"
+ },
+ {
+ "id": "937",
+ "name": "Irvig Senay"
+ },
+ {
+ "id": "940",
+ "name": "Echned Zekin"
+ },
+ {
+ "id": "952",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "953",
+ "name": "Banker"
+ },
+ {
+ "id": "992",
+ "name": "Kardia"
+ },
+ {
+ "id": "994",
+ "name": "Niloof"
+ },
+ {
+ "id": "1003",
+ "name": "Lord Iban"
+ },
+ {
+ "id": "1008",
+ "name": "Hamid"
+ },
+ {
+ "id": "1011",
+ "name": "Fycie"
+ },
+ {
+ "id": "1012",
+ "name": "Bugs"
+ },
+ {
+ "id": "1014",
+ "name": "Bloated Toad"
+ },
+ {
+ "id": "1016",
+ "name": "Chompy bird"
+ },
+ {
+ "id": "1024",
+ "name": "Baby impling"
+ },
+ {
+ "id": "1036",
+ "name": "Banker"
+ },
+ {
+ "id": "1038",
+ "name": "Rufus"
+ },
+ {
+ "id": "1039",
+ "name": "Barker"
+ },
+ {
+ "id": "1040",
+ "name": "Fidelio"
+ },
+ {
+ "id": "1041",
+ "name": "Sbott"
+ },
+ {
+ "id": "1042",
+ "name": "Roavar"
+ },
+ {
+ "id": "1043",
+ "name": "Will o' the wisp"
+ },
+ {
+ "id": "1047",
+ "name": "Drezel"
+ },
+ {
+ "id": "1056",
+ "name": "Mime"
+ },
+ {
+ "id": "1070",
+ "name": "Saba"
+ },
+ {
+ "id": "1071",
+ "name": "Tenzing"
+ },
+ {
+ "id": "1075",
+ "name": "Archer"
+ },
+ {
+ "id": "1091",
+ "name": "Bob"
+ },
+ {
+ "id": "1093",
+ "name": "Billy"
+ },
+ {
+ "id": "1094",
+ "name": "Mountain goat"
+ },
+ {
+ "id": "1113",
+ "name": "Eadgar"
+ },
+ {
+ "id": "1114",
+ "name": "Godric"
+ },
+ {
+ "id": "1159",
+ "name": "Kalphite Queen"
+ },
+ {
+ "id": "1162",
+ "name": "Timfraku"
+ },
+ {
+ "id": "1163",
+ "name": "Tiadeche"
+ },
+ {
+ "id": "1164",
+ "name": "Tiadeche"
+ },
+ {
+ "id": "1165",
+ "name": "Tinsay"
+ },
+ {
+ "id": "1166",
+ "name": "Tinsay"
+ },
+ {
+ "id": "1167",
+ "name": "Tamayu"
+ },
+ {
+ "id": "1168",
+ "name": "Tamayu"
+ },
+ {
+ "id": "1169",
+ "name": "Tamayu"
+ },
+ {
+ "id": "1170",
+ "name": "Tamayu"
+ },
+ {
+ "id": "1171",
+ "name": "Lubufu"
+ },
+ {
+ "id": "1173",
+ "name": "The Shaikahan"
+ },
+ {
+ "id": "1174",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1175",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1177",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1178",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1180",
+ "name": "Cormorant"
+ },
+ {
+ "id": "1181",
+ "name": "Pelican"
+ },
+ {
+ "id": "1182",
+ "name": "Lord Iorwerth"
+ },
+ {
+ "id": "1186",
+ "name": "Idris"
+ },
+ {
+ "id": "1187",
+ "name": "Essyllt"
+ },
+ {
+ "id": "1188",
+ "name": "Morvran"
+ },
+ {
+ "id": "1189",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1190",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1191",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1202",
+ "name": "Arianwyn"
+ },
+ {
+ "id": "1205",
+ "name": "Tyras guard"
+ },
+ {
+ "id": "1207",
+ "name": "Quartermaster"
+ },
+ {
+ "id": "1221",
+ "name": "Spider"
+ },
+ {
+ "id": "1222",
+ "name": "Mist"
+ },
+ {
+ "id": "1224",
+ "name": "Vampyric hound"
+ },
+ {
+ "id": "1226",
+ "name": "Tree"
+ },
+ {
+ "id": "1236",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1237",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1238",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1242",
+ "name": "Shade Spirit"
+ },
+ {
+ "id": "1251",
+ "name": "Afflicted(Ulsquire)"
+ },
+ {
+ "id": "1252",
+ "name": "Ulsquire Shauncy"
+ },
+ {
+ "id": "1253",
+ "name": "Afflicted(Razmire)"
+ },
+ {
+ "id": "1254",
+ "name": "Razmire Keelgan"
+ },
+ {
+ "id": "1255",
+ "name": "Mort'ton Local"
+ },
+ {
+ "id": "1256",
+ "name": "Mort'ton Local"
+ },
+ {
+ "id": "1259",
+ "name": "Mort'ton local"
+ },
+ {
+ "id": "1260",
+ "name": "Mort'ton local"
+ },
+ {
+ "id": "1280",
+ "name": "Butterfly"
+ },
+ {
+ "id": "1284",
+ "name": "Bjorn"
+ },
+ {
+ "id": "1285",
+ "name": "Eldgrim"
+ },
+ {
+ "id": "1295",
+ "name": "Askeladden"
+ },
+ {
+ "id": "1299",
+ "name": "Town Guard"
+ },
+ {
+ "id": "1310",
+ "name": "Freygerd"
+ },
+ {
+ "id": "1311",
+ "name": "Lensa"
+ },
+ {
+ "id": "1312",
+ "name": "Jennella"
+ },
+ {
+ "id": "1322",
+ "name": "Gull"
+ },
+ {
+ "id": "1323",
+ "name": "Gull"
+ },
+ {
+ "id": "1324",
+ "name": "Gull"
+ },
+ {
+ "id": "1325",
+ "name": "Gull"
+ },
+ {
+ "id": "1331",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1332",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1333",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1334",
+ "name": "Jossik"
+ },
+ {
+ "id": "1335",
+ "name": "Jossik"
+ },
+ {
+ "id": "1336",
+ "name": "Larrissa"
+ },
+ {
+ "id": "1337",
+ "name": "Larrissa"
+ },
+ {
+ "id": "1348",
+ "name": "Dagannoth mother"
+ },
+ {
+ "id": "1349",
+ "name": "Dagannoth mother"
+ },
+ {
+ "id": "1350",
+ "name": "Dagannoth mother"
+ },
+ {
+ "id": "1359",
+ "name": "Queen Sigrid"
+ },
+ {
+ "id": "1361",
+ "name": "Arnor"
+ },
+ {
+ "id": "1362",
+ "name": "Haming"
+ },
+ {
+ "id": "1363",
+ "name": "Moldof"
+ },
+ {
+ "id": "1364",
+ "name": "Helga"
+ },
+ {
+ "id": "1365",
+ "name": "Matilda"
+ },
+ {
+ "id": "1366",
+ "name": "Ashild"
+ },
+ {
+ "id": "1371",
+ "name": "Prince Brand"
+ },
+ {
+ "id": "1372",
+ "name": "Princess Astrid"
+ },
+ {
+ "id": "1373",
+ "name": "King Vargas"
+ },
+ {
+ "id": "1375",
+ "name": "Advisor Ghrim"
+ },
+ {
+ "id": "1383",
+ "name": "Halla"
+ },
+ {
+ "id": "1384",
+ "name": "Yrsa"
+ },
+ {
+ "id": "1387",
+ "name": "Thora"
+ },
+ {
+ "id": "1399",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1400",
+ "name": "Gull"
+ },
+ {
+ "id": "1405",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1406",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "1407",
+ "name": "Daero"
+ },
+ {
+ "id": "1408",
+ "name": "Waydar"
+ },
+ {
+ "id": "1409",
+ "name": "Waydar"
+ },
+ {
+ "id": "1410",
+ "name": "Waydar"
+ },
+ {
+ "id": "1411",
+ "name": "Garkor"
+ },
+ {
+ "id": "1412",
+ "name": "Garkor"
+ },
+ {
+ "id": "1413",
+ "name": "Lumo"
+ },
+ {
+ "id": "1414",
+ "name": "Lumo"
+ },
+ {
+ "id": "1415",
+ "name": "Bunkdo"
+ },
+ {
+ "id": "1416",
+ "name": "Bunkdo"
+ },
+ {
+ "id": "1417",
+ "name": "Carado"
+ },
+ {
+ "id": "1418",
+ "name": "Carado"
+ },
+ {
+ "id": "1420",
+ "name": "Karam"
+ },
+ {
+ "id": "1421",
+ "name": "Karam"
+ },
+ {
+ "id": "1422",
+ "name": "Karam"
+ },
+ {
+ "id": "1423",
+ "name": "Bunkwicket"
+ },
+ {
+ "id": "1424",
+ "name": "Waymottin"
+ },
+ {
+ "id": "1425",
+ "name": "Zooknock"
+ },
+ {
+ "id": "1426",
+ "name": "Zooknock"
+ },
+ {
+ "id": "1428",
+ "name": "G.L.O. Caranock"
+ },
+ {
+ "id": "1429",
+ "name": "Dugopul"
+ },
+ {
+ "id": "1430",
+ "name": "Salenab"
+ },
+ {
+ "id": "1431",
+ "name": "Trefaji"
+ },
+ {
+ "id": "1432",
+ "name": "Aberab"
+ },
+ {
+ "id": "1433",
+ "name": "Solihib"
+ },
+ {
+ "id": "1434",
+ "name": "Daga"
+ },
+ {
+ "id": "1435",
+ "name": "Tutab"
+ },
+ {
+ "id": "1436",
+ "name": "Ifaba"
+ },
+ {
+ "id": "1437",
+ "name": "Hamab"
+ },
+ {
+ "id": "1438",
+ "name": "Hafuba"
+ },
+ {
+ "id": "1439",
+ "name": "Denadu"
+ },
+ {
+ "id": "1440",
+ "name": "Lofu"
+ },
+ {
+ "id": "1441",
+ "name": "Kruk"
+ },
+ {
+ "id": "1448",
+ "name": "Awowogei"
+ },
+ {
+ "id": "1449",
+ "name": "Uwogo"
+ },
+ {
+ "id": "1450",
+ "name": "Muruwoi"
+ },
+ {
+ "id": "1462",
+ "name": "Elder Guard"
+ },
+ {
+ "id": "1468",
+ "name": "Bonzara"
+ },
+ {
+ "id": "1470",
+ "name": "Foreman"
+ },
+ {
+ "id": "1474",
+ "name": "Spider"
+ },
+ {
+ "id": "1482",
+ "name": "Gorilla"
+ },
+ {
+ "id": "1488",
+ "name": "Dummy"
+ },
+ {
+ "id": "1489",
+ "name": "Dummy"
+ },
+ {
+ "id": "1490",
+ "name": "Dummy"
+ },
+ {
+ "id": "1491",
+ "name": "Dummy"
+ },
+ {
+ "id": "1492",
+ "name": "Dummy"
+ },
+ {
+ "id": "1493",
+ "name": "Dummy"
+ },
+ {
+ "id": "1494",
+ "name": "Dummy"
+ },
+ {
+ "id": "1495",
+ "name": "Dummy"
+ },
+ {
+ "id": "1496",
+ "name": "Dummy"
+ },
+ {
+ "id": "1497",
+ "name": "Dummy"
+ },
+ {
+ "id": "1498",
+ "name": "Dummy"
+ },
+ {
+ "id": "1499",
+ "name": "Dummy"
+ },
+ {
+ "id": "1500",
+ "name": "Dummy"
+ },
+ {
+ "id": "1501",
+ "name": "Dummy"
+ },
+ {
+ "id": "1502",
+ "name": "Dummy"
+ },
+ {
+ "id": "1503",
+ "name": "Dummy"
+ },
+ {
+ "id": "1504",
+ "name": "Dummy"
+ },
+ {
+ "id": "1505",
+ "name": "Dummy"
+ },
+ {
+ "id": "1506",
+ "name": "Dummy"
+ },
+ {
+ "id": "1507",
+ "name": "Dummy"
+ },
+ {
+ "id": "1508",
+ "name": "Forester"
+ },
+ {
+ "id": "1509",
+ "name": "Woman-at-arms"
+ },
+ {
+ "id": "1510",
+ "name": "Apprentice"
+ },
+ {
+ "id": "1511",
+ "name": "Ranger"
+ },
+ {
+ "id": "1512",
+ "name": "Adventurer"
+ },
+ {
+ "id": "1513",
+ "name": "Mage"
+ },
+ {
+ "id": "1515",
+ "name": "Nail beast"
+ },
+ {
+ "id": "1522",
+ "name": "Nail beast"
+ },
+ {
+ "id": "1523",
+ "name": "Nail beast"
+ },
+ {
+ "id": "1525",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "1526",
+ "name": "Lanthus"
+ },
+ {
+ "id": "1527",
+ "name": "Mine cart"
+ },
+ {
+ "id": "1529",
+ "name": "Sheep"
+ },
+ {
+ "id": "1530",
+ "name": "Rabbit"
+ },
+ {
+ "id": "1542",
+ "name": "Loading crane"
+ },
+ {
+ "id": "1543",
+ "name": "Innocent-looking key"
+ },
+ {
+ "id": "1544",
+ "name": "Mine cart"
+ },
+ {
+ "id": "1545",
+ "name": "Mine cart"
+ },
+ {
+ "id": "1546",
+ "name": "Mine cart"
+ },
+ {
+ "id": "1547",
+ "name": "Mine cart"
+ },
+ {
+ "id": "1548",
+ "name": "Mine cart"
+ },
+ {
+ "id": "1552",
+ "name": "Santa"
+ },
+ {
+ "id": "1554",
+ "name": "Aga"
+ },
+ {
+ "id": "1555",
+ "name": "Arrg"
+ },
+ {
+ "id": "1559",
+ "name": "Ice wolf"
+ },
+ {
+ "id": "1568",
+ "name": "Curpile Fyod"
+ },
+ {
+ "id": "1569",
+ "name": "Veliaf Hurtz"
+ },
+ {
+ "id": "1570",
+ "name": "Sani Piliu"
+ },
+ {
+ "id": "1571",
+ "name": "Harold Evans"
+ },
+ {
+ "id": "1572",
+ "name": "Radigad Ponfit"
+ },
+ {
+ "id": "1573",
+ "name": "Polmafi Ferdygris"
+ },
+ {
+ "id": "1574",
+ "name": "Ivan Strom"
+ },
+ {
+ "id": "1575",
+ "name": "Skeleton Hellhound"
+ },
+ {
+ "id": "1576",
+ "name": "Stranger"
+ },
+ {
+ "id": "1577",
+ "name": "Vanstrom Klause"
+ },
+ {
+ "id": "1578",
+ "name": "Mist"
+ },
+ {
+ "id": "1579",
+ "name": "Vanstrom Klause"
+ },
+ {
+ "id": "1580",
+ "name": "Vanstrom Klause"
+ },
+ {
+ "id": "1581",
+ "name": "Vanstrom Klause"
+ },
+ {
+ "id": "1595",
+ "name": "Saniboch"
+ },
+ {
+ "id": "1596",
+ "name": "Vannaka"
+ },
+ {
+ "id": "1599",
+ "name": "Cave crawler"
+ },
+ {
+ "id": "1659",
+ "name": "Skullball"
+ },
+ {
+ "id": "1664",
+ "name": "Agility Trainer"
+ },
+ {
+ "id": "1666",
+ "name": "Dr Fenkenstrain"
+ },
+ {
+ "id": "1671",
+ "name": "Fenkenstrain's Monster"
+ },
+ {
+ "id": "1674",
+ "name": "Lord Rologarth"
+ },
+ {
+ "id": "1679",
+ "name": "Eluned"
+ },
+ {
+ "id": "1680",
+ "name": "Islwyn"
+ },
+ {
+ "id": "1682",
+ "name": "Golrie"
+ },
+ {
+ "id": "1683",
+ "name": "Velorina"
+ },
+ {
+ "id": "1685",
+ "name": "Gravingas"
+ },
+ {
+ "id": "1687",
+ "name": "Ak-Haranu"
+ },
+ {
+ "id": "1689",
+ "name": "Undead cow"
+ },
+ {
+ "id": "1694",
+ "name": "Robin"
+ },
+ {
+ "id": "1709",
+ "name": "Johanhus Ulsbrecht"
+ },
+ {
+ "id": "1719",
+ "name": "Tree"
+ },
+ {
+ "id": "1720",
+ "name": "Tree"
+ },
+ {
+ "id": "1721",
+ "name": "Tree"
+ },
+ {
+ "id": "1722",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1723",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1724",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1725",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1726",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1727",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1728",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1729",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1730",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1731",
+ "name": "Dead tree"
+ },
+ {
+ "id": "1732",
+ "name": "Dramen tree"
+ },
+ {
+ "id": "1734",
+ "name": "Magic tree"
+ },
+ {
+ "id": "1735",
+ "name": "Maple tree"
+ },
+ {
+ "id": "1736",
+ "name": "Willow"
+ },
+ {
+ "id": "1737",
+ "name": "Willow"
+ },
+ {
+ "id": "1738",
+ "name": "Willow"
+ },
+ {
+ "id": "1749",
+ "name": "Hollow tree"
+ },
+ {
+ "id": "1750",
+ "name": "Hollow tree"
+ },
+ {
+ "id": "1753",
+ "name": "Mounted terrorbird gnome"
+ },
+ {
+ "id": "1756",
+ "name": "Crow"
+ },
+ {
+ "id": "1762",
+ "name": "Sheep"
+ },
+ {
+ "id": "1764",
+ "name": "Sheep"
+ },
+ {
+ "id": "1765",
+ "name": "Sheep"
+ },
+ {
+ "id": "1777",
+ "name": "Ilfeen"
+ },
+ {
+ "id": "1778",
+ "name": "William"
+ },
+ {
+ "id": "1779",
+ "name": "Ian"
+ },
+ {
+ "id": "1780",
+ "name": "Larry"
+ },
+ {
+ "id": "1781",
+ "name": "Darren"
+ },
+ {
+ "id": "1782",
+ "name": "Edward"
+ },
+ {
+ "id": "1784",
+ "name": "Neil"
+ },
+ {
+ "id": "1786",
+ "name": "Simon"
+ },
+ {
+ "id": "1787",
+ "name": "Sam"
+ },
+ {
+ "id": "1788",
+ "name": "Lumdo"
+ },
+ {
+ "id": "1789",
+ "name": "Bunkwicket"
+ },
+ {
+ "id": "1790",
+ "name": "Waymottin"
+ },
+ {
+ "id": "1791",
+ "name": "Jungle Tree"
+ },
+ {
+ "id": "1792",
+ "name": "Jungle Tree"
+ },
+ {
+ "id": "1793",
+ "name": "Tassie Slipcast"
+ },
+ {
+ "id": "1798",
+ "name": "Phantuwti Fanstuwi Farsight"
+ },
+ {
+ "id": "1799",
+ "name": "Tindel Marchant"
+ },
+ {
+ "id": "1800",
+ "name": "Gnormadium Avlafrim"
+ },
+ {
+ "id": "1801",
+ "name": "Petra Fiyed"
+ },
+ {
+ "id": "1804",
+ "name": "Slagilith"
+ },
+ {
+ "id": "1808",
+ "name": "Ragnar"
+ },
+ {
+ "id": "1809",
+ "name": "Svidi"
+ },
+ {
+ "id": "1810",
+ "name": "Jokul"
+ },
+ {
+ "id": "1811",
+ "name": "The Kendal"
+ },
+ {
+ "id": "1821",
+ "name": "Bald Headed Eagle"
+ },
+ {
+ "id": "1826",
+ "name": "Zombie"
+ },
+ {
+ "id": "1830",
+ "name": "Frog"
+ },
+ {
+ "id": "1835",
+ "name": "Easter Bunny"
+ },
+ {
+ "id": "1836",
+ "name": "Dondakan the Dwarf"
+ },
+ {
+ "id": "1838",
+ "name": "Dondakan the Dwarf"
+ },
+ {
+ "id": "1839",
+ "name": "Dondakan the Dwarf"
+ },
+ {
+ "id": "1841",
+ "name": "Rolad"
+ },
+ {
+ "id": "1845",
+ "name": "Dwarven Boatman"
+ },
+ {
+ "id": "1847",
+ "name": "Miodvetnir"
+ },
+ {
+ "id": "1848",
+ "name": "Dernu"
+ },
+ {
+ "id": "1849",
+ "name": "Derni"
+ },
+ {
+ "id": "1860",
+ "name": "Brian"
+ },
+ {
+ "id": "1862",
+ "name": "Ali Morrisane"
+ },
+ {
+ "id": "1869",
+ "name": "Ali the Mayor"
+ },
+ {
+ "id": "1876",
+ "name": "Bandit Leader"
+ },
+ {
+ "id": "1879",
+ "name": "Bandit"
+ },
+ {
+ "id": "1881",
+ "name": "Bandit"
+ },
+ {
+ "id": "1882",
+ "name": "Sir Palomedes"
+ },
+ {
+ "id": "1883",
+ "name": "Sir Palomedes"
+ },
+ {
+ "id": "1884",
+ "name": "Trobert"
+ },
+ {
+ "id": "1887",
+ "name": "Villager"
+ },
+ {
+ "id": "1889",
+ "name": "Villager"
+ },
+ {
+ "id": "1890",
+ "name": "Villager"
+ },
+ {
+ "id": "1891",
+ "name": "Villager"
+ },
+ {
+ "id": "1893",
+ "name": "Villager"
+ },
+ {
+ "id": "1894",
+ "name": "Villager"
+ },
+ {
+ "id": "1895",
+ "name": "Villager"
+ },
+ {
+ "id": "1897",
+ "name": "Villager"
+ },
+ {
+ "id": "1898",
+ "name": "Villager"
+ },
+ {
+ "id": "1899",
+ "name": "Menaphite Leader"
+ },
+ {
+ "id": "1903",
+ "name": "Menaphite Thug"
+ },
+ {
+ "id": "1907",
+ "name": "Broken clay golem"
+ },
+ {
+ "id": "1909",
+ "name": "Damaged clay golem"
+ },
+ {
+ "id": "1910",
+ "name": "Clay golem"
+ },
+ {
+ "id": "1912",
+ "name": "Elissa"
+ },
+ {
+ "id": "1922",
+ "name": "Eblis"
+ },
+ {
+ "id": "1924",
+ "name": "Eblis"
+ },
+ {
+ "id": "1927",
+ "name": "Bandit"
+ },
+ {
+ "id": "1928",
+ "name": "Bandit"
+ },
+ {
+ "id": "1929",
+ "name": "Bandit"
+ },
+ {
+ "id": "1930",
+ "name": "Bandit"
+ },
+ {
+ "id": "1932",
+ "name": "Troll child"
+ },
+ {
+ "id": "1934",
+ "name": "Troll child"
+ },
+ {
+ "id": "1943",
+ "name": "Ice block"
+ },
+ {
+ "id": "1945",
+ "name": "Ice block"
+ },
+ {
+ "id": "1957",
+ "name": "Mummy"
+ },
+ {
+ "id": "1959",
+ "name": "Mummy"
+ },
+ {
+ "id": "1960",
+ "name": "Mummy ashes"
+ },
+ {
+ "id": "1966",
+ "name": "Mummy"
+ },
+ {
+ "id": "1968",
+ "name": "Mummy"
+ },
+ {
+ "id": "1970",
+ "name": "Azzanadra"
+ },
+ {
+ "id": "1982",
+ "name": "Raetul"
+ },
+ {
+ "id": "1983",
+ "name": "Siamun"
+ },
+ {
+ "id": "1984",
+ "name": "High Priest"
+ },
+ {
+ "id": "1987",
+ "name": "Priest"
+ },
+ {
+ "id": "1989",
+ "name": "Priest"
+ },
+ {
+ "id": "1990",
+ "name": "Sphinx"
+ },
+ {
+ "id": "1992",
+ "name": "Neite"
+ },
+ {
+ "id": "1996",
+ "name": "Vulture"
+ },
+ {
+ "id": "2000",
+ "name": "Plague cow"
+ },
+ {
+ "id": "2002",
+ "name": "Wanderer"
+ },
+ {
+ "id": "2006",
+ "name": "Wanderer"
+ },
+ {
+ "id": "2007",
+ "name": "Het"
+ },
+ {
+ "id": "2008",
+ "name": "Apmeken"
+ },
+ {
+ "id": "2009",
+ "name": "Scabaras"
+ },
+ {
+ "id": "2010",
+ "name": "Crondis"
+ },
+ {
+ "id": "2011",
+ "name": "Icthlarin"
+ },
+ {
+ "id": "2013",
+ "name": "Klenter"
+ },
+ {
+ "id": "2020",
+ "name": "Light creature"
+ },
+ {
+ "id": "2022",
+ "name": "Light creature"
+ },
+ {
+ "id": "2023",
+ "name": "Juna"
+ },
+ {
+ "id": "2038",
+ "name": "Grish"
+ },
+ {
+ "id": "2039",
+ "name": "Uglug Nar"
+ },
+ {
+ "id": "2040",
+ "name": "Pilg"
+ },
+ {
+ "id": "2041",
+ "name": "Grug"
+ },
+ {
+ "id": "2042",
+ "name": "Ogre guard"
+ },
+ {
+ "id": "2043",
+ "name": "Ogre guard"
+ },
+ {
+ "id": "2059",
+ "name": "Zavistic Rarve"
+ },
+ {
+ "id": "2061",
+ "name": "Sithik Ints"
+ },
+ {
+ "id": "2062",
+ "name": "Sithik Ints"
+ },
+ {
+ "id": "2063",
+ "name": "Gargh"
+ },
+ {
+ "id": "2064",
+ "name": "Scarg"
+ },
+ {
+ "id": "2065",
+ "name": "Gruh"
+ },
+ {
+ "id": "2066",
+ "name": "Irwin Feaselbaum"
+ },
+ {
+ "id": "2068",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "2079",
+ "name": "Sigmund"
+ },
+ {
+ "id": "2083",
+ "name": "Sigmund"
+ },
+ {
+ "id": "2084",
+ "name": "Mistag"
+ },
+ {
+ "id": "2085",
+ "name": "Kazgar"
+ },
+ {
+ "id": "2087",
+ "name": "Ur-tag"
+ },
+ {
+ "id": "2088",
+ "name": "Duke Horacio"
+ },
+ {
+ "id": "2089",
+ "name": "Mistag"
+ },
+ {
+ "id": "2090",
+ "name": "Sigmund"
+ },
+ {
+ "id": "2099",
+ "name": "Red Axe Secretary"
+ },
+ {
+ "id": "2107",
+ "name": "Red Axe Director"
+ },
+ {
+ "id": "2108",
+ "name": "Red Axe Cat"
+ },
+ {
+ "id": "2123",
+ "name": "Trader"
+ },
+ {
+ "id": "2125",
+ "name": "Trader"
+ },
+ {
+ "id": "2128",
+ "name": "Supreme Commander"
+ },
+ {
+ "id": "2129",
+ "name": "Commander Veldaban"
+ },
+ {
+ "id": "2137",
+ "name": "Gnome emissary"
+ },
+ {
+ "id": "2142",
+ "name": "Riki the sculptor's model"
+ },
+ {
+ "id": "2144",
+ "name": "Riki the sculptor's model"
+ },
+ {
+ "id": "2145",
+ "name": "Riki the sculptor's model"
+ },
+ {
+ "id": "2146",
+ "name": "Riki the sculptor's model"
+ },
+ {
+ "id": "2147",
+ "name": "Riki the sculptor's model"
+ },
+ {
+ "id": "2148",
+ "name": "Riki the sculptor's model"
+ },
+ {
+ "id": "2149",
+ "name": "Riki the sculptor's model"
+ },
+ {
+ "id": "2150",
+ "name": "Riki the sculptor's model"
+ },
+ {
+ "id": "2151",
+ "name": "Vigr"
+ },
+ {
+ "id": "2152",
+ "name": "Santiri"
+ },
+ {
+ "id": "2153",
+ "name": "Saro"
+ },
+ {
+ "id": "2155",
+ "name": "Wemund"
+ },
+ {
+ "id": "2156",
+ "name": "Randivor"
+ },
+ {
+ "id": "2157",
+ "name": "Hervi"
+ },
+ {
+ "id": "2159",
+ "name": "Gulldamar"
+ },
+ {
+ "id": "2161",
+ "name": "Agmundi"
+ },
+ {
+ "id": "2162",
+ "name": "Vermundi"
+ },
+ {
+ "id": "2166",
+ "name": "Assistant"
+ },
+ {
+ "id": "2169",
+ "name": "Dromund"
+ },
+ {
+ "id": "2176",
+ "name": "Inn Keeper"
+ },
+ {
+ "id": "2179",
+ "name": "Barman"
+ },
+ {
+ "id": "2188",
+ "name": "Hegir"
+ },
+ {
+ "id": "2189",
+ "name": "Haera"
+ },
+ {
+ "id": "2194",
+ "name": "Reinald"
+ },
+ {
+ "id": "2196",
+ "name": "Gauss"
+ },
+ {
+ "id": "2197",
+ "name": "Myndill"
+ },
+ {
+ "id": "2199",
+ "name": "Tombar"
+ },
+ {
+ "id": "2200",
+ "name": "Odmar"
+ },
+ {
+ "id": "2204",
+ "name": "Drunken Dwarf"
+ },
+ {
+ "id": "2208",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2209",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2210",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2211",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2212",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2213",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2214",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2215",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2216",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2217",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2218",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2219",
+ "name": "Purple Pewter Director"
+ },
+ {
+ "id": "2220",
+ "name": "Purple Pewter Director"
+ },
+ {
+ "id": "2221",
+ "name": "Blue Opal Director"
+ },
+ {
+ "id": "2222",
+ "name": "Yellow Fortune Director"
+ },
+ {
+ "id": "2223",
+ "name": "Green Gemstone Director"
+ },
+ {
+ "id": "2224",
+ "name": "White Chisel Director"
+ },
+ {
+ "id": "2225",
+ "name": "Silver Cog Director"
+ },
+ {
+ "id": "2226",
+ "name": "Brown Engine Director"
+ },
+ {
+ "id": "2227",
+ "name": "Red Axe Director"
+ },
+ {
+ "id": "2228",
+ "name": "Commander Veldaban"
+ },
+ {
+ "id": "2229",
+ "name": "Red Axe Cat"
+ },
+ {
+ "id": "2230",
+ "name": "Red Axe Cat"
+ },
+ {
+ "id": "2231",
+ "name": "Black Guard Berserker"
+ },
+ {
+ "id": "2233",
+ "name": "Olivia"
+ },
+ {
+ "id": "2238",
+ "name": "Donie"
+ },
+ {
+ "id": "2239",
+ "name": "Pig"
+ },
+ {
+ "id": "2251",
+ "name": "Gnome"
+ },
+ {
+ "id": "2252",
+ "name": "Crow"
+ },
+ {
+ "id": "2254",
+ "name": "Bed"
+ },
+ {
+ "id": "2255",
+ "name": "Thing under the bed"
+ },
+ {
+ "id": "2257",
+ "name": "Mage of Zamorak"
+ },
+ {
+ "id": "2259",
+ "name": "Mage of Zamorak"
+ },
+ {
+ "id": "2260",
+ "name": "Mage of Zamorak"
+ },
+ {
+ "id": "2266",
+ "name": "Brian O'Richard"
+ },
+ {
+ "id": "2268",
+ "name": "Rogue Guard"
+ },
+ {
+ "id": "2270",
+ "name": "Martin Thwait"
+ },
+ {
+ "id": "2273",
+ "name": "Spin Blades"
+ },
+ {
+ "id": "2295",
+ "name": "Rug Merchant"
+ },
+ {
+ "id": "2297",
+ "name": "Rug Merchant"
+ },
+ {
+ "id": "2299",
+ "name": "Rug Station Attendant"
+ },
+ {
+ "id": "2302",
+ "name": "Sarah"
+ },
+ {
+ "id": "2305",
+ "name": "Vanessa"
+ },
+ {
+ "id": "2306",
+ "name": "Richard"
+ },
+ {
+ "id": "2307",
+ "name": "Alice"
+ },
+ {
+ "id": "2308",
+ "name": "Capt' Arnav"
+ },
+ {
+ "id": "2322",
+ "name": "Metarialus"
+ },
+ {
+ "id": "2345",
+ "name": "Sick-looking sheep (1)"
+ },
+ {
+ "id": "2346",
+ "name": "Sick-looking sheep (2)"
+ },
+ {
+ "id": "2347",
+ "name": "Sick-looking sheep (3)"
+ },
+ {
+ "id": "2348",
+ "name": "Sick-looking sheep (4)"
+ },
+ {
+ "id": "2349",
+ "name": "Mourner"
+ },
+ {
+ "id": "2350",
+ "name": "Mourner"
+ },
+ {
+ "id": "2351",
+ "name": "Mourner"
+ },
+ {
+ "id": "2352",
+ "name": "Eudav"
+ },
+ {
+ "id": "2353",
+ "name": "Oronwen"
+ },
+ {
+ "id": "2356",
+ "name": "Dalldav"
+ },
+ {
+ "id": "2357",
+ "name": "Gethin"
+ },
+ {
+ "id": "2358",
+ "name": "Arianwyn"
+ },
+ {
+ "id": "2363",
+ "name": "Goreu"
+ },
+ {
+ "id": "2364",
+ "name": "Ysgawyn"
+ },
+ {
+ "id": "2365",
+ "name": "Arvel"
+ },
+ {
+ "id": "2366",
+ "name": "Mawrth"
+ },
+ {
+ "id": "2367",
+ "name": "Kelyn"
+ },
+ {
+ "id": "2368",
+ "name": "Eoin"
+ },
+ {
+ "id": "2369",
+ "name": "Iona"
+ },
+ {
+ "id": "2370",
+ "name": "Gnome"
+ },
+ {
+ "id": "2375",
+ "name": "Eluned"
+ },
+ {
+ "id": "2377",
+ "name": "Sick-looking sheep (1)"
+ },
+ {
+ "id": "2378",
+ "name": "Sick-looking sheep (2)"
+ },
+ {
+ "id": "2379",
+ "name": "Sick-looking sheep (3)"
+ },
+ {
+ "id": "2380",
+ "name": "Sick-looking sheep (4)"
+ },
+ {
+ "id": "2381",
+ "name": "Mysterious ghost"
+ },
+ {
+ "id": "2403",
+ "name": "Cart conductor"
+ },
+ {
+ "id": "2410",
+ "name": "Red Axe Director"
+ },
+ {
+ "id": "2411",
+ "name": "Red Axe Director"
+ },
+ {
+ "id": "2412",
+ "name": "Red Axe Henchman"
+ },
+ {
+ "id": "2413",
+ "name": "Red Axe Henchman"
+ },
+ {
+ "id": "2414",
+ "name": "Red Axe Henchman"
+ },
+ {
+ "id": "2415",
+ "name": "Colonel Grimsson"
+ },
+ {
+ "id": "2416",
+ "name": "Colonel Grimsson"
+ },
+ {
+ "id": "2417",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "2418",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "2419",
+ "name": "Grunsh"
+ },
+ {
+ "id": "2420",
+ "name": "Gnome emissary"
+ },
+ {
+ "id": "2421",
+ "name": "Gnome companion"
+ },
+ {
+ "id": "2422",
+ "name": "Gnome companion"
+ },
+ {
+ "id": "2424",
+ "name": "Gunslik"
+ },
+ {
+ "id": "2425",
+ "name": "Nolar"
+ },
+ {
+ "id": "2426",
+ "name": "Factory Worker"
+ },
+ {
+ "id": "2427",
+ "name": "Cart conductor"
+ },
+ {
+ "id": "2428",
+ "name": "Gauss"
+ },
+ {
+ "id": "2429",
+ "name": "Drunken Dwarf"
+ },
+ {
+ "id": "2430",
+ "name": "Rowdy dwarf"
+ },
+ {
+ "id": "2431",
+ "name": "Ulifed"
+ },
+ {
+ "id": "2432",
+ "name": "Red Axe Henchman"
+ },
+ {
+ "id": "2433",
+ "name": "Red Axe Henchman"
+ },
+ {
+ "id": "2434",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "2435",
+ "name": "Jarvald"
+ },
+ {
+ "id": "2437",
+ "name": "Jarvald"
+ },
+ {
+ "id": "2438",
+ "name": "Jarvald"
+ },
+ {
+ "id": "2440",
+ "name": "Door-support"
+ },
+ {
+ "id": "2441",
+ "name": "Door"
+ },
+ {
+ "id": "2442",
+ "name": "Door"
+ },
+ {
+ "id": "2444",
+ "name": "Door"
+ },
+ {
+ "id": "2445",
+ "name": "Door"
+ },
+ {
+ "id": "2446",
+ "name": "Door-support"
+ },
+ {
+ "id": "2447",
+ "name": "Door"
+ },
+ {
+ "id": "2448",
+ "name": "Door"
+ },
+ {
+ "id": "2449",
+ "name": "Egg"
+ },
+ {
+ "id": "2450",
+ "name": "Egg"
+ },
+ {
+ "id": "2451",
+ "name": "Egg"
+ },
+ {
+ "id": "2458",
+ "name": "Freaky Forester"
+ },
+ {
+ "id": "2469",
+ "name": "Frog"
+ },
+ {
+ "id": "2470",
+ "name": "Frog"
+ },
+ {
+ "id": "2471",
+ "name": "Frog"
+ },
+ {
+ "id": "2472",
+ "name": "Frog"
+ },
+ {
+ "id": "2473",
+ "name": "Frog"
+ },
+ {
+ "id": "2474",
+ "name": "Frog prince"
+ },
+ {
+ "id": "2475",
+ "name": "Frog princess"
+ },
+ {
+ "id": "2478",
+ "name": "Evil Bob"
+ },
+ {
+ "id": "2480",
+ "name": "Servant"
+ },
+ {
+ "id": "2483",
+ "name": "Bush snake"
+ },
+ {
+ "id": "2498",
+ "name": "Broodoo victim"
+ },
+ {
+ "id": "2500",
+ "name": "Broodoo victim"
+ },
+ {
+ "id": "2502",
+ "name": "Broodoo victim"
+ },
+ {
+ "id": "2504",
+ "name": "Sharimika"
+ },
+ {
+ "id": "2507",
+ "name": "Mamma Bufetta"
+ },
+ {
+ "id": "2510",
+ "name": "Layleen"
+ },
+ {
+ "id": "2513",
+ "name": "Karaday"
+ },
+ {
+ "id": "2516",
+ "name": "Safta Doc"
+ },
+ {
+ "id": "2519",
+ "name": "Gabooty"
+ },
+ {
+ "id": "2522",
+ "name": "Fanellaman"
+ },
+ {
+ "id": "2525",
+ "name": "Jagbakoba"
+ },
+ {
+ "id": "2528",
+ "name": "Murcaily"
+ },
+ {
+ "id": "2531",
+ "name": "Rionasta"
+ },
+ {
+ "id": "2534",
+ "name": "Mahogany"
+ },
+ {
+ "id": "2535",
+ "name": "Teak"
+ },
+ {
+ "id": "2536",
+ "name": "Niles"
+ },
+ {
+ "id": "2537",
+ "name": "Miles"
+ },
+ {
+ "id": "2538",
+ "name": "Giles"
+ },
+ {
+ "id": "2540",
+ "name": "Dr Jekyll"
+ },
+ {
+ "id": "2541",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "2542",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "2543",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "2544",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "2545",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "2546",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "2548",
+ "name": "Blackjack seller"
+ },
+ {
+ "id": "2550",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2551",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2552",
+ "name": "Dwarven Miner"
+ },
+ {
+ "id": "2554",
+ "name": "Tin ore"
+ },
+ {
+ "id": "2555",
+ "name": "Copper ore"
+ },
+ {
+ "id": "2556",
+ "name": "Iron ore"
+ },
+ {
+ "id": "2557",
+ "name": "Mithril ore"
+ },
+ {
+ "id": "2558",
+ "name": "Adamantite ore"
+ },
+ {
+ "id": "2559",
+ "name": "Runite ore"
+ },
+ {
+ "id": "2560",
+ "name": "Silver ore"
+ },
+ {
+ "id": "2561",
+ "name": "Gold ore"
+ },
+ {
+ "id": "2562",
+ "name": "Coal"
+ },
+ {
+ "id": "2563",
+ "name": "Perfect gold ore"
+ },
+ {
+ "id": "2566",
+ "name": "Wise Old Man"
+ },
+ {
+ "id": "2567",
+ "name": "Wise Old Man"
+ },
+ {
+ "id": "2568",
+ "name": "Banker"
+ },
+ {
+ "id": "2569",
+ "name": "Banker"
+ },
+ {
+ "id": "2570",
+ "name": "Banker"
+ },
+ {
+ "id": "2573",
+ "name": "Pillory Guard"
+ },
+ {
+ "id": "2575",
+ "name": "Purepker895"
+ },
+ {
+ "id": "2576",
+ "name": "Qutiedoll"
+ },
+ {
+ "id": "2577",
+ "name": "1337sp34kr"
+ },
+ {
+ "id": "2578",
+ "name": "Elfinlocks"
+ },
+ {
+ "id": "2579",
+ "name": "Cool Mom227"
+ },
+ {
+ "id": "2581",
+ "name": "Ellamaria"
+ },
+ {
+ "id": "2582",
+ "name": "Trolley"
+ },
+ {
+ "id": "2583",
+ "name": "Trolley"
+ },
+ {
+ "id": "2584",
+ "name": "Trolley"
+ },
+ {
+ "id": "2585",
+ "name": "Billy, a guard of Falador"
+ },
+ {
+ "id": "2587",
+ "name": "Bob, another guard of Falador"
+ },
+ {
+ "id": "2589",
+ "name": "PKMaster0036"
+ },
+ {
+ "id": "2590",
+ "name": "King Roald"
+ },
+ {
+ "id": "2617",
+ "name": "TzHaar-Mej-Jal"
+ },
+ {
+ "id": "2618",
+ "name": "TzHaar-Mej-Kah"
+ },
+ {
+ "id": "2619",
+ "name": "TzHaar-Ket-Zuh"
+ },
+ {
+ "id": "2620",
+ "name": "TzHaar-Hur-Tel"
+ },
+ {
+ "id": "2622",
+ "name": "TzHaar-Hur-Lek"
+ },
+ {
+ "id": "2623",
+ "name": "TzHaar-Mej-Roh"
+ },
+ {
+ "id": "2624",
+ "name": "TzHaar-Ket"
+ },
+ {
+ "id": "2625",
+ "name": "TzHaar-Ket"
+ },
+ {
+ "id": "2626",
+ "name": "Rocks"
+ },
+ {
+ "id": "2632",
+ "name": "Tok-Xil"
+ },
+ {
+ "id": "2633",
+ "name": "Wise Old Man"
+ },
+ {
+ "id": "2635",
+ "name": "Bob"
+ },
+ {
+ "id": "2636",
+ "name": "Bob"
+ },
+ {
+ "id": "2637",
+ "name": "Sphinx"
+ },
+ {
+ "id": "2638",
+ "name": "Neite"
+ },
+ {
+ "id": "2639",
+ "name": "Robert the Strong"
+ },
+ {
+ "id": "2640",
+ "name": "Odysseus"
+ },
+ {
+ "id": "2642",
+ "name": "King Black Dragon"
+ },
+ {
+ "id": "2643",
+ "name": "R4ng3rNo0b889"
+ },
+ {
+ "id": "2644",
+ "name": "Love Cats"
+ },
+ {
+ "id": "2645",
+ "name": "Love Cats"
+ },
+ {
+ "id": "2646",
+ "name": "Neite"
+ },
+ {
+ "id": "2647",
+ "name": "Bob"
+ },
+ {
+ "id": "2648",
+ "name": "Beite"
+ },
+ {
+ "id": "2649",
+ "name": "Gnome"
+ },
+ {
+ "id": "2650",
+ "name": "Gnome"
+ },
+ {
+ "id": "2651",
+ "name": "Odysseus"
+ },
+ {
+ "id": "2652",
+ "name": "Neite"
+ },
+ {
+ "id": "2654",
+ "name": "Unferth"
+ },
+ {
+ "id": "2656",
+ "name": "Unferth"
+ },
+ {
+ "id": "2657",
+ "name": "Unferth"
+ },
+ {
+ "id": "2658",
+ "name": "Unferth"
+ },
+ {
+ "id": "2659",
+ "name": "Unferth"
+ },
+ {
+ "id": "2661",
+ "name": "Reldo"
+ },
+ {
+ "id": "2662",
+ "name": "Lazy cat"
+ },
+ {
+ "id": "2663",
+ "name": "Lazy cat"
+ },
+ {
+ "id": "2664",
+ "name": "Lazy cat"
+ },
+ {
+ "id": "2665",
+ "name": "Lazy cat"
+ },
+ {
+ "id": "2666",
+ "name": "Lazy cat"
+ },
+ {
+ "id": "2667",
+ "name": "Lazy cat"
+ },
+ {
+ "id": "2668",
+ "name": "Wily cat"
+ },
+ {
+ "id": "2669",
+ "name": "Wily cat"
+ },
+ {
+ "id": "2670",
+ "name": "Wily cat"
+ },
+ {
+ "id": "2671",
+ "name": "Wily cat"
+ },
+ {
+ "id": "2672",
+ "name": "Wily cat"
+ },
+ {
+ "id": "2673",
+ "name": "Wily cat"
+ },
+ {
+ "id": "2676",
+ "name": "Make-over Mage"
+ },
+ {
+ "examine": "So what can one do with a drunken sailor?",
+ "id": "2692",
+ "name": "Ahab"
+ },
+ {
+ "id": "2708",
+ "name": "Seagull"
+ },
+ {
+ "id": "2719",
+ "name": "Grum"
+ },
+ {
+ "id": "2720",
+ "name": "Gerrant"
+ },
+ {
+ "id": "2721",
+ "name": "Wydin"
+ },
+ {
+ "id": "2722",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "2723",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "2724",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "2727",
+ "name": "Gull"
+ },
+ {
+ "id": "2730",
+ "name": "Monk of Entrana"
+ },
+ {
+ "id": "2747",
+ "name": "Solus Dellagar"
+ },
+ {
+ "id": "2748",
+ "name": "Savant"
+ },
+ {
+ "id": "2749",
+ "name": "Lord Daquarius"
+ },
+ {
+ "id": "2750",
+ "name": "Solus Dellagar"
+ },
+ {
+ "id": "2751",
+ "name": "Black Knight"
+ },
+ {
+ "id": "2752",
+ "name": "Lord Daquarius"
+ },
+ {
+ "id": "2753",
+ "name": "Mage of Zamorak"
+ },
+ {
+ "id": "2754",
+ "name": "Mage of Zamorak"
+ },
+ {
+ "id": "2755",
+ "name": "Mage of Zamorak"
+ },
+ {
+ "id": "2756",
+ "name": "Woman"
+ },
+ {
+ "id": "2777",
+ "name": "Black Knight"
+ },
+ {
+ "id": "2778",
+ "name": "Black Knight"
+ },
+ {
+ "id": "2780",
+ "name": "Solus Dellagar"
+ },
+ {
+ "id": "2781",
+ "name": "Gnome guard"
+ },
+ {
+ "id": "2788",
+ "name": "Thorgel"
+ },
+ {
+ "id": "2791",
+ "name": "Pillory Guard"
+ },
+ {
+ "id": "2793",
+ "name": "Tramp"
+ },
+ {
+ "id": "2794",
+ "name": "Tramp"
+ },
+ {
+ "id": "2795",
+ "name": "Skippy"
+ },
+ {
+ "id": "2797",
+ "name": "Skippy"
+ },
+ {
+ "id": "2798",
+ "name": "Skippy"
+ },
+ {
+ "id": "2799",
+ "name": "Skippy"
+ },
+ {
+ "id": "2800",
+ "name": "A pile of broken glass"
+ },
+ {
+ "id": "2813",
+ "name": "Alice the Camel"
+ },
+ {
+ "id": "2816",
+ "name": "Ali the Smith"
+ },
+ {
+ "id": "2821",
+ "name": "Ali the Farmer"
+ },
+ {
+ "id": "2822",
+ "name": "Ali the Tailor"
+ },
+ {
+ "id": "2823",
+ "name": "Ali the Guard"
+ },
+ {
+ "id": "2829",
+ "name": "Davey"
+ },
+ {
+ "id": "2859",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "2862",
+ "name": "Death"
+ },
+ {
+ "id": "2864",
+ "name": "Most of a Zombie"
+ },
+ {
+ "id": "2865",
+ "name": "Most of a Zombie"
+ },
+ {
+ "id": "2867",
+ "name": "Most of a Zombie"
+ },
+ {
+ "id": "2868",
+ "name": "Zombie Head"
+ },
+ {
+ "id": "2870",
+ "name": "Half-Zombie"
+ },
+ {
+ "id": "2871",
+ "name": "Other Half-Zombie"
+ },
+ {
+ "id": "2872",
+ "name": "Child"
+ },
+ {
+ "id": "2873",
+ "name": "Child"
+ },
+ {
+ "id": "2874",
+ "name": "Child"
+ },
+ {
+ "id": "2875",
+ "name": "Child"
+ },
+ {
+ "id": "2876",
+ "name": "Child"
+ },
+ {
+ "id": "2877",
+ "name": "Child"
+ },
+ {
+ "id": "2879",
+ "name": "Bardur"
+ },
+ {
+ "id": "2884",
+ "name": "Wallasalki"
+ },
+ {
+ "id": "2891",
+ "name": "Suspicious water"
+ },
+ {
+ "id": "2893",
+ "name": "Suspicious water"
+ },
+ {
+ "id": "2895",
+ "name": "Suspicious water"
+ },
+ {
+ "id": "2897",
+ "name": "Father Reen"
+ },
+ {
+ "id": "2900",
+ "name": "Father Reen"
+ },
+ {
+ "id": "2901",
+ "name": "Father Badden"
+ },
+ {
+ "id": "2903",
+ "name": "Father Badden"
+ },
+ {
+ "id": "2904",
+ "name": "Denath"
+ },
+ {
+ "id": "2905",
+ "name": "Denath"
+ },
+ {
+ "id": "2906",
+ "name": "Eric"
+ },
+ {
+ "id": "2907",
+ "name": "Eric"
+ },
+ {
+ "id": "2908",
+ "name": "Evil Dave"
+ },
+ {
+ "id": "2910",
+ "name": "Evil Dave"
+ },
+ {
+ "id": "2911",
+ "name": "Matthew"
+ },
+ {
+ "id": "2912",
+ "name": "Matthew"
+ },
+ {
+ "id": "2913",
+ "name": "Jennifer"
+ },
+ {
+ "id": "2914",
+ "name": "Jennifer"
+ },
+ {
+ "id": "2915",
+ "name": "Tanya"
+ },
+ {
+ "id": "2916",
+ "name": "Tanya"
+ },
+ {
+ "id": "2917",
+ "name": "Patrick"
+ },
+ {
+ "id": "2918",
+ "name": "Patrick"
+ },
+ {
+ "id": "2920",
+ "name": "Sand storm"
+ },
+ {
+ "id": "2922",
+ "name": "Clay golem"
+ },
+ {
+ "id": "2928",
+ "name": "Clay golem"
+ },
+ {
+ "id": "2929",
+ "name": "Ghost"
+ },
+ {
+ "id": "2932",
+ "name": "Jorral"
+ },
+ {
+ "id": "2933",
+ "name": "Melina"
+ },
+ {
+ "id": "2935",
+ "name": "Melina"
+ },
+ {
+ "id": "2936",
+ "name": "Droalak"
+ },
+ {
+ "id": "2938",
+ "name": "Droalak"
+ },
+ {
+ "id": "2939",
+ "name": "Dron"
+ },
+ {
+ "id": "2940",
+ "name": "Blanin"
+ },
+ {
+ "id": "2943",
+ "name": "Pox"
+ },
+ {
+ "id": "2944",
+ "name": "Pox"
+ },
+ {
+ "examine": "Cracking personality.",
+ "id": "2946",
+ "name": "Grimesquit"
+ },
+ {
+ "examine": "Lovely girl, shame about the smell.",
+ "id": "2947",
+ "name": "Phingspet"
+ },
+ {
+ "id": "2951",
+ "name": "Felkrash"
+ },
+ {
+ "id": "2953",
+ "name": "Ceril Carnillean"
+ },
+ {
+ "id": "2954",
+ "name": "Councillor Halgrive"
+ },
+ {
+ "id": "2955",
+ "name": "Spice seller"
+ },
+ {
+ "id": "2956",
+ "name": "Fur trader"
+ },
+ {
+ "id": "2957",
+ "name": "Gem merchant"
+ },
+ {
+ "id": "2959",
+ "name": "Silk merchant"
+ },
+ {
+ "id": "2960",
+ "name": "Zenesha"
+ },
+ {
+ "id": "2961",
+ "name": "Ali Morrisane"
+ },
+ {
+ "id": "2974",
+ "name": "Rat"
+ },
+ {
+ "id": "2983",
+ "name": "Turbogroomer"
+ },
+ {
+ "id": "2985",
+ "name": "Loki"
+ },
+ {
+ "id": "2987",
+ "name": "Treacle"
+ },
+ {
+ "id": "2989",
+ "name": "Claude"
+ },
+ {
+ "id": "2991",
+ "name": "Rauborn"
+ },
+ {
+ "id": "2992",
+ "name": "Vaeringk"
+ },
+ {
+ "id": "2993",
+ "name": "Oxi"
+ },
+ {
+ "id": "2994",
+ "name": "Fior"
+ },
+ {
+ "id": "2995",
+ "name": "Sagira"
+ },
+ {
+ "id": "2996",
+ "name": "Anleif"
+ },
+ {
+ "id": "2999",
+ "name": "Gambler"
+ },
+ {
+ "id": "3000",
+ "name": "Barman"
+ },
+ {
+ "id": "3019",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "3020",
+ "name": "Rug Merchant"
+ },
+ {
+ "id": "3023",
+ "name": "Nirrie"
+ },
+ {
+ "id": "3024",
+ "name": "Tirrie"
+ },
+ {
+ "id": "3025",
+ "name": "Hallak"
+ },
+ {
+ "id": "3031",
+ "name": "Usi"
+ },
+ {
+ "id": "3032",
+ "name": "Nkuku"
+ },
+ {
+ "id": "3033",
+ "name": "Garai"
+ },
+ {
+ "id": "3034",
+ "name": "Habibah"
+ },
+ {
+ "id": "3035",
+ "name": "Meskhenet"
+ },
+ {
+ "id": "3036",
+ "name": "Zahra"
+ },
+ {
+ "id": "3037",
+ "name": "Zahur"
+ },
+ {
+ "id": "3038",
+ "name": "Seddu"
+ },
+ {
+ "id": "3039",
+ "name": "Kazemde"
+ },
+ {
+ "id": "3041",
+ "name": "Tarik"
+ },
+ {
+ "id": "3045",
+ "name": "Rokuh"
+ },
+ {
+ "id": "3047",
+ "name": "Target"
+ },
+ {
+ "id": "3048",
+ "name": "Target"
+ },
+ {
+ "id": "3049",
+ "name": "Larxus"
+ },
+ {
+ "id": "3076",
+ "name": "Dead Monk"
+ },
+ {
+ "id": "3078",
+ "name": "High Priest"
+ },
+ {
+ "id": "3081",
+ "name": "Assassin"
+ },
+ {
+ "id": "3082",
+ "name": "Rosie"
+ },
+ {
+ "id": "3083",
+ "name": "Sorcha"
+ },
+ {
+ "id": "3084",
+ "name": "Cait"
+ },
+ {
+ "id": "3085",
+ "name": "Cormac"
+ },
+ {
+ "id": "3086",
+ "name": "Fionn"
+ },
+ {
+ "id": "3087",
+ "name": "Donnacha"
+ },
+ {
+ "id": "3088",
+ "name": "Ronan"
+ },
+ {
+ "id": "3093",
+ "name": "Flying Book"
+ },
+ {
+ "id": "3095",
+ "name": "Flying Book"
+ },
+ {
+ "id": "3096",
+ "name": "Pizzaz Hat"
+ },
+ {
+ "id": "3107",
+ "name": "Charmed Warrior"
+ },
+ {
+ "id": "3108",
+ "name": "Bert"
+ },
+ {
+ "id": "3110",
+ "name": "Sandy"
+ },
+ {
+ "id": "3113",
+ "name": "Sandy"
+ },
+ {
+ "id": "3114",
+ "name": "Mazion"
+ },
+ {
+ "id": "3116",
+ "name": "Reeso"
+ },
+ {
+ "id": "3118",
+ "name": "Prison Pete"
+ },
+ {
+ "id": "3119",
+ "name": "Balloon Animal"
+ },
+ {
+ "id": "3120",
+ "name": "Balloon Animal"
+ },
+ {
+ "id": "3124",
+ "name": "Pyramid block"
+ },
+ {
+ "id": "3125",
+ "name": "Pyramid block"
+ },
+ {
+ "id": "3126",
+ "name": "Pentyn"
+ },
+ {
+ "id": "3127",
+ "name": "Aristarchus"
+ },
+ {
+ "id": "3128",
+ "name": "Boneguard"
+ },
+ {
+ "id": "3130",
+ "name": "Pile of bones"
+ },
+ {
+ "id": "3131",
+ "name": "Desert Spirit"
+ },
+ {
+ "id": "3132",
+ "name": "Crust of ice"
+ },
+ {
+ "id": "3134",
+ "name": "Furnace grate"
+ },
+ {
+ "id": "3136",
+ "name": "Enakhra"
+ },
+ {
+ "id": "3138",
+ "name": "Enakhra"
+ },
+ {
+ "id": "3139",
+ "name": "Boneguard"
+ },
+ {
+ "id": "3141",
+ "name": "Akthanakos"
+ },
+ {
+ "id": "3142",
+ "name": "Akthanakos"
+ },
+ {
+ "id": "3143",
+ "name": "Lazim"
+ },
+ {
+ "id": "3148",
+ "name": "Enakhra"
+ },
+ {
+ "id": "3149",
+ "name": "Akthanakos"
+ },
+ {
+ "id": "3152",
+ "name": "Harpie Bug Swarm"
+ },
+ {
+ "id": "3154",
+ "name": "Count Draynor"
+ },
+ {
+ "id": "3156",
+ "name": "Bill Teach"
+ },
+ {
+ "id": "3157",
+ "name": "Bill Teach"
+ },
+ {
+ "id": "3158",
+ "name": "Bill Teach"
+ },
+ {
+ "id": "3159",
+ "name": "Bill Teach"
+ },
+ {
+ "id": "3160",
+ "name": "Bill Teach"
+ },
+ {
+ "id": "3161",
+ "name": "Charley"
+ },
+ {
+ "id": "3162",
+ "name": "Smith"
+ },
+ {
+ "id": "3163",
+ "name": "Joe"
+ },
+ {
+ "id": "3164",
+ "name": "Mama"
+ },
+ {
+ "id": "3165",
+ "name": "Mama"
+ },
+ {
+ "id": "3197",
+ "name": "Gull"
+ },
+ {
+ "id": "3205",
+ "name": "Romily Weaklax"
+ },
+ {
+ "id": "3206",
+ "name": "Priest"
+ },
+ {
+ "id": "3207",
+ "name": "Pious Pete"
+ },
+ {
+ "id": "3208",
+ "name": "Taper"
+ },
+ {
+ "id": "3210",
+ "name": "Alrena"
+ },
+ {
+ "id": "3211",
+ "name": "Alrena"
+ },
+ {
+ "id": "3212",
+ "name": "Bravek"
+ },
+ {
+ "id": "3218",
+ "name": "Tina"
+ },
+ {
+ "id": "3254",
+ "name": "Hunding"
+ },
+ {
+ "id": "3281",
+ "name": "Engineering assistant"
+ },
+ {
+ "id": "3284",
+ "name": "Squirrel"
+ },
+ {
+ "id": "3285",
+ "name": "Squirrel"
+ },
+ {
+ "id": "3287",
+ "name": "Raccoon"
+ },
+ {
+ "id": "3289",
+ "name": "Skeleton"
+ },
+ {
+ "id": "3292",
+ "name": "Witch"
+ },
+ {
+ "id": "3300",
+ "name": "Frog"
+ },
+ {
+ "id": "3301",
+ "name": "Storm cloud"
+ },
+ {
+ "id": "3303",
+ "name": "Fairy Nuff"
+ },
+ {
+ "id": "3305",
+ "name": "Slim Louie"
+ },
+ {
+ "id": "3306",
+ "name": "Fat Rocco"
+ },
+ {
+ "id": "3308",
+ "name": "Zandar Horfyre"
+ },
+ {
+ "id": "3311",
+ "name": "Sheep"
+ },
+ {
+ "id": "3312",
+ "name": "Zanaris choir"
+ },
+ {
+ "id": "3314",
+ "name": "Baby tanglefoot"
+ },
+ {
+ "id": "3321",
+ "name": "Gatekeeper"
+ },
+ {
+ "id": "3323",
+ "name": "Draul Leptoc"
+ },
+ {
+ "id": "3326",
+ "name": "Martina Scorsby"
+ },
+ {
+ "id": "3328",
+ "name": "Tarquin"
+ },
+ {
+ "id": "3329",
+ "name": "Sigurd"
+ },
+ {
+ "id": "3330",
+ "name": "Hari"
+ },
+ {
+ "id": "3332",
+ "name": "Trees"
+ },
+ {
+ "id": "3333",
+ "name": "Trees"
+ },
+ {
+ "id": "3335",
+ "name": "Bullrush"
+ },
+ {
+ "id": "3336",
+ "name": "Bullrush"
+ },
+ {
+ "id": "3337",
+ "name": "Cave scenery"
+ },
+ {
+ "id": "3338",
+ "name": "Cave scenery"
+ },
+ {
+ "id": "3339",
+ "name": "Cave scenery"
+ },
+ {
+ "id": "3351",
+ "name": "Genie"
+ },
+ {
+ "id": "3352",
+ "name": "Mysterious Old Man"
+ },
+ {
+ "id": "3353",
+ "name": "Swarm"
+ },
+ {
+ "id": "3354",
+ "name": "Cap'n Hand"
+ },
+ {
+ "id": "3355",
+ "name": "Rick Turpentine"
+ },
+ {
+ "id": "3356",
+ "name": "Niles"
+ },
+ {
+ "id": "3357",
+ "name": "Miles"
+ },
+ {
+ "id": "3358",
+ "name": "Giles"
+ },
+ {
+ "id": "3359",
+ "name": "Dr Jekyll"
+ },
+ {
+ "id": "3360",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "3361",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "3362",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "3363",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "3364",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "3365",
+ "name": "Mr Hyde"
+ },
+ {
+ "id": "3372",
+ "name": "Sir Amik Varze"
+ },
+ {
+ "id": "3373",
+ "name": "Sir Amik Varze"
+ },
+ {
+ "id": "3377",
+ "name": "K'klik"
+ },
+ {
+ "id": "3379",
+ "name": "Evil Dave"
+ },
+ {
+ "id": "3381",
+ "name": "Doris"
+ },
+ {
+ "id": "3383",
+ "name": "Gypsy"
+ },
+ {
+ "id": "3386",
+ "name": "Gypsy"
+ },
+ {
+ "id": "3387",
+ "name": "Culinaromancer"
+ },
+ {
+ "id": "3388",
+ "name": "Osman"
+ },
+ {
+ "id": "3395",
+ "name": "Sir Amik Varze"
+ },
+ {
+ "id": "3396",
+ "name": "Awowogei"
+ },
+ {
+ "id": "3397",
+ "name": "Awowogei"
+ },
+ {
+ "id": "3398",
+ "name": "Skrach Uglogwee"
+ },
+ {
+ "id": "3399",
+ "name": "Culinaromancer"
+ },
+ {
+ "id": "3401",
+ "name": "An old Dwarf"
+ },
+ {
+ "id": "3403",
+ "name": "Rohak"
+ },
+ {
+ "id": "3417",
+ "name": "Pirate Pete"
+ },
+ {
+ "id": "3428",
+ "name": "Fish"
+ },
+ {
+ "id": "3429",
+ "name": "Fish"
+ },
+ {
+ "id": "3430",
+ "name": "Fish"
+ },
+ {
+ "id": "3440",
+ "name": "Fish"
+ },
+ {
+ "id": "3441",
+ "name": "Fish"
+ },
+ {
+ "id": "3442",
+ "name": "Fish"
+ },
+ {
+ "id": "3446",
+ "name": "Fish"
+ },
+ {
+ "id": "3447",
+ "name": "Fish"
+ },
+ {
+ "id": "3448",
+ "name": "Fish"
+ },
+ {
+ "id": "3452",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3453",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3454",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3455",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3456",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3457",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3458",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3459",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3460",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3461",
+ "name": "? ? ? ?"
+ },
+ {
+ "id": "3462",
+ "name": "Skrach Uglogwee"
+ },
+ {
+ "id": "3464",
+ "name": "Skrach Uglogwee"
+ },
+ {
+ "id": "3465",
+ "name": "Nung"
+ },
+ {
+ "id": "3466",
+ "name": "Ogre"
+ },
+ {
+ "id": "3467",
+ "name": "Rantz"
+ },
+ {
+ "id": "3468",
+ "name": "Rantz"
+ },
+ {
+ "id": "3469",
+ "name": "Ogre boat"
+ },
+ {
+ "id": "3472",
+ "name": "Ogre boat"
+ },
+ {
+ "id": "3473",
+ "name": "Balloon Toad"
+ },
+ {
+ "id": "3474",
+ "name": "Balloon Toad"
+ },
+ {
+ "id": "3475",
+ "name": "Balloon Toad"
+ },
+ {
+ "id": "3477",
+ "name": "Jubbly bird"
+ },
+ {
+ "id": "3479",
+ "name": "King Awowogei"
+ },
+ {
+ "id": "3481",
+ "name": "Mizaru"
+ },
+ {
+ "id": "3482",
+ "name": "Kikazaru"
+ },
+ {
+ "id": "3483",
+ "name": "Iwazaru"
+ },
+ {
+ "id": "3485",
+ "name": "Culinaromancer"
+ },
+ {
+ "id": "3486",
+ "name": "Culinaromancer"
+ },
+ {
+ "id": "3487",
+ "name": "Culinaromancer"
+ },
+ {
+ "id": "3488",
+ "name": "Culinaromancer"
+ },
+ {
+ "id": "3489",
+ "name": "Culinaromancer"
+ },
+ {
+ "id": "3490",
+ "name": "Culinaromancer"
+ },
+ {
+ "id": "3492",
+ "name": "Culinaromancer"
+ },
+ {
+ "id": "3503",
+ "name": "Overgrown hellcat"
+ },
+ {
+ "id": "3504",
+ "name": "Hellcat"
+ },
+ {
+ "id": "3505",
+ "name": "Hell-kitten"
+ },
+ {
+ "id": "3506",
+ "name": "Lazy hellcat"
+ },
+ {
+ "id": "3507",
+ "name": "Wily hellcat"
+ },
+ {
+ "id": "3508",
+ "name": "Leo"
+ },
+ {
+ "id": "3510",
+ "name": "Wiskit"
+ },
+ {
+ "id": "3512",
+ "name": "Vampyre Juvinate"
+ },
+ {
+ "id": "3515",
+ "name": "Vampyre Juvinate"
+ },
+ {
+ "id": "3516",
+ "name": "Gadderanks"
+ },
+ {
+ "id": "3518",
+ "name": "Gadderanks"
+ },
+ {
+ "id": "3519",
+ "name": "Gadderanks"
+ },
+ {
+ "id": "3520",
+ "name": "Vampyre Juvinate"
+ },
+ {
+ "id": "3528",
+ "name": "Vampyre Juvinate"
+ },
+ {
+ "id": "3529",
+ "name": "Vampyre Juvinate"
+ },
+ {
+ "id": "3530",
+ "name": "Mist"
+ },
+ {
+ "id": "3535",
+ "name": "Ivan Strom"
+ },
+ {
+ "id": "3536",
+ "name": "Ivan Strom"
+ },
+ {
+ "id": "3537",
+ "name": "Vampyre Juvinate"
+ },
+ {
+ "id": "3538",
+ "name": "Vampyre Juvinate"
+ },
+ {
+ "id": "3539",
+ "name": "Veliaf Hurtz"
+ },
+ {
+ "id": "3540",
+ "name": "Elisabeta"
+ },
+ {
+ "id": "3541",
+ "name": "Aurel"
+ },
+ {
+ "id": "3542",
+ "name": "Sorin"
+ },
+ {
+ "id": "3543",
+ "name": "Luscion"
+ },
+ {
+ "id": "3544",
+ "name": "Sergiu"
+ },
+ {
+ "id": "3545",
+ "name": "Radu"
+ },
+ {
+ "id": "3546",
+ "name": "Grigore"
+ },
+ {
+ "id": "3547",
+ "name": "Ileana"
+ },
+ {
+ "id": "3548",
+ "name": "Valeria"
+ },
+ {
+ "id": "3549",
+ "name": "Emilia"
+ },
+ {
+ "id": "3550",
+ "name": "Florin"
+ },
+ {
+ "id": "3551",
+ "name": "Catalina"
+ },
+ {
+ "id": "3552",
+ "name": "Ivan"
+ },
+ {
+ "id": "3553",
+ "name": "Victor"
+ },
+ {
+ "id": "3554",
+ "name": "Helena"
+ },
+ {
+ "id": "3555",
+ "name": "Teodor"
+ },
+ {
+ "id": "3556",
+ "name": "Marius"
+ },
+ {
+ "id": "3557",
+ "name": "Gabriela"
+ },
+ {
+ "id": "3558",
+ "name": "Vladimir"
+ },
+ {
+ "id": "3559",
+ "name": "Calin"
+ },
+ {
+ "id": "3560",
+ "name": "Mihail"
+ },
+ {
+ "id": "3561",
+ "name": "Nicoleta"
+ },
+ {
+ "id": "3562",
+ "name": "Simona"
+ },
+ {
+ "id": "3563",
+ "name": "Vasile"
+ },
+ {
+ "id": "3564",
+ "name": "Razvan"
+ },
+ {
+ "id": "3565",
+ "name": "Luminata"
+ },
+ {
+ "id": "3566",
+ "name": "Cornelius"
+ },
+ {
+ "id": "3569",
+ "name": "Cornelius"
+ },
+ {
+ "id": "3570",
+ "name": "Benjamin"
+ },
+ {
+ "id": "3571",
+ "name": "Liam"
+ },
+ {
+ "id": "3572",
+ "name": "Miala"
+ },
+ {
+ "id": "3573",
+ "name": "Verak"
+ },
+ {
+ "id": "3574",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "3575",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "3576",
+ "name": "Juvinate"
+ },
+ {
+ "id": "3578",
+ "name": "Juvinate"
+ },
+ {
+ "id": "3580",
+ "name": "Tentacle"
+ },
+ {
+ "id": "3584",
+ "name": "Troll"
+ },
+ {
+ "id": "3592",
+ "name": "Tok-Xil"
+ },
+ {
+ "id": "3594",
+ "name": "Rocnar"
+ },
+ {
+ "id": "3595",
+ "name": "Toy Soldier"
+ },
+ {
+ "id": "3596",
+ "name": "Toy Doll"
+ },
+ {
+ "id": "3597",
+ "name": "Toy Mouse"
+ },
+ {
+ "id": "3598",
+ "name": "Clockwork cat"
+ },
+ {
+ "id": "3606",
+ "name": "Ghast"
+ },
+ {
+ "id": "3607",
+ "name": "Ghast"
+ },
+ {
+ "id": "3608",
+ "name": "Ghast"
+ },
+ {
+ "id": "3609",
+ "name": "Ghast"
+ },
+ {
+ "id": "3610",
+ "name": "Ghast"
+ },
+ {
+ "id": "3611",
+ "name": "Ghast"
+ },
+ {
+ "id": "3612",
+ "name": "Giant snail"
+ },
+ {
+ "id": "3613",
+ "name": "Giant snail"
+ },
+ {
+ "id": "3614",
+ "name": "Giant snail"
+ },
+ {
+ "id": "3615",
+ "name": "Riyl shadow"
+ },
+ {
+ "id": "3616",
+ "name": "Asyn shadow"
+ },
+ {
+ "id": "3617",
+ "name": "Shade"
+ },
+ {
+ "id": "3621",
+ "name": "Tentacle"
+ },
+ {
+ "id": "3623",
+ "name": "Smiddi Ryak"
+ },
+ {
+ "id": "3625",
+ "name": "Rolayne Twickit"
+ },
+ {
+ "id": "3627",
+ "name": "Jayene Kliyn"
+ },
+ {
+ "id": "3629",
+ "name": "Valantay Eppel"
+ },
+ {
+ "id": "3631",
+ "name": "Dalcian Fang"
+ },
+ {
+ "id": "3633",
+ "name": "Fyiona Fray"
+ },
+ {
+ "id": "3635",
+ "name": "Abidor Crank"
+ },
+ {
+ "id": "3636",
+ "name": "Spirit tree"
+ },
+ {
+ "id": "3637",
+ "name": "Spirit tree"
+ },
+ {
+ "id": "3638",
+ "name": "Launa"
+ },
+ {
+ "id": "3640",
+ "name": "Launa"
+ },
+ {
+ "id": "3641",
+ "name": "Brana"
+ },
+ {
+ "id": "3642",
+ "name": "Mawnis Burowgar"
+ },
+ {
+ "id": "3643",
+ "name": "Tolna"
+ },
+ {
+ "id": "3644",
+ "name": "Tolna"
+ },
+ {
+ "id": "3651",
+ "name": "Confusion beast"
+ },
+ {
+ "id": "3652",
+ "name": "Confusion beast"
+ },
+ {
+ "id": "3653",
+ "name": "Confusion beast"
+ },
+ {
+ "id": "3654",
+ "name": "Confusion beast"
+ },
+ {
+ "id": "3656",
+ "name": "Hopeless creature"
+ },
+ {
+ "id": "3657",
+ "name": "Hopeless creature"
+ },
+ {
+ "id": "3658",
+ "name": "Tolna"
+ },
+ {
+ "id": "3659",
+ "name": "Tolna"
+ },
+ {
+ "id": "3660",
+ "name": "Tolna"
+ },
+ {
+ "id": "3668",
+ "name": "Hopeless beast"
+ },
+ {
+ "id": "3669",
+ "name": "Hopeless beast"
+ },
+ {
+ "id": "3677",
+ "name": "Sinister Stranger"
+ },
+ {
+ "id": "3678",
+ "name": "Sinister Stranger"
+ },
+ {
+ "id": "3679",
+ "name": "Vestri"
+ },
+ {
+ "id": "3681",
+ "name": "Nigel"
+ },
+ {
+ "id": "3682",
+ "name": "Egg"
+ },
+ {
+ "id": "3683",
+ "name": "Egg"
+ },
+ {
+ "id": "3684",
+ "name": "Egg"
+ },
+ {
+ "id": "3685",
+ "name": "Egg"
+ },
+ {
+ "id": "3686",
+ "name": "Chocolate kebbit"
+ },
+ {
+ "id": "3687",
+ "name": "Chocolate kebbit"
+ },
+ {
+ "id": "3688",
+ "name": "Easter Bunny"
+ },
+ {
+ "id": "3689",
+ "name": "Egg"
+ },
+ {
+ "id": "3690",
+ "name": "Egg"
+ },
+ {
+ "id": "3691",
+ "name": "Egg"
+ },
+ {
+ "id": "3692",
+ "name": "Egg"
+ },
+ {
+ "id": "3693",
+ "name": "Egg"
+ },
+ {
+ "id": "3694",
+ "name": "Egg"
+ },
+ {
+ "id": "3695",
+ "name": "Volf Olafson"
+ },
+ {
+ "id": "3696",
+ "name": "Ingrid Hradson"
+ },
+ {
+ "id": "3708",
+ "name": "Boulder"
+ },
+ {
+ "id": "3710",
+ "name": "Ulfric"
+ },
+ {
+ "id": "3712",
+ "name": "Zanik"
+ },
+ {
+ "id": "3713",
+ "name": "Sigmund"
+ },
+ {
+ "id": "3714",
+ "name": "Zanik"
+ },
+ {
+ "id": "3716",
+ "name": "Sigmund"
+ },
+ {
+ "id": "3717",
+ "name": "Sigmund"
+ },
+ {
+ "id": "3718",
+ "name": "Sigmund"
+ },
+ {
+ "id": "3719",
+ "name": "Sigmund"
+ },
+ {
+ "id": "3720",
+ "name": "Sigmund"
+ },
+ {
+ "id": "3721",
+ "name": "Zanik"
+ },
+ {
+ "id": "3722",
+ "name": "Zanik"
+ },
+ {
+ "id": "3723",
+ "name": "General Bentnoze"
+ },
+ {
+ "id": "3724",
+ "name": "General Wartface"
+ },
+ {
+ "id": "3725",
+ "name": "Grubfoot"
+ },
+ {
+ "id": "3778",
+ "name": "Arthur"
+ },
+ {
+ "id": "3780",
+ "name": "Squire"
+ },
+ {
+ "id": "3787",
+ "name": "Sir Palomedes"
+ },
+ {
+ "id": "3789",
+ "name": "Void Knight"
+ },
+ {
+ "id": "3803",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "3817",
+ "name": "Lieutenant Schepbur"
+ },
+ {
+ "id": "3820",
+ "name": "Wise Old Man"
+ },
+ {
+ "id": "3825",
+ "name": "Devin Mendelberg"
+ },
+ {
+ "id": "3826",
+ "name": "George Laxmeister"
+ },
+ {
+ "id": "3827",
+ "name": "Ramara du Croissant"
+ },
+ {
+ "id": "3828",
+ "name": "Kathy Corkat"
+ },
+ {
+ "id": "3831",
+ "name": "Kathy Corkat"
+ },
+ {
+ "id": "3832",
+ "name": "Kalphite Queen"
+ },
+ {
+ "id": "3837",
+ "name": "Drunken Dwarf"
+ },
+ {
+ "id": "3838",
+ "name": "Wise Old Man"
+ },
+ {
+ "id": "3839",
+ "name": "Wise Old Man"
+ },
+ {
+ "id": "3841",
+ "name": "Sea troll"
+ },
+ {
+ "id": "3842",
+ "name": "Sea troll"
+ },
+ {
+ "id": "3844",
+ "name": "Skeleton Mage"
+ },
+ {
+ "id": "3845",
+ "name": "Sea troll"
+ },
+ {
+ "id": "3846",
+ "name": "Sea Troll General"
+ },
+ {
+ "id": "3848",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "3850",
+ "name": "Skeleton Mage"
+ },
+ {
+ "id": "3852",
+ "name": "Suspect"
+ },
+ {
+ "id": "3853",
+ "name": "Suspect"
+ },
+ {
+ "id": "3854",
+ "name": "Suspect"
+ },
+ {
+ "id": "3855",
+ "name": "Suspect"
+ },
+ {
+ "id": "3856",
+ "name": "Suspect"
+ },
+ {
+ "id": "3857",
+ "name": "Suspect"
+ },
+ {
+ "id": "3858",
+ "name": "Suspect"
+ },
+ {
+ "id": "3859",
+ "name": "Suspect"
+ },
+ {
+ "id": "3860",
+ "name": "Suspect"
+ },
+ {
+ "id": "3861",
+ "name": "Suspect"
+ },
+ {
+ "id": "3862",
+ "name": "Suspect"
+ },
+ {
+ "id": "3863",
+ "name": "Suspect"
+ },
+ {
+ "id": "3864",
+ "name": "Suspect"
+ },
+ {
+ "id": "3865",
+ "name": "Suspect"
+ },
+ {
+ "id": "3866",
+ "name": "Suspect"
+ },
+ {
+ "id": "3867",
+ "name": "Suspect"
+ },
+ {
+ "id": "3868",
+ "name": "Suspect"
+ },
+ {
+ "id": "3869",
+ "name": "Suspect"
+ },
+ {
+ "id": "3870",
+ "name": "Suspect"
+ },
+ {
+ "id": "3871",
+ "name": "Suspect"
+ },
+ {
+ "id": "3872",
+ "name": "Suspect"
+ },
+ {
+ "id": "3873",
+ "name": "Suspect"
+ },
+ {
+ "id": "3874",
+ "name": "Suspect"
+ },
+ {
+ "id": "3875",
+ "name": "Suspect"
+ },
+ {
+ "id": "3876",
+ "name": "Suspect"
+ },
+ {
+ "id": "3877",
+ "name": "Suspect"
+ },
+ {
+ "id": "3878",
+ "name": "Suspect"
+ },
+ {
+ "id": "3879",
+ "name": "Suspect"
+ },
+ {
+ "id": "3880",
+ "name": "Suspect"
+ },
+ {
+ "id": "3881",
+ "name": "Suspect"
+ },
+ {
+ "id": "3882",
+ "name": "Suspect"
+ },
+ {
+ "id": "3883",
+ "name": "Suspect"
+ },
+ {
+ "id": "3884",
+ "name": "Suspect"
+ },
+ {
+ "id": "3885",
+ "name": "Suspect"
+ },
+ {
+ "id": "3886",
+ "name": "Suspect"
+ },
+ {
+ "id": "3887",
+ "name": "Suspect"
+ },
+ {
+ "id": "3888",
+ "name": "Suspect"
+ },
+ {
+ "id": "3889",
+ "name": "Suspect"
+ },
+ {
+ "id": "3890",
+ "name": "Suspect"
+ },
+ {
+ "id": "3891",
+ "name": "Suspect"
+ },
+ {
+ "id": "3892",
+ "name": "Molly"
+ },
+ {
+ "id": "3893",
+ "name": "Molly"
+ },
+ {
+ "id": "3894",
+ "name": "Molly"
+ },
+ {
+ "id": "3895",
+ "name": "Molly"
+ },
+ {
+ "id": "3896",
+ "name": "Molly"
+ },
+ {
+ "id": "3897",
+ "name": "Molly"
+ },
+ {
+ "id": "3898",
+ "name": "Molly"
+ },
+ {
+ "id": "3899",
+ "name": "Molly"
+ },
+ {
+ "id": "3900",
+ "name": "Molly"
+ },
+ {
+ "id": "3901",
+ "name": "Molly"
+ },
+ {
+ "id": "3902",
+ "name": "Molly"
+ },
+ {
+ "id": "3903",
+ "name": "Molly"
+ },
+ {
+ "id": "3904",
+ "name": "Molly"
+ },
+ {
+ "id": "3905",
+ "name": "Molly"
+ },
+ {
+ "id": "3906",
+ "name": "Molly"
+ },
+ {
+ "id": "3907",
+ "name": "Molly"
+ },
+ {
+ "id": "3908",
+ "name": "Molly"
+ },
+ {
+ "id": "3909",
+ "name": "Molly"
+ },
+ {
+ "id": "3910",
+ "name": "Molly"
+ },
+ {
+ "id": "3911",
+ "name": "Molly"
+ },
+ {
+ "id": "3912",
+ "name": "Flippa"
+ },
+ {
+ "id": "3913",
+ "name": "Tilt"
+ },
+ {
+ "id": "3914",
+ "name": "Gardener"
+ },
+ {
+ "id": "3918",
+ "name": "Prince Brand"
+ },
+ {
+ "id": "3919",
+ "name": "Princess Astrid"
+ },
+ {
+ "id": "3920",
+ "name": "Runa"
+ },
+ {
+ "id": "3923",
+ "name": "Osvald"
+ },
+ {
+ "id": "3924",
+ "name": "Runolf"
+ },
+ {
+ "id": "3926",
+ "name": "Ingrid"
+ },
+ {
+ "id": "3928",
+ "name": "Signy"
+ },
+ {
+ "id": "3929",
+ "name": "Hild"
+ },
+ {
+ "id": "3930",
+ "name": "Armod"
+ },
+ {
+ "id": "3931",
+ "name": "Beigarth"
+ },
+ {
+ "id": "3932",
+ "name": "Reinn"
+ },
+ {
+ "id": "3936",
+ "name": "Thorodin"
+ },
+ {
+ "id": "3944",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3945",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3946",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3947",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3948",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3949",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3950",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3951",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3952",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3953",
+ "name": "Hangman game"
+ },
+ {
+ "id": "3954",
+ "name": "Treasure fairy"
+ },
+ {
+ "id": "3955",
+ "name": "Jacky Jester"
+ },
+ {
+ "id": "3956",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3957",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3958",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3959",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3960",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3961",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3962",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3963",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3964",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3965",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3966",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3967",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3968",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3969",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3970",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3971",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3972",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3973",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3974",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3975",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3976",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3977",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3978",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3979",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3980",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3981",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3982",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3983",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3984",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3985",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3986",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3987",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3988",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3989",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3990",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3991",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3992",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3993",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3994",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3995",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3996",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3997",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3998",
+ "name": "Combat stone"
+ },
+ {
+ "id": "3999",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4000",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4001",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4002",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4003",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4004",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4005",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4006",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4007",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4008",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4009",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4010",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4011",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4012",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4013",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4014",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4015",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4016",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4017",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4018",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4019",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4020",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4021",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4022",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4023",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4024",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4025",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4026",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4027",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4028",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4029",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4030",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4031",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4032",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4033",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4034",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4035",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4036",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4037",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4038",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4039",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4040",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4041",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4042",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4043",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4044",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4045",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4046",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4047",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4048",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4049",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4050",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4051",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4052",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4053",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4054",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4055",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4056",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4057",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4058",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4059",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4060",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4061",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4062",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4063",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4064",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4065",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4066",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4067",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4068",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4069",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4070",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4071",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4072",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4073",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4074",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4075",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4076",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4077",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4078",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4079",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4080",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4081",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4082",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4083",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4084",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4085",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4086",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4087",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4088",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4089",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4090",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4091",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4092",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4093",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4094",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4095",
+ "name": "Elemental balance"
+ },
+ {
+ "id": "4096",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4097",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4098",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4099",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4100",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4101",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4102",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4103",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4104",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4105",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4106",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4107",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4108",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4109",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4110",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4111",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4112",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4113",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4114",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4115",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4116",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4117",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4118",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4119",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4120",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4121",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4122",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4123",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4124",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4125",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4126",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4127",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4128",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4129",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4130",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4131",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4132",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4133",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4134",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4135",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4136",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4137",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4138",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4139",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4140",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4141",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4142",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4143",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4144",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4145",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4146",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4147",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4148",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4149",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4150",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4151",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4152",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4153",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4154",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4155",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4156",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4157",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4158",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4159",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4160",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4161",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4162",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4163",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4164",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4165",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4166",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4167",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4168",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4169",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4170",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4171",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4172",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4173",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4174",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4175",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4176",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4177",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4178",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4179",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4180",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4181",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4182",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4183",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4184",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4185",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4186",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4187",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4188",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4189",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4190",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4191",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4192",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4193",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4194",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4195",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4196",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4197",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4198",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4199",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4200",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4201",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4202",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4203",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4204",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4205",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4206",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4207",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4208",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4209",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4210",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4211",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4212",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4213",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4214",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4215",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4216",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4217",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4218",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4219",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4220",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4221",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4222",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4223",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4224",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4225",
+ "name": "Combat stone"
+ },
+ {
+ "id": "4226",
+ "name": "Crawling hand"
+ },
+ {
+ "id": "4231",
+ "name": "Left head"
+ },
+ {
+ "id": "4232",
+ "name": "Middle head"
+ },
+ {
+ "id": "4233",
+ "name": "Right head"
+ },
+ {
+ "id": "4234",
+ "name": "Kalphite Queen"
+ },
+ {
+ "id": "4235",
+ "name": "Rick"
+ },
+ {
+ "id": "4236",
+ "name": "Maid"
+ },
+ {
+ "id": "4238",
+ "name": "Cook"
+ },
+ {
+ "id": "4240",
+ "name": "Butler"
+ },
+ {
+ "id": "4242",
+ "name": "Demon butler"
+ },
+ {
+ "id": "4244",
+ "name": "Chief servant"
+ },
+ {
+ "id": "4253",
+ "name": "Guard"
+ },
+ {
+ "id": "4277",
+ "name": "Buinn"
+ },
+ {
+ "id": "4312",
+ "name": "Nardok"
+ },
+ {
+ "id": "4313",
+ "name": "Dartog"
+ },
+ {
+ "id": "4315",
+ "name": "Dwarf"
+ },
+ {
+ "id": "4317",
+ "name": "H.A.M. Member"
+ },
+ {
+ "id": "4319",
+ "name": "H.A.M. Member"
+ },
+ {
+ "id": "4321",
+ "name": "Zanik"
+ },
+ {
+ "id": "4323",
+ "name": "Zanik"
+ },
+ {
+ "id": "4324",
+ "name": "Zanik"
+ },
+ {
+ "id": "4325",
+ "name": "Light creature"
+ },
+ {
+ "id": "4326",
+ "name": "Zanik"
+ },
+ {
+ "id": "4327",
+ "name": "HAM member"
+ },
+ {
+ "id": "4328",
+ "name": "Sigmund"
+ },
+ {
+ "id": "4330",
+ "name": "Johanhus Ulsbrecht"
+ },
+ {
+ "id": "4331",
+ "name": "Sigmund"
+ },
+ {
+ "id": "4332",
+ "name": "Sigmund"
+ },
+ {
+ "id": "4333",
+ "name": "Sigmund"
+ },
+ {
+ "id": "4334",
+ "name": "Sigmund"
+ },
+ {
+ "id": "4335",
+ "name": "Sigmund"
+ },
+ {
+ "id": "4337",
+ "name": "Zanik"
+ },
+ {
+ "id": "4338",
+ "name": "Zanik"
+ },
+ {
+ "id": "4340",
+ "name": "Zanik"
+ },
+ {
+ "id": "4341",
+ "name": "Zanik"
+ },
+ {
+ "id": "4342",
+ "name": "Zanik"
+ },
+ {
+ "id": "4346",
+ "name": "Crab"
+ },
+ {
+ "id": "4358",
+ "name": "Cavey Davey"
+ },
+ {
+ "id": "4360",
+ "name": "San Fan"
+ },
+ {
+ "id": "4364",
+ "name": "Swarm"
+ },
+ {
+ "id": "4365",
+ "name": "Blue Monkey"
+ },
+ {
+ "id": "4374",
+ "name": "Parrot"
+ },
+ {
+ "id": "4377",
+ "name": "Gate of War"
+ },
+ {
+ "id": "4378",
+ "name": "Ricketty door"
+ },
+ {
+ "id": "4379",
+ "name": "Oozing barrier"
+ },
+ {
+ "id": "4380",
+ "name": "Portal of Death"
+ },
+ {
+ "id": "4416",
+ "name": "Bee keeper"
+ },
+ {
+ "id": "4417",
+ "name": "Bees!"
+ },
+ {
+ "id": "4420",
+ "name": "Fairy Godfather"
+ },
+ {
+ "id": "4435",
+ "name": "Fairy Queen"
+ },
+ {
+ "id": "4442",
+ "name": "Fairy Very Wise"
+ },
+ {
+ "id": "4444",
+ "name": "Fairy"
+ },
+ {
+ "id": "4445",
+ "name": "Fairy"
+ },
+ {
+ "id": "4446",
+ "name": "Fairy"
+ },
+ {
+ "id": "4447",
+ "name": "Rabbit"
+ },
+ {
+ "id": "4448",
+ "name": "Rabbit"
+ },
+ {
+ "id": "4449",
+ "name": "Butterfly"
+ },
+ {
+ "id": "4450",
+ "name": "Butterfly"
+ },
+ {
+ "id": "4451",
+ "name": "Starflower"
+ },
+ {
+ "id": "4452",
+ "name": "Starflower"
+ },
+ {
+ "id": "4453",
+ "name": "Fairy Fixit"
+ },
+ {
+ "id": "4456",
+ "name": "Ork"
+ },
+ {
+ "id": "4460",
+ "name": "Fake Man"
+ },
+ {
+ "id": "4461",
+ "name": "Held vampyre juvinate"
+ },
+ {
+ "id": "4462",
+ "name": "Held vampyre juvinate"
+ },
+ {
+ "id": "4463",
+ "name": "Angry juvinate"
+ },
+ {
+ "id": "4464",
+ "name": "Angry juvinate"
+ },
+ {
+ "id": "4465",
+ "name": "Angry juvinate"
+ },
+ {
+ "id": "4466",
+ "name": "Benjamin"
+ },
+ {
+ "id": "4467",
+ "name": "Liam"
+ },
+ {
+ "id": "4468",
+ "name": "Miala"
+ },
+ {
+ "id": "4469",
+ "name": "Verak"
+ },
+ {
+ "id": "4471",
+ "name": "Bogrog"
+ },
+ {
+ "id": "4473",
+ "name": "Woman"
+ },
+ {
+ "id": "4475",
+ "name": "Ned"
+ },
+ {
+ "id": "4477",
+ "name": "Annoyed guardian mummy"
+ },
+ {
+ "id": "4478",
+ "name": "Tarik"
+ },
+ {
+ "id": "4493",
+ "name": "General Bentnoze"
+ },
+ {
+ "id": "4495",
+ "name": "Grubfoot"
+ },
+ {
+ "id": "4497",
+ "name": "Grubfoot"
+ },
+ {
+ "id": "4498",
+ "name": "Grubfoot"
+ },
+ {
+ "id": "4500",
+ "name": "Scarab swarm"
+ },
+ {
+ "id": "4508",
+ "name": "Ethereal Mimic"
+ },
+ {
+ "id": "4513",
+ "name": "Baba Yaga"
+ },
+ {
+ "id": "4514",
+ "name": "Pauline Polaris"
+ },
+ {
+ "id": "4515",
+ "name": "Meteora"
+ },
+ {
+ "id": "4516",
+ "name": "Melana Moonlander"
+ },
+ {
+ "id": "4517",
+ "name": "Selene"
+ },
+ {
+ "id": "4518",
+ "name": "Rimae Sirsalis"
+ },
+ {
+ "id": "4519",
+ "name": "Sirsal Banker"
+ },
+ {
+ "id": "4520",
+ "name": "Clan Guard"
+ },
+ {
+ "id": "4522",
+ "name": "Enchanted Broom"
+ },
+ {
+ "id": "4523",
+ "name": "Enchanted Broom"
+ },
+ {
+ "id": "4525",
+ "name": "Enchanted Bucket"
+ },
+ {
+ "id": "4526",
+ "name": "Bouquet Mac Hyacinth"
+ },
+ {
+ "id": "4535",
+ "name": "Parrot"
+ },
+ {
+ "id": "4536",
+ "name": "Lokar Searunner"
+ },
+ {
+ "id": "4538",
+ "name": "Cabin boy"
+ },
+ {
+ "id": "4544",
+ "name": "'Bird's-Eye' Jack"
+ },
+ {
+ "id": "4552",
+ "name": "Palmer"
+ },
+ {
+ "id": "4553",
+ "name": "'Betty' B.Boppin"
+ },
+ {
+ "id": "4558",
+ "name": "Hirko"
+ },
+ {
+ "id": "4559",
+ "name": "Holoy"
+ },
+ {
+ "id": "4563",
+ "name": "Hura"
+ },
+ {
+ "id": "4569",
+ "name": "Nick"
+ },
+ {
+ "id": "4570",
+ "name": "Crow"
+ },
+ {
+ "id": "4571",
+ "name": "Crow"
+ },
+ {
+ "id": "4572",
+ "name": "Gianne jnr."
+ },
+ {
+ "id": "4573",
+ "name": "Timble"
+ },
+ {
+ "id": "4574",
+ "name": "Tamble"
+ },
+ {
+ "id": "4575",
+ "name": "Spang"
+ },
+ {
+ "id": "4576",
+ "name": "Brambickle"
+ },
+ {
+ "id": "4577",
+ "name": "Wingstone"
+ },
+ {
+ "id": "4578",
+ "name": "Penwie"
+ },
+ {
+ "id": "4583",
+ "name": "Professor Manglethorp"
+ },
+ {
+ "id": "4584",
+ "name": "Damwin"
+ },
+ {
+ "id": "4586",
+ "name": "Professor Imblewyn"
+ },
+ {
+ "id": "4587",
+ "name": "Perrdur"
+ },
+ {
+ "id": "4588",
+ "name": "Dalila"
+ },
+ {
+ "id": "4591",
+ "name": "Eebel"
+ },
+ {
+ "id": "4592",
+ "name": "Ermin"
+ },
+ {
+ "id": "4596",
+ "name": "Captain Lamdoo"
+ },
+ {
+ "id": "4597",
+ "name": "Meegle"
+ },
+ {
+ "id": "4598",
+ "name": "Wurbel"
+ },
+ {
+ "id": "4599",
+ "name": "Sarble"
+ },
+ {
+ "id": "4601",
+ "name": "Burkor"
+ },
+ {
+ "id": "4602",
+ "name": "Froono"
+ },
+ {
+ "id": "4609",
+ "name": "Brimstail"
+ },
+ {
+ "id": "4612",
+ "name": "Gnome shop keeper"
+ },
+ {
+ "id": "4613",
+ "name": "Cute creature"
+ },
+ {
+ "id": "4616",
+ "name": "Cute creature"
+ },
+ {
+ "id": "4618",
+ "name": "Evil creature"
+ },
+ {
+ "id": "4619",
+ "name": "Cute creature"
+ },
+ {
+ "id": "4621",
+ "name": "Evil creature"
+ },
+ {
+ "id": "4622",
+ "name": "Cute creature"
+ },
+ {
+ "id": "4624",
+ "name": "Evil creature"
+ },
+ {
+ "id": "4625",
+ "name": "Cute creature"
+ },
+ {
+ "id": "4627",
+ "name": "Evil creature"
+ },
+ {
+ "id": "4628",
+ "name": "Cute creature"
+ },
+ {
+ "id": "4630",
+ "name": "Evil creature"
+ },
+ {
+ "id": "4631",
+ "name": "fluffie"
+ },
+ {
+ "id": "4632",
+ "name": "fluffie"
+ },
+ {
+ "id": "4644",
+ "name": "Oaknock the Engineer"
+ },
+ {
+ "id": "4646",
+ "name": "King Healthorg"
+ },
+ {
+ "id": "4647",
+ "name": "Hazelmere"
+ },
+ {
+ "id": "4648",
+ "name": "Nisha"
+ },
+ {
+ "id": "4649",
+ "name": "Tyras guard"
+ },
+ {
+ "id": "4657",
+ "name": "Sir Prysin"
+ },
+ {
+ "id": "4658",
+ "name": "Dark wizard"
+ },
+ {
+ "id": "4662",
+ "name": "Denath"
+ },
+ {
+ "id": "4663",
+ "name": "Denath"
+ },
+ {
+ "id": "4664",
+ "name": "Wally"
+ },
+ {
+ "id": "4709",
+ "name": "Vertida Sefalatis"
+ },
+ {
+ "id": "4710",
+ "name": "Aeonisig Raispher"
+ },
+ {
+ "id": "4711",
+ "name": "Safalaan"
+ },
+ {
+ "id": "4714",
+ "name": "Sarius Guile"
+ },
+ {
+ "id": "4727",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4728",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4729",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4730",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4731",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4732",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4742",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4743",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4744",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4745",
+ "name": "Meiyerditch citizen"
+ },
+ {
+ "id": "4758",
+ "name": "Meiyerditch miner"
+ },
+ {
+ "id": "4760",
+ "name": "Meiyerditch miner"
+ },
+ {
+ "id": "4761",
+ "name": "Meiyerditch miner"
+ },
+ {
+ "id": "4762",
+ "name": "Shadowy figure"
+ },
+ {
+ "id": "4763",
+ "name": "Shadowy figure"
+ },
+ {
+ "id": "4764",
+ "name": "Shadowy figure"
+ },
+ {
+ "id": "4767",
+ "name": "Stray dog"
+ },
+ {
+ "id": "4769",
+ "name": "Cat"
+ },
+ {
+ "id": "4770",
+ "name": "Boat"
+ },
+ {
+ "id": "4771",
+ "name": "Boat"
+ },
+ {
+ "id": "4781",
+ "name": "Held vampyre juvinate"
+ },
+ {
+ "id": "4782",
+ "name": "Vampyre juvinate"
+ },
+ {
+ "id": "4783",
+ "name": "Former vampyre"
+ },
+ {
+ "id": "4784",
+ "name": "Former vampyre"
+ },
+ {
+ "id": "4785",
+ "name": "Former vampyre"
+ },
+ {
+ "id": "4786",
+ "name": "Former vampyre"
+ },
+ {
+ "id": "4787",
+ "name": "Former vampyre"
+ },
+ {
+ "id": "4788",
+ "name": "Former vampyre"
+ },
+ {
+ "id": "4790",
+ "name": "Angry vampyre"
+ },
+ {
+ "id": "4791",
+ "name": "Vanstrom Klause"
+ },
+ {
+ "id": "4792",
+ "name": "Vanstrom Klause"
+ },
+ {
+ "id": "4794",
+ "name": "Vanstrom Klause"
+ },
+ {
+ "id": "4795",
+ "name": "Vanstrom Klause"
+ },
+ {
+ "id": "4797",
+ "name": "Vanescula Drakan"
+ },
+ {
+ "id": "4798",
+ "name": "Vanescula Drakan"
+ },
+ {
+ "id": "4799",
+ "name": "Vanescula Drakan"
+ },
+ {
+ "id": "4800",
+ "name": "Vanescula Drakan"
+ },
+ {
+ "id": "4801",
+ "name": "Ranis Drakan"
+ },
+ {
+ "id": "4802",
+ "name": "Ranis Drakan"
+ },
+ {
+ "id": "4803",
+ "name": "Ranis Drakan"
+ },
+ {
+ "id": "4804",
+ "name": "Ranis Drakan"
+ },
+ {
+ "id": "4809",
+ "name": "Flying female vampire"
+ },
+ {
+ "id": "4846",
+ "name": "Flying female vampire"
+ },
+ {
+ "id": "4853",
+ "name": "Ezekial Lovecraft"
+ },
+ {
+ "id": "4857",
+ "name": "Sarius Guile"
+ },
+ {
+ "id": "4862",
+ "name": "Vanstrom Klause"
+ },
+ {
+ "id": "4863",
+ "name": "Kennith"
+ },
+ {
+ "id": "4864",
+ "name": "Kennith"
+ },
+ {
+ "id": "4865",
+ "name": "Holgart"
+ },
+ {
+ "id": "4867",
+ "name": "Holgart"
+ },
+ {
+ "id": "4869",
+ "name": "Fisherman"
+ },
+ {
+ "id": "4871",
+ "name": "Col. O'Niall"
+ },
+ {
+ "id": "4873",
+ "name": "Col. O'Niall"
+ },
+ {
+ "id": "4875",
+ "name": "Mayor Hobb"
+ },
+ {
+ "id": "4876",
+ "name": "Brother Maledict"
+ },
+ {
+ "id": "4879",
+ "name": "Brother Maledict"
+ },
+ {
+ "id": "4880",
+ "name": "Witchaven villager"
+ },
+ {
+ "id": "4884",
+ "name": "Witchaven villager"
+ },
+ {
+ "id": "4886",
+ "name": "Witchaven villager"
+ },
+ {
+ "id": "4888",
+ "name": "Witchaven villager"
+ },
+ {
+ "id": "4889",
+ "name": "Mother Mallum"
+ },
+ {
+ "id": "4891",
+ "name": "Giant lobster"
+ },
+ {
+ "id": "4896",
+ "name": "Jeb"
+ },
+ {
+ "id": "4897",
+ "name": "Sir Tinley"
+ },
+ {
+ "id": "4905",
+ "name": "Smithing Tutor"
+ },
+ {
+ "id": "4908",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "4912",
+ "name": "Jig cart"
+ },
+ {
+ "id": "4914",
+ "name": "Jig cart"
+ },
+ {
+ "id": "4915",
+ "name": "Jig cart"
+ },
+ {
+ "id": "4916",
+ "name": "Jig cart"
+ },
+ {
+ "id": "4917",
+ "name": "Jig cart"
+ },
+ {
+ "id": "4918",
+ "name": "Jig cart"
+ },
+ {
+ "id": "4919",
+ "name": "Abidor Crank"
+ },
+ {
+ "id": "4946",
+ "name": "Ignatius Vulcan"
+ },
+ {
+ "id": "4948",
+ "name": "My Arm"
+ },
+ {
+ "id": "4949",
+ "name": "My Arm"
+ },
+ {
+ "id": "4950",
+ "name": "My Arm"
+ },
+ {
+ "id": "4958",
+ "name": "My Arm"
+ },
+ {
+ "id": "4959",
+ "name": "My Arm"
+ },
+ {
+ "id": "4960",
+ "name": "Adventurer"
+ },
+ {
+ "id": "4961",
+ "name": "Captain Barnaby"
+ },
+ {
+ "id": "4963",
+ "name": "Murcaily"
+ },
+ {
+ "id": "4964",
+ "name": "Jagbakoba"
+ },
+ {
+ "id": "4966",
+ "name": "Flies"
+ },
+ {
+ "id": "4968",
+ "name": "Unnamed troll child"
+ },
+ {
+ "id": "4969",
+ "name": "Drunken dwarf's leg"
+ },
+ {
+ "id": "4970",
+ "name": "Baby Roc"
+ },
+ {
+ "id": "4973",
+ "name": "Shadow"
+ },
+ {
+ "id": "4974",
+ "name": "Captain Barnaby"
+ },
+ {
+ "id": "4976",
+ "name": "Male slave"
+ },
+ {
+ "id": "4978",
+ "name": "Female slave"
+ },
+ {
+ "id": "4979",
+ "name": "Cart Camel"
+ },
+ {
+ "id": "4980",
+ "name": "Mine Cart"
+ },
+ {
+ "id": "4981",
+ "name": "Mine Cart"
+ },
+ {
+ "id": "4982",
+ "name": "Ana"
+ },
+ {
+ "id": "4983",
+ "name": "Mercenary"
+ },
+ {
+ "id": "4984",
+ "name": "Irena"
+ },
+ {
+ "id": "5003",
+ "name": "Gublinch"
+ },
+ {
+ "id": "5018",
+ "name": "Gublinch"
+ },
+ {
+ "id": "5019",
+ "name": "Gublinch"
+ },
+ {
+ "id": "5020",
+ "name": "Jack"
+ },
+ {
+ "id": "5024",
+ "name": "Jill"
+ },
+ {
+ "id": "5025",
+ "name": "Jeff"
+ },
+ {
+ "id": "5044",
+ "name": "Penance Fighter"
+ },
+ {
+ "id": "5045",
+ "name": "Penance Fighter"
+ },
+ {
+ "id": "5046",
+ "name": "Jack"
+ },
+ {
+ "id": "5047",
+ "name": "Jill"
+ },
+ {
+ "id": "5049",
+ "name": "Auguste"
+ },
+ {
+ "id": "5050",
+ "name": "Auguste"
+ },
+ {
+ "id": "5051",
+ "name": "Auguste"
+ },
+ {
+ "id": "5052",
+ "name": "Auguste"
+ },
+ {
+ "id": "5053",
+ "name": "Assistant Serf"
+ },
+ {
+ "id": "5054",
+ "name": "Assistant Brock"
+ },
+ {
+ "id": "5055",
+ "name": "Assistant Marrow"
+ },
+ {
+ "id": "5056",
+ "name": "Assistant Le Smith"
+ },
+ {
+ "id": "5057",
+ "name": "Assistant Stan"
+ },
+ {
+ "id": "5058",
+ "name": "Bob"
+ },
+ {
+ "id": "5059",
+ "name": "Curly"
+ },
+ {
+ "id": "5060",
+ "name": "Moe"
+ },
+ {
+ "id": "5061",
+ "name": "Larry"
+ },
+ {
+ "id": "5062",
+ "name": "Shark"
+ },
+ {
+ "id": "5068",
+ "name": "Shark"
+ },
+ {
+ "id": "5069",
+ "name": "Shark"
+ },
+ {
+ "id": "5070",
+ "name": "Tropical wagtail"
+ },
+ {
+ "id": "5077",
+ "name": "Chinchompa"
+ },
+ {
+ "id": "5090",
+ "name": "Matthias"
+ },
+ {
+ "id": "5093",
+ "name": "Matthias"
+ },
+ {
+ "id": "5094",
+ "name": "Gyr Falcon"
+ },
+ {
+ "id": "5095",
+ "name": "Gyr Falcon"
+ },
+ {
+ "id": "5096",
+ "name": "Gyr Falcon"
+ },
+ {
+ "id": "5101",
+ "name": "Sabre-toothed kyatt"
+ },
+ {
+ "id": "5110",
+ "name": "Aleck"
+ },
+ {
+ "id": "5118",
+ "name": "Eagle"
+ },
+ {
+ "id": "5121",
+ "name": "Eagle"
+ },
+ {
+ "id": "5122",
+ "name": "Eagle"
+ },
+ {
+ "id": "5123",
+ "name": "Eagle"
+ },
+ {
+ "id": "5124",
+ "name": "Nickolaus"
+ },
+ {
+ "id": "5127",
+ "name": "Nickolaus"
+ },
+ {
+ "id": "5128",
+ "name": "Nickolaus"
+ },
+ {
+ "id": "5129",
+ "name": "Nickolaus"
+ },
+ {
+ "id": "5134",
+ "name": "Kebbit"
+ },
+ {
+ "id": "5138",
+ "name": "Charlie"
+ },
+ {
+ "id": "5139",
+ "name": "Boulder"
+ },
+ {
+ "id": "5141",
+ "name": "Uri"
+ },
+ {
+ "id": "5142",
+ "name": "Uri"
+ },
+ {
+ "id": "5143",
+ "name": "Uri"
+ },
+ {
+ "id": "5148",
+ "name": "Sheep"
+ },
+ {
+ "id": "5149",
+ "name": "Sheep"
+ },
+ {
+ "id": "5150",
+ "name": "Sheep"
+ },
+ {
+ "id": "5151",
+ "name": "Sheep"
+ },
+ {
+ "id": "5152",
+ "name": "Sheep"
+ },
+ {
+ "id": "5153",
+ "name": "Sheep"
+ },
+ {
+ "id": "5154",
+ "name": "Sheep"
+ },
+ {
+ "id": "5155",
+ "name": "Sheep"
+ },
+ {
+ "id": "5156",
+ "name": "Sheep"
+ },
+ {
+ "id": "5157",
+ "name": "Sheep"
+ },
+ {
+ "id": "5158",
+ "name": "Sheep"
+ },
+ {
+ "id": "5159",
+ "name": "Sheep"
+ },
+ {
+ "id": "5160",
+ "name": "Sheep"
+ },
+ {
+ "id": "5161",
+ "name": "Sheep"
+ },
+ {
+ "id": "5165",
+ "name": "Sheep"
+ },
+ {
+ "id": "5174",
+ "name": "Ogre chieftain"
+ },
+ {
+ "id": "5175",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "5177",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "5179",
+ "name": "Elkoy"
+ },
+ {
+ "id": "5180",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "5182",
+ "name": "Elkoy"
+ },
+ {
+ "id": "5183",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "5185",
+ "name": "Biggleswade"
+ },
+ {
+ "id": "5186",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "5189",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "5191",
+ "name": "Blaze Sharpeye"
+ },
+ {
+ "id": "5192",
+ "name": "Ogre shaman"
+ },
+ {
+ "id": "5194",
+ "name": "Blaze Sharpeye"
+ },
+ {
+ "id": "5199",
+ "name": "Witch"
+ },
+ {
+ "id": "5201",
+ "name": "Alice's husband"
+ },
+ {
+ "id": "5203",
+ "name": "Alice's husband"
+ },
+ {
+ "id": "5205",
+ "name": "Alice's husband"
+ },
+ {
+ "id": "5206",
+ "name": "Tree"
+ },
+ {
+ "id": "5208",
+ "name": "Undead tree"
+ },
+ {
+ "id": "5209",
+ "name": " Sneaky undead fowl"
+ },
+ {
+ "id": "5210",
+ "name": "Cow1337killr"
+ },
+ {
+ "id": "5212",
+ "name": "Alice"
+ },
+ {
+ "id": "5213",
+ "name": "Penance Fighter"
+ },
+ {
+ "id": "5214",
+ "name": "Penance Fighter"
+ },
+ {
+ "id": "5215",
+ "name": "Penance Fighter"
+ },
+ {
+ "id": "5216",
+ "name": "Penance Fighter"
+ },
+ {
+ "id": "5217",
+ "name": "Penance Fighter"
+ },
+ {
+ "id": "5218",
+ "name": "Penance Fighter"
+ },
+ {
+ "id": "5219",
+ "name": "Penance Fighter"
+ },
+ {
+ "id": "5220",
+ "name": "Penance Runner"
+ },
+ {
+ "id": "5221",
+ "name": "Penance Runner"
+ },
+ {
+ "id": "5222",
+ "name": "Penance Runner"
+ },
+ {
+ "id": "5223",
+ "name": "Penance Runner"
+ },
+ {
+ "id": "5224",
+ "name": "Penance Runner"
+ },
+ {
+ "id": "5225",
+ "name": "Penance Runner"
+ },
+ {
+ "id": "5226",
+ "name": "Penance Runner"
+ },
+ {
+ "id": "5227",
+ "name": "Penance Runner"
+ },
+ {
+ "id": "5228",
+ "name": "Penance Runner"
+ },
+ {
+ "id": "5230",
+ "name": "Penance Ranger"
+ },
+ {
+ "id": "5231",
+ "name": "Penance Ranger"
+ },
+ {
+ "id": "5232",
+ "name": "Penance Ranger"
+ },
+ {
+ "id": "5233",
+ "name": "Penance Ranger"
+ },
+ {
+ "id": "5234",
+ "name": "Penance Ranger"
+ },
+ {
+ "id": "5235",
+ "name": "Penance Ranger"
+ },
+ {
+ "id": "5236",
+ "name": "Penance Ranger"
+ },
+ {
+ "id": "5238",
+ "name": "Penance Healer"
+ },
+ {
+ "id": "5239",
+ "name": "Penance Healer"
+ },
+ {
+ "id": "5240",
+ "name": "Penance Healer"
+ },
+ {
+ "id": "5241",
+ "name": "Penance Healer"
+ },
+ {
+ "id": "5242",
+ "name": "Penance Healer"
+ },
+ {
+ "id": "5243",
+ "name": "Penance Healer"
+ },
+ {
+ "id": "5244",
+ "name": "Penance Healer"
+ },
+ {
+ "id": "5245",
+ "name": "Penance Healer"
+ },
+ {
+ "id": "5246",
+ "name": "Penance Healer"
+ },
+ {
+ "id": "5255",
+ "name": "Locust rider"
+ },
+ {
+ "id": "5256",
+ "name": "Locust rider"
+ },
+ {
+ "id": "5257",
+ "name": "Banker"
+ },
+ {
+ "id": "5259",
+ "name": "Banker"
+ },
+ {
+ "id": "5261",
+ "name": "Stonemason"
+ },
+ {
+ "id": "5263",
+ "name": "Nathifa"
+ },
+ {
+ "id": "5265",
+ "name": "Urbi"
+ },
+ {
+ "id": "5267",
+ "name": "Jamila"
+ },
+ {
+ "id": "5269",
+ "name": "Sophanem guard"
+ },
+ {
+ "id": "5271",
+ "name": "Sophanem guard"
+ },
+ {
+ "id": "5273",
+ "name": "Sophanem guard"
+ },
+ {
+ "id": "5275",
+ "name": "Sophanem guard"
+ },
+ {
+ "id": "5278",
+ "name": "Coenus"
+ },
+ {
+ "id": "5279",
+ "name": "Jex"
+ },
+ {
+ "id": "5280",
+ "name": "Maisa"
+ },
+ {
+ "id": "5282",
+ "name": "Osman"
+ },
+ {
+ "id": "5286",
+ "name": "Osman"
+ },
+ {
+ "id": "5287",
+ "name": "Osman"
+ },
+ {
+ "id": "5288",
+ "name": "Embalmer"
+ },
+ {
+ "id": "5289",
+ "name": "Carpenter"
+ },
+ {
+ "id": "5290",
+ "name": "Linen worker"
+ },
+ {
+ "id": "5291",
+ "name": "Priest"
+ },
+ {
+ "id": "5292",
+ "name": "Giant scarab"
+ },
+ {
+ "id": "5360",
+ "name": "Mummy ashes"
+ },
+ {
+ "id": "5383",
+ "name": "Odovacar"
+ },
+ {
+ "id": "5415",
+ "name": "Terror dog statue"
+ },
+ {
+ "id": "5416",
+ "name": "Terror dog statue"
+ },
+ {
+ "id": "5419",
+ "name": "Tarn"
+ },
+ {
+ "id": "5423",
+ "name": "Larry"
+ },
+ {
+ "id": "5425",
+ "name": "Larry"
+ },
+ {
+ "id": "5426",
+ "name": "Larry"
+ },
+ {
+ "id": "5427",
+ "name": "Penguin"
+ },
+ {
+ "id": "5429",
+ "name": "Penguin"
+ },
+ {
+ "id": "5430",
+ "name": "Penguin"
+ },
+ {
+ "id": "5431",
+ "name": "KGP Guard"
+ },
+ {
+ "id": "5432",
+ "name": "Pescaling Pax"
+ },
+ {
+ "id": "5433",
+ "name": "Ping"
+ },
+ {
+ "id": "5434",
+ "name": "Ping"
+ },
+ {
+ "id": "5435",
+ "name": "Pong"
+ },
+ {
+ "id": "5436",
+ "name": "Pong"
+ },
+ {
+ "id": "5437",
+ "name": "Ping"
+ },
+ {
+ "id": "5438",
+ "name": "Pong"
+ },
+ {
+ "id": "5443",
+ "name": "Noodle"
+ },
+ {
+ "id": "5445",
+ "name": "Penguin"
+ },
+ {
+ "id": "5446",
+ "name": "Penguin suit"
+ },
+ {
+ "id": "5449",
+ "name": "Penguin"
+ },
+ {
+ "id": "5450",
+ "name": "Penguin"
+ },
+ {
+ "id": "5451",
+ "name": "Penguin"
+ },
+ {
+ "id": "5456",
+ "name": "Crusher"
+ },
+ {
+ "id": "5457",
+ "name": "Crusher"
+ },
+ {
+ "id": "5458",
+ "name": "Crusher"
+ },
+ {
+ "id": "5459",
+ "name": "Crusher"
+ },
+ {
+ "id": "5460",
+ "name": "Tree"
+ },
+ {
+ "id": "5461",
+ "name": "Jungle Tree"
+ },
+ {
+ "id": "5462",
+ "name": "Tolna"
+ },
+ {
+ "id": "5463",
+ "name": "Honour guard"
+ },
+ {
+ "id": "5464",
+ "name": "Honour guard"
+ },
+ {
+ "id": "5465",
+ "name": "Fridleif Shieldson"
+ },
+ {
+ "id": "5466",
+ "name": "Thakkrad Sigmundson"
+ },
+ {
+ "id": "5467",
+ "name": "Iceberg"
+ },
+ {
+ "id": "5468",
+ "name": "Iceberg"
+ },
+ {
+ "id": "5469",
+ "name": "Arctic Pine"
+ },
+ {
+ "id": "5470",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "5471",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "5477",
+ "name": "Bork Sigmundson"
+ },
+ {
+ "id": "5481",
+ "name": "Mord Gunnars"
+ },
+ {
+ "id": "5482",
+ "name": "Mord Gunnars"
+ },
+ {
+ "id": "5498",
+ "name": "Miner"
+ },
+ {
+ "id": "5502",
+ "name": "Grundt"
+ },
+ {
+ "id": "5503",
+ "name": "Mawnis Burowgar"
+ },
+ {
+ "id": "5504",
+ "name": "Mawnis Burowgar"
+ },
+ {
+ "id": "5505",
+ "name": "Fridleif Shieldson"
+ },
+ {
+ "id": "5506",
+ "name": "Thakkrad Sigmundson"
+ },
+ {
+ "id": "5507",
+ "name": "Maria Gunnars"
+ },
+ {
+ "id": "5508",
+ "name": "Maria Gunnars"
+ },
+ {
+ "id": "5509",
+ "name": "Jofridr Mordstatter"
+ },
+ {
+ "id": "5510",
+ "name": "Morten Holdstrom"
+ },
+ {
+ "id": "5511",
+ "name": "Gunnar Holdstrom"
+ },
+ {
+ "id": "5512",
+ "name": "Anne Isaakson"
+ },
+ {
+ "id": "5513",
+ "name": "Lisse Isaakson"
+ },
+ {
+ "id": "5518",
+ "name": "Kjedelig Uppsen"
+ },
+ {
+ "id": "5519",
+ "name": "Trogen Konungarde"
+ },
+ {
+ "id": "5520",
+ "name": "Slug Hemligssen"
+ },
+ {
+ "id": "5528",
+ "name": "Ice troll grunt"
+ },
+ {
+ "id": "5530",
+ "name": "Sorceress"
+ },
+ {
+ "id": "5560",
+ "name": "Osman"
+ },
+ {
+ "id": "5562",
+ "name": "Del-Monty"
+ },
+ {
+ "id": "5564",
+ "name": "Bouncer"
+ },
+ {
+ "id": "5565",
+ "name": "Bouncer"
+ },
+ {
+ "id": "5566",
+ "name": "General Khazard"
+ },
+ {
+ "id": "5567",
+ "name": "Scout"
+ },
+ {
+ "id": "5568",
+ "name": "Scout"
+ },
+ {
+ "id": "5569",
+ "name": "Scout"
+ },
+ {
+ "id": "5570",
+ "name": "Scout"
+ },
+ {
+ "id": "5573",
+ "name": "Effigy"
+ },
+ {
+ "id": "5579",
+ "name": "Effigy"
+ },
+ {
+ "id": "5580",
+ "name": "Bonafido"
+ },
+ {
+ "id": "5582",
+ "name": "Homunculus"
+ },
+ {
+ "id": "5583",
+ "name": "Homunculus"
+ },
+ {
+ "id": "5585",
+ "name": "'Transmute' The Alchemist"
+ },
+ {
+ "id": "5586",
+ "name": "'Transmute' The Alchemist"
+ },
+ {
+ "id": "5587",
+ "name": "'Currency' The Alchemist"
+ },
+ {
+ "id": "5588",
+ "name": "'Currency' The Alchemist"
+ },
+ {
+ "id": "5592",
+ "name": "'The Guns'"
+ },
+ {
+ "id": "5598",
+ "name": "Unicow"
+ },
+ {
+ "id": "5604",
+ "name": "Elfinlocks"
+ },
+ {
+ "id": "5605",
+ "name": "Clockwork cat"
+ },
+ {
+ "id": "5606",
+ "name": "Clockwork cat"
+ },
+ {
+ "id": "5612",
+ "name": "Rufus"
+ },
+ {
+ "id": "5613",
+ "name": "Mi-Gor"
+ },
+ {
+ "id": "5615",
+ "name": "Puffin"
+ },
+ {
+ "id": "5616",
+ "name": "Brother Tranquility"
+ },
+ {
+ "id": "5617",
+ "name": "Brother Tranquility"
+ },
+ {
+ "id": "5618",
+ "name": "Brother Tranquility"
+ },
+ {
+ "id": "5623",
+ "name": "Zombie monk"
+ },
+ {
+ "id": "5624",
+ "name": "Zombie monk"
+ },
+ {
+ "id": "5625",
+ "name": "Zombie monk"
+ },
+ {
+ "id": "5626",
+ "name": "Zombie monk"
+ },
+ {
+ "id": "5667",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5679",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5681",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5682",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5683",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5684",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5685",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5686",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5687",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5688",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5689",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5690",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5691",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5692",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5693",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5694",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5695",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5696",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5697",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5698",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5699",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5700",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5701",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5702",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5703",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5704",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5705",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5706",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5707",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5708",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5709",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5710",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5711",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5712",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5713",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5714",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5715",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5716",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5717",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5718",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5719",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5720",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5721",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5722",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5723",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5724",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5725",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5726",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5727",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5728",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5729",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5730",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5731",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5732",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5733",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5734",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5735",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5736",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5737",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5738",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5739",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5740",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5741",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5742",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5743",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5744",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5745",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5746",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5747",
+ "name": "Undead Lumberjack"
+ },
+ {
+ "id": "5748",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "5749",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "5770",
+ "name": "Ur-zek"
+ },
+ {
+ "id": "5771",
+ "name": "Ur-vass"
+ },
+ {
+ "id": "5772",
+ "name": "Ur-taal"
+ },
+ {
+ "id": "5773",
+ "name": "Ur-meg"
+ },
+ {
+ "id": "5774",
+ "name": "Ur-lun"
+ },
+ {
+ "id": "5775",
+ "name": "Ur-pel"
+ },
+ {
+ "id": "5778",
+ "name": "Bartak"
+ },
+ {
+ "id": "5779",
+ "name": "Turgall"
+ },
+ {
+ "id": "5780",
+ "name": "Reldak"
+ },
+ {
+ "id": "5781",
+ "name": "Miltog"
+ },
+ {
+ "id": "5782",
+ "name": "Mernik"
+ },
+ {
+ "id": "5787",
+ "name": "Gourmet"
+ },
+ {
+ "id": "5789",
+ "name": "Gourmet"
+ },
+ {
+ "id": "5790",
+ "name": "Gourmet"
+ },
+ {
+ "id": "5791",
+ "name": "Gourmet"
+ },
+ {
+ "id": "5792",
+ "name": "Turgok"
+ },
+ {
+ "id": "5793",
+ "name": "Markog"
+ },
+ {
+ "id": "5794",
+ "name": "Durgok"
+ },
+ {
+ "id": "5795",
+ "name": "Tindar"
+ },
+ {
+ "id": "5796",
+ "name": "Gundik"
+ },
+ {
+ "id": "5797",
+ "name": "Zenkog"
+ },
+ {
+ "id": "5798",
+ "name": "Lurgon"
+ },
+ {
+ "id": "5799",
+ "name": "Ur-tag"
+ },
+ {
+ "id": "5802",
+ "name": "Young 'un"
+ },
+ {
+ "id": "5804",
+ "name": "Tyke"
+ },
+ {
+ "id": "5806",
+ "name": "Nipper"
+ },
+ {
+ "id": "5825",
+ "name": "Movario"
+ },
+ {
+ "id": "5826",
+ "name": "Darve"
+ },
+ {
+ "id": "5828",
+ "name": "Barlak"
+ },
+ {
+ "id": "5830",
+ "name": "Rat Burgiss"
+ },
+ {
+ "id": "5835",
+ "name": "Surok Magis"
+ },
+ {
+ "id": "5836",
+ "name": "Zaff"
+ },
+ {
+ "id": "5837",
+ "name": "Anna Jones"
+ },
+ {
+ "id": "5838",
+ "name": "King Roald"
+ },
+ {
+ "id": "5839",
+ "name": "Mishkal'un Dorn"
+ },
+ {
+ "id": "5840",
+ "name": "Dakh'thoulan Aegis"
+ },
+ {
+ "id": "5841",
+ "name": "Sil'as Dahcsnu"
+ },
+ {
+ "id": "5853",
+ "name": "Bench"
+ },
+ {
+ "id": "5857",
+ "name": "Zanik"
+ },
+ {
+ "id": "5858",
+ "name": "Ur-tag"
+ },
+ {
+ "id": "5862",
+ "name": "Sigmund and Zanik"
+ },
+ {
+ "id": "5863",
+ "name": "Ambassador Alvijar"
+ },
+ {
+ "id": "5868",
+ "name": "Tegdak"
+ },
+ {
+ "id": "5869",
+ "name": "Zanik"
+ },
+ {
+ "id": "5871",
+ "name": "Sergeant Mossfists"
+ },
+ {
+ "id": "5872",
+ "name": "Sergeant Slimetoes"
+ },
+ {
+ "id": "5887",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "5894",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "5895",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "5896",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "5897",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "5898",
+ "name": "'Bird's-Eye' Jack"
+ },
+ {
+ "id": "5899",
+ "name": "The Inadequacy"
+ },
+ {
+ "id": "5907",
+ "name": "The Illusive"
+ },
+ {
+ "id": "5912",
+ "name": "Banker"
+ },
+ {
+ "id": "5913",
+ "name": "Banker"
+ },
+ {
+ "id": "5915",
+ "name": "Elsie"
+ },
+ {
+ "id": "5918",
+ "name": "Stray dog"
+ },
+ {
+ "id": "5932",
+ "name": "Barnabus Hurma"
+ },
+ {
+ "id": "5933",
+ "name": "Marius Giste"
+ },
+ {
+ "id": "5934",
+ "name": "Caden Azro"
+ },
+ {
+ "id": "5935",
+ "name": "Thias Leacke"
+ },
+ {
+ "id": "5936",
+ "name": "Sinco Doar"
+ },
+ {
+ "id": "5937",
+ "name": "Tinse Torpe"
+ },
+ {
+ "id": "5939",
+ "name": "Torrcs"
+ },
+ {
+ "id": "5940",
+ "name": "Marfet"
+ },
+ {
+ "id": "5941",
+ "name": "Museum guard"
+ },
+ {
+ "id": "5942",
+ "name": "Museum guard"
+ },
+ {
+ "id": "5943",
+ "name": "Museum guard"
+ },
+ {
+ "id": "5946",
+ "name": "Schoolboy"
+ },
+ {
+ "id": "5948",
+ "name": "Teacher and pupil"
+ },
+ {
+ "id": "5949",
+ "name": "Schoolboy"
+ },
+ {
+ "id": "5950",
+ "name": "Teacher"
+ },
+ {
+ "id": "5951",
+ "name": "Schoolgirl"
+ },
+ {
+ "id": "5953",
+ "name": "Workman"
+ },
+ {
+ "id": "5955",
+ "name": "Workman"
+ },
+ {
+ "id": "5957",
+ "name": "Schoolgirl"
+ },
+ {
+ "id": "5964",
+ "name": "Ed Wood"
+ },
+ {
+ "id": "5965",
+ "name": "Orlando Smith"
+ },
+ {
+ "id": "5967",
+ "name": "Natural historian"
+ },
+ {
+ "id": "5968",
+ "name": "Natural historian"
+ },
+ {
+ "id": "5969",
+ "name": "Natural historian"
+ },
+ {
+ "id": "5970",
+ "name": "Natural historian"
+ },
+ {
+ "id": "5983",
+ "name": "Schoolgirl"
+ },
+ {
+ "id": "5984",
+ "name": "Schoolgirl"
+ },
+ {
+ "id": "5985",
+ "name": "Schoolgirl"
+ },
+ {
+ "id": "5988",
+ "name": "Miazrqa"
+ },
+ {
+ "id": "5989",
+ "name": "Grimgnash"
+ },
+ {
+ "id": "5991",
+ "name": "Drain pipe"
+ },
+ {
+ "id": "5995",
+ "name": "Mouse"
+ },
+ {
+ "id": "5997",
+ "name": "Rupert the Beard"
+ },
+ {
+ "id": "6000",
+ "name": "Rupert the Beard"
+ },
+ {
+ "id": "6002",
+ "name": "Gnome"
+ },
+ {
+ "id": "6003",
+ "name": "Winkin"
+ },
+ {
+ "id": "6004",
+ "name": "Gnome"
+ },
+ {
+ "id": "6005",
+ "name": "Cage"
+ },
+ {
+ "id": "6071",
+ "name": "Immenizz"
+ },
+ {
+ "id": "6075",
+ "name": "Cyclops"
+ },
+ {
+ "id": "6082",
+ "name": "Captain Ned"
+ },
+ {
+ "id": "6085",
+ "name": "Cabin boy Jenkins"
+ },
+ {
+ "id": "6086",
+ "name": "Cabin boy Jenkins"
+ },
+ {
+ "id": "6087",
+ "name": "Elvarg"
+ },
+ {
+ "id": "6114",
+ "name": "Drake"
+ },
+ {
+ "id": "6119",
+ "name": "Observatory professor"
+ },
+ {
+ "id": "6130",
+ "name": "Clothears"
+ },
+ {
+ "id": "6138",
+ "name": "Town crier"
+ },
+ {
+ "id": "6139",
+ "name": "Town crier"
+ },
+ {
+ "id": "6158",
+ "name": "Sir Lucan"
+ },
+ {
+ "id": "6160",
+ "name": "Sir Lancelot"
+ },
+ {
+ "id": "6161",
+ "name": "Sir Bedivere"
+ },
+ {
+ "id": "6162",
+ "name": "Sir Tristram"
+ },
+ {
+ "id": "6163",
+ "name": "Sir Pelleas"
+ },
+ {
+ "id": "6164",
+ "name": "Sir Gawain"
+ },
+ {
+ "id": "6165",
+ "name": "Sir Kay"
+ },
+ {
+ "id": "6166",
+ "name": "Sir Pelleas"
+ },
+ {
+ "id": "6167",
+ "name": "Sir Gawain"
+ },
+ {
+ "id": "6168",
+ "name": "Sir Kay"
+ },
+ {
+ "id": "6171",
+ "name": "Sir Kay"
+ },
+ {
+ "id": "6172",
+ "name": "Sir Gawain"
+ },
+ {
+ "id": "6173",
+ "name": "Sir Lucan"
+ },
+ {
+ "id": "6174",
+ "name": "Bandit"
+ },
+ {
+ "id": "6175",
+ "name": "Sir Tristram"
+ },
+ {
+ "id": "6176",
+ "name": "Sir Pelleas"
+ },
+ {
+ "id": "6177",
+ "name": "Sir Bedivere"
+ },
+ {
+ "id": "6178",
+ "name": "Anna"
+ },
+ {
+ "id": "6179",
+ "name": "David"
+ },
+ {
+ "id": "6180",
+ "name": "Anna"
+ },
+ {
+ "id": "6181",
+ "name": "Court judge"
+ },
+ {
+ "id": "6182",
+ "name": "Jury"
+ },
+ {
+ "id": "6185",
+ "name": "Prosecutor"
+ },
+ {
+ "id": "6186",
+ "name": "Morgan Le Faye"
+ },
+ {
+ "id": "6191",
+ "name": "Sinclair"
+ },
+ {
+ "id": "6199",
+ "name": "Banker"
+ },
+ {
+ "id": "6202",
+ "name": "K'ril Tsutsaroth"
+ },
+ {
+ "id": "6284",
+ "name": "Warped terrorbird"
+ },
+ {
+ "id": "6298",
+ "name": "Jeffery"
+ },
+ {
+ "id": "6299",
+ "name": "Big monolith"
+ },
+ {
+ "id": "6300",
+ "name": "Small monolith"
+ },
+ {
+ "id": "6301",
+ "name": "Cute creature"
+ },
+ {
+ "id": "6302",
+ "name": "Evil creature"
+ },
+ {
+ "id": "6303",
+ "name": "Yewnock the engineer"
+ },
+ {
+ "id": "6304",
+ "name": "Bolrie"
+ },
+ {
+ "id": "6305",
+ "name": "Hazelmere"
+ },
+ {
+ "id": "6307",
+ "name": "Advisor"
+ },
+ {
+ "id": "6308",
+ "name": "King Argenthorg"
+ },
+ {
+ "id": "6309",
+ "name": "Prince Argenthorg"
+ },
+ {
+ "id": "6310",
+ "name": "Cute creature"
+ },
+ {
+ "id": "6312",
+ "name": "Evil creature"
+ },
+ {
+ "id": "6313",
+ "name": "Terrorbird servant"
+ },
+ {
+ "id": "6316",
+ "name": "Guard no. 21"
+ },
+ {
+ "id": "6317",
+ "name": "Guard no. 72"
+ },
+ {
+ "id": "6318",
+ "name": "Longramble"
+ },
+ {
+ "id": "6319",
+ "name": "Spirit tree"
+ },
+ {
+ "id": "6321",
+ "name": "Spirit tree"
+ },
+ {
+ "id": "6333",
+ "name": "Child"
+ },
+ {
+ "id": "6340",
+ "name": "Child"
+ },
+ {
+ "id": "6341",
+ "name": "Child"
+ },
+ {
+ "id": "6342",
+ "name": "Child"
+ },
+ {
+ "id": "6343",
+ "name": "Child"
+ },
+ {
+ "id": "6345",
+ "name": "Child"
+ },
+ {
+ "id": "6357",
+ "name": "Street urchin"
+ },
+ {
+ "id": "6359",
+ "name": "Street urchin"
+ },
+ {
+ "id": "6360",
+ "name": "Street urchin"
+ },
+ {
+ "id": "6361",
+ "name": "Street urchin"
+ },
+ {
+ "id": "6362",
+ "name": "Eniola"
+ },
+ {
+ "id": "6373",
+ "name": "Kennith"
+ },
+ {
+ "id": "6375",
+ "name": "Wizard Cromperty"
+ },
+ {
+ "id": "6384",
+ "name": "Karamjan Jungle Eagle"
+ },
+ {
+ "id": "6386",
+ "name": "Bandit"
+ },
+ {
+ "id": "6391",
+ "name": "Glough"
+ },
+ {
+ "id": "6392",
+ "name": "Oldak"
+ },
+ {
+ "id": "6393",
+ "name": "Zanik"
+ },
+ {
+ "id": "6394",
+ "name": "Zanik"
+ },
+ {
+ "id": "6396",
+ "name": "Zanik"
+ },
+ {
+ "id": "6398",
+ "name": "Zanik"
+ },
+ {
+ "id": "6400",
+ "name": "Oldak"
+ },
+ {
+ "id": "6468",
+ "name": "Skoblin"
+ },
+ {
+ "id": "6474",
+ "name": "Snothead"
+ },
+ {
+ "id": "6475",
+ "name": "Snailfeet"
+ },
+ {
+ "id": "6476",
+ "name": "Mosschin"
+ },
+ {
+ "id": "6477",
+ "name": "Redeyes"
+ },
+ {
+ "id": "6478",
+ "name": "Strongbones"
+ },
+ {
+ "id": "6479",
+ "name": "Grubfoot"
+ },
+ {
+ "id": "6480",
+ "name": "Grubfoot"
+ },
+ {
+ "id": "6483",
+ "name": "Priest"
+ },
+ {
+ "id": "6484",
+ "name": "Priest"
+ },
+ {
+ "id": "6485",
+ "name": "Priest"
+ },
+ {
+ "id": "6486",
+ "name": "Priest"
+ },
+ {
+ "id": "6487",
+ "name": "Priest"
+ },
+ {
+ "id": "6489",
+ "name": "High priest"
+ },
+ {
+ "id": "6505",
+ "name": "Registrar 1"
+ },
+ {
+ "id": "6511",
+ "name": "Jury"
+ },
+ {
+ "id": "6513",
+ "name": "Spectator"
+ },
+ {
+ "id": "6515",
+ "name": "Spectator"
+ },
+ {
+ "id": "6517",
+ "name": "Spectator"
+ },
+ {
+ "id": "6519",
+ "name": "Spectator"
+ },
+ {
+ "id": "6520",
+ "name": "Head Registrar"
+ },
+ {
+ "id": "6537",
+ "name": "Mandrith"
+ },
+ {
+ "id": "6538",
+ "name": "Banker"
+ },
+ {
+ "id": "6539",
+ "name": "Charley the Cleaner"
+ },
+ {
+ "id": "6540",
+ "name": "Scotty the Cleaner"
+ },
+ {
+ "id": "6541",
+ "name": "Sanchez the Cleaner"
+ },
+ {
+ "id": "6542",
+ "name": "Summer Bonde"
+ },
+ {
+ "id": "6566",
+ "name": "Broken grave marker"
+ },
+ {
+ "id": "6567",
+ "name": "Collapsing grave marker"
+ },
+ {
+ "id": "6568",
+ "name": "Grave marker"
+ },
+ {
+ "id": "6569",
+ "name": "Broken grave marker"
+ },
+ {
+ "id": "6570",
+ "name": "Collapsing grave marker"
+ },
+ {
+ "id": "6571",
+ "name": "Gravestone"
+ },
+ {
+ "id": "6572",
+ "name": "Broken gravestone"
+ },
+ {
+ "id": "6573",
+ "name": "Collapsing gravestone"
+ },
+ {
+ "id": "6574",
+ "name": "Gravestone"
+ },
+ {
+ "id": "6575",
+ "name": "Broken gravestone"
+ },
+ {
+ "id": "6576",
+ "name": "Collapsing gravestone"
+ },
+ {
+ "id": "6577",
+ "name": "Gravestone"
+ },
+ {
+ "id": "6578",
+ "name": "Broken gravestone"
+ },
+ {
+ "id": "6579",
+ "name": "Collapsing gravestone"
+ },
+ {
+ "id": "6580",
+ "name": "Stele"
+ },
+ {
+ "id": "6581",
+ "name": "Broken stele"
+ },
+ {
+ "id": "6582",
+ "name": "Collapsing stele"
+ },
+ {
+ "id": "6583",
+ "name": "Saradomin symbol"
+ },
+ {
+ "id": "6584",
+ "name": "Broken Saradomin symbol"
+ },
+ {
+ "id": "6585",
+ "name": "Collapsing Saradomin symbol"
+ },
+ {
+ "id": "6586",
+ "name": "Zamorak symbol"
+ },
+ {
+ "id": "6587",
+ "name": "Broken Zamorak symbol"
+ },
+ {
+ "id": "6588",
+ "name": "Collapsing Zamorak symbol"
+ },
+ {
+ "id": "6589",
+ "name": "Guthix symbol"
+ },
+ {
+ "id": "6590",
+ "name": "Broken Guthix symbol"
+ },
+ {
+ "id": "6591",
+ "name": "Collapsing Guthix symbol"
+ },
+ {
+ "id": "6592",
+ "name": "Bandos symbol"
+ },
+ {
+ "id": "6593",
+ "name": "Broken Bandos symbol"
+ },
+ {
+ "id": "6594",
+ "name": "Collapsing Bandos symbol"
+ },
+ {
+ "id": "6595",
+ "name": "Armadyl symbol"
+ },
+ {
+ "id": "6596",
+ "name": "Broken Armadyl symbol"
+ },
+ {
+ "id": "6597",
+ "name": "Collapsing Armadyl symbol"
+ },
+ {
+ "id": "6598",
+ "name": "Memorial stone"
+ },
+ {
+ "id": "6599",
+ "name": "Broken memorial stone"
+ },
+ {
+ "id": "6600",
+ "name": "Collapsing memorial stone"
+ },
+ {
+ "id": "6601",
+ "name": "Memorial stone"
+ },
+ {
+ "id": "6602",
+ "name": "Broken memorial stone"
+ },
+ {
+ "id": "6603",
+ "name": "Collapsing memorial stone"
+ },
+ {
+ "id": "6732",
+ "name": "Snow imp"
+ },
+ {
+ "id": "6733",
+ "name": "Snow imp"
+ },
+ {
+ "id": "6734",
+ "name": "Snow imp"
+ },
+ {
+ "id": "6735",
+ "name": "Snow imp"
+ },
+ {
+ "id": "6736",
+ "name": "Snow imp"
+ },
+ {
+ "id": "6737",
+ "name": "Snow imp"
+ },
+ {
+ "id": "6738",
+ "name": "Snow imp"
+ },
+ {
+ "id": "6741",
+ "name": "Snow"
+ },
+ {
+ "id": "6746",
+ "name": "Snowman"
+ },
+ {
+ "id": "6751",
+ "name": "Bulldog"
+ },
+ {
+ "id": "6753",
+ "name": "Mummy"
+ },
+ {
+ "id": "6754",
+ "name": "Mummy"
+ },
+ {
+ "id": "6755",
+ "name": "Mummy"
+ },
+ {
+ "id": "6756",
+ "name": "Mummy"
+ },
+ {
+ "id": "6757",
+ "name": "Mummy"
+ },
+ {
+ "id": "6758",
+ "name": "Mummy"
+ },
+ {
+ "id": "6759",
+ "name": "Mummy"
+ },
+ {
+ "id": "6760",
+ "name": "Mummy"
+ },
+ {
+ "id": "6771",
+ "name": "Giant scarab"
+ },
+ {
+ "id": "6775",
+ "name": "Scabaras priest"
+ },
+ {
+ "id": "6782",
+ "name": "Maisa"
+ },
+ {
+ "id": "6783",
+ "name": "Maisa"
+ },
+ {
+ "id": "6784",
+ "name": "Priest"
+ },
+ {
+ "id": "6791",
+ "name": "High Priest of Scabaras"
+ },
+ {
+ "id": "6792",
+ "name": "Vulture"
+ },
+ {
+ "id": "6793",
+ "name": "Spirit terrorbird"
+ },
+ {
+ "id": "6808",
+ "name": "Beaver"
+ },
+ {
+ "id": "6898",
+ "name": "Pet shop owner"
+ },
+ {
+ "id": "6899",
+ "name": "Bulldog"
+ },
+ {
+ "id": "6908",
+ "name": "Baby penguin"
+ },
+ {
+ "id": "6909",
+ "name": "Penguin"
+ },
+ {
+ "id": "6910",
+ "name": "Penguin"
+ },
+ {
+ "id": "6911",
+ "name": "Raven chick"
+ },
+ {
+ "id": "6912",
+ "name": "Raven"
+ },
+ {
+ "id": "6913",
+ "name": "Baby raccoon"
+ },
+ {
+ "id": "6914",
+ "name": "Raccoon"
+ },
+ {
+ "id": "6915",
+ "name": "Baby gecko"
+ },
+ {
+ "id": "6916",
+ "name": "Gecko"
+ },
+ {
+ "id": "6918",
+ "name": "Gecko"
+ },
+ {
+ "id": "6919",
+ "name": "Baby squirrel"
+ },
+ {
+ "id": "6920",
+ "name": "Squirrel"
+ },
+ {
+ "id": "6922",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6923",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6924",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6925",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6926",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6927",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6928",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6929",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6930",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6931",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6932",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6933",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6934",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6935",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6936",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6937",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6938",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6939",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6940",
+ "name": "Baby chameleon"
+ },
+ {
+ "id": "6941",
+ "name": "Chameleon"
+ },
+ {
+ "id": "6945",
+ "name": "Vulture chick"
+ },
+ {
+ "id": "6946",
+ "name": "Vulture"
+ },
+ {
+ "id": "6947",
+ "name": "Baby giant crab"
+ },
+ {
+ "id": "6948",
+ "name": "Giant crab"
+ },
+ {
+ "id": "6949",
+ "name": "Saradomin chick"
+ },
+ {
+ "id": "6950",
+ "name": "Saradomin bird"
+ },
+ {
+ "id": "6951",
+ "name": "Saradomin owl"
+ },
+ {
+ "id": "6952",
+ "name": "Zamorak chick"
+ },
+ {
+ "id": "6953",
+ "name": "Zamorak bird"
+ },
+ {
+ "id": "6954",
+ "name": "Zamorak hawk"
+ },
+ {
+ "id": "6955",
+ "name": "Guthix chick"
+ },
+ {
+ "id": "6956",
+ "name": "Guthix bird"
+ },
+ {
+ "id": "6957",
+ "name": "Guthix raptor"
+ },
+ {
+ "id": "6970",
+ "name": "Pikkupstix"
+ },
+ {
+ "id": "6988",
+ "name": "Giant wolpertinger"
+ },
+ {
+ "id": "6991",
+ "name": "Ibis"
+ },
+ {
+ "id": "6996",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "7000",
+ "name": "Dark Squall"
+ },
+ {
+ "id": "7002",
+ "name": "Surok Magis"
+ },
+ {
+ "id": "7006",
+ "name": "Grenwall"
+ },
+ {
+ "id": "7015",
+ "name": "Platypus"
+ },
+ {
+ "id": "7016",
+ "name": "Platypus"
+ },
+ {
+ "id": "7017",
+ "name": "Platypus"
+ },
+ {
+ "id": "7018",
+ "name": "Baby platypus"
+ },
+ {
+ "id": "7019",
+ "name": "Baby platypus"
+ },
+ {
+ "id": "7020",
+ "name": "Baby platypus"
+ },
+ {
+ "id": "7022",
+ "name": "Platypus"
+ },
+ {
+ "id": "7023",
+ "name": "Platypus"
+ },
+ {
+ "id": "7025",
+ "name": "Baby platypus"
+ },
+ {
+ "id": "7026",
+ "name": "Baby platypus"
+ },
+ {
+ "id": "7027",
+ "name": "Patrick"
+ },
+ {
+ "id": "7028",
+ "name": "Penelope"
+ },
+ {
+ "id": "7029",
+ "name": "Peter"
+ },
+ {
+ "id": "7030",
+ "name": "Peanut"
+ },
+ {
+ "id": "7032",
+ "name": "Diseased kebbit"
+ },
+ {
+ "id": "7040",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "7045",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "7046",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "7048",
+ "name": "Frawd"
+ },
+ {
+ "id": "7050",
+ "name": "Ogress banker"
+ },
+ {
+ "id": "7052",
+ "name": "Seegud"
+ },
+ {
+ "id": "7053",
+ "name": "Chargurr"
+ },
+ {
+ "id": "7054",
+ "name": "Chargurr"
+ },
+ {
+ "id": "7055",
+ "name": "Snurgh"
+ },
+ {
+ "id": "7058",
+ "name": "Kringk"
+ },
+ {
+ "id": "7059",
+ "name": "Thump"
+ },
+ {
+ "id": "7060",
+ "name": "Massage table"
+ },
+ {
+ "id": "7061",
+ "name": "Thump"
+ },
+ {
+ "id": "7062",
+ "name": "Muggh"
+ },
+ {
+ "id": "7063",
+ "name": "Kringk"
+ },
+ {
+ "id": "7064",
+ "name": "Hairdryer"
+ },
+ {
+ "id": "7065",
+ "name": "Snert"
+ },
+ {
+ "id": "7068",
+ "name": "Tyke"
+ },
+ {
+ "id": "7069",
+ "name": "Snarrl"
+ },
+ {
+ "id": "7070",
+ "name": "Snarrk"
+ },
+ {
+ "id": "7071",
+ "name": "I'rk"
+ },
+ {
+ "id": "7072",
+ "name": "Thuddley"
+ },
+ {
+ "id": "7073",
+ "name": "Grr'bah"
+ },
+ {
+ "id": "7074",
+ "name": "Chomp"
+ },
+ {
+ "id": "7075",
+ "name": "Grubb"
+ },
+ {
+ "id": "7076",
+ "name": "Grunther"
+ },
+ {
+ "id": "7077",
+ "name": "Glum"
+ },
+ {
+ "id": "7083",
+ "name": "Flying bugs"
+ },
+ {
+ "id": "7087",
+ "name": "Balnea"
+ },
+ {
+ "id": "7088",
+ "name": "Chief Tess"
+ },
+ {
+ "id": "7089",
+ "name": "Chargurr"
+ },
+ {
+ "id": "7090",
+ "name": "Wise Old Man"
+ },
+ {
+ "id": "7091",
+ "name": "Dawg"
+ },
+ {
+ "id": "7116",
+ "name": "Drunken sailor"
+ },
+ {
+ "id": "7117",
+ "name": "Drunken sailor"
+ },
+ {
+ "id": "7118",
+ "name": "Catapult engineer"
+ },
+ {
+ "id": "7119",
+ "name": "Tyras guard"
+ },
+ {
+ "id": "7121",
+ "name": "General Hining"
+ },
+ {
+ "id": "7122",
+ "name": "Githan"
+ },
+ {
+ "id": "7123",
+ "name": "Amulet of Nature"
+ },
+ {
+ "id": "7124",
+ "name": "Mud"
+ },
+ {
+ "id": "7136",
+ "name": "Surok Magis"
+ },
+ {
+ "id": "7143",
+ "name": "Professor Henry"
+ },
+ {
+ "id": "7163",
+ "name": "Villager"
+ },
+ {
+ "id": "7165",
+ "name": "Villager"
+ },
+ {
+ "id": "7166",
+ "name": "Villager"
+ },
+ {
+ "id": "7167",
+ "name": "Villager"
+ },
+ {
+ "id": "7169",
+ "name": "Kimberly"
+ },
+ {
+ "id": "7170",
+ "name": "Kimberly"
+ },
+ {
+ "id": "7171",
+ "name": "Kennith"
+ },
+ {
+ "id": "7172",
+ "name": "Kennith"
+ },
+ {
+ "id": "7173",
+ "name": "Kennith"
+ },
+ {
+ "id": "7174",
+ "name": "Kennith"
+ },
+ {
+ "id": "7175",
+ "name": "Kennith"
+ },
+ {
+ "id": "7176",
+ "name": "Villager"
+ },
+ {
+ "id": "7184",
+ "name": "Ezekial Lovecraft"
+ },
+ {
+ "id": "7185",
+ "name": "Clive"
+ },
+ {
+ "id": "7186",
+ "name": "Katherine"
+ },
+ {
+ "id": "7187",
+ "name": "Katherine"
+ },
+ {
+ "id": "7188",
+ "name": "Clive"
+ },
+ {
+ "id": "7189",
+ "name": "Kent"
+ },
+ {
+ "id": "7190",
+ "name": "Rabbit hole"
+ },
+ {
+ "id": "7197",
+ "name": "Easter Bunny"
+ },
+ {
+ "id": "7198",
+ "name": "Bunny"
+ },
+ {
+ "id": "7199",
+ "name": "Bunny"
+ },
+ {
+ "id": "7200",
+ "name": "Guard bunny"
+ },
+ {
+ "id": "7201",
+ "name": "Chocatrice"
+ },
+ {
+ "id": "7203",
+ "name": "Void Knight"
+ },
+ {
+ "id": "7205",
+ "name": "Mouse"
+ },
+ {
+ "id": "7208",
+ "name": "Rabbit"
+ },
+ {
+ "id": "7261",
+ "name": "Raven chick"
+ },
+ {
+ "id": "7262",
+ "name": "Raven"
+ },
+ {
+ "id": "7263",
+ "name": "Raven chick"
+ },
+ {
+ "id": "7264",
+ "name": "Raven"
+ },
+ {
+ "id": "7265",
+ "name": "Raven chick"
+ },
+ {
+ "id": "7266",
+ "name": "Raven"
+ },
+ {
+ "id": "7267",
+ "name": "Raven chick"
+ },
+ {
+ "id": "7268",
+ "name": "Raven"
+ },
+ {
+ "id": "7269",
+ "name": "Raven chick"
+ },
+ {
+ "id": "7270",
+ "name": "Raven"
+ },
+ {
+ "id": "7271",
+ "name": "Baby raccoon"
+ },
+ {
+ "id": "7272",
+ "name": "Raccoon"
+ },
+ {
+ "id": "7273",
+ "name": "Baby raccoon"
+ },
+ {
+ "id": "7274",
+ "name": "Raccoon"
+ },
+ {
+ "id": "7276",
+ "name": "Baby raccoon"
+ },
+ {
+ "id": "7277",
+ "name": "Baby gecko"
+ },
+ {
+ "id": "7278",
+ "name": "Baby gecko"
+ },
+ {
+ "id": "7279",
+ "name": "Baby gecko"
+ },
+ {
+ "id": "7280",
+ "name": "Baby gecko"
+ },
+ {
+ "id": "7281",
+ "name": "Gecko"
+ },
+ {
+ "id": "7282",
+ "name": "Gecko"
+ },
+ {
+ "id": "7283",
+ "name": "Gecko"
+ },
+ {
+ "id": "7284",
+ "name": "Gecko"
+ },
+ {
+ "id": "7286",
+ "name": "Baby gecko"
+ },
+ {
+ "id": "7287",
+ "name": "Baby gecko"
+ },
+ {
+ "id": "7288",
+ "name": "Baby gecko"
+ },
+ {
+ "id": "7289",
+ "name": "Gecko"
+ },
+ {
+ "id": "7290",
+ "name": "Gecko"
+ },
+ {
+ "id": "7291",
+ "name": "Gecko"
+ },
+ {
+ "id": "7292",
+ "name": "Gecko"
+ },
+ {
+ "id": "7293",
+ "name": "Baby giant crab"
+ },
+ {
+ "id": "7294",
+ "name": "Giant crab"
+ },
+ {
+ "id": "7295",
+ "name": "Baby giant crab"
+ },
+ {
+ "id": "7296",
+ "name": "Giant crab"
+ },
+ {
+ "id": "7297",
+ "name": "Baby giant crab"
+ },
+ {
+ "id": "7298",
+ "name": "Giant crab"
+ },
+ {
+ "id": "7299",
+ "name": "Baby giant crab"
+ },
+ {
+ "id": "7300",
+ "name": "Giant crab"
+ },
+ {
+ "id": "7301",
+ "name": "Baby squirrel"
+ },
+ {
+ "id": "7302",
+ "name": "Squirrel"
+ },
+ {
+ "id": "7303",
+ "name": "Baby squirrel"
+ },
+ {
+ "id": "7304",
+ "name": "Squirrel"
+ },
+ {
+ "id": "7305",
+ "name": "Baby squirrel"
+ },
+ {
+ "id": "7306",
+ "name": "Squirrel"
+ },
+ {
+ "id": "7307",
+ "name": "Baby squirrel"
+ },
+ {
+ "id": "7308",
+ "name": "Squirrel"
+ },
+ {
+ "id": "7309",
+ "name": "Baby squirrel"
+ },
+ {
+ "id": "7310",
+ "name": "Baby squirrel"
+ },
+ {
+ "id": "7311",
+ "name": "Baby squirrel"
+ },
+ {
+ "id": "7312",
+ "name": "Baby squirrel"
+ },
+ {
+ "id": "7313",
+ "name": "Baby penguin"
+ },
+ {
+ "id": "7314",
+ "name": "Penguin"
+ },
+ {
+ "id": "7315",
+ "name": "Penguin"
+ },
+ {
+ "id": "7316",
+ "name": "Baby penguin"
+ },
+ {
+ "id": "7317",
+ "name": "Penguin"
+ },
+ {
+ "id": "7318",
+ "name": "Penguin"
+ },
+ {
+ "id": "7319",
+ "name": "Vulture chick"
+ },
+ {
+ "id": "7320",
+ "name": "Vulture"
+ },
+ {
+ "id": "7321",
+ "name": "Vulture chick"
+ },
+ {
+ "id": "7322",
+ "name": "Vulture"
+ },
+ {
+ "id": "7323",
+ "name": "Vulture chick"
+ },
+ {
+ "id": "7324",
+ "name": "Vulture"
+ },
+ {
+ "id": "7325",
+ "name": "Vulture chick"
+ },
+ {
+ "id": "7326",
+ "name": "Vulture"
+ },
+ {
+ "id": "7327",
+ "name": "Vulture chick"
+ },
+ {
+ "id": "7328",
+ "name": "Vulture"
+ },
+ {
+ "id": "7369",
+ "name": "Void shifter"
+ },
+ {
+ "id": "7372",
+ "name": "Ravenous locust"
+ },
+ {
+ "id": "7383",
+ "name": "Uberlass"
+ },
+ {
+ "id": "7384",
+ "name": "Uberlass"
+ },
+ {
+ "id": "7385",
+ "name": "Uberlass"
+ },
+ {
+ "id": "7386",
+ "name": "Uberlass"
+ },
+ {
+ "id": "7387",
+ "name": "Sannytea"
+ },
+ {
+ "id": "7388",
+ "name": "Sannytea"
+ },
+ {
+ "id": "7389",
+ "name": "Irollsixes"
+ },
+ {
+ "id": "7390",
+ "name": "Irollsixes"
+ },
+ {
+ "id": "7391",
+ "name": "Foxyhunter"
+ },
+ {
+ "id": "7392",
+ "name": "Foxyhunter"
+ },
+ {
+ "id": "7393",
+ "name": "Foxyhunter"
+ },
+ {
+ "id": "7394",
+ "name": "Gabriela"
+ },
+ {
+ "id": "7395",
+ "name": "Teodor"
+ },
+ {
+ "id": "7396",
+ "name": "Aurel"
+ },
+ {
+ "id": "7397",
+ "name": "Cornelius"
+ },
+ {
+ "id": "7399",
+ "name": "Sorin"
+ },
+ {
+ "id": "7400",
+ "name": "Luscion"
+ },
+ {
+ "id": "7401",
+ "name": "Sergiu"
+ },
+ {
+ "id": "7402",
+ "name": "Radu"
+ },
+ {
+ "id": "7403",
+ "name": "Grigore"
+ },
+ {
+ "id": "7404",
+ "name": "Ileana"
+ },
+ {
+ "id": "7405",
+ "name": "Valeria"
+ },
+ {
+ "id": "7406",
+ "name": "Emilia"
+ },
+ {
+ "id": "7407",
+ "name": "Florin"
+ },
+ {
+ "id": "7408",
+ "name": "Catalina"
+ },
+ {
+ "id": "7409",
+ "name": "Ivan"
+ },
+ {
+ "id": "7410",
+ "name": "Victor"
+ },
+ {
+ "id": "7411",
+ "name": "Helena"
+ },
+ {
+ "id": "7412",
+ "name": "Mihail"
+ },
+ {
+ "id": "7413",
+ "name": "Nicoleta"
+ },
+ {
+ "id": "7414",
+ "name": "Vasile"
+ },
+ {
+ "id": "7415",
+ "name": "Razvan"
+ },
+ {
+ "id": "7416",
+ "name": "Luminata"
+ },
+ {
+ "id": "7418",
+ "name": "Juvinate"
+ },
+ {
+ "id": "7419",
+ "name": "Held vampyre juvinate"
+ },
+ {
+ "id": "7420",
+ "name": "Hieronymus Avlafrim"
+ },
+ {
+ "id": "7421",
+ "name": "Sasquine Huburns"
+ },
+ {
+ "id": "7422",
+ "name": "Sasquine Huburns"
+ },
+ {
+ "id": "7423",
+ "name": "Lollery"
+ },
+ {
+ "id": "7424",
+ "name": "Wigglewoo"
+ },
+ {
+ "id": "7427",
+ "name": "Orangeowns"
+ },
+ {
+ "id": "7428",
+ "name": "I like m0m"
+ },
+ {
+ "id": "7429",
+ "name": "I like m0m"
+ },
+ {
+ "id": "7430",
+ "name": "Qutiedoll"
+ },
+ {
+ "id": "7431",
+ "name": "Goreu"
+ },
+ {
+ "id": "7432",
+ "name": "Ysgawyn"
+ },
+ {
+ "id": "7433",
+ "name": "Arvel"
+ },
+ {
+ "id": "7434",
+ "name": "Mawrth"
+ },
+ {
+ "id": "7435",
+ "name": "Kelyn"
+ },
+ {
+ "id": "7436",
+ "name": "Eoin"
+ },
+ {
+ "id": "7437",
+ "name": "Iona"
+ },
+ {
+ "id": "7442",
+ "name": "Arianwyn"
+ },
+ {
+ "id": "7444",
+ "name": "Oronwen"
+ },
+ {
+ "id": "7445",
+ "name": "Banker"
+ },
+ {
+ "id": "7446",
+ "name": "Banker"
+ },
+ {
+ "id": "7447",
+ "name": "Dalldav"
+ },
+ {
+ "id": "7448",
+ "name": "Gethin"
+ },
+ {
+ "id": "7449",
+ "name": "Amaethwr"
+ },
+ {
+ "id": "7450",
+ "name": "Teclyn"
+ },
+ {
+ "id": "7451",
+ "name": "Butterfly"
+ },
+ {
+ "id": "7452",
+ "name": "Lapsang"
+ },
+ {
+ "id": "7453",
+ "name": "Lapsang"
+ },
+ {
+ "id": "7454",
+ "name": "Souchong"
+ },
+ {
+ "id": "7455",
+ "name": "Souchong"
+ },
+ {
+ "id": "7456",
+ "name": "Earlgrey"
+ },
+ {
+ "id": "7457",
+ "name": "Earlgrey"
+ },
+ {
+ "id": "7458",
+ "name": "Fairtrade"
+ },
+ {
+ "id": "7464",
+ "name": "Sliceoflemon"
+ },
+ {
+ "id": "7465",
+ "name": "Sliceoflemon"
+ },
+ {
+ "id": "7466",
+ "name": "Milknosugar"
+ },
+ {
+ "id": "7467",
+ "name": "Milknosugar"
+ },
+ {
+ "id": "7468",
+ "name": "Randomdood"
+ },
+ {
+ "id": "7469",
+ "name": "Employedman"
+ },
+ {
+ "id": "7470",
+ "name": "Heidiggle"
+ },
+ {
+ "id": "7471",
+ "name": "Dodgy Penny"
+ },
+ {
+ "id": "7472",
+ "name": "Shadydude98"
+ },
+ {
+ "id": "7473",
+ "name": "Madam C"
+ },
+ {
+ "id": "7474",
+ "name": "M0m Online"
+ },
+ {
+ "id": "7478",
+ "name": "Learking"
+ },
+ {
+ "id": "7489",
+ "name": "Moglewee"
+ },
+ {
+ "id": "7490",
+ "name": "Moglewee"
+ },
+ {
+ "id": "7491",
+ "name": "Sarah Domin"
+ },
+ {
+ "id": "7498",
+ "name": "Snowy knight"
+ },
+ {
+ "id": "7499",
+ "name": "Sapphire glacialis"
+ },
+ {
+ "id": "7509",
+ "name": "Evil Wibbler"
+ },
+ {
+ "id": "7516",
+ "name": "Heresjohnny"
+ },
+ {
+ "id": "7517",
+ "name": "Mogglewump"
+ },
+ {
+ "id": "7521",
+ "name": "Renderorder"
+ },
+ {
+ "id": "7522",
+ "name": "Boolean"
+ },
+ {
+ "id": "7523",
+ "name": "Stress Diva"
+ },
+ {
+ "id": "7524",
+ "name": "Treadsoftly"
+ },
+ {
+ "id": "7525",
+ "name": "Helphelphelp"
+ },
+ {
+ "id": "7526",
+ "name": "Doorbellpl0x"
+ },
+ {
+ "id": "7527",
+ "name": "Fixmydoorup"
+ },
+ {
+ "id": "7529",
+ "name": "Wallscaler"
+ },
+ {
+ "id": "7530",
+ "name": "2scompany"
+ },
+ {
+ "id": "7531",
+ "name": "2scompany"
+ },
+ {
+ "id": "7533",
+ "name": "4sjustsilly"
+ },
+ {
+ "id": "7534",
+ "name": "Roadblocked"
+ },
+ {
+ "id": "7535",
+ "name": "Barricade"
+ },
+ {
+ "id": "7536",
+ "name": "Barricade"
+ },
+ {
+ "id": "7537",
+ "name": "Yoinker"
+ },
+ {
+ "id": "7538",
+ "name": "Yoinker"
+ },
+ {
+ "id": "7539",
+ "name": "Stopthief"
+ },
+ {
+ "id": "7540",
+ "name": "Stopthief"
+ },
+ {
+ "id": "7541",
+ "name": "Knickknack"
+ },
+ {
+ "id": "7542",
+ "name": "Paddywhack"
+ },
+ {
+ "id": "7543",
+ "name": "Giveadog"
+ },
+ {
+ "id": "7544",
+ "name": "Spacebadgers"
+ },
+ {
+ "id": "7545",
+ "name": "Freakypeaky"
+ },
+ {
+ "id": "7546",
+ "name": "Rollinghome"
+ },
+ {
+ "id": "7547",
+ "name": "Nullpointer"
+ },
+ {
+ "id": "7548",
+ "name": "Badgerfreak"
+ },
+ {
+ "id": "7549",
+ "name": "Windstrike32"
+ },
+ {
+ "id": "7550",
+ "name": "Void Knight"
+ },
+ {
+ "id": "7567",
+ "name": "Wraithboss"
+ },
+ {
+ "id": "7568",
+ "name": "What Goudron"
+ },
+ {
+ "id": "7574",
+ "name": "Lvzyoda"
+ },
+ {
+ "id": "7575",
+ "name": "Airstriker"
+ },
+ {
+ "id": "7576",
+ "name": "Droepedoff"
+ },
+ {
+ "id": "7577",
+ "name": "Plzpudding"
+ },
+ {
+ "id": "7578",
+ "name": "Assassin10"
+ },
+ {
+ "id": "7579",
+ "name": "Steallake"
+ },
+ {
+ "id": "7581",
+ "name": "Deepkiwi"
+ },
+ {
+ "id": "7584",
+ "name": "Bigface Oz"
+ },
+ {
+ "id": "7587",
+ "name": "Torcher"
+ },
+ {
+ "id": "7588",
+ "name": "Torcher"
+ },
+ {
+ "id": "7589",
+ "name": "Defiler"
+ },
+ {
+ "id": "7590",
+ "name": "Defiler"
+ },
+ {
+ "id": "7591",
+ "name": "Shifter"
+ },
+ {
+ "id": "7592",
+ "name": "Shifter"
+ },
+ {
+ "id": "7594",
+ "name": "Shifter"
+ },
+ {
+ "id": "7595",
+ "name": "Splatter"
+ },
+ {
+ "id": "7596",
+ "name": "Splatter"
+ },
+ {
+ "id": "7597",
+ "name": "Splatter"
+ },
+ {
+ "id": "7598",
+ "name": "Spinner"
+ },
+ {
+ "id": "7599",
+ "name": "Ravager"
+ },
+ {
+ "id": "7600",
+ "name": "Fiara"
+ },
+ {
+ "id": "7601",
+ "name": "Reggie"
+ },
+ {
+ "id": "7602",
+ "name": "Getorix"
+ },
+ {
+ "id": "7603",
+ "name": "Pontimer"
+ },
+ {
+ "id": "7604",
+ "name": "Alran"
+ },
+ {
+ "id": "7610",
+ "name": "Flying female vampire"
+ },
+ {
+ "id": "7611",
+ "name": "Flying female vampire"
+ },
+ {
+ "id": "7612",
+ "name": "Flying female vampire"
+ },
+ {
+ "id": "7613",
+ "name": "Flying female vampire"
+ },
+ {
+ "id": "7622",
+ "name": "Vyrewatch"
+ },
+ {
+ "id": "7623",
+ "name": "Vyrewatch"
+ },
+ {
+ "id": "7624",
+ "name": "Vyrewatch"
+ },
+ {
+ "id": "7625",
+ "name": "Vyrewatch"
+ },
+ {
+ "id": "7630",
+ "name": "Vyrewatch"
+ },
+ {
+ "id": "7633",
+ "name": "Vyrewatch"
+ },
+ {
+ "id": "7636",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "7637",
+ "name": "Skeletal hand"
+ },
+ {
+ "id": "7652",
+ "name": "Zaromark Sliver"
+ },
+ {
+ "id": "7653",
+ "name": "Zaromark Sliver"
+ },
+ {
+ "id": "7662",
+ "name": "Fistandantilus"
+ },
+ {
+ "id": "7663",
+ "name": "Fistandantilus"
+ },
+ {
+ "id": "7664",
+ "name": "Mercenary Adventurer"
+ },
+ {
+ "id": "7665",
+ "name": "Ivan Strom"
+ },
+ {
+ "id": "7666",
+ "name": "Mysterious person"
+ },
+ {
+ "id": "7667",
+ "name": "Mysterious person"
+ },
+ {
+ "id": "7668",
+ "name": "Mysterious person"
+ },
+ {
+ "id": "7669",
+ "name": "Mysterious person"
+ },
+ {
+ "id": "7670",
+ "name": "Mysterious person"
+ },
+ {
+ "id": "7671",
+ "name": "Mysterious person"
+ },
+ {
+ "id": "7672",
+ "name": "Flaygian Screwte"
+ },
+ {
+ "id": "7673",
+ "name": "Mekritus A'hara"
+ },
+ {
+ "id": "7674",
+ "name": "Andiess Juip"
+ },
+ {
+ "id": "7675",
+ "name": "Kael Forshaw"
+ },
+ {
+ "id": "7676",
+ "name": "Andiess Juip"
+ },
+ {
+ "id": "7677",
+ "name": "Kael Forshaw"
+ },
+ {
+ "id": "7678",
+ "name": "Safalaan"
+ },
+ {
+ "id": "7679",
+ "name": "Andiess Juip"
+ },
+ {
+ "id": "7680",
+ "name": "Kael Forshaw"
+ },
+ {
+ "id": "7681",
+ "name": "Safalaan"
+ },
+ {
+ "id": "7684",
+ "name": "Vyrewatch"
+ },
+ {
+ "id": "7685",
+ "name": "Vyrewatch"
+ },
+ {
+ "id": "7686",
+ "name": "Safalaan"
+ },
+ {
+ "id": "7687",
+ "name": "Spectral Vyrewatch"
+ },
+ {
+ "id": "7688",
+ "name": "Drezel"
+ },
+ {
+ "id": "7708",
+ "name": "Temple guardian"
+ },
+ {
+ "id": "7712",
+ "name": "Baby icefiend"
+ },
+ {
+ "id": "7718",
+ "name": "Brother Bordiss"
+ },
+ {
+ "id": "7719",
+ "name": "Brother Althric"
+ },
+ {
+ "id": "7720",
+ "name": "Drorkar"
+ },
+ {
+ "id": "7721",
+ "name": "Nurmof"
+ },
+ {
+ "id": "7722",
+ "name": "Lakki the delivery dwarf"
+ },
+ {
+ "id": "7723",
+ "name": "Drorkar"
+ },
+ {
+ "id": "7724",
+ "name": "Brother Bordiss"
+ },
+ {
+ "id": "7725",
+ "name": "Professor Arblenap"
+ },
+ {
+ "id": "7726",
+ "name": "Assistant"
+ },
+ {
+ "id": "7728",
+ "name": "Baby icefiend"
+ },
+ {
+ "id": "7737",
+ "name": "Will"
+ },
+ {
+ "id": "7738",
+ "name": "Will"
+ },
+ {
+ "id": "7739",
+ "name": "Phil"
+ },
+ {
+ "id": "7742",
+ "name": "Fluffs"
+ },
+ {
+ "id": "7743",
+ "name": "Fluffs"
+ },
+ {
+ "id": "7744",
+ "name": "Kittens"
+ },
+ {
+ "id": "7746",
+ "name": "TzHaar-Mej-Malk"
+ },
+ {
+ "id": "7748",
+ "name": "TzHaar-Hur-Frok"
+ },
+ {
+ "id": "7749",
+ "name": "TzHaar-Ket-Grol"
+ },
+ {
+ "id": "7750",
+ "name": "TzHaar-Ket-Rok"
+ },
+ {
+ "id": "7751",
+ "name": "TzHaar-Ket-Lurk"
+ },
+ {
+ "id": "7753",
+ "name": "TzHaar-Mej"
+ },
+ {
+ "id": "7754",
+ "name": "TzHaar-Hur"
+ },
+ {
+ "id": "7755",
+ "name": "TzHaar-Xil"
+ },
+ {
+ "id": "7757",
+ "name": "TzHaar-Hur-Brekt"
+ },
+ {
+ "id": "7758",
+ "name": "TzHaar-Hur-Brekt"
+ },
+ {
+ "id": "7759",
+ "name": "TzHaar-Ket-Jok"
+ },
+ {
+ "id": "7760",
+ "name": "TzHaar-Ket-Jok"
+ },
+ {
+ "id": "7761",
+ "name": "TzHaar-Xil-Mor"
+ },
+ {
+ "id": "7762",
+ "name": "TzHaar-Xil-Mor"
+ },
+ {
+ "id": "7763",
+ "name": "TzHaar-Mej-Kol"
+ },
+ {
+ "id": "7764",
+ "name": "TzHaar-Mej-Kol"
+ },
+ {
+ "id": "7765",
+ "name": "TzHaar-Hur-Klag"
+ },
+ {
+ "id": "7766",
+ "name": "TzHaar-Hur-Klag"
+ },
+ {
+ "id": "7770",
+ "name": "TokTz-Ket-Dill"
+ },
+ {
+ "id": "7771",
+ "name": "TokTz-Ket-Dill"
+ },
+ {
+ "id": "7774",
+ "name": "Skeleton"
+ },
+ {
+ "id": "7775",
+ "name": "Skeleton"
+ },
+ {
+ "id": "7776",
+ "name": "Skeleton"
+ },
+ {
+ "id": "7777",
+ "name": "Skeleton"
+ },
+ {
+ "id": "7778",
+ "name": "Skeleton"
+ },
+ {
+ "id": "7779",
+ "name": "Sumona"
+ },
+ {
+ "id": "7781",
+ "name": "Jesmona"
+ },
+ {
+ "id": "7782",
+ "name": "Catolax"
+ },
+ {
+ "id": "7783",
+ "name": "Ali Cat"
+ },
+ {
+ "id": "7787",
+ "name": "Cave crawler"
+ },
+ {
+ "id": "7788",
+ "name": "Skeleton"
+ },
+ {
+ "id": "7789",
+ "name": "Zombie"
+ },
+ {
+ "id": "7790",
+ "name": "Zombie"
+ },
+ {
+ "id": "7791",
+ "name": "Zombie"
+ },
+ {
+ "id": "7792",
+ "name": "Zombie"
+ },
+ {
+ "id": "7793",
+ "name": "Banshee mistress"
+ },
+ {
+ "id": "7794",
+ "name": "Banshee mistress"
+ },
+ {
+ "id": "7795",
+ "name": "Insectoid assassin"
+ },
+ {
+ "id": "7796",
+ "name": "Insectoid assassin"
+ },
+ {
+ "id": "7797",
+ "name": "Kurask overlord"
+ },
+ {
+ "id": "7798",
+ "name": "Monstrous cave crawler"
+ },
+ {
+ "id": "7799",
+ "name": "Basilisk boss"
+ },
+ {
+ "id": "7800",
+ "name": "Mightiest turoth"
+ },
+ {
+ "id": "7801",
+ "name": "Aberrant spectre"
+ },
+ {
+ "id": "7802",
+ "name": "Aberrant spectre"
+ },
+ {
+ "id": "7803",
+ "name": "Aberrant spectre"
+ },
+ {
+ "id": "7804",
+ "name": "Aberrant spectre"
+ },
+ {
+ "id": "7805",
+ "name": "Kurask minion"
+ },
+ {
+ "id": "7806",
+ "name": "Mummy warrior"
+ },
+ {
+ "id": "7807",
+ "name": "Mummy warrior"
+ },
+ {
+ "id": "7808",
+ "name": "Mummy warrior"
+ },
+ {
+ "id": "7809",
+ "name": "Cat"
+ },
+ {
+ "id": "7810",
+ "name": "Banshee"
+ },
+ {
+ "id": "7811",
+ "name": "Kurask"
+ },
+ {
+ "id": "7812",
+ "name": "Cave crawler"
+ },
+ {
+ "id": "7813",
+ "name": "Basilisk"
+ },
+ {
+ "id": "7814",
+ "name": "Turoth"
+ },
+ {
+ "id": "7815",
+ "name": "Skeleton"
+ },
+ {
+ "id": "7816",
+ "name": "Master"
+ },
+ {
+ "id": "7817",
+ "name": "Zombie"
+ },
+ {
+ "id": "7818",
+ "name": "Zombie"
+ },
+ {
+ "id": "7819",
+ "name": "Zombie"
+ },
+ {
+ "id": "7820",
+ "name": "Zombie"
+ },
+ {
+ "id": "7821",
+ "name": "A wanderer."
+ },
+ {
+ "id": "7822",
+ "name": "A wanderer."
+ },
+ {
+ "id": "7824",
+ "name": "Osman"
+ },
+ {
+ "id": "7825",
+ "name": "50 Ships Mufassah"
+ },
+ {
+ "id": "7826",
+ "name": "Karamthulhu"
+ },
+ {
+ "id": "7827",
+ "name": "Karamthulhu"
+ },
+ {
+ "id": "7828",
+ "name": "Giant lobster"
+ },
+ {
+ "id": "7829",
+ "name": "Giant crab"
+ },
+ {
+ "id": "7830",
+ "name": "Customs Sergeant"
+ },
+ {
+ "id": "7831",
+ "name": "Customs Sergeant"
+ },
+ {
+ "id": "7832",
+ "name": "Young Ralph"
+ },
+ {
+ "id": "7833",
+ "name": "Young Ralph"
+ },
+ {
+ "id": "7834",
+ "name": "Young Ralph"
+ },
+ {
+ "id": "7835",
+ "name": "Young Ralph"
+ },
+ {
+ "id": "7836",
+ "name": "Young Ralph"
+ },
+ {
+ "id": "7837",
+ "name": "Customs Officer"
+ },
+ {
+ "id": "7838",
+ "name": "Customs Officer"
+ },
+ {
+ "id": "7839",
+ "name": "Customs Officer"
+ },
+ {
+ "id": "7840",
+ "name": "Heavy-Handed Harry"
+ },
+ {
+ "id": "7841",
+ "name": "Player"
+ },
+ {
+ "id": "7842",
+ "name": "Locker Officer"
+ },
+ {
+ "id": "7843",
+ "name": "Locker Officer"
+ },
+ {
+ "id": "7844",
+ "name": "Ex-ex-parrot"
+ },
+ {
+ "id": "7845",
+ "name": "Pirate impling"
+ },
+ {
+ "id": "7846",
+ "name": "Pirate impling"
+ },
+ {
+ "id": "7847",
+ "name": "Captain Rabid Jack"
+ },
+ {
+ "id": "7848",
+ "name": "Jack"
+ },
+ {
+ "id": "7849",
+ "name": "Bosun Giles"
+ },
+ {
+ "id": "7850",
+ "name": "Pirate"
+ },
+ {
+ "id": "7851",
+ "name": "Lizzie"
+ },
+ {
+ "id": "7852",
+ "name": "Cap'n Izzy No-Beard"
+ },
+ {
+ "id": "7853",
+ "name": "Ralph"
+ },
+ {
+ "id": "7854",
+ "name": "Brass Hand Harry"
+ },
+ {
+ "id": "7855",
+ "name": "Bill Teach"
+ },
+ {
+ "id": "7856",
+ "name": "Pirate"
+ },
+ {
+ "id": "7857",
+ "name": "Brass Hand Harry"
+ },
+ {
+ "id": "7858",
+ "name": "Gull"
+ },
+ {
+ "id": "7861",
+ "name": "Jack"
+ },
+ {
+ "id": "7862",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "7863",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "7864",
+ "name": "Fishing spot"
+ },
+ {
+ "id": "7865",
+ "name": "Guardsman Dante"
+ },
+ {
+ "id": "7866",
+ "name": "Guardsman DeShawn"
+ },
+ {
+ "id": "7867",
+ "name": "Guardsman Brawn"
+ },
+ {
+ "id": "7868",
+ "name": "Iain"
+ },
+ {
+ "id": "7869",
+ "name": "Julian"
+ },
+ {
+ "id": "7870",
+ "name": "Lachtopher"
+ },
+ {
+ "id": "7871",
+ "name": "Samuel"
+ },
+ {
+ "id": "7872",
+ "name": "Victoria"
+ },
+ {
+ "id": "7873",
+ "name": "Man"
+ },
+ {
+ "id": "7874",
+ "name": "Man"
+ },
+ {
+ "id": "7875",
+ "name": "Man"
+ },
+ {
+ "id": "7876",
+ "name": "Man"
+ },
+ {
+ "id": "7877",
+ "name": "Man"
+ },
+ {
+ "id": "7878",
+ "name": "Man"
+ },
+ {
+ "id": "7879",
+ "name": "Man"
+ },
+ {
+ "id": "7880",
+ "name": "Woman"
+ },
+ {
+ "id": "7881",
+ "name": "Woman"
+ },
+ {
+ "id": "7882",
+ "name": "Woman"
+ },
+ {
+ "id": "7883",
+ "name": "Woman"
+ },
+ {
+ "id": "7884",
+ "name": "Woman"
+ },
+ {
+ "id": "7885",
+ "name": "Guardsman Dante"
+ },
+ {
+ "id": "7886",
+ "name": "Guardsman DeShawn"
+ },
+ {
+ "id": "7887",
+ "name": "Guardsman Brawn"
+ },
+ {
+ "id": "7888",
+ "name": "Sergeant Abram"
+ },
+ {
+ "id": "7889",
+ "name": "Guardsman Pazel"
+ },
+ {
+ "id": "7890",
+ "name": "Guardsman Peale"
+ },
+ {
+ "id": "7892",
+ "name": "General Wartface"
+ },
+ {
+ "id": "7893",
+ "name": "General Bentnoze"
+ },
+ {
+ "id": "7894",
+ "name": "General Wartface"
+ },
+ {
+ "id": "7896",
+ "name": "General Bentnoze"
+ },
+ {
+ "id": "7898",
+ "name": "Loar Shadow"
+ },
+ {
+ "id": "7901",
+ "name": "Loar Shadow"
+ },
+ {
+ "id": "7902",
+ "name": "Sergeant Abram"
+ },
+ {
+ "id": "7903",
+ "name": "Guardsman Pazel"
+ },
+ {
+ "id": "7904",
+ "name": "Guardsman Peale"
+ },
+ {
+ "id": "7905",
+ "name": "Barricade guard"
+ },
+ {
+ "id": "7906",
+ "name": "Barricade guard"
+ },
+ {
+ "id": "7907",
+ "name": "Barricade guard"
+ },
+ {
+ "id": "7908",
+ "name": "Barricade guard"
+ },
+ {
+ "id": "7909",
+ "name": "Barricade guard"
+ },
+ {
+ "id": "7910",
+ "name": "Barricade guard"
+ },
+ {
+ "id": "7911",
+ "name": "Barricade guard"
+ },
+ {
+ "id": "7912",
+ "name": "Border guard"
+ },
+ {
+ "id": "7913",
+ "name": "Iain"
+ },
+ {
+ "id": "7914",
+ "name": "Julian"
+ },
+ {
+ "id": "7915",
+ "name": "Lachtopher"
+ },
+ {
+ "id": "7916",
+ "name": "Samuel"
+ },
+ {
+ "id": "7917",
+ "name": "Victoria"
+ },
+ {
+ "id": "7918",
+ "name": "Man"
+ },
+ {
+ "id": "7919",
+ "name": "Man"
+ },
+ {
+ "id": "7920",
+ "name": "Man"
+ },
+ {
+ "id": "7921",
+ "name": "Man"
+ },
+ {
+ "id": "7922",
+ "name": "Man"
+ },
+ {
+ "id": "7923",
+ "name": "Man"
+ },
+ {
+ "id": "7924",
+ "name": "Man"
+ },
+ {
+ "id": "7925",
+ "name": "Woman"
+ },
+ {
+ "id": "7926",
+ "name": "Woman"
+ },
+ {
+ "id": "7927",
+ "name": "Woman"
+ },
+ {
+ "id": "7928",
+ "name": "Woman"
+ },
+ {
+ "id": "7929",
+ "name": "Lumbridge Guide"
+ },
+ {
+ "id": "7930",
+ "name": "Doomsayer"
+ },
+ {
+ "id": "7931",
+ "name": "Donie"
+ },
+ {
+ "id": "7932",
+ "name": "Gee"
+ },
+ {
+ "id": "7933",
+ "name": "Duke Horacio"
+ },
+ {
+ "id": "7934",
+ "name": "Sigmund"
+ },
+ {
+ "id": "7935",
+ "name": "Hans"
+ },
+ {
+ "id": "7936",
+ "name": "Cook"
+ },
+ {
+ "id": "7937",
+ "name": "Father Aereck"
+ },
+ {
+ "id": "7938",
+ "name": "Sir Vant"
+ },
+ {
+ "id": "7939",
+ "name": "Sir Vant"
+ },
+ {
+ "id": "7940",
+ "name": "Sir Vant"
+ },
+ {
+ "id": "7941",
+ "name": "Sir Vant"
+ },
+ {
+ "id": "7942",
+ "name": "Sir Vant"
+ },
+ {
+ "id": "7943",
+ "name": "Dragon"
+ },
+ {
+ "id": "7944",
+ "name": "Dragon"
+ },
+ {
+ "id": "7945",
+ "name": "Dragon"
+ },
+ {
+ "id": "7946",
+ "name": "Dragon"
+ },
+ {
+ "id": "7947",
+ "name": "Dragon"
+ },
+ {
+ "id": "7948",
+ "name": "Dragon"
+ },
+ {
+ "id": "7949",
+ "name": "Lumbridge Guide"
+ },
+ {
+ "id": "7950",
+ "name": "Melee Tutor"
+ },
+ {
+ "id": "7951",
+ "name": "Ranged Tutor"
+ },
+ {
+ "id": "7952",
+ "name": "Magic Tutor"
+ },
+ {
+ "id": "7953",
+ "name": "Cooking Tutor"
+ },
+ {
+ "id": "7954",
+ "name": "Crafting Tutor"
+ },
+ {
+ "id": "7955",
+ "name": "Fishing Tutor"
+ },
+ {
+ "id": "7956",
+ "name": "Mining Tutor"
+ },
+ {
+ "id": "7957",
+ "name": "Prayer Tutor"
+ },
+ {
+ "id": "7960",
+ "name": "Woodcutting Tutor"
+ },
+ {
+ "id": "7961",
+ "name": "Bank Tutor"
+ },
+ {
+ "id": "7962",
+ "name": "Gee"
+ },
+ {
+ "id": "7963",
+ "name": "Spirit"
+ },
+ {
+ "id": "7964",
+ "name": "Goblin"
+ },
+ {
+ "id": "7965",
+ "name": "Goblin"
+ },
+ {
+ "id": "7966",
+ "name": "Chaos druid"
+ },
+ {
+ "id": "7967",
+ "name": "Shopkeeper"
+ },
+ {
+ "id": "7968",
+ "name": "Explorer Jack"
+ },
+ {
+ "id": "7970",
+ "name": "Smithing Tutor"
+ },
+ {
+ "id": "7971",
+ "name": "Mining Tutor"
+ },
+ {
+ "id": "7972",
+ "name": "Spirit"
+ },
+ {
+ "id": "7977",
+ "name": "Spirit"
+ },
+ {
+ "id": "7978",
+ "name": "Spirit"
+ },
+ {
+ "id": "7979",
+ "name": "Spirit"
+ },
+ {
+ "id": "7980",
+ "name": "Spirit"
+ },
+ {
+ "id": "7981",
+ "name": "Spirit"
+ },
+ {
+ "id": "7982",
+ "name": "Spirit"
+ },
+ {
+ "id": "7983",
+ "name": "Spirit"
+ },
+ {
+ "id": "7984",
+ "name": "Spirit"
+ },
+ {
+ "id": "7985",
+ "name": "Summer Bonde"
+ },
+ {
+ "id": "7987",
+ "name": "Spirit"
+ },
+ {
+ "id": "7988",
+ "name": "Spirit"
+ },
+ {
+ "id": "7989",
+ "name": "Erik Bonde"
+ },
+ {
+ "id": "7990",
+ "name": "Spirit"
+ },
+ {
+ "id": "7991",
+ "name": "Jallek Lenkin"
+ },
+ {
+ "id": "7992",
+ "name": "Spirit"
+ },
+ {
+ "id": "7993",
+ "name": "Meranek Thanatos"
+ },
+ {
+ "id": "7994",
+ "name": "Ghostly warrior"
+ },
+ {
+ "id": "7995",
+ "name": "Spirit Beast"
+ },
+ {
+ "id": "7996",
+ "name": "Spirit Beast"
+ },
+ {
+ "id": "7997",
+ "name": "Spirit Beast"
+ },
+ {
+ "id": "7998",
+ "name": "Ghost"
+ },
+ {
+ "id": "7999",
+ "name": "Ghost"
+ },
+ {
+ "id": "8000",
+ "name": "Goth leprechaun"
+ },
+ {
+ "id": "8001",
+ "name": "Jack"
+ },
+ {
+ "id": "8003",
+ "name": "Sarah"
+ },
+ {
+ "id": "8004",
+ "name": "Laura"
+ },
+ {
+ "id": "8005",
+ "name": "Laura"
+ },
+ {
+ "id": "8006",
+ "name": "Roger"
+ },
+ {
+ "id": "8007",
+ "name": "Jorral"
+ },
+ {
+ "id": "8008",
+ "name": "Guthix"
+ },
+ {
+ "id": "8009",
+ "name": "Max the traveller"
+ },
+ {
+ "id": "8010",
+ "name": "Man"
+ },
+ {
+ "id": "8011",
+ "name": "Man"
+ },
+ {
+ "id": "8012",
+ "name": "Woman"
+ },
+ {
+ "id": "8013",
+ "name": "Woman"
+ },
+ {
+ "id": "8014",
+ "name": "Haluned"
+ },
+ {
+ "id": "8015",
+ "name": "Jack"
+ },
+ {
+ "id": "8016",
+ "name": "Baby Sarah"
+ },
+ {
+ "id": "8017",
+ "name": "Snowy"
+ },
+ {
+ "id": "8018",
+ "name": "Roger"
+ },
+ {
+ "id": "8019",
+ "name": "Portal"
+ },
+ {
+ "id": "8020",
+ "name": "Portal"
+ },
+ {
+ "id": "8021",
+ "name": "Yellow orb"
+ },
+ {
+ "id": "8023",
+ "name": "Yellow orb"
+ },
+ {
+ "id": "8024",
+ "name": "Yellow orb"
+ },
+ {
+ "id": "8025",
+ "name": "Green orb"
+ },
+ {
+ "id": "8027",
+ "name": "Green orb"
+ },
+ {
+ "id": "8028",
+ "name": "Green orb"
+ },
+ {
+ "id": "8029",
+ "name": "Wizard Korvak"
+ },
+ {
+ "id": "8030",
+ "name": "Wizard Vief"
+ },
+ {
+ "id": "8031",
+ "name": "Wizard Acantha"
+ },
+ {
+ "id": "8032",
+ "name": "Wizard Elriss"
+ },
+ {
+ "id": "8033",
+ "name": "Wizard"
+ },
+ {
+ "id": "8034",
+ "name": "Wizard"
+ },
+ {
+ "id": "8035",
+ "name": "Wizard"
+ },
+ {
+ "id": "8036",
+ "name": "Wizard"
+ },
+ {
+ "id": "8037",
+ "name": "Wizard"
+ },
+ {
+ "id": "8038",
+ "name": "Wizard"
+ },
+ {
+ "id": "8039",
+ "name": "Wizard"
+ },
+ {
+ "id": "8040",
+ "name": "Wizard"
+ },
+ {
+ "id": "8042",
+ "name": "Squire Fyre"
+ },
+ {
+ "id": "8043",
+ "name": "Squire Fyre"
+ },
+ {
+ "id": "8044",
+ "name": "Orry"
+ },
+ {
+ "id": "8045",
+ "name": "Orry"
+ },
+ {
+ "id": "8046",
+ "name": "Ube"
+ },
+ {
+ "id": "8047",
+ "name": "Ube"
+ },
+ {
+ "id": "8048",
+ "name": "Waldo"
+ },
+ {
+ "id": "8049",
+ "name": "Waldo"
+ },
+ {
+ "id": "8050",
+ "name": "Gjalp"
+ },
+ {
+ "id": "8051",
+ "name": "Gjalp"
+ },
+ {
+ "id": "8052",
+ "name": "Brother Fintan"
+ },
+ {
+ "id": "8053",
+ "name": "Brother Fintan"
+ },
+ {
+ "id": "8054",
+ "name": "Stubthumb"
+ },
+ {
+ "id": "8055",
+ "name": "Stubthumb"
+ },
+ {
+ "id": "8056",
+ "name": "Stubthumb"
+ },
+ {
+ "id": "8057",
+ "name": "Doronbol"
+ },
+ {
+ "id": "8058",
+ "name": "Doronbol"
+ },
+ {
+ "id": "8059",
+ "name": "Crate"
+ },
+ {
+ "id": "8060",
+ "name": "Crate"
+ },
+ {
+ "id": "8061",
+ "name": "Egg"
+ },
+ {
+ "id": "8062",
+ "name": "Egg"
+ },
+ {
+ "id": "8063",
+ "name": "Nanuq"
+ },
+ {
+ "id": "8064",
+ "name": "Nanuq"
+ },
+ {
+ "id": "8065",
+ "name": "Pumpkin"
+ },
+ {
+ "id": "8078",
+ "name": "Maggie"
+ },
+ {
+ "id": "8079",
+ "name": "Circus barker"
+ },
+ {
+ "id": "8080",
+ "name": "Circus barker"
+ },
+ {
+ "id": "8081",
+ "name": "Circus barker"
+ },
+ {
+ "id": "8082",
+ "name": "Agility assistant"
+ },
+ {
+ "id": "8083",
+ "name": "Magic assistant"
+ },
+ {
+ "id": "8084",
+ "name": "Ranged assistant"
+ },
+ {
+ "id": "8085",
+ "name": "Ringmaster"
+ },
+ {
+ "id": "8086",
+ "name": "Audience"
+ },
+ {
+ "id": "8087",
+ "name": "Audience"
+ },
+ {
+ "id": "8088",
+ "name": "Ticket vendor"
+ },
+ {
+ "id": "8089",
+ "name": "Rock"
+ },
+ {
+ "id": "8091",
+ "name": "Star sprite"
+ },
+ {
+ "id": "8092",
+ "name": "Shooting star shadow"
+ },
+ {
+ "id": "8093",
+ "name": "Penguin"
+ },
+ {
+ "id": "8094",
+ "name": "Penguin"
+ },
+ {
+ "id": "8095",
+ "name": "Penguin"
+ },
+ {
+ "id": "8096",
+ "name": "Penguin"
+ },
+ {
+ "id": "8097",
+ "name": "Penguin"
+ },
+ {
+ "id": "8098",
+ "name": "Penguin"
+ },
+ {
+ "id": "8099",
+ "name": "Penguin"
+ },
+ {
+ "id": "8100",
+ "name": "Penguin"
+ },
+ {
+ "id": "8101",
+ "name": "Penguin"
+ },
+ {
+ "id": "8102",
+ "name": "Penguin"
+ },
+ {
+ "id": "8103",
+ "name": "Penguin"
+ },
+ {
+ "id": "8104",
+ "name": "Barrel"
+ },
+ {
+ "id": "8105",
+ "name": "Bush"
+ },
+ {
+ "id": "8106",
+ "name": "Bush"
+ },
+ {
+ "id": "8107",
+ "name": "Cactus"
+ },
+ {
+ "id": "8108",
+ "name": "Crate"
+ },
+ {
+ "id": "8109",
+ "name": "Rock"
+ },
+ {
+ "id": "8110",
+ "name": "Toadstool"
+ },
+ {
+ "id": "8111",
+ "name": "Calladin"
+ },
+ {
+ "id": "8112",
+ "name": "Summer Bonde"
+ },
+ {
+ "id": "8114",
+ "name": "Summer Bonde"
+ },
+ {
+ "id": "8115",
+ "name": "Erik Bonde"
+ },
+ {
+ "id": "8116",
+ "name": "Erik Bonde"
+ },
+ {
+ "id": "8117",
+ "name": "Jallek Lenkin"
+ },
+ {
+ "id": "8118",
+ "name": "Jallek Lenkin"
+ },
+ {
+ "id": "8119",
+ "name": "Meranek Thanatos"
+ },
+ {
+ "id": "8120",
+ "name": "Meranek Thanatos"
+ },
+ {
+ "id": "8121",
+ "name": "Spirit"
+ },
+ {
+ "id": "8122",
+ "name": "Rogue"
+ },
+ {
+ "id": "8123",
+ "name": "Tormented wraith"
+ },
+ {
+ "id": "8126",
+ "name": "Dark energy core"
+ },
+ {
+ "id": "8127",
+ "name": "Dark energy core"
+ },
+ {
+ "id": "8128",
+ "name": "Spirit Beast"
+ },
+ {
+ "id": "8129",
+ "name": "Spirit Beast"
+ },
+ {
+ "id": "8130",
+ "name": "Spirit Beast"
+ },
+ {
+ "id": "8131",
+ "name": "Spirit Beast"
+ },
+ {
+ "id": "8132",
+ "name": "Spirit Beast"
+ },
+ {
+ "id": "8134",
+ "name": "Spirit"
+ },
+ {
+ "id": "8135",
+ "name": "Summer Bonde"
+ },
+ {
+ "id": "8136",
+ "name": "Erik Bonde"
+ },
+ {
+ "id": "8137",
+ "name": "Jallek Lenkin"
+ },
+ {
+ "id": "8138",
+ "name": "Meranek Thanatos"
+ },
+ {
+ "id": "8139",
+ "name": "Hartwin"
+ },
+ {
+ "id": "8140",
+ "name": "Hartwin"
+ },
+ {
+ "id": "8141",
+ "name": "Zombie"
+ },
+ {
+ "id": "8143",
+ "name": "Zombie"
+ },
+ {
+ "id": "8144",
+ "name": "Zombie"
+ },
+ {
+ "id": "8145",
+ "name": "Zombie"
+ },
+ {
+ "id": "8146",
+ "name": "Zemouregal"
+ },
+ {
+ "id": "8147",
+ "name": "Zemouregal"
+ },
+ {
+ "id": "8152",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8153",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8154",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8155",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8156",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8157",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8158",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8159",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8160",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8161",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8162",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8163",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8164",
+ "name": "Armoured zombie"
+ },
+ {
+ "id": "8165",
+ "name": "Sharathteerk"
+ },
+ {
+ "id": "8166",
+ "name": "Sharathteerk"
+ },
+ {
+ "id": "8168",
+ "name": "Arrav"
+ },
+ {
+ "id": "8169",
+ "name": "Arrav"
+ },
+ {
+ "id": "8170",
+ "name": "Ramarno"
+ },
+ {
+ "id": "8171",
+ "name": "Dimintheis"
+ },
+ {
+ "id": "8172",
+ "name": "Dimintheis"
+ },
+ {
+ "id": "8173",
+ "name": "Guard"
+ },
+ {
+ "id": "8174",
+ "name": "Clive"
+ },
+ {
+ "id": "8175",
+ "name": "Ellamaria"
+ },
+ {
+ "id": "8176",
+ "name": "Fish"
+ },
+ {
+ "id": "8177",
+ "name": "Fish"
+ },
+ {
+ "id": "8178",
+ "name": "Monk of Zamorak"
+ },
+ {
+ "id": "8179",
+ "name": "Ellamaria"
+ },
+ {
+ "id": "8180",
+ "name": "Traiborn"
+ },
+ {
+ "id": "8181",
+ "name": "Fenkenstrain's Monster"
+ },
+ {
+ "id": "8182",
+ "name": "Wise Old Man"
+ },
+ {
+ "id": "8183",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8186",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8187",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8188",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8189",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8190",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8191",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8192",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8193",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8194",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8195",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8196",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8197",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8198",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8199",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8200",
+ "name": "Acrobat"
+ },
+ {
+ "id": "8201",
+ "name": "Wendy"
+ },
+ {
+ "id": "8202",
+ "name": "Trogs"
+ },
+ {
+ "id": "8203",
+ "name": "Norman"
+ },
+ {
+ "id": "8204",
+ "name": "Babe"
+ },
+ {
+ "id": "8205",
+ "name": "Gus"
+ },
+ {
+ "id": "8206",
+ "name": "Lottie"
+ },
+ {
+ "id": "8207",
+ "name": "Aggie"
+ },
+ {
+ "id": "8208",
+ "name": "Bat"
+ },
+ {
+ "id": "8209",
+ "name": "Rat"
+ },
+ {
+ "id": "8210",
+ "name": "Lizard"
+ },
+ {
+ "id": "8211",
+ "name": "Blackbird"
+ },
+ {
+ "id": "8212",
+ "name": "Spider"
+ },
+ {
+ "id": "8213",
+ "name": "Snail"
+ },
+ {
+ "id": "8214",
+ "name": "Cat"
+ },
+ {
+ "id": "8215",
+ "name": "Lazy cat"
+ },
+ {
+ "id": "8216",
+ "name": "Overgrown cat"
+ },
+ {
+ "id": "8217",
+ "name": "Kitten"
+ },
+ {
+ "id": "8218",
+ "name": "Wily cat"
+ },
+ {
+ "id": "8219",
+ "name": "Guardian of Armadyl"
+ },
+ {
+ "id": "8227",
+ "name": "Head mystic"
+ },
+ {
+ "id": "8228",
+ "name": "Rewards mystic"
+ },
+ {
+ "id": "8229",
+ "name": "Mystic"
+ },
+ {
+ "id": "8230",
+ "name": "Mystic"
+ },
+ {
+ "id": "8231",
+ "name": "Mystic"
+ },
+ {
+ "id": "8232",
+ "name": "Mystic"
+ },
+ {
+ "id": "8233",
+ "name": "Mystic"
+ },
+ {
+ "id": "8234",
+ "name": "Mystic"
+ },
+ {
+ "id": "8235",
+ "name": "Mystic"
+ },
+ {
+ "id": "8236",
+ "name": "Mystic"
+ },
+ {
+ "id": "8237",
+ "name": "Mystic"
+ },
+ {
+ "id": "8238",
+ "name": "Mystic"
+ },
+ {
+ "id": "8239",
+ "name": "Head mystic"
+ },
+ {
+ "id": "8240",
+ "name": "Clay familiar (class 1)"
+ },
+ {
+ "id": "8241",
+ "name": "Clay familiar (class 1)"
+ },
+ {
+ "id": "8242",
+ "name": "Clay familiar (class 2)"
+ },
+ {
+ "id": "8243",
+ "name": "Clay familiar (class 2)"
+ },
+ {
+ "id": "8244",
+ "name": "Clay familiar (class 3)"
+ },
+ {
+ "id": "8245",
+ "name": "Clay familiar (class 3)"
+ },
+ {
+ "id": "8246",
+ "name": "Clay familiar (class 4)"
+ },
+ {
+ "id": "8247",
+ "name": "Clay familiar (class 4)"
+ },
+ {
+ "id": "8248",
+ "name": "Clay familiar (class 5)"
+ },
+ {
+ "id": "8249",
+ "name": "Clay familiar (class 5)"
+ },
+ {
+ "id": "8250",
+ "name": "Grindxplox"
+ },
+ {
+ "id": "8251",
+ "name": "Grindxplox"
+ },
+ {
+ "id": "8252",
+ "name": "Stealing Creation team"
+ },
+ {
+ "id": "8253",
+ "name": "Resource NPC"
+ },
+ {
+ "id": "8254",
+ "name": "Game NPC"
+ },
+ {
+ "id": "8255",
+ "name": "Resource NPC"
+ },
+ {
+ "id": "8257",
+ "name": "Harrallak Menarous"
+ },
+ {
+ "id": "8269",
+ "name": "Yadech Strongarm"
+ },
+ {
+ "id": "8271",
+ "name": "Turael"
+ },
+ {
+ "id": "8274",
+ "name": "Mazchna"
+ },
+ {
+ "id": "8275",
+ "name": "Duradel"
+ },
+ {
+ "id": "8276",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "8280",
+ "name": "Sloane"
+ },
+ {
+ "id": "8281",
+ "name": "Balance Elemental"
+ },
+ {
+ "id": "8282",
+ "name": "Balance Elemental"
+ },
+ {
+ "id": "8283",
+ "name": "Balance Elemental"
+ },
+ {
+ "id": "8284",
+ "name": "Balance Elemental"
+ },
+ {
+ "id": "8285",
+ "name": "Balance Elemental"
+ },
+ {
+ "id": "8286",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8287",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8288",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8289",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8290",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8291",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8292",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8293",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8294",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8295",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8296",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8297",
+ "name": "Undead hero"
+ },
+ {
+ "id": "8298",
+ "name": "Stone block"
+ },
+ {
+ "id": "8299",
+ "name": "Harrallak Menarous"
+ },
+ {
+ "id": "8300",
+ "name": "Harrallak Menarous"
+ },
+ {
+ "id": "8301",
+ "name": "Harrallak Menarous"
+ },
+ {
+ "id": "8302",
+ "name": "Turael"
+ },
+ {
+ "id": "8303",
+ "name": "Turael"
+ },
+ {
+ "id": "8304",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "8305",
+ "name": "Cyrisus"
+ },
+ {
+ "id": "8306",
+ "name": "Ghommal"
+ },
+ {
+ "id": "8307",
+ "name": "Mazchna"
+ },
+ {
+ "id": "8308",
+ "name": "Mazchna"
+ },
+ {
+ "id": "8309",
+ "name": "Mazchna"
+ },
+ {
+ "id": "8310",
+ "name": "Duradel"
+ },
+ {
+ "id": "8311",
+ "name": "Sloane"
+ },
+ {
+ "id": "8317",
+ "name": "Elite Dark Ranger"
+ },
+ {
+ "id": "8318",
+ "name": "Elite Dark Ranger"
+ },
+ {
+ "id": "8319",
+ "name": "Elite Dark Ranger"
+ },
+ {
+ "id": "8320",
+ "name": "Elite Dark Mage"
+ },
+ {
+ "id": "8321",
+ "name": "Elite Dark Mage"
+ },
+ {
+ "id": "8322",
+ "name": "Elite Dark Mage"
+ },
+ {
+ "id": "8323",
+ "name": "Elite Dark Mage"
+ },
+ {
+ "id": "8324",
+ "name": "Elite Black Knight"
+ },
+ {
+ "id": "8325",
+ "name": "Elite Black Knight"
+ },
+ {
+ "id": "8326",
+ "name": "Elite Black Knight"
+ },
+ {
+ "id": "8327",
+ "name": "Elite Black Knight"
+ },
+ {
+ "id": "8328",
+ "name": "Elite Black Knight"
+ },
+ {
+ "id": "8329",
+ "name": "Elite Black Knight"
+ },
+ {
+ "id": "8330",
+ "name": "Elite Black Knight"
+ },
+ {
+ "id": "8331",
+ "name": "Guardian of Armadyl"
+ },
+ {
+ "id": "8332",
+ "name": "Guardian of Armadyl"
+ },
+ {
+ "id": "8333",
+ "name": "Guardian of Armadyl"
+ },
+ {
+ "id": "8334",
+ "name": "Mercenary axeman"
+ },
+ {
+ "id": "8335",
+ "name": "Mercenary mage"
+ },
+ {
+ "id": "8336",
+ "name": "Idria"
+ },
+ {
+ "id": "8337",
+ "name": "Idria"
+ },
+ {
+ "id": "8338",
+ "name": "Akrisae"
+ },
+ {
+ "id": "8339",
+ "name": "Shady stranger"
+ },
+ {
+ "id": "8340",
+ "name": "Shady stranger"
+ },
+ {
+ "id": "8341",
+ "name": "Shady stranger"
+ },
+ {
+ "id": "8342",
+ "name": "Guardian of Armadyl"
+ },
+ {
+ "id": "8344",
+ "name": "Guardian of Armadyl"
+ },
+ {
+ "id": "8345",
+ "name": "Local thug"
+ },
+ {
+ "id": "8347",
+ "name": "Local mage"
+ },
+ {
+ "id": "8367",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8378",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8379",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8380",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8381",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8382",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8383",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8384",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8385",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8386",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8387",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8388",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8389",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8390",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8391",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8392",
+ "name": "Undead troll"
+ },
+ {
+ "id": "8393",
+ "name": "Vasador"
+ },
+ {
+ "id": "8394",
+ "name": "Valator"
+ },
+ {
+ "id": "8395",
+ "name": "Vaasdor"
+ },
+ {
+ "id": "8396",
+ "name": "Varosad"
+ },
+ {
+ "id": "8397",
+ "name": "Verisad"
+ },
+ {
+ "id": "8398",
+ "name": "Vudisor"
+ },
+ {
+ "id": "8399",
+ "name": "Vlatoad"
+ },
+ {
+ "id": "8400",
+ "name": "Vedolas"
+ },
+ {
+ "id": "8401",
+ "name": "Vundiar"
+ },
+ {
+ "id": "8402",
+ "name": "Versita"
+ },
+ {
+ "id": "8403",
+ "name": "Vislota"
+ },
+ {
+ "id": "8404",
+ "name": "Vanjuta"
+ },
+ {
+ "id": "8405",
+ "name": "Vasador"
+ },
+ {
+ "id": "8406",
+ "name": "Valator"
+ },
+ {
+ "id": "8407",
+ "name": "Vaasdor"
+ },
+ {
+ "id": "8408",
+ "name": "Varosad"
+ },
+ {
+ "id": "8409",
+ "name": "Verisad"
+ },
+ {
+ "id": "8410",
+ "name": "Vudisor"
+ },
+ {
+ "id": "8411",
+ "name": "Vlatoad"
+ },
+ {
+ "id": "8412",
+ "name": "Vedolas"
+ },
+ {
+ "id": "8413",
+ "name": "Vundiar"
+ },
+ {
+ "id": "8414",
+ "name": "Versita"
+ },
+ {
+ "id": "8415",
+ "name": "Vislota"
+ },
+ {
+ "id": "8416",
+ "name": "Vanjuta"
+ },
+ {
+ "id": "8417",
+ "name": "Ivy Sophista"
+ },
+ {
+ "id": "8418",
+ "name": "Thaerisk Cemphier"
+ },
+ {
+ "id": "8419",
+ "name": "Thaerisk Cemphier"
+ },
+ {
+ "id": "8420",
+ "name": "Assassin"
+ },
+ {
+ "id": "8423",
+ "name": "Assassin"
+ },
+ {
+ "id": "8424",
+ "name": "Mithril dragon"
+ },
+ {
+ "id": "8425",
+ "name": "Dragon head"
+ },
+ {
+ "id": "8426",
+ "name": "Dragon head"
+ },
+ {
+ "id": "8427",
+ "name": "Dragon head"
+ },
+ {
+ "id": "8428",
+ "name": "Khazard launderer"
+ },
+ {
+ "id": "8429",
+ "name": "Khazard cook"
+ },
+ {
+ "id": "8430",
+ "name": "Silif"
+ },
+ {
+ "id": "8431",
+ "name": "Silif"
+ },
+ {
+ "id": "8432",
+ "name": "Silif"
+ },
+ {
+ "id": "8433",
+ "name": "Silif"
+ },
+ {
+ "id": "8434",
+ "name": "Silif"
+ },
+ {
+ "id": "8435",
+ "name": "Shady stranger"
+ },
+ {
+ "id": "8436",
+ "name": "Suspicious outsider"
+ },
+ {
+ "id": "8437",
+ "name": "Elite Khazard guard"
+ },
+ {
+ "id": "8438",
+ "name": "Elite Khazard guard"
+ },
+ {
+ "id": "8439",
+ "name": "Elite Khazard guard"
+ },
+ {
+ "id": "8440",
+ "name": "Elite Khazard guard"
+ },
+ {
+ "id": "8441",
+ "name": "Dark Squall"
+ },
+ {
+ "id": "8442",
+ "name": "Surok Magis"
+ },
+ {
+ "id": "8443",
+ "name": "Lucien"
+ },
+ {
+ "id": "8444",
+ "name": "Druid"
+ },
+ {
+ "id": "8445",
+ "name": "Druid"
+ },
+ {
+ "id": "8446",
+ "name": "Druid"
+ },
+ {
+ "id": "8447",
+ "name": "Druid bodyguard"
+ },
+ {
+ "id": "8448",
+ "name": "Druid bodyguard"
+ },
+ {
+ "id": "8449",
+ "name": "Movario"
+ },
+ {
+ "id": "8450",
+ "name": "Darve"
+ },
+ {
+ "id": "8451",
+ "name": "Cave goblin"
+ },
+ {
+ "id": "8452",
+ "name": "Movario"
+ },
+ {
+ "id": "8453",
+ "name": "Darve"
+ },
+ {
+ "id": "8454",
+ "name": "Light creature"
+ },
+ {
+ "id": "8455",
+ "name": "Light creature"
+ },
+ {
+ "id": "8456",
+ "name": "Druid spirit"
+ },
+ {
+ "id": "8457",
+ "name": "Druid spirit"
+ },
+ {
+ "id": "8458",
+ "name": "Druid spirit"
+ },
+ {
+ "id": "8459",
+ "name": "Druid spirit"
+ },
+ {
+ "id": "8460",
+ "name": "Turael"
+ },
+ {
+ "id": "8462",
+ "name": "Spria"
+ },
+ {
+ "id": "8463",
+ "name": "Mazchna"
+ },
+ {
+ "id": "8464",
+ "name": "Mazchna"
+ },
+ {
+ "id": "8465",
+ "name": "Achtryn"
+ },
+ {
+ "id": "8466",
+ "name": "Duradel"
+ },
+ {
+ "id": "8467",
+ "name": "Lapalok"
+ },
+ {
+ "id": "8468",
+ "name": "Laidee Gnonock"
+ },
+ {
+ "id": "8485",
+ "name": "Hazelmere"
+ },
+ {
+ "id": "8486",
+ "name": "Undead mage"
+ },
+ {
+ "id": "8487",
+ "name": "Wild broav"
+ },
+ {
+ "id": "8488",
+ "name": "Hazelmere"
+ },
+ {
+ "id": "8490",
+ "name": "Hazelmere"
+ },
+ {
+ "id": "8491",
+ "name": "Broav"
+ },
+ {
+ "id": "8492",
+ "name": "Sithaph"
+ },
+ {
+ "id": "8494",
+ "name": "Strisath"
+ },
+ {
+ "id": "8495",
+ "name": "Sakirth"
+ },
+ {
+ "id": "8496",
+ "name": "Hazelmere's hat"
+ },
+ {
+ "id": "8497",
+ "name": "Lucien"
+ },
+ {
+ "id": "8498",
+ "name": "A lazy Khazard guard"
+ },
+ {
+ "id": "8499",
+ "name": "Thanksgiving Turkey"
+ },
+ {
+ "id": "8500",
+ "name": "Cook's brother"
+ },
+ {
+ "id": "8501",
+ "name": "Turkey"
+ },
+ {
+ "id": "8502",
+ "name": "Cactus"
+ },
+ {
+ "id": "8503",
+ "name": "Cactus"
+ },
+ {
+ "id": "8504",
+ "name": "Bush"
+ },
+ {
+ "id": "8505",
+ "name": "Toadstool"
+ },
+ {
+ "id": "8506",
+ "name": "Barrel"
+ },
+ {
+ "id": "8507",
+ "name": "Bush"
+ },
+ {
+ "id": "8508",
+ "name": "Crate"
+ },
+ {
+ "id": "8509",
+ "name": "Bush"
+ },
+ {
+ "id": "8510",
+ "name": "Rock"
+ },
+ {
+ "id": "8511",
+ "name": "Bush"
+ },
+ {
+ "id": "8512",
+ "name": "Marvin"
+ },
+ {
+ "id": "8513",
+ "name": "Marius"
+ },
+ {
+ "id": "8514",
+ "name": "Benny"
+ },
+ {
+ "id": "8515",
+ "name": "Yeti"
+ },
+ {
+ "id": "8516",
+ "name": "Yeti"
+ },
+ {
+ "id": "8517",
+ "name": "Jack Frost"
+ },
+ {
+ "id": "8518",
+ "name": "Jack Frost"
+ },
+ {
+ "id": "8519",
+ "name": "Jack Frost"
+ },
+ {
+ "id": "8520",
+ "name": "Jack Frost"
+ },
+ {
+ "id": "8521",
+ "name": "Snow imp"
+ },
+ {
+ "id": "8537",
+ "name": "Snow imp"
+ },
+ {
+ "id": "8538",
+ "name": "Snow imp"
+ },
+ {
+ "id": "8539",
+ "name": "Queen of Snow"
+ },
+ {
+ "id": "8540",
+ "name": "Santa Claus"
+ },
+ {
+ "id": "8541",
+ "name": "Head snow imp"
+ },
+ {
+ "id": "8542",
+ "name": "Head snow imp"
+ },
+ {
+ "id": "8543",
+ "name": "Head snow imp"
+ },
+ {
+ "id": "8544",
+ "name": "Isidor"
+ },
+ {
+ "id": "8545",
+ "name": "Mystic"
+ },
+ {
+ "id": "8546",
+ "name": "Balance Elemental"
+ },
+ {
+ "id": "8547",
+ "name": "Wounded phoenix"
+ },
+ {
+ "id": "8548",
+ "name": "Phoenix"
+ },
+ {
+ "id": "8549",
+ "name": "Phoenix"
+ },
+ {
+ "id": "8550",
+ "name": "Phoenix eggling"
+ },
+ {
+ "id": "8551",
+ "name": "Phoenix eggling"
+ },
+ {
+ "id": "8552",
+ "name": "Large egg"
+ },
+ {
+ "id": "8553",
+ "name": "Priest of Guthix"
+ },
+ {
+ "id": "8556",
+ "name": "Brian Twitcher"
+ },
+ {
+ "id": "8557",
+ "name": "Lesser reborn warrior"
+ },
+ {
+ "id": "8558",
+ "name": "Lesser reborn warrior"
+ },
+ {
+ "id": "8559",
+ "name": "Greater reborn warrior"
+ },
+ {
+ "id": "8560",
+ "name": "Greater reborn warrior"
+ },
+ {
+ "id": "8561",
+ "name": "Lesser reborn ranger"
+ },
+ {
+ "id": "8562",
+ "name": "Lesser reborn ranger"
+ },
+ {
+ "id": "8563",
+ "name": "Greater reborn ranger"
+ },
+ {
+ "id": "8564",
+ "name": "Greater reborn ranger"
+ },
+ {
+ "id": "8565",
+ "name": "Lesser reborn mage"
+ },
+ {
+ "id": "8566",
+ "name": "Lesser reborn mage"
+ },
+ {
+ "id": "8567",
+ "name": "Greater reborn mage"
+ },
+ {
+ "id": "8568",
+ "name": "Greater reborn mage"
+ },
+ {
+ "id": "8569",
+ "name": "Lesser reborn warrior"
+ },
+ {
+ "id": "8570",
+ "name": "Greater reborn warrior"
+ },
+ {
+ "id": "8571",
+ "name": "Lesser reborn ranger"
+ },
+ {
+ "id": "8572",
+ "name": "Greater reborn ranger"
+ },
+ {
+ "id": "8573",
+ "name": "Lesser reborn mage"
+ },
+ {
+ "id": "8574",
+ "name": "Greater reborn mage"
+ },
+ {
+ "id": "8575",
+ "name": "Phoenix"
+ },
+ {
+ "id": "8576",
+ "name": "Phoenix"
+ },
+ {
+ "id": "8577",
+ "name": "Phoenix eggling"
+ },
+ {
+ "id": "8578",
+ "name": "Phoenix eggling"
+ },
+ {
+ "id": "8579",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8581",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8582",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8583",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8584",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8585",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8586",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8587",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8588",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8589",
+ "name": "Karma the chameleon"
+ },
+ {
+ "id": "8590",
+ "name": "Geoffrey"
+ },
{
"examine": "Ooh, shiny things!",
"name": "Magpie Impling",
@@ -72242,19 +87699,198 @@
"name": "Essence Impling",
"id": "1032"
},
+ {
+ "examine": "Dodgy Mike.",
+ "name": "Mike",
+ "id": "3166"
+ },
{
"examine": "An impling with varied tastes.",
"name": "Eclectic Impling",
"id": "1033"
},
+ {
+ "examine": "He seems to be making odd sucking noises with his teeth.",
+ "name": "Leon",
+ "id": "5111"
+ },
{
"examine": "A very stealthy impling.",
"name": "Ninja Impling",
"id": "6053"
},
+ {
+ "examine": "A rare bird.",
+ "name": "Black Swan",
+ "water_npc": "true",
+ "id": "3297"
+ },
{
"examine": "A nature impling. Right on, maaan.",
"name": "Nature Impling",
"id": "1034"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner (boss)",
+ "defence_level": "10",
+ "lifepoints": "19",
+ "melee_animation": "428",
+ "attack_speed": "4",
+ "strength_level": "10",
+ "id": "370",
+ "bonuses": "0,0,0,0,0,3,2,4,0,0,0,0,0,0,0",
+ "attack_level": "10"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "717"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "718"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "719"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "3216"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "14",
+ "melee_animation": "428",
+ "lifepoints": "24",
+ "attack_speed": "4",
+ "strength_level": "14",
+ "id": "357",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "14"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "19",
+ "melee_animation": "422",
+ "lifepoints": "30",
+ "attack_speed": "4",
+ "strength_level": "19",
+ "id": "348",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "19"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "19",
+ "melee_animation": "422",
+ "lifepoints": "30",
+ "attack_speed": "4",
+ "strength_level": "19",
+ "id": "369",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "19"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "8",
+ "lifepoints": "18",
+ "melee_animation": "428",
+ "strength_level": "8",
+ "attack_speed": "4",
+ "id": "347",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "8"
+ },
+ {
+ "examine": "A Mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "2374"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "372"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "8",
+ "lifepoints": "20",
+ "melee_animation": "422",
+ "attack_speed": "4",
+ "strength_level": "8",
+ "id": "371",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "8"
+ },
+ {
+ "examine": "In charge of people with silly outfits.",
+ "name": "Head Mourner",
+ "id": "716"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "2784"
+ },
+ {
+ "examine": "She looks concerned.",
+ "name": "Elena",
+ "id": "3215"
+ },
+ {
+ "examine": "She looks concerned.",
+ "name": "Elena",
+ "id": "715"
+ },
+ {
+ "examine": "She doesn't look too happy.",
+ "name": "Elena",
+ "id": "3209"
+ },
+ {
+ "name": "Elena",
+ "id": "335",
+ "examine": "She doesn't look too happy."
+ },
+ {
+ "examine": "Use 1344 to change me",
+ "name": "Skippy Varbit",
+ "id": "2795"
+ },
+ {
+ "examine": "He looks angry and smells drunk.",
+ "name": "Skippy",
+ "id": "2796"
+ },
+ {
+ "name": "Skippy",
+ "id": "2797",
+ "examine": "Skippy, just looking a little 'tender'."
+ },
+ {
+ "name": "Skippy",
+ "id": "2798",
+ "examine": "He seems a lot less angry and smells a great deal fresher."
+ },
+ {
+ "name": "Skippy",
+ "id": "2799",
+ "examine": "He seems a bit confused."
}
]
\ No newline at end of file
diff --git a/Server/data/configs/npc_spawns.json b/Server/data/configs/npc_spawns.json
index 0074b7fab..8899eea83 100644
--- a/Server/data/configs/npc_spawns.json
+++ b/Server/data/configs/npc_spawns.json
@@ -157,7 +157,7 @@
},
{
"npc_id": "47",
- "loc_data": "{2821,3170,0,1,1}-{3076,3282,0,1,5}-{3089,3266,0,1,4}-{3091,3266,0,1,4}-{3341,3267,0,1,5}-{3097,3364,0,1,3}-{3102,3363,0,1,5}-{3127,3487,0,1,4}-{3125,3486,0,1,6}-{3127,3486,0,1,4}-{2603,9480,0,1,1}-{2600,9477,0,1,0}-{2579,9496,0,1,4}-{2580,9508,0,1,0}-{2571,9522,0,1,4}-{2565,9505,0,1,1}-{2566,9510,0,1,6}-{2594,9497,0,1,4}-{2852,9642,0,1,6}-{2858,9632,0,1,3}-{2568,9620,0,1,0}-{2573,9612,0,1,0}-{2579,9631,0,1,0}-{2580,9600,0,1,0}-{2580,9614,0,1,0}-{2580,9620,0,1,0}-{2580,9626,0,1,0}-{2583,9632,0,1,0}-{2584,9625,0,1,0}-{2584,9637,0,1,0}-{2589,9644,0,1,0}-{2590,9601,0,1,0}-{2590,9638,0,1,0}-{2591,9601,0,1,0}-{2591,9621,0,1,0}-{2594,9636,0,1,0}-{2594,9644,0,1,0}-{2597,9604,0,1,0}-{2607,9615,0,1,0}-{2608,9628,0,1,0}-{2614,9651,0,1,0}-{2614,9656,0,1,0}-{2615,9647,0,1,0}-{2615,9661,0,1,0}-{2616,9633,0,1,0}-{2618,9630,0,1,0}-{3108,9754,0,1,5}-{3110,9754,0,1,5}-{3108,9750,0,1,5}-{2592,9831,0,1,3}-{2588,9825,0,1,6}-{2583,9829,0,1,4}-{2581,9841,0,1,0}-{2597,9823,0,1,2}-{2579,9805,0,1,3}-{2576,9804,0,1,0}-{2573,9805,0,1,5}-{2571,9808,0,1,3}-{2576,9810,0,1,2}-{2587,9802,0,1,2}-{2592,9800,0,1,4}-{2596,9805,0,1,6}-{2601,9802,0,1,5}-{2585,9801,0,1,7}-{2594,9803,0,1,0}-{2590,9806,0,1,3}-{2612,9808,0,1,6}-{2604,9810,0,1,6}-{2579,9821,0,1,2}-{2576,9812,0,1,6}-{2580,9813,0,1,6}-{2600,9813,0,1,4}-{2599,9809,0,1,4}-{3158,3226,0,1,5}-{3160,3202,0,1,4}-{3192,3203,0,1,0}-{3194,3204,0,1,0}-{3196,3206,0,1,0}-{3197,3204,0,1,0}-{2654,9640,0,1,6}-{2655,9637,0,1,4}-{2656,9639,0,1,7}-{2651,9636,0,1,5}-{2648,9637,0,1,4}-{2651,9642,0,1,1}-{2654,9640,0,1,0}-{2654,9635,0,1,6}-{2655,9635,0,1,3}-{2664,9626,0,1,6}-{2664,9624,0,1,1}-{2661,9623,0,1,1}-{2663,9623,0,1,3}-{2664,9626,0,1,6}-{2930,9699,0,1,0}-{2933,9697,0,1,0}-{2932,9685,0,1,0}-{2930,9693,0,1,0}-{3235,3224,0,1,3}-{3229,3220,0,1,4}-{3211,3211,0,1,3}-{3225,3220,0,1,1}-{3237,3215,0,1,5}-{3211,3210,0,1,7}-{3227,3220,0,1,7}-{3233,3227,0,1,5}-{3227,3210,0,1,6}-{3228,3222,0,1,4}-{3229,3226,0,1,0}-{3236,3217,0,1,4}-{3259,3230,0,1,4}-{3233,3237,0,1,7}-{3205,3204,0,1,0}-{3206,3204,0,1,0}-{3205,3203,0,1,0}-{3206,3202,0,1,0}-{3207,3202,0,1,0}-{3208,3203,0,1,0}-{3001,3202,0,1,5}-{3243,3687,0,1,5}-{3249,3669,0,1,3}-{3252,3675,0,1,4}-{3252,3680,0,1,3}-{3259,3683,0,1,0}-{3475,9840,0,1,6}-{3481,9842,0,1,1}-{3486,9843,0,1,7}-{3483,9824,0,1,4}-{3496,9808,0,0,5}-{3490,9815,0,1,1}-{3478,9834,0,0,3}-{3490,9824,0,1,4}-{3225,9862,0,1,4}-{3222,9861,0,1,6}-{3220,9860,0,1,6}-{3219,9865,0,1,6}-{3237,9862,0,1,4}-{2536,2982,0,1,3}-{2531,2980,0,1,0}-{2522,2981,0,1,4}-{2545,2989,0,1,4}-{2523,2970,0,1,2}-{3026,3174,0,1,5}-{3019,3176,0,1,7}-{2801,3158,0,1,2}-{2514,3193,0,1,6}-{2518,3192,0,1,3}-{2507,3181,0,1,3}-{2508,3178,0,1,6}-{2511,3183,0,1,3}-{2515,3182,0,1,1}-{3021,3205,0,1,6}-{3019,3292,0,1,7}-{3018,3295,0,1,7}-{2531,3325,0,1,3}-{2530,3327,0,1,5}-{2521,3331,0,1,3}-{2526,3328,0,1,3}-{2523,3331,0,1,4}-{2523,3334,0,1,1}-{2531,3329,0,1,5}-{2532,3333,0,1,5}-{3276,9871,0,1,1}-{3277,9871,0,1,3}-"
+ "loc_data": "{2821,3170,0,1,1}-{3341,3267,0,1,5}-{3076,3282,0,1,5}-{3089,3266,0,1,4}-{3091,3266,0,1,4}-{3097,3364,0,1,3}-{3102,3363,0,1,5}-{3127,3487,0,1,4}-{3125,3486,0,1,6}-{3127,3486,0,1,4}-{2603,9480,0,1,1}-{2600,9477,0,1,0}-{2579,9496,0,1,4}-{2580,9508,0,1,0}-{2571,9522,0,1,4}-{2565,9505,0,1,1}-{2566,9510,0,1,6}-{2594,9497,0,1,4}-{2852,9642,0,1,6}-{2858,9632,0,1,3}-{2568,9620,0,1,0}-{2573,9612,0,1,0}-{2579,9631,0,1,0}-{2580,9600,0,1,0}-{2580,9614,0,1,0}-{2580,9620,0,1,0}-{2580,9626,0,1,0}-{2583,9632,0,1,0}-{2584,9625,0,1,0}-{2584,9637,0,1,0}-{2589,9644,0,1,0}-{2590,9601,0,1,0}-{2590,9638,0,1,0}-{2591,9601,0,1,0}-{2591,9621,0,1,0}-{2594,9636,0,1,0}-{2594,9644,0,1,0}-{2597,9604,0,1,0}-{2607,9615,0,1,0}-{2608,9628,0,1,0}-{2614,9651,0,1,0}-{2614,9656,0,1,0}-{2615,9647,0,1,0}-{2615,9661,0,1,0}-{2616,9633,0,1,0}-{2618,9630,0,1,0}-{3108,9754,0,1,5}-{3110,9754,0,1,5}-{3108,9750,0,1,5}-{2592,9831,0,1,3}-{2588,9825,0,1,6}-{2583,9829,0,1,4}-{2581,9841,0,1,0}-{2597,9823,0,1,2}-{2579,9805,0,1,3}-{2576,9804,0,1,0}-{2573,9805,0,1,5}-{2571,9808,0,1,3}-{2576,9810,0,1,2}-{2587,9802,0,1,2}-{2592,9800,0,1,4}-{2596,9805,0,1,6}-{2601,9802,0,1,5}-{2585,9801,0,1,7}-{2594,9803,0,1,0}-{2590,9806,0,1,3}-{2612,9808,0,1,6}-{2604,9810,0,1,6}-{2579,9821,0,1,2}-{2576,9812,0,1,6}-{2580,9813,0,1,6}-{2600,9813,0,1,4}-{2599,9809,0,1,4}-{3158,3226,0,1,5}-{3160,3202,0,1,4}-{3192,3203,0,1,0}-{3194,3204,0,1,0}-{3196,3206,0,1,0}-{3197,3204,0,1,0}-{2654,9640,0,1,6}-{2655,9637,0,1,4}-{2656,9639,0,1,7}-{2651,9636,0,1,5}-{2648,9637,0,1,4}-{2651,9642,0,1,1}-{2654,9640,0,1,0}-{2654,9635,0,1,6}-{2655,9635,0,1,3}-{2664,9626,0,1,6}-{2664,9624,0,1,1}-{2661,9623,0,1,1}-{2663,9623,0,1,3}-{2664,9626,0,1,6}-{2930,9699,0,1,0}-{2933,9697,0,1,0}-{2932,9685,0,1,0}-{2930,9693,0,1,0}-{3235,3224,0,1,3}-{3229,3220,0,1,4}-{3211,3211,0,1,3}-{3225,3220,0,1,1}-{3237,3215,0,1,5}-{3211,3210,0,1,7}-{3227,3220,0,1,7}-{3233,3227,0,1,5}-{3227,3210,0,1,6}-{3228,3222,0,1,4}-{3229,3226,0,1,0}-{3236,3217,0,1,4}-{3259,3230,0,1,4}-{3233,3237,0,1,7}-{3205,3204,0,1,0}-{3206,3204,0,1,0}-{3205,3203,0,1,0}-{3206,3202,0,1,0}-{3207,3202,0,1,0}-{3208,3203,0,1,0}-{3001,3202,0,1,5}-{3243,3687,0,1,5}-{3249,3669,0,1,3}-{3252,3675,0,1,4}-{3252,3680,0,1,3}-{3259,3683,0,1,0}-{3475,9840,0,1,6}-{3481,9842,0,1,1}-{3486,9843,0,1,7}-{3483,9824,0,1,4}-{3496,9808,0,0,5}-{3490,9815,0,1,1}-{3478,9834,0,0,3}-{3490,9824,0,1,4}-{3225,9862,0,1,4}-{3222,9861,0,1,6}-{3220,9860,0,1,6}-{3219,9865,0,1,6}-{3237,9862,0,1,4}-{2536,2982,0,1,3}-{2531,2980,0,1,0}-{2522,2981,0,1,4}-{2545,2989,0,1,4}-{2523,2970,0,1,2}-{3026,3174,0,1,5}-{3019,3176,0,1,7}-{2801,3158,0,1,2}-{2514,3193,0,1,6}-{2518,3192,0,1,3}-{2507,3181,0,1,3}-{2508,3178,0,1,6}-{2511,3183,0,1,3}-{2515,3182,0,1,1}-{3021,3205,0,1,6}-{3019,3292,0,1,7}-{3018,3295,0,1,7}-{2531,3325,0,1,3}-{2530,3327,0,1,5}-{2521,3331,0,1,3}-{2526,3328,0,1,3}-{2523,3331,0,1,4}-{2523,3334,0,1,1}-{2531,3329,0,1,5}-{2532,3333,0,1,5}-{3276,9871,0,1,1}-{3277,9871,0,1,3}-"
},
{
"npc_id": "48",
@@ -193,7 +193,7 @@
},
{
"npc_id": "59",
- "loc_data": "{3082,3362,0,1,4}-{2602,9640,0,1,0}-{2603,9635,0,1,0}-{2603,9638,0,1,0}-{2605,9637,0,1,0}-{2605,9639,0,1,0}-{2606,9635,0,1,0}-{2606,9646,0,1,0}-{2607,9637,0,1,0}-{2607,9641,0,1,0}-{2607,9644,0,1,0}-{2607,9648,0,1,0}-{2608,9635,0,1,0}-{2608,9642,0,1,0}-{2609,9639,0,1,0}-{2609,9643,0,1,0}-{3102,9881,0,1,3}-{3095,9883,0,1,2}-{3182,3244,0,1,1}-{3162,3223,0,1,7}-{3164,3242,0,1,0}-{3169,3246,0,1,0}-{3170,3250,0,1,0}-{3166,3247,0,1,0}-{3164,3249,0,1,0}-{3157,3226,0,1,0}-{3163,3227,0,1,0}-{3165,3223,0,1,0}-{3194,3236,0,1,0}-{3146,3347,0,1,3}-{2648,9766,0,1,4}-{2653,9761,0,1,3}-{2483,2877,0,1,3}-{2481,2876,0,1,4}-{2457,2867,0,1,4}-{2481,2847,0,1,0}-{2475,2854,0,1,3}-{2482,2873,0,1,3}-{2485,2876,0,1,2}-{2449,2865,0,1,1}-{2461,2880,0,1,5}-{2489,2935,0,1,7}-{2492,2907,0,1,1}-{2487,2894,0,1,2}-{2487,2888,0,1,7}-{2478,2916,0,1,5}-{2485,2902,0,1,3}-{2487,2902,0,1,2}-{2489,2894,0,1,2}-{2490,2905,0,1,7}-{2490,2917,0,1,5}-{2484,2890,0,1,1}-{2491,2927,0,1,1}-{3250,3239,0,1,1}-{3241,3241,0,1,1}-{3249,3249,0,1,1}-{3218,9890,0,1,3}-{3220,9887,0,1,0}-{3218,9887,0,1,1}-{3218,9889,0,1,5}-{3213,9890,0,1,1}-{2496,2890,0,1,4}-{2503,2889,0,1,1}-{2497,2939,0,1,2}-"
+ "loc_data": "{3082,3362,0,1,4}-{2602,9640,0,1,0}-{2603,9635,0,1,0}-{2603,9638,0,1,0}-{2605,9637,0,1,0}-{2605,9639,0,1,0}-{2606,9635,0,1,0}-{2606,9646,0,1,0}-{2607,9637,0,1,0}-{2607,9641,0,1,0}-{2607,9644,0,1,0}-{2607,9648,0,1,0}-{2608,9635,0,1,0}-{2608,9642,0,1,0}-{2609,9639,0,1,0}-{2609,9643,0,1,0}-{3102,9881,0,1,3}-{3095,9883,0,1,2}-{3182,3244,0,1,1}-{3162,3223,0,1,7}-{3164,3242,0,1,0}-{3169,3246,0,1,0}-{3170,3250,0,1,0}-{3166,3247,0,1,0}-{3164,3249,0,1,0}-{3157,3226,0,1,0}-{3163,3227,0,1,0}-{3165,3223,0,1,0}-{3194,3236,0,1,0}-{3146,3347,0,1,3}-{2648,9766,0,1,4}-{2653,9761,0,1,3}-{2483,2877,0,1,3}-{2481,2876,0,1,4}-{2457,2867,0,1,4}-{2481,2847,0,1,0}-{2475,2854,0,1,3}-{2482,2873,0,1,3}-{2485,2876,0,1,2}-{2449,2865,0,1,1}-{2461,2880,0,1,5}-{2489,2935,0,1,7}-{2492,2907,0,1,1}-{2487,2894,0,1,2}-{2487,2888,0,1,7}-{2478,2916,0,1,5}-{2485,2902,0,1,3}-{2487,2902,0,1,2}-{2489,2894,0,1,2}-{2490,2905,0,1,7}-{2490,2917,0,1,5}-{2484,2890,0,1,1}-{2491,2927,0,1,1}-{3250,3239,0,1,1}-{3241,3241,0,1,1}-{3249,3249,0,1,1}-{3218,9890,0,1,3}-{3220,9887,0,1,0}-{3218,9887,0,1,1}-{3218,9889,0,1,5}-{3213,9890,0,1,1}-{2496,2890,0,1,4}-{2503,2889,0,1,1}-{2497,2939,0,1,2}-{2369,3374,0,1,0}-{2372,3379,0,1,0}-{2378,3366,0,1,0}-{2379,3378,0,1,0}-{2387,3370,0,1,0}-{2394,3365,0,1,0}-{2402,3386,0,1,0}-{2405,3381,0,1,0}-{2407,3387,0,1,0}-{2412,3384,0,1,0}-"
},
{
"npc_id": "60",
@@ -213,19 +213,19 @@
},
{
"npc_id": "64",
- "loc_data": "{2684,9798,0,1,2}-{2959,3917,0,1,0}-{2960,3925,0,1,0}-{2961,3920,0,1,0}-{2962,3915,0,1,0}-{2962,3933,0,1,0}-{2963,3923,0,1,0}-{2963,3929,0,1,0}-{2965,3927,0,1,0}-{2965,3931,0,1,0}-{2691,9814,0,1,5}-{2694,9819,0,1,6}-{2696,9831,0,1,3}-{2702,9837,0,1,6}-{2709,9844,0,1,3}-{2720,9847,0,1,4}-{2724,9843,0,1,6}-{2733,9846,0,1,4}-{2740,9841,0,1,3}-{2745,9836,0,1,4}-{2745,9828,0,1,5}-{2747,9826,0,1,1}-{2819,9950,0,1,0}-{2824,9934,0,1,0}-{2827,9925,0,1,0}-{2828,9956,0,1,0}-{2857,9969,0,1,0}-{2872,9972,0,1,0}-{2869,9912,0,1,0}-{2885,9962,0,1,0}-{2887,9936,0,1,0}-"
+ "loc_data": "{2869,9912,0,1,0}-{2819,9950,0,1,0}-{2824,9934,0,1,0}-{2827,9925,0,1,0}-{2828,9956,0,1,0}-{2857,9969,0,1,0}-{2872,9972,0,1,0}-{2684,9798,0,1,2}-{2885,9962,0,1,0}-{2887,9936,0,1,0}-{2959,3917,0,1,0}-{2960,3925,0,1,0}-{2961,3920,0,1,0}-{2962,3915,0,1,0}-{2962,3933,0,1,0}-{2963,3923,0,1,0}-{2963,3929,0,1,0}-{2965,3927,0,1,0}-{2965,3931,0,1,0}-{2691,9814,0,1,5}-{2694,9819,0,1,6}-{2696,9831,0,1,3}-{2702,9837,0,1,6}-{2709,9844,0,1,3}-{2720,9847,0,1,4}-{2724,9843,0,1,6}-{2733,9846,0,1,4}-{2740,9841,0,1,3}-{2745,9836,0,1,4}-{2745,9828,0,1,5}-{2747,9826,0,1,1}-"
},
{
"npc_id": "66",
- "loc_data": "{2526,3169,0,1,6}-{2528,3164,0,1,6}-{2529,3169,0,1,1}-{2537,3170,0,1,1}-{2507,3204,0,1,5}-{2506,3205,0,1,6}-{2540,3226,0,1,6}-"
+ "loc_data": "{2417,3493,1,1,0}-{2418,3495,1,1,0}-{2383,3452,0,1,0}-{2401,3417,0,1,0}-{2402,3422,0,1,0}-{2402,3441,0,1,0}-{2403,3430,0,1,0}-{2408,3441,0,1,0}-{2409,3430,0,1,0}-{2423,3426,0,1,0}-{2427,3428,0,1,0}-{2427,3440,0,1,0}-{2526,3168,0,1,0}-{2529,3163,0,1,0}-{2530,3172,0,1,0}-{2536,3169,0,1,0}-{2435,3460,0,1,0}-{2440,3470,0,1,0}-{2447,3502,0,1,0}-{2457,3462,0,1,0}-{2478,3502,0,1,0}-{2449,3492,1,1,0}-{2450,3490,1,1,0}-{2474,3490,1,1,0}-{2482,3492,1,1,0}-{2482,3498,1,1,0}-{2399,3356,0,1,0}-"
},
{
"npc_id": "67",
- "loc_data": "{2507,3200,0,1,6}-{2516,3212,0,1,1}-"
+ "loc_data": "{2556,3226,0,1,0}-{2456,3425,0,1,0}-{2459,3421,0,1,0}-{2462,3431,0,1,0}-{2394,3500,1,1,0}-{2417,3483,1,1,0}-{2377,3442,0,1,0}-{2380,3425,0,1,0}-{2383,3433,0,1,0}-{2405,3447,0,1,0}-{2406,3440,0,1,0}-{2393,3451,1,1,0}-{2408,3437,1,1,0}-{2521,3169,0,1,0}-{2521,3171,0,1,0}-{2033,5530,1,1,0}-{2437,3478,0,1,0}-{2442,3465,0,1,0}-{2456,3467,0,1,0}-{2471,3496,0,1,0}-{2474,3508,0,1,0}-{2475,3471,0,1,0}-{2479,3468,0,1,0}-{2486,3470,0,1,0}-{2492,3474,0,1,0}-{2443,3464,1,1,0}-{2443,3502,1,1,0}-{2448,3496,1,1,0}-{2449,3506,1,1,0}-{2457,3498,1,1,0}-{2474,3498,1,1,0}-{2480,3502,1,1,0}-{2481,3482,1,1,0}-{2490,3503,1,1,0}-{2400,3356,0,1,0}-"
},
{
"npc_id": "68",
- "loc_data": "{2518,3209,0,1,3}-{2533,3209,0,1,5}-{2530,3212,0,1,1}-"
+ "loc_data": "{2400,3514,1,1,0}-{2418,3485,1,1,0}-{2378,3423,0,1,0}-{2393,3435,0,1,0}-{2394,3425,0,1,0}-{2395,3449,0,1,0}-{2403,3433,0,1,0}-{2420,3429,0,1,0}-{2420,3438,0,1,0}-{2522,3172,0,1,0}-{2433,3474,0,1,0}-{2433,3492,0,1,0}-{2458,3497,0,1,0}-{2464,3505,0,1,0}-{2476,3458,0,1,0}-{2445,3502,1,1,0}-{2453,3488,1,1,0}-{2475,3502,1,1,0}-{2465,3490,2,1,0}-{2401,3357,0,1,0}-"
},
{
"npc_id": "73",
@@ -345,7 +345,7 @@
},
{
"npc_id": "105",
- "loc_data": "{3100,3594,0,1,6}-{3107,3608,0,1,2}-{3099,3602,0,1,0}-{2632,3280,0,1,1}-{2633,3274,0,1,3}-{2696,3329,0,1,4}-{2708,3336,0,1,4}-{3230,3500,0,1,5}-{2988,3671,0,1,0}-{3001,3674,0,1,0}-{2497,3164,0,1,2}-"
+ "loc_data": "{3100,3594,0,1,6}-{3107,3608,0,1,2}-{3099,3602,0,1,0}-{2632,3280,0,1,1}-{2633,3274,0,1,3}-{2696,3329,0,1,4}-{2708,3336,0,1,4}-{3230,3500,0,1,5}-{2988,3671,0,1,0}-{3001,3674,0,1,0}-{2497,3164,0,1,2}-{2387,3376,0,1,0}-{2398,3366,0,1,0}-{2412,3378,0,1,0}-{2419,3372,0,1,0}-"
},
{
"npc_id": "106",
@@ -365,11 +365,11 @@
},
{
"npc_id": "110",
- "loc_data": "{2564,9887,0,1,4}-{2581,9897,0,1,1}-{2577,9888,0,1,1}-{3234,5497,0,1,1}-{3305,9400,0,1,1}-{3296,9378,0,1,3}-{3050,10337,0,1,4}-{3047,10340,0,1,4}-{3048,10346,0,1,4}-{3048,10346,0,1,3}-"
+ "loc_data": "{2564,9887,0,1,4}-{2581,9897,0,1,1}-{2577,9888,0,1,1}-{3234,5497,0,1,1}-{3305,9400,0,1,1}-{3244,9356,0,1,1}-{3252,9370,0,1,1}-{3294,9375,0,1,3}-{3050,10337,0,1,4}-{3047,10340,0,1,4}-{3048,10346,0,1,4}-{3048,10346,0,1,3}-"
},
{
"npc_id": "111",
- "loc_data": "{2811,3506,0,1,0}-{2883,9932,0,1,0}-{2883,9965,0,1,0}-{2920,3800,0,1,3}-{2952,3902,0,1,6}-{2953,3889,0,1,6}-{2947,3921,0,1,6}-{3043,9581,0,1,1}-{3055,9577,0,1,6}-{3061,9576,0,1,4}-{3055,9571,0,1,7}-{3052,9566,0,1,6}-"
+ "loc_data": "{2920,3800,0,1,3}-{2883,9932,0,1,0}-{2883,9965,0,1,0}-{2952,3902,0,1,6}-{2953,3889,0,1,6}-{2947,3921,0,1,6}-{2811,3506,0,1,0}-{3043,9581,0,1,1}-{3055,9577,0,1,6}-{3061,9576,0,1,4}-{3055,9571,0,1,7}-{3052,9566,0,1,6}-"
},
{
"npc_id": "112",
@@ -389,7 +389,7 @@
},
{
"npc_id": "117",
- "loc_data": "{3118,9845,0,1,4}-{3111,9844,0,1,6}-{3123,9845,0,1,3}-{3114,9833,0,1,3}-{3110,9841,0,1,1}-{3119,9839,0,1,1}-{3097,9832,0,1,0}-{3101,9832,0,1,1}-{3107,9829,0,1,3}-{3115,9831,0,1,4}-{3109,9835,0,1,4}-{2904,9734,0,1,0}-{2548,3146,0,1,1}-{2542,3145,0,1,4}-{2503,3150,0,1,4}-{3300,3649,0,1,0}-{3044,10321,0,1,2}-{3044,10316,0,1,4}-{3045,10308,0,1,4}-{3048,10317,0,1,2}-"
+ "loc_data": "{2369,3404,0,1,0}-{3118,9845,0,1,4}-{3111,9844,0,1,6}-{3123,9845,0,1,3}-{3114,9833,0,1,3}-{3110,9841,0,1,1}-{3119,9839,0,1,1}-{3097,9832,0,1,0}-{3101,9832,0,1,1}-{3107,9829,0,1,3}-{3115,9831,0,1,4}-{3109,9835,0,1,4}-{2904,9734,0,1,0}-{2548,3146,0,1,1}-{2542,3145,0,1,4}-{2503,3150,0,1,4}-{3300,3649,0,1,0}-{3044,10321,0,1,2}-{3044,10316,0,1,4}-{3045,10308,0,1,4}-{3048,10317,0,1,2}-"
},
{
"npc_id": "118",
@@ -417,7 +417,7 @@
},
{
"npc_id": "125",
- "loc_data": "{2845,3517,0,1,4}-{2848,3515,0,1,4}-{2958,3867,0,1,3}-{2956,3857,0,1,6}-{2952,3862,0,1,3}-{2949,3858,0,1,4}-{2955,3875,0,1,7}-{2954,3874,0,1,5}-{2962,3876,0,1,1}-{2961,3877,0,1,3}-{2947,3878,0,1,6}-{2959,3884,0,1,4}-{2956,3885,0,1,3}-{2956,3886,0,1,3}-{2948,3886,0,1,1}-{2947,3934,0,1,0}-{2948,3917,0,1,0}-{2949,3926,0,1,0}-{2952,3913,0,1,0}-{2952,3936,0,1,0}-{2954,3921,0,1,0}-{2956,3930,0,1,0}-{2964,3944,0,1,0}-{2970,3947,0,1,0}-{2971,3938,0,1,0}-{2977,3953,0,1,0}-{2978,3942,0,1,0}-{2984,3933,0,1,0}-{3227,5443,0,1,5}-{3220,5448,0,1,5}-{3208,5443,0,1,6}-{3207,5448,0,1,4}-{3050,9570,0,1,3}-{3043,9579,0,1,2}-{3056,9585,0,1,0}-{3058,9575,0,1,1}-{3052,9582,0,1,0}-{3049,9577,0,1,4}-{3042,9586,0,1,6}-{3052,9588,0,1,1}-{3049,9590,0,1,5}-{3060,9578,0,1,3}-{3054,9566,0,1,7}-{2834,9940,0,1,0}-{2836,9953,0,1,0}-{2844,9944,0,1,0}-{2822,9901,0,1,0}-{2836,9905,0,1,0}-{2838,9917,0,1,0}-{2847,9919,0,1,0}-{2848,9912,0,1,0}-"
+ "loc_data": "{2845,3517,0,1,4}-{2848,3515,0,1,4}-{2822,9901,0,1,0}-{2836,9905,0,1,0}-{2838,9917,0,1,0}-{2847,9919,0,1,0}-{2848,9912,0,1,0}-{2834,9940,0,1,0}-{2836,9953,0,1,0}-{2844,9944,0,1,0}-{2958,3867,0,1,3}-{2956,3857,0,1,6}-{2952,3862,0,1,3}-{2949,3858,0,1,4}-{2955,3875,0,1,7}-{2954,3874,0,1,5}-{2962,3876,0,1,1}-{2961,3877,0,1,3}-{2947,3878,0,1,6}-{2959,3884,0,1,4}-{2956,3885,0,1,3}-{2956,3886,0,1,3}-{2948,3886,0,1,1}-{2947,3934,0,1,0}-{2948,3917,0,1,0}-{2949,3926,0,1,0}-{2952,3913,0,1,0}-{2952,3936,0,1,0}-{2954,3921,0,1,0}-{2956,3930,0,1,0}-{2964,3944,0,1,0}-{2970,3947,0,1,0}-{2971,3938,0,1,0}-{2977,3953,0,1,0}-{2978,3942,0,1,0}-{2984,3933,0,1,0}-{3227,5443,0,1,5}-{3220,5448,0,1,5}-{3208,5443,0,1,6}-{3207,5448,0,1,4}-{3050,9570,0,1,3}-{3043,9579,0,1,2}-{3056,9585,0,1,0}-{3058,9575,0,1,1}-{3052,9582,0,1,0}-{3049,9577,0,1,4}-{3042,9586,0,1,6}-{3052,9588,0,1,1}-{3049,9590,0,1,5}-{3060,9578,0,1,3}-{3054,9566,0,1,7}-"
},
{
"npc_id": "126",
@@ -489,19 +489,39 @@
},
{
"npc_id": "153",
- "loc_data": "{2415,4466,0,0,0}-{2419,4427,0,0,0}-{2421,4468,0,0,0}-{2426,4431,0,0,0}-{2245,3147,0,1,4}-{2246,3143,0,1,0}-{2242,3140,0,1,3}-{2247,3149,0,1,1}-{2500,3492,0,1,4}-"
+ "loc_data": "{2540,9820,0,1,0}-{2543,9813,0,1,0}-{2546,9817,0,1,0}-{2464,4421,0,1,0}-{2466,4423,0,1,0}-{2486,4464,0,1,0}-{2556,3444,0,1,0}-{3082,3077,0,1,0}-{3092,3082,0,1,0}-{3109,3090,0,1,0}-{3112,3093,0,1,0}-{2249,3260,0,1,0}-{2250,3257,0,1,0}-{2250,3259,0,1,0}-{2252,3261,0,1,0}-{2253,3256,0,1,0}-{2262,3226,0,1,0}-{2264,3225,0,1,0}-{2266,3229,0,1,0}-{2268,3227,0,1,0}-{2269,3222,0,1,0}-{2269,3224,0,1,0}-{2270,3223,0,1,0}-{2270,3226,0,1,0}-{3200,5954,0,1,0}-{3202,5958,0,1,0}-{3204,5955,0,1,0}-{3204,5959,0,1,0}-{3231,5967,0,1,0}-{3236,5974,0,1,0}-{3237,5968,0,1,0}-{3240,5992,0,1,0}-{3240,5994,0,1,0}-{3242,5990,0,1,0}-{3242,5993,0,1,0}-{3244,5994,0,1,0}-{3246,5989,0,1,0}-{2196,3191,0,1,0}-{2197,3189,0,1,0}-{2198,3181,0,1,0}-{2198,3187,0,1,0}-{2199,3183,0,1,0}-{2199,3187,0,1,0}-{2200,3185,0,1,0}-{2201,3185,0,1,0}-{2204,3180,0,1,0}-{2324,4599,0,1,0}-{2325,4597,0,1,0}-{2326,4589,0,1,0}-{2326,4595,0,1,0}-{2327,4591,0,1,0}-{2327,4595,0,1,0}-{2328,4593,0,1,0}-{2329,4593,0,1,0}-{2332,4588,0,1,0}-{2176,3202,0,1,0}-{2178,3206,0,1,0}-{2180,3203,0,1,0}-{2180,3207,0,1,0}-{2207,3215,0,1,0}-{2212,3222,0,1,0}-{2213,3216,0,1,0}-{2216,3240,0,1,0}-{2216,3242,0,1,0}-{2218,3238,0,1,0}-{2218,3241,0,1,0}-{2220,3242,0,1,0}-{2222,3237,0,1,0}-{2437,3425,0,1,0}-{2438,3422,0,1,0}-{2450,3419,0,1,0}-{2415,4466,0,1,0}-{2419,4427,0,1,0}-{2421,4468,0,1,0}-{2426,4431,0,1,0}-{3175,3226,0,1,0}-{3178,3228,0,1,0}-{3179,3226,0,1,0}-{3182,3251,0,1,0}-{3183,3254,0,1,0}-{2697,6204,0,1,0}-{2698,6201,0,1,0}-{2698,6203,0,1,0}-{2700,6205,0,1,0}-{2701,6200,0,1,0}-{2710,6170,0,1,0}-{2712,6169,0,1,0}-{2714,6173,0,1,0}-{2716,6171,0,1,0}-{2717,6166,0,1,0}-{2717,6168,0,1,0}-{2718,6167,0,1,0}-{2718,6170,0,1,0}-{2478,3373,0,1,0}-{2479,3381,0,1,0}-{2481,3384,0,1,0}-{2490,3371,0,1,0}-{2689,6083,0,1,0}-{2689,6088,0,1,0}-{2690,6094,0,1,0}-{2691,6084,0,1,0}-{2692,6081,0,1,0}-{2692,6090,0,1,0}-{2693,6083,0,1,0}-{2693,6085,0,1,0}-{2693,6090,0,1,0}-{2694,6083,0,1,0}-{2694,6086,0,1,0}-{2695,6082,0,1,0}-{2695,6085,0,1,0}-{2695,6088,0,1,0}-{2695,6091,0,1,0}-{2695,6121,0,1,0}-{2698,6121,0,1,0}-{2699,6082,0,1,0}-{2699,6085,0,1,0}-{2700,6084,0,1,0}-{2701,6085,0,1,0}-{2702,6081,0,1,0}-{2702,6083,0,1,0}-{2703,6119,0,1,0}-{2704,6117,0,1,0}-{2705,6121,0,1,0}-{2730,6091,0,1,0}-{2732,6095,0,1,0}-{2734,6090,0,1,0}-{2735,6094,0,1,0}-{2735,6097,0,1,0}-{2738,6098,0,1,0}-{2416,3404,0,1,0}-{2424,3410,0,1,0}-{2430,3405,0,1,0}-{1906,5223,0,1,0}-{1907,5221,0,1,0}-{3273,6012,0,1,0}-{3274,6009,0,1,0}-{3274,6011,0,1,0}-{3276,6013,0,1,0}-{3277,6008,0,1,0}-{3286,5978,0,1,0}-{3288,5977,0,1,0}-{3290,5981,0,1,0}-{3292,5979,0,1,0}-{3293,5974,0,1,0}-{3293,5976,0,1,0}-{3294,5975,0,1,0}-{3294,5978,0,1,0}-{2828,5091,0,1,0}-{2832,5108,0,1,0}-{2835,5079,0,1,0}-{2846,5067,0,1,0}-{2850,5111,0,1,0}-{2853,5086,0,1,0}-{2864,5071,0,1,0}-{2549,3139,0,1,0}-{2241,3139,0,1,0}-{2241,3144,0,1,0}-{2242,3150,0,1,0}-{2243,3140,0,1,0}-{2244,3137,0,1,0}-{2244,3146,0,1,0}-{2245,3139,0,1,0}-{2245,3141,0,1,0}-{2245,3146,0,1,0}-{2246,3139,0,1,0}-{2246,3142,0,1,0}-{2247,3138,0,1,0}-{2247,3141,0,1,0}-{2247,3144,0,1,0}-{2247,3147,0,1,0}-{2247,3177,0,1,0}-{2250,3177,0,1,0}-{2251,3138,0,1,0}-{2251,3141,0,1,0}-{2252,3140,0,1,0}-{2253,3141,0,1,0}-{2254,3137,0,1,0}-{2254,3139,0,1,0}-{2255,3175,0,1,0}-{2256,3173,0,1,0}-{2257,3177,0,1,0}-{2282,3147,0,1,0}-{2284,3151,0,1,0}-{2286,3146,0,1,0}-{2287,3150,0,1,0}-{2287,3153,0,1,0}-{2290,3154,0,1,0}-"
},
{
"npc_id": "154",
- "loc_data": "{2568,3470,0,1,5}-{2394,4453,0,0,0}-{2394,4457,0,0,0}-{2406,4447,0,0,0}-{2523,3164,0,1,4}-{2534,3173,0,1,3}-{2538,3160,0,1,3}-{2246,3144,0,1,4}-{2245,3147,0,1,4}-{2240,3147,0,1,3}-{2247,3142,0,1,5}-"
+ "loc_data": "{2475,4459,0,1,0}-{2480,4458,0,1,0}-{2481,4454,0,1,0}-{2488,4465,0,1,0}-{3125,3084,0,1,0}-{2268,3228,0,1,0}-{3202,5955,0,1,0}-{3206,5953,0,1,0}-{3231,5976,0,1,0}-{3233,5974,0,1,0}-{3235,5970,0,1,0}-{3241,5996,0,1,0}-{3242,5988,0,1,0}-{3244,5992,0,1,0}-{2180,3173,0,1,0}-{2193,3187,0,1,0}-{2196,3184,0,1,0}-{2200,3181,0,1,0}-{2200,3188,0,1,0}-{2203,3189,0,1,0}-{2308,4581,0,1,0}-{2321,4595,0,1,0}-{2324,4592,0,1,0}-{2328,4589,0,1,0}-{2328,4596,0,1,0}-{2331,4597,0,1,0}-{2178,3203,0,1,0}-{2182,3201,0,1,0}-{2207,3224,0,1,0}-{2209,3222,0,1,0}-{2211,3218,0,1,0}-{2217,3244,0,1,0}-{2218,3236,0,1,0}-{2220,3240,0,1,0}-{2446,3396,0,1,0}-{2470,3397,0,1,0}-{2394,4453,0,1,0}-{2394,4457,0,1,0}-{2406,4447,0,1,0}-{2422,3489,0,1,0}-{2716,6172,0,1,0}-{2688,6092,0,1,0}-{2690,6087,0,1,0}-{2690,6095,0,1,0}-{2692,6082,0,1,0}-{2692,6088,0,1,0}-{2692,6123,0,1,0}-{2693,6081,0,1,0}-{2694,6125,0,1,0}-{2695,6087,0,1,0}-{2697,6086,0,1,0}-{2697,6087,0,1,0}-{2698,6081,0,1,0}-{2698,6124,0,1,0}-{2700,6083,0,1,0}-{2702,6084,0,1,0}-{2726,6085,0,1,0}-{2727,6081,0,1,0}-{2729,6083,0,1,0}-{2732,6084,0,1,0}-{2378,3418,0,1,0}-{2380,3422,0,1,0}-{2393,3442,0,1,0}-{2397,3440,0,1,0}-{2423,3399,0,1,0}-{2425,3406,0,1,0}-{2427,3402,0,1,0}-{1908,5222,0,1,0}-{3292,5980,0,1,0}-{2831,5070,0,1,0}-{2843,5106,0,1,0}-{2844,5080,0,1,0}-{2860,5079,0,1,0}-{2866,5104,0,1,0}-{2868,5096,0,1,0}-{2240,3148,0,1,0}-{2242,3143,0,1,0}-{2242,3151,0,1,0}-{2244,3138,0,1,0}-{2244,3144,0,1,0}-{2244,3179,0,1,0}-{2245,3137,0,1,0}-{2246,3181,0,1,0}-{2247,3143,0,1,0}-{2249,3142,0,1,0}-{2249,3143,0,1,0}-{2250,3137,0,1,0}-{2250,3180,0,1,0}-{2252,3139,0,1,0}-{2254,3140,0,1,0}-{2278,3141,0,1,0}-{2279,3137,0,1,0}-{2281,3139,0,1,0}-{2284,3140,0,1,0}-"
},
{
"npc_id": "155",
- "loc_data": "{2561,3471,0,1,0}-{3235,3222,0,0,0}-{3255,3226,0,0,0}-"
+ "loc_data": "{3093,3086,0,1,0}-{3097,3085,0,1,0}-{3129,3091,0,1,0}-{3135,3084,0,1,0}-{2190,3180,0,1,0}-{2318,4588,0,1,0}-{2374,3469,0,1,0}-{2376,3466,0,1,0}-{3254,3230,0,1,0}-{1986,5564,0,1,0}-{2434,3516,0,1,0}-{2479,3501,0,1,0}-"
+ },
+ {
+ "npc_id": "156",
+ "loc_data": "{2371,3460,0,1,0}-{2372,3456,0,1,0}-{2422,3467,0,1,0}-{2725,6127,0,1,0}-{2444,3491,0,1,0}-{2277,3183,0,1,0}-"
},
{
"npc_id": "157",
- "loc_data": "{2502,3521,0,1,5}-"
+ "loc_data": "{2180,2798,0,1,0}-{2209,2812,0,1,0}-{2217,2780,0,1,0}-{1921,5931,0,1,0}-{1947,5908,0,1,0}-{1955,5949,0,1,0}-{1973,5888,0,1,0}-{1975,5918,0,1,0}-{1988,5870,0,1,0}-{2017,5884,0,1,0}-{2025,5852,0,1,0}-{2182,2979,0,1,0}-{2211,2963,0,1,0}-{1931,6038,0,1,0}-{1983,6037,0,1,0}-{2153,2810,0,1,0}-{2172,2806,0,1,0}-{1961,5882,0,1,0}-{1980,5878,0,1,0}-{2242,2788,0,1,0}-{2248,2858,0,1,0}-{2256,2828,0,1,0}-{2284,2874,0,1,0}-{2255,3216,0,1,0}-{2262,3210,0,1,0}-{2271,3204,0,1,0}-{2294,3219,0,1,0}-{2296,3206,0,1,0}-{2298,3201,0,1,0}-{2056,5930,0,1,0}-{2064,5900,0,1,0}-{2092,5946,0,1,0}-{2050,5860,0,1,0}-{3201,5986,0,1,0}-{3254,5972,0,1,0}-{3255,5986,0,1,0}-{3256,6008,0,1,0}-{3257,5973,0,1,0}-{3257,5975,0,1,0}-{3260,5974,0,1,0}-{3261,5977,0,1,0}-{3262,5957,0,1,0}-{2194,3158,0,1,0}-{2216,3188,0,1,0}-{2217,3190,0,1,0}-{2220,3158,0,1,0}-{2222,3141,0,1,0}-{2229,3138,0,1,0}-{2231,3181,0,1,0}-{2236,3155,0,1,0}-{2278,2956,0,1,0}-{2322,4566,0,1,0}-{2344,4596,0,1,0}-{2345,4598,0,1,0}-{2348,4566,0,1,0}-{2350,4549,0,1,0}-{2357,4546,0,1,0}-{2359,4589,0,1,0}-{2364,4563,0,1,0}-{2177,3234,0,1,0}-{2230,3220,0,1,0}-{2231,3234,0,1,0}-{2232,3256,0,1,0}-{2233,3221,0,1,0}-{2233,3223,0,1,0}-{2236,3222,0,1,0}-{2237,3225,0,1,0}-{2238,3205,0,1,0}-{2479,3396,0,1,0}-{2102,2942,0,1,0}-{2108,2919,0,1,0}-{2104,2873,0,1,0}-{2122,6032,0,1,0}-{1912,5945,0,1,0}-{3143,3210,0,1,0}-{3155,3253,0,1,0}-{3163,3261,0,1,0}-{3168,3258,0,1,0}-{2086,6028,0,1,0}-{2703,6160,0,1,0}-{2710,6154,0,1,0}-{2719,6148,0,1,0}-{2742,6163,0,1,0}-{2744,6150,0,1,0}-{2746,6145,0,1,0}-{2314,2960,0,1,0}-{2723,6105,0,1,0}-{2739,6123,0,1,0}-{2744,6108,0,1,0}-{2326,2894,0,1,0}-{2333,2920,0,1,0}-{3279,5968,0,1,0}-{3286,5962,0,1,0}-{3295,5956,0,1,0}-{3318,5971,0,1,0}-{3320,5958,0,1,0}-{3322,5953,0,1,0}-{2134,5966,0,1,0}-{2141,5992,0,1,0}-{2123,2966,0,1,0}-{2175,2965,0,1,0}-{1910,6014,0,1,0}-{1916,5991,0,1,0}-{2540,3167,0,1,0}-{2110,2955,0,1,0}-{1990,6051,0,1,0}-{2019,6035,0,1,0}-{2447,3467,0,1,0}-{2448,3469,0,1,0}-{1918,6027,0,1,0}-{2275,3161,0,1,0}-{2291,3179,0,1,0}-{2296,3164,0,1,0}-{2113,2859,0,1,0}-{2139,2836,0,1,0}-{2147,2877,0,1,0}-{2165,2816,0,1,0}-{2167,2846,0,1,0}-"
+ },
+ {
+ "npc_id": "158",
+ "loc_data": "{2693,9776,0,1,0}-{2697,9773,0,1,0}-{2697,9779,0,1,0}-{2700,9770,0,1,0}-{2700,9774,0,1,0}-{2700,9777,0,1,0}-{2701,9781,0,1,0}-{2703,9770,0,1,0}-{2703,9774,0,1,0}-{2703,9779,0,1,0}-{2705,9757,0,1,0}-{2705,9760,0,1,0}-{2705,9766,0,1,0}-{2706,9753,0,1,0}-{2706,9763,0,1,0}-{2706,9772,0,1,0}-{2707,9756,0,1,0}-{2707,9761,0,1,0}-{2708,9758,0,1,0}-"
+ },
+ {
+ "npc_id": "159",
+ "loc_data": "{2392,3475,0,1,0}-{2394,3506,0,1,0}-{2396,3471,0,1,0}-{2405,3499,0,1,0}-{2416,3487,0,1,0}-{2413,3445,1,1,0}-{2415,3435,1,1,0}-{2416,3416,1,1,0}-{2424,3434,1,1,0}-{2483,3500,1,1,0}-"
+ },
+ {
+ "npc_id": "160",
+ "loc_data": "{2424,3430,1,1,0}-{2474,3500,1,1,0}-"
+ },
+ {
+ "npc_id": "161",
+ "loc_data": "{2409,3436,1,1,0}-{2484,3501,1,1,0}-"
},
{
"npc_id": "162",
@@ -509,16 +529,32 @@
},
{
"npc_id": "163",
- "loc_data": "{2465,9899,0,1,6}-{2477,9896,0,1,6}-{2469,9887,0,1,6}-{2463,9893,0,1,6}-"
+ "loc_data": "{2451,3414,0,1,0}-{2459,3395,0,1,0}-{2459,3438,0,1,0}-{2462,3395,0,1,0}-{2445,3429,1,1,0}-{2409,3470,1,1,0}-{2416,3466,1,1,0}-{2420,3466,1,1,0}-{2461,9895,0,1,0}-{2465,9894,0,1,0}-{2465,9899,0,1,0}-{2459,3385,0,1,0}-{2463,3385,0,1,0}-{2392,3454,0,1,0}-{2394,3436,0,1,0}-{2408,3452,0,1,0}-{2421,3413,0,1,0}-{2442,3489,0,1,0}-{2450,3485,0,1,0}-{2451,3507,0,1,0}-{2453,3490,0,1,0}-{2459,3503,0,1,0}-{2461,3509,0,1,0}-{2464,3465,0,1,0}-{2464,3468,0,1,0}-{2468,3465,0,1,0}-{2468,3468,0,1,0}-{2468,3506,0,1,0}-{2472,3484,0,1,0}-{2475,3490,0,1,0}-{2475,3502,0,1,0}-{2477,3512,0,1,0}-{2481,3485,0,1,0}-{2482,3501,0,1,0}-{2467,3495,1,1,0}-{2473,3495,1,1,0}-{2448,3497,2,1,0}-{2463,3480,2,1,0}-{2465,3497,2,1,0}-{2465,3510,2,1,0}-{2466,3480,2,1,0}-"
+ },
+ {
+ "npc_id": "164",
+ "loc_data": "{2459,3392,0,1,0}-{2461,3422,0,1,0}-{2462,3392,0,1,0}-{2460,3382,0,1,0}-{2462,3382,0,1,0}-{2410,3416,0,1,0}-{2420,3435,0,1,0}-{2420,3447,0,1,0}-{2427,3410,0,1,0}-{2012,5535,2,1,0}-{2023,5544,2,1,0}-{2441,3497,0,1,0}-{2447,3510,0,1,0}-{2461,3487,0,1,0}-{2464,3472,0,1,0}-{2464,3489,0,1,0}-{2467,3489,0,1,0}-{2468,3472,0,1,0}-{2473,3503,0,1,0}-{2478,3497,0,1,0}-{2464,3496,1,1,0}-{2448,3495,2,1,0}-{2460,3487,2,1,0}-{2467,3494,2,1,0}-{2467,3510,2,1,0}-{2471,3496,2,1,0}-{2483,3495,2,1,0}-{2483,3497,2,1,0}-"
},
{
"npc_id": "166",
"loc_data": "{2448,3427,1,0,6}-{2448,3424,1,0,6}-{2443,3424,1,0,3}-{2443,3425,1,0,3}-{2450,3480,1,0,1}-{2449,3480,1,0,1}-{2448,3480,1,0,1}-{2440,3488,1,0,4}-{2440,3487,1,0,4}-"
},
+ {
+ "npc_id": "168",
+ "loc_data": "{2434,3436,0,1,0}-{2437,3451,0,1,0}-{2438,3427,0,1,0}-{2441,3411,0,1,0}-{2466,3449,0,1,0}-{2470,3399,0,1,0}-{2472,3400,0,1,0}-{2473,3412,0,1,0}-{2476,3454,0,1,0}-{2482,3397,0,1,0}-{2489,3401,0,1,0}-{2479,3407,1,1,0}-{2379,3482,0,1,0}-{2381,3496,0,1,0}-{2384,3497,0,1,0}-{2391,3476,0,1,0}-{2410,3496,0,1,0}-{2421,3481,0,1,0}-{2397,3514,1,1,0}-{2398,3451,1,1,0}-{2414,3447,1,1,0}-{2438,3465,0,1,0}-{2442,3505,0,1,0}-{2448,3486,0,1,0}-{2449,3487,0,1,0}-{2450,3489,0,1,0}-{2450,3505,0,1,0}-{2454,3465,0,1,0}-{2449,3486,1,1,0}-{2457,3488,1,1,0}-{2476,3488,1,1,0}-{2450,3496,2,1,0}-{2467,3488,2,1,0}-{2470,3503,2,1,0}-{2481,3498,2,1,0}-"
+ },
+ {
+ "npc_id": "169",
+ "loc_data": "{2439,3433,0,1,0}-{2441,3449,0,1,0}-{2442,3428,0,1,0}-{2446,3403,0,1,0}-{2450,3416,0,1,0}-{2468,3441,0,1,0}-{2480,3408,0,1,0}-{2480,3406,1,1,0}-{2486,3400,1,1,0}-{2378,3482,0,1,0}-{2383,3496,0,1,0}-{2402,3507,0,1,0}-{2406,3476,0,1,0}-{2422,3485,0,1,0}-{2382,3506,1,1,0}-{2418,3472,1,1,0}-{2392,3450,1,1,0}-{2415,3415,1,1,0}-{2416,3434,1,1,0}-{2423,3425,1,1,0}-{2424,3442,1,1,0}-{2448,3489,0,1,0}-{2450,3488,0,1,0}-{2463,3508,0,1,0}-{2473,3489,0,1,0}-{2474,3457,0,1,0}-{2479,3503,0,1,0}-{2486,3467,0,1,0}-{2437,3463,1,1,0}-{2448,3489,1,1,0}-{2482,3508,1,1,0}-"
+ },
{
"npc_id": "170",
"loc_data": "{2890,3175,0,1,4}-"
},
+ {
+ "npc_id": "171",
+ "loc_data": "{2409,9817,0,1,0}-"
+ },
{
"npc_id": "175",
"loc_data": "{3084,3495,0,1,4}-{3179,3215,0,1,0}-{3182,3365,0,1,6}-{2994,9549,0,1,6}-{2993,9551,0,1,6}-{2995,9555,0,1,6}-{2999,9548,0,1,0}-"
@@ -925,7 +961,7 @@
},
{
"npc_id": "316",
- "loc_data": "{3086,3227,0,0,1}-{3085,3230,0,0,0}-{2986,3176,0,0,4}-{2996,3157,0,0,1}-"
+ "loc_data": "{3086,3227,0,0,1}-{3085,3230,0,0,0}-{2986,3176,0,0,4}-{2996,3157,0,0,1}-{2790,3273,0,0,1}-{2790,3276,0,0,6}-{2794,3283,0,0,6}-{2795,3279,0,0,3}-"
},
{
"npc_id": "322",
@@ -955,6 +991,10 @@
"npc_id": "334",
"loc_data": "{2612,3411,0,0,0}-{2165,3268,0,0,4}-{2162,3274,0,0,4}-{2627,3415,0,0,0}-{2639,3698,0,0,4}-{2642,3698,0,0,4}-{2699,2702,0,0,4}-{2694,2706,0,0,4}-{2700,2702,0,0,4}-{2707,2698,0,0,4}-{2700,2702,0,0,0}-{2700,2702,0,0,0}-{2700,2702,0,0,0}-{2707,2698,0,0,0}-{2707,2698,0,0,0}-{2707,2698,0,0,0}-"
},
+ {
+ "npc_id": "335",
+ "loc_data": "{2592,3336,0,1,0}-"
+ },
{
"npc_id": "336",
"loc_data": "{2928,3218,0,1,4}-"
@@ -977,19 +1017,23 @@
},
{
"npc_id": "344",
- "loc_data": "{3016,3187,1,1,0}-{3015,3183,1,1,0}-{3014,3181,1,1,0}-{3011,3185,1,1,0}-"
+ "loc_data": "{2510,3378,0,1,0}-{2511,3383,0,1,0}-{2515,3356,0,1,0}-{2519,3356,0,1,0}-{2521,3383,0,1,0}-{2524,3362,0,1,0}-{2525,3383,0,1,0}-"
},
{
"npc_id": "345",
- "loc_data": "{3018,3185,2,1,0}-"
+ "loc_data": "{2519,3366,0,1,0}-{2525,3369,0,1,0}-{2531,3368,0,1,0}-"
+ },
+ {
+ "npc_id": "346",
+ "loc_data": "{2508,3370,0,1,0}-{2512,3374,0,1,0}-{2518,3371,0,1,0}-{2525,3380,0,1,0}-"
},
{
"npc_id": "347",
- "loc_data": "{2523,3292,0,1,0}-{2536,3294,0,1,0}-{2538,3321,0,1,0}-"
+ "loc_data": "{2524,3292,0,1,3}-{2536,3294,0,1,3}-{2538,3321,0,1,3}-"
},
{
"npc_id": "348",
- "loc_data": "{2501,3315,0,1,0}-{2513,3325,0,1,0}-{2526,3279,0,1,0}-{2528,3297,0,1,0}-{2535,3288,0,1,0}-{2548,3287,0,1,0}-"
+ "loc_data": "{2501,3315,0,1,3}-{2513,3325,0,1,3}-{2526,3279,0,1,3}-{2528,3297,0,1,3}-{2535,3288,0,1,3}-{2548,3287,0,1,3}-"
},
{
"npc_id": "349",
@@ -1001,31 +1045,31 @@
},
{
"npc_id": "351",
- "loc_data": "{2507,3325,0,1,4}-"
+ "loc_data": "{2465,3307,0,1,0}-{2482,3293,0,1,0}-{2509,3325,0,1,0}-"
},
{
"npc_id": "352",
- "loc_data": "{2511,3322,0,1,2}-{2540,3279,0,1,6}-"
+ "loc_data": "{2453,3307,0,1,0}-{2480,3300,0,1,0}-{2511,3322,0,1,0}-{2540,3279,0,1,0}-"
},
{
"npc_id": "353",
- "loc_data": "{2504,3326,0,1,1}-{2509,3314,0,1,3}-{2545,3278,0,1,3}-"
+ "loc_data": "{2473,3288,0,1,0}-{2504,3326,0,1,0}-{2509,3314,0,1,0}-{2546,3277,0,1,0}-"
},
{
"npc_id": "354",
- "loc_data": "{2510,3318,0,1,6}-{2524,3271,0,1,3}-"
+ "loc_data": "{2470,3290,0,1,0}-{2472,3296,0,1,0}-{2483,3318,0,1,0}-{2483,3323,0,1,0}-{2490,3293,0,1,0}-{2510,3318,0,1,0}-{2524,3271,0,1,0}-"
},
{
"npc_id": "355",
- "loc_data": "{2504,3318,0,1,0}-"
+ "loc_data": "{2464,3302,0,1,0}-{2466,3300,0,1,0}-{2466,3307,0,1,0}-{2467,3306,0,1,0}-{2468,3315,0,1,0}-{2469,3319,0,1,0}-{2471,3323,0,1,0}-{2473,3305,0,1,0}-{2474,3296,0,1,0}-{2476,3307,0,1,0}-{2478,3323,0,1,0}-{2480,3296,0,1,0}-{2481,3313,0,1,0}-{2485,3312,0,1,0}-{2504,3318,0,1,0}-{2547,3277,0,1,0}-"
},
{
"npc_id": "356",
- "loc_data": "{2523,3307,0,1,0}-"
+ "loc_data": "{2462,3306,0,1,0}-{2465,3305,0,1,0}-{2469,3295,0,1,0}-{2477,3320,0,1,0}-{2482,3311,0,1,0}-{2518,3275,0,1,0}-{2523,3307,0,1,0}-"
},
{
"npc_id": "357",
- "loc_data": "{2518,3309,0,1,0}-{2526,3303,0,1,0}-{2543,3309,0,1,0}-{2550,3319,0,1,0}-{2552,3319,0,1,0}-"
+ "loc_data": "{2518,3309,0,1,3}-{2526,3303,0,1,3}-{2543,3309,0,1,3}-{2552,3320,0,1,3}-"
},
{
"npc_id": "358",
@@ -1033,19 +1077,19 @@
},
{
"npc_id": "360",
- "loc_data": "{2550,3272,0,1,4}-"
+ "loc_data": "{2472,3307,0,1,0}-{2492,3314,0,1,0}-{2553,3275,0,1,0}-"
},
{
"npc_id": "361",
- "loc_data": "{2519,3277,0,1,6}-"
+ "loc_data": "{2463,3317,0,1,0}-{2482,3296,0,1,0}-{2485,3315,0,1,0}-{2519,3277,0,1,0}-"
},
{
"npc_id": "362",
- "loc_data": "{2537,3324,0,1,6}-"
+ "loc_data": "{2482,3286,0,1,0}-{2489,3295,0,1,0}-{2537,3324,0,1,0}-"
},
{
"npc_id": "363",
- "loc_data": "{2513,3315,0,1,4}-"
+ "loc_data": "{2468,3290,0,1,0}-{2475,3325,0,1,0}-{2479,3312,0,1,0}-{2513,3315,0,1,0}-"
},
{
"npc_id": "364",
@@ -1065,19 +1109,19 @@
},
{
"npc_id": "369",
- "loc_data": "{2542,3326,0,1,0}-{2545,3324,0,1,0}-{2545,3327,0,1,0}-{2552,3326,0,1,0}-{2553,3322,0,1,0}-{2553,3324,0,1,0}-"
+ "loc_data": "{2548,3324,0,1,3}-{2550,3326,0,1,3}-{2553,3325,0,1,3}-"
},
{
"npc_id": "370",
- "loc_data": "{2551,3324,1,1,0}-{2551,3327,1,1,0}-"
+ "loc_data": "{2549,3325,1,1,0}-{2550,3327,1,1,0}-"
},
{
"npc_id": "371",
- "loc_data": "{2547,3326,0,1,0}-{2549,3322,0,1,0}-{2550,3326,0,1,0}-{2552,3323,0,1,0}-"
+ "loc_data": "{2545,3326,0,1,3}-{2551,3322,0,1,3}-{2555,3324,0,1,3}-"
},
{
"npc_id": "372",
- "loc_data": "{2561,3303,0,1,6}-{2561,3305,0,1,4}-{2559,3303,0,1,6}-{2559,3305,0,1,1}-"
+ "loc_data": "{2561,3305,0,1,2}-{2561,3303,0,1,7}-{2559,3304,0,1,3}-"
},
{
"npc_id": "373",
@@ -1311,6 +1355,14 @@
"npc_id": "478",
"loc_data": "{2509,3255,0,1,3}-{2503,3254,1,1,3}-"
},
+ {
+ "npc_id": "479",
+ "loc_data": "{1970,5522,3,1,0}-{2384,3481,0,1,0}-{2388,3473,0,1,0}-{2418,3474,3,1,0}-{2415,3433,3,1,0}-{2466,3500,2,1,0}-"
+ },
+ {
+ "npc_id": "480",
+ "loc_data": "{1964,5522,3,1,0}-{2458,3417,1,1,0}-{2460,3417,1,1,0}-{2409,3507,0,1,0}-{2412,3474,3,1,0}-{2463,3504,2,1,0}-"
+ },
{
"npc_id": "481",
"loc_data": "{2499,3266,0,0,4}-"
@@ -1571,6 +1623,10 @@
"npc_id": "560",
"loc_data": "{2767,3122,0,1,6}-"
},
+ {
+ "npc_id": "561",
+ "loc_data": "{2514,3385,0,1,0}-"
+ },
{
"npc_id": "562",
"loc_data": "{2799,3438,0,1,1}-"
@@ -1987,14 +2043,42 @@
"npc_id": "694",
"loc_data": "{2659,3431,0,0,3}-"
},
+ {
+ "npc_id": "695",
+ "loc_data": "{2765,3276,0,1,3}-"
+ },
{
"npc_id": "696",
"loc_data": "{2716,3303,0,1,1}-"
},
+ {
+ "npc_id": "697",
+ "loc_data": "{2766,3288,1,0,6}-"
+ },
{
"npc_id": "698",
+ "loc_data": "{2799,3320,0,1,1}-"
+ },
+ {
+ "npc_id": "700",
"loc_data": "{2716,3303,0,1,1}-"
},
+ {
+ "npc_id": "701",
+ "loc_data": "{2793,3321,0,1,1}-"
+ },
+ {
+ "npc_id": "702",
+ "loc_data": "{2774,3273,0,1,0}-{2775,3284,0,1,0}-{2781,3290,1,1,0}-{2785,3284,1,1,0}-"
+ },
+ {
+ "npc_id": "703",
+ "loc_data": "{2770,3284,0,1,0}-{2794,3279,0,1,0}-{2768,3285,1,1,0}-{2784,3277,1,1,0}-"
+ },
+ {
+ "npc_id": "704",
+ "loc_data": "{2778,3291,0,1,0}-{2773,3282,1,1,0}-{2787,3280,1,1,0}-"
+ },
{
"npc_id": "705",
"loc_data": "{3208,3252,0,0,6}-"
@@ -2024,20 +2108,24 @@
"loc_data": "{2526,3319,0,0,6}-"
},
{
- "npc_id": "714",
- "loc_data": "{2569,3333,0,1,0}-{2517,9755,0,1,0}-"
+ "npc_id": "715",
+ "loc_data": "{2541,9672,0,1,0}-"
},
{
"npc_id": "716",
- "loc_data": "{2540,3286,0,0,1}-"
+ "loc_data": "{2542,3286,0,1,3}-"
},
{
"npc_id": "717",
- "loc_data": "{2513,3294,0,1,0}-{2518,3320,0,1,0}-{2539,3273,0,0,1}-{2535,3296,0,1,0}-"
+ "loc_data": "{2513,3294,0,1,0}-{2518,3320,0,1,0}-{2530,3274,0,1,0}-{2535,3296,0,1,0}-"
+ },
+ {
+ "npc_id": "718",
+ "loc_data": "{2582,3329,0,1,2}-"
},
{
"npc_id": "719",
- "loc_data": "{2560,3288,0,0,0}-{2026,4619,0,1,6}-{2026,4615,0,0,6}-{2020,4614,0,1,1}-{2021,4614,0,1,6}-{2008,4612,0,1,3}-{2002,4613,0,1,4}-"
+ "loc_data": "{2560,3288,0,1,2}-"
},
{
"npc_id": "720",
@@ -2065,11 +2153,11 @@
},
{
"npc_id": "728",
- "loc_data": "{2540,3308,0,1,6}-"
+ "loc_data": "{2540,3308,0,1,0}-"
},
{
"npc_id": "729",
- "loc_data": "{2536,3308,0,1,4}-"
+ "loc_data": "{2536,3308,0,1,0}-"
},
{
"npc_id": "731",
@@ -2193,15 +2281,15 @@
},
{
"npc_id": "785",
- "loc_data": "{2470,3312,0,1,0}-{2479,3315,0,1,0}-"
+ "loc_data": "{2468,3304,0,1,0}-{2476,3317,0,1,0}-{2478,3291,0,1,0}-{2492,3312,0,1,0}-"
},
{
"npc_id": "786",
- "loc_data": "{2482,3313,0,1,0}-{2477,3311,0,1,0}-"
+ "loc_data": "{2469,3309,0,1,0}-{2475,3298,0,1,0}-{2487,3308,0,1,0}-{2490,3289,0,1,0}-"
},
{
"npc_id": "787",
- "loc_data": "{2486,3315,0,1,0}-{2479,3313,0,1,0}-"
+ "loc_data": "{2476,3313,0,1,0}-{2481,3289,0,1,0}-{2490,3313,0,1,0}-{2491,3300,0,1,0}-"
},
{
"npc_id": "788",
@@ -2209,11 +2297,11 @@
},
{
"npc_id": "789",
- "loc_data": "{2811,3167,0,0,0}-"
+ "loc_data": "{2811,3167,0,1,0}-"
},
{
"npc_id": "792",
- "loc_data": "{2774,3197,0,0,0}-"
+ "loc_data": "{2774,3197,0,1,0}-"
},
{
"npc_id": "793",
@@ -2313,7 +2401,11 @@
},
{
"npc_id": "839",
- "loc_data": "{3153,3035,0,1,3}-"
+ "loc_data": "{3265,3066,0,1,0}-{3267,3066,0,1,0}-{3310,3068,0,1,0}-{3322,3011,0,1,0}-{3322,3052,0,1,0}-{3324,3030,0,1,0}-{3150,3044,0,1,0}-{3172,3009,0,1,0}-{3197,3012,0,1,0}-{3198,3040,0,1,0}-{3217,3092,0,1,0}-{3235,3074,0,1,0}-{3252,3125,0,1,0}-{3258,3078,0,1,0}-{3237,2968,0,1,0}-{3224,3013,0,1,0}-{3225,3034,0,1,0}-{3226,3060,0,1,0}-{3250,3057,0,1,0}-{3283,3108,0,1,0}-{3323,3094,0,1,0}-"
+ },
+ {
+ "npc_id": "840",
+ "loc_data": "{3268,3052,0,1,0}-{3281,3056,0,1,0}-{3307,3055,0,1,0}-{3318,3020,0,1,0}-{3318,3040,0,1,0}-{3190,3054,0,1,0}-{3192,3016,0,1,0}-{3217,3111,0,1,0}-{3222,3086,0,1,0}-{3238,3101,0,1,0}-{3244,3080,0,1,0}-{3253,3116,0,1,0}-{3255,3095,0,1,0}-{3237,3000,0,1,0}-{3245,2960,0,1,0}-{3208,3032,0,1,0}-{3217,3064,0,1,0}-{3238,3015,0,1,0}-{3258,3063,0,1,0}-{3267,3077,0,1,0}-{3269,3110,0,1,0}-{3275,3094,0,1,0}-{3291,3078,0,1,0}-{3291,3100,0,1,0}-{3305,3089,0,1,0}-{3318,3078,0,1,0}-{3321,3104,0,1,0}-"
},
{
"npc_id": "841",
@@ -2623,10 +2715,18 @@
"npc_id": "970",
"loc_data": "{3081,3247,0,0,1}-"
},
+ {
+ "npc_id": "971",
+ "loc_data": "{2464,3287,0,1,0}-"
+ },
{
"npc_id": "1005",
"loc_data": "{3057,3905,0,1,3}-"
},
+ {
+ "npc_id": "1006",
+ "loc_data": "{2763,3284,0,1,0}-{2768,3274,0,1,0}-{2768,3288,0,1,0}-{2770,3277,0,1,0}-{2770,3290,0,1,0}-{2771,3279,0,1,0}-{2774,3291,0,1,0}-{2778,3285,0,1,0}-{2781,3278,0,1,0}-{2781,3285,0,1,0}-{2783,3275,0,1,0}-{2784,3279,0,1,0}-{2785,3276,0,1,0}-{2785,3287,0,1,0}-{2788,3274,0,1,0}-{2793,3275,0,1,0}-{2793,3280,0,1,0}-{2768,3282,1,1,0}-{2770,3282,1,1,0}-{2773,3291,1,1,0}-{2780,3283,1,1,0}-{2780,3290,1,1,0}-{2783,3286,1,1,0}-{2784,3279,1,1,0}-{2785,3282,1,1,0}-"
+ },
{
"npc_id": "1010",
"loc_data": "{2629,2979,0,1,0}-"
@@ -2649,7 +2749,7 @@
},
{
"npc_id": "1019",
- "loc_data": "{3187,5555,0,1,4}-{3190,5563,0,1,1}-{3193,5555,0,1,3}-{3213,9377,0,1,3}-{3209,9397,0,1,4}-{3245,9401,0,1,6}-{3237,9402,0,1,2}-{3207,9349,0,1,3}-{3220,9347,0,1,6}-{3233,9359,0,1,4}-{3235,9354,0,0,6}-{3259,9370,0,1,1}-{3258,9387,0,1,6}-{2707,9880,0,1,0}-{2711,9876,0,1,0}-{2712,9871,0,1,0}-{2715,9874,0,1,0}-{2720,9871,0,1,0}-{2717,9880,0,1,0}-{2722,9879,0,1,0}-{2723,9875,0,1,0}-{3278,9368,0,1,5}-{3271,9359,0,1,3}-{3287,9359,0,1,5}-{3301,9394,0,1,5}-{3318,9352,0,1,5}-"
+ "loc_data": "{3187,5555,0,1,4}-{3190,5563,0,1,1}-{3193,5555,0,1,3} -{3213,9377,0,1,3}-{3209,9397,0,1,4}-{3245,9401,0,1,6}- {3237,9402,0,1,2}-{3207,9349,0,1,3}-{3220,9347,0,1,6} -{3233,9359,0,1,4}-{3235,9354,0,0,6}-{3259,9370,0,1,1}- {3258,9387,0,1,6}-{2707,9880,0,1,0}-{2711,9876,0,1,0}- {2712,9871,0,1,0}-{2715,9874,0,1,0}-{2720,9871,0,1,0} -{2717,9880,0,1,0}-{2722,9879,0,1,0}-{2723,9875,0,1,0}- {3278,9368,0,1,5}-{3271,9359,0,1,3}-{3287,9359,0,1,5}- {3301,9394,0,1,5}-{3318,9352,0,1,5}-"
},
{
"npc_id": "1020",
@@ -2697,7 +2797,7 @@
},
{
"npc_id": "1043",
- "loc_data": "{3459,3457,0,0,0}-{3460,3462,0,0,0}-{3462,3459,0,0,0}-{3463,3490,0,0,0}-{3464,3511,0,0,0}-{3465,3466,0,0,0}-{3466,3495,0,0,0}-{3466,3497,0,0,0}-{3467,3485,0,0,0}-{3467,3497,0,0,0}-{3467,3509,0,0,0}-{3469,3470,0,0,0}-{3470,3469,0,0,0}-{3471,3477,0,0,0}-{3474,3505,0,0,0}-{3476,3507,0,0,0}-{3479,3511,0,0,0}-{3480,3468,0,0,0}-{3480,3470,0,0,0}-{3482,3469,0,0,0}-{3483,3511,0,0,0}-{3484,3464,0,0,0}-{3485,3509,0,0,0}-{3490,3461,0,0,0}-{3491,3460,0,0,0}-{3494,3461,0,0,0}-{3494,3512,0,0,0}-{3498,3461,0,0,0}-{3499,3513,0,0,0}-{3501,3513,0,0,0}-{3502,3464,0,0,0}-{3504,3463,0,0,0}-{3506,3512,0,0,0}-{3506,3515,0,0,0}-{3507,3515,0,0,0}-{3509,3512,0,0,0}-{3511,3488,0,0,0}-{3513,3467,0,0,0}-{3513,3487,0,0,0}-{3513,3489,0,0,0}-{3513,3503,0,0,0}-{3514,3490,0,0,0}-{3515,3495,0,0,0}-{3515,3499,0,0,0}-{3516,3469,0,0,0}-"
+ "loc_data": "{3726,3381,0,0,0}-{3745,3359,0,0,0}-{3749,3365,0,0,0}-{3750,3354,0,0,0}-{3757,3363,0,0,0}-{3763,3337,0,0,0}-{3459,3457,0,0,0}-{3460,3462,0,0,0}-{3462,3459,0,0,0}-{3463,3490,0,0,0}-{3464,3511,0,0,0}-{3465,3466,0,0,0}-{3466,3495,0,0,0}-{3466,3497,0,0,0}-{3467,3485,0,0,0}-{3467,3497,0,0,0}-{3467,3509,0,0,0}-{3469,3470,0,0,0}-{3470,3469,0,0,0}-{3471,3477,0,0,0}-{3474,3505,0,0,0}-{3476,3507,0,0,0}-{3479,3511,0,0,0}-{3480,3468,0,0,0}-{3480,3470,0,0,0}-{3482,3469,0,0,0}-{3483,3511,0,0,0}-{3484,3464,0,0,0}-{3485,3509,0,0,0}-{3490,3461,0,0,0}-{3491,3460,0,0,0}-{3494,3461,0,0,0}-{3494,3512,0,0,0}-{3498,3461,0,0,0}-{3499,3513,0,0,0}-{3501,3513,0,0,0}-{3502,3464,0,0,0}-{3504,3463,0,0,0}-{3506,3512,0,0,0}-{3506,3515,0,0,0}-{3507,3515,0,0,0}-{3509,3512,0,0,0}-{3511,3488,0,0,0}-{3513,3467,0,0,0}-{3513,3487,0,0,0}-{3513,3489,0,0,0}-{3513,3503,0,0,0}-{3514,3490,0,0,0}-{3515,3495,0,0,0}-{3515,3499,0,0,0}-{3516,3469,0,0,0}-{3409,3369,0,0,0}-{3420,3349,0,0,0}-{3430,3340,0,0,0}-{3435,3330,0,0,0}-{3435,3359,0,0,0}-{3437,3374,0,0,0}-{3446,3385,0,0,0}-{3447,3388,0,0,0}-{3450,3370,0,0,0}-{3450,3387,0,0,0}-{3451,3336,0,0,0}-{3452,3355,0,0,0}-{3726,3289,0,0,0}-{3732,3291,0,0,0}-{3737,3280,0,0,0}-{3745,3285,0,0,0}-{3418,3420,0,0,0}-{3424,3452,0,0,0}-{3428,3409,0,0,0}-{3433,3416,0,0,0}-{3434,3394,0,0,0}-{3436,3407,0,0,0}-{3438,3414,0,0,0}-{3439,3449,0,0,0}-{3446,3439,0,0,0}-{3454,3410,0,0,0}-{3454,3423,0,0,0}-{2852,4561,0,0,0}-{2853,4566,0,0,0}-{2856,4568,0,0,0}-{2864,4561,0,0,0}-{2864,4563,0,0,0}-"
},
{
"npc_id": "1044",
@@ -3208,9 +3308,17 @@
"loc_data": "{2194,3140,0,1,5}-"
},
{
- "npc_id": "1213",
+ "npc_id": "1211",
"loc_data": "{2914,3418,0,0,6}-"
},
+ {
+ "npc_id": "1212",
+ "loc_data": "{2247,3226,0,0,0}-{2249,3227,0,0,0}-{2249,3258,0,0,0}-{2251,3260,0,0,0}-{2259,3211,0,0,0}-{2267,3223,0,0,0}-{2267,3225,0,0,0}-{2298,3262,0,0,0}-{3202,5990,0,0,0}-{3232,5977,0,0,0}-{3234,5969,0,0,0}-{3237,5995,0,0,0}-{3242,5997,0,0,0}-{3244,5995,0,0,0}-{3245,5995,0,0,0}-{2194,3189,0,0,0}-{2196,3187,0,0,0}-{2196,3189,0,0,0}-{2206,3164,0,0,0}-{2209,3164,0,0,0}-{2216,3142,0,0,0}-{2218,3139,0,0,0}-{2178,3238,0,0,0}-{2208,3225,0,0,0}-{2210,3217,0,0,0}-{2213,3243,0,0,0}-{2218,3245,0,0,0}-{2220,3243,0,0,0}-{2221,3243,0,0,0}-{2695,6170,0,0,0}-{2697,6171,0,0,0}-{2697,6202,0,0,0}-{2699,6204,0,0,0}-{2707,6155,0,0,0}-{2715,6167,0,0,0}-{2715,6169,0,0,0}-{2746,6206,0,0,0}-{2729,6086,0,0,0}-{2731,6080,0,0,0}-{2731,6089,0,0,0}-{2744,6139,0,0,0}-{3271,5978,0,0,0}-{3273,5979,0,0,0}-{3273,6010,0,0,0}-{3275,6012,0,0,0}-{3283,5963,0,0,0}-{3291,5975,0,0,0}-{3291,5977,0,0,0}-{3322,6014,0,0,0}-{2281,3142,0,0,0}-{2283,3136,0,0,0}-{2283,3145,0,0,0}-{2296,3195,0,0,0}-"
+ },
+ {
+ "npc_id": "1213",
+ "loc_data": "{2248,3225,0,0,0}-{2248,3227,0,0,0}-{2251,3257,0,0,0}-{2253,3259,0,0,0}-{2268,3224,0,0,0}-{2291,3262,0,0,0}-{3204,5988,0,0,0}-{3232,5979,0,0,0}-{3234,5967,0,0,0}-{3234,5976,0,0,0}-{3238,5996,0,0,0}-{3239,5997,0,0,0}-{3243,5996,0,0,0}-{2192,3188,0,0,0}-{2192,3191,0,0,0}-{2194,3190,0,0,0}-{2208,3163,0,0,0}-{2209,3163,0,0,0}-{2216,3136,0,0,0}-{2216,3140,0,0,0}-{2180,3236,0,0,0}-{2208,3227,0,0,0}-{2210,3215,0,0,0}-{2210,3224,0,0,0}-{2214,3244,0,0,0}-{2215,3245,0,0,0}-{2219,3244,0,0,0}-{2696,6169,0,0,0}-{2696,6171,0,0,0}-{2699,6201,0,0,0}-{2701,6203,0,0,0}-{2716,6168,0,0,0}-{2739,6206,0,0,0}-{2730,6084,0,0,0}-{3272,5977,0,0,0}-{3272,5979,0,0,0}-{3275,6009,0,0,0}-{3277,6011,0,0,0}-{3292,5976,0,0,0}-{3315,6014,0,0,0}-{2282,3140,0,0,0}-"
+ },
{
"npc_id": "1214",
"loc_data": "{2891,3676,0,0,1}-"
@@ -3769,7 +3877,7 @@
},
{
"npc_id": "1585",
- "loc_data": "{2575,9892,0,1,6}-{2666,9482,0,0,5}-{2641,9563,2,0,5}-{3257,5523,0,1,1}-{3204,5516,0,1,3}-"
+ "loc_data": "{2575,9892,0,1,6}-{2666,9482,0,0,5}-{2641,9563,2,0,5}-{3257,5523,0,1,1}-{3204,5516,0,1,3}-{3244,9369,0,1,3}-{3252,9359,0,1,3}-{3306,9400,0,1,3}-"
},
{
"npc_id": "1586",
@@ -3917,7 +4025,7 @@
},
{
"npc_id": "1633",
- "loc_data": "{1837,3244,0,1,0}-{1836,3250,0,1,0}-{1845,3251,0,1,0}-{1845,3247,0,1,0}-{1849,3241,0,1,0}-{1853,3247,0,1,0}-{1848,3254,0,1,0}-{1858,3251,0,1,0}-{1935,3217,0,1,0}-{1933,3209,0,1,0}-{1930,3208,0,1,0}-{1929,3217,0,1,0}-{1927,3219,0,1,0}-{1924,3211,0,1,0}-{1920,3216,0,1,0}-{1925,3213,0,1,0}-{3263,9399,0,1,3}-{3274,9397,0,1,1}-{3275,9393,0,1,6}-{3271,9384,0,1,0}-{3270,9380,0,1,2}-{3283,9378,0,1,6}-{3285,9386,0,1,5}-{3284,9401,0,1,4}-{3278,9353,0,1,1}-{3299,9380,0,1,1}-{3319,9402,0,1,1}-{3305,9350,0,1,4}-{2761,10007,0,1,0}-{2757,10010,0,1,3}-{2763,10000,0,1,5}-{2760,10011,0,1,0}-{2761,9997,0,1,4}-"
+ "loc_data": "{1837,3244,0,1,0}-{1836,3250,0,1,0}-{1845,3251,0,1,0}-{1845,3247,0,1,0}-{1849,3241,0,1,0}-{1853,3247,0,1,0}-{1848,3254,0,1,0}-{1858,3251,0,1,0}-{1935,3217,0,1,0}-{1933,3209,0,1,0}-{1930,3208,0,1,0}-{1929,3217,0,1,0}-{1927,3219,0,1,0}-{1924,3211,0,1,0}-{1920,3216,0,1,0}-{1925,3213,0,1,0}-{3263,9399,0,1,3}-{3274,9397,0,1,1}-{3275,9393,0,1,6}-{3271,9384,0,1,0}-{3270,9380,0,1,2}-{3283,9378,0,1,6}-{3285,9386,0,1,5}-{3284,9401,0,1,4}-{3278,9353,0,1,1}-{3299,9380,0,1,1}-{3319,9402,0,1,1}-{3305,9350,0,1,4}-{3248,9374,0,1,3}-{3253,9363,0,1,3}-{3249,9355,0,1,3}-{2761,10007,0,1,0}-{2757,10010,0,1,3}-{2763,10000,0,1,5}-{2760,10011,0,1,0}-{2761,9997,0,1,4}-"
},
{
"npc_id": "1634",
@@ -4117,7 +4225,7 @@
},
{
"npc_id": "1752",
- "loc_data": "{2510,3228,0,1,3}-"
+ "loc_data": "{2437,3442,0,1,0}-{2449,3421,0,1,0}-{2457,3394,0,1,0}-{2464,3394,0,1,0}-{2480,3406,0,1,0}-{2432,3387,0,1,0}-{2442,3388,0,1,0}-{2453,3363,0,1,0}-{2463,3375,0,1,0}-{2381,3428,0,1,0}-{2392,3405,0,1,0}-{2413,3397,0,1,0}-{2415,3408,0,1,0}-{2463,3456,0,1,0}-{2468,3456,0,1,0}-"
},
{
"npc_id": "1754",
@@ -4399,13 +4507,17 @@
"npc_id": "1873",
"loc_data": "{3343,2962,0,1,0}-{3343,2964,0,1,1}-"
},
+ {
+ "npc_id": "1874",
+ "loc_data": "{3371,9301,0,1,0}-{3371,9303,0,1,0}-{3371,9305,0,1,0}-{3371,9307,0,1,0}-{3371,9309,0,1,0}-{3373,9301,0,1,0}-{3373,9303,0,1,0}-{3373,9306,0,1,0}-{3373,9308,0,1,0}-{3375,9301,0,1,0}-{3375,9303,0,1,0}-{3375,9305,0,1,0}-{3375,9307,0,1,0}-{3375,9309,0,1,0}-{3403,2963,0,1,0}-{3429,2976,0,1,0}-{3328,2952,0,1,0}-{3328,2957,0,1,0}-{3331,2955,0,1,0}-{3331,2961,0,1,0}-{3266,2955,0,1,0}-{3271,2967,0,1,0}-{3279,2957,0,1,0}-{3280,2975,0,1,0}-{3284,2959,0,1,0}-{3294,2964,0,1,0}-{3295,2978,0,1,0}-{3305,2966,0,1,0}-{3307,2959,0,1,0}-{3309,2973,0,1,0}-{3396,3029,0,1,0}-{3397,3044,0,1,0}-{3398,3038,0,1,0}-"
+ },
{
"npc_id": "1875",
"loc_data": "{3354,2952,0,0,1}-"
},
{
"npc_id": "1884",
- "loc_data": "{2811,3174,0,0,0}-"
+ "loc_data": "{2811,3174,0,1,0}-"
},
{
"npc_id": "1902",
@@ -4427,6 +4539,10 @@
"npc_id": "1912",
"loc_data": "{3376,3429,0,1,6}-"
},
+ {
+ "npc_id": "1916",
+ "loc_data": "{3112,9690,0,0,7}-"
+ },
{
"npc_id": "1917",
"loc_data": "{3177,2987,0,1,6}-"
@@ -4445,7 +4561,11 @@
},
{
"npc_id": "1923",
- "loc_data": "{3183,2974,0,0,7}-"
+ "loc_data": "{3185,2983,0,1,4}-"
+ },
+ {
+ "npc_id": "1924",
+ "loc_data": "{3213,2956,0,1,1}-"
},
{
"npc_id": "1926",
@@ -4467,6 +4587,10 @@
"npc_id": "1930",
"loc_data": "{3161,2985,0,0,6}-{3161,2983,0,0,6}-{3161,2982,0,0,6}-{3161,2981,0,0,6}-{3161,2984,0,0,6}-"
},
+ {
+ "npc_id": "1932",
+ "loc_data": "{2836,3740,0,0,6}-"
+ },
{
"npc_id": "1935",
"loc_data": "{2841,3738,0,0,3}-"
@@ -4499,6 +4623,22 @@
"npc_id": "1942",
"loc_data": "{2855,3735,0,1,0}-{2858,3730,0,1,0}-{2865,3726,0,1,0}-"
},
+ {
+ "npc_id": "1943",
+ "loc_data": "{2825,3807,2,0,1}-"
+ },
+ {
+ "npc_id": "1945",
+ "loc_data": "{2825,3811,2,0,6}-"
+ },
+ {
+ "npc_id": "1947",
+ "loc_data": "{2835,3740,0,0,6}-"
+ },
+ {
+ "npc_id": "1949",
+ "loc_data": "{2837,3740,0,0,6}-"
+ },
{
"npc_id": "1951",
"loc_data": "{2886,3723,0,1,3}-{2887,3720,0,1,4}-{2890,3721,0,1,7}-{2890,3724,0,1,1}-{2909,3736,0,1,5}-{2910,3736,0,1,2}-{2891,3724,0,1,7}-"
@@ -4529,23 +4669,35 @@
},
{
"npc_id": "1961",
- "loc_data": "{3156,5477,0,1,5}-{3162,5479,0,1,4}-{3159,5477,0,1,6}-{3150,5474,0,1,3}-{3147,5480,0,1,1}-{3159,5484,0,1,3}-{3250,9326,0,1,4}-{3258,9327,0,1,6}-{3256,9333,0,1,1}-{3220,9309,0,1,4}-{3252,9333,0,1,3}-{3208,9318,0,1,3}-{3241,9331,0,1,6}-{3204,9328,0,1,3}-{3209,9328,0,1,3}-{3228,9323,0,1,4}-{3210,9282,0,1,7}-{3225,9329,0,1,6}-{3207,9299,0,1,4}-{3215,9295,0,1,3}-{3213,9322,0,1,3}-{3214,9315,0,1,0}-{3221,9291,0,1,0}-{3213,9303,0,1,4}-{3227,9304,0,1,6}-{3247,9301,0,1,1}-{3228,9284,0,1,3}-{3254,9286,0,1,4}-{3262,9291,0,1,6}-{3224,9302,0,1,3}-{3250,9298,0,1,3}-{3252,9293,0,1,6}-{3262,9299,0,1,1}-{3256,9297,0,1,7}-{3262,9285,0,1,1}-{3254,9322,0,1,0}-{3261,9318,0,1,4}-{3242,9316,0,1,6}-{3250,9306,0,1,3}-{3250,9327,0,1,3}-"
+ "loc_data": "{3156,5477,0,1,5}-{3162,5479,0,1,4}-{3159,5477,0,1,6}-{3150,5474,0,1,3}-{3147,5480,0,1,1}-{3159,5484,0,1,3}-{2764,4944,1,1,0}-{2796,4976,1,1,0}-{2798,4950,1,1,0}-{2806,4939,1,1,0}-{2832,4959,2,1,0}-{3201,9293,0,1,0}-{3205,9303,0,1,0}-{3206,9328,0,1,0}-{3207,9310,0,1,0}-{3211,9284,0,1,0}-{3220,9289,0,1,0}-{3224,9334,0,1,0}-{3249,9286,0,1,0}-{3251,9303,0,1,0}-{3252,9327,0,1,0}-{3252,9332,0,1,0}-{3255,9315,0,1,0}-{3261,9296,0,1,0}-{3261,9306,0,1,0}-"
},
{
"npc_id": "1962",
- "loc_data": "{3168,5458,0,1,2}-{3242,9331,0,1,3}-{3238,9333,0,1,6}-{3261,9330,0,1,1}-{3232,9333,0,1,0}-{3222,9324,0,1,4}-{3205,9303,0,1,3}-"
+ "loc_data": "{3168,5458,0,1,2}-{2900,4948,3,1,0}-{2762,4962,1,1,0}-{2763,4973,1,1,0}-{2780,4977,1,1,0}-{2787,4967,1,1,0}-{2796,4959,1,1,0}-{2838,4948,2,1,0}-{3205,9329,0,1,0}-{3210,9292,0,1,0}-{3221,9310,0,1,0}-{3225,9323,0,1,0}-{3243,9310,0,1,0}-{3246,9290,0,1,0}-{3255,9301,0,1,0}-{3255,9321,0,1,0}-{3261,9331,0,1,0}-"
},
{
"npc_id": "1963",
- "loc_data": "{3166,5465,0,1,7}-{3168,5462,0,1,0}-{3167,5467,0,1,1}-{3167,5467,0,1,7}-"
+ "loc_data": "{3166,5465,0,1,7}-{3168,5462,0,1,0}-{3167,5467,0,1,1}-{3167,5467,0,1,7}-{2926,4965,3,1,0}-{2771,4947,1,1,0}-{2775,4963,1,1,0}-{2781,4948,1,1,0}-{2792,4942,1,1,0}-{2798,4954,1,1,0}-{2858,4964,2,1,0}-{3204,9309,0,1,0}-{3214,9333,0,1,0}-{3219,9297,0,1,0}-{3239,9300,0,1,0}-{3240,9286,0,1,0}-{3240,9330,0,1,0}-{3245,9306,0,1,0}-{3250,9316,0,1,0}-{3250,9317,0,1,0}-{3257,9290,0,1,0}-"
+ },
+ {
+ "npc_id": "1964",
+ "loc_data": "{2761,4950,1,1,0}-{2765,4938,1,1,0}-{2770,4955,1,1,0}-{2772,4940,1,1,0}-{2777,4943,1,1,0}-{2782,4967,1,1,0}-{2797,4965,1,1,0}-{2799,4937,1,1,0}-{2799,4941,1,1,0}-{2807,4968,1,1,0}-{2808,4975,1,1,0}-{2809,4953,1,1,0}-{2864,4946,2,1,0}-{3202,9283,0,1,0}-{3206,9333,0,1,0}-{3209,9299,0,1,0}-{3219,9301,0,1,0}-{3226,9285,0,1,0}-{3227,9303,0,1,0}-{3228,9293,0,1,0}-{3229,9333,0,1,0}-{3237,9293,0,1,0}-{3246,9321,0,1,0}-{3256,9296,0,1,0}-{3260,9285,0,1,0}-{3262,9317,0,1,0}-"
+ },
+ {
+ "npc_id": "1970",
+ "loc_data": "{3233,9317,0,1,1}-"
},
{
"npc_id": "1972",
"loc_data": "{2536,3426,0,1,0}-"
},
+ {
+ "npc_id": "1973",
+ "loc_data": "{2693,5075,0,1,0}-{2695,5089,0,1,0}-{2697,5096,0,1,0}-{2703,5064,0,1,0}-{2710,5105,0,1,0}-{2719,5078,0,1,0}-{2719,5112,0,1,0}-{2720,5096,0,1,0}-{2726,5086,0,1,0}-{2729,5096,0,1,0}-{2735,5061,0,1,0}-{2740,5069,0,1,0}-{2740,5085,0,1,0}-{2746,5092,0,1,0}-{2746,5114,0,1,0}-{2626,5065,0,1,0}-{2637,5099,0,1,0}-{2638,5058,0,1,0}-{2644,5090,0,1,0}-{2658,5082,0,1,0}-{2666,5097,0,1,0}-{2680,5074,0,1,0}-"
+ },
{
"npc_id": "1976",
- "loc_data": "{3315,5508,0,1,5}-{3308,5510,0,1,3}-{3304,5507,0,1,4}-{3299,5509,0,1,3}-{3317,5514,0,1,3}-{3319,5518,0,1,4}-{3320,5507,0,1,4}-{3324,5513,0,1,1}-{3283,5510,0,1,5}-{3320,5550,0,1,0}-{3313,5523,0,1,4}-{3310,5541,0,1,4}-{3308,5535,0,1,5}-{3301,5531,0,1,4}-{3315,5530,0,1,1}-{3322,5536,0,1,4}-{3320,5539,0,1,7}-{3311,5519,0,1,3}-{3289,5525,0,1,2}-{3300,5519,0,1,6}-{3289,5515,0,1,7}-{3287,5523,0,1,3}-"
+ "loc_data": "{2694,5067,0,1,0}-{2717,5081,0,1,0}-{2718,5108,0,1,0}-{2721,5104,0,1,0}-{2726,5091,0,1,0}-{2731,5060,0,1,0}-{2732,5073,0,1,0}-{2740,5083,0,1,0}-{2742,5103,0,1,0}-{2747,5094,0,1,0}-{3315,5508,0,1,5}-{3308,5510,0,1,3}-{3304,5507,0,1,4}-{3299,5509,0,1,3}-{3317,5514,0,1,3}-{3319,5518,0,1,4}-{3320,5507,0,1,4}-{3324,5513,0,1,1}-{3283,5510,0,1,5}-{3320,5550,0,1,0}-{3313,5523,0,1,4}-{3310,5541,0,1,4}-{3308,5535,0,1,5}-{3301,5531,0,1,4}-{3315,5530,0,1,1}-{3322,5536,0,1,4}-{3320,5539,0,1,7}-{3311,5519,0,1,3}-{3289,5525,0,1,2}-{3300,5519,0,1,6}-{3289,5515,0,1,7}-{3287,5523,0,1,3}-"
},
{
"npc_id": "1990",
@@ -4553,11 +4705,43 @@
},
{
"npc_id": "1993",
- "loc_data": "{3360,2935,0,1,4}-{3359,2924,0,1,6}-{3352,2936,0,1,0}-{3349,2931,0,1,6}-{3341,2924,0,1,4}-"
+ "loc_data": "{3264,2886,0,1,0}-{3267,2891,0,1,0}-{3268,2881,0,1,0}-{3269,2885,0,1,0}-{3296,2912,0,1,0}-{3297,2919,0,1,0}-{3301,2920,0,1,0}-{3308,2916,0,1,0}-{3258,2868,0,1,0}-{3259,2823,0,1,0}-{3259,2845,0,1,0}-{3260,2830,0,1,0}-{3260,2859,0,1,0}-{3261,2819,0,1,0}-{3261,2851,0,1,0}-{3337,2922,0,1,0}-{3343,2931,0,1,0}-{3349,2922,0,1,0}-{3351,2927,0,1,0}-{3357,2922,0,1,0}-{3359,2927,0,1,0}-{3364,2937,0,1,0}-{3268,2854,0,1,0}-{3269,2827,0,1,0}-{3269,2866,0,1,0}-{3269,2875,0,1,0}-{3270,2818,0,1,0}-{3272,2841,0,1,0}-{3276,2842,0,1,0}-{3282,2839,0,1,0}-{3290,2847,0,1,0}-"
},
{
"npc_id": "1994",
- "loc_data": "{3344,2933,0,1,3}-{3350,2936,0,1,4}-"
+ "loc_data": "{3265,2931,0,1,0}-{3265,2935,0,1,0}-{3268,2932,0,1,0}-{3268,2935,0,1,0}-{3316,2900,0,1,0}-{3319,2897,0,1,0}-{3320,2901,0,1,0}-{3321,2899,0,1,0}-{3212,2863,0,1,0}-{3213,2866,0,1,0}-{3215,2863,0,1,0}-{3216,2865,0,1,0}-{3216,2868,0,1,0}-{3218,2831,0,1,0}-{3220,2830,0,1,0}-{3220,2833,0,1,0}-{3221,2831,0,1,0}-{3238,2845,0,1,0}-{3240,2845,0,1,0}-{3241,2843,0,1,0}-{3241,2847,0,1,0}-{3400,2997,0,1,0}-{3402,2999,0,1,0}-{3403,2997,0,1,0}-{3445,2993,0,1,0}-{3446,2992,0,1,0}-{3448,2991,0,1,0}-{3448,2994,0,1,0}-{3329,2933,0,1,0}-{3330,2931,0,1,0}-{3331,2933,0,1,0}-{3343,2895,0,1,0}-{3345,2896,0,1,0}-{3346,2894,0,1,0}-{3348,2894,0,1,0}-{3376,2934,0,1,0}-{3378,2933,0,1,0}-{3378,2935,0,1,0}-{3381,2907,0,1,0}-{3383,2905,0,1,0}-{3383,2908,0,1,0}-{3384,2907,0,1,0}-{3306,2817,0,1,0}-{3308,2818,0,1,0}-{3309,2816,0,1,0}-{3312,2817,0,1,0}-{3314,2861,0,1,0}-{3319,2873,0,1,0}-{3321,2871,0,1,0}-{3324,2870,0,1,0}-{3327,2858,0,1,0}-{3406,3014,0,1,0}-{3408,3013,0,1,0}-{3408,3016,0,1,0}-{3410,3015,0,1,0}-"
+ },
+ {
+ "npc_id": "1995",
+ "loc_data": "{3309,2806,0,1,0}-{3312,2806,0,1,0}-{3314,2752,0,1,0}-{3314,2806,0,1,0}-{3315,2805,0,1,0}-{3316,2780,0,1,0}-{3316,2795,0,1,0}-{3317,2752,0,1,0}-{3317,2762,0,1,0}-{3317,2763,0,1,0}-{3317,2779,0,1,0}-{3317,2794,0,1,0}-{3318,2761,0,1,0}-{3318,2778,0,1,0}-{3318,2781,0,1,0}-{3318,2794,0,1,0}-{3318,2795,0,1,0}-{3319,2760,0,1,0}-{3319,2763,0,1,0}-"
+ },
+ {
+ "npc_id": "1997",
+ "loc_data": "{3272,2802,0,1,0}-{3273,2802,0,1,0}-{3273,2805,0,1,0}-{3274,2798,0,1,0}-{3274,2799,0,1,0}-{3274,2802,0,1,0}-{3274,2804,0,1,0}-{3275,2795,0,1,0}-{3275,2796,0,1,0}-{3275,2798,0,1,0}-{3277,2752,0,1,0}-{3277,2753,0,1,0}-{3277,2756,0,1,0}-{3277,2757,0,1,0}-{3278,2752,0,1,0}-{3278,2753,0,1,0}-{3278,2754,0,1,0}-{3278,2755,0,1,0}-"
+ },
+ {
+ "npc_id": "1998",
+ "loc_data": "{3275,2803,0,1,0}-"
+ },
+ {
+ "npc_id": "1999",
+ "loc_data": "{3278,2804,0,1,0}-"
+ },
+ {
+ "npc_id": "2000",
+ "loc_data": "{3277,2802,0,1,0}-"
+ },
+ {
+ "npc_id": "2002",
+ "loc_data": "{3315,2849,0,1,0}-"
+ },
+ {
+ "npc_id": "2003",
+ "loc_data": "{3304,9196,0,1,0}-"
+ },
+ {
+ "npc_id": "2004",
+ "loc_data": "{3304,9195,0,1,0}-"
},
{
"npc_id": "2014",
@@ -4569,7 +4753,7 @@
},
{
"npc_id": "2021",
- "loc_data": "{3222,9525,2,1,3}-{3216,9522,2,1,3}-{3219,9518,2,1,3}-{3224,9521,2,1,3}-{3218,9523,2,1,3}-{3215,9521,2,1,3}-{3213,9522,2,1,3}-{3227,9517,2,1,3}-"
+ "loc_data": "{3224,9516,2,1,0}-{3224,9517,2,1,0}-{3224,9518,2,1,0}-{3225,9516,2,1,0}-{3225,9517,2,1,0}-{3225,9518,2,1,0}-{3226,9516,2,1,0}-{3226,9517,2,1,0}-{3226,9518,2,1,0}-"
},
{
"npc_id": "2031",
@@ -4625,15 +4809,27 @@
},
{
"npc_id": "2044",
- "loc_data": "{2486,3048,0,1,3}-"
+ "loc_data": "{2486,3048,0,1,3}-{2484,9392,2,1,0}-{2465,9454,2,1,0}-{2471,9422,2,1,0}-{2448,9442,2,1,0}-"
},
{
"npc_id": "2045",
- "loc_data": "{2482,3046,0,1,3}-"
+ "loc_data": "{2482,3046,0,1,3}-{2459,9394,2,1,0}-{2473,9430,2,1,0}-{2478,9442,2,1,0}-{2487,9455,2,1,0}-"
+ },
+ {
+ "npc_id": "2046",
+ "loc_data": "{2466,9389,2,1,0}-{2449,9429,0,1,0}-{2436,9452,2,1,0}-{2436,9465,2,1,0}-{2450,9460,2,1,0}-{2455,9440,2,1,0}-{2473,9439,2,1,0}-{2483,9408,2,1,0}-"
},
{
"npc_id": "2047",
- "loc_data": "{2480,3046,0,1,3}-"
+ "loc_data": "{2480,3046,0,1,3}-{2477,9384,2,1,0}-{2449,9434,0,1,0}-{2437,9429,2,1,0}-{2440,9438,2,1,0}-{2458,9408,2,1,0}-"
+ },
+ {
+ "npc_id": "2048",
+ "loc_data": "{2485,9398,2,1,0}-{2455,9435,0,1,0}-{2457,9420,2,1,0}-{2462,9431,2,1,0}-{2482,9422,2,1,0}-"
+ },
+ {
+ "npc_id": "2049",
+ "loc_data": "{2452,9440,0,1,0}-"
},
{
"npc_id": "2050",
@@ -4663,6 +4859,10 @@
"npc_id": "2056",
"loc_data": "{2470,3040,0,0,0}-"
},
+ {
+ "npc_id": "2057",
+ "loc_data": "{2442,9436,2,1,0}-{2458,9413,2,1,0}-{2470,9435,2,1,0}-{2472,9460,2,1,0}-{2483,9413,2,1,0}-{2485,9447,2,1,0}-{2480,3046,0,1,0}-{2453,9393,2,1,0}-{2461,9403,2,1,0}-{2464,9380,2,1,0}-"
+ },
{
"npc_id": "2059",
"loc_data": "{2588,3088,0,1,3}-"
@@ -5047,6 +5247,10 @@
"npc_id": "2237",
"loc_data": "{3249,3266,0,1,5}-"
},
+ {
+ "npc_id": "2238",
+ "loc_data": "{3219,3247,0,1,6}-"
+ },
{
"npc_id": "2240",
"loc_data": "{3077,3259,0,1,4}-"
@@ -5171,6 +5375,34 @@
"npc_id": "2281",
"loc_data": "{3187,3241,0,1,0}-{3177,3243,0,1,0}-{3246,3245,0,1,4}-"
},
+ {
+ "npc_id": "2282",
+ "loc_data": "{2488,4973,0,0,6}-"
+ },
+ {
+ "npc_id": "2283",
+ "loc_data": "{2458,4980,0,0,6}-"
+ },
+ {
+ "npc_id": "2284",
+ "loc_data": "{2457,4966,0,0,6}-"
+ },
+ {
+ "npc_id": "2286",
+ "loc_data": "{2476,4958,0,0,3}-"
+ },
+ {
+ "npc_id": "2287",
+ "loc_data": "{2443,4956,0,0,4}-"
+ },
+ {
+ "npc_id": "2288",
+ "loc_data": "{2469,4941,0,0,6}-"
+ },
+ {
+ "npc_id": "2289",
+ "loc_data": "{2451,4939,0,0,6}-"
+ },
{
"npc_id": "2290",
"loc_data": "{2997,3373,0,0,0}-"
@@ -5193,16 +5425,24 @@
},
{
"npc_id": "2296",
- "loc_data": "{3399,2916,0,0,6}-"
+ "loc_data": "{3401,2918,0,0,6}-"
},
{
"npc_id": "2298",
"loc_data": "{3287,2813,0,1,1}-"
},
+ {
+ "npc_id": "2300",
+ "loc_data": "{3243,2813,0,0,1}-"
+ },
{
"npc_id": "2301",
"loc_data": "{3181,3043,0,1,3}-{3310,3107,0,1,4}-"
},
+ {
+ "npc_id": "2302",
+ "loc_data": "{3243,2812,0,1,1}-"
+ },
{
"npc_id": "2304",
"loc_data": "{3039,3292,0,1,6}-"
@@ -5381,27 +5621,79 @@
},
{
"npc_id": "2372",
- "loc_data": "{2044,4632,0,1,3}-"
+ "loc_data": "{2044,4628,0,1,0}-"
+ },
+ {
+ "npc_id": "2373",
+ "loc_data": "{2037,4636,0,1,0}-{2038,4644,0,1,0}-{2041,4638,0,1,0}-{2044,4642,0,1,0}-"
},
{
"npc_id": "2374",
- "loc_data": "{2041,4632,0,1,3}-{2037,4630,0,1,3}-{2041,4644,0,1,4}-"
+ "loc_data": "{2036,4633,0,0,6}-"
+ },
+ {
+ "npc_id": "2381",
+ "loc_data": "{2555,3444,0,1,0}-"
+ },
+ {
+ "npc_id": "2382",
+ "loc_data": "{3022,3946,0,1,0}-"
+ },
+ {
+ "npc_id": "2383",
+ "loc_data": "{3034,3701,0,1,0}-"
+ },
+ {
+ "npc_id": "2384",
+ "loc_data": "{3162,2982,0,1,0}-"
},
{
"npc_id": "2385",
- "loc_data": "{3112,3159,0,0,0}-"
+ "loc_data": "{3112,3158,0,1,0}-"
},
{
"npc_id": "2386",
- "loc_data": "{3051,3496,1,0,0}-"
+ "loc_data": "{3052,3496,1,1,0}-"
+ },
+ {
+ "npc_id": "2387",
+ "loc_data": "{3053,3378,1,1,0}-"
+ },
+ {
+ "npc_id": "2388",
+ "loc_data": "{2950,3820,0,1,0}-"
},
{
"npc_id": "2389",
- "loc_data": "{3219,3677,0,0,0}-"
+ "loc_data": "{3218,3677,0,1,0}-"
+ },
+ {
+ "npc_id": "2390",
+ "loc_data": "{3068,3858,0,1,0}-"
+ },
+ {
+ "npc_id": "2391",
+ "loc_data": "{2850,3348,0,1,0}-"
},
{
"npc_id": "2392",
- "loc_data": "{3043,3204,0,0,0}-"
+ "loc_data": "{3044,3204,0,1,0}-"
+ },
+ {
+ "npc_id": "2393",
+ "loc_data": "{2396,3481,0,1,0}-"
+ },
+ {
+ "npc_id": "2394",
+ "loc_data": "{3294,3934,1,1,0}-"
+ },
+ {
+ "npc_id": "2395",
+ "loc_data": "{3448,3550,1,1,0}-"
+ },
+ {
+ "npc_id": "2396",
+ "loc_data": "{3119,9996,0,1,0}-"
},
{
"npc_id": "2414",
@@ -5475,6 +5767,10 @@
"npc_id": "2462",
"loc_data": "{2596,4773,0,1,2}-{2602,4771,0,1,6}-{2596,4780,0,1,4}-"
},
+ {
+ "npc_id": "2477",
+ "loc_data": "{1952,4768,1,0,6}-"
+ },
{
"npc_id": "2479",
"loc_data": "{3420,4777,0,0,0}-"
@@ -5833,19 +6129,31 @@
},
{
"npc_id": "2699",
- "loc_data": "{3037,2982,0,0,6}-{3036,2979,0,0,6}-"
+ "loc_data": "{3016,3184,1,1,0}-"
},
{
"npc_id": "2700",
- "loc_data": "{3037,2982,0,0,6}-"
+ "loc_data": "{3016,3182,1,1,0}-"
+ },
+ {
+ "npc_id": "2701",
+ "loc_data": "{3011,3181,1,1,0}-"
+ },
+ {
+ "npc_id": "2702",
+ "loc_data": "{3019,3180,1,1,0}-"
+ },
+ {
+ "npc_id": "2703",
+ "loc_data": "{3012,3185,1,1,0}-"
},
{
"npc_id": "2704",
- "loc_data": "{3034,2979,0,0,1}-{3033,2980,1,0,4}-{3032,2979,0,0,1}-{3034,2985,0,0,1}-{3035,2982,0,0,1}-{3019,3185,0,0,0}-"
+ "loc_data": "{3019,3185,0,0,0}-"
},
{
"npc_id": "2705",
- "loc_data": "{3034,2985,1,0,1}-"
+ "loc_data": "{3018,3185,2,1,0}-"
},
{
"npc_id": "2706",
@@ -5917,7 +6225,23 @@
},
{
"npc_id": "2783",
- "loc_data": "{1995,4660,0,1,7}-{1989,4660,0,1,0}-{1989,4664,0,1,7}-{1995,4660,0,1,2}-{1997,4664,0,1,3}-{1989,4658,0,1,0}-{2001,4646,0,1,4}-{2000,4645,0,1,3}-{1997,4644,0,1,1}-{2006,4639,0,1,6}-{1999,4636,0,1,3}-"
+ "loc_data": "{1995,4660,0,1,7}-{1989,4660,0,1,0}-{1989,4664,0,1,7}-{1997,4664,0,1,3}-{1989,4658,0,1,0}-{2001,4646,0,1,4}-{2000,4645,0,1,3}-{1997,4644,0,1,1}-{1999,4636,0,1,3}-{2022,4665,0,1,0}-{2024,4662,0,1,0}-{2020,4660,0,1,0}-{2023,4656,0,1,0}-{2029,4660,0,1,0}-{2031,4665,0,1,0}-{2034,4661,0,1,0}-{2032,4658,0,1,0}-{1991,4653,0,1,0}-{1995,4651,0,1,0}-"
+ },
+ {
+ "npc_id": "2784",
+ "loc_data": "{2022,4616,0,1,5}-{2024,4620,0,1,5}-"
+ },
+ {
+ "npc_id": "2785",
+ "loc_data": "{2000,4613,0,0,0}-{2000,4611,0,0,5}-"
+ },
+ {
+ "npc_id": "2786",
+ "loc_data": "{2008,4613,0,1,0}-"
+ },
+ {
+ "npc_id": "2787",
+ "loc_data": "{2023,4612,0,1,0}-"
},
{
"npc_id": "2790",
@@ -5931,6 +6255,10 @@
"npc_id": "2794",
"loc_data": "{2606,3100,0,0,0}-"
},
+ {
+ "npc_id": "2795",
+ "loc_data": "{2979,3197,0,1,0}-"
+ },
{
"npc_id": "2796",
"loc_data": "{3096,3108,0,0,6}-"
@@ -5939,9 +6267,17 @@
"npc_id": "2800",
"loc_data": "{2981,3190,0,0,0}-"
},
+ {
+ "npc_id": "2801",
+ "loc_data": "{2523,3373,0,1,0}-{2523,3376,0,1,0}-{2526,3373,0,1,0}-{2526,3376,0,1,0}-{2529,3373,0,1,0}-{2529,3376,0,1,0}-{2531,3376,0,1,0}-{2532,3373,0,1,0}-"
+ },
+ {
+ "npc_id": "2802",
+ "loc_data": "{2406,3498,0,1,0}-"
+ },
{
"npc_id": "2803",
- "loc_data": "{3391,3066,0,1,6}-{3397,3054,0,1,6}-{3398,3060,0,1,0}-{3412,3059,0,1,3}-"
+ "loc_data": "{3387,3068,0,1,0}-{3387,3017,0,1,0}-{3404,3062,0,1,0}-{3441,3061,0,1,0}-{3445,3034,0,1,0}-{3338,2804,0,1,0}-{3339,2815,0,1,0}-{3342,2809,0,1,0}-{3344,2800,0,1,0}-{3348,2809,0,1,0}-{3349,2814,0,1,0}-{3357,2813,0,1,0}-{3357,2806,0,1,0}-{3365,2815,0,1,0}-"
},
{
"npc_id": "2804",
@@ -5957,11 +6293,11 @@
},
{
"npc_id": "2807",
- "loc_data": "{3414,3045,0,1,1}-{3403,3050,0,1,4}-{3407,3058,0,1,3}-{3420,3022,0,0,0}-"
+ "loc_data": "{3384,3013,0,1,0}-{3387,3014,0,1,0}-{3441,3059,0,1,0}-{3443,3033,0,1,0}-{3443,3059,0,1,0}-"
},
{
"npc_id": "2808",
- "loc_data": "{3384,3072,0,1,2}-{3419,3006,0,1,4}-{3403,3069,0,1,1}-{3402,3061,0,1,1}-{3394,3076,0,1,1}-"
+ "loc_data": "{3385,3067,0,1,0}-{3389,3065,0,1,0}-{3400,3032,0,1,0}-{3402,3061,0,1,0}-{3404,3060,0,1,0}-{3407,3067,0,1,0}-{3408,3060,0,1,0}-{3411,3065,0,1,0}-{3412,3032,0,1,0}-{3412,3049,0,1,0}-{3414,3029,0,1,0}-{3417,3036,0,1,0}-{3418,3032,0,1,0}-{3419,3034,0,1,0}-{3422,3058,0,1,0}-{3424,3059,0,1,0}-{3435,3057,0,1,0}-{3435,3062,0,1,0}-{3439,3013,0,1,0}-{3439,3065,0,1,0}-{3440,3016,0,1,0}-{3443,3012,0,1,0}-{3443,3017,0,1,0}-{3443,3034,0,1,0}-{3443,3047,0,1,0}-{3446,3014,0,1,0}-"
},
{
"npc_id": "2809",
@@ -6047,6 +6383,10 @@
"npc_id": "2910",
"loc_data": "{3082,9885,0,1,4}-"
},
+ {
+ "npc_id": "2932",
+ "loc_data": "{2437,3347,0,1,0}-"
+ },
{
"npc_id": "2935",
"loc_data": "{3671,3484,0,1,4}-"
@@ -6123,6 +6463,10 @@
"npc_id": "3021",
"loc_data": "{2572,3105,0,1,0}-{2614,3226,0,1,4}-{3088,3357,0,1,0}-{2856,3435,0,1,0}-{3603,3529,0,1,6}-{2611,3859,0,1,6}-{2589,3863,0,1,0}-{3189,3234,0,1,0}-{2940,3225,0,1,6}-{2663,3374,0,1,4}-{3182,3354,0,1,0}-{2933,3434,0,1,4}-{3449,3471,0,1,6}-{2666,3521,0,1,4}-{2491,3177,0,1,1}-{3007,3371,0,1,2}-{2474,3446,0,1,4}-{2434,3415,0,1,3}-{3232,3459,0,1,3}-{2796,3104,0,1,0}-{2764,3210,0,1,1}-{3315,3205,0,1,6}-{3060,3263,0,1,0}-{3053,3304,0,1,1}-{2812,3333,0,1,4}-{2815,3466,0,1,3}-"
},
+ {
+ "npc_id": "3022",
+ "loc_data": "{3371,9320,0,0,6}-"
+ },
{
"npc_id": "3029",
"loc_data": "{3422,2937,0,1,1}-"
@@ -6384,12 +6728,16 @@
"loc_data": "{3139,3448,0,1,3}-"
},
{
- "npc_id": "3215",
- "loc_data": "{2541,9672,0,1,3}-"
+ "npc_id": "3213",
+ "loc_data": "{2568,3334,0,1,0}-"
+ },
+ {
+ "npc_id": "3214",
+ "loc_data": "{2517,9755,0,1,0}-"
},
{
"npc_id": "3216",
- "loc_data": "{2581,3332,0,1,3}-{2534,3273,0,0,1}-"
+ "loc_data": "{2534,3273,0,0,1}-{2539,3273,0,0,1}-"
},
{
"npc_id": "3217",
@@ -6841,7 +7189,7 @@
},
{
"npc_id": "3675",
- "loc_data": "{3331,2791,0,1,1}-{3333,2803,0,1,2}-{3338,2801,0,1,4}-{3338,2776,0,1,3}-{3321,2857,0,1,3}-{3322,2861,0,0,4}-{3319,2855,0,1,1}-{3319,2853,0,1,6}-"
+ "loc_data": "{3333,2864,0,1,1}-{3335,2860,0,1,2}-{3338,2864,0,1,4}-{3215,2841,0,1,0}-{3217,2845,0,1,0}-{3220,2841,0,1,0}-{3295,2866,0,1,0}-{3297,2863,0,1,0}-{3301,2864,0,1,0}-{3336,2778,0,1,0}-{3343,2793,0,1,0}-{3367,2791,0,1,0}-"
},
{
"npc_id": "3677",
@@ -7265,7 +7613,7 @@
},
{
"npc_id": "4375",
- "loc_data": "{3012,3192,1,0,2}-"
+ "loc_data": "{3013,3192,1,0,6}-"
},
{
"npc_id": "4376",
@@ -7833,7 +8181,7 @@
},
{
"npc_id": "4686",
- "loc_data": "{2804,3507,0,1,0}-{2880,9927,0,1,0}-{2887,9955,0,1,0}-{2891,9941,0,1,0}-{2824,3510,0,1,5}-{2954,3894,0,1,4}-{2950,3932,0,1,0}-{2955,3945,0,1,0}-{3213,5548,0,1,4}-"
+ "loc_data": "{2824,3510,0,1,5}-{2880,9927,0,1,0}-{2887,9955,0,1,0}-{2891,9941,0,1,0}-{2954,3894,0,1,4}-{2950,3932,0,1,0}-{2955,3945,0,1,0}-{3213,5548,0,1,4}-{2804,3507,0,1,0}-"
},
{
"npc_id": "4687",
@@ -7845,23 +8193,23 @@
},
{
"npc_id": "4689",
- "loc_data": "{2902,9736,0,1,0}-"
+ "loc_data": "{2369,3401,0,1,0}-{2902,9736,0,1,0}-"
},
{
"npc_id": "4690",
- "loc_data": "{3104,3875,0,1,2}-{2912,9731,0,1,0}-{3256,3624,0,1,5}-{3308,3661,0,1,2}-"
+ "loc_data": "{2372,3401,0,1,0}-{3104,3875,0,1,2}-{2912,9731,0,1,0}-{3256,3624,0,1,5}-{3308,3661,0,1,2}-"
},
{
"npc_id": "4691",
- "loc_data": "{3110,3854,0,1,0}-"
+ "loc_data": "{2371,3398,0,1,0}-{3110,3854,0,1,0}-"
},
{
"npc_id": "4692",
- "loc_data": "{3116,3858,0,1,0}-"
+ "loc_data": "{2372,3395,0,1,0}-{3116,3858,0,1,0}-"
},
{
"npc_id": "4693",
- "loc_data": "{3094,3849,0,1,0}-{2912,9741,0,1,0}-{2906,9736,0,1,0}-"
+ "loc_data": "{2369,3394,0,1,0}-{3094,3849,0,1,0}-{2912,9741,0,1,0}-{2906,9736,0,1,0}-"
},
{
"npc_id": "4694",
@@ -7931,6 +8279,10 @@
"npc_id": "4856",
"loc_data": "{2732,3292,0,1,1}-"
},
+ {
+ "npc_id": "4871",
+ "loc_data": "{2782,3276,0,1,0}-"
+ },
{
"npc_id": "4872",
"loc_data": "{2740,3310,0,0,0}-"
@@ -7955,6 +8307,10 @@
"npc_id": "4887",
"loc_data": "{2738,3303,0,1,1}-{2723,3274,0,1,1}-"
},
+ {
+ "npc_id": "4891",
+ "loc_data": "{2768,3286,0,1,0}-{2777,3278,0,1,0}-{2783,3289,0,1,0}-{2784,3277,0,1,0}-{2768,3289,1,1,0}-{2780,3288,1,1,0}-"
+ },
{
"npc_id": "4895",
"loc_data": "{2718,3302,0,1,1}-"
@@ -8447,6 +8803,10 @@
"npc_id": "5260",
"loc_data": "{2665,2651,0,0,1}-{2667,2651,0,0,1}-"
},
+ {
+ "npc_id": "5277",
+ "loc_data": "{3264,2784,0,0,4}-{3264,2785,0,0,4}-"
+ },
{
"npc_id": "5291",
"loc_data": "{3300,2792,0,0,6}-{3282,2807,0,0,6}-{3285,2811,0,0,1}-{3283,2772,0,1,5}-{3281,2771,0,1,7}-{3283,2776,0,1,6}-{3278,2770,0,1,6}-"
@@ -8599,6 +8959,10 @@
"npc_id": "5358",
"loc_data": "{2874,2954,0,0,6}-"
},
+ {
+ "npc_id": "5359",
+ "loc_data": "{2693,5065,0,1,0}-{2693,5089,0,1,0}-{2704,5091,0,1,0}-{2710,5095,0,1,0}-{2712,5076,0,1,0}-{2714,5108,0,1,0}-{2716,5092,0,1,0}-{2719,5071,0,1,0}-{2722,5061,0,1,0}-{2732,5087,0,1,0}-{2739,5078,0,1,0}-{2740,5104,0,1,0}-{2747,5083,0,1,0}-{2627,5093,0,1,0}-{2629,5061,0,1,0}-{2638,5090,0,1,0}-{2651,5105,0,1,0}-{2654,5079,0,1,0}-{2663,5116,0,1,0}-{2683,5059,0,1,0}-{2685,5111,0,1,0}-"
+ },
{
"npc_id": "5361",
"loc_data": "{3176,5543,0,1,3}-{3191,5542,0,1,4}-{3175,5543,0,1,2}-{3178,5541,0,1,2}-{3187,5542,0,1,3}-{3192,5545,0,1,2}-{3192,5542,0,1,3}-{3179,5549,0,1,6}-{1757,5358,0,1,5}-{1760,5357,0,1,5}-{1755,5352,0,1,5}-{1751,5342,0,1,3}-{1745,5342,0,1,6}-{1739,5342,0,1,3}-{1737,5344,0,1,7}-{1739,5347,0,1,6}-{1740,5350,0,1,5}-{1739,5355,0,1,3}-{1747,5363,0,1,4}-{1749,5363,0,1,4}-{1743,5360,0,1,3}-{1739,5356,0,1,0}-"
@@ -9617,19 +9981,27 @@
},
{
"npc_id": "5932",
- "loc_data": "{3255,3442,0,0,0}-"
+ "loc_data": "{3253,3445,0,0,6}-"
},
{
"npc_id": "5933",
- "loc_data": "{3254,3443,0,0,0}-"
+ "loc_data": "{3254,3444,0,0,1}-"
},
{
"npc_id": "5934",
- "loc_data": "{3259,3443,0,0,0}-"
+ "loc_data": "{3256,3443,0,0,6}-"
},
{
"npc_id": "5935",
- "loc_data": "{3260,3442,0,0,0}-"
+ "loc_data": "{3257,3442,0,0,1}-"
+ },
+ {
+ "npc_id": "5936",
+ "loc_data": "{3266,3445,0,0,6}-"
+ },
+ {
+ "npc_id": "5937",
+ "loc_data": "{3267,3444,0,0,1}-"
},
{
"npc_id": "5938",
@@ -9873,11 +10245,11 @@
},
{
"npc_id": "6050",
- "loc_data": "{3252,3069,0,1,1}-{3242,3059,0,1,7}-{3235,3051,0,1,5}-{3248,3051,0,1,4}-{3257,3055,0,1,3}-{3263,3063,0,1,3}-{3253,3040,0,1,6}-{3243,3039,0,1,6}-{3254,3031,0,1,1}-{3243,3035,0,1,5}-{3232,3039,0,1,2}-{3230,3046,0,1,6}-{3219,3033,0,1,3}-{3219,3022,0,1,1}-{3227,3017,0,1,5}-{3235,3012,0,1,4}-{3243,3019,0,1,2}-{3251,3028,0,1,3}-{3259,3080,0,1,2}-{3246,3080,0,1,3}-{3244,3082,0,1,1}-{3235,3072,0,1,4}-{3267,3048,0,1,0}-{3291,3081,0,1,7}-{3298,3075,0,1,1}-{3284,3076,0,1,3}-{3266,3072,0,1,1}-"
+ "loc_data": "{3264,3008,0,1,0}-{3266,3008,0,1,0}-{3285,3066,0,1,0}-{3322,3032,0,1,0}-{3323,3055,0,1,0}-{3325,3010,0,1,0}-{3174,3010,0,1,0}-{3198,3061,0,1,0}-{3199,3016,0,1,0}-{3219,3125,0,1,0}-{3233,3075,0,1,0}-{3250,3126,0,1,0}-{3223,3011,0,1,0}-{3228,3060,0,1,0}-{3251,3059,0,1,0}-{3310,3076,0,1,0}-"
},
{
"npc_id": "6051",
- "loc_data": "{3292,3069,0,1,1}-{3285,3071,0,1,1}-{3273,3065,0,1,3}-{3288,3066,0,1,6}-{3281,3057,0,1,5}-{3294,3056,0,1,5}-{3305,3064,0,1,3}-{3279,3078,0,1,4}-{3312,3075,0,1,6}-{3306,3086,0,1,4}-{3272,3082,0,1,4}-"
+ "loc_data": "{3266,3010,0,1,0}-{3267,3068,0,1,0}-{3287,3065,0,1,0}-{3287,3067,0,1,0}-{3310,3070,0,1,0}-{3312,3068,0,1,0}-{3320,3054,0,1,0}-{3324,3013,0,1,0}-{3325,3033,0,1,0}-{3153,3047,0,1,0}-{3196,3063,0,1,0}-{3199,3036,0,1,0}-{3215,3092,0,1,0}-{3217,3124,0,1,0}-{3260,3077,0,1,0}-{3223,3035,0,1,0}-{3225,3011,0,1,0}-{3283,3084,0,1,0}-"
},
{
"npc_id": "6052",
@@ -10331,14 +10703,6 @@
"npc_id": "6283",
"loc_data": "{2877,5326,2,1,2}-{2857,5328,2,1,3}-{2861,5315,2,1,7}-"
},
- {
- "npc_id": "6339",
- "loc_data": "{2547,3277,0,0,0}-"
- },
- {
- "npc_id": "6345",
- "loc_data": "{2518,3275,0,1,0}-"
- },
{
"npc_id": "6346",
"loc_data": "{2799,3186,0,1,7}-{2797,3169,0,0,0}-{2793,3161,0,1,3}-"
@@ -10809,7 +11173,7 @@
},
{
"npc_id": "6779",
- "loc_data": "{3392,2759,0,1,2}-{3408,2763,0,1,7}-{3410,2786,0,1,2}-{3420,2778,0,1,6}-{3427,2792,0,1,6}-{3429,2802,0,1,4}-"
+ "loc_data": "{3337,2762,0,1,0}-{3340,2767,0,1,0}-{3345,2763,0,1,0}-{3350,2766,0,1,0}-{3352,2761,0,1,0}-{3356,2769,0,1,0}-{3358,2758,0,1,0}-{3359,2763,0,1,0}-{3365,2769,0,1,0}-{3368,2764,0,1,0}-{3375,2762,0,1,0}-{3392,2759,0,1,2}-{3408,2763,0,1,7}-{3410,2786,0,1,2}-{3420,2778,0,1,6}-{3427,2792,0,1,6}-{3429,2802,0,1,4}-"
},
{
"npc_id": "6780",
@@ -10837,7 +11201,7 @@
},
{
"npc_id": "6891",
- "loc_data": "{2598,3272,0,0,0}-"
+ "loc_data": "{2598,3272,0,1,0}-"
},
{
"npc_id": "6893",
@@ -11671,6 +12035,30 @@
"npc_id": "7780",
"loc_data": "{3358,2993,0,1,0}-"
},
+ {
+ "npc_id": "7786",
+ "loc_data": "{3348,9388,0,1,0}-{3350,9393,0,1,0}-{3350,9400,0,1,0}-{3350,9406,0,1,0}-{3351,9380,0,1,0}-{3352,9374,0,1,0}-{3354,9387,0,1,0}-{3358,9378,0,1,0}-{3358,9396,0,1,0}-{3358,9406,0,1,0}-{3365,9381,0,1,0}-{3365,9387,0,1,0}-{3365,9402,0,1,0}-{3369,9390,0,1,0}-{3350,9412,0,1,0}-{3351,9420,0,1,0}-{3356,9414,0,1,0}-{3358,9421,0,1,0}-{3364,9424,0,1,0}-{3365,9416,0,1,0}-"
+ },
+ {
+ "npc_id": "7787",
+ "loc_data": "{3301,4413,0,1,0}-{3302,4394,0,1,0}-{3304,4397,0,1,0}-{3306,4410,0,1,0}-{3307,4383,0,1,0}-{3307,4397,0,1,0}-{3308,4407,0,1,0}-{3310,4383,0,1,0}-{3310,4386,0,1,0}-{3310,4398,0,1,0}-{3311,4407,0,1,0}-{3312,4380,0,1,0}-{3313,4401,0,1,0}-{3314,4411,0,1,0}-{3316,4376,0,1,0}-{3316,4382,0,1,0}-{3316,4387,0,1,0}-{3316,4397,0,1,0}-{3316,4401,0,1,0}-{3316,4405,0,1,0}-{3317,4391,0,1,0}-{3318,4412,0,1,0}-{3319,4373,0,1,0}-{3319,4407,0,1,0}-{3321,4385,0,1,0}-{3321,4398,0,1,0}-{3322,4412,0,1,0}-{3323,4402,0,1,0}-{3324,4394,0,1,0}-{3324,4397,0,1,0}-{3325,4410,0,1,0}-"
+ },
+ {
+ "npc_id": "7801",
+ "loc_data": "{3283,4346,0,1,0}-{3308,4349,0,1,0}-{3293,4375,0,1,0}-{3303,4363,0,1,0}-"
+ },
+ {
+ "npc_id": "7802",
+ "loc_data": "{3288,4350,0,1,0}-{3296,4340,0,1,0}-{3288,4361,0,1,0}-{3310,4355,0,1,0}-"
+ },
+ {
+ "npc_id": "7803",
+ "loc_data": "{3297,4347,0,1,0}-{3315,4346,0,1,0}-{3282,4357,0,1,0}-{3303,4369,0,1,0}-"
+ },
+ {
+ "npc_id": "7804",
+ "loc_data": "{3279,4350,0,1,0}-{3294,4353,0,1,0}-{3294,4366,0,1,0}-"
+ },
{
"npc_id": "7823",
"loc_data": "{3161,9547,0,0,3}-{3164,9556,0,0,4}-{3162,9574,0,0,3}-{3198,9554,0,0,7}-{3198,9572,0,0,1}-{3215,9560,0,0,1}-{3216,9588,0,0,1}-"
@@ -11823,6 +12211,26 @@
"npc_id": "8275",
"loc_data": "{2869,2982,1,1,5}-"
},
+ {
+ "npc_id": "8312",
+ "loc_data": "{3016,9974,1,1,0}-{3021,9940,1,1,0}-{3023,9940,1,1,0}-{3024,9959,1,1,0}-{3027,9960,1,1,0}-{3043,9967,1,1,0}-{3023,9992,1,1,0}-{3016,10021,2,1,0}-{3028,10013,2,1,0}-{3029,10028,2,1,0}-{3038,10005,2,1,0}-{3044,10001,2,1,0}-{3045,9993,2,1,0}-{3045,9999,2,1,0}-{3047,10000,2,1,0}-{3052,10009,2,1,0}-{3054,10001,2,1,0}-{3056,10006,2,1,0}-{3032,10090,1,1,0}-{3040,10096,1,1,0}-{3048,10095,1,1,0}-"
+ },
+ {
+ "npc_id": "8316",
+ "loc_data": "{3017,9972,1,1,0}-{3025,9962,1,1,0}-{3030,9943,1,1,0}-{3033,9941,1,1,0}-{3034,9950,1,1,0}-{3035,9950,1,1,0}-{3036,9940,1,1,0}-{3038,9939,1,1,0}-{3045,9968,1,1,0}-{3058,9952,1,1,0}-{3063,9952,1,1,0}-{3025,9995,1,1,0}-{3027,10029,2,1,0}-{3051,10006,2,1,0}-{3052,10002,2,1,0}-{3054,10005,2,1,0}-{3027,10101,1,1,0}-{3039,10100,1,1,0}-{3054,10097,1,1,0}-"
+ },
+ {
+ "npc_id": "8320",
+ "loc_data": "{3014,9971,1,1,0}-{3016,9969,1,1,0}-{3028,9942,1,1,0}-{3029,9943,1,1,0}-{3030,9951,1,1,0}-{3033,9950,1,1,0}-{3045,9965,1,1,0}-{3061,9953,1,1,0}-{3062,9953,1,1,0}-{3030,9995,1,1,0}-{3016,10023,2,1,0}-{3029,10014,2,1,0}-{3029,10030,2,1,0}-{3036,10005,2,1,0}-{3042,9994,2,1,0}-{3047,10005,2,1,0}-{3049,10002,2,1,0}-{3053,9998,2,1,0}-{3031,10100,1,1,0}-{3044,10098,1,1,0}-{3049,10102,1,1,0}-"
+ },
+ {
+ "npc_id": "8324",
+ "loc_data": "{2911,3811,0,1,0}-{2911,3812,0,1,0}-{2911,3813,0,1,0}-{2925,3821,0,1,0}-{2925,3822,0,1,0}-{2925,3823,0,1,0}-{2929,3798,0,1,0}-{2936,3790,0,1,0}-{2936,3810,0,1,0}-{2939,3823,0,1,0}-{2949,3819,1,1,0}-{2949,3822,1,1,0}-{2955,3822,1,1,0}-{2957,3822,1,1,0}-{3016,9977,1,1,0}-{3021,9939,1,1,0}-{3024,9954,1,1,0}-{3025,9943,1,1,0}-{3025,9954,1,1,0}-{3026,9966,1,1,0}-{3032,9952,1,1,0}-{3039,9954,1,1,0}-{3044,9967,1,1,0}-{3044,9971,1,1,0}-{3057,9936,1,1,0}-{3059,9953,1,1,0}-{3041,9975,2,1,0}-{3043,9975,2,1,0}-{3045,9975,2,1,0}-{3016,10022,2,1,0}-{3017,10039,2,1,0}-{3027,10028,2,1,0}-{3029,10013,2,1,0}-{3036,10038,2,1,0}-{3037,10006,2,1,0}-{3041,10024,2,1,0}-{3043,10032,2,1,0}-{3057,10002,2,1,0}-{3058,10021,2,1,0}-{3065,10006,2,1,0}-{3027,10092,1,1,0}-{3035,10097,1,1,0}-{3051,10099,1,1,0}-{3427,5102,0,1,0}-{3428,5099,0,1,0}-{3428,5102,0,1,0}-{3430,5099,0,1,0}-"
+ },
+ {
+ "npc_id": "8328",
+ "loc_data": "{3055,10103,1,1,0}-"
+ },
{
"npc_id": "8349",
"loc_data": "{2589,5735,0,1,0}-{2589,5713,0,1,0}-{2610,5709,0,1,0}-{2613,5732,0,1,0}-"
@@ -11831,6 +12239,58 @@
"npc_id": "8358",
"loc_data": "{2601,5710,0,1,0}-{2603,5737,0,1,0}-"
},
+ {
+ "npc_id": "8380",
+ "loc_data": "{2907,3806,0,1,0}-"
+ },
+ {
+ "npc_id": "8381",
+ "loc_data": "{2910,3805,0,1,0}-"
+ },
+ {
+ "npc_id": "8382",
+ "loc_data": "{2912,3812,0,1,0}-{2923,3823,0,1,0}-"
+ },
+ {
+ "npc_id": "8383",
+ "loc_data": "{2908,3809,0,1,0}-{2919,3823,0,1,0}-"
+ },
+ {
+ "npc_id": "8384",
+ "loc_data": "{2922,3827,0,1,0}-"
+ },
+ {
+ "npc_id": "8385",
+ "loc_data": "{2924,3825,0,1,0}-"
+ },
+ {
+ "npc_id": "8386",
+ "loc_data": "{2921,3824,0,1,0}-"
+ },
+ {
+ "npc_id": "8387",
+ "loc_data": "{2934,3786,0,1,0}-"
+ },
+ {
+ "npc_id": "8388",
+ "loc_data": "{2935,3784,0,1,0}-{2940,3827,0,1,0}-"
+ },
+ {
+ "npc_id": "8389",
+ "loc_data": "{2937,3785,0,1,0}-"
+ },
+ {
+ "npc_id": "8390",
+ "loc_data": "{2935,3781,0,1,0}-{2939,3829,0,1,0}-"
+ },
+ {
+ "npc_id": "8391",
+ "loc_data": "{2937,3780,0,1,0}-{2940,3833,0,1,0}-"
+ },
+ {
+ "npc_id": "8392",
+ "loc_data": "{2938,3782,0,1,0}-{2938,3831,0,1,0}-"
+ },
{
"npc_id": "8536",
"loc_data": "{2654,5600,0,1,3}-{2650,5600,0,0,3}-{2662,5593,0,0,3}-{2653,5590,0,0,3}-{2644,5592,0,0,3}-{2644,5601,0,0,3}-{2654,5604,0,0,3}-{2663,5606,0,0,3}-{2670,5597,0,0,3}-{2657,5589,0,0,3}-"
diff --git a/Server/data/configs/object_configs.json b/Server/data/configs/object_configs.json
index 66e83f536..54f50f614 100644
--- a/Server/data/configs/object_configs.json
+++ b/Server/data/configs/object_configs.json
@@ -16324,7 +16324,7 @@
"ids": "11629"
},
{
- "examine": "South to Falador :: West to Taverley :: East to Varrock.",
+ "examine": "This tells you which way is which.",
"ids": "11630,11631,11632,11633"
},
{
diff --git a/Server/data/configs/shops.json b/Server/data/configs/shops.json
index 714e32a73..d1c888651 100644
--- a/Server/data/configs/shops.json
+++ b/Server/data/configs/shops.json
@@ -213,7 +213,7 @@
"general_store": "true",
"id": "25",
"title": "Lumbridge General Store",
- "stock": "{1931,30,100}-{1935,30,100}-{1735,10,100}-{1925,10,100}-{1923,10,100}-{1887,10,100}-{590,10,100}-{1755,10,100}-{2347,10,100}-{550,10,100}-{9003,10,100}"
+ "stock": "{1931,30,100}-{1935,30,100}-{1735,10,100}-{1925,10,100}-{1923,10,100}-{1887,10,100}-{590,10,100}-{1755,10,100}-{2347,10,100}-{550,10,100}-{9003,10,100}-{1939,1000,1}"
},
{
"npcs": "4716",
@@ -564,7 +564,7 @@
"general_store": "false",
"id": "65",
"title": "Dodgy Mikes Second-hand Clothing",
- "stock": "{7114,10,100}"
+ "stock": "{7114,10,100}-{7122,10,100}-{7128,10,100}-{7134,10,100}-{7110,10,100}-{7126,10,100}-{7132,10,100}-{7138,10,100}-{7116,10,100}-{7124,10,100}-{7130,10,100}-{7112,10,100}-{7136,10,100}"
},
{
"npcs": "2161",
@@ -1599,7 +1599,7 @@
"general_store": "false",
"id": "181",
"title": "MoonClan Fine Clothes",
- "stock": "{9068,10,100}-{9069,10,100}-{9070,10,100}-{9071,10,100}-{9072,10,100}-{9073,10,100}-{9074,10,100}-{1733,50,100}-{1734,500,100}"
+ "stock": "{9068,10,100}-{9069,10,100}-{9070,10,100}-{9071,10,100}-{9072,10,100}-{9073,10,100}-{9074,10,100}-{1733,50,100}-{1734,500,100}-{9084,10,100}-{9096,10,100}-{9097,10,100}-{9098,10,100}-{9099,10,100}-{9100,10,100}-{9101,10,100}-{9102,10,100}-{9104,10,100}"
},
{
"npcs": "",
@@ -2177,5 +2177,23 @@
"id": "255",
"title": "Castle Wars Ticket Exchange",
"stock": "{4068,1,100}-{4069,1,100}-{4070,1,100}-{4071,1,100}-{4072,1,100}-{4503,1,100}-{4504,1,100}-{4505,1,100}-{4506,1,100}-{4507,1,100}-{4508,1,100}-{4509,1,100}-{4510,1,100}-{4511,1,100}-{4512,1,100}-{4513,1,100}-{4514,1,100}-{4515,1,100}-{4516,1,100}"
+ },
+ {
+ "npcs": "5111",
+ "high_alch": "0",
+ "currency": "995",
+ "general_store": "false",
+ "id": "256",
+ "title": "Leon's Prototype Crossbow",
+ "stock": "{10156,2,100}"
+ },
+ {
+ "npcs": "2039",
+ "high_alch": "0",
+ "currency": "995",
+ "general_store": "false",
+ "id": "256",
+ "title": "Uglug's Stuffsies",
+ "stock": "{4844,100,10}-{10927,0,100}-{2862,100,100}-{1777,10,200}-{2876,0,500}-{2878,10,100}-{4850,0,100}-{946,5,100}-{4773,0,1000}-{4778,0,1000}-{4783,0,1000}-{4788,0,1500}-{4793,0,2000}-{4798,0,3000}-{4803,0,4000}-{4827,0,2000}"
}
]
\ No newline at end of file
diff --git a/Server/data/configs/xteas.json b/Server/data/configs/xteas.json
index 69528883f..5b8de21a7 100644
--- a/Server/data/configs/xteas.json
+++ b/Server/data/configs/xteas.json
@@ -1,17 +1,5 @@
{
"xteas": [
- {
- "regionId": "6230",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6231",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6232",
- "keys": "0,0,0,0"
- },
{
"regionId": "6234",
"keys": "-1591922206,-1429764510,-1087339341,1592935185"
@@ -28,18 +16,6 @@
"regionId": "6483",
"keys": "14881828,-6662814,58238456,146761213"
},
- {
- "regionId": "6484",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6485",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6486",
- "keys": "0,0,0,0"
- },
{
"regionId": "6487",
"keys": "-844708758,693908396,-1724237422,-2131620302"
@@ -64,50 +40,10 @@
"regionId": "6726",
"keys": "-3492110,65044555,1450623668,-483811536"
},
- {
- "regionId": "6732",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6733",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6734",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6735",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6736",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6737",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6738",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6739",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6740",
- "keys": "0,0,0,0"
- },
{
"regionId": "6741",
"keys": "-1634995791,710519356,-47126463,-1180416882"
},
- {
- "regionId": "6742",
- "keys": "0,0,0,0"
- },
{
"regionId": "6743",
"keys": "-1239303400,-1604922847,-1532369005,982307785"
@@ -120,38 +56,14 @@
"regionId": "6745",
"keys": "365190378,-1767339898,2011432030,276148826"
},
- {
- "regionId": "6746",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6979",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6980",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6981",
- "keys": "0,0,0,0"
- },
{
"regionId": "6985",
"keys": "1193572731,-1288765743,-386862979,351599890"
},
- {
- "regionId": "6988",
- "keys": "0,0,0,0"
- },
{
"regionId": "6989",
"keys": "-891749173,-113432144,-1228601828,695082558"
},
- {
- "regionId": "6990",
- "keys": "0,0,0,0"
- },
{
"regionId": "6991",
"keys": "-1448188175,626198836,1985989165,-1062391664"
@@ -172,46 +84,14 @@
"regionId": "6995",
"keys": "-1227889203,-199624313,2143494494,531356102"
},
- {
- "regionId": "6996",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6997",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6998",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "6999",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7000",
- "keys": "0,0,0,0"
- },
{
"regionId": "7001",
"keys": "170738852,2045755396,-1580637869,-1933392334"
},
- {
- "regionId": "7002",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7235",
- "keys": "0,0,0,0"
- },
{
"regionId": "7236",
"keys": "570290255,-1513898184,-1269691884,782850050"
},
- {
- "regionId": "7237",
- "keys": "0,0,0,0"
- },
{
"regionId": "7238",
"keys": "-853120516,1697831503,-12188711,770411534"
@@ -220,14 +100,6 @@
"regionId": "7244",
"keys": "796665731,1335649913,758227393,585095755"
},
- {
- "regionId": "7245",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7246",
- "keys": "0,0,0,0"
- },
{
"regionId": "7247",
"keys": "-122734679,-1029771956,1633683499,846700218"
@@ -244,30 +116,10 @@
"regionId": "7250",
"keys": "497663526,-1258315657,-785166329,-999527877"
},
- {
- "regionId": "7251",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7252",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7490",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7491",
- "keys": "0,0,0,0"
- },
{
"regionId": "7492",
"keys": "417150556,1135530200,2139696777,-742314409"
},
- {
- "regionId": "7493",
- "keys": "0,0,0,0"
- },
{
"regionId": "7494",
"keys": "-1653750072,103282771,384178856,1122166637"
@@ -276,14 +128,6 @@
"regionId": "7496",
"keys": "-1890766195,-149577199,919306397,-954784877"
},
- {
- "regionId": "7497",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7498",
- "keys": "0,0,0,0"
- },
{
"regionId": "7499",
"keys": "-2007696984,-1215288615,-1572330641,-2125382604"
@@ -312,10 +156,6 @@
"regionId": "7505",
"keys": "-1177354806,-1864641630,23736540,750869235"
},
- {
- "regionId": "7506",
- "keys": "0,0,0,0"
- },
{
"regionId": "7507",
"keys": "-1476331852,1093075535,-2003580146,734573751"
@@ -332,6 +172,10 @@
"regionId": "7510",
"keys": "2073894230,-553352720,274325814,-1461052837"
},
+ {
+ "regionId": "7511",
+ "keys": "14881828,-6662814,58238456,146761213"
+ },
{
"regionId": "7513",
"keys": "1066375195,548376104,-1771348528,1096433429"
@@ -340,10 +184,6 @@
"regionId": "7745",
"keys": "1212560091,-662504525,-1213494614,-1245629284"
},
- {
- "regionId": "7747",
- "keys": "0,0,0,0"
- },
{
"regionId": "7748",
"keys": "-850453392,-249468744,1635462867,100471784"
@@ -352,10 +192,6 @@
"regionId": "7749",
"keys": "369356966,-1038198212,282112206,802717032"
},
- {
- "regionId": "7750",
- "keys": "0,0,0,0"
- },
{
"regionId": "7752",
"keys": "1894158557,20416613,-1434347651,-1209846311"
@@ -392,46 +228,14 @@
"regionId": "7760",
"keys": "2042192998,743878512,-1804236758,-1160501924"
},
- {
- "regionId": "7761",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7762",
- "keys": "0,0,0,0"
- },
{
"regionId": "7763",
"keys": "14881828,-6662814,58238456,146761213"
},
- {
- "regionId": "7764",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7765",
- "keys": "0,0,0,0"
- },
{
"regionId": "7769",
"keys": "560280774,910095015,871073102,263015376"
},
- {
- "regionId": "7995",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7996",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7997",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "7998",
- "keys": "0,0,0,0"
- },
{
"regionId": "8001",
"keys": "690512367,1578449236,-1443501555,546253393"
@@ -440,10 +244,6 @@
"regionId": "8002",
"keys": "1597309277,469931771,1619035792,663887748"
},
- {
- "regionId": "8003",
- "keys": "0,0,0,0"
- },
{
"regionId": "8004",
"keys": "609107948,-755432209,-723012522,1175820911"
@@ -488,26 +288,14 @@
"regionId": "8015",
"keys": "305015825,-634097708,865786116,-1850059578"
},
- {
- "regionId": "8016",
- "keys": "0,0,0,0"
- },
{
"regionId": "8017",
"keys": "959968310,-363819769,-1402232275,-1678358818"
},
- {
- "regionId": "8018",
- "keys": "0,0,0,0"
- },
{
"regionId": "8019",
"keys": "-1512999074,1064201012,2143076355,-1937376726"
},
- {
- "regionId": "8020",
- "keys": "-955989323,1284433026,690014510,2145912092"
- },
{
"regionId": "8021",
"keys": "-297039986,-1011877372,-1763869337,-900998253"
@@ -528,6 +316,14 @@
"regionId": "8241",
"keys": "-320813650,-1654452876,-352291520,-290946896"
},
+ {
+ "regionId": "8242",
+ "keys": "347990635,-1017326068,-1600504696,1565374916"
+ },
+ {
+ "regionId": "8243",
+ "keys": "-107199068,-843304946,910528064,-626516712"
+ },
{
"regionId": "8251",
"keys": "1142567601,1650263019,49659607,-899246535"
@@ -580,10 +376,6 @@
"regionId": "8267",
"keys": "-474856962,-1295973639,789657650,-1769058462"
},
- {
- "regionId": "8268",
- "keys": "0,0,0,0"
- },
{
"regionId": "8269",
"keys": "-497435078,2028988145,486156819,-1178938803"
@@ -604,22 +396,6 @@
"regionId": "8273",
"keys": "978831670,664328414,1943273766,-1823800887"
},
- {
- "regionId": "8274",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "8275",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "8276",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "8277",
- "keys": "0,0,0,0"
- },
{
"regionId": "8280",
"keys": "-1615836970,1947387796,2141672540,-333423400"
@@ -644,10 +420,6 @@
"regionId": "8499",
"keys": "1158999293,2131770333,-861122128,1149793504"
},
- {
- "regionId": "8500",
- "keys": "0,0,0,0"
- },
{
"regionId": "8506",
"keys": "-1227747958,1491928866,1293676120,2065870654"
@@ -724,30 +496,14 @@
"regionId": "8530",
"keys": "-1466808210,962381183,-1581244207,-457271917"
},
- {
- "regionId": "8531",
- "keys": "0,0,0,0"
- },
{
"regionId": "8532",
"keys": "1553260654,1996107908,-2124357970,1441816370"
},
- {
- "regionId": "8533",
- "keys": "0,0,0,0"
- },
{
"regionId": "8534",
"keys": "1712031920,299813553,484205392,-939092911"
},
- {
- "regionId": "8545",
- "keys": "1322297584,105544016,-1148309508,-574484176"
- },
- {
- "regionId": "8751",
- "keys": "0,0,0,0"
- },
{
"regionId": "8752",
"keys": "238354066,1687454525,1494747147,1911377137"
@@ -764,22 +520,6 @@
"regionId": "8755",
"keys": "-1165798584,772244190,-402783978,541755309"
},
- {
- "regionId": "8756",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "8757",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "8759",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "8760",
- "keys": "0,0,0,0"
- },
{
"regionId": "8761",
"keys": "1760753095,-1427813077,266675077,-255782653"
@@ -804,6 +544,14 @@
"regionId": "8766",
"keys": "1244410566,-1397143615,-1848205088,-1435723900"
},
+ {
+ "regionId": "8767",
+ "keys": "-368125809,-1805271492,-400403765,697149536"
+ },
+ {
+ "regionId": "8768",
+ "keys": "-517024281,-1363386333,227729042,-1950025355"
+ },
{
"regionId": "8769",
"keys": "2044453226,-2064473213,1306128347,784973817"
@@ -840,10 +588,6 @@
"regionId": "8779",
"keys": "-1680845199,-1149954104,-1177525481,-576614197"
},
- {
- "regionId": "8780",
- "keys": "0,0,0,0"
- },
{
"regionId": "8781",
"keys": "-2133721491,843228961,1706232103,-934369964"
@@ -864,34 +608,14 @@
"regionId": "8785",
"keys": "1543774040,-487517297,-1630373503,102220753"
},
- {
- "regionId": "8786",
- "keys": "0,0,0,0"
- },
{
"regionId": "8787",
"keys": "1791798624,-1711313280,166719404,-1487207913"
},
- {
- "regionId": "8788",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "8789",
- "keys": "0,0,0,0"
- },
{
"regionId": "8790",
"keys": "230755787,-1139640838,-21592892,49661984"
},
- {
- "regionId": "9006",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9007",
- "keys": "0,0,0,0"
- },
{
"regionId": "9008",
"keys": "2084752401,-1394447522,2084945842,1474596929"
@@ -912,18 +636,6 @@
"regionId": "9012",
"keys": "1204696185,-486414605,-1016110497,134649113"
},
- {
- "regionId": "9013",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9014",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9015",
- "keys": "0,0,0,0"
- },
{
"regionId": "9016",
"keys": "-1274221467,730617286,-1448054569,427043430"
@@ -948,6 +660,14 @@
"regionId": "9021",
"keys": "-665917952,-432697139,-602494723,-2097936281"
},
+ {
+ "regionId": "9022",
+ "keys": "1910381678,352194237,836248,347278834"
+ },
+ {
+ "regionId": "9024",
+ "keys": "-785865296,-520648067,-1207176889,-441641818"
+ },
{
"regionId": "9025",
"keys": "1812159970,1795526437,1172074678,289074337"
@@ -976,34 +696,10 @@
"regionId": "9035",
"keys": "1525685385,1372975156,-2010144170,-1594192581"
},
- {
- "regionId": "9036",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9037",
- "keys": "0,0,0,0"
- },
{
"regionId": "9038",
"keys": "-473165893,2110570897,-1726275929,806180444"
},
- {
- "regionId": "9040",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9041",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9042",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9043",
- "keys": "0,0,0,0"
- },
{
"regionId": "9044",
"keys": "1541894861,-2145670115,-138793212,-921922364"
@@ -1028,18 +724,6 @@
"regionId": "9050",
"keys": "-1725663967,1678055280,1100896300,706957861"
},
- {
- "regionId": "9109",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9110",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9111",
- "keys": "0,0,0,0"
- },
{
"regionId": "9113",
"keys": "-570298090,-864625293,-668545435,8389096"
@@ -1048,18 +732,6 @@
"regionId": "9114",
"keys": "-962790446,-1706163576,82969599,310163719"
},
- {
- "regionId": "9120",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9121",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9122",
- "keys": "0,0,0,0"
- },
{
"regionId": "9262",
"keys": "-1327237404,-257519940,-1398355053,-970581711"
@@ -1125,21 +797,21 @@
"keys": "272801923,1797149371,-131972865,1265002008"
},
{
- "regionId": "9283",
- "keys": "0,0,0,0"
+ "regionId": "9278",
+ "keys": "-1782196006,1021278723,887209787,-1016997291"
},
{
- "regionId": "9284",
- "keys": "0,0,0,0"
+ "regionId": "9279",
+ "keys": "-841578670,318269186,-353500843,-932268603"
+ },
+ {
+ "regionId": "9280",
+ "keys": "727010382,181752242,1033156911,1262921484"
},
{
"regionId": "9285",
"keys": "1742241898,-1564206342,-460725435,1614032789"
},
- {
- "regionId": "9286",
- "keys": "0,0,0,0"
- },
{
"regionId": "9287",
"keys": "-272431907,639665846,-1633276264,1645937141"
@@ -1156,14 +828,6 @@
"regionId": "9290",
"keys": "702687456,43635181,-1983533012,-319469910"
},
- {
- "regionId": "9291",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9292",
- "keys": "0,0,0,0"
- },
{
"regionId": "9293",
"keys": "-810831340,-1857428683,-892017185,249052010"
@@ -1176,30 +840,14 @@
"regionId": "9295",
"keys": "224580924,-858933614,-432602901,-1433710083"
},
- {
- "regionId": "9296",
- "keys": "0,0,0,0"
- },
{
"regionId": "9297",
"keys": "-1667110403,-655319123,-2124588845,-262291671"
},
- {
- "regionId": "9298",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9299",
- "keys": "0,0,0,0"
- },
{
"regionId": "9300",
"keys": "644587156,-605721698,681391959,1688865408"
},
- {
- "regionId": "9301",
- "keys": "0,0,0,0"
- },
{
"regionId": "9304",
"keys": "14881828,-6662814,58238456,146761213"
@@ -1216,10 +864,6 @@
"regionId": "9362",
"keys": "-253025041,376209206,1663580032,1115549308"
},
- {
- "regionId": "9363",
- "keys": "0,0,0,0"
- },
{
"regionId": "9364",
"keys": "1350964684,-1141243546,-158288919,1853454502"
@@ -1232,10 +876,6 @@
"regionId": "9366",
"keys": "-1691974727,-1591730841,1506117200,822346809"
},
- {
- "regionId": "9367",
- "keys": "0,0,0,0"
- },
{
"regionId": "9368",
"keys": "-911562498,-1433720091,257702084,1652121807"
@@ -1256,30 +896,10 @@
"regionId": "9372",
"keys": "1005996231,-569567890,-1578994771,-1136932414"
},
- {
- "regionId": "9376",
- "keys": "0,0,0,0"
- },
{
"regionId": "9377",
"keys": "-1671261866,-750153286,1731026368,-1501269926"
},
- {
- "regionId": "9378",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9515",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9516",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9517",
- "keys": "0,0,0,0"
- },
{
"regionId": "9518",
"keys": "-557639005,398566091,-133936467,-850662847"
@@ -1344,6 +964,14 @@
"regionId": "9533",
"keys": "1393307887,646464303,-1582337843,2048412434"
},
+ {
+ "regionId": "9534",
+ "keys": "-2072244370,1114739695,-1096608867,-1932870993"
+ },
+ {
+ "regionId": "9535",
+ "keys": "-1107428972,531677783,-1575581308,1343828898"
+ },
{
"regionId": "9536",
"keys": "679931979,-1660801436,-1184954844,-1006016912"
@@ -1360,10 +988,6 @@
"regionId": "9541",
"keys": "1352006827,1096305726,805420370,-1426885864"
},
- {
- "regionId": "9542",
- "keys": "0,0,0,0"
- },
{
"regionId": "9543",
"keys": "1852273964,-104833248,-2069080639,-188650169"
@@ -1384,10 +1008,6 @@
"regionId": "9547",
"keys": "-1998382641,30700550,1548517068,-855708219"
},
- {
- "regionId": "9548",
- "keys": "0,0,0,0"
- },
{
"regionId": "9549",
"keys": "-1648136735,1402264941,639592027,348907048"
@@ -1408,22 +1028,10 @@
"regionId": "9553",
"keys": "-1873675730,-1930195432,759400017,-1395479956"
},
- {
- "regionId": "9554",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9555",
- "keys": "0,0,0,0"
- },
{
"regionId": "9556",
"keys": "-300312374,-1152515846,-863452271,-1500855067"
},
- {
- "regionId": "9557",
- "keys": "0,0,0,0"
- },
{
"regionId": "9558",
"keys": "1245928204,-1892089406,-1321168410,-1108146443"
@@ -1440,10 +1048,6 @@
"regionId": "9562",
"keys": "-1047298777,1197811918,663745433,-2098029011"
},
- {
- "regionId": "9619",
- "keys": "0,0,0,0"
- },
{
"regionId": "9620",
"keys": "1941157140,-1630547377,-1114648519,87057467"
@@ -1472,18 +1076,6 @@
"regionId": "9626",
"keys": "-1411729186,1049744836,-1608961973,-1681145313"
},
- {
- "regionId": "9627",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9629",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9630",
- "keys": "0,0,0,0"
- },
{
"regionId": "9631",
"keys": "1266963397,269916041,734658458,725243574"
@@ -1492,18 +1084,6 @@
"regionId": "9632",
"keys": "1023657558,-2001662423,-46679010,2064543607"
},
- {
- "regionId": "9633",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9634",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9771",
- "keys": "0,0,0,0"
- },
{
"regionId": "9772",
"keys": "-1742165439,-1273697376,2055229018,901215817"
@@ -1576,6 +1156,10 @@
"regionId": "9789",
"keys": "-620749099,528872615,1976629038,667155751"
},
+ {
+ "regionId": "9791",
+ "keys": "-2105683947,1913166182,-1697741730,-25818496"
+ },
{
"regionId": "9792",
"keys": "1500471532,1729075639,-304984137,1117230148"
@@ -1584,10 +1168,6 @@
"regionId": "9794",
"keys": "1788083183,2097372895,1633476682,-589223611"
},
- {
- "regionId": "9795",
- "keys": "0,0,0,0"
- },
{
"regionId": "9796",
"keys": "517509106,-2019799796,1066150754,-676371780"
@@ -1596,10 +1176,6 @@
"regionId": "9797",
"keys": "672333395,-284721288,262558790,-344798491"
},
- {
- "regionId": "9798",
- "keys": "0,0,0,0"
- },
{
"regionId": "9799",
"keys": "181886191,758691911,810524169,1456599388"
@@ -1632,10 +1208,6 @@
"regionId": "9806",
"keys": "368995667,940146211,957819918,-761335591"
},
- {
- "regionId": "9807",
- "keys": "0,0,0,0"
- },
{
"regionId": "9808",
"keys": "308766586,-214665927,-1255727041,-1034716346"
@@ -1656,10 +1228,6 @@
"regionId": "9812",
"keys": "50571970,-1762921782,-1667424270,524742325"
},
- {
- "regionId": "9813",
- "keys": "0,0,0,0"
- },
{
"regionId": "9814",
"keys": "-34428628,1940609264,-1638642159,-295486604"
@@ -1704,38 +1272,14 @@
"regionId": "9883",
"keys": "472234846,1198089044,500187071,239458328"
},
- {
- "regionId": "9884",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9885",
- "keys": "0,0,0,0"
- },
{
"regionId": "9886",
"keys": "1515209815,-1457146379,-146402808,-1454274033"
},
- {
- "regionId": "9887",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9888",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "9889",
- "keys": "0,0,0,0"
- },
{
"regionId": "10027",
"keys": "1491811841,1724263915,-1397066186,1733646819"
},
- {
- "regionId": "10028",
- "keys": "0,0,0,0"
- },
{
"regionId": "10029",
"keys": "203145796,-773666188,-569831878,-1510455793"
@@ -1760,10 +1304,6 @@
"regionId": "10034",
"keys": "-1435464304,-836439389,-788586899,1579582706"
},
- {
- "regionId": "10035",
- "keys": "0,0,0,0"
- },
{
"regionId": "10036",
"keys": "689954852,-1377739344,-847433475,-1883927289"
@@ -1804,26 +1344,18 @@
"regionId": "10045",
"keys": "-1429464298,1580360509,-1936477065,-337842786"
},
+ {
+ "regionId": "10046",
+ "keys": "1579643227,-1819574910,1035634488,-1469908551"
+ },
+ {
+ "regionId": "10047",
+ "keys": "1248461784,913422340,-928862457,-1858877253"
+ },
{
"regionId": "10048",
"keys": "-1457016886,349941309,-400267403,-1711584223"
},
- {
- "regionId": "10051",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10052",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10053",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10054",
- "keys": "0,0,0,0"
- },
{
"regionId": "10055",
"keys": "-813287484,-1417786621,-1794468339,578992617"
@@ -1844,10 +1376,6 @@
"regionId": "10059",
"keys": "1185163869,-1047826729,-1461057337,139139001"
},
- {
- "regionId": "10060",
- "keys": "0,0,0,0"
- },
{
"regionId": "10061",
"keys": "1683880127,1851133137,-567572662,-1477799312"
@@ -1856,10 +1384,6 @@
"regionId": "10062",
"keys": "2024717410,-1807032706,1106507805,1426160484"
},
- {
- "regionId": "10063",
- "keys": "0,0,0,0"
- },
{
"regionId": "10064",
"keys": "1978019309,1433546802,-1989346624,-1611361553"
@@ -1872,10 +1396,6 @@
"regionId": "10066",
"keys": "105954939,-1741244981,-1491777272,207112205"
},
- {
- "regionId": "10067",
- "keys": "0,0,0,0"
- },
{
"regionId": "10068",
"keys": "-452138979,-1929816521,364996963,-1315825295"
@@ -1952,26 +1472,14 @@
"regionId": "10140",
"keys": "-104825447,-1092637213,-105814713,-2129567531"
},
- {
- "regionId": "10141",
- "keys": "0,0,0,0"
- },
{
"regionId": "10142",
"keys": "1872120942,-765842959,449655176,-1168971827"
},
- {
- "regionId": "10143",
- "keys": "0,0,0,0"
- },
{
"regionId": "10144",
"keys": "265530509,2033515489,-2022406749,-591072091"
},
- {
- "regionId": "10145",
- "keys": "0,0,0,0"
- },
{
"regionId": "10280",
"keys": "-1245893544,-118079793,-1624599660,-626968532"
@@ -1988,10 +1496,6 @@
"regionId": "10283",
"keys": "-2133080221,1327669620,173304076,-151662318"
},
- {
- "regionId": "10284",
- "keys": "0,0,0,0"
- },
{
"regionId": "10285",
"keys": "-1317120534,1321149083,-1700628824,1028203235"
@@ -2016,10 +1520,6 @@
"regionId": "10290",
"keys": "-587752684,-318735232,336724431,-1931735346"
},
- {
- "regionId": "10291",
- "keys": "0,0,0,0"
- },
{
"regionId": "10292",
"keys": "933507835,1135929795,-1932059890,1492191263"
@@ -2108,10 +1608,6 @@
"regionId": "10315",
"keys": "-1034094191,1810212216,618808107,1905492210"
},
- {
- "regionId": "10316",
- "keys": "0,0,0,0"
- },
{
"regionId": "10317",
"keys": "216403117,1910251124,144162918,224240414"
@@ -2120,14 +1616,6 @@
"regionId": "10318",
"keys": "1053988597,-2121917140,1730755899,1549334321"
},
- {
- "regionId": "10319",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10320",
- "keys": "0,0,0,0"
- },
{
"regionId": "10321",
"keys": "1996825886,-1552231723,1721080145,-869420516"
@@ -2136,18 +1624,10 @@
"regionId": "10322",
"keys": "1773602876,-1410394076,-239593243,148286798"
},
- {
- "regionId": "10323",
- "keys": "0,0,0,0"
- },
{
"regionId": "10324",
"keys": "-1670587478,-401532783,1705875521,995683837"
},
- {
- "regionId": "10325",
- "keys": "0,0,0,0"
- },
{
"regionId": "10326",
"keys": "-375687378,472100528,-288941184,523344380"
@@ -2208,26 +1688,10 @@
"regionId": "10396",
"keys": "-1878072140,1648991920,1054624070,333445417"
},
- {
- "regionId": "10397",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10398",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10399",
- "keys": "0,0,0,0"
- },
{
"regionId": "10400",
"keys": "-1656816922,1318311812,-811481661,1625916625"
},
- {
- "regionId": "10401",
- "keys": "0,0,0,0"
- },
{
"regionId": "10536",
"keys": "349537117,1202512092,-698870718,-2083455397"
@@ -2272,10 +1736,6 @@
"regionId": "10546",
"keys": "192659093,263441429,29086759,670094037"
},
- {
- "regionId": "10547",
- "keys": "0,0,0,0"
- },
{
"regionId": "10548",
"keys": "-1157394711,-1306553144,2105373539,798383108"
@@ -2332,10 +1792,6 @@
"regionId": "10564",
"keys": "1279522133,380240348,604239496,1759916207"
},
- {
- "regionId": "10565",
- "keys": "0,0,0,0"
- },
{
"regionId": "10566",
"keys": "221004409,1368318650,-1237341956,25411913"
@@ -2364,10 +1820,6 @@
"regionId": "10572",
"keys": "-1375061166,-1411427241,-294467489,-2106748278"
},
- {
- "regionId": "10573",
- "keys": "0,0,0,0"
- },
{
"regionId": "10574",
"keys": "-1609693854,991245740,148787249,-1011766477"
@@ -2376,10 +1828,6 @@
"regionId": "10575",
"keys": "434036980,-780702800,-1042242727,-354464628"
},
- {
- "regionId": "10576",
- "keys": "0,0,0,0"
- },
{
"regionId": "10577",
"keys": "824897954,-1807466644,2079017570,1299975025"
@@ -2393,12 +1841,8 @@
"keys": "-123618550,684067223,486273630,-1103816964"
},
{
- "regionId": "10580",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10637",
- "keys": "0,0,0,0"
+ "regionId": "10583",
+ "keys": "14881828,-6662814,58238456,146761213"
},
{
"regionId": "10638",
@@ -2448,10 +1892,6 @@
"regionId": "10650",
"keys": "-908578223,-911827513,1137573080,-419444146"
},
- {
- "regionId": "10651",
- "keys": "0,0,0,0"
- },
{
"regionId": "10652",
"keys": "1580722385,609745227,1407021351,1098485033"
@@ -2460,22 +1900,6 @@
"regionId": "10653",
"keys": "570189753,-1700559836,2108215671,-701775893"
},
- {
- "regionId": "10654",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10655",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10656",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "10657",
- "keys": "0,0,0,0"
- },
{
"regionId": "10792",
"keys": "-125671574,254943715,1343095705,-1965171670"
@@ -2516,10 +1940,6 @@
"regionId": "10801",
"keys": "850125851,1199386038,-1494136472,-1487577933"
},
- {
- "regionId": "10802",
- "keys": "0,0,0,0"
- },
{
"regionId": "10803",
"keys": "-1028081880,964144306,174845257,1906118817"
@@ -2572,6 +1992,10 @@
"regionId": "10815",
"keys": "2102925673,1133406202,-1885710196,165240951"
},
+ {
+ "regionId": "10816",
+ "keys": "-1909517714,218137505,744896894,831968418"
+ },
{
"regionId": "10819",
"keys": "-904401587,-2054970579,55120674,-1889562804"
@@ -2612,10 +2036,6 @@
"regionId": "10828",
"keys": "1665018619,-1607107877,-1997272567,1342325223"
},
- {
- "regionId": "10829",
- "keys": "0,0,0,0"
- },
{
"regionId": "10830",
"keys": "-608096960,58771202,1174291927,-1613596249"
@@ -2636,18 +2056,10 @@
"regionId": "10834",
"keys": "-1640569486,-512141704,-1179536382,720004469"
},
- {
- "regionId": "10835",
- "keys": "0,0,0,0"
- },
{
"regionId": "10836",
"keys": "1637505449,619992365,-1935536269,-1526242295"
},
- {
- "regionId": "10837",
- "keys": "0,0,0,0"
- },
{
"regionId": "10838",
"keys": "1678881362,-952862831,-1804688659,-1247653912"
@@ -2744,10 +2156,6 @@
"regionId": "10911",
"keys": "948965123,-545528654,-459191491,-860302360"
},
- {
- "regionId": "10912",
- "keys": "0,0,0,0"
- },
{
"regionId": "11049",
"keys": "-621090199,-1004888612,-749707219,2052444337"
@@ -2872,30 +2280,14 @@
"regionId": "11083",
"keys": "1255503855,-674022312,-807132804,-1287799121"
},
- {
- "regionId": "11084",
- "keys": "0,0,0,0"
- },
{
"regionId": "11085",
"keys": "327229160,-1433790638,1944433240,234034136"
},
- {
- "regionId": "11086",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11087",
- "keys": "0,0,0,0"
- },
{
"regionId": "11088",
"keys": "-1943123304,1713176080,-1524844090,-445387865"
},
- {
- "regionId": "11089",
- "keys": "0,0,0,0"
- },
{
"regionId": "11090",
"keys": "2089067081,828176382,-1112393031,-1452165920"
@@ -2904,10 +2296,6 @@
"regionId": "11091",
"keys": "977844365,-245927723,99303766,-735341354"
},
- {
- "regionId": "11092",
- "keys": "0,0,0,0"
- },
{
"regionId": "11093",
"keys": "-379710910,-2088433559,1180928189,-54938349"
@@ -2972,14 +2360,6 @@
"regionId": "11158",
"keys": "160361538,733169435,1244326761,1681727551"
},
- {
- "regionId": "11159",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11160",
- "keys": "0,0,0,0"
- },
{
"regionId": "11161",
"keys": "-1713920755,1291269906,320754968,741637543"
@@ -3008,10 +2388,6 @@
"regionId": "11167",
"keys": "-1735216162,2141149053,57787230,-1263840909"
},
- {
- "regionId": "11168",
- "keys": "0,0,0,0"
- },
{
"regionId": "11305",
"keys": "-1429346525,-118378130,1002549662,1383588995"
@@ -3088,10 +2464,6 @@
"regionId": "11323",
"keys": "-1710808226,725482732,1863997544,5983834"
},
- {
- "regionId": "11324",
- "keys": "0,0,0,0"
- },
{
"regionId": "11326",
"keys": "1862093150,1696245244,1320714102,1241887579"
@@ -3108,30 +2480,14 @@
"regionId": "11332",
"keys": "-936631483,-1093055133,-161202591,-1476364681"
},
- {
- "regionId": "11333",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11334",
- "keys": "0,0,0,0"
- },
{
"regionId": "11335",
"keys": "-133492081,-915358326,-714649892,-2093709476"
},
- {
- "regionId": "11338",
- "keys": "0,0,0,0"
- },
{
"regionId": "11339",
"keys": "140118336,-1920268877,-1967576060,-1437209189"
},
- {
- "regionId": "11340",
- "keys": "0,0,0,0"
- },
{
"regionId": "11341",
"keys": "-1219163353,-1635920416,-2124217842,-1318908036"
@@ -3152,14 +2508,6 @@
"regionId": "11347",
"keys": "-122396964,-1996200666,-585000602,-863390951"
},
- {
- "regionId": "11348",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11349",
- "keys": "0,0,0,0"
- },
{
"regionId": "11350",
"keys": "-1365557009,-1350738529,-1074800707,-446118748"
@@ -3184,22 +2532,10 @@
"regionId": "11356",
"keys": "2033204014,1416145849,-1721330996,2134394884"
},
- {
- "regionId": "11405",
- "keys": "0,0,0,0"
- },
{
"regionId": "11406",
"keys": "375301159,353365492,-940259891,-223647771"
},
- {
- "regionId": "11407",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11408",
- "keys": "0,0,0,0"
- },
{
"regionId": "11409",
"keys": "1937092760,-1545935537,29954084,-1081016062"
@@ -3208,10 +2544,6 @@
"regionId": "11410",
"keys": "1509299526,-892391942,1485831814,1255407038"
},
- {
- "regionId": "11411",
- "keys": "0,0,0,0"
- },
{
"regionId": "11412",
"keys": "-1379772393,621580805,-316850307,1026773740"
@@ -3316,10 +2648,6 @@
"regionId": "11572",
"keys": "892185929,686162443,1793819023,-992991976"
},
- {
- "regionId": "11573",
- "keys": "0,0,0,0"
- },
{
"regionId": "11574",
"keys": "-1406155502,13961326,1071473330,1528558089"
@@ -3336,22 +2664,10 @@
"regionId": "11577",
"keys": "1283493672,1550135524,-1621670256,769418438"
},
- {
- "regionId": "11578",
- "keys": "0,0,0,0"
- },
{
"regionId": "11579",
"keys": "-719996638,-1831948234,494156672,1684753309"
},
- {
- "regionId": "11580",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11581",
- "keys": "0,0,0,0"
- },
{
"regionId": "11582",
"keys": "602331327,-1036793753,1702673112,-1107214996"
@@ -3376,18 +2692,10 @@
"regionId": "11589",
"keys": "39678032,469576041,-1878694956,-1720799345"
},
- {
- "regionId": "11590",
- "keys": "0,0,0,0"
- },
{
"regionId": "11591",
"keys": "1300749474,-912770362,-1665451776,480747745"
},
- {
- "regionId": "11592",
- "keys": "0,0,0,0"
- },
{
"regionId": "11593",
"keys": "14881828,-6662814,58238456,146761213"
@@ -3400,26 +2708,14 @@
"regionId": "11595",
"keys": "-1497259084,-1208341848,874209282,-1950133061"
},
- {
- "regionId": "11596",
- "keys": "0,0,0,0"
- },
{
"regionId": "11597",
"keys": "-824244627,-1750674106,-2032396270,-451550546"
},
- {
- "regionId": "11598",
- "keys": "0,0,0,0"
- },
{
"regionId": "11599",
"keys": "-1124938025,110281395,-1121479364,68953473"
},
- {
- "regionId": "11600",
- "keys": "0,0,0,0"
- },
{
"regionId": "11601",
"keys": "722657934,1495340205,-437272583,-1331954618"
@@ -3432,10 +2728,6 @@
"regionId": "11603",
"keys": "-254635141,-1757221941,-2072225761,-752948578"
},
- {
- "regionId": "11604",
- "keys": "0,0,0,0"
- },
{
"regionId": "11605",
"keys": "57037316,1119657363,2040370510,801474589"
@@ -3444,10 +2736,6 @@
"regionId": "11606",
"keys": "-1790275662,-1050505330,-1496410655,679769180"
},
- {
- "regionId": "11607",
- "keys": "0,0,0,0"
- },
{
"regionId": "11608",
"keys": "248039728,1861834308,1335200688,317723667"
@@ -3456,10 +2744,6 @@
"regionId": "11609",
"keys": "-1581925228,-215021003,-1695323698,-1853661356"
},
- {
- "regionId": "11610",
- "keys": "0,0,0,0"
- },
{
"regionId": "11612",
"keys": "-1751954695,954770889,-337304771,986015401"
@@ -3564,14 +2848,6 @@
"regionId": "11824",
"keys": "-1116727390,-659788658,307002260,354360287"
},
- {
- "regionId": "11825",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11826",
- "keys": "0,0,0,0"
- },
{
"regionId": "11827",
"keys": "379001889,1835230493,1861106702,338991847"
@@ -3632,42 +2908,10 @@
"regionId": "11844",
"keys": "46502425,-1301719099,-1597781617,1434487073"
},
- {
- "regionId": "11845",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11846",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11847",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11848",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11849",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11850",
- "keys": "0,0,0,0"
- },
{
"regionId": "11851",
"keys": "-516358140,791692293,-1663509747,1243508195"
},
- {
- "regionId": "11852",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11853",
- "keys": "0,0,0,0"
- },
{
"regionId": "11854",
"keys": "311566497,-486013229,1351929142,744327317"
@@ -3676,30 +2920,10 @@
"regionId": "11855",
"keys": "770787544,-1305958539,670684335,208100825"
},
- {
- "regionId": "11856",
- "keys": "0,0,0,0"
- },
{
"regionId": "11857",
"keys": "150488681,419659968,-1871963555,1031596369"
},
- {
- "regionId": "11858",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11859",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11860",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11861",
- "keys": "0,0,0,0"
- },
{
"regionId": "11862",
"keys": "2071521092,797384499,364423664,-1286422461"
@@ -3744,10 +2968,6 @@
"regionId": "11926",
"keys": "-501586879,235710413,-1122707717,-354940885"
},
- {
- "regionId": "11927",
- "keys": "0,0,0,0"
- },
{
"regionId": "11928",
"keys": "-445378710,-788377286,1363332226,627739779"
@@ -3760,18 +2980,6 @@
"regionId": "11930",
"keys": "1436132147,-902725534,590285278,2018675988"
},
- {
- "regionId": "11931",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11932",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "11933",
- "keys": "0,0,0,0"
- },
{
"regionId": "11934",
"keys": "-854127330,1609124159,-999989310,-734721734"
@@ -3780,22 +2988,10 @@
"regionId": "11935",
"keys": "-1453725493,-1575973068,1979334907,1130399929"
},
- {
- "regionId": "11936",
- "keys": "0,0,0,0"
- },
{
"regionId": "11937",
"keys": "-1518927827,1819850502,-992647105,299958470"
},
- {
- "regionId": "11938",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12073",
- "keys": "-882281631,257910959,1642484329,-1342807140"
- },
{
"regionId": "12076",
"keys": "193939514,-115011236,-1406304015,-1626342231"
@@ -3876,26 +3072,10 @@
"regionId": "12097",
"keys": "-862465947,2109948185,583246321,-850147469"
},
- {
- "regionId": "12098",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12099",
- "keys": "0,0,0,0"
- },
{
"regionId": "12100",
"keys": "1852910519,712916664,1670787779,1294835477"
},
- {
- "regionId": "12101",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12102",
- "keys": "14881828,-6662814,58238456,146761213"
- },
{
"regionId": "12105",
"keys": "1153497516,-449169462,-635419798,-1471828315"
@@ -3924,10 +3104,6 @@
"regionId": "12111",
"keys": "-746445771,1759120362,1253848335,1433199232"
},
- {
- "regionId": "12112",
- "keys": "0,0,0,0"
- },
{
"regionId": "12113",
"keys": "-1749952613,1569535680,1900425482,-1993748284"
@@ -3936,10 +3112,6 @@
"regionId": "12115",
"keys": "2146362785,1996258091,-613445101,539756591"
},
- {
- "regionId": "12116",
- "keys": "0,0,0,0"
- },
{
"regionId": "12117",
"keys": "-97063310,1962833557,-849078816,-1560293275"
@@ -3976,10 +3148,6 @@
"regionId": "12182",
"keys": "-499997333,1910872683,-234510566,-361238419"
},
- {
- "regionId": "12183",
- "keys": "0,0,0,0"
- },
{
"regionId": "12184",
"keys": "-1993918550,1977224805,-1048356116,-1578331413"
@@ -3992,10 +3160,6 @@
"regionId": "12186",
"keys": "-259674875,-949495016,1835821953,1740556829"
},
- {
- "regionId": "12187",
- "keys": "0,0,0,0"
- },
{
"regionId": "12188",
"keys": "22801476,-1237575758,2139201694,-163382547"
@@ -4004,26 +3168,10 @@
"regionId": "12189",
"keys": "-626419958,-861781849,-400257621,465575053"
},
- {
- "regionId": "12191",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12192",
- "keys": "0,0,0,0"
- },
{
"regionId": "12193",
"keys": "1013552068,-364826455,4137749,729786125"
},
- {
- "regionId": "12194",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12332",
- "keys": "0,0,0,0"
- },
{
"regionId": "12333",
"keys": "372281878,-809369100,-1989039261,-980074402"
@@ -4112,54 +3260,18 @@
"regionId": "12356",
"keys": "-1201681208,106398334,-2123418385,1010672418"
},
- {
- "regionId": "12362",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12363",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12364",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12365",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12366",
- "keys": "0,0,0,0"
- },
{
"regionId": "12367",
"keys": "-2006617355,-1390093250,-1950318553,1842364433"
},
- {
- "regionId": "12368",
- "keys": "0,0,0,0"
- },
{
"regionId": "12369",
"keys": "-891954120,1710352781,-1883639556,-1461026236"
},
- {
- "regionId": "12372",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12373",
- "keys": "0,0,0,0"
- },
{
"regionId": "12374",
"keys": "1620519366,-1309341299,68411383,1308746010"
},
- {
- "regionId": "12375",
- "keys": "0,0,0,0"
- },
{
"regionId": "12376",
"keys": "1918934265,1530066885,-1991367516,1783839145"
@@ -4204,38 +3316,10 @@
"regionId": "12442",
"keys": "1883167946,191149821,-1270401415,-126025128"
},
- {
- "regionId": "12443",
- "keys": "0,0,0,0"
- },
{
"regionId": "12444",
"keys": "1576354846,-1768236409,821965805,-861456742"
},
- {
- "regionId": "12447",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12448",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12449",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12450",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12587",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12588",
- "keys": "0,0,0,0"
- },
{
"regionId": "12589",
"keys": "1981659006,1591583400,1958084245,667979721"
@@ -4324,10 +3408,6 @@
"regionId": "12614",
"keys": "1621048325,1179863793,357058137,-1896311701"
},
- {
- "regionId": "12615",
- "keys": "0,0,0,0"
- },
{
"regionId": "12616",
"keys": "1951523008,-2131232747,-381301931,2007660709"
@@ -4340,26 +3420,14 @@
"regionId": "12619",
"keys": "1922733696,773456556,-1923866275,-1305839916"
},
- {
- "regionId": "12620",
- "keys": "0,0,0,0"
- },
{
"regionId": "12621",
"keys": "1619333755,-1869146576,77302288,-937694202"
},
- {
- "regionId": "12622",
- "keys": "0,0,0,0"
- },
{
"regionId": "12623",
"keys": "-369583241,545715110,-134871454,1404138108"
},
- {
- "regionId": "12624",
- "keys": "0,0,0,0"
- },
{
"regionId": "12625",
"keys": "-260562230,1208275247,436993278,30028881"
@@ -4380,18 +3448,6 @@
"regionId": "12631",
"keys": "693308333,-269450306,-924437218,309489139"
},
- {
- "regionId": "12632",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12633",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12634",
- "keys": "0,0,0,0"
- },
{
"regionId": "12688",
"keys": "1861636222,1638403446,-649444098,2131977195"
@@ -4408,10 +3464,6 @@
"regionId": "12691",
"keys": "-998717750,-178246764,973015517,-1732934591"
},
- {
- "regionId": "12692",
- "keys": "0,0,0,0"
- },
{
"regionId": "12693",
"keys": "1339198001,799729854,-750687990,1703141753"
@@ -4420,10 +3472,6 @@
"regionId": "12694",
"keys": "631068451,-510806123,2026757696,207332608"
},
- {
- "regionId": "12695",
- "keys": "0,0,0,0"
- },
{
"regionId": "12696",
"keys": "690970369,-466418236,-666391415,1091047140"
@@ -4444,10 +3492,6 @@
"regionId": "12700",
"keys": "-1802430094,1220107446,-1897971895,-1437873968"
},
- {
- "regionId": "12842",
- "keys": "0,0,0,0"
- },
{
"regionId": "12843",
"keys": "-203885401,22803731,234561826,140244374"
@@ -4476,22 +3520,6 @@
"regionId": "12849",
"keys": "183396243,-461663209,-212681663,-266126212"
},
- {
- "regionId": "12850",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12851",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12852",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12853",
- "keys": "0,0,0,0"
- },
{
"regionId": "12854",
"keys": "-648789394,672092351,713515997,1153393095"
@@ -4541,24 +3569,12 @@
"keys": "1462732309,395803116,803023666,-1139113006"
},
{
- "regionId": "12874",
- "keys": "0,0,0,0"
+ "regionId": "12869",
+ "keys": "14881828,-6662814,58238456,146761213"
},
{
- "regionId": "12875",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12876",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12877",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "12878",
- "keys": "0,0,0,0"
+ "regionId": "12870",
+ "keys": "14881828,-6662814,58238456,146761213"
},
{
"regionId": "12879",
@@ -4636,10 +3652,6 @@
"regionId": "12956",
"keys": "-1383918319,-1190517730,-1037058957,534994622"
},
- {
- "regionId": "13098",
- "keys": "0,0,0,0"
- },
{
"regionId": "13099",
"keys": "919393388,-1011543647,454982828,-809340931"
@@ -4664,14 +3676,6 @@
"regionId": "13104",
"keys": "-421493992,1381068261,1710426242,2142500778"
},
- {
- "regionId": "13105",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "13106",
- "keys": "0,0,0,0"
- },
{
"regionId": "13107",
"keys": "-1161498786,-880845643,1588242926,2124040528"
@@ -4732,34 +3736,18 @@
"regionId": "13126",
"keys": "1732039952,536833573,-81136437,1031070663"
},
- {
- "regionId": "13130",
- "keys": "0,0,0,0"
- },
{
"regionId": "13131",
"keys": "-1234145533,479347649,1835828804,1685593501"
},
- {
- "regionId": "13132",
- "keys": "0,0,0,0"
- },
{
"regionId": "13133",
"keys": "-1026003062,917176839,-84576515,-1037395862"
},
- {
- "regionId": "13134",
- "keys": "0,0,0,0"
- },
{
"regionId": "13135",
"keys": "425723212,580084357,1788364975,1608414630"
},
- {
- "regionId": "13136",
- "keys": "0,0,0,0"
- },
{
"regionId": "13138",
"keys": "14881828,-6662814,58238456,146761213"
@@ -4800,10 +3788,6 @@
"regionId": "13203",
"keys": "-1342258113,-2106603709,395365404,-973258459"
},
- {
- "regionId": "13204",
- "keys": "0,0,0,0"
- },
{
"regionId": "13205",
"keys": "1250202258,-2009534633,1981493488,10068968"
@@ -4812,14 +3796,6 @@
"regionId": "13206",
"keys": "1456157358,1036496685,-1478577110,-1039552689"
},
- {
- "regionId": "13207",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "13208",
- "keys": "0,0,0,0"
- },
{
"regionId": "13209",
"keys": "-441828435,-1834839387,-1652863357,1161715526"
@@ -4928,30 +3904,10 @@
"regionId": "13387",
"keys": "50769406,1445159687,1657343198,-1977600563"
},
- {
- "regionId": "13388",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "13389",
- "keys": "0,0,0,0"
- },
{
"regionId": "13393",
"keys": "14881828,-6662814,58238456,146761213"
},
- {
- "regionId": "13397",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "13398",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "13399",
- "keys": "0,0,0,0"
- },
{
"regionId": "13456",
"keys": "-476100316,-1682296770,133855524,112315923"
@@ -4996,10 +3952,6 @@
"regionId": "13466",
"keys": "-460228398,-76181685,2062962515,1167974062"
},
- {
- "regionId": "13467",
- "keys": "0,0,0,0"
- },
{
"regionId": "13610",
"keys": "-1259340500,2094890289,-1255134464,1578867778"
@@ -5048,10 +4000,6 @@
"regionId": "13621",
"keys": "-1291167236,-1205011126,-1949699235,1530879202"
},
- {
- "regionId": "13622",
- "keys": "0,0,0,0"
- },
{
"regionId": "13623",
"keys": "-1700397822,-1427942931,1638091118,438962861"
@@ -5096,10 +4044,6 @@
"regionId": "13643",
"keys": "1113875885,-236852397,193142585,-854043613"
},
- {
- "regionId": "13644",
- "keys": "0,0,0,0"
- },
{
"regionId": "13650",
"keys": "-1281992532,-252178835,-207196406,32900092"
@@ -5112,10 +4056,6 @@
"regionId": "13713",
"keys": "676853493,-1887443315,-998811191,1947183065"
},
- {
- "regionId": "13715",
- "keys": "0,0,0,0"
- },
{
"regionId": "13716",
"keys": "-913580283,340446282,893998558,589419388"
@@ -5140,10 +4080,6 @@
"regionId": "13721",
"keys": "-1188425330,1307846097,888707126,-1843934128"
},
- {
- "regionId": "13722",
- "keys": "0,0,0,0"
- },
{
"regionId": "13723",
"keys": "-310574621,110640497,1685108265,-1931806505"
@@ -5160,18 +4096,6 @@
"regionId": "13868",
"keys": "255205616,-1585903009,-1371243067,-264891948"
},
- {
- "regionId": "13869",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "13870",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "13871",
- "keys": "0,0,0,0"
- },
{
"regionId": "13872",
"keys": "-865041276,1374390842,-909885942,30088570"
@@ -5196,10 +4120,6 @@
"regionId": "13877",
"keys": "1498185652,2064367906,152992439,585271079"
},
- {
- "regionId": "13878",
- "keys": "0,0,0,0"
- },
{
"regionId": "13879",
"keys": "-2101514338,-1139447054,51825149,-512907347"
@@ -5220,18 +4140,6 @@
"regionId": "13899",
"keys": "-2117805741,-268051413,-733527930,471010998"
},
- {
- "regionId": "13900",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "13901",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "13902",
- "keys": "0,0,0,0"
- },
{
"regionId": "13905",
"keys": "14881828,-6662814,58238456,146761213"
@@ -5240,18 +4148,10 @@
"regionId": "13968",
"keys": "-620062336,-1110235330,-1095431209,-470716307"
},
- {
- "regionId": "13971",
- "keys": "0,0,0,0"
- },
{
"regionId": "13972",
"keys": "1266294685,1139088638,1514900183,-1389022839"
},
- {
- "regionId": "13973",
- "keys": "0,0,0,0"
- },
{
"regionId": "13974",
"keys": "1384510929,1857691725,-293821029,-1219099456"
@@ -5280,10 +4180,6 @@
"regionId": "13980",
"keys": "-12957944,-743456598,2041601862,618819565"
},
- {
- "regionId": "14127",
- "keys": "0,0,0,0"
- },
{
"regionId": "14128",
"keys": "1907787432,-241593923,1152767085,-541422403"
@@ -5320,26 +4216,10 @@
"regionId": "14136",
"keys": "-1104533465,1792124817,-1564247177,79706641"
},
- {
- "regionId": "14154",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "14155",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "14156",
- "keys": "0,0,0,0"
- },
{
"regionId": "14157",
"keys": "-852479713,1901063521,-1097484894,1013793379"
},
- {
- "regionId": "14158",
- "keys": "0,0,0,0"
- },
{
"regionId": "14161",
"keys": "14881828,-6662814,58238456,146761213"
@@ -5348,18 +4228,6 @@
"regionId": "14167",
"keys": "-1398455,-469478596,190482870,-1233173597"
},
- {
- "regionId": "14227",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "14228",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "14229",
- "keys": "0,0,0,0"
- },
{
"regionId": "14230",
"keys": "-453901412,-2074594443,-809419406,1774073603"
@@ -5388,6 +4256,10 @@
"regionId": "14236",
"keys": "816141215,-2114312227,1578950035,1471842311"
},
+ {
+ "regionId": "14380",
+ "keys": "1663518625,-107913441,-1625821936,330353351"
+ },
{
"regionId": "14381",
"keys": "-534048527,1614741928,-469012711,1064350100"
@@ -5420,10 +4292,6 @@
"regionId": "14388",
"keys": "2048238173,2003642395,1658667134,411519881"
},
- {
- "regionId": "14389",
- "keys": "0,0,0,0"
- },
{
"regionId": "14390",
"keys": "-1631704360,1281079278,-1549067757,-2034268623"
@@ -5436,18 +4304,6 @@
"regionId": "14392",
"keys": "993603906,-1477196579,593064486,166369140"
},
- {
- "regionId": "14412",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "14413",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "14414",
- "keys": "0,0,0,0"
- },
{
"regionId": "14486",
"keys": "-131982139,-1189975142,-1667401999,-1794787704"
@@ -5456,14 +4312,6 @@
"regionId": "14487",
"keys": "-330478679,11506767,395036194,-971774384"
},
- {
- "regionId": "14488",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "14489",
- "keys": "0,0,0,0"
- },
{
"regionId": "14490",
"keys": "1578682567,-1175551739,170259358,-1972709096"
@@ -5476,6 +4324,10 @@
"regionId": "14492",
"keys": "420310205,1004898846,889537686,13961361"
},
+ {
+ "regionId": "14636",
+ "keys": "-1554034534,-545576842,-416921234,1887723532"
+ },
{
"regionId": "14637",
"keys": "112774068,-1867270219,-442076728,-1436438131"
@@ -5496,10 +4348,6 @@
"regionId": "14641",
"keys": "-310201697,1724559662,90126688,-664432561"
},
- {
- "regionId": "14645",
- "keys": "0,0,0,0"
- },
{
"regionId": "14646",
"keys": "-2069357113,-2117603296,1620573021,-239596308"
@@ -5512,10 +4360,6 @@
"regionId": "14648",
"keys": "-1757352130,-1996516705,263017190,1647356258"
},
- {
- "regionId": "14745",
- "keys": "0,0,0,0"
- },
{
"regionId": "14746",
"keys": "2081288932,-143900986,-1978370486,-544919360"
@@ -5548,10 +4392,6 @@
"regionId": "14896",
"keys": "548765086,801664009,-1716752945,-1492954302"
},
- {
- "regionId": "14901",
- "keys": "0,0,0,0"
- },
{
"regionId": "14902",
"keys": "1158948283,-12013143,1242958376,-1265402384"
@@ -5572,26 +4412,10 @@
"regionId": "14995",
"keys": "958328498,239876404,608758325,933929091"
},
- {
- "regionId": "15001",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "15002",
- "keys": "0,0,0,0"
- },
- {
- "regionId": "15003",
- "keys": "0,0,0,0"
- },
{
"regionId": "15147",
"keys": "-423978185,359589519,280220972,-1608470374"
},
- {
- "regionId": "15148",
- "keys": "0,0,0,0"
- },
{
"regionId": "15149",
"keys": "-1200628316,15132614,-465260385,-1525542932"
diff --git a/Server/src/main/content/data/EnchantedJewellery.kt b/Server/src/main/content/data/EnchantedJewellery.kt
index d5b300e93..c34a0ffb6 100644
--- a/Server/src/main/content/data/EnchantedJewellery.kt
+++ b/Server/src/main/content/data/EnchantedJewellery.kt
@@ -2,6 +2,7 @@ package content.data
import content.global.skill.magic.TeleportMethod
import content.global.skill.slayer.SlayerManager.Companion.getInstance
+import content.global.skill.slayer.SlayerUtils
import core.ServerConstants
import core.api.*
import core.game.event.TeleportEvent
@@ -304,7 +305,7 @@ enum class EnchantedJewellery(
return
}
sendNPCDialogue(player, slayerManager.master!!.npc, "You're currently " +
- "assigned to kill ${getSlayerTaskName(player).lowercase(Locale.getDefault())}'s; " +
+ "assigned to kill ${SlayerUtils.pluralise(getSlayerTaskName(player))} " +
"only ${getSlayerTaskKillsRemaining(player)} more to go.", core.game.dialogue.FacialExpression.FRIENDLY)
// Slayer tracker UI
setVarp(player, 2502, slayerManager.flags.taskFlags shr 4)
diff --git a/Server/src/main/content/data/GodBook.java b/Server/src/main/content/data/GodBook.java
index 314e61773..92029b479 100644
--- a/Server/src/main/content/data/GodBook.java
+++ b/Server/src/main/content/data/GodBook.java
@@ -100,7 +100,7 @@ public enum GodBook {
* @param page the page.
*/
public void insertPage(Player player, Item book, Item page) {
- if (!hasRequirement(player, "Horror from the Deep"))
+ if (!hasRequirement(player, Quests.HORROR_FROM_THE_DEEP))
return;
if (hasPage(player, book, page)) {
player.sendMessage("The book already has that page.");
diff --git a/Server/src/main/content/data/Quests.kt b/Server/src/main/content/data/Quests.kt
new file mode 100644
index 000000000..190cf2093
--- /dev/null
+++ b/Server/src/main/content/data/Quests.kt
@@ -0,0 +1,158 @@
+package content.data
+
+enum class Quests(val questName: String) {
+ MYTHS_OF_THE_WHITE_LANDS("Myths of the White Lands"),
+ BLACK_KNIGHTS_FORTRESS("Black Knights' Fortress"),
+ COOKS_ASSISTANT("Cook's Assistant"),
+ DEMON_SLAYER("Demon Slayer"),
+ DORICS_QUEST("Doric's Quest"),
+ DRAGON_SLAYER("Dragon Slayer"),
+ ERNEST_THE_CHICKEN("Ernest the Chicken"),
+ GOBLIN_DIPLOMACY("Goblin Diplomacy"),
+ IMP_CATCHER("Imp Catcher"),
+ THE_KNIGHTS_SWORD("The Knight's Sword"),
+ PIRATES_TREASURE("Pirate's Treasure"),
+ PRINCE_ALI_RESCUE("Prince Ali Rescue"),
+ THE_RESTLESS_GHOST("The Restless Ghost"),
+ ROMEO_JULIET("Romeo & Juliet"),
+ RUNE_MYSTERIES("Rune Mysteries"),
+ SHEEP_SHEARER("Sheep Shearer"),
+ SHIELD_OF_ARRAV("Shield of Arrav"),
+ VAMPIRE_SLAYER("Vampire Slayer"),
+ WITCHS_POTION("Witch's Potion"),
+ ANIMAL_MAGNETISM("Animal Magnetism"),
+ BETWEEN_A_ROCK("Between a Rock..."),
+ BIG_CHOMPY_BIRD_HUNTING("Big Chompy Bird Hunting"),
+ BIOHAZARD("Biohazard"),
+ CABIN_FEVER("Cabin Fever"),
+ CLOCK_TOWER("Clock Tower"),
+ CONTACT("Contact!"),
+ ZOGRE_FLESH_EATERS("Zogre Flesh Eaters"),
+ CREATURE_OF_FENKENSTRAIN("Creature of Fenkenstrain"),
+ DARKNESS_OF_HALLOWVALE("Darkness of Hallowvale"),
+ DEATH_TO_THE_DORGESHUUN("Death to the Dorgeshuun"),
+ DEATH_PLATEAU("Death Plateau"),
+ DESERT_TREASURE("Desert Treasure"),
+ DEVIOUS_MINDS("Devious Minds"),
+ THE_DIG_SITE("The Dig Site"),
+ DRUIDIC_RITUAL("Druidic Ritual"),
+ DWARF_CANNON("Dwarf Cannon"),
+ EADGARS_RUSE("Eadgar's Ruse"),
+ EAGLES_PEAK("Eagles' Peak"),
+ ELEMENTAL_WORKSHOP_I("Elemental Workshop I"),
+ ELEMENTAL_WORKSHOP_II("Elemental Workshop II"),
+ ENAKHRAS_LAMENT("Enakhra's Lament"),
+ ENLIGHTENED_JOURNEY("Enlightened Journey"),
+ THE_EYES_OF_GLOUPHRIE("The Eyes of Glouphrie"),
+ FAIRYTALE_I_GROWING_PAINS("Fairytale I - Growing Pains"),
+ FAIRYTALE_II_CURE_A_QUEEN("Fairytale II - Cure a Queen"),
+ FAMILY_CREST("Family Crest"),
+ THE_FEUD("The Feud"),
+ FIGHT_ARENA("Fight Arena"),
+ FISHING_CONTEST("Fishing Contest"),
+ FORGETTABLE_TALE("Forgettable Tale..."),
+ THE_FREMENNIK_TRIALS("The Fremennik Trials"),
+ WATERFALL_QUEST("Waterfall Quest"),
+ GARDEN_OF_TRANQUILITY("Garden of Tranquility"),
+ GERTRUDES_CAT("Gertrude's Cat"),
+ GHOSTS_AHOY("Ghosts Ahoy"),
+ THE_GIANT_DWARF("The Giant Dwarf"),
+ THE_GOLEM("The Golem"),
+ THE_GRAND_TREE("The Grand Tree"),
+ THE_HAND_IN_THE_SAND("The Hand in the Sand"),
+ HAUNTED_MINE("Haunted Mine"),
+ HAZEEL_CULT("Hazeel Cult"),
+ HEROES_QUEST("Heroes' Quest"),
+ HOLY_GRAIL("Holy Grail"),
+ HORROR_FROM_THE_DEEP("Horror from the Deep"),
+ ICTHLARINS_LITTLE_HELPER("Icthlarin's Little Helper"),
+ IN_AID_OF_THE_MYREQUE("In Aid of the Myreque"),
+ IN_SEARCH_OF_THE_MYREQUE("In Search of the Myreque"),
+ JUNGLE_POTION("Jungle Potion"),
+ LEGENDS_QUEST("Legend's Quest"),
+ LOST_CITY("Lost City"),
+ THE_LOST_TRIBE("The Lost Tribe"),
+ LUNAR_DIPLOMACY("Lunar Diplomacy"),
+ MAKING_HISTORY("Making History"),
+ MERLINS_CRYSTAL("Merlin's Crystal"),
+ MONKEY_MADNESS("Monkey Madness"),
+ MONKS_FRIEND("Monk's Friend"),
+ MOUNTAIN_DAUGHTER("Mountain Daughter"),
+ MOURNINGS_END_PART_I("Mourning's End Part I"),
+ MOURNINGS_END_PART_II("Mourning's End Part II"),
+ MURDER_MYSTERY("Murder Mystery"),
+ MY_ARMS_BIG_ADVENTURE("My Arm's Big Adventure"),
+ NATURE_SPIRIT("Nature Spirit"),
+ OBSERVATORY_QUEST("Observatory Quest"),
+ ONE_SMALL_FAVOUR("One Small Favour"),
+ PLAGUE_CITY("Plague City"),
+ PRIEST_IN_PERIL("Priest in Peril"),
+ RAG_AND_BONE_MAN("Rag and Bone Man"),
+ RATCATCHERS("Ratcatchers"),
+ RECIPE_FOR_DISASTER("Recipe for Disaster"),
+ RECRUITMENT_DRIVE("Recruitment Drive"),
+ REGICIDE("Regicide"),
+ ROVING_ELVES("Roving Elves"),
+ ROYAL_TROUBLE("Royal Trouble"),
+ RUM_DEAL("Rum Deal"),
+ SCORPION_CATCHER("Scorpion Catcher"),
+ SEA_SLUG("Sea Slug"),
+ THE_SLUG_MENACE("The Slug Menace"),
+ SHADES_OF_MORTTON("Shades of Mort'ton"),
+ SHADOW_OF_THE_STORM("Shadow of the Storm"),
+ SHEEP_HERDER("Sheep Herder"),
+ SHILO_VILLAGE("Shilo Village"),
+ A_SOULS_BANE("A Soul's Bane"),
+ SPIRITS_OF_THE_ELID("Spirits of the Elid"),
+ SWAN_SONG("Swan Song"),
+ TAI_BWO_WANNAI_TRIO("Tai Bwo Wannai Trio"),
+ A_TAIL_OF_TWO_CATS("A Tail of Two Cats"),
+ TEARS_OF_GUTHIX("Tears of Guthix"),
+ TEMPLE_OF_IKOV("Temple of Ikov"),
+ THRONE_OF_MISCELLANIA("Throne of Miscellania"),
+ THE_TOURIST_TRAP("The Tourist Trap"),
+ WITCHS_HOUSE("Witch's House"),
+ TREE_GNOME_VILLAGE("Tree Gnome Village"),
+ TRIBAL_TOTEM("Tribal Totem"),
+ TROLL_ROMANCE("Troll Romance"),
+ TROLL_STRONGHOLD("Troll Stronghold"),
+ UNDERGROUND_PASS("Underground Pass"),
+ WANTED("Wanted!"),
+ WATCHTOWER("Watchtower"),
+ COLD_WAR("Cold War"),
+ THE_FREMENNIK_ISLES("The Fremennik Isles"),
+ TOWER_OF_LIFE("Tower of Life"),
+ THE_GREAT_BRAIN_ROBBERY("The Great Brain Robbery"),
+ WHAT_LIES_BELOW("What Lies Below"),
+ OLAFS_QUEST("Olaf's Quest"),
+ ANOTHER_SLICE_OF_HAM("Another Slice of H.A.M"),
+ DREAM_MENTOR("Dream Mentor"),
+ GRIM_TALES("Grim Tales"),
+ KINGS_RANSOM("King's Ransom"),
+ THE_PATH_OF_GLOUPHRIE("The Path of Glouphrie"),
+ BACK_TO_MY_ROOTS("Back to my Roots"),
+ LAND_OF_THE_GOBLINS("Land of the Goblins"),
+ DEALING_WITH_SCABARAS("Dealing with Scabaras"),
+ WOLF_WHISTLE("Wolf Whistle"),
+ AS_A_FIRST_RESORT("As a First Resort..."),
+ CATAPULT_CONSTRUCTION("Catapult Construction"),
+ KENNITHS_CONCERNS("Kennith's Concerns"),
+ LEGACY_OF_SEERGAZE("Legacy of Seergaze"),
+ PERILS_OF_ICE_MOUNTAIN("Perils of Ice Mountain"),
+ TOKTZ_KET_DILL("TokTz-Ket-Dill"),
+ SMOKING_KILLS("Smoking Kills"),
+ ROCKING_OUT("Rocking Out"),
+ SPIRIT_OF_SUMMER("Spirit of Summer"),
+ MEETING_HISTORY("Meeting History"),
+ ALL_FIRED_UP("All Fired Up"),
+ SUMMERS_END("Summer's End"),
+ DEFENDER_OF_VARROCK("Defender of Varrock"),
+ SWEPT_AWAY("Swept Away"),
+ WHILE_GUTHIX_SLEEPS("While Guthix Sleeps"),
+ IN_PYRE_NEED("In Pyre Need"),
+ TEST_QUEST("Test Quest");
+
+ override fun toString(): String {
+ return questName
+ }
+}
diff --git a/Server/src/main/content/data/consumables/Consumables.java b/Server/src/main/content/data/consumables/Consumables.java
index 75808438e..82c6650a1 100644
--- a/Server/src/main/content/data/consumables/Consumables.java
+++ b/Server/src/main/content/data/consumables/Consumables.java
@@ -30,36 +30,36 @@ public enum Consumables {
HERRING(new Food(new int[] {347}, new HealingEffect(5))),
MACKEREL(new Food(new int[] {355}, new HealingEffect(6))),
ROAST_BIRD_MEAT(new Food(new int[] {9980}, new HealingEffect(6))),
- THIN_SNAIL(new Food(new int[] {3369}, new HealingEffect(5))),
+ THIN_SNAIL(new Food(new int[] {3369}, new RandomHealthEffect(5, 7))),
TROUT(new Food(new int[] {333}, new HealingEffect(7))),
- SPIDER_ON_STICK(new Food(new int[] {6297, 6305}, new HealingEffect(7))),
+ SPIDER_ON_STICK(new Food(new int[] {6297, 6305}, new RandomHealthEffect(7, 11))),
SPIDER_ON_SHAFT(new Food(new int[] {6299}, new HealingEffect(7))),
ROAST_RABBIT(new Food(new int[] {7223}, new HealingEffect(7))),
- LEAN_SNAIL(new Food(new int[] {3371}, new HealingEffect(8))),
+ LEAN_SNAIL(new Food(new int[] {3371}, new RandomHealthEffect(6, 8))),
COD(new Food(new int[] {339}, new HealingEffect(7))),
PIKE(new Food(new int[] {351}, new HealingEffect(8))),
ROAST_BEAST_MEAT(new Food(new int[] {9988}, new HealingEffect(8))),
COOKED_CRAB_MEAT(new Food(new int[] {7521, 7523, 7524, 7525, 7526}, new HealingEffect(2))),
- FAT_SNAIL(new Food(new int[] {3373}, new HealingEffect(9))),
+ FAT_SNAIL(new Food(new int[] {3373}, new RandomHealthEffect(7, 9))),
SALMON(new Food(new int[] {329}, new HealingEffect(9))),
- SLIMY_EEL(new Food(new int[] {3381}, new HealingEffect(6))),
+ SLIMY_EEL(new Food(new int[] {3381}, new RandomHealthEffect(6, 10))),
TUNA(new Food(new int[] {361}, new HealingEffect(10))),
COOKED_KARAMBWAN(new Food(new int[] {3144}, new HealingEffect(18)), true),
COOKED_CHOMPY(new Food(new int[] {2878}, new HealingEffect(10))),
RAINBOW_FISH(new Food(new int[] {10136}, new HealingEffect(11))),
- CAVE_EEL(new Food(new int[] {5003}, new HealingEffect(7))),
+ CAVE_EEL(new Food(new int[] {5003}, new RandomHealthEffect(8, 12))),
LOBSTER(new Food(new int[] {379}, new HealingEffect(12))),
COOKED_JUBBLY(new Food(new int[] {7568}, new HealingEffect(15))),
BASS(new Food(new int[] {365}, new HealingEffect(13))),
SWORDFISH(new Food(new int[] {373}, new HealingEffect(14))),
- LAVA_EEL(new Food(new int[] {2149}, new HealingEffect(14))),
+ LAVA_EEL(new Food(new int[] {2149}, new HealingEffect(11))),
MONKFISH(new Food(new int[] {7946}, new HealingEffect(16))),
SHARK(new Food(new int[] {385}, new HealingEffect(20))),
SEA_TURTLE(new Food(new int[] {397}, new HealingEffect(21))),
MANTA_RAY(new Food(new int[] {391}, new HealingEffect(22))),
KARAMBWANJI(new Food(new int[] {3151}, new HealingEffect(3))),
STUFFED_SNAKE(new Food(new int[] {7579}, new HealingEffect(20), "You eat the stuffed snake-it's quite a meal! It tastes like chicken.")),
- CRAYFISH(new Food(new int[] {13433}, new HealingEffect(2))),
+ CRAYFISH(new Food(new int[] {13433}, new HealingEffect(1))),
GIANT_FROG_LEGS(new Food(new int [] {4517}, new HealingEffect(6))),
/** Breads */
@@ -111,7 +111,7 @@ public enum Consumables {
/** Vegetables */
POTATO(new Food(new int[] {1942}, new HealingEffect(1), "You eat the potato. Yuck!")),
- BAKED_POTATO(new Food(new int[] {6701}, new HealingEffect(2))),
+ BAKED_POTATO(new Food(new int[] {6701}, new HealingEffect(4))),
SPICY_SAUCE(new Food(new int[] {7072, 1923}, new HealingEffect(2))),
CHILLI_CON_CARNE(new Food(new int[] {7062, 1923}, new HealingEffect(5))),
SCRAMBLED_EGG(new Food(new int[] {7078, 1923}, new HealingEffect(5))),
@@ -128,8 +128,8 @@ public enum Consumables {
MUSHROOM_POTATO(new Food(new int[] {7058}, new HealingEffect(20))),
TUNA_AND_CORN(new Food(new int[] {7068, 1923}, new HealingEffect(13))),
TUNA_POTATO(new Food(new int[] {7060}, new HealingEffect(22))),
- ONION(new Food(new int[] {1957}, new HealingEffect(2), "It's always sad to see a grown man/woman cry.")),
- CABBAGE(new Food(new int[] {1965}, new HealingEffect(2), "You eat the cabbage. Yuck!")),
+ ONION(new Food(new int[] {1957}, new HealingEffect(1), "It's always sad to see a grown man/woman cry.")),
+ CABBAGE(new Food(new int[] {1965}, new HealingEffect(1), "You eat the cabbage. Yuck!")),
DRAYNOR_CABBAGE(new Food(new int[] {1967}, new DraynorCabbageEffect(), "You eat the cabbage.", "It seems to taste nicer than normal.")),
EVIL_TURNIP(new Food(new int[] {12134, 12136, 12138}, new HealingEffect(6))),
SPINACH_ROLL(new Food(new int[] {1969}, new HealingEffect(2))),
@@ -147,7 +147,7 @@ public enum Consumables {
ORANGE(new Food(new int[] {2108}, new HealingEffect(2))),
ORANGE_CHUNKS(new Food(new int[] {2110}, new HealingEffect(2))),
ORANGE_SLICES(new Food(new int[] {2112}, new HealingEffect(2))),
- PAPAYA_FRUIT(new Food(new int[] {5972}, new HealingEffect(2))),
+ PAPAYA_FRUIT(new Food(new int[] {5972}, new MultiEffect(new EnergyEffect(5), new HealingEffect(8)))),
TENTI_PINEAPPLE(new FakeConsumable(1851, new String[] {"Try using a knife to slice it into pieces."})),
PINEAPPLE(new FakeConsumable(2114, new String[] {"Try using a knife to slice it into pieces."})),
PINEAPPLE_CHUNKS(new Food(new int[] {2116}, new HealingEffect(2))),
@@ -169,8 +169,8 @@ public enum Consumables {
STRANGE_FRUIT(new Food(new int[] {464}, new MultiEffect(new RemoveTimerEffect("poison"), new EnergyEffect(30)))),
/** Gnome Cooking */
- TOAD_CRUNCHIES(new Food(new int[] {2217}, new HealingEffect(12))),
- PREMADE_TD_CRUNCH(new Food(new int[] {2243}, new HealingEffect(12))),
+ TOAD_CRUNCHIES(new Food(new int[] {2217}, new HealingEffect(8))),
+ PREMADE_TD_CRUNCH(new Food(new int[] {2243}, new HealingEffect(8))),
SPICY_CRUNCHIES(new Food(new int[] {2213}, new HealingEffect(7))),
PREMADE_SY_CRUNCH(new Food(new int[] {2241}, new HealingEffect(7))),
WORM_CRUNCHIES(new Food(new int[] {2205}, new HealingEffect(8))),
@@ -307,7 +307,7 @@ public enum Consumables {
OOMLIE_WRAP(new Food(new int[] {Items.COOKED_OOMLIE_WRAP_2343}, new MultiEffect(new HealingEffect(14), new AchievementEffect(DiaryType.KARAMJA, 2, 2)))),
ROE(new Food(new int[]{11324}, new HealingEffect(3))),
EQUA_LEAVES(new Food(new int[]{2128}, new HealingEffect(1))),
- CHOC_ICE(new Food(new int[]{6794}, new HealingEffect(6))),
+ CHOC_ICE(new Food(new int[]{6794}, new HealingEffect(7))),
EDIBLE_SEAWEED(new Food(new int[] {403}, new HealingEffect(4))),
FROG_SPAWN(new Food(new int[] {5004}, new RandomHealthEffect(3, 7), "You eat the frogspawn. Yuck.")),
@@ -319,44 +319,44 @@ public enum Consumables {
STRENGTH(new Potion(new int[] {113, 115, 117, 119}, new SkillEffect(Skills.STRENGTH, 3, 0.1))),
ATTACK(new Potion(new int[] {2428, 121, 123, 125}, new SkillEffect(Skills.ATTACK, 3, 0.1))),
DEFENCE(new Potion(new int[] {2432, 133, 135, 137}, new SkillEffect(Skills.DEFENCE, 3, 0.1))),
- RANGING(new Potion(new int[] {2444, 169, 171, 173}, new SkillEffect(Skills.RANGE, 3, 0.1))),
- MAGIC(new Potion(new int[] {3040, 3042, 3044, 3046}, new SkillEffect(Skills.MAGIC, 3, 0.1))),
- SUPER_STRENGTH(new Potion(new int[] {2440, 157, 159, 161}, new SkillEffect(Skills.STRENGTH, 3, 0.2))),
- SUPER_ATTACK(new Potion(new int[] {2436, 145, 147, 149}, new SkillEffect(Skills.ATTACK, 3, 0.2))),
- SUPER_DEFENCE(new Potion(new int[] {2442, 163, 165, 167}, new SkillEffect(Skills.DEFENCE, 3, 0.2))),
+ RANGING(new Potion(new int[] {2444, 169, 171, 173}, new SkillEffect(Skills.RANGE, 4, 0.1))),
+ MAGIC(new Potion(new int[] {3040, 3042, 3044, 3046}, new SkillEffect(Skills.MAGIC, 4, 0))),
+ SUPER_STRENGTH(new Potion(new int[] {2440, 157, 159, 161}, new SkillEffect(Skills.STRENGTH, 5, 0.15))),
+ SUPER_ATTACK(new Potion(new int[] {2436, 145, 147, 149}, new SkillEffect(Skills.ATTACK, 5, 0.15))),
+ SUPER_DEFENCE(new Potion(new int[] {2442, 163, 165, 167}, new SkillEffect(Skills.DEFENCE, 5, 0.15))),
ANTIPOISON(new Potion(new int[] {2446, 175, 177, 179}, new AddTimerEffect("poison:immunity", secondsToTicks(90)))),
ANTIPOISON_(new Potion(new int[] {5943, 5945, 5947, 5949}, new AddTimerEffect("poison:immunity", minutesToTicks(9)))),
ANTIPOISON__(new Potion(new int[] {5952, 5954, 5956, 5958}, new AddTimerEffect("poison:immunity", minutesToTicks(12)))),
SUPER_ANTIP(new Potion(new int[] {2448, 181, 183, 185}, new AddTimerEffect("poison:immunity", minutesToTicks(6)))),
- RELICYM(new Potion(new int[] {4842, 4844, 4846, 4848}, new MultiEffect(new SetAttributeEffect("disease:immunity", 300), new RemoveTimerEffect("disease")))),
+ RELICYM(new Potion(new int[] {4842, 4844, 4846, 4848}, new CureDiseaseEffect())),
AGILITY(new Potion(new int[] {3032, 3034, 3036, 3038}, new SkillEffect(Skills.AGILITY, 3, 0))),
HUNTER(new Potion(new int[] {9998, 10000, 10002, 10004}, new SkillEffect(Skills.HUNTER, 3, 0))),
RESTORE(new Potion(new int[] {2430, 127, 129, 131}, new RestoreEffect(10, 0.3))),
- SARA_BREW(new Potion(new int[] {6685, 6687, 6689, 6691}, new MultiEffect(new PercentHeal(2, .15), new SkillEffect(Skills.ATTACK, 0, -0.10), new SkillEffect(Skills.STRENGTH, 0, -0.10), new SkillEffect(Skills.MAGIC, 0, -0.10), new SkillEffect(Skills.RANGE, 0, -0.10), new SkillEffect(Skills.DEFENCE, 2, 0.2)))),
+ SARA_BREW(new Potion(new int[] {6685, 6687, 6689, 6691}, new MultiEffect(new PercentHeal(0, .15), new SkillEffect(Skills.ATTACK, 0, -0.10), new SkillEffect(Skills.STRENGTH, 0, -0.10), new SkillEffect(Skills.MAGIC, 0, -0.10), new SkillEffect(Skills.RANGE, 0, -0.10), new SkillEffect(Skills.DEFENCE, 0, 0.25)))),
SUMMONING(new Potion(new int[] {12140, 12142, 12144, 12146}, new MultiEffect(new RestoreSummoningSpecial(), new SummoningEffect(7, 0.25)))),
COMBAT(new Potion(new int[] {9739, 9741, 9743, 9745}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, .1), new SkillEffect(Skills.ATTACK, 3, .1)))),
- ENERGY(new Potion(new int[] {3008, 3010, 3012, 3014}, new MultiEffect(new EnergyEffect(10), new HealingEffect(3)))),
+ ENERGY(new Potion(new int[] {3008, 3010, 3012, 3014}, new EnergyEffect(10))),
FISHING(new Potion(new int[] {2438, 151, 153, 155}, new SkillEffect(Skills.FISHING, 3, 0))),
PRAYER(new Potion(new int[] {2434, 139, 141, 143}, new PrayerEffect(7, 0.25))),
- SUPER_RESTO(new Potion(new int[] {3024, 3026, 3028, 3030}, new MultiEffect(new RestoreEffect(8, 0.25), new PrayerEffect(8, 0.25), new SummoningEffect(8, 0.25)))),
- ZAMMY_BREW(new Potion(new int[] {2450, 189, 191, 193}, new MultiEffect(new DamageEffect(10, true), new SkillEffect(Skills.ATTACK, 0, 0.15), new SkillEffect(Skills.STRENGTH, 0, 0.25), new SkillEffect(Skills.DEFENCE, 0, -0.1), new RandomPrayerEffect(0, 10)))),
- ANTIFIRE(new Potion(new int[] {2452, 2454, 2456, 2458}, new SetAttributeEffect("fire:immune", 600, true))),
+ SUPER_RESTO(new Potion(new int[] {3024, 3026, 3028, 3030}, new RestoreEffect(8, 0.25, true))),
+ ZAMMY_BREW(new Potion(new int[] {2450, 189, 191, 193}, new MultiEffect(new DamageEffect(10, true), new SkillEffect(Skills.ATTACK, 0, 0.25), new SkillEffect(Skills.STRENGTH, 0, 0.15), new SkillEffect(Skills.DEFENCE, 0, -0.1)))),
+ ANTIFIRE(new Potion(new int[] {2452, 2454, 2456, 2458}, new AddTimerEffect("dragonfire:immunity", 600, true))),
GUTH_REST(new Potion(new int[] {4417, 4419, 4421, 4423}, new MultiEffect(new RemoveTimerEffect("poison"), new EnergyEffect(5), new HealingEffect(5)))),
MAGIC_ESS(new Potion(new int[] {11491, 11489}, new SkillEffect(Skills.MAGIC,3,0))),
- SANFEW(new Potion(new int[] {10925, 10927, 10929, 10931}, new MultiEffect(new RestoreEffect(8,0.25), new PrayerEffect(8,0.25), new RemoveTimerEffect("poison"), new RemoveTimerEffect("disease")))),
+ SANFEW(new Potion(new int[] {10925, 10927, 10929, 10931}, new MultiEffect(new RestoreEffect(8,0.25, true), new AddTimerEffect("poison:immunity", secondsToTicks(90)), new RemoveTimerEffect("disease")))),
SUPER_ENERGY(new Potion(new int[] {3016, 3018, 3020, 3022}, new EnergyEffect(20))),
BLAMISH_OIL(new FakeConsumable(1582, new String[] {"You know... I'd really rather not."})),
/** Barbarian Mixes */
PRAYERMIX(new BarbarianMix(new int[] {11465, 11467}, new MultiEffect(new PrayerEffect(7, 0.25), new HealingEffect(6)))),
- ZAMMY_MIX(new BarbarianMix(new int[] {11521, 11523}, new MultiEffect(new DamageEffect(10, true), new SkillEffect(Skills.ATTACK, 0, 0.15), new SkillEffect(Skills.STRENGTH, 0, 0.25), new SkillEffect(Skills.DEFENCE, 0, -0.1), new RandomPrayerEffect(0, 10)))),
+ ZAMMY_MIX(new BarbarianMix(new int[] {11521, 11523}, new MultiEffect(new DamageEffect(10, true), new SkillEffect(Skills.ATTACK, 0, 0.15), new SkillEffect(Skills.STRENGTH, 0, 0.25), new SkillEffect(Skills.DEFENCE, 0, -0.1)))),
ATT_MIX(new BarbarianMix(new int[] {11429, 11431}, new MultiEffect(new SkillEffect(Skills.ATTACK, 3, 0.1), new HealingEffect(3)))),
ANTIP_MIX(new BarbarianMix(new int[] {11433, 11435}, new MultiEffect(new AddTimerEffect("poison:immunity", secondsToTicks(90)), new HealingEffect(3)))),
- RELIC_MIX(new BarbarianMix(new int[] {11437, 11439}, new MultiEffect(new RemoveTimerEffect("disease"), new SetAttributeEffect("disease:immunity", 300), new HealingEffect(3)))),
+ RELIC_MIX(new BarbarianMix(new int[] {11437, 11439}, new MultiEffect(new CureDiseaseEffect(), new HealingEffect(3)))),
STR_MIX(new BarbarianMix(new int[] {11443, 11441}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0.1), new HealingEffect(3)))),
RESTO_MIX(new BarbarianMix(new int[] {11449, 11451}, new MultiEffect(new RestoreEffect(10, 0.3), new HealingEffect(3)))),
SUPER_RESTO_MIX(new BarbarianMix(new int [] {11493, 11495}, new MultiEffect(new RestoreEffect(8,0.25), new PrayerEffect(8, 0.25), new SummoningEffect(8, 0.25), new HealingEffect(6)))),
- ENERGY_MIX(new BarbarianMix(new int[] {11453, 11455}, new MultiEffect(new EnergyEffect(10), new HealingEffect(6)))),
+ ENERGY_MIX(new BarbarianMix(new int[] {11453, 11455}, new MultiEffect(new EnergyEffect(10), new HealingEffect(3)))),
DEF_MIX(new BarbarianMix(new int[] {11457, 11459}, new MultiEffect(new SkillEffect(Skills.DEFENCE, 3, 0.1), new HealingEffect(6)))),
AGIL_MIX(new BarbarianMix(new int[] {11461, 11463}, new MultiEffect(new SkillEffect(Skills.AGILITY, 3, 0), new HealingEffect(6)))),
COMBAT_MIX(new BarbarianMix(new int[] {11445, 11447}, new MultiEffect(new SkillEffect(Skills.ATTACK, 3, 0.1), new SkillEffect(Skills.STRENGTH, 3, 0.1), new HealingEffect(6)))),
@@ -367,6 +367,7 @@ public enum Consumables {
SUPER_STR_MIX(new BarbarianMix(new int[] {11485, 11487}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 5, 0.15), new HealingEffect(6)))),
ANTIDOTE_PLUS_MIX(new BarbarianMix(new int[] {11501, 11503}, new MultiEffect(new AddTimerEffect("poison:immunity", minutesToTicks(9)), new RandomHealthEffect(3, 7)))),
ANTIP_SUPERMIX(new BarbarianMix(new int[] {11473, 11475}, new MultiEffect(new AddTimerEffect("poison:immunity", minutesToTicks(6)), new RandomHealthEffect(3, 7)))),
+ ANTIFIRE_MIX(new BarbarianMix(new int[] {11505, 11507}, new MultiEffect(new AddTimerEffect("dragonfire:immunity", 600, true), new RandomHealthEffect(3, 7)))),
/** Stealing creation potions */
SC_PRAYER(new Potion(new int[] {14207, 14209, 14211, 14213, 14215}, new PrayerEffect(7, 0.25))),
diff --git a/Server/src/main/content/data/consumables/effects/CureDiseaseEffect.kt b/Server/src/main/content/data/consumables/effects/CureDiseaseEffect.kt
new file mode 100644
index 000000000..4c63c6e99
--- /dev/null
+++ b/Server/src/main/content/data/consumables/effects/CureDiseaseEffect.kt
@@ -0,0 +1,21 @@
+package content.data.consumables.effects
+
+import core.api.*
+import core.game.consumable.ConsumableEffect
+import core.game.node.entity.player.Player
+import core.game.system.timer.impl.Disease
+
+class CureDiseaseEffect () : ConsumableEffect() {
+ override fun activate (p: Player) {
+ val existingTimer = getTimer(p)
+ if (existingTimer != null) {
+ existingTimer.hitsLeft -= 9
+ if (existingTimer.hitsLeft <= 0) {
+ sendMessage(p, "The disease has been cured.")
+ removeTimer(p)
+ }else{
+ sendMessage(p,"You feel slightly better.")
+ }
+ }
+ }
+}
diff --git a/Server/src/main/content/data/consumables/effects/RestoreEffect.java b/Server/src/main/content/data/consumables/effects/RestoreEffect.java
index 3b57acabf..ba9b3ea8d 100644
--- a/Server/src/main/content/data/consumables/effects/RestoreEffect.java
+++ b/Server/src/main/content/data/consumables/effects/RestoreEffect.java
@@ -6,21 +6,37 @@ import core.game.node.entity.skill.Skills;
public class RestoreEffect extends ConsumableEffect {
double base,bonus;
+ boolean all_skills; // Except for hitpoints
public RestoreEffect(double base, double bonus){
this.base = base;
this.bonus = bonus;
+ this.all_skills = false;
+ }
+
+ public RestoreEffect(double base, double bonus, boolean all_skills){
+ this.base = base;
+ this.bonus = bonus;
+ this.all_skills = all_skills;
}
final int[] SKILLS = new int[] { Skills.DEFENCE, Skills.ATTACK, Skills.STRENGTH, Skills.MAGIC, Skills.RANGE };
+ final int[] ALL_SKILLS = new int[]{
+ Skills.ATTACK,Skills.DEFENCE, Skills.STRENGTH,Skills.RANGE,Skills.PRAYER,Skills.MAGIC, Skills.COOKING,
+ Skills.WOODCUTTING,Skills.FLETCHING,Skills.FISHING,Skills.FIREMAKING,Skills.CRAFTING,Skills.SMITHING,
+ Skills.MINING,Skills.HERBLORE,Skills.AGILITY,Skills.THIEVING,Skills.SLAYER,Skills.FARMING,
+ Skills.RUNECRAFTING,Skills.HUNTER,Skills.CONSTRUCTION,Skills.SUMMONING };
@Override
public void activate(Player p) {
Skills sk = p.getSkills();
- for(int skill : SKILLS){
+ int[] skills = this.all_skills ? ALL_SKILLS : SKILLS;
+ for(int skill : skills){
int statL = sk.getStaticLevel(skill);
+ int boost = (int) (base + (statL * bonus));
int curL = sk.getLevel(skill);
if(curL < statL){
- int boost = (int) (base + (statL * bonus));
p.getSkills().updateLevel(skill, boost, statL);
}
+ if (skill == Skills.PRAYER)
+ p.getSkills().incrementPrayerPoints(boost);
}
}
}
diff --git a/Server/src/main/content/global/activity/cchallange/ChampionChallengeListener.kt b/Server/src/main/content/global/activity/cchallange/ChampionChallengeListener.kt
index 8cea6d806..e1e2cd6c8 100644
--- a/Server/src/main/content/global/activity/cchallange/ChampionChallengeListener.kt
+++ b/Server/src/main/content/global/activity/cchallange/ChampionChallengeListener.kt
@@ -114,7 +114,6 @@ class ChampionChallengeListener : InteractionListener, MapArea {
)
private val PORTCULLIS = Scenery.PORTCULLIS_10553
- private val LADDER = Scenery.LADDER_10554
private val CHAMPION_STATUE_CLOSED = Scenery.CHAMPION_STATUE_10556
private val CHAMPION_STATUE_OPEN = Scenery.CHAMPION_STATUE_10557
private val TRAPDOOR_CLOSED = Scenery.TRAPDOOR_10558
@@ -124,6 +123,13 @@ class ChampionChallengeListener : InteractionListener, MapArea {
private val ARENA_ZONE = 12696
override fun defineListeners() {
+ // Champion's Guild Basement Ladder to Main Floor
+ addClimbDest(Location(3190, 9758, 0), Location(3190, 3356, 0))
+ // Champion Statue Ladder to Arena
+ addClimbDest(Location(3184, 9758, 0), Location(3182, 9758, 0))
+ // Arena Ladder to Champion's Guild Basement
+ addClimbDest(Location(3183, 9758, 0), Location(3185, 9758, 0))
+
on(LARXUS, IntType.NPC, "talk-to") { player, _ ->
openDialogue(player, LarxusDialogue(false))
return@on true
@@ -134,18 +140,18 @@ class ChampionChallengeListener : InteractionListener, MapArea {
return@on true
}
- on(TRAPDOOR_CLOSED, IntType.SCENERY, "open") { _, node ->
- replaceScenery(node.asScenery(), TRAPDOOR_OPEN, 100, node.location)
- return@on true
- }
-
onUseWith(IntType.NPC, ChampionScrollsDropHandler.SCROLLS, NPCs.LARXUS_3050) { player, _, _ ->
openDialogue(player, LarxusDialogue(true))
return@onUseWith true
}
+ on(TRAPDOOR_CLOSED, IntType.SCENERY, "open") { _, node ->
+ replaceScenery(node.asScenery(), TRAPDOOR_OPEN, 100, node.location)
+ return@on true
+ }
+
on(TRAPDOOR_OPEN, IntType.SCENERY, "close") { _, node ->
- replaceScenery(node.asScenery(), TRAPDOOR_CLOSED, 100, node.location)
+ replaceScenery(node.asScenery(), TRAPDOOR_CLOSED, -1, node.location)
return@on true
}
@@ -154,15 +160,6 @@ class ChampionChallengeListener : InteractionListener, MapArea {
return@on true
}
- on(LADDER, IntType.SCENERY, "climb-up") { player, _ ->
- teleport(player, Location.create(3185, 9758, 0))
- return@on true
- }
- on(CHAMPION_STATUE_OPEN, IntType.SCENERY, "climb-down") { player, _ ->
- teleport(player, Location.create(3182, 9758, 0))
- return@on true
- }
-
on(PORTCULLIS, IntType.SCENERY, "open") { player, node ->
if (player.getAttribute("championsarena:start", false) == false) {
sendNPCDialogue(player, NPCs.LARXUS_3050, "You need to arrange a challenge with me before you enter the arena.")
@@ -229,4 +226,4 @@ class ChampionChallengeListener : InteractionListener, MapArea {
ZoneRestriction.RANDOM_EVENTS
)
}
-}
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/activity/shootingstar/ShootingStar.kt b/Server/src/main/content/global/activity/shootingstar/ShootingStar.kt
index dcb48e84a..9432ea009 100644
--- a/Server/src/main/content/global/activity/shootingstar/ShootingStar.kt
+++ b/Server/src/main/content/global/activity/shootingstar/ShootingStar.kt
@@ -11,12 +11,13 @@ import core.ServerStore.Companion.getString
import content.global.bots.ShootingStarBot
import core.game.world.repository.Repository
+import core.tools.RandomFunction
/**
* Represents a shooting star object (Only ever initialized once) (ideally)
* @author Ceikry
*/
-class ShootingStar(var level: ShootingStarType = ShootingStarType.values().random()){
+class ShootingStar(var level: ShootingStarType = ShootingStarType.values().random()) {
val crash_locations = mapOf(
"East of Dark Wizards' Tower" to Location.create(2925, 3339, 0), // East of Dark Wizards' Tower
"Crafting Guild" to Location.create(2940, 3280, 0), // Crafting Guild Mine
@@ -30,7 +31,7 @@ class ShootingStar(var level: ShootingStarType = ShootingStarType.values().rando
"Relleka mining site" to Location.create(2682, 3700, 0), // Rellekka mining site
"Jatizso mine" to Location.create(2393, 3815, 0), //Jatiszo mining site (requires Fremennik Isles prereqs)
"Lunar Isle mine" to Location.create(2140, 3939, 0), // Lunar Isle mine (requires Lunar Diplomacy prereqs)
- "Miscellania coal mine" to Location.create(2529, 3887, 0), // Miscellania coal mine (requires Fremennik Trials)
+ "Miscellania coal mine" to Location.create(2529, 3887, 0), // Miscellania coal mine (requires The Fremennik Trials)
//"Neitiznot runite mine" to Location.create(2376, 3835, 0), // Near the Neitiznot runite mine (requires Fremennik Isles prereqs) currently inaccessible as bridge does not work
"Ardougne mining site" to Location.create(2600, 3232, 0), // Ardougne mining site (Monastery)
"Ardougne eastern mine" to Location.create(2706, 3334, 0), // Ardougne mining site (Legends Guild)
@@ -79,22 +80,15 @@ class ShootingStar(var level: ShootingStarType = ShootingStarType.values().rando
* Degrades a ShootingStar (or removes the starObject and spawns a Star Sprite if it's the last star)
*/
fun degrade() {
- if(level.ordinal == 0){
- selfBots.filter { it.isMining() }.forEach { it.sleep() }
- SceneryBuilder.remove(starObject)
- isSpawned = false
- starSprite.location = starObject.location
- starSprite.init()
- spriteSpawned = true
- ShootingStarPlugin.getStoreFile().clear()
+ if(level.ordinal == 0) {
+ spawnSprite()
return
}
level = getNextType()
maxDust = level.totalStardust
dustLeft = level.totalStardust
-
ShootingStarPlugin.getStoreFile()["level"] = level.ordinal
- ShootingStarPlugin.getStoreFile()["isDiscovered"] = isDiscovered
+ ShootingStarPlugin.getStoreFile()["dustLeft"] = dustLeft
val newStar = Scenery(level.objectId, starObject.location)
SceneryBuilder.replace(starObject, newStar)
@@ -110,7 +104,6 @@ class ShootingStar(var level: ShootingStarType = ShootingStarType.values().rando
*/
fun fire() {
SceneryBuilder.remove(starObject)
- rebuildVars()
clearSprite()
SceneryBuilder.add(starObject)
if(!isSpawned) {
@@ -123,37 +116,54 @@ class ShootingStar(var level: ShootingStarType = ShootingStarType.values().rando
}
isSpawned = true
Repository.sendNews("A shooting star level ${level.ordinal + 1} just crashed near ${location}!")
+ ShootingStarPlugin.getStoreFile()["level"] = level.ordinal
+ ShootingStarPlugin.getStoreFile()["location"] = location
+ ShootingStarPlugin.getStoreFile()["isDiscovered"] = isDiscovered
+ ShootingStarPlugin.getStoreFile()["dustLeft"] = dustLeft
}
/**
* Rebuilds some of the variables with new information.
*/
fun rebuildVars(){
- if(firstStar && ShootingStarPlugin.getStoreFile().isNotEmpty()){
- level = ShootingStarType.values()[ShootingStarPlugin.getStoreFile().getInt("level")]
- location = ShootingStarPlugin.getStoreFile().getString("location")
- isDiscovered = ShootingStarPlugin.getStoreFile().getBoolean("isDiscovered")
- } else {
- level = ShootingStarType.values().random()
- location = crash_locations.entries.random().key
- isDiscovered = false
+ // Defaults
+ var levelOrd = RandomFunction.random(9)
+ level = ShootingStarType.values()[levelOrd]
+ location = crash_locations.entries.random().key
+ isDiscovered = false
+ dustLeft = level.totalStardust
+ ticks = 0
+ spriteSpawned = false
+
+ if (firstStar && ShootingStarPlugin.getStoreFile().isNotEmpty()) {
+ // Replace default with stored values, if any
+ levelOrd = ShootingStarPlugin.getStoreFile().getInt("level", levelOrd)
+ level = ShootingStarType.values()[levelOrd]
+ location = ShootingStarPlugin.getStoreFile().getString("location", location)
+ isDiscovered = ShootingStarPlugin.getStoreFile().getBoolean("isDiscovered", false)
+ dustLeft = ShootingStarPlugin.getStoreFile().getInt("dustLeft", dustLeft)
+ ticks = ShootingStarPlugin.getStoreFile().getInt("ticks", ticks)
+ spriteSpawned = ShootingStarPlugin.getStoreFile().getBoolean("spriteSpawned", false)
}
maxDust = level.totalStardust
- dustLeft = level.totalStardust
starObject = Scenery(level.objectId, crash_locations.get(location))
+ }
- ShootingStarPlugin.getStoreFile()["level"] = level.ordinal
- ShootingStarPlugin.getStoreFile()["location"] = location
- ShootingStarPlugin.getStoreFile()["isDiscovered"] = false
-
- ticks = 0
- firstStar = false
+ fun spawnSprite() {
+ selfBots.filter { it.isMining() }.forEach { it.sleep() }
+ SceneryBuilder.remove(starObject)
+ isSpawned = false
+ starSprite.location = starObject.location
+ starSprite.init()
+ spriteSpawned = true
+ ShootingStarPlugin.getStoreFile()["spriteSpawned"] = spriteSpawned
}
fun clearSprite() {
starSprite.clear()
spriteSpawned = false
+ ShootingStarPlugin.getStoreFile()["spriteSpawned"] = spriteSpawned
}
/**
@@ -161,6 +171,7 @@ class ShootingStar(var level: ShootingStarType = ShootingStarType.values().rando
*/
fun decDust() {
if(--dustLeft <= 0) degrade()
+ ShootingStarPlugin.getStoreFile()["dustLeft"] = dustLeft
}
/**
diff --git a/Server/src/main/content/global/activity/shootingstar/ShootingStarMiningPulse.kt b/Server/src/main/content/global/activity/shootingstar/ShootingStarMiningPulse.kt
index 456efb4f2..5f5ee3649 100644
--- a/Server/src/main/content/global/activity/shootingstar/ShootingStarMiningPulse.kt
+++ b/Server/src/main/content/global/activity/shootingstar/ShootingStarMiningPulse.kt
@@ -51,6 +51,7 @@ class ShootingStarMiningPulse(player: Player?, node: Scenery?, val star: Shootin
player.sendMessage("You have ${player.skills.experienceMultiplier * player.getAttribute("shooting-star:bonus-xp", 0).toDouble()} bonus xp towards mining stardust.")
ShootingStarPlugin.submitScoreBoard(player)
star.isDiscovered = true
+ ShootingStarPlugin.getStoreFile()["isDiscovered"] = star.isDiscovered
return player.skills.getLevel(Skills.MINING) >= star.miningLevel
}
diff --git a/Server/src/main/content/global/activity/shootingstar/ShootingStarPlugin.kt b/Server/src/main/content/global/activity/shootingstar/ShootingStarPlugin.kt
index 274a414a6..1e993e1bb 100644
--- a/Server/src/main/content/global/activity/shootingstar/ShootingStarPlugin.kt
+++ b/Server/src/main/content/global/activity/shootingstar/ShootingStarPlugin.kt
@@ -12,11 +12,11 @@ import core.ServerStore.Companion.getBoolean
import core.game.dialogue.DialogueFile
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
-import core.tools.SystemLogger
import core.game.system.command.Privilege
import core.game.world.GameWorld
import core.tools.Log
import core.tools.secondsToTicks
+import content.data.Quests
class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Commands, StartupListener {
override fun login(player: Player) {
@@ -27,14 +27,30 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com
override fun tick() {
++star.ticks
+ // Check if the current star sprite should expire
val maxDelay = tickDelay + (tickDelay / 3)
if(star.ticks > maxDelay && star.spriteSpawned){
star.clearSprite()
}
- if ((star.ticks >= tickDelay && !star.spriteSpawned) || (!star.isSpawned && !star.spriteSpawned)) {
+ if (star.firstStar && !star.isSpawned && !star.spriteSpawned) {
+ // Apparently, the server has only just booted
+ star.rebuildVars()
+ if (star.spriteSpawned) {
+ star.spawnSprite()
+ } else {
+ star.fire()
+ }
+ star.firstStar = false
+ }
+
+ // Check if it's time to fire a new one
+ if (star.ticks >= tickDelay && !star.spriteSpawned) {
+ star.rebuildVars()
star.fire()
}
+
+ getStoreFile()["ticks"] = star.ticks
}
override fun defineListeners() {
@@ -80,17 +96,17 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com
override fun handle(componentID: Int, buttonID: Int) {
fun teleportToStar(player: Player) {
val condition: (p: Player) -> Boolean = when (star.location.toLowerCase()) {
- "canifis bank" -> {p -> requireQuest(p, "Priest in Peril", "to access this.") }
- //"burgh de rott bank" -> {p -> hasRequirement(p, "In Aid of the Myreque") } //disabled: crash
- "crafting guild" -> {p -> hasLevelStat(p, Skills.CRAFTING, 40) }
- "lletya bank" -> {p -> hasRequirement(p, "Mourning's End Part I") }
- "jatizso mine" -> {p -> hasRequirement(p, "The Fremennik Isles") }
- "south crandor mining site" -> {p -> hasRequirement(p, "Dragon Slayer") }
- "shilo village mining site" -> {p -> hasRequirement(p, "Shilo Village") }
- "mos le'harmless bank" -> {p -> hasRequirement(p, "Cabin Fever") } //needs to be updated to check for completion when the quest releases; https://runescape.wiki/w/Mos_Le%27Harmless?oldid=913025
- "lunar isle mine" -> {p -> hasRequirement(p, "Lunar Diplomacy") }
- "miscellania coal mine" -> {p -> requireQuest(p, "The Fremennik Trials", "to access this.") }
- //"neitiznot runite mine" -> {p -> hasRequirement(p, "The Fremennik Isles") } //disabled: currently not reachable
+ "canifis bank" -> {p -> requireQuest(p, Quests.PRIEST_IN_PERIL, "to access this.")}
+ //"burgh de rott bank" -> {p -> hasRequirement(p, Quests.IN_AID_OF_THE_MYREQUE)} //disabled: crash
+ "crafting guild" -> {p -> hasLevelStat(p, Skills.CRAFTING, 40)}
+ "lletya bank" -> {p -> hasRequirement(p, Quests.MOURNINGS_END_PART_I)}
+ "jatizso mine" -> {p -> hasRequirement(p, Quests.THE_FREMENNIK_ISLES)}
+ "south crandor mining site" -> {p -> hasRequirement(p, Quests.DRAGON_SLAYER)}
+ "shilo village mining site" -> {p -> hasRequirement(p, Quests.SHILO_VILLAGE)}
+ "mos le'harmless bank" -> {p -> hasRequirement(p, Quests.CABIN_FEVER)} //needs to be updated to check for completion when the quest releases; https://runescape.wiki/w/Mos_Le%27Harmless?oldid=913025
+ "lunar isle mine" -> {p -> hasRequirement(p, Quests.LUNAR_DIPLOMACY)}
+ "miscellania coal mine" -> {p -> requireQuest(p, Quests.THE_FREMENNIK_TRIALS, "to access this.")}
+ //"neitiznot runite mine" -> {p -> hasRequirement(p, Quests.THE_FREMENNIK_ISLES)} //disabled: currently not reachable
else -> {_ -> true}
}
if (!condition.invoke(player)) {
@@ -122,6 +138,7 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com
}
define("submit", Privilege.ADMIN) { _, _ ->
+ star.rebuildVars()
star.fire()
}
diff --git a/Server/src/main/content/global/activity/ttrail/ClueScrollPlugin.java b/Server/src/main/content/global/activity/ttrail/ClueScrollPlugin.java
index 13efad3c6..c049c6dab 100644
--- a/Server/src/main/content/global/activity/ttrail/ClueScrollPlugin.java
+++ b/Server/src/main/content/global/activity/ttrail/ClueScrollPlugin.java
@@ -192,7 +192,7 @@ public abstract class ClueScrollPlugin extends MapZone implements Plugin
int hasAmt = 0;
for (int i = 0; i < equipment.length; i++) {
for (int k = 0; k < equipment[i].length; k++) {
- if (player.getEquipment().contains(equipment[i][k], 1)) {
+ if (player.getEquipment().contains(equipment[i][k], 1) || player.costumeRoomBank.contains(equipment[i][k], 1)) {
hasAmt++;
break;
}
diff --git a/Server/src/main/content/global/ame/KidnapHelper.kt b/Server/src/main/content/global/ame/KidnapHelper.kt
new file mode 100644
index 000000000..5cef011ba
--- /dev/null
+++ b/Server/src/main/content/global/ame/KidnapHelper.kt
@@ -0,0 +1,28 @@
+package content.global.ame
+
+import core.ServerConstants
+import core.api.*
+import core.game.node.entity.player.Player
+import core.game.node.entity.player.link.TeleportManager.TeleportType
+import core.game.world.map.Location
+
+fun kidnapPlayer(player: Player, loc: Location, type: TeleportType) {
+ setAttribute(player, "kidnapped-by-random", true)
+ if (getAttribute(player, "/save:original-loc", null) == null) {
+ setAttribute(player, "/save:original-loc", player.location)
+ }
+ teleport(player, loc, type)
+}
+
+fun returnPlayer(player: Player) {
+ // Prevent returning more than once and sending the player back to HOME_LOCATION
+ if (getAttribute(player, "kidnapped-by-random", null) == null) {
+ return
+ }
+
+ player.locks.unlockTeleport()
+ val destination = getAttribute(player, "/save:original-loc", ServerConstants.HOME_LOCATION ?: Location.create(3222, 3218, 0))
+ teleport(player, destination)
+ unlock(player)
+ removeAttributes(player, "/save:original-loc", "kidnapped-by-random")
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/ame/RandomEventNPC.kt b/Server/src/main/content/global/ame/RandomEventNPC.kt
index c0aba00af..716420e25 100644
--- a/Server/src/main/content/global/ame/RandomEventNPC.kt
+++ b/Server/src/main/content/global/ame/RandomEventNPC.kt
@@ -3,9 +3,15 @@ package content.global.ame
import content.global.ame.events.MysteriousOldManNPC
import core.api.playGlobalAudio
import core.api.poofClear
+import core.api.sendMessage
+import core.api.utils.WeightBasedTable
import core.game.interaction.MovementPulse
+import core.game.node.entity.Entity
+import core.game.node.entity.combat.CombatStyle
import core.game.node.entity.impl.PulseType
import core.game.node.entity.npc.NPC
+import core.game.node.entity.npc.agg.AggressiveBehavior
+import core.game.node.entity.npc.agg.AggressiveHandler
import core.game.node.entity.player.Player
import core.game.node.item.Item
import core.game.world.map.Location
@@ -13,10 +19,11 @@ import core.game.world.map.RegionManager
import core.game.world.map.path.Pathfinder
import core.game.world.update.flag.context.Graphics
import core.integrations.discord.Discord
-import core.api.utils.WeightBasedTable
import core.tools.secondsToTicks
import core.tools.ticksToCycles
import org.rs09.consts.Sounds
+import kotlin.math.ceil
+import kotlin.math.min
import kotlin.random.Random
import kotlin.reflect.full.createInstance
@@ -66,7 +73,6 @@ abstract class RandomEventNPC(id: Int) : NPC(id) {
if (!player.getAttribute("random:pause", false)) {
ticksLeft--
}
-
if (!pulseManager.hasPulseRunning() && !finalized) {
follow()
}
@@ -87,6 +93,11 @@ abstract class RandomEventNPC(id: Int) : NPC(id) {
location = spawnLocation
player.setAttribute("re-npc", this)
super.init()
+ super.aggressiveHandler = AggressiveHandler(this, object : AggressiveBehavior() {
+ override fun canSelectTarget(entity: Entity, target: Entity): Boolean {
+ return target == player
+ }
+ })
}
open fun onTimeUp() {
@@ -118,4 +129,19 @@ abstract class RandomEventNPC(id: Int) : NPC(id) {
}
abstract fun talkTo(npc: NPC)
-}
\ No newline at end of file
+
+ override fun isAttackable(entity: Entity, style: CombatStyle, message: Boolean): Boolean {
+ if (entity != player) {
+ if (entity is Player) {
+ sendMessage(entity, "It isn't interested in fighting you.") //TODO authentic message
+ }
+ return false
+ }
+ return super.isAttackable(entity, style, message)
+ }
+
+ fun idForCombatLevel(ids: List, player: Player): Int {
+ val index = min(ids.size, ceil(player.properties.currentCombatLevel / 20.0).toInt()) - 1
+ return ids[index]
+ }
+}
diff --git a/Server/src/main/content/global/ame/RandomEvents.kt b/Server/src/main/content/global/ame/RandomEvents.kt
index 7e07d744a..49bac5151 100644
--- a/Server/src/main/content/global/ame/RandomEvents.kt
+++ b/Server/src/main/content/global/ame/RandomEvents.kt
@@ -3,15 +3,18 @@ package content.global.ame
import org.rs09.consts.Items
import content.global.ame.events.MysteriousOldManNPC
import content.global.ame.events.certer.CerterNPC
-import content.global.ame.events.drilldemon.SeargentDamienNPC
+import content.global.ame.events.drilldemon.SergeantDamienNPC
import content.global.ame.events.drunkendwarf.DrunkenDwarfNPC
import content.global.ame.events.evilbob.EvilBobNPC
import content.global.ame.events.evilchicken.EvilChickenNPC
import content.global.ame.events.freakyforester.FreakyForesterNPC
+import content.global.ame.events.maze.MazeNPC
import content.global.ame.events.genie.GenieNPC
+import content.global.ame.events.pillory.PilloryNPC
import content.global.ame.events.rickturpentine.RickTurpentineNPC
import content.global.ame.events.rivertroll.RiverTrollRENPC
import content.global.ame.events.rockgolem.RockGolemRENPC
+import content.global.ame.events.quizmaster.QuizMasterNPC
import content.global.ame.events.sandwichlady.SandwichLadyRENPC
import content.global.ame.events.shade.ShadeRENPC
import content.global.ame.events.strangeplant.StrangePlantNPC
@@ -43,7 +46,8 @@ enum class RandomEvents(val npc: RandomEventNPC, val loot: WeightBasedTable? = n
WeightedItem(Items.TOOTH_HALF_OF_A_KEY_985,1,1,0.1),
WeightedItem(Items.LOOP_HALF_OF_A_KEY_987,1,1,0.1)
)),
- DRILL_DEMON(npc = SeargentDamienNPC()),
+ MAZE(npc = MazeNPC()),
+ DRILL_DEMON(npc = SergeantDamienNPC()),
EVIL_CHICKEN(npc = EvilChickenNPC()),
STRANGE_PLANT(npc = StrangePlantNPC()),
SWARM(npc = SwarmNPC()),
@@ -52,7 +56,9 @@ enum class RandomEvents(val npc: RandomEventNPC, val loot: WeightBasedTable? = n
RICK_TURPENTINE(npc = RickTurpentineNPC(), loot = CERTER.loot),
SURPRISE_EXAM(npc = MysteriousOldManNPC(), type = "sexam"),
FREAKY_FORESTER(npc = FreakyForesterNPC(), skillIds = intArrayOf(Skills.WOODCUTTING)),
+ PILLORY(npc = PilloryNPC(), skillIds = intArrayOf(Skills.THIEVING)),
TREE_SPIRIT(npc = TreeSpiritRENPC(), skillIds = intArrayOf(Skills.WOODCUTTING)),
+ QUIZ_MASTER(npc = QuizMasterNPC()),
RIVER_TROLL(RiverTrollRENPC(), skillIds = intArrayOf(Skills.FISHING)),
ROCK_GOLEM(RockGolemRENPC(), skillIds = intArrayOf(Skills.MINING)),
SHADE(ShadeRENPC(), skillIds = intArrayOf(Skills.PRAYER)),
diff --git a/Server/src/main/content/global/ame/events/HostileRandomEventBehavior.kt b/Server/src/main/content/global/ame/events/HostileRandomEventBehavior.kt
new file mode 100644
index 000000000..37083b045
--- /dev/null
+++ b/Server/src/main/content/global/ame/events/HostileRandomEventBehavior.kt
@@ -0,0 +1,19 @@
+package content.global.ame.events
+
+import core.game.node.entity.Entity
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.npc.NPCBehavior
+import org.rs09.consts.NPCs
+
+class HostileRandomEventBehavior : NPCBehavior(
+ NPCs.EVIL_CHICKEN_2463, NPCs.EVIL_CHICKEN_2464, NPCs.EVIL_CHICKEN_2465, NPCs.EVIL_CHICKEN_2466, NPCs.EVIL_CHICKEN_2467, NPCs.EVIL_CHICKEN_2468,
+ NPCs.RIVER_TROLL_391, NPCs.RIVER_TROLL_392, NPCs.RIVER_TROLL_393, NPCs.RIVER_TROLL_394, NPCs.RIVER_TROLL_395, NPCs.RIVER_TROLL_396,
+ NPCs.ROCK_GOLEM_413, NPCs.ROCK_GOLEM_414, NPCs.ROCK_GOLEM_415, NPCs.ROCK_GOLEM_416, NPCs.ROCK_GOLEM_417, NPCs.ROCK_GOLEM_418,
+ NPCs.SHADE_425, NPCs.SHADE_426, NPCs.SHADE_427, NPCs.SHADE_428, NPCs.SHADE_429, NPCs.SHADE_430, NPCs.SHADE_431,
+ NPCs.TREE_SPIRIT_438, NPCs.TREE_SPIRIT_439, NPCs.TREE_SPIRIT_440, NPCs.TREE_SPIRIT_441, NPCs.TREE_SPIRIT_442, NPCs.TREE_SPIRIT_443,
+ NPCs.ZOMBIE_419, NPCs.ZOMBIE_420, NPCs.ZOMBIE_421, NPCs.ZOMBIE_422, NPCs.ZOMBIE_423, NPCs.ZOMBIE_424
+) {
+ override fun getXpMultiplier(self: NPC, attacker: Entity): Double {
+ return super.getXpMultiplier(self, attacker) / 16.0
+ }
+}
diff --git a/Server/src/main/content/global/ame/events/drilldemon/DrillDemonListeners.kt b/Server/src/main/content/global/ame/events/drilldemon/DrillDemonListeners.kt
index cb270f02f..2287de37d 100644
--- a/Server/src/main/content/global/ame/events/drilldemon/DrillDemonListeners.kt
+++ b/Server/src/main/content/global/ame/events/drilldemon/DrillDemonListeners.kt
@@ -79,7 +79,7 @@ class DrillDemonListeners : InteractionListener, MapArea {
}
override fun getRestrictions(): Array {
- return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS)
+ return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS, ZoneRestriction.OFF_MAP)
}
override fun areaEnter(entity: Entity) {
@@ -90,4 +90,4 @@ class DrillDemonListeners : InteractionListener, MapArea {
setComponentVisibility(entity.asPlayer(), 746, 12, true)
}
}
-}
\ No newline at end of file
+}
diff --git a/Server/src/main/content/global/ame/events/drilldemon/DrillDemonUtils.kt b/Server/src/main/content/global/ame/events/drilldemon/DrillDemonUtils.kt
index d81f3ed51..a6638fecb 100644
--- a/Server/src/main/content/global/ame/events/drilldemon/DrillDemonUtils.kt
+++ b/Server/src/main/content/global/ame/events/drilldemon/DrillDemonUtils.kt
@@ -1,8 +1,11 @@
package content.global.ame.events.drilldemon
+import content.global.ame.kidnapPlayer
+import content.global.ame.returnPlayer
import core.api.*
import core.game.interaction.QueueStrength
import core.game.node.entity.player.Player
+import core.game.node.entity.player.link.TeleportManager
import core.game.world.map.Location
import core.game.world.map.zone.ZoneBorders
import core.game.world.update.flag.context.Animation
@@ -11,7 +14,6 @@ import org.rs09.consts.NPCs
object DrillDemonUtils {
val DD_KEY_TASK = "/save:drilldemon:task"
- val DD_KEY_RETURN_LOC = "/save:original-loc"
val DD_SIGN_VARP = 531
val DD_SIGN_JOG = 0
val DD_SIGN_SITUP = 1
@@ -23,8 +25,7 @@ object DrillDemonUtils {
val DD_NPC = NPCs.SERGEANT_DAMIEN_2790
fun teleport(player: Player) {
- setAttribute(player, DD_KEY_RETURN_LOC, player.location)
- teleport(player, Location.create(3163, 4819, 0))
+ kidnapPlayer(player, Location.create(3163, 4819, 0), TeleportManager.TeleportType.INSTANT)
player.interfaceManager.closeDefaultTabs()
setComponentVisibility(player, 548, 69, true)
setComponentVisibility(player, 746, 12, true)
@@ -63,13 +64,8 @@ object DrillDemonUtils {
}
fun cleanup(player: Player) {
- player.locks.unlockTeleport()
- unlock(player)
- teleport(player, getAttribute(player, DD_KEY_RETURN_LOC, Location.create(3222, 3218, 0)))
- removeAttribute(player, DD_KEY_RETURN_LOC)
- removeAttribute(player, DD_KEY_TASK)
- removeAttribute(player, DD_CORRECT_OFFSET)
- removeAttribute(player, DD_CORRECT_COUNTER)
+ returnPlayer(player)
+ removeAttributes(player, DD_KEY_TASK, DD_CORRECT_OFFSET, DD_CORRECT_COUNTER)
player.interfaceManager.openDefaultTabs()
setComponentVisibility(player, 548, 69, false)
setComponentVisibility(player, 746, 12, false)
diff --git a/Server/src/main/content/global/ame/events/drilldemon/SeargentDamienNPC.kt b/Server/src/main/content/global/ame/events/drilldemon/SergeantDamienNPC.kt
similarity index 89%
rename from Server/src/main/content/global/ame/events/drilldemon/SeargentDamienNPC.kt
rename to Server/src/main/content/global/ame/events/drilldemon/SergeantDamienNPC.kt
index f767b0554..af4e8fe3c 100644
--- a/Server/src/main/content/global/ame/events/drilldemon/SeargentDamienNPC.kt
+++ b/Server/src/main/content/global/ame/events/drilldemon/SergeantDamienNPC.kt
@@ -10,11 +10,11 @@ import core.game.interaction.QueueStrength
import core.game.system.timer.impl.AntiMacro
import core.tools.secondsToTicks
-class SeargentDamienNPC(override var loot: WeightBasedTable? = null) : RandomEventNPC(NPCs.SERGEANT_DAMIEN_2790) {
+class SergeantDamienNPC(override var loot: WeightBasedTable? = null) : RandomEventNPC(NPCs.SERGEANT_DAMIEN_2790) {
override fun init() {
super.init()
- sendChat(player.username.capitalize() + "! Drop and give me 20!")
+ sendChat(player.username+ "! Drop and give me 20!")
queueScript(player, 4, QueueStrength.SOFT) { stage: Int ->
when (stage) {
0 -> {
diff --git a/Server/src/main/content/global/ame/events/evilbob/EvilBobListeners.kt b/Server/src/main/content/global/ame/events/evilbob/EvilBobListeners.kt
index fc71ebd68..f2a3e9134 100644
--- a/Server/src/main/content/global/ame/events/evilbob/EvilBobListeners.kt
+++ b/Server/src/main/content/global/ame/events/evilbob/EvilBobListeners.kt
@@ -1,5 +1,6 @@
package content.global.ame.events.evilbob
+import content.global.ame.returnPlayer
import core.ServerConstants
import core.api.*
import core.game.dialogue.FacialExpression
@@ -8,8 +9,6 @@ import core.game.interaction.InteractionListener
import core.game.interaction.QueueStrength
import core.game.node.entity.Entity
import core.game.node.entity.player.link.emote.Emotes
-import core.game.node.entity.skill.Skills
-import core.game.system.task.Pulse
import core.game.world.map.Location
import core.game.world.map.zone.ZoneBorders
import core.game.world.map.zone.ZoneRestriction
@@ -121,7 +120,7 @@ class EvilBobListeners : InteractionListener, MapArea {
}
3 -> {
sendMessage(player, "Welcome back to ${ServerConstants.SERVER_NAME}.")
- teleport(player, getAttribute(player, EvilBobUtils.prevLocation, Location.create(3222, 3219, 0)))
+ returnPlayer(player)
EvilBobUtils.reward(player)
EvilBobUtils.cleanup(player)
resetAnimator(player)
@@ -139,7 +138,7 @@ class EvilBobListeners : InteractionListener, MapArea {
}
override fun getRestrictions(): Array {
- return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS)
+ return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS, ZoneRestriction.OFF_MAP)
}
override fun areaEnter(entity: Entity) {
diff --git a/Server/src/main/content/global/ame/events/evilbob/EvilBobUtils.kt b/Server/src/main/content/global/ame/events/evilbob/EvilBobUtils.kt
index e07703ab9..d70eab940 100644
--- a/Server/src/main/content/global/ame/events/evilbob/EvilBobUtils.kt
+++ b/Server/src/main/content/global/ame/events/evilbob/EvilBobUtils.kt
@@ -1,7 +1,10 @@
package content.global.ame.events.evilbob
+import content.global.ame.kidnapPlayer
+import content.global.ame.returnPlayer
import core.api.*
import core.game.node.entity.player.Player
+import core.game.node.entity.player.link.TeleportManager
import core.game.node.entity.skill.Skills
import core.game.world.map.Location
import core.game.world.map.zone.ZoneBorders
@@ -13,10 +16,8 @@ import org.rs09.consts.NPCs
import org.rs09.consts.Scenery
object EvilBobUtils {
- const val prevLocation = "/save:original-loc"
const val eventComplete = "/save:evilbob:eventcomplete"
const val assignedFishingZone = "/save:evilbob:fishingzone"
- const val fishCaught = "evilbob:fishcaught"
const val attentive = "/save:evilbob:attentive"
const val servantHelpDialogueSeen = "/save:evilbob:servantdialogeseen"
const val attentiveNewSpot = "/save:evilbob:attentivenewspot"
@@ -53,14 +54,11 @@ object EvilBobUtils {
}
fun teleport(player: Player) {
- setAttribute(player, prevLocation, player.location)
- player.properties.teleportLocation = Location.create(3419, 4776, 0)
+ kidnapPlayer(player, Location.create(3419, 4776, 0), TeleportManager.TeleportType.INSTANT)
}
fun cleanup(player: Player) {
- player.locks.unlockTeleport()
- player.properties.teleportLocation = getAttribute(player, prevLocation, null)
- removeAttributes(player, assignedFishingZone, eventComplete, prevLocation, attentive, servantHelpDialogueSeen, attentiveNewSpot, startingDialogueSeen)
+ removeAttributes(player, assignedFishingZone, eventComplete, attentive, servantHelpDialogueSeen, attentiveNewSpot, startingDialogueSeen)
removeAll(player, Items.FISHLIKE_THING_6202)
removeAll(player, Items.FISHLIKE_THING_6202, Container.BANK)
removeAll(player, Items.FISHLIKE_THING_6206)
diff --git a/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt b/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt
index ac26b914b..5b065f567 100644
--- a/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt
+++ b/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt
@@ -9,9 +9,8 @@ import core.tools.RandomFunction
import org.rs09.consts.Items
import content.global.ame.RandomEventNPC
import core.api.utils.WeightBasedTable
-import java.lang.Integer.max
-val ids = 2463..2468
+val ids = (2463..2468).toList()
class EvilChickenNPC(override var loot: WeightBasedTable? = null) : RandomEventNPC(2463) {
val phrases = arrayOf("Bwuk","Bwuk bwuk bwuk","Flee from me, @name!","Begone, @name!","Bwaaaauuuk bwuk bwuk","MUAHAHAHAHAAA!")
@@ -19,8 +18,7 @@ class EvilChickenNPC(override var loot: WeightBasedTable? = null) : RandomEventN
override fun init() {
super.init()
- val index = max(0, (player.properties.combatLevel / 20) - 1)
- val id = ids.toList()[index]
+ val id = idForCombatLevel(ids, player)
this.transform(id)
this.attack(player)
sendChat(phrases.random().replace("@name",player.username.capitalize()))
diff --git a/Server/src/main/content/global/ame/events/freakyforester/FreakListeners.kt b/Server/src/main/content/global/ame/events/freakyforester/FreakListeners.kt
index e2d36acc0..8754a8d08 100644
--- a/Server/src/main/content/global/ame/events/freakyforester/FreakListeners.kt
+++ b/Server/src/main/content/global/ame/events/freakyforester/FreakListeners.kt
@@ -57,10 +57,10 @@ class FreakListeners : InteractionListener, MapArea {
}
override fun getRestrictions(): Array {
- return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS)
+ return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS, ZoneRestriction.OFF_MAP)
}
override fun areaEnter(entity: Entity) {
entity.locks.lockTeleport(1000000)
}
-}
\ No newline at end of file
+}
diff --git a/Server/src/main/content/global/ame/events/freakyforester/FreakUtils.kt b/Server/src/main/content/global/ame/events/freakyforester/FreakUtils.kt
index c08701297..e247bfeb1 100644
--- a/Server/src/main/content/global/ame/events/freakyforester/FreakUtils.kt
+++ b/Server/src/main/content/global/ame/events/freakyforester/FreakUtils.kt
@@ -1,16 +1,18 @@
package content.global.ame.events.freakyforester
+import content.global.ame.kidnapPlayer
+import content.global.ame.returnPlayer
import core.api.*
import org.rs09.consts.Items
import org.rs09.consts.NPCs
import core.game.node.entity.player.Player
+import core.game.node.entity.player.link.TeleportManager
import core.game.world.map.Location
import core.game.world.map.zone.ZoneBorders
import core.tools.RandomFunction
object FreakUtils{
const val freakNpc = NPCs.FREAKY_FORESTER_2458
- const val freakPreviousLoc = "/save:original-loc"
const val freakTask = "/save:freakyf:task"
const val freakComplete = "/save:freakyf:complete"
const val pheasantKilled = "freakyf:killed"
@@ -27,14 +29,12 @@ object FreakUtils{
}
fun teleport(player: Player) {
- setAttribute(player, freakPreviousLoc, player.location)
- teleport(player, Location.create(2599, 4777 ,0))
+ kidnapPlayer(player, Location.create(2599, 4777 ,0), TeleportManager.TeleportType.INSTANT)
}
fun cleanup(player: Player) {
- player.locks.unlockTeleport()
- player.properties.teleportLocation = getAttribute(player,freakPreviousLoc,null)
- removeAttributes(player, freakPreviousLoc, freakTask, freakComplete, pheasantKilled)
+ returnPlayer(player)
+ removeAttributes(player, freakTask, freakComplete, pheasantKilled)
removeAll(player, Items.RAW_PHEASANT_6178)
removeAll(player, Items.RAW_PHEASANT_6178, Container.BANK)
removeAll(player, Items.RAW_PHEASANT_6179)
diff --git a/Server/src/main/content/global/ame/events/maze/MazeInterface.kt b/Server/src/main/content/global/ame/events/maze/MazeInterface.kt
new file mode 100644
index 000000000..108d456ca
--- /dev/null
+++ b/Server/src/main/content/global/ame/events/maze/MazeInterface.kt
@@ -0,0 +1,277 @@
+package content.global.ame.events.maze
+
+import content.global.ame.returnPlayer
+import core.api.*
+import core.api.utils.WeightBasedTable
+import core.api.utils.WeightedItem
+import core.game.event.EventHook
+import core.game.event.TickEvent
+import core.game.global.action.DoorActionHandler
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.interaction.QueueStrength
+import core.game.node.entity.Entity
+import core.game.node.entity.player.Player
+import core.game.system.task.Pulse
+import core.game.world.GameWorld.Pulser
+import core.game.world.map.Location
+import core.game.world.map.zone.ZoneBorders
+import core.game.world.map.zone.ZoneRestriction
+import core.game.world.update.flag.context.Graphics
+import org.rs09.consts.*
+
+class MazeInterface : InteractionListener, EventHook, MapArea {
+ companion object {
+ const val MAZE_TIMER_INTERFACE = Components.MAZETIMER_209
+ const val MAZE_TIMER_VARP = 531 // Interface 209 child 2 config: [531, 0]
+ const val MAZE_ATTRIBUTE_TICKS_LEFT = "maze:percent-ticks-left"
+ const val MAZE_ATTRIBUTE_CHESTS_OPEN = "/save:maze:chests-opened"
+
+ val STARTING_POINTS = arrayOf(
+ Location(2928, 4553, 0),
+ Location(2917, 4553, 0),
+ Location(2908, 4555, 0),
+ Location(2891, 4589, 0),
+ Location(2891, 4595, 0),
+ Location(2891, 4595, 0),
+ Location(2926, 4597, 0),
+ Location(2931, 4597, 0),
+ // There's 2 more, but there isn't a door for them...
+ )
+
+ val REWARD_ITEM = intArrayOf(
+ Items.COINS_995,
+ Items.FEATHER_314,
+ Items.IRON_ARROW_884,
+ Items.CHAOS_RUNE_562,
+ Items.STEEL_ARROW_886,
+ Items.DEATH_RUNE_560,
+ Items.COAL_454,
+ Items.NATURE_RUNE_561,
+ Items.MITHRIL_ORE_448
+ )
+
+ val ITEM_DIVISOR = arrayOf(
+ 1.0,
+ 2.0,
+ 3.0,
+ 9.0,
+ 12.0,
+ 18.0,
+ 45.0,
+ 162.0,
+ 180.0,
+ )
+
+ val CHEST_REWARDS = WeightBasedTable.create(
+ WeightedItem(Items.AIR_RUNE_556,15,15,1.0),
+ WeightedItem(Items.WATER_RUNE_555,10,10,1.0),
+ WeightedItem(Items.EARTH_RUNE_557,10,10,1.0),
+ WeightedItem(Items.FIRE_RUNE_554,10,10,1.0),
+ WeightedItem(Items.BRONZE_ARROW_882,20,20,1.0),
+ WeightedItem(Items.BRONZE_BOLTS_877,10,10,1.0),
+ WeightedItem(Items.IRON_ARROW_884,15,15,1.0),
+ WeightedItem(Items.ATTACK_POTION2_123,1,1,1.0),
+ WeightedItem(Items.STRENGTH_POTION2_117,1,1,1.0),
+ WeightedItem(Items.DEFENCE_POTION2_135,1,1,1.0),
+ )
+
+ fun initMaze(player: Player) {
+ setAttribute(player, MAZE_ATTRIBUTE_TICKS_LEFT, 300)
+ setVarp(player, MAZE_TIMER_VARP, (getAttribute(player, MAZE_ATTRIBUTE_TICKS_LEFT, 0) / 3),false)
+ openOverlay(player, MAZE_TIMER_INTERFACE)
+ sendMessage(player, "You need to reach the maze center, then you'll be returned to where you were.")
+ sendNPCDialogue(player, NPCs.MYSTERIOUS_OLD_MAN_410, "You need to reach the maze center, then you'll be returned to where you were.")
+ }
+
+ fun calculateLoot(player: Player) {
+ val randomNumber = (0..8).random()
+ val totalLevel = player.getSkills().totalLevel.toDouble()
+ val rewardPotential = getAttribute(player, MAZE_ATTRIBUTE_TICKS_LEFT, 0).toDouble() / 300.0
+ val itemDivisor = ITEM_DIVISOR[randomNumber]
+ val itemQuantity = (totalLevel * rewardPotential * 3.33) / itemDivisor
+ // sendMessage(player, "Maze reward calculation: $totalLevel * $rewardPotential * 3.33 / $itemDivisor = $itemQuantity")
+ if (itemQuantity.toInt() > 0) {
+ addItemOrDrop(player, REWARD_ITEM[randomNumber], itemQuantity.toInt())
+ }
+ }
+
+ /**
+ * Chest Location to rotation mapping.
+ * This is needed as it is impossible to obtain the underlying chest scenery for the rotation.
+ * 0: Facing North, 1: Facing East, 2: Facing South, 3: Facing West
+ */
+ val chestLocationRotationMap = mapOf(
+ Location(2930, 4595, 0).toString() to 2,
+ Location(2924, 4572, 0).toString() to 2,
+ Location(2925, 4573, 0).toString() to 0,
+ Location(2900, 4578, 0).toString() to 2,
+ Location(2901, 4560, 0).toString() to 1,
+ Location(2890, 4599, 0).toString() to 2,
+ Location(2896, 4591, 0).toString() to 2,
+ Location(2895, 4592, 0).toString() to 1,
+ Location(2901, 4560, 0).toString() to 3,
+ Location(2918, 4590, 0).toString() to 1,
+ Location(2917, 4590, 0).toString() to 3,
+ )
+
+ /**
+ * Chest Interaction workaround
+ *
+ * The issue here is that the walls(3626) of the Maze are overlapping some(not all) chest sceneries.
+ *
+ * The types for the wallScenery:
+ * Type 0 - flat panel |
+ * Type 2 - right angle panel with rotation 0:r 1:7 2:> 3:L
+ * Type 3 - corner post . for angle edges of walls
+ */
+ fun overrideScenery(wallScenery: core.game.node.scenery.Scenery, chestSceneryId: Int): core.game.node.scenery.Scenery {
+ if (wallScenery.id == chestSceneryId) {
+ replaceScenery(wallScenery, Scenery.CHEST_3636, 30)
+ wallScenery.isActive = true
+ return wallScenery // Return the chest scenery as the wallScenery isn't there.
+ }
+
+ addScenery(Scenery.CHEST_3636, wallScenery.location, chestLocationRotationMap[wallScenery.location.toString()] ?: 0, 10)
+ addScenery(wallScenery)
+ // replaceScenery(newChestScenery, Scenery.CHEST_3636, 3) // didn't work for an underlying scenery
+ // I did a world pulse since everyone will get to see the chest open.
+ Pulser.submit(object : Pulse(30) {
+ override fun pulse(): Boolean {
+ addScenery(Scenery.CHEST_3635, wallScenery.location, chestLocationRotationMap[wallScenery.location.toString()] ?: 0, 10)
+ addScenery(wallScenery)
+ return true
+ }
+ })
+ // Return the chest scenery to replace PacketProcessor so that MISMATCH will not happen.
+ return core.game.node.scenery.Scenery(
+ chestSceneryId,
+ wallScenery.location,
+ chestLocationRotationMap[wallScenery.location.toString()] ?: 0
+ )
+ }
+ }
+
+ override fun defineListeners() {
+
+ // This somehow doesn't trigger as the scenery.id != objId (3626 != 3635)
+ on(Scenery.CHEST_3635, IntType.SCENERY, "open") { player, node ->
+ if (getAttribute(player, MAZE_ATTRIBUTE_TICKS_LEFT, 0) > 0 && getAttribute(player, MAZE_ATTRIBUTE_CHESTS_OPEN, 0) < 10) {
+ animate(player, 536)
+ // val actualScenery = RegionManager.getObject(node.location.z, node.location.x, node.location.y, 3626)
+ val tableRoll = CHEST_REWARDS.roll()
+ addItemOrBank(player, tableRoll[0].id)
+ when (tableRoll[0].id){
+ Items.AIR_RUNE_556 -> sendItemDialogue(player, Items.AIR_RUNE_556, "You've found some air runes!")
+ Items.WATER_RUNE_555 -> sendItemDialogue(player, Items.WATER_RUNE_555, "You've found some water runes!")
+ Items.EARTH_RUNE_557 -> sendItemDialogue(player, Items.EARTH_RUNE_557, "You've found some earth runes!")
+ Items.FIRE_RUNE_554 -> sendItemDialogue(player, Items.FIRE_RUNE_554, "You've found some fire runes!")
+ Items.BRONZE_ARROW_882 -> sendItemDialogue(player, Items.BRONZE_ARROW_882, "You've found some bronze arrows!")
+ Items.BRONZE_BOLTS_877 -> sendItemDialogue(player, Items.BRONZE_BOLTS_877, "You've found some bronze bolts!")
+ Items.IRON_ARROW_884 -> sendItemDialogue(player, Items.IRON_ARROW_884, "You've found some iron arrows!")
+ Items.ATTACK_POTION2_123 -> sendItemDialogue(player, Items.ATTACK_POTION2_123, "You've found an attack potion!")
+ Items.STRENGTH_POTION2_117 -> sendItemDialogue(player, Items.STRENGTH_POTION2_117, "You've found a strength potion!")
+ Items.DEFENCE_POTION2_135 -> sendItemDialogue(player, Items.DEFENCE_POTION2_135, "You've found a defence potion!")
+ }
+ setAttribute(player, MAZE_ATTRIBUTE_CHESTS_OPEN, getAttribute(player, MAZE_ATTRIBUTE_CHESTS_OPEN, 0))
+ } else {
+ sendMessage(player,"You find nothing of interest.")
+ }
+ return@on true
+ }
+
+ on(Scenery.CHEST_3636, SCENERY, "search") { player, node ->
+ sendMessage(player,"You find nothing of interest.")
+ return@on true
+ }
+
+ on(Scenery.WALL_3626, IntType.SCENERY, "open") { player, node ->
+ sendMessage(player, "That bit doesn't open.") // 0xBrLo9woIY
+ return@on true
+ }
+
+ on(Scenery.WALL_3628, IntType.SCENERY, "open") { player, node ->
+ // Door opening workaround
+ // Ignore 3629(WALL_3629) and 3630(WALL_3630) in handleAutowalkDoor ignoreSecondDoor
+ DoorActionHandler.handleAutowalkDoor(player, node as core.game.node.scenery.Scenery)
+ return@on true
+ }
+
+ on(Scenery.STRANGE_SHRINE_3634, IntType.SCENERY, "touch") { player, node ->
+ player.unhook(this)
+ closeOverlay(player)
+ queueScript(player, 0, QueueStrength.SOFT) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ lock(player, 6)
+ sendGraphics(Graphics(86, 0, 3), player.location)
+ animate(player,862)
+ return@queueScript delayScript(player, 6)
+ }
+ 1 -> {
+ lock(player, 6)
+ sendGraphics(Graphics(1576, 0, 0), player.location)
+ animate(player,8939)
+ playAudio(player, Sounds.TELEPORT_ALL_200)
+ return@queueScript delayScript(player, 3)
+ }
+ 2 -> {
+ returnPlayer(player)
+ sendGraphics(Graphics(1577, 0, 0), player.location)
+ animate(player,8941)
+ closeOverlay(player)
+ return@queueScript delayScript(player, 1)
+ }
+ 3 -> {
+ calculateLoot(player)
+ removeAttribute(player, MAZE_ATTRIBUTE_TICKS_LEFT)
+ removeAttribute(player, MAZE_ATTRIBUTE_CHESTS_OPEN)
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+
+ return@on true
+ }
+ }
+
+ override fun process(entity: Entity, event: TickEvent) {
+ if (entity is Player) {
+ if (getAttribute(entity, MAZE_ATTRIBUTE_TICKS_LEFT, 0) > 0) {
+ setAttribute(entity, MAZE_ATTRIBUTE_TICKS_LEFT, getAttribute(entity, MAZE_ATTRIBUTE_TICKS_LEFT, 0) - 1)
+ }
+ setVarp(entity, MAZE_TIMER_VARP, (getAttribute(entity, MAZE_ATTRIBUTE_TICKS_LEFT, 0) / 3), false)
+ }
+ }
+
+ override fun defineAreaBorders(): Array {
+ return arrayOf(getRegionBorders(11591))
+ }
+
+ override fun getRestrictions(): Array {
+ return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS, ZoneRestriction.TELEPORT, ZoneRestriction.OFF_MAP)
+ }
+
+ override fun areaEnter(entity: Entity) {
+ if (entity is Player) {
+ sendMessage(entity, "Head for the center of the maze.")
+ entity.interfaceManager.removeTabs(0, 1, 2, 3, 4, 5, 6, 12)
+ openOverlay(entity, MAZE_TIMER_INTERFACE)
+ }
+ }
+
+ override fun areaLeave(entity: Entity, logout: Boolean) {
+ if (entity is Player) {
+ entity.interfaceManager.restoreTabs()
+ closeOverlay(entity)
+ entity.unhook(this)
+ }
+ }
+ override fun entityStep(entity: Entity, location: Location, lastLocation: Location) {
+ if (entity is Player) {
+ entity.hook(Event.Tick, this)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/ame/events/maze/MazeNPC.kt b/Server/src/main/content/global/ame/events/maze/MazeNPC.kt
new file mode 100644
index 000000000..e4befe00e
--- /dev/null
+++ b/Server/src/main/content/global/ame/events/maze/MazeNPC.kt
@@ -0,0 +1,57 @@
+package content.global.ame.events.maze
+
+import content.global.ame.RandomEventNPC
+import content.global.ame.kidnapPlayer
+import core.api.*
+import core.api.utils.WeightBasedTable
+import core.game.interaction.QueueStrength
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.link.TeleportManager
+import core.game.system.timer.impl.AntiMacro
+import core.game.world.map.Location
+import core.game.world.map.build.DynamicRegion
+import core.game.world.update.flag.context.Graphics
+import org.rs09.consts.NPCs
+import org.rs09.consts.Sounds
+
+class MazeNPC(var type: String = "", override var loot: WeightBasedTable? = null) : RandomEventNPC(NPCs.MYSTERIOUS_OLD_MAN_410) {
+
+ override fun init() {
+ super.init()
+ sendChat("Aha, you'll do ${player.username}!")
+ face(player)
+ queueScript(player, 4, QueueStrength.SOFT) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ lock(player, 6)
+ sendGraphics(Graphics(1576, 0, 0), player.location)
+ animate(player,8939)
+ playAudio(player, Sounds.TELEPORT_ALL_200)
+ return@queueScript delayScript(player, 3)
+ }
+ 1 -> {
+ MazeInterface.initMaze(player)
+ // Note: This event is NOT instanced:
+ // Sources:
+ // https://youtu.be/2gpzn9oNdy0 (2007)
+ // https://youtu.be/Tni1HURgnxg (2008)
+ // https://youtu.be/igdwDZOv9LU (2008)
+ // https://youtu.be/0oBCkLArUmc (2011 - even with personal Mysterious Old Man) - "Sorry, this is not the old man you are looking for."
+ // https://youtu.be/FMuKZm-Ikgs (2011)
+ // val region = DynamicRegion.create(11591)
+ kidnapPlayer(player, MazeInterface.STARTING_POINTS.random(), TeleportManager.TeleportType.INSTANT) // 10 random spots
+ AntiMacro.terminateEventNpc(player)
+ sendGraphics(Graphics(1577, 0, 0), player.location)
+ animate(player,8941)
+ removeAttribute(player, MazeInterface.MAZE_ATTRIBUTE_CHESTS_OPEN)
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+ }
+
+ override fun talkTo(npc: NPC) {
+ // Do nothing.
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/ame/events/pillory/PilloryInterface.kt b/Server/src/main/content/global/ame/events/pillory/PilloryInterface.kt
new file mode 100644
index 000000000..f48fc76f4
--- /dev/null
+++ b/Server/src/main/content/global/ame/events/pillory/PilloryInterface.kt
@@ -0,0 +1,219 @@
+package content.global.ame.events.pillory
+
+import content.global.ame.RandomEvents
+import content.global.ame.returnPlayer
+import core.api.*
+import core.game.dialogue.FacialExpression
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.node.entity.player.Player
+import core.game.interaction.InterfaceListener
+import core.game.interaction.QueueStrength
+import core.game.node.entity.Entity
+import core.game.world.map.Location
+import core.game.world.map.zone.ZoneBorders
+import core.game.world.map.zone.ZoneRestriction
+import core.game.world.update.flag.context.Graphics
+import org.rs09.consts.NPCs
+import org.rs09.consts.Scenery
+import org.rs09.consts.Sounds
+
+/**
+ * Pillory Unlocking Interface PILLORY_189
+ *
+ * https://www.youtube.com/watch?v=caWn7pE2mkE
+ * https://www.youtube.com/watch?v=TMVR5cZZwZ0
+ * https://www.youtube.com/watch?v=Ym9LCDP-Q74
+ * https://www.youtube.com/watch?v=_vn0QZTtI6U (Failure)
+ * https://www.youtube.com/watch?v=zmXDikQIua4
+ *
+ * Child IDs
+ * 4 - Rotating Lock Model
+ * 5 6 7 - Swinging Keys Models
+ * 8 9 10 - Buttons for the Swinging Keys Models
+ * 11 12 13 14 15 16 - Padlocks at the Top
+ * 17 18 19 20 21 22 - Padlocks stars? Model 15272, Anim 4135
+ *
+ * Model IDs
+ * Using the amazeballs ::listifmodels
+ * 9749, 9750, 9751, 9752 - Swinging Keys Models
+ * 9753, 9754, 9755, 9756 - Rotating Lock Models
+ * 9757 9758 locked unlock
+ */
+class PilloryInterface : InterfaceListener, InteractionListener, MapArea {
+ companion object {
+ const val PILLORY_LOCK_INTERFACE = 189
+ const val PILLORY_ATTRIBUTE_EVENT_KEYS = "pillory:event-keys"
+ const val PILLORY_ATTRIBUTE_EVENT_LOCK = "pillory:event-lock"
+ const val PILLORY_ATTRIBUTE_NEEDED_TO_GET_CORRECT = "/save:pillory:target-correct"
+ const val PILLORY_ATTRIBUTE_CORRECT_COUNTER = "/save:pillory:num-correct"
+
+ val LOCATIONS = arrayOf(
+ // Varrock Cages
+ Location(3226, 3407, 0),
+ Location(3228, 3407, 0),
+ Location(3230, 3407, 0),
+ // Seers Village Cages
+ Location(2681, 3489, 0),
+ Location(2683, 3489, 0),
+ Location(2685, 3489, 0),
+ // Yannile Cages
+ Location(2604, 3105, 0),
+ Location(2606, 3105, 0),
+ Location(2608, 3105, 0),
+ )
+
+ fun initPillory(player: Player) {
+ setAttribute(player, PILLORY_ATTRIBUTE_NEEDED_TO_GET_CORRECT, 3)
+ setAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, 0)
+ player.dialogueInterpreter.sendPlainMessage(true, "", "Solve the pillory puzzle to be returned to where you came from.")
+ }
+
+ fun randomPillory(player: Player) {
+ // Shuffle all 4 kinds of keys in, pick 3 for the keys, pick 1 from the 3 as the lock.
+ val keys = (0..3).toIntArray().let{ keys -> keys.shuffle(); return@let keys }
+ val lock = intArrayOf(keys[1], keys[2], keys[3]).random() // Last 3 as there are 4 keys. key[0] is fallback.
+
+ setAttribute(player, PILLORY_ATTRIBUTE_EVENT_KEYS, keys)
+ setAttribute(player, PILLORY_ATTRIBUTE_EVENT_LOCK, lock)
+
+ player.packetDispatch.sendModelOnInterface(9753 + lock, PILLORY_LOCK_INTERFACE, 4, 0)
+ player.packetDispatch.sendModelOnInterface(9749 + keys[1], PILLORY_LOCK_INTERFACE, 5, 0)
+ player.packetDispatch.sendModelOnInterface(9749 + keys[2], PILLORY_LOCK_INTERFACE, 6, 0)
+ player.packetDispatch.sendModelOnInterface(9749 + keys[3], PILLORY_LOCK_INTERFACE, 7, 0)
+
+ val numberToGetCorrect = getAttribute(player, PILLORY_ATTRIBUTE_NEEDED_TO_GET_CORRECT, 3)
+ val correctCount = getAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, 0)
+ for (i in 1.. 6) {
+ // Set if lock is red or green.
+ if (i <= correctCount) {
+ player.packetDispatch.sendModelOnInterface(9758, PILLORY_LOCK_INTERFACE, 10 + i, 0)
+ } else {
+ player.packetDispatch.sendModelOnInterface(9757, PILLORY_LOCK_INTERFACE, 10 + i, 0)
+ }
+ // Set if hide or show lock.
+ player.packetDispatch.sendInterfaceConfig(PILLORY_LOCK_INTERFACE, 10 + i, i > numberToGetCorrect)
+ }
+ }
+
+ fun selectedKey(player: Player, buttonID: Int) {
+ val keys = getAttribute(player, PILLORY_ATTRIBUTE_EVENT_KEYS, intArrayOf(0, 0, 0))
+ val lock = getAttribute(player, PILLORY_ATTRIBUTE_EVENT_LOCK, -1)
+ if (keys[buttonID] == lock) {
+ // CORRECT ANSWER
+ setAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, getAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, 0) + 1)
+ if (getAttribute(player, PILLORY_ATTRIBUTE_NEEDED_TO_GET_CORRECT, 3) <= getAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, -1)) {
+ player.dialogueInterpreter.sendPlainMessage(true, "", "You've escaped!")
+ sendMessage(player, "You've escaped!")
+ removeAttribute(player, PILLORY_ATTRIBUTE_NEEDED_TO_GET_CORRECT)
+ removeAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER)
+ closeInterface(player)
+ queueScript(player, 0, QueueStrength.SOFT) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ lock(player, 6)
+ sendGraphics(Graphics(1576, 0, 0), player.location)
+ animate(player,8939)
+ playAudio(player, Sounds.TELEPORT_ALL_200)
+ return@queueScript delayScript(player, 3)
+ }
+ 1 -> {
+ val loot = RandomEvents.CERTER.loot!!.roll(player)[0]
+ addItemOrDrop(player, loot.id, loot.amount)
+ returnPlayer(player)
+ sendGraphics(Graphics(1577, 0, 0), player.location)
+ animate(player,8941)
+ closeInterface(player)
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+ return
+ }
+ randomPillory(player)
+ player.dialogueInterpreter.sendPlainMessage(
+ true,
+ "",
+ "Correct!",
+ "" + getAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, 0) + " down, " +
+ (getAttribute(player, PILLORY_ATTRIBUTE_NEEDED_TO_GET_CORRECT, 3) - getAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, 0)) + " to go!")
+ // Animation for the star, but it doesn't work.
+ player.packetDispatch.sendInterfaceConfig(PILLORY_LOCK_INTERFACE, 16 + getAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, 1), false)
+ sendAnimationOnInterface(player, 4135, PILLORY_LOCK_INTERFACE, 16 + getAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, 1))
+ } else {
+ // WRONG ANSWER
+ player.dialogueInterpreter.close()
+ player.dialogueInterpreter.sendDialogues(NPCs.TRAMP_2794 , FacialExpression.OLD_ANGRY1, "Bah, that's not right.","Use the key that matches the hole", "in the spinning lock.")
+ if (getAttribute(player, PILLORY_ATTRIBUTE_NEEDED_TO_GET_CORRECT, 0) < 6) {
+ setAttribute(player, PILLORY_ATTRIBUTE_NEEDED_TO_GET_CORRECT, getAttribute(player, PILLORY_ATTRIBUTE_NEEDED_TO_GET_CORRECT, 0) + 1)
+ }
+ setAttribute(player, PILLORY_ATTRIBUTE_CORRECT_COUNTER, 0)
+ closeInterface(player)
+ }
+ }
+ }
+
+ override fun defineInterfaceListeners() {
+ on(PILLORY_LOCK_INTERFACE){ player, component, opcode, buttonID, slot, itemID ->
+ when (buttonID) {
+ 8 -> selectedKey(player, 1)
+ 9 -> selectedKey(player, 2)
+ 10 -> selectedKey(player, 3)
+ }
+ return@on true
+ }
+
+ onOpen(PILLORY_LOCK_INTERFACE){ player, component ->
+ return@onOpen true
+ }
+ }
+
+ override fun defineListeners() {
+ on(Scenery.CAGE_6836, IntType.SCENERY, "unlock") { player, node ->
+ if (player.location in LOCATIONS) { // When you aren't inside.
+ randomPillory(player)
+ openInterface(player, PILLORY_LOCK_INTERFACE)
+ player.dialogueInterpreter.sendPlainMessage(true, "", "Pick the swinging key that matches the", "hole in the spinning lock.")
+ } else {
+ sendMessage(player, "You can't unlock the pillory, you'll let all the prisoners out!")
+ }
+ return@on true
+ }
+ }
+
+ override fun defineAreaBorders(): Array {
+ return arrayOf(
+ // Varrock Cages
+ ZoneBorders(3226, 3407, 3226, 3407),
+ ZoneBorders(3228, 3407, 3228, 3407),
+ ZoneBorders(3230, 3407, 3230, 3407),
+ // Seers Village Cages
+ ZoneBorders(2681, 3489, 2681, 3489),
+ ZoneBorders(2683, 3489, 2683, 3489),
+ ZoneBorders(2685, 3489, 2685, 3489),
+ // Yannile Cages
+ ZoneBorders(2604, 3105, 2604, 3105),
+ ZoneBorders(2606, 3105, 2606, 3105),
+ ZoneBorders(2608, 3105, 2608, 3105),
+ )
+ }
+
+ override fun getRestrictions(): Array {
+ return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS, ZoneRestriction.TELEPORT, ZoneRestriction.OFF_MAP)
+ }
+
+ override fun areaEnter(entity: Entity) {
+ if (entity is Player) {
+ entity.interfaceManager.removeTabs(0, 1, 2, 3, 4, 5, 6, 12)
+ }
+ }
+
+ override fun areaLeave(entity: Entity, logout: Boolean) {
+ if (entity is Player) {
+ entity.interfaceManager.restoreTabs()
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/ame/events/pillory/PilloryNPC.kt b/Server/src/main/content/global/ame/events/pillory/PilloryNPC.kt
new file mode 100644
index 000000000..f833d9ce2
--- /dev/null
+++ b/Server/src/main/content/global/ame/events/pillory/PilloryNPC.kt
@@ -0,0 +1,50 @@
+package content.global.ame.events.pillory
+
+import content.global.ame.RandomEventNPC
+import content.global.ame.kidnapPlayer
+import core.api.*
+import core.api.utils.WeightBasedTable
+import core.game.interaction.QueueStrength
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.link.TeleportManager
+import core.game.system.timer.impl.AntiMacro
+import core.game.world.map.Location
+import core.game.world.update.flag.context.Graphics
+import org.rs09.consts.NPCs
+import org.rs09.consts.Sounds
+
+// "::revent [-p] player name [-e event name]"
+class PilloryNPC(override var loot: WeightBasedTable? = null) : RandomEventNPC(NPCs.PILLORY_GUARD_2791) {
+
+ override fun init() {
+ super.init()
+ sendChat("${player.username}, you're under arrest!")
+ face(player)
+ player.dialogueInterpreter.sendPlainMessage(true, "", "Solve the pillory puzzle to be returned to where you came from.")
+ queueScript(player, 4, QueueStrength.SOFT) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ lock(player, 6)
+ sendGraphics(Graphics(1576, 0, 0), player.location)
+ animate(player,8939)
+ playAudio(player, Sounds.TELEPORT_ALL_200)
+ return@queueScript delayScript(player, 3)
+ }
+ 1 -> {
+ PilloryInterface.initPillory(player)
+ val dest = PilloryInterface.LOCATIONS.random() //9 random spots!
+ kidnapPlayer(player, dest, TeleportManager.TeleportType.INSTANT)
+ AntiMacro.terminateEventNpc(player)
+ sendGraphics(Graphics(1577, 0, 0), player.location)
+ animate(player,8941)
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+ }
+
+ override fun talkTo(npc: NPC) {
+ //player.dialogueInterpreter.open(FreakyForesterDialogue(),npc)
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/ame/events/quizmaster/QuizMasterBorders.kt b/Server/src/main/content/global/ame/events/quizmaster/QuizMasterBorders.kt
new file mode 100644
index 000000000..860d4d7dc
--- /dev/null
+++ b/Server/src/main/content/global/ame/events/quizmaster/QuizMasterBorders.kt
@@ -0,0 +1,37 @@
+package content.global.ame.events.quizmaster
+
+import core.api.*
+import core.game.node.entity.Entity
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.game.world.map.Location
+import core.game.world.map.zone.ZoneBorders
+import core.game.world.map.zone.ZoneRestriction
+import org.rs09.consts.NPCs
+
+class QuizMasterBorders : MapArea {
+ override fun defineAreaBorders(): Array {
+ return arrayOf(getRegionBorders(7754))
+ }
+
+ override fun getRestrictions(): Array {
+ return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS, ZoneRestriction.TELEPORT, ZoneRestriction.OFF_MAP)
+ }
+
+ override fun areaEnter(entity: Entity) {
+ if (entity is Player) {
+ entity.interfaceManager.removeTabs(0, 1, 2, 3, 4, 5, 6, 12)
+ face(entity, Location(1952, 4768, 1))
+ animate(entity,2378)
+ openDialogue(entity, QuizMasterDialogueFile(), NPC(NPCs.QUIZ_MASTER_2477))
+ }
+ }
+
+ override fun areaLeave(entity: Entity, logout: Boolean) {
+ if (entity is Player) {
+ entity.interfaceManager.restoreTabs()
+ //closeOverlay(entity)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/ame/events/quizmaster/QuizMasterDialogueFile.kt b/Server/src/main/content/global/ame/events/quizmaster/QuizMasterDialogueFile.kt
new file mode 100644
index 000000000..4790a8550
--- /dev/null
+++ b/Server/src/main/content/global/ame/events/quizmaster/QuizMasterDialogueFile.kt
@@ -0,0 +1,129 @@
+package content.global.ame.events.quizmaster
+
+import content.global.ame.returnPlayer
+import core.ServerConstants
+import core.api.*
+import core.api.utils.WeightBasedTable
+import core.api.utils.WeightedItem
+import core.game.dialogue.DialogueFile
+import core.game.dialogue.FacialExpression
+import core.game.interaction.QueueStrength
+import core.game.node.entity.player.Player
+import core.tools.END_DIALOGUE
+import org.rs09.consts.Components
+import org.rs09.consts.Items
+
+class QuizMasterDialogueFile : DialogueFile() {
+ companion object {
+ const val QUIZMASTER_INTERFACE = Components.MACRO_QUIZSHOW_191
+ const val QUIZMASTER_ATTRIBUTE_QUESTIONS_CORRECT = "/save:quizmaster:questions-correct"
+ const val QUIZMASTER_ATTRIBUTE_RANDOM_ANSWER = "quizmaster:random-answer"
+
+ /*
+ // Golden Models:
+ 8828 ADAMANT_BATTLEAXE_1371
+ 8829 SALMON_329
+ 8830 TROUT_333
+ 8831 NECKLACE
+ 8832 WOODEN_SHIELD_1171
+ 8833 BRONZE_MED_HELM_1139
+ 8834 RING
+ 8835 SECATEURS_5329
+ 8836 BRONZE_SWORD_1277
+ 8837 GARDENING_TROWEL_5325
+ */
+ val sets = arrayOf(
+ intArrayOf(8828, 8829, 8829),
+ intArrayOf(8831, 8837, 8835),
+ intArrayOf(8830, 8832, 8833),
+ intArrayOf(8835, 8834, 8831),
+ intArrayOf(8837, 8836, 8828),
+ )
+
+ fun randomQuestion(player: Player): Int {
+ val randomSet = intArrayOf(*sets.random())
+ val answer = intArrayOf(*randomSet)[0]
+ randomSet.shuffle()
+ val correctButton = randomSet.indexOf(answer) + 2 // buttons are 3,4,5
+
+ player.packetDispatch.sendModelOnInterface(randomSet[0], QUIZMASTER_INTERFACE, 6, 512)
+ player.packetDispatch.sendModelOnInterface(randomSet[1], QUIZMASTER_INTERFACE, 7, 512)
+ player.packetDispatch.sendModelOnInterface(randomSet[2], QUIZMASTER_INTERFACE, 8, 512)
+ player.packetDispatch.sendAngleOnInterface(QUIZMASTER_INTERFACE, 6, 512,0,0)
+ player.packetDispatch.sendAngleOnInterface(QUIZMASTER_INTERFACE, 7, 512,0,0)
+ player.packetDispatch.sendAngleOnInterface(QUIZMASTER_INTERFACE, 8, 512,0,0)
+
+ return correctButton
+ }
+
+ // Random Item should be "Mystery Box", but the current MYSTERY_BOX_6199 is already inauthentically used by Giftmas.
+ val tableRoll = WeightBasedTable.create(
+ WeightedItem(Items.LAMP_2528, 1, 1, 1.0, false),
+ WeightedItem(Items.CABBAGE_1965, 1, 1, 1.0, false),
+ WeightedItem(Items.DIAMOND_1601, 1, 1, 1.0, false),
+ WeightedItem(Items.BUCKET_1925, 1, 1, 1.0, false),
+ WeightedItem(Items.FLIER_956, 1, 1, 1.0, false),
+ WeightedItem(Items.OLD_BOOT_685, 1, 1, 1.0, false),
+ WeightedItem(Items.BODY_RUNE_559, 1, 1, 1.0, false),
+ WeightedItem(Items.ONION_1957, 1, 1, 1.0, false),
+ WeightedItem(Items.MITHRIL_SCIMITAR_1329, 1, 1, 1.0, false),
+ WeightedItem(Items.CASKET_405, 1, 1, 1.0, false),
+ WeightedItem(Items.STEEL_PLATEBODY_1119, 1, 1, 1.0, false),
+ WeightedItem(Items.NATURE_RUNE_561, 20, 20, 1.0, false),
+ )
+ }
+
+
+ override fun handle(componentID: Int, buttonID: Int) {
+ when (stage) {
+ 0 -> npc(FacialExpression.FRIENDLY,"WELCOME to the GREATEST QUIZ SHOW in the", "whole of ${ServerConstants.SERVER_NAME}:", " O D D O N E O U T").also { stage++ }
+ 1 -> player(FacialExpression.THINKING, "I'm sure I didn't ask to take part in a quiz show...").also { stage++ }
+ 2 -> npc(FacialExpression.FRIENDLY,"Please welcome our newest contestant:", " ${player?.username}!", "Just pick the O D D O N E O U T.", "Four questions right, and then you win!").also { stage++ }
+ 3 -> {
+ setAttribute(player!!, QUIZMASTER_ATTRIBUTE_RANDOM_ANSWER, randomQuestion(player!!))
+ player!!.interfaceManager.openChatbox(QUIZMASTER_INTERFACE)
+ stage++
+ }
+ 4-> {
+ if (buttonID == getAttribute(player!!, QUIZMASTER_ATTRIBUTE_RANDOM_ANSWER, 0)) {
+ // Correct Answer
+ setAttribute(player!!, QUIZMASTER_ATTRIBUTE_QUESTIONS_CORRECT, getAttribute(player!!, QUIZMASTER_ATTRIBUTE_QUESTIONS_CORRECT, 0) + 1)
+ if (getAttribute(player!!, QUIZMASTER_ATTRIBUTE_QUESTIONS_CORRECT, 0) >= 4) {
+ npc(FacialExpression.FRIENDLY," CONGRATULATIONS!", "You are a WINNER!", "Please choose your PRIZE!")
+ stage = 5
+ } else {
+ npc(FacialExpression.FRIENDLY,"Wow, you're a smart one!", "You're absolutely RIGHT!", "Okay, next question!")
+ stage = 3
+ }
+ } else {
+ // Wrong Answer
+ npc(FacialExpression.FRIENDLY,"WRONG!", "That's just WRONG!", "Okay, next question!")
+ stage = 3
+ }
+ }
+ // Random Item should be "Mystery Box", but the current MYSTERY_BOX_6199 is already inauthentically used by Giftmas.
+ 5 -> options("1000 Coins", "Random Item").also { stage++ }
+ 6 -> {
+ resetAnimator(player!!)
+ returnPlayer(player!!)
+ when (buttonID) {
+ 1 -> {
+ queueScript(player!!, 0, QueueStrength.SOFT) { stage: Int ->
+ addItemOrDrop(player!!, Items.COINS_995, 1000)
+ return@queueScript stopExecuting(player!!)
+ }
+ }
+ 2 -> {
+ queueScript(player!!, 0, QueueStrength.SOFT) { stage: Int ->
+ addItemOrDrop(player!!, tableRoll.roll()[0].id)
+ return@queueScript stopExecuting(player!!)
+ }
+ }
+ }
+ removeAttributes(player!!, QUIZMASTER_ATTRIBUTE_QUESTIONS_CORRECT, QUIZMASTER_ATTRIBUTE_RANDOM_ANSWER)
+ stage = END_DIALOGUE
+ end()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/ame/events/quizmaster/QuizMasterNPC.kt b/Server/src/main/content/global/ame/events/quizmaster/QuizMasterNPC.kt
new file mode 100644
index 000000000..26407a1dc
--- /dev/null
+++ b/Server/src/main/content/global/ame/events/quizmaster/QuizMasterNPC.kt
@@ -0,0 +1,65 @@
+package content.global.ame.events.quizmaster
+
+import content.global.ame.RandomEventNPC
+import content.global.ame.kidnapPlayer
+import core.api.*
+import core.api.utils.WeightBasedTable
+import core.game.interaction.QueueStrength
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.link.TeleportManager
+import core.game.system.timer.impl.AntiMacro
+import core.game.world.map.Location
+import core.game.world.update.flag.context.Graphics
+import org.rs09.consts.NPCs
+import org.rs09.consts.Sounds
+
+/**
+ * Quiz Master NPC:
+ *
+ * https://www.youtube.com/watch?v=EFAWSiPTfcM
+ * https://www.youtube.com/watch?v=caWn7pE2mkE
+ * https://www.youtube.com/watch?v=Bc1gAov2o4w
+ * https://www.youtube.com/watch?v=oHU8-MUarxE
+ * https://www.youtube.com/watch?v=wvjYiF4v9tI
+ * https://www.youtube.com/watch?v=dC6rlSnXEfw
+ */
+class QuizMasterNPC(var type: String = "", override var loot: WeightBasedTable? = null) : RandomEventNPC(NPCs.QUIZ_MASTER_2477) {
+ override fun init() {
+ super.init()
+ sendChat("Hey ${player.username}! It's your lucky day!")
+ queueScript(player, 4, QueueStrength.SOFT) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ lock(player, 6)
+ sendGraphics(Graphics(1576, 0, 0), player.location)
+ animate(player,8939)
+ playAudio(player, Sounds.TELEPORT_ALL_200)
+ return@queueScript delayScript(player, 3)
+ }
+ 1 -> {
+ kidnapPlayer(player, Location(1952, 4764, 1), TeleportManager.TeleportType.INSTANT)
+ setAttribute(player, QuizMasterDialogueFile.QUIZMASTER_ATTRIBUTE_QUESTIONS_CORRECT, 0)
+ AntiMacro.terminateEventNpc(player)
+ sendGraphics(Graphics(1577, 0, 0), player.location)
+ animate(player,8941)
+ sendMessage(player, "Answer four questions correctly in a row to be teleported back where you came from.")
+ sendMessage(player, "You will need to relog in if you lose the quiz dialog.") // Inauthentic, but there to notify the player in case.
+ return@queueScript delayScript(player, 6)
+ }
+ 2 -> {
+ face(player, Location(1952, 4768, 1))
+ animate(player,2378)
+ // This is not needed as when you enter the QuizMasterBorders, it should fire off the dialogue
+ // openDialogue(player, QuizMasterDialogueFile(), this.asNpc())
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+
+ }
+ }
+
+ override fun talkTo(npc: NPC) {
+ openDialogue(player, QuizMasterDialogueFile(), this.asNpc())
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/ame/events/rivertroll/RiverTrollRENPC.kt b/Server/src/main/content/global/ame/events/rivertroll/RiverTrollRENPC.kt
index b69ec7abe..dff28d7e9 100644
--- a/Server/src/main/content/global/ame/events/rivertroll/RiverTrollRENPC.kt
+++ b/Server/src/main/content/global/ame/events/rivertroll/RiverTrollRENPC.kt
@@ -4,17 +4,14 @@ import core.game.node.entity.Entity
import core.game.node.entity.npc.NPC
import content.global.ame.RandomEventNPC
import core.api.utils.WeightBasedTable
-import java.lang.Integer.max
-
-val ids = 391..396
+val ids = (391..396).toList()
class RiverTrollRENPC(override var loot: WeightBasedTable? = null) : RandomEventNPC(391){
override fun talkTo(npc: NPC) {}
override fun init() {
super.init()
- val index = max(0, (player.properties.combatLevel / 20) - 1)
- val id = ids.toList()[index]
+ val id = idForCombatLevel(ids, player)
this.transform(id)
this.attack(player)
sendChat("Fishies be mine, leave dem fishies!")
diff --git a/Server/src/main/content/global/ame/events/rockgolem/RockGolemRENPC.kt b/Server/src/main/content/global/ame/events/rockgolem/RockGolemRENPC.kt
index 82fda9bf4..eb3399657 100644
--- a/Server/src/main/content/global/ame/events/rockgolem/RockGolemRENPC.kt
+++ b/Server/src/main/content/global/ame/events/rockgolem/RockGolemRENPC.kt
@@ -4,17 +4,14 @@ import core.game.node.entity.Entity
import core.game.node.entity.npc.NPC
import content.global.ame.RandomEventNPC
import core.api.utils.WeightBasedTable
-import kotlin.math.max
-
-val ids = 413..418
+val ids = (413..418).toList()
class RockGolemRENPC(override var loot: WeightBasedTable? = null) : RandomEventNPC(413){
override fun talkTo(npc: NPC) {}
override fun init() {
super.init()
- val index = max(0,(player.properties.combatLevel / 20) - 1)
- val id = ids.toList()[index]
+ val id = idForCombatLevel(ids, player)
this.transform(id)
this.attack(player)
sendChat("Raarrrgghh! Flee human!")
diff --git a/Server/src/main/content/global/ame/events/shade/ShadeRENPC.kt b/Server/src/main/content/global/ame/events/shade/ShadeRENPC.kt
index 4d991afdf..60a0f57ae 100644
--- a/Server/src/main/content/global/ame/events/shade/ShadeRENPC.kt
+++ b/Server/src/main/content/global/ame/events/shade/ShadeRENPC.kt
@@ -4,15 +4,13 @@ import core.game.node.entity.Entity
import core.game.node.entity.npc.NPC
import content.global.ame.RandomEventNPC
import core.api.utils.WeightBasedTable
-import kotlin.math.*
class ShadeRENPC(override var loot: WeightBasedTable? = null) : RandomEventNPC(425){
val ids = (425..430).toList()
override fun talkTo(npc: NPC) {}
override fun init() {
super.init()
- val index = max(0, min(ids.size, (player.properties.combatLevel / 20) - 1))
- val id = ids[index]
+ val id = idForCombatLevel(ids, player)
this.transform(id)
this.attack(player)
sendChat("Leave this place!")
diff --git a/Server/src/main/content/global/ame/events/strangeplant/StrangePlantBehavior.kt b/Server/src/main/content/global/ame/events/strangeplant/StrangePlantBehavior.kt
index cd80ad3d9..0491e01bc 100644
--- a/Server/src/main/content/global/ame/events/strangeplant/StrangePlantBehavior.kt
+++ b/Server/src/main/content/global/ame/events/strangeplant/StrangePlantBehavior.kt
@@ -32,4 +32,8 @@ class StrangePlantBehavior() : NPCBehavior(NPCs.STRANGE_PLANT_408) {
override fun onDeathStarted(self: NPC, killer: Entity) {
AntiMacro.terminateEventNpc(killer.asPlayer())
}
-}
\ No newline at end of file
+
+ override fun getXpMultiplier(self: NPC, attacker: Entity): Double {
+ return super.getXpMultiplier(self, attacker) / 16.0
+ }
+}
diff --git a/Server/src/main/content/global/ame/events/supriseexam/MordautDialogue.kt b/Server/src/main/content/global/ame/events/surpriseexam/MordautDialogue.kt
similarity index 98%
rename from Server/src/main/content/global/ame/events/supriseexam/MordautDialogue.kt
rename to Server/src/main/content/global/ame/events/surpriseexam/MordautDialogue.kt
index ca0e61c3f..d3bd04af0 100644
--- a/Server/src/main/content/global/ame/events/supriseexam/MordautDialogue.kt
+++ b/Server/src/main/content/global/ame/events/surpriseexam/MordautDialogue.kt
@@ -1,4 +1,4 @@
-package content.global.ame.events.supriseexam
+package content.global.ame.events.surpriseexam
import core.game.component.Component
import core.game.dialogue.FacialExpression
diff --git a/Server/src/main/content/global/ame/events/MysteriousOldManDialogue.kt b/Server/src/main/content/global/ame/events/surpriseexam/MysteriousOldManDialogue.kt
similarity index 94%
rename from Server/src/main/content/global/ame/events/MysteriousOldManDialogue.kt
rename to Server/src/main/content/global/ame/events/surpriseexam/MysteriousOldManDialogue.kt
index 628a3c8f0..1415317a6 100644
--- a/Server/src/main/content/global/ame/events/MysteriousOldManDialogue.kt
+++ b/Server/src/main/content/global/ame/events/surpriseexam/MysteriousOldManDialogue.kt
@@ -1,7 +1,7 @@
package content.global.ame.events
import core.game.node.entity.player.Player
-import content.global.ame.events.supriseexam.SurpriseExamUtils
+import content.global.ame.events.surpriseexam.SurpriseExamUtils
import core.game.dialogue.DialogueFile
import core.game.system.timer.impl.AntiMacro
diff --git a/Server/src/main/content/global/ame/events/MysteriousOldManNPC.kt b/Server/src/main/content/global/ame/events/surpriseexam/MysteriousOldManNPC.kt
similarity index 100%
rename from Server/src/main/content/global/ame/events/MysteriousOldManNPC.kt
rename to Server/src/main/content/global/ame/events/surpriseexam/MysteriousOldManNPC.kt
diff --git a/Server/src/main/content/global/ame/events/supriseexam/SEDoorDialogue.kt b/Server/src/main/content/global/ame/events/surpriseexam/SEDoorDialogue.kt
similarity index 90%
rename from Server/src/main/content/global/ame/events/supriseexam/SEDoorDialogue.kt
rename to Server/src/main/content/global/ame/events/surpriseexam/SEDoorDialogue.kt
index 3fffea71b..221f4b4fe 100644
--- a/Server/src/main/content/global/ame/events/supriseexam/SEDoorDialogue.kt
+++ b/Server/src/main/content/global/ame/events/surpriseexam/SEDoorDialogue.kt
@@ -1,4 +1,4 @@
-package content.global.ame.events.supriseexam
+package content.global.ame.events.surpriseexam
import core.game.dialogue.DialogueFile
import core.tools.END_DIALOGUE
diff --git a/Server/src/main/content/global/ame/events/supriseexam/SEPatternInterface.kt b/Server/src/main/content/global/ame/events/surpriseexam/SEPatternInterface.kt
similarity index 96%
rename from Server/src/main/content/global/ame/events/supriseexam/SEPatternInterface.kt
rename to Server/src/main/content/global/ame/events/surpriseexam/SEPatternInterface.kt
index e445c5145..3ba12a8c0 100644
--- a/Server/src/main/content/global/ame/events/supriseexam/SEPatternInterface.kt
+++ b/Server/src/main/content/global/ame/events/surpriseexam/SEPatternInterface.kt
@@ -1,4 +1,4 @@
-package content.global.ame.events.supriseexam
+package content.global.ame.events.surpriseexam
import core.game.node.entity.npc.NPC
import org.rs09.consts.Components
diff --git a/Server/src/main/content/global/ame/events/supriseexam/SupriseExamListeners.kt b/Server/src/main/content/global/ame/events/surpriseexam/SupriseExamListeners.kt
similarity index 59%
rename from Server/src/main/content/global/ame/events/supriseexam/SupriseExamListeners.kt
rename to Server/src/main/content/global/ame/events/surpriseexam/SupriseExamListeners.kt
index 6629982fa..6d8ad6b4f 100644
--- a/Server/src/main/content/global/ame/events/supriseexam/SupriseExamListeners.kt
+++ b/Server/src/main/content/global/ame/events/surpriseexam/SupriseExamListeners.kt
@@ -1,4 +1,4 @@
-package content.global.ame.events.supriseexam
+package content.global.ame.events.surpriseexam
import core.game.component.Component
import core.game.node.entity.player.Player
@@ -9,20 +9,22 @@ import org.rs09.consts.NPCs
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
import content.global.handlers.iface.ExperienceInterface
+import core.api.MapArea
+import core.api.removeItem
+import core.game.world.map.zone.ZoneBorders
+import core.game.world.map.zone.ZoneRestriction
-class SupriseExamListeners : InteractionListener {
- val MORDAUT = NPCs.MR_MORDAUT_6117
- val BOOK_OF_KNOWLEDGE = Items.BOOK_OF_KNOWLEDGE_11640
+class SupriseExamListeners : InteractionListener, MapArea {
override fun defineListeners() {
- on(MORDAUT, IntType.NPC, "talk-to"){ player, node ->
+ on(NPCs.MR_MORDAUT_6117, IntType.NPC, "talk-to") { player, node ->
player.faceLocation(Location.create(1886, 5024, 0))
- val examComplete = player.getAttribute(SurpriseExamUtils.SE_KEY_CORRECT,0) == 3
- player.dialogueInterpreter.open(MordautDialogue(examComplete),node.asNpc())
+ val examComplete = player.getAttribute(SurpriseExamUtils.SE_KEY_CORRECT, 0) == 3
+ player.dialogueInterpreter.open(MordautDialogue(examComplete), node.asNpc())
return@on true
}
- on(SurpriseExamUtils.SE_DOORS, IntType.SCENERY, "open"){ player, node ->
+ on(SurpriseExamUtils.SE_DOORS, IntType.SCENERY, "open") { player, node ->
val correctDoor = player.getAttribute(SurpriseExamUtils.SE_DOOR_KEY,-1)
if(correctDoor == -1){
@@ -39,9 +41,9 @@ class SupriseExamListeners : InteractionListener {
return@on true
}
- on(BOOK_OF_KNOWLEDGE, IntType.ITEM, "read"){ player, _ ->
- player.setAttribute("caller"){skill: Int,p: Player ->
- if(p.inventory.remove(Item(BOOK_OF_KNOWLEDGE))) {
+ on(Items.BOOK_OF_KNOWLEDGE_11640, IntType.ITEM, "read") { player, _ ->
+ player.setAttribute("caller") { skill: Int, p: Player ->
+ if (removeItem(p, Items.BOOK_OF_KNOWLEDGE_11640)) {
val level = p.skills.getStaticLevel(skill)
val experience = level * 15.0
p.skills.addExperience(skill, experience)
@@ -54,8 +56,16 @@ class SupriseExamListeners : InteractionListener {
}
override fun defineDestinationOverrides() {
- setDest(IntType.NPC,MORDAUT){ _, _ ->
+ setDest(IntType.NPC, NPCs.MR_MORDAUT_6117) { _, _ ->
return@setDest Location.create(1886, 5025, 0)
}
}
-}
\ No newline at end of file
+
+ override fun defineAreaBorders(): Array {
+ return arrayOf(ZoneBorders.forRegion(7502))
+ }
+
+ override fun getRestrictions(): Array {
+ return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS, ZoneRestriction.OFF_MAP)
+ }
+}
diff --git a/Server/src/main/content/global/ame/events/supriseexam/SurpriseExamUtils.kt b/Server/src/main/content/global/ame/events/surpriseexam/SurpriseExamUtils.kt
similarity index 69%
rename from Server/src/main/content/global/ame/events/supriseexam/SurpriseExamUtils.kt
rename to Server/src/main/content/global/ame/events/surpriseexam/SurpriseExamUtils.kt
index ca0d405f6..01a722343 100644
--- a/Server/src/main/content/global/ame/events/supriseexam/SurpriseExamUtils.kt
+++ b/Server/src/main/content/global/ame/events/surpriseexam/SurpriseExamUtils.kt
@@ -1,21 +1,18 @@
-package content.global.ame.events.supriseexam
+package content.global.ame.events.surpriseexam
+import content.global.ame.kidnapPlayer
+import content.global.ame.returnPlayer
import core.api.*
import core.game.node.entity.impl.PulseType
import core.game.node.entity.player.Player
-import core.game.node.item.GroundItemManager
-import core.game.node.item.Item
import core.game.system.task.Pulse
import core.game.world.map.Location
import org.rs09.consts.Components
import org.rs09.consts.Items
-import core.ServerConstants
+import core.game.node.entity.player.link.TeleportManager
object SurpriseExamUtils {
-
- val SE_KEY_LOC = "/save:original-loc"
val SE_KEY_INDEX = "supexam:index"
- val SE_LOGOUT_KEY = "suprise_exam"
val SE_DOOR_KEY = "supexam:door"
val INTER_PATTERN_CHILDS = intArrayOf(6,7,8)
val INTER_OPTION_CHILDS = intArrayOf(10,11,12,13)
@@ -29,28 +26,16 @@ object SurpriseExamUtils {
intArrayOf(Items.FLY_FISHING_ROD_309,Items.BARBARIAN_ROD_11323,Items.SMALL_FISHING_NET_303,Items.HARPOON_311)
)
- fun teleport(player: Player){
- player.setAttribute(SE_KEY_LOC,player.location)
-
- registerLogoutListener(player, SE_LOGOUT_KEY){p ->
- p.location = getAttribute(p, SE_KEY_LOC, ServerConstants.HOME_LOCATION)
- }
-
- player.properties.teleportLocation = Location.create(1886, 5025, 0)
+ fun teleport(player: Player) {
+ kidnapPlayer(player, Location.create(1886, 5025, 0), TeleportManager.TeleportType.INSTANT)
}
fun cleanup(player: Player){
- player.properties.teleportLocation = player.getAttribute(SE_KEY_LOC,null)
- clearLogoutListener(player, SE_LOGOUT_KEY)
- player.removeAttribute(SE_KEY_LOC)
- player.removeAttribute(SE_KEY_INDEX)
- player.removeAttribute(SE_KEY_CORRECT)
+ returnPlayer(player)
+ removeAttributes(player, SE_KEY_INDEX, SE_KEY_CORRECT)
player.pulseManager.run(object : Pulse(2){
override fun pulse(): Boolean {
- val reward = Item(Items.BOOK_OF_KNOWLEDGE_11640)
- if(!player.inventory.add(reward)){
- GroundItemManager.create(reward,player)
- }
+ addItemOrDrop(player, Items.BOOK_OF_KNOWLEDGE_11640)
return true
}
}, PulseType.CUSTOM_1)
diff --git a/Server/src/main/content/global/ame/events/treespirit/TreeSpiritRENPC.kt b/Server/src/main/content/global/ame/events/treespirit/TreeSpiritRENPC.kt
index 2e4fb3436..3b0033972 100644
--- a/Server/src/main/content/global/ame/events/treespirit/TreeSpiritRENPC.kt
+++ b/Server/src/main/content/global/ame/events/treespirit/TreeSpiritRENPC.kt
@@ -4,17 +4,14 @@ import core.game.node.entity.Entity
import core.game.node.entity.npc.NPC
import content.global.ame.RandomEventNPC
import core.api.utils.WeightBasedTable
-import kotlin.math.max
-
-val ids = 438..443
+val ids = (438..443).toList()
class TreeSpiritRENPC(override var loot: WeightBasedTable? = null) : RandomEventNPC(438){
override fun talkTo(npc: NPC) {}
override fun init() {
super.init()
- val index = max(0,(player.properties.combatLevel / 20) - 1)
- val id = ids.toList()[index]
+ val id = idForCombatLevel(ids, player)
this.transform(id)
this.attack(player)
sendChat("Leave these woods and never return!")
diff --git a/Server/src/main/content/global/ame/events/zombie/ZombieRENPC.kt b/Server/src/main/content/global/ame/events/zombie/ZombieRENPC.kt
index 230d85ee8..6b43d54b4 100644
--- a/Server/src/main/content/global/ame/events/zombie/ZombieRENPC.kt
+++ b/Server/src/main/content/global/ame/events/zombie/ZombieRENPC.kt
@@ -4,15 +4,13 @@ import core.game.node.entity.Entity
import core.game.node.entity.npc.NPC
import content.global.ame.RandomEventNPC
import core.api.utils.WeightBasedTable
-import kotlin.math.*
class ZombieRENPC(override var loot: WeightBasedTable? = null) : RandomEventNPC(419){
val ids = (419..424).toList()
override fun talkTo(npc: NPC) {}
override fun init() {
super.init()
- val index = max(0, min(ids.size, (player.properties.combatLevel / 20) - 1))
- val id = ids[index]
+ val id = idForCombatLevel(ids, player)
this.transform(id)
this.attack(player)
sendChat("Brainsssss!")
diff --git a/Server/src/main/content/global/bots/Adventurer.kt b/Server/src/main/content/global/bots/Adventurer.kt
index a6c69e8e1..916503945 100644
--- a/Server/src/main/content/global/bots/Adventurer.kt
+++ b/Server/src/main/content/global/bots/Adventurer.kt
@@ -12,15 +12,16 @@ import core.game.world.map.Location
import core.game.world.map.RegionManager
import core.game.world.map.zone.ZoneBorders
import core.game.world.update.flag.*
-import core.tools.RandomFunction
import org.json.simple.JSONArray
import org.json.simple.JSONObject
import core.ServerConstants
+import core.api.log
import core.game.bots.AIRepository
import core.game.bots.CombatBotAssembler
import core.game.bots.Script
import core.game.interaction.IntType
import core.game.interaction.InteractionListeners
+import core.tools.Log
import java.io.File
import java.io.FileReader
import java.time.LocalDateTime
@@ -40,21 +41,27 @@ import kotlin.random.Random
* @author Ceikry
*/
-//Adventure Bots v4.0.0 -Expansion Edition-
+// Adventure Bots v1.1.0 : Expansion Edition (Previously v4.0.0)
+// Super Grand Exchange Update
class Adventurer(val style: CombatStyle): Script() {
var city: Location = lumbridge
- var ticks = 0
- var freshspawn = true
- var sold = false
- private val geloc: Location = if (Random.nextBoolean()){
- Location.create(3165, 3487, 0)
- }else{
- Location.create(3164, 3492, 0)
- }
+ var poiloc: Location = karamja
+ var geSocialLoc: Location = getRandomGESocialLocation()
+ var geClerkLoc: Location = getRandomGELocation()
+ var geClerksloc: Location = neGEClerk
+ var freshspawn: Boolean = true
+ var sold: Boolean = false
+ var poi: Boolean = false
+
+ val chance: Int = if (cityLocationsGE.contains(city)) 3500 else 3000
+ var ticks: Int = 0
var counter: Int = 0
- var random: Int = (5..30).random()
+ val waitTotal: Int = 8
+ var returnToAdventure: Int = 0
+ var geWait: Int = 0
+ var geLongWait: Int = 0
val type = when(style){
CombatStyle.MELEE -> CombatBotAssembler.Type.MELEE
@@ -74,23 +81,81 @@ class Adventurer(val style: CombatStyle): Script() {
}
override fun toString(): String {
- return "${bot.name} is an Adventurer bot at ${bot.location}! State: $state - City: $city"
+ return "${bot.username} is an Adventurer bot " +
+ "at ${bot.location}! " +
+ "State: $state - " +
+ "City: $city - " +
+ "Ticks: $ticks - " +
+ "Freshspawn: $freshspawn - " +
+ "Sold: $sold - " +
+ "Counter: $counter"
}
var state = State.START
- fun getRandomCity(): Location{
+ private fun getRandomCity(): Location{
return cities.random()
}
- fun getRandomPoi(): Location{
+ private fun getRandomPoi(): Location{
return pois.random()
}
+ private fun getRandomGESocialLocation(): Location{
+ return socialLocationsGE.random()
+ }
+
+ private fun getRandomGELocation(): Location {
+ return cityLocationsGE.random()
+ }
+
+ private fun randomNumberFromOne(maxInt: Int): Int {
+ return Random.nextInt(0, maxInt)
+ }
+
+ private fun otherPlayersNearby(): Boolean {
+ val localPlayers = RegionManager.getLocalPlayers(bot)
+ val otherPlayers = localPlayers.filter { it.name != bot.name }
+ return otherPlayers.isNotEmpty()
+ }
+
+ private fun checkNearBank() {
+ if(bankMap[city] == null){
+ scriptAPI.teleport(getRandomCity().also { city = it })
+ } else {
+ if(bankMap[city]?.insideBorder(bot) == true){
+ state = State.FIND_BANK
+ } else {
+ bankMap[city]?.let { scriptAPI.walkTo(it.randomLoc) }
+ }
+ }
+ }
+
+ private fun checkCounter(maxCounter: Int) {
+ if (counter++ >= maxCounter) {
+ state = State.TELEPORTING
+ }
+ }
+
+ private fun teleportToRandomCity() {
+ city = getRandomCity()
+ when (city) {
+ neGEClerk -> { scriptAPI.teleport(scriptAPI.randomizeLocationInRanges(city,-3,2,0,1,0)) }
+ swGEClerk -> { scriptAPI.teleport(scriptAPI.randomizeLocationInRanges(city,-2,3,-1,0,0)) }
+ nwGEBanker -> { scriptAPI.teleport(scriptAPI.randomizeLocationInRanges(city,-2,0,-3,2,0)) }
+ seGEBanker -> { scriptAPI.teleport(scriptAPI.randomizeLocationInRanges(city,0,2,-2,3,0)) }
+ else -> { scriptAPI.teleport(scriptAPI.randomizeLocationInRanges(city,-1,1,-1,1,0)) }
+ }
+ }
+
+ val resources = listOf(
+ "Rocks","Tree","Oak","Willow",
+ "Maple tree","Yew","Magic tree",
+ "Teak","Mahogany")
+
//TODO: Optimise and adjust how bots handle picking up ground items further.
fun immerse() {
- if (counter++ == 180) {state = State.TELEPORTING
- }
+ if (counter++ >= Random.nextInt(150,300)) { state = State.TELEPORTING }
val items = AIRepository.groundItems[bot]
if (Random.nextBoolean()) {
if (items.isNullOrEmpty()) {
@@ -98,33 +163,13 @@ class Adventurer(val style: CombatStyle): Script() {
state = State.LOOT_DELAY
}
if (bot.inventory.isFull) {
- if(bankMap[city] == null){
- scriptAPI.teleport(getRandomCity().also { city = it })
- } else {
- if(bankMap[city]?.insideBorder(bot) == true){
- state = State.FIND_BANK
- } else {
- scriptAPI.walkTo(bankMap[city]?.randomLoc ?: Location(0, 0, 0))
- }
- }
+ checkNearBank()
}
} else {
if (bot.inventory.isFull){
- if(bankMap[city] == null){
- scriptAPI.teleport(getRandomCity().also { city = it })
- } else {
- if(bankMap[city]?.insideBorder(bot) == true){
- state = State.FIND_BANK
- } else {
- scriptAPI.walkTo(bankMap[city]?.randomLoc ?: Location(0, 0, 0))
- }
- }
+ checkNearBank()
} else {
- val resources = listOf(
- "Rocks","Tree","Oak","Willow",
- "Maple tree","Yew","Magic tree",
- "Teak","Mahogany")
val resource = scriptAPI.getNearestNodeFromList(resources,true)
if(resource != null){
if(resource.name.contains("ocks")) InteractionListeners.run(resource.id,
@@ -137,18 +182,17 @@ class Adventurer(val style: CombatStyle): Script() {
}
fun refresh() {
+// log(this::class.java, Log.WARN, "${bot.username} refreshed from $state at $city with $ticks and $counter counter.")
scriptAPI.teleport(lumbridge)
- freshspawn = true
state = State.START
}
- var poi = false
- var poiloc = karamja
-
//Adventure Bots Actual Code STARTS HERE!!!
+ // 100 ticks = 60 seconds
override fun tick() {
ticks++
- if (ticks++ >= 800) {
+ // Hard refresh
+ if (ticks >= 1000) {
ticks = 0
refresh()
return
@@ -186,49 +230,42 @@ class Adventurer(val style: CombatStyle): Script() {
}
return
} else {
- state = State.EXPLORE
+ state = State.ADVENTURE
}
}
State.START -> {
if (freshspawn) {
freshspawn = false
- scriptAPI.randomWalkTo(lumbridge, 20)
+ scriptAPI.randomWalkTo(lumbridge, randomNumberFromOne(25))
} else {
- city = getRandomCity()
state = State.TELEPORTING
}
}
State.TELEPORTING -> {
+ if (freshspawn){ freshspawn = false }
+ teleportToRandomCity()
+ poi = false
+ sold = false
ticks = 0
counter = 0
- if (bot.location != city) {
- poi = false
- scriptAPI.teleport(city)
- } else {
- poi = false
- state = State.EXPLORE
- }
+ state = State.ADVENTURE
+ return
}
- State.EXPLORE -> {
- if (counter++ == 350) {
- state = State.TELEPORTING
- }
-
- val chance = if (city == ge || city == ge2) 5000 else 2500
- if (RandomFunction.random(chance) <= 10) {
- val nearbyPlayers = RegionManager.getLocalPlayers(bot)
- if (nearbyPlayers.isNotEmpty()) {
+ State.ADVENTURE -> {
+ checkCounter(800)
+ if (randomNumberFromOne(chance) <= 10) {
+ if (otherPlayersNearby()) {
ticks = 0
dialogue()
}
}
- if (RandomFunction.random(1000) <= 150 && !poi) {
- val roamDistance = if (city != ge && city != ge2) 225 else 7
- if ((city == ge || city == ge2) && RandomFunction.random(100) < 90) {
+ if (!poi && randomNumberFromOne(1000) <= 75) {
+ val roamDistance = if (!cityLocationsGE.contains(city)) 225 else randomNumberFromOne(5)
+ if (cityLocationsGE.contains(city) && randomNumberFromOne(100) < 90) {
if (!bot.bank.isEmpty) {
state = State.FIND_GE
}
@@ -238,33 +275,46 @@ class Adventurer(val style: CombatStyle): Script() {
return
}
- if (RandomFunction.random(1000) <= 50 && poi){
+ if (poi && randomNumberFromOne(1000) <= 100){
+ immerse()
+ return
+ }
+
+ if (poi && randomNumberFromOne(1000) <= 25){
+ dialogue()
+ }
+
+ if (poi && randomNumberFromOne(1000) <= 50){
val roamDistancePoi = when(poiloc){
- teakfarm, crawlinghands -> 5
- treegnome -> 50
- isafdar -> 40
- eaglespeek -> 40
- keldagrimout -> 30
- teak1 -> 30
- miningguild -> 5
- magics, coal -> 7
gemrocks, chaosnpc, chaosnpc2 -> 1
+ magics, coalTrucks -> 7
+ miningguild, teakfarm, crawlinghands -> 5
+ varLumberYard -> 20
+ keldagrimout, teak1 -> 30
+ eaglespeek, isafdar -> 40
+ treegnome -> 50
else -> 60
}
scriptAPI.randomWalkTo(poiloc,roamDistancePoi)
return
}
- if (RandomFunction.random(1000) <= 75) {
- if (city != ge && city != ge2) {
+ if (randomNumberFromOne(1000) <= 75) {
+ if (!cityLocationsGE.contains(city)) {
+ ticks = 0
immerse()
return
- } else {
- return
+ } else if (randomNumberFromOne(chance) <= 55 && otherPlayersNearby()) {
+ ticks = 0
+ dialogue()
}
}
- if (RandomFunction.random(20000) <= 60 && !poi) {
+ if (cityLocationsGE.contains(city) && randomNumberFromOne(1000) <= 50) {
+ state = State.IDLE_GE
+ }
+
+ if (!poi && randomNumberFromOne(1000) <= 5) {
poiloc = getRandomPoi()
city = teak1
poi = true
@@ -272,26 +322,24 @@ class Adventurer(val style: CombatStyle): Script() {
return
}
- if ((city == ge || city == ge2) && RandomFunction.random(1000) >= 999) {
- ticks = 0
- city = getRandomCity()
+ if (cityLocationsGE.contains(city) && randomNumberFromOne(1000) <= 100) {
state = State.TELEPORTING
- }
-
- if (city == ge || city == ge2) {
return
}
- if (city == teak1 && counter++ >= 240){
- city = getRandomCity()
- state = State.TELEPORTING
+ if (cityLocationsGE.contains(city)) {
+ return
}
- if (counter++ >= 240 && RandomFunction.random(100) >= 10) {
+ if (poi && randomNumberFromOne(1000) <= 20){
+ state = State.TELEPORTING
+ return
+ }
+
+ if (counter++ >= 750 && randomNumberFromOne(100) <= 50) {
+// log(this::class.java, Log.FINE, "${bot.username} has moved on to a different city at $ticks ticks and $counter counter.")
city = getRandomCity()
- if (RandomFunction.random(100) % 2 == 0) {
- counter = 0
- ticks = 0
+ if (randomNumberFromOne(100) % 2 == 0) {
state = State.TELEPORTING
} else {
if (citygroupA.contains(city)) {
@@ -309,122 +357,122 @@ class Adventurer(val style: CombatStyle): Script() {
return
}
- State.GE -> {
- var ge = false
- if (counter++ == 180) {
- state = State.TELEPORTING
- }
- if (!sold) {
- if (counter++ >= 15) {
- sold = true
- ge = true
+ State.IDLE_GE -> {
+ returnToAdventure = Random.nextInt(350, 750)
+ if (counter++ >= returnToAdventure){
+ if (randomNumberFromOne(100) <= 25){
+ ticks = 0
+ counter = 0
+ poiloc = getRandomPoi()
+ city = teak1
+ poi = true
+ scriptAPI.teleport(poiloc)
+ state = State.ADVENTURE
+ return
+ } else {
counter = 0
ticks = 0
- scriptAPI.sellAllOnGeAdv()
+ state = State.TELEPORTING
+ return
+ }
+ }
+ if (cityLocationsGE.contains(city)){
+ if (randomNumberFromOne(1000) <= 5) {
+ ticks = 0
+ geSocialLoc = scriptAPI.randomizeLocationInRanges(getRandomGESocialLocation(),-1,1,-1,1,0)
+ } else if (randomNumberFromOne(1000) <= 10) {
+ ticks = 0
+ scriptAPI.randomWalkTo(geSocialLoc, randomNumberFromOne(5))
+ return
+ }
+ if (randomNumberFromOne(1000) <= 5 && otherPlayersNearby()){
+ ticks = 0
+ dialogue()
+ } else if (randomNumberFromOne(1000) <= 250){
return
}
- } else if (ge && sold) {
- ge = false
- city = getRandomCity()
- state = State.TELEPORTING
}
return
}
State.FIND_GE -> {
- if (counter++ == 180) {
- state = State.TELEPORTING
- }
sold = false
val ge: Scenery? = scriptAPI.getNearestNode("Desk", true) as Scenery?
- if (ge == null || bot.bank.isEmpty) state = State.EXPLORE
+ if (ge == null || bot.bank.isEmpty) state = State.ADVENTURE
class GEPulse : MovementPulse(bot, ge, DestinationFlag.OBJECT) {
override fun pulse(): Boolean {
bot.faceLocation(ge?.location)
- state = State.GE
- return true
+ return true.also { state = State.GE }
}
}
+ if (ge == null || bot.bank.isEmpty) state = State.ADVENTURE
if (ge != null && !bot.bank.isEmpty) {
- counter = 0
- scriptAPI.randomWalkTo(geloc, 3)
- GameWorld.Pulser.submit(GEPulse())
+ if (randomNumberFromOne(1000) <= 25 && otherPlayersNearby()){
+ dialogue()
+ scriptAPI.randomWalkTo(geSocialLoc, randomNumberFromOne(5))
+ } else if (randomNumberFromOne(500) <= 50) {
+ GameWorld.Pulser.submit(GEPulse())
+ }
}
+ checkCounter(500)
+ return
+ }
+
+ State.GE -> {
+ geClerksloc = clerkLocationsGe.random()
+ geWait = Random.nextInt(35, 100)
+ geLongWait = Random.nextInt(350, 750)
+ if (!sold) {
+ if (randomNumberFromOne(500) <= 25){ scriptAPI.randomWalkTo(geClerksloc, randomNumberFromOne(4))}
+ if (counter++ >= geWait) {
+ scriptAPI.randomWalkTo(geClerksloc, randomNumberFromOne(1))
+ sold = true
+ counter = 0
+ ticks = 0
+ scriptAPI.sellAllOnGeAdv()
+ state = State.TELEPORTING
+ return
+ }
+ } else if (counter++ >= geLongWait) {
+ state = State.TELEPORTING
+ return
+ }
+ checkCounter(1000)
return
}
State.FIND_BANK -> {
- if (counter++ == 300) {
- state = State.TELEPORTING
- }
val bank: Scenery? = scriptAPI.getNearestNode("Bank booth", true) as Scenery?
- if (badedge.insideBorder(bot) || bot.location == badedge2 || bot.location == badedge3 || bot.location == badedge4) {
- bot.randomWalk(5, 5)
- }
- if (bank == null) state = State.EXPLORE
- class BankingPulse : MovementPulse(bot, bank, DestinationFlag.OBJECT) {
- override fun pulse(): Boolean {
- bot.faceLocation(bank?.location)
- state = State.IDLE_BANKS
- return true
- }
- }
- if (bank != null) {
- bot.pulseManager.run(BankingPulse())
+ if (bank == null) { state = State.TELEPORTING }
+ if (bank != null && randomNumberFromOne(100) <= 5) {
+ scriptAPI.depositAtBank()
+ } else if (bank != null && randomNumberFromOne(100) <= 5){
+ scriptAPI.randomWalkTo(bank.location,3)
}
+ checkCounter(500)
return
}
- State.IDLE_BANKS -> {
- if (counter++ == 300) {
- state = State.TELEPORTING
- }
- if (RandomFunction.random(1000) < 100) {
- for (item in bot.inventory.toArray()) {
- item ?: continue
- when (item.id) {
- 1359, 590, 1271, 995 -> continue
- }
- bot.bank.add(item)
- bot.inventory.remove(item)
- }
- counter = 0
- state = State.EXPLORE
- }
- return
- }
State.FIND_CITY -> {
- if (counter++ >= 600 || (city == ge || city == ge2)) {
- counter = 0
+ if (counter++ >= 500 || cityLocationsGE.contains(city)){
scriptAPI.teleport(getRandomCity().also { city = it })
- state = State.EXPLORE
+ state = State.ADVENTURE
}
if (bot.location.equals(city)) {
- state = State.EXPLORE
+ state = State.ADVENTURE
} else {
- scriptAPI.randomWalkTo(city, 5)
+ scriptAPI.randomWalkTo(city, randomNumberFromOne(10))
}
+ checkCounter(600)
return
}
- State.IDLE_CITY -> {
- if (counter++ == 300) {
- state = State.TELEPORTING
- }
- var random = (120..300).random()
- if (counter++ == random && RandomFunction.random(1000) % 33 == 0) {
- counter = 0
- state = State.EXPLORE
- }
- return
- }
}
}
fun dialogue() {
- val localPlayer = RegionManager.getLocalPlayers(bot).random()
val until = 1225 - dateCode
val lineStd = dialogue.getLines("standard").rand()
var lineAlt = ""
@@ -455,20 +503,29 @@ class Adventurer(val style: CombatStyle): Script() {
dateCode == 404 -> lineAlt = dialogue.getLines("easter").rand()
}
- val chat = if (lineAlt.isNotEmpty() && Random.nextBoolean()) { lineAlt } else { lineStd }
- .replace("@name", localPlayer.username)
- .replace("@timer", until.toString())
-
- scriptAPI.sendChat(chat)
+ var localPlayers = RegionManager.getLocalPlayers(bot)
+ if (localPlayers.isNotEmpty()) {
+ val localPlayer = localPlayers
+ .filter { it.name != bot.name }
+ .randomOrNull()
+ if (localPlayer != null) {
+ val chat = if (lineAlt.isNotEmpty() && Random.nextBoolean()) { lineAlt } else { lineStd }
+ .replace("@name", localPlayer.username)
+ .replace("@timer", until.toString())
+ scriptAPI.sendChat(chat)
+ } else {
+ val chat = if (lineAlt.isNotEmpty() && Random.nextBoolean()) { lineAlt } else { lineStd }
+ scriptAPI.sendChat(chat)
+ }
+ }
}
enum class State{
START,
- EXPLORE,
+ ADVENTURE,
FIND_BANK,
- IDLE_BANKS,
FIND_CITY,
- IDLE_CITY,
+ IDLE_GE,
GE,
TELEPORTING,
LOOT,
@@ -489,44 +546,94 @@ class Adventurer(val style: CombatStyle): Script() {
}
companion object {
- val badedge = ZoneBorders(3094, 3494, 3096, 3497)
- val badedge2 = Location.create(3094, 3492, 0)
- val badedge3 = Location.create(3094, 3490, 0)
- val badedge4 = Location.create(3094, 3494, 0)
-
+ // Start Cities
val yanille: Location = Location.create(2615, 3104, 0)
val ardougne: Location = Location.create(2662, 3304, 0)
val seers: Location = Location.create(2726, 3485, 0)
val edgeville: Location = Location.create(3088, 3486, 0)
- val ge: Location = Location.create(3168, 3487, 0)
- val ge2: Location = Location.create(3161, 3493, 0)
val catherby: Location = Location.create(2809, 3435, 0)
val falador: Location = Location.create(2965, 3380, 0)
val varrock: Location = Location.create(3213, 3428, 0)
val draynor: Location = Location.create(3080, 3250, 0)
val rimmington: Location = Location.create(2977, 3239, 0)
val lumbridge: Location = Location.create(3222, 3219, 0)
- val karamja = Location.create(2849, 3033, 0)
- val alkharid = Location.create(3297, 3219, 0)
- val feldiphills = Location.create(2535, 2919, 0)
- val isafdar = Location.create(2241, 3217, 0)
- val eaglespeek = Location.create(2333, 3579, 0)
- val canafis = Location.create(3492, 3485, 0)
- val treegnome = Location.create(2437, 3441, 0)
- val teak1 = Location.create(2334, 3048, 0)
- val teakfarm = Location.create(2825, 3085, 0)
- val keldagrimout = Location.create(2724,3692,0)
- val miningguild = Location.create(3046,9740,0)
- val magics = Location.create(2285,3146,0)
- val coal = Location.create(2581,3481,0)
- val crawlinghands = Location.create(3422,3548,0)
- val gemrocks = Location.create(2825,2997,0)
- val chaosnpc = Location.create(2612,9484,0)
- val chaosnpc2 = Location.create(2580,9501,0)
- val taverly = Location.create(2909, 3436, 0)
+ val karamja: Location = Location.create(2849, 3033, 0)
+ val alkharid: Location = Location.create(3297, 3219, 0)
+
+ // Start POI
+ val feldiphills: Location = Location.create(2535, 2919, 0)
+ val isafdar: Location = Location.create(2241, 3217, 0)
+ val eaglespeek: Location = Location.create(2333, 3579, 0)
+ val canafis: Location = Location.create(3492, 3485, 0)
+ val treegnome: Location = Location.create(2437, 3441, 0)
+ val teak1: Location = Location.create(2334, 3048, 0)
+ val teakfarm: Location = Location.create(2825, 3085, 0)
+ val keldagrimout: Location = Location.create(2724,3692, 0)
+ val miningguild: Location = Location.create(3046,9740, 0)
+ val magics: Location = Location.create(2285,3146, 0)
+ val coalTrucks: Location = Location.create(2581,3481, 0)
+ val crawlinghands: Location = Location.create(3422,3548, 0)
+ val gemrocks: Location = Location.create(2825,2997, 0)
+ val chaosnpc: Location = Location.create(2612,9484, 0)
+ val chaosnpc2: Location = Location.create(2586, 9501, 0)
+ val varLumberYard: Location = Location.create(3289, 3482, 0)
+ val taverly: Location = Location.create(2909, 3436, 0)
+
+ val swGEClerk: Location = Location.create(3164, 3487, 0)
+ val neGEClerk: Location = Location.create(3165, 3492, 0)
+ val nwGEBanker: Location = Location.create(3162, 3490, 0)
+ val seGEBanker: Location = Location.create(3167, 3489, 0)
+
+ val badedge = ZoneBorders(3094, 3494, 3096, 3497)
+ val badedge2: Location = Location.create(3094, 3492, 0)
+ val badedge3: Location = Location.create(3094, 3490, 0)
+ val badedge4: Location = Location.create(3094, 3494, 0)
+
var citygroupA = listOf(falador, varrock, draynor, rimmington, lumbridge, edgeville)
var citygroupB = listOf(yanille, ardougne, seers, catherby)
+ val cities = listOf(
+ swGEClerk, neGEClerk, nwGEBanker, seGEBanker,
+ yanille, ardougne, seers, catherby,
+ falador, varrock, draynor, rimmington,
+ lumbridge, edgeville
+ )
+
+ val pois = listOf(
+ karamja, karamja, alkharid,
+ alkharid, feldiphills, feldiphills,
+ isafdar, eaglespeek, eaglespeek,
+ canafis, treegnome, treegnome,
+ teak1, teakfarm, keldagrimout,
+ miningguild, coalTrucks, crawlinghands,
+ magics, gemrocks, chaosnpc, chaosnpc,
+ chaosnpc2, taverly,
+ varLumberYard)
+
+ val cityLocationsGE = listOf(swGEClerk, neGEClerk, nwGEBanker, seGEBanker)
+
+ val socialLocationsGE = listOf(
+ Location.create(3158, 3483, 0),
+ Location.create(3165, 3480, 0),
+ Location.create(3172, 3483, 0),
+ Location.create(3174, 3489, 0),
+ Location.create(3171, 3497, 0),
+ Location.create(3164, 3499, 0),
+ Location.create(3157, 3497, 0),
+ Location.create(3155, 3489, 0),
+ Location.create(3167, 3492, 0),
+ Location.create(3162, 3492, 0),
+ Location.create(3162, 3487, 0),
+ Location.create(3167, 3487, 0)
+ )
+
+ val clerkLocationsGe = listOf(
+ Location.create(3165, 3492, 0),
+ Location.create(3164, 3492, 0),
+ Location.create(3164, 3487, 0),
+ Location.create(3165, 3487, 0)
+ )
+
var bankMap = mapOf(
falador to ZoneBorders(2950, 3374, 2943, 3368),
varrock to ZoneBorders(3182, 3435, 3189, 3446),
@@ -538,22 +645,10 @@ class Adventurer(val style: CombatStyle): Script() {
catherby to ZoneBorders(2807, 3438, 2811, 3441)
)
- val cities = listOf(yanille, ardougne, seers, catherby, falador, varrock,
- draynor, rimmington, lumbridge, ge, ge2, edgeville)
-
- val pois = listOf(
- karamja, karamja, alkharid,
- alkharid, feldiphills, feldiphills,
- isafdar, eaglespeek, eaglespeek,
- canafis, treegnome, treegnome,
- teak1, teakfarm, keldagrimout,
- miningguild, coal, crawlinghands,
- magics, gemrocks, chaosnpc, chaosnpc,
- chaosnpc2, taverly)
-
private val whiteWolfMountainTop = Location(2850, 3496, 0)
private val catherbyToTopOfWhiteWolf = arrayOf(Location(2856, 3442, 0), Location(2848, 3455, 0), Location(2848, 3471, 0), Location(2848, 3487, 0))
private val tavleryToTopOfWhiteWolf = arrayOf(Location(2872, 3425, 0), Location(2863, 3440, 0), Location(2863, 3459, 0), Location(2854, 3475, 0), Location(2859, 3488, 0))
+
val common_stuck_locations = mapOf(
// South of Tavlery dungeon
ZoneBorders(2878, 3386, 2884, 3395) to { it: Adventurer ->
diff --git a/Server/src/main/content/global/bots/CannonballSmelter.kt b/Server/src/main/content/global/bots/CannonballSmelter.kt
index ca6406937..8ac77f7e1 100644
--- a/Server/src/main/content/global/bots/CannonballSmelter.kt
+++ b/Server/src/main/content/global/bots/CannonballSmelter.kt
@@ -7,8 +7,6 @@ import core.api.*
import core.game.bots.*
import core.game.ge.GrandExchange
import core.game.interaction.DestinationFlag
-import core.game.interaction.IntType
-import core.game.interaction.InteractionListeners
import core.game.interaction.MovementPulse
import core.game.node.Node
import core.game.node.entity.skill.Skills
@@ -16,6 +14,7 @@ import core.game.node.item.Item
import core.game.world.map.Location
import core.game.world.map.zone.ZoneBorders
import org.rs09.consts.Items
+import content.data.Quests
@PlayerCompatible
@ScriptName("Falador Cannonball Smelter")
@@ -273,6 +272,6 @@ class CannonballSmelter : Script() {
skills.put(Skills.HITPOINTS,99)
skills.put(Skills.DEFENCE,99)
skills.put(Skills.SMITHING,35)
- quests.add("Dwarf Cannon")
+ quests.add(Quests.DWARF_CANNON)
}
}
diff --git a/Server/src/main/content/global/dialogue/BankerDialogue.kt b/Server/src/main/content/global/dialogue/BankerDialogue.kt
index e913ce4f0..7b857da7d 100644
--- a/Server/src/main/content/global/dialogue/BankerDialogue.kt
+++ b/Server/src/main/content/global/dialogue/BankerDialogue.kt
@@ -45,18 +45,7 @@ class BankerDialogue(player: Player? = null) : core.game.dialogue.DialoguePlugin
2 -> showTopics(
Topic(core.game.dialogue.FacialExpression.FRIENDLY, "I'd like to access my bank account, please.", 10),
- IfTopic(
- core.game.dialogue.FacialExpression.FRIENDLY,
- "I'd like to switch to my ${getBankAccountName(player, true)} bank account.",
- 13,
- hasActivatedSecondaryBankAccount(player)
- ),
- IfTopic(
- core.game.dialogue.FacialExpression.FRIENDLY,
- "I'd like to open a secondary bank account.",
- 20,
- !hasActivatedSecondaryBankAccount(player)
- ),
+ Topic(core.game.dialogue.FacialExpression.FRIENDLY, "I'd like to switch my default bank account.", 7),
Topic(core.game.dialogue.FacialExpression.FRIENDLY, "I'd like to check my PIN settings.", 11),
Topic(core.game.dialogue.FacialExpression.FRIENDLY, "I'd like to collect items.", 12),
Topic(core.game.dialogue.FacialExpression.ASKING, "What is this place?", 3),
@@ -78,6 +67,53 @@ class BankerDialogue(player: Player? = null) : core.game.dialogue.DialoguePlugin
"Leave your valuables with us if you want to keep them safe."
).also { stage = END_DIALOGUE }
+ 7 -> showTopics(
+ IfTopic(
+ core.game.dialogue.FacialExpression.FRIENDLY,
+ "I'd like to turn on the Clan bank, please.",
+ 8,
+ !(player.getAttribute("clanbank:enabled",false))
+ ),
+ IfTopic(
+ core.game.dialogue.FacialExpression.FRIENDLY,
+ "I'd like to turn off the Clan bank, please.",
+ 9,
+ player.getAttribute("clanbank:enabled",false)
+ ),
+ IfTopic(
+ core.game.dialogue.FacialExpression.FRIENDLY,
+ "I'd like to switch to my ${getBankAccountName(player, true)} bank account.",
+ 13,
+ hasActivatedSecondaryBankAccount(player)
+ ),
+ IfTopic(
+ core.game.dialogue.FacialExpression.FRIENDLY,
+ "I'd like to open a secondary bank account.",
+ 20,
+ !hasActivatedSecondaryBankAccount(player)
+ ),
+ )
+
+ 8 -> {
+ player.setAttribute("/save:clanbank:enabled", true)
+
+ npcl(
+ core.game.dialogue.FacialExpression.FRIENDLY,
+ "The Clan bank has been enabled. " +
+ "If the Clan owner is online, you will access their primary bank account instead of your own."
+ ).also { stage = 2 }
+ }
+
+ 9 -> {
+ player.removeAttribute("clanbank:enabled")
+
+ npcl(
+ core.game.dialogue.FacialExpression.FRIENDLY,
+ "The Clan bank has been disabled. " +
+ "You will now always open your personal bank account."
+ ).also { stage = 2 }
+ }
+
10 -> {
openBankAccount(player)
end()
diff --git a/Server/src/main/content/global/dialogue/GardenerDialoguePlugin.kt b/Server/src/main/content/global/dialogue/GardenerDialoguePlugin.kt
index 3fa655c5d..6c192972c 100644
--- a/Server/src/main/content/global/dialogue/GardenerDialoguePlugin.kt
+++ b/Server/src/main/content/global/dialogue/GardenerDialoguePlugin.kt
@@ -3,160 +3,227 @@ package content.global.dialogue
import content.global.skill.farming.FarmerPayOptionDialogue
import content.global.skill.farming.Farmers
import content.global.skill.farming.FarmingPatch
-import core.game.node.entity.npc.NPC
+import content.global.skill.farming.PatchType
+import core.api.*
+import core.game.dialogue.FacialExpression
+import core.game.dialogue.IfTopic
+import core.game.dialogue.Topic
import core.game.node.entity.player.Player
import core.game.node.item.Item
import core.plugin.Initializable
import org.rs09.consts.Items
import core.tools.END_DIALOGUE
+import core.tools.START_DIALOGUE
@Initializable
class GardenerDialoguePlugin(player: Player? = null) : core.game.dialogue.DialoguePlugin(player) {
- override fun newInstance(player: Player?): core.game.dialogue.DialoguePlugin {
- return GardenerDialoguePlugin(player)
- }
-
- override fun open(vararg args: Any?): Boolean {
- npc = args[0] as NPC
- options("Would you look after my crops for me?","Can you sell me something?")
- return true
- }
-
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
- when(stage){
- 0 -> when(buttonId){
- 1 -> player("Would you look after my crops for me?").also { stage = 10 }
- 2 -> player("Can you sell me something?").also { stage = 30 }
+ val patches = Farmers.forId(npc.id)!!.patches
+ when (stage) {
+ // TODO: Can fruit trees be chopped down by the gardener too?
+ START_DIALOGUE -> {
+ val patch = patches[0].getPatchFor(player)
+ showTopics(
+ IfTopic(
+ FacialExpression.ASKING,
+ "Would you chop my tree down for me?",
+ 1000,
+ patch.patch.type == PatchType.TREE_PATCH && patch.plantable != null && patch.isGrown()
+ ),
+ IfTopic(
+ FacialExpression.ASKING,
+ "Would you look after my crops for me?",
+ 10,
+ !(patch.patch.type == PatchType.TREE_PATCH && patch.plantable != null && patch.isGrown())
+ ),
+ Topic(FacialExpression.ASKING, "Can you give me any farming advice?", 2000),
+ Topic(FacialExpression.ASKING, "Can you sell me something?", 30),
+ Topic(FacialExpression.NEUTRAL, "That's all, thanks.", END_DIALOGUE)
+ )
}
- 10 -> npc("I might. Which one were you thinking of?").also { stage++ }
- 11 -> when(npc.id){
- Farmers.ELSTAN.id, Farmers.LYRA.id -> options("The north-western allotment.","The south-eastern allotment.").also { stage = 15 }
- Farmers.DANTAERA.id, Farmers.KRAGEN.id -> options("The north allotment.","The south allotment.").also { stage = 15 }
- else -> player("Uh, that one.").also { stage++ }
+ 10 -> {
+ if (patches.size > 1) {
+ npc("I might. Which one were you thinking of?").also { stage = 20 }
+ } else {
+ openPayGardenerDialogue(player, patches[0])
+ }
}
- 12 -> npc("Oh, right. My bad.").also { stage++ }
- 13 -> checkPatch(player,Farmers.forId(npc.id)!!.patches[0])
-
- 15 -> when(buttonId){
- 1 -> checkPatch(player,Farmers.forId(npc.id)!!.patches[0])
- 2 -> checkPatch(player,Farmers.forId(npc.id)!!.patches[1])
+ 20 -> when (npc.id) {
+ Farmers.ELSTAN.id, Farmers.LYRA.id -> showTopics(
+ Topic(FacialExpression.NEUTRAL, "The north-western allotment.", 21),
+ Topic(FacialExpression.NEUTRAL, "The south-eastern allotment.", 22)
+ )
+ Farmers.DANTAERA.id, Farmers.KRAGEN.id -> showTopics(
+ Topic(FacialExpression.NEUTRAL, "The northern allotment.", 21),
+ Topic(FacialExpression.NEUTRAL, "The southern allotment.", 22)
+ )
}
+ 21 -> openPayGardenerDialogue(player, patches[0])
+ 22 -> openPayGardenerDialogue(player, patches[1])
- 30 -> npc("That depends on whether I have it to sell.","What is it that you're looking for?").also { stage++ }
- 31 -> options("Some plant cure.","A bucket of compost.","A rake.","(See more items)").also { stage = 32 }
- 32 -> when(buttonId){
- 1 -> player("Some plant cure.").also { stage = 100 }
- 2 -> player("A bucket of compost.").also { stage = 200 }
- 3 -> player("A rake.").also { stage = 300 }
- 4 -> options("A watering can.","A gardening trowel.","A seed dibber.","(See previous items)").also { stage++ }
- }
- 33 -> when(buttonId){
- 1 -> player("A watering can.").also { stage = 400 }
- 2 -> player("A gardening trowel.").also { stage = 500 }
- 3 -> player("A seed dibber.").also { stage = 600 }
- 4 -> options("Some plant cure.","A bucket of compost.","A rake.","(See more items)").also { stage = 32 }
- }
+ 30 -> npc(FacialExpression.NEUTRAL, "That depends on whether I have it to sell. What is it", "that you're looking for?").also { stage++ }
+ 31 -> showTopics(
+ Topic(FacialExpression.NEUTRAL, "Some plant cure.", 100),
+ Topic(FacialExpression.NEUTRAL, "A bucket of compost.", 200),
+ Topic(FacialExpression.NEUTRAL, "A rake.", 300),
+ Topic("(See more items)", 32, true)
+ )
+ 32 -> showTopics(
+ Topic(FacialExpression.NEUTRAL, "A watering can.", 400),
+ Topic(FacialExpression.NEUTRAL, "A gardening trowel.", 500),
+ Topic(FacialExpression.NEUTRAL, "A seed dibber.", 600),
+ Topic("(See previous items)", 31, true),
+ Topic(FacialExpression.NEUTRAL, "Forget it.", 40, true)
+ )
- 100 -> npc("Plant cure, eh? I might have some put aside for myself.","Tell you what, I'll sell you some plant cure","for 25 gp if you like.").also { stage++ }
- 101 -> options("Yes, that sounds like a fair price.","No thanks, I can get that much cheaper.").also { stage++ }
- 102 -> when(buttonId){
+ 40 -> player("Forget it, you don't have anything I need.").also { stage = END_DIALOGUE }
+
+ 100 -> npc("Plant cure, eh? I might have some put aside for myself.", "Tell you what. I'll sell you some plant cure for 25 gp if", "you like.").also { stage++ }
+ 101 -> options("Yes, that sounds like a fair price.", "No thanks, I can get that much cheaper elsewhere.").also { stage++ }
+ 102 -> when (buttonId) {
1 -> {
- player("Yes, that sounds like a fair price.").also { stage = END_DIALOGUE }
- if(player.inventory.remove(Item(995,25))){
- player.inventory.add(Item(Items.PLANT_CURE_6036))
+ player(FacialExpression.HAPPY, "Yes, that sounds like a fair price.").also { stage = END_DIALOGUE }
+ if (removeItem(player, Item(Items.COINS_995, 25))) {
+ addItemOrDrop(player, Items.PLANT_CURE_6036)
} else {
- player.sendMessage("You need 25 gp to pay for that.")
+ sendMessage(player, "You need 25 gp to pay for that.")
}
}
- 2 -> end()
+ 2 -> player("No thanks, I can get that much cheaper elsewhere.").also { stage = END_DIALOGUE }
}
- 200 -> npc("A bucket of compost, eh? I might have one spare...","tell you what, I'll sell it to you for 35 gp if you like.").also { stage++ }
- 201 -> options("Yes, that sounds fair.","No thanks, I can get that cheaper.").also { stage++ }
- 202 -> when(buttonId){
+ 200 -> npc("A bucket of compost, eh? I might have one spare...", "tell you what, I'll sell it to you for 35 gp if you like.").also { stage++ }
+ 201 -> options("Yes, that sounds like a fair price.", "No thanks, I can get that much cheaper elsewhere.").also { stage++ }
+ 202 -> when (buttonId) {
1 -> {
player("Yes, that sounds like a fair price.").also { stage = END_DIALOGUE }
- if(player.inventory.remove(Item(995,35))){
- player.inventory.add(Item(Items.COMPOST_6032))
+ if (removeItem(player, Item(Items.COINS_995, 35))) {
+ addItemOrDrop(player, Items.COMPOST_6032)
} else {
- player.sendMessage("You need 35 gp to pay for that.")
+ sendMessage(player, "You need 35 gp to pay for that.")
}
}
- 2 -> end()
+ 2 -> player("No thanks, I can get that much cheaper elsewhere.").also { stage = END_DIALOGUE }
}
- 300 -> npc("A rake, eh? I might have one spare...","tell you what, I'll sell it to you for 15 gp if you like.").also { stage++ }
- 301 -> options("Yes, that sounds fair.","No thanks, I can get that cheaper.").also { stage++ }
- 302 -> when(buttonId){
+ 300 -> npc("A rake, eh? I might have one spare...", "tell you what, I'll sell it to you for 15 gp if you like.").also { stage++ }
+ 301 -> options("Yes, that sounds like a fair price.", "No thanks, I can get that much cheaper elsewhere.").also { stage++ }
+ 302 -> when (buttonId) {
1 -> {
player("Yes, that sounds like a fair price.").also { stage = END_DIALOGUE }
- if(player.inventory.remove(Item(995,15))){
- player.inventory.add(Item(Items.RAKE_5341))
+ if (removeItem(player, Item(Items.COINS_995, 15))) {
+ addItemOrDrop(player, Items.RAKE_5341)
} else {
- player.sendMessage("You need 15 gp to pay for that.")
+ sendMessage(player, "You need 15 gp to pay for that.")
}
}
- 2 -> end()
+ 2 -> player("No thanks, I can get that much cheaper elsewhere.").also { stage = END_DIALOGUE }
}
- 400 -> npc("A watering can, eh? I might have one spare...","tell you what, I'll sell it to you for 25 gp if you like.").also { stage++ }
- 401 -> options("Yes, that sounds fair.","No thanks, I can get that cheaper.").also { stage++ }
+ 400 -> npc("A watering can, eh? I might have one spare...", "tell you what, I'll sell it to you for 25 gp if you like.").also { stage++ }
+ 401 -> options("Yes, that sounds like a fair price.", "No thanks, I can get that much cheaper elsewhere.").also { stage++ }
402 -> when(buttonId){
1 -> {
player("Yes, that sounds like a fair price.").also { stage = END_DIALOGUE }
- if(player.inventory.remove(Item(995,25))){
- player.inventory.add(Item(Items.WATERING_CAN8_5340))
+ if (removeItem(player, Item(Items.COINS_995, 25))) {
+ addItemOrDrop(player, Items.WATERING_CAN8_5340)
} else {
- player.sendMessage("You need 25 gp to pay for that.")
+ sendMessage(player, "You need 25 gp to pay for that.")
}
}
- 2 -> end()
+ 2 -> player("No thanks, I can get that much cheaper elsewhere.").also { stage = END_DIALOGUE }
}
- 500 -> npc("A gardening trowel, eh? I might have one spare...","tell you what, I'll sell it to you for 15 gp if you like.").also { stage++ }
- 501 -> options("Yes, that sounds fair.","No thanks, I can get that cheaper.").also { stage++ }
- 502 -> when(buttonId){
+ 500 -> npc("A gardening trowel, eh? I might have one spare...", "tell you what, I'll sell it to you for 15 gp if you like.").also { stage++ }
+ 501 -> options("Yes, that sounds like a fair price.", "No thanks, I can get that much cheaper elsewhere.").also { stage++ }
+ 502 -> when (buttonId) {
1 -> {
player("Yes, that sounds like a fair price.").also { stage = END_DIALOGUE }
- if(player.inventory.remove(Item(995,15))){
- player.inventory.add(Item(Items.GARDENING_TROWEL_5325))
+ if (removeItem(player, Item(Items.COINS_995, 15))) {
+ addItemOrDrop(player, Items.GARDENING_TROWEL_5325)
} else {
- player.sendMessage("You need 15 gp to pay for that.")
+ sendMessage(player, "You need 15 gp to pay for that.")
}
}
- 2 -> end()
+ 2 -> player("No thanks, I can get that much cheaper elsewhere.").also { stage = END_DIALOGUE }
}
- 600 -> npc("A seed dibber, eh? I might have one spare...","tell you what, I'll sell it to you for 15 gp if you like.").also { stage++ }
- 601 -> options("Yes, that sounds fair.","No thanks, I can get that cheaper.").also { stage++ }
- 602 -> when(buttonId){
+ 600 -> npc("A seed dibber, eh? I might have one spare...", "tell you what, I'll sell it to you for 15 gp if you like.").also { stage++ }
+ 601 -> options("Yes, that sounds like a fair price.", "No thanks, I can get that much cheaper elsewhere.").also { stage++ }
+ 602 -> when (buttonId) {
1 -> {
player("Yes, that sounds like a fair price.").also { stage = END_DIALOGUE }
- if(player.inventory.remove(Item(995,15))){
- player.inventory.add(Item(Items.SEED_DIBBER_5343))
+ if (removeItem(player, Item(Items.COINS_995, 15))) {
+ addItemOrDrop(player, Items.SEED_DIBBER_5343)
} else {
- player.sendMessage("You need 15 gp to pay for that.")
+ sendMessage(player, "You need 15 gp to pay for that.")
}
}
- 2 -> end()
+ 2 -> player("No thanks, I can get that much cheaper elsewhere.").also { stage = END_DIALOGUE }
+ }
+
+ // Note: This dialogue changes slightly in April 2009, and significantly in December 2009
+ 1000 -> npc(FacialExpression.THINKING, "Why? You look like you could chop it down yourself!").also { stage++ }
+ 1001 -> showTopics(
+ Topic(FacialExpression.NEUTRAL, "Yes, you're right - I'll do it myself.", END_DIALOGUE),
+ Topic(FacialExpression.NEUTRAL, "I can't be bothered - I'd rather pay you to do it.", 1020)
+ )
+
+ 1020 -> npc(FacialExpression.NEUTRAL, "Well, it's a lot of hard work - if you pay me 200 GP", "I'll chop it down for you.").also { stage++ }
+ 1021 -> {
+ if (inInventory(player, Items.COINS_995, 200)) {
+ showTopics(
+ Topic(FacialExpression.NEUTRAL, "Here's 200GP - chop my tree down please.", 1022),
+ Topic(FacialExpression.NEUTRAL, "I don't want to pay that much, sorry.", END_DIALOGUE)
+ )
+ } else {
+ player("I don't have that much money on me.").also { stage = END_DIALOGUE } // not authentic
+ }
+ }
+ 1022 -> {
+ end()
+ if (removeItem(player, Item(Items.COINS_995, 200))) {
+ patches[0].getPatchFor(player).clear()
+ }
+ }
+
+ 2000 -> {
+ val advice = arrayOf(
+ "There are four main Farming areas - Elstan looks after an area south of Falador, Dantaera has one to the north of Catherby, Kragen has one near Ardougne, and Lyra looks after a place in north Morytania.",
+ "If you want to grow fruit trees you could try a few places: Catherby and Brimhaven have a couple of fruit tree patches, and I hear that the gnomes are big on that sort of thing.",
+ "Bittercap mushrooms can only be grown in a special patch in Morytania, near the Mort Myre swamp. There the ground is especially dank and suited to growing poisonous fungi.",
+ "There is a special patch for growing Belladonna - I believe it's somewhere near Draynor Manor, where the ground is a tad 'unblessed'.",
+
+ "Don't just throw away your weeds after you've raked a patch - put them in a compost bin and make some compost.",
+ "Applying compost to a patch will not only reduce the chance that your crops will get diseased, but you will also grow more crops to harvest.",
+ "Supercompost is far better than normal compost, but more expensive to make. You need to rot the right type of item; show me an item, and I'll tell you if it's super-compostable or not.",
+
+ "Tree seeds must be grown in a plantpot of soil into a sapling, and then transferred to a tree patch to continue growing to adulthood.",
+ "You don't have to buy all your plantpots you know, you can make them yourself on a pottery wheel. If you're a good enough ${if (player!!.isMale) "craftsman" else "craftswoman"}, that is.",
+ "You can fill plantpots with soil from Farming patches, if you have a gardening trowel.",
+
+ "Vegetables, hops and flowers are far more likely to grow healthily if you water them periodically.",
+ "The only way to cure a bush or tree of disease is to prune away the diseased leaves with a pair of secateurs. For all other crops I would just apply some plant-cure.",
+ "If you need to be rid of your fruit trees for any reason, all you have to do is chop them down and then dig up the stump.",
+
+ "You can put up to ten potatoes, cabbages or onions in vegetable sacks, although you can't have a mix in the same sack.",
+ "You can put up to five tomatoes, strawberries, apples, bananas or oranges into a fruit basket, although you can't have a mix in the same basket.",
+ "If you want to make your own sacks and baskets you'll need to use the loom that's near the Farming shop in Falador. If you're a good enough ${if (player!!.isMale) "craftsman" else "craftswoman"}, that is.",
+ "You can buy all the farming tools from farming shops, which can be found close to the allotments.",
+
+ "Hops are good for brewing ales. I believe there's a brewery up in Keldagrim somewhere, and I've heard rumours that a place called Phasmatys used to be good for that type of thing. 'Fore they all died, of course.",
+ )
+ npcl(FacialExpression.NEUTRAL, advice.random()).also { stage = START_DIALOGUE }
}
}
return true
}
- fun checkPatch(player: Player,fPatch: FarmingPatch){
- if(fPatch.getPatchFor(player).isWeedy()){
- npc("You don't have anything planted in that patch.","Plant something and I might agree to look after it for you.").also { stage = END_DIALOGUE }
- } else if(fPatch.getPatchFor(player).isGrown()){
- npc("That patch is already fully grown!","I don't know what you want me to do with it!").also { stage = END_DIALOGUE }
- } else if(fPatch.getPatchFor(player).protectionPaid) {
- npc("Are you alright? You've already", "paid me for that.").also { stage = END_DIALOGUE }
- } else {
- end()
- player.dialogueInterpreter.open(FarmerPayOptionDialogue(fPatch.getPatchFor(player)),npc)
- }
+ fun openPayGardenerDialogue(player: Player, fPatch: FarmingPatch) {
+ end()
+ openDialogue(player, FarmerPayOptionDialogue(fPatch.getPatchFor(player)), npc)
}
override fun getIds(): IntArray {
diff --git a/Server/src/main/content/global/dialogue/ManDialoguePlugin.java b/Server/src/main/content/global/dialogue/ManDialoguePlugin.java
index 36785504e..aeff88be1 100644
--- a/Server/src/main/content/global/dialogue/ManDialoguePlugin.java
+++ b/Server/src/main/content/global/dialogue/ManDialoguePlugin.java
@@ -22,7 +22,7 @@ public class ManDialoguePlugin extends DialoguePlugin {
/**
* The NPC ids that use this dialogue plugin.
*/
- private static final int[] NPC_IDS = {1, 2, 3, 4, 5, 6, 16, 24, 25, 170, 351, 352, 353, 354, 359, 360, 361, 362, 363, 726, 727, 728, 729, 730, 1086, 2675, 2776, 3224, 3225, 3227, 5923, 5924,};
+ private static final int[] NPC_IDS = {1, 2, 3, 4, 5, 6, 16, 24, 25, 170, 1086, 2675, 2776, 3224, 3225, 3227, 5923, 5924,};
public ManDialoguePlugin() {
}
diff --git a/Server/src/main/content/global/handlers/iface/ClanInterfacePlugin.java b/Server/src/main/content/global/handlers/iface/ClanInterfacePlugin.java
index 1ad3857e8..5003507c2 100644
--- a/Server/src/main/content/global/handlers/iface/ClanInterfacePlugin.java
+++ b/Server/src/main/content/global/handlers/iface/ClanInterfacePlugin.java
@@ -36,17 +36,21 @@ public final class ClanInterfacePlugin extends ComponentPlugin {
switch (component.getId()) {
case 589:
switch (button) {
- case 9:
- if (player.getInterfaceManager().getComponent(590) != null) {
- player.getPacketDispatch().sendMessage("Please close the interface you have open before using 'Clan Setup'");
+ case 9:
+ if (player.getInterfaceManager().getComponent(590) != null) {
+ player.getPacketDispatch().sendMessage("Please close the interface you have open before using 'Clan Setup'");
+ return true;
+ }
+ ClanRepository.openSettings(player);
return true;
- }
- ClanRepository.openSettings(player);
- return true;
- case 14:
- player.getDetails().getCommunication().toggleLootshare(player);
- return true;
+ case 14:
+ if (player.getIronmanManager().checkRestriction()) {
+ return false;
+ }
+ player.getDetails().getCommunication().toggleLootshare(player);
+ return true;
}
+
break;
case 590:
final ClanRepository clan = ClanRepository.get(player.getName(), true);
diff --git a/Server/src/main/content/global/handlers/iface/ExperienceInterface.kt b/Server/src/main/content/global/handlers/iface/ExperienceInterface.kt
index be4d2599e..c7003ea83 100644
--- a/Server/src/main/content/global/handlers/iface/ExperienceInterface.kt
+++ b/Server/src/main/content/global/handlers/iface/ExperienceInterface.kt
@@ -10,6 +10,7 @@ import core.plugin.Initializable
import core.plugin.Plugin
import core.tools.Log
import org.rs09.consts.Sounds
+import content.data.Quests
/**
* Represents the experience interface.
@@ -78,15 +79,15 @@ class ExperienceInterface() : ComponentPlugin() {
}
private fun checkHerblore(player: Player): Boolean{
- return (player.questRepository.isComplete("Druidic Ritual"))
+ return (player.questRepository.isComplete(Quests.DRUIDIC_RITUAL))
}
private fun checkSummoning(player: Player): Boolean{
- return player.questRepository.isComplete("Wolf Whistle")
+ return player.questRepository.isComplete(Quests.WOLF_WHISTLE)
}
private fun checkRunecrafting(player: Player): Boolean{
- return player.questRepository.isComplete("Rune Mysteries")
+ return player.questRepository.isComplete(Quests.RUNE_MYSTERIES)
}
companion object {
diff --git a/Server/src/main/content/global/handlers/iface/FairyRingInterface.kt b/Server/src/main/content/global/handlers/iface/FairyRingInterface.kt
index 70a005ec4..69ad63e21 100644
--- a/Server/src/main/content/global/handlers/iface/FairyRingInterface.kt
+++ b/Server/src/main/content/global/handlers/iface/FairyRingInterface.kt
@@ -2,109 +2,130 @@ package content.global.handlers.iface
import core.api.*
import core.game.event.FairyRingDialEvent
-import core.game.component.Component
+import core.game.interaction.InterfaceListener
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.TeleportManager
import core.game.system.task.Pulse
+import core.game.world.GameWorld
import core.game.world.map.Location
import core.game.world.map.RegionManager
import core.tools.RandomFunction
-import core.game.interaction.InterfaceListener
-import core.game.world.GameWorld
-
-val RING_1 = arrayOf('a','d','c','b')
-val RING_2 = arrayOf('i','l','k','j')
-val RING_3 = arrayOf('p','s','r','q')
+import content.data.Quests
/**
* Handles the fairy ring interface
* @author Ceikry
*/
class FairyRingInterface : InterfaceListener {
-
- val RINGS = 734
- val TRAVEL_LOG = 735
+ companion object {
+ const val RINGS_IFACE = 734
+ const val LOG_IFACE_ID = 735
+ const val VARP_F_RING = 816
+ const val VB_LOG_SORT_ORDER = 4618
+ const val VB_RING_1 = 2341
+ const val VB_RING_2 = 2342
+ const val VB_RING_3 = 2343
+ val RING_1 = arrayOf('a','d','c','b')
+ val RING_2 = arrayOf('i','l','k','j')
+ val RING_3 = arrayOf('p','s','r','q')
+ }
override fun defineInterfaceListeners() {
- onOpen(RINGS){player, _ ->
- player.interfaceManager.openSingleTab(Component(TRAVEL_LOG))
- player.setAttribute("fr:ring1", 0)
- player.setAttribute("fr:ring2", 0)
- player.setAttribute("fr:ring3", 0)
- FairyRing.drawLog(player)
+ onOpen(RINGS_IFACE){ player, _ ->
+ openSingleTab(player, LOG_IFACE_ID)
+ saveVarp(player, VARP_F_RING)
return@onOpen true
}
- onClose(RINGS){player, _ ->
- closeTabInterface(player)
- player.removeAttribute("fr:ring1")
- player.removeAttribute("fr:ring2")
- player.removeAttribute("fr:ring3")
- setVarp(player, 816, 0)
+ onOpen(LOG_IFACE_ID){ player, _ ->
+ drawLog(player)
+ return@onOpen true
+ }
+
+ onClose(RINGS_IFACE){ player, _ ->
closeTabInterface(player)
return@onClose true
}
- on(RINGS){player, _, _, buttonID, _, _ ->
- if(player.getAttribute("fr:time",0L) > System.currentTimeMillis()) return@on true
- var delayIncrementer = 1750L
+ on(RINGS_IFACE){ player, _, _, buttonID, _, _ ->
when(buttonID){
- 23 -> delayIncrementer += increment(player,1)
- 25 -> delayIncrementer += increment(player,2)
- 27 -> delayIncrementer += increment(player,3)
+ 23 -> increment(player,1)
+ 25 -> increment(player,2)
+ 27 -> increment(player,3)
24 -> decrement(player,1)
26 -> decrement(player,2)
28 -> decrement(player,3)
21 -> confirm(player)
}
- player.setAttribute("fr:time",System.currentTimeMillis() + delayIncrementer)
return@on true
}
- on(TRAVEL_LOG,12){player, _, _, _, _, _ ->
+ on(LOG_IFACE_ID,12){ player, _, _, _, _, _ ->
toggleSortOrder(player)
return@on true
}
}
- private fun toggleSortOrder(player: Player): Long{
- val ring1index = player.getAttribute("fr:ring1",0)
- var toSet = player.getAttribute("fr:sortorder",true)
- toSet = !toSet
- player.setAttribute("fr:sortorder",toSet)
- if(toSet) {
- setVarp(player, 816, ring1index)
- player.setAttribute("fr:ring2",0)
- player.setAttribute("fr:ring3",0)
+ /**
+ * Draws the travel log interface
+ * Currently, the visited logs is a bool array in globalData. Someone should migrate this to prefs or something at some point.
+ * On transmit of Varp 816, which all used varbits are part of here, the CS2 is invoked to populate the codes in the log and sort them correctly.
+ * @param player The player to draw the interface for
+ */
+ private fun drawLog (player: Player)
+ {
+ for (i in FairyRing.values().indices) {
+ /* Snowscape: show all fairy ring destinations, whether they have been there or not.
+ if (!player.savedData.globalData.hasTravelLog(i)) {
+ continue
+ }
+ */
+ val ring = FairyRing.values()[i]
+ if (ring.childId == -1) {
+ continue
+ }
+ setInterfaceText(player, " ${ring.tip}", LOG_IFACE_ID, ring.childId)
}
- return -1750L
}
- fun increment(player: Player,ring: Int): Long{
- val curIndex = player.getAttribute("fr:ring$ring",0)
- var nextIndex = 0
- if(curIndex == 3) nextIndex = 0
- else if(curIndex == 1) nextIndex = 3
- else if(curIndex == 2) nextIndex = 2
- else nextIndex = curIndex + 1
- player.setAttribute("fr:ring$ring",nextIndex)
- return if (curIndex == 1) 1750L else 0L
+ private fun toggleSortOrder(player: Player) {
+ val curSort = getVarbit(player, VB_LOG_SORT_ORDER) == 0
+ setVarbit(player, VB_LOG_SORT_ORDER, if (curSort) 1 else 0)
+ drawLog(player)
+ }
+
+ fun increment(player: Player,ring: Int) {
+ val vbit = when(ring) {
+ 1 -> VB_RING_1
+ 2 -> VB_RING_2
+ 3 -> VB_RING_3
+ else -> return
+ }
+ val curIndex = getVarbit(player, vbit)
+ val nextIndex: Int = if(curIndex == 3) 0
+ else curIndex + 1
+ setVarbit(player, vbit, nextIndex)
}
fun decrement(player: Player,ring: Int){
- val curIndex = player.getAttribute("fr:ring$ring",0)
- var nextIndex = 0
- if(curIndex == 0) nextIndex = 3
- else nextIndex = curIndex - 1
- player.setAttribute("fr:ring$ring",nextIndex)
+ val vbit = when(ring) {
+ 1 -> VB_RING_1
+ 2 -> VB_RING_2
+ 3 -> VB_RING_3
+ else -> return
+ }
+ val curIndex = getVarbit(player, vbit)
+ val nextIndex: Int = if(curIndex == 0) 3
+ else curIndex - 1
+ setVarbit(player, vbit, nextIndex)
}
private fun confirm(player: Player){
- val ring1index = player.getAttribute("fr:ring1",0)
- val ring2index = player.getAttribute("fr:ring2",0)
- val ring3index = player.getAttribute("fr:ring3",0)
+ val ring1index = getVarbit(player, VB_RING_1)
+ val ring2index = getVarbit(player, VB_RING_2)
+ val ring3index = getVarbit(player, VB_RING_3)
val code = "${RING_1[ring1index]}${RING_2[ring2index]}${RING_3[ring3index]}"
val ring: FairyRing? = try {
FairyRing.valueOf(code.uppercase())
@@ -160,7 +181,7 @@ enum class FairyRing(val tile: Location?, val tip: String = "", val childId: Int
AKS(Location.create(2571, 2956, 0), "Feldip Hills: Jungle Hunter area", 25),
ALQ(Location.create(3597, 3495, 0), "Morytania: Haunted Woods east of Canifis", 27) {
override fun checkAccess(player: Player) : Boolean {
- return requireQuest(player, "Priest in Peril", "to use this ring.")
+ return requireQuest(player, Quests.PRIEST_IN_PERIL, "to use this ring.")
}
},
ALS(Location.create(2644, 3495, 0), "Kandarin: McGrubor's Wood", 29),
@@ -172,7 +193,7 @@ enum class FairyRing(val tile: Location?, val tip: String = "", val childId: Int
BKQ(Location.create(3041, 4532, 0), "Other realms: Enchanted Valley", 39),
BKR(Location.create(3469, 3431, 0), "Morytania: Mort Myre, south of Canifis", 40) {
override fun checkAccess(player: Player) : Boolean {
- return requireQuest(player, "Priest in Peril", "to use this ring.")
+ return requireQuest(player, Quests.PRIEST_IN_PERIL, "to use this ring.")
}
},
BLP(Location.create(2437, 5126, 0), "Dungeons: TzHaar area", 42),
@@ -180,7 +201,7 @@ enum class FairyRing(val tile: Location?, val tip: String = "", val childId: Int
BLR(Location.create(2740, 3351, 0), "Kandarin: Legends' Guild", 44),
CIP(Location.create(2513, 3884, 0), "Islands: Miscellania", 46) {
override fun checkAccess(player: Player): Boolean {
- return requireQuest(player, "Fremennik Trials", "to use this ring.")
+ return requireQuest(player, Quests.THE_FREMENNIK_TRIALS, "to use this ring.")
}
},
CIQ(Location.create(2528, 3127, 0), "Kandarin: North-west of Yanille", 47),
@@ -189,7 +210,7 @@ enum class FairyRing(val tile: Location?, val tip: String = "", val childId: Int
CKR(Location.create(2801, 3003, 0), "Karamja: South of Tai Bwo Wannai Village", 56),
CKS(Location.create(3447, 3470, 0), "Morytania: Canifis", 57) {
override fun checkAccess(player: Player) : Boolean {
- return requireQuest(player, "Priest in Peril", "to use this ring.")
+ return requireQuest(player, Quests.PRIEST_IN_PERIL, "to use this ring.")
}
},
CLP(Location.create(3082, 3206, 0), "Islands: South of Draynor Village", 58),
@@ -208,23 +229,4 @@ enum class FairyRing(val tile: Location?, val tip: String = "", val childId: Int
open fun checkAccess(player: Player) : Boolean {
return true
}
-
- companion object {
- /**
- * Draws the travel log.
- * @param player the player.
- */
- fun drawLog(player: Player) {
- for (i in FairyRing.values().indices) {
- if (!player.savedData.globalData.hasTravelLog(i)) {
- continue
- }
- val ring = FairyRing.values()[i]
- if (ring.childId == -1) {
- continue
- }
- setInterfaceText(player, " ${ring.tip}", 735, ring.childId)
- }
- }
- }
}
diff --git a/Server/src/main/content/global/handlers/iface/JewelleryInterface.java b/Server/src/main/content/global/handlers/iface/JewelleryInterface.java
index 11eb23415..ea45a538a 100644
--- a/Server/src/main/content/global/handlers/iface/JewelleryInterface.java
+++ b/Server/src/main/content/global/handlers/iface/JewelleryInterface.java
@@ -165,6 +165,7 @@ public final class JewelleryInterface extends ComponentPlugin {
amount = 5;
break;
case 124:
+ /* No need to calculate the maximum amount here, because the make() function will perform that step
if (data.name().contains("GOLD")) {
amount = player.getInventory().getAmount(new Item(GOLD_BAR));
} else {
@@ -178,6 +179,8 @@ public final class JewelleryInterface extends ComponentPlugin {
amount = first;
}
}
+ */
+ amount = 99;
break;
case 199:
final JewelleryItem d = data;
diff --git a/Server/src/main/content/global/handlers/iface/MagicBookInterface.java b/Server/src/main/content/global/handlers/iface/MagicBookInterface.java
index af5c87baa..6832efb43 100644
--- a/Server/src/main/content/global/handlers/iface/MagicBookInterface.java
+++ b/Server/src/main/content/global/handlers/iface/MagicBookInterface.java
@@ -14,6 +14,9 @@ import core.game.node.entity.player.link.SpellBookManager.SpellBook;
import core.game.world.GameWorld;
import core.plugin.Plugin;
+import content.data.Quests;
+import static core.api.ContentAPIKt.hasRequirement;
+
/**
* Represents the magic book interface handling of non-combat spells.
* @author 'Vexia
@@ -42,9 +45,44 @@ public final class MagicBookInterface extends ComponentPlugin {
? SpellBook.ANCIENT
: SpellBook.LUNAR;
+ // Snowscape: Allow switching between unlocked spellbooks with the magic interface sort buttons
+ if (spellBook == SpellBook.MODERN) {
+ if (button == 65 && swapSpellBook(player, SpellBook.ANCIENT)) {
+ return true;
+ } else if (button == 66 && swapSpellBook(player, SpellBook.LUNAR)) {
+ return true;
+ }
+ } else if (spellBook == SpellBook.ANCIENT) {
+ if (button == 29 && swapSpellBook(player, SpellBook.MODERN)) {
+ return true;
+ } else if (button == 31 && swapSpellBook(player, SpellBook.LUNAR)) {
+ return true;
+ }
+ } else if (spellBook == SpellBook.LUNAR) {
+ if (button == 40 && swapSpellBook(player, SpellBook.MODERN)) {
+ return true;
+ } else if (button == 41 && swapSpellBook(player, SpellBook.ANCIENT)) {
+ return true;
+ }
+ }
+
+
SpellListeners.run(button, SpellListener.NONE, SpellUtils.getBookFromInterface(component.getId()),player,null);
boolean result = MagicSpell.castSpell(player, spellBook, button, player);
return result;
}
+
+ // Snowscape custom function
+ private boolean swapSpellBook(final Player player, SpellBook spellBook) {
+ if (spellBook == SpellBook.ANCIENT && !hasRequirement(player, Quests.DESERT_TREASURE)) {
+ return false;
+ } else if (spellBook == SpellBook.LUNAR && !hasRequirement(player, Quests.LUNAR_DIPLOMACY)) {
+ return false;
+ }
+ player.getSpellBookManager().setSpellBook(spellBook);
+ player.getSpellBookManager().update(player);
+ return true;
+ }
}
+
diff --git a/Server/src/main/content/global/handlers/iface/PrayerTabInterface.java b/Server/src/main/content/global/handlers/iface/PrayerTabInterface.java
index 2d0932e89..2c31b11ce 100644
--- a/Server/src/main/content/global/handlers/iface/PrayerTabInterface.java
+++ b/Server/src/main/content/global/handlers/iface/PrayerTabInterface.java
@@ -9,6 +9,7 @@ import core.plugin.Initializable;
import core.plugin.Plugin;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
/**
* Represents the prayer interface.
@@ -27,7 +28,7 @@ public final class PrayerTabInterface extends ComponentPlugin {
public boolean handle(Player player, Component component, int opcode, int button, int slot, int itemId) {
final PrayerType type = PrayerType.get(button);
if (type == PrayerType.CHIVALRY || type == PrayerType.PIETY)
- if (!hasRequirement(player, "King's Ransom"))
+ if (!hasRequirement(player, Quests.KINGS_RANSOM))
return true;
if (type == null) {
return true;
diff --git a/Server/src/main/content/global/handlers/iface/QuestTabUtils.kt b/Server/src/main/content/global/handlers/iface/QuestTabUtils.kt
index d7482c089..3af184404 100644
--- a/Server/src/main/content/global/handlers/iface/QuestTabUtils.kt
+++ b/Server/src/main/content/global/handlers/iface/QuestTabUtils.kt
@@ -10,12 +10,13 @@ import kotlin.math.*
import java.util.*
import org.rs09.consts.*
+import content.data.Quests
object QuestTabUtils {
@JvmStatic
- fun showRequirementsInterface (player: Player, button: Int) {
- val questName = getNameForButton (button)
- val questReq = QuestRequirements.values().filter { it.questName.equals(questName, true) }.firstOrNull() ?: return
+ fun showRequirementsInterface(player: Player, button: Int) {
+ val questName = getNameForButton(button)
+ val questReq = QuestRequirements.values().filter { it.quest.questName == questName }.firstOrNull() ?: return
var (isMet, unmetReqs) = QuestReq(questReq).evaluate(player)
var messageList = ArrayList()
@@ -27,7 +28,7 @@ object QuestTabUtils {
closeInterface(player)
for (req in unmetReqs) {
if (req is QuestReq)
- questList.add(req.questReq.questName)
+ questList.add(req.questReq.quest.questName)
else if (req is SkillReq) {
if (statMap[req.skillId] == null || (statMap[req.skillId] != null && statMap[req.skillId]!! < req.level))
statMap[req.skillId] = req.level
@@ -82,163 +83,163 @@ object QuestTabUtils {
openInterface(player, Components.QUESTJOURNAL_SCROLL_275)
}
- fun getNameForButton (button: Int) : String {
- val name = when (button) {
- 10 -> "Myths of the White Lands"
- 11 -> "Myths of the White Lands"
+ private fun getNameForButton(button: Int) : String {
+ val quest = when (button) {
+ 10 -> Quests.MYTHS_OF_THE_WHITE_LANDS.questName
+ 11 -> Quests.MYTHS_OF_THE_WHITE_LANDS.questName
12 -> "Free Quests"
- 13 -> "Black Knights' Fortress"
- 14 -> "Cook's Assistant"
- 15 -> "Demon Slayer"
- 16 -> "Doric's Quest"
- 17 -> "Dragon Slayer"
- 18 -> "Ernest the Chicken"
- 19 -> "Goblin Diplomacy"
- 20 -> "Imp Catcher"
- 21 -> "The Knight's Sword"
- 22 -> "Pirate's Treasure"
- 23 -> "Prince Ali Rescue"
- 24 -> "The Restless Ghost"
- 25 -> "Romeo & Juliet"
- 26 -> "Rune Mysteries"
- 27 -> "Sheep Shearer"
- 28 -> "Shield of Arrav"
- 29 -> "Vampire Slayer"
- 30 -> "Witch's Potion"
+ 13 -> Quests.BLACK_KNIGHTS_FORTRESS.questName
+ 14 -> Quests.COOKS_ASSISTANT.questName
+ 15 -> Quests.DEMON_SLAYER.questName
+ 16 -> Quests.DORICS_QUEST.questName
+ 17 -> Quests.DRAGON_SLAYER.questName
+ 18 -> Quests.ERNEST_THE_CHICKEN.questName
+ 19 -> Quests.GOBLIN_DIPLOMACY.questName
+ 20 -> Quests.IMP_CATCHER.questName
+ 21 -> Quests.THE_KNIGHTS_SWORD.questName
+ 22 -> Quests.PIRATES_TREASURE.questName
+ 23 -> Quests.PRINCE_ALI_RESCUE.questName
+ 24 -> Quests.THE_RESTLESS_GHOST.questName
+ 25 -> Quests.ROMEO_JULIET.questName
+ 26 -> Quests.RUNE_MYSTERIES.questName
+ 27 -> Quests.SHEEP_SHEARER.questName
+ 28 -> Quests.SHIELD_OF_ARRAV.questName
+ 29 -> Quests.VAMPIRE_SLAYER.questName
+ 30 -> Quests.WITCHS_POTION.questName
31 -> "Members' Quests"
- 32 -> "Animal Magnetism"
- 33 -> "Between a Rock..."
- 34 -> "Big Chompy Bird Hunting"
- 35 -> "Biohazard"
- 36 -> "Cabin Fever"
- 37 -> "Clock Tower"
- 38 -> "Contact!"
- 39 -> "Zogre Flesh Eaters"
- 40 -> "Creature of Fenkenstrain"
- 41 -> "Darkness of Hallowvale"
- 42 -> "Death to the Dorgeshuun"
- 43 -> "Death Plateau"
- 44 -> "Desert Treasure"
- 45 -> "Devious Minds"
- 46 -> "The Dig Site"
- 47 -> "Druidic Ritual"
- 48 -> "Dwarf Cannon"
- 49 -> "Eadgar's Ruse"
- 50 -> "Eagles' Peak"
- 51 -> "Elemental Workshop I"
- 52 -> "Elemental Workshop II"
- 53 -> "Enakhra's Lament"
- 54 -> "Enlightened Journey"
- 55 -> "The Eyes of Glouphrie"
- 56 -> "Fairytale I - Growing Pains"
- 57 -> "Fairytale II - Cure a Queen"
- 58 -> "Family Crest"
- 59 -> "The Feud"
- 60 -> "Fight Arena"
- 61 -> "Fishing Contest"
- 62 -> "Forgettable Tale..."
- 63 -> "The Fremennik Trials"
- 64 -> "Waterfall Quest"
- 65 -> "Garden of Tranquillity"
- 66 -> "Gertrude's Cat"
- 67 -> "Ghosts Ahoy"
- 68 -> "The Giant Dwarf"
- 69 -> "The Golem"
- 70 -> "The Grand Tree"
- 71 -> "The Hand in the Sand"
- 72 -> "Haunted Mine"
- 73 -> "Hazeel Cult"
- 74 -> "Heroes' Quest"
- 75 -> "Holy Grail"
- 76 -> "Horror from the Deep"
- 77 -> "Icthlarin's Little Helper"
- 78 -> "In Aid of the Myreque"
- 79 -> "In Search of the Myreque"
- 80 -> "Jungle Potion"
- 81 -> "Legend's Quest"
- 82 -> "Lost City"
- 83 -> "The Lost Tribe"
- 84 -> "Lunar Diplomacy"
- 85 -> "Making History"
- 86 -> "Merlin's Crystal"
- 87 -> "Monkey Madness"
- 88 -> "Monk's Friend"
- 89 -> "Mountain Daughter"
- 90 -> "Mourning's End Part I"
- 91 -> "Mourning's End Part II"
- 92 -> "Murder Mystery"
- 93 -> "My Arm's Big Adventure"
- 94 -> "Nature Spirit"
- 95 -> "Observatory Quest"
- 96 -> "One Small Favour"
- 97 -> "Plague City"
- 98 -> "Priest in Peril"
- 99 -> "Rag and Bone Man"
- 100 -> "Ratcatchers"
- 101 -> "Recipe for Disaster"
- 102 -> "Recruitment Drive"
- 103 -> "Regicide"
- 104 -> "Roving Elves"
- 105 -> "Royal Trouble"
- 106 -> "Rum Deal"
- 107 -> "Scorpion Catcher"
- 108 -> "Sea Slug"
- 109 -> "The Slug Menace"
- 110 -> "Shades of Mort'ton"
- 111 -> "Shadow of the Storm"
- 112 -> "Sheep Herder"
- 113 -> "Shilo Village"
- 114 -> "A Soul's Bane"
- 115 -> "Spirits of the Elid"
- 116 -> "Swan Song"
- 117 -> "Tai Bwo Wannai Trio"
- 118 -> "A Tail of Two Cats"
- 119 -> "Tears of Guthix"
- 120 -> "Temple of Ikov"
- 121 -> "Throne of Miscellania"
- 122 -> "The Tourist Trap"
- 123 -> "Witch's House"
- 124 -> "Tree Gnome Village"
- 125 -> "Tribal Totem"
- 126 -> "Troll Romance"
- 127 -> "Troll Stronghold"
- 128 -> "Underground Pass"
- 129 -> "Wanted!"
- 130 -> "Watchtower"
- 131 -> "Cold War"
- 132 -> "The Fremennik Isles"
- 133 -> "Tower of Life"
- 134 -> "The Great Brain Robbery"
- 135 -> "What Lies Below"
- 136 -> "Olaf's Quest"
- 137 -> "Another Slice of H.A.M"
- 138 -> "Dream Mentor"
- 139 -> "Grim Tales"
- 140 -> "King's Ransom"
- 141 -> "The Path of Glouphrie"
- 142 -> "Back to my Roots"
- 143 -> "Land of the Goblins"
- 144 -> "Dealing with Scabaras"
- 145 -> "Wolf Whistle"
- 146 -> "As a First Resort..."
- 147 -> "Catapult Construction"
- 148 -> "Kennith's Concerns"
- 149 -> "Legacy of Seergaze"
- 150 -> "Perils of Ice Mountain"
- 151 -> "TokTz-Ket-Dill"
- 152 -> "Smoking Kills"
- 153 -> "Rocking Out"
- 154 -> "Spirit of Summer"
- 155 -> "Meeting History"
- 156 -> "All Fired Up"
- 157 -> "Summer's End"
- 158 -> "Defender of Varrock"
- 159 -> "Swept Away"
- 160 -> "While Guthix Sleeps"
- 161 -> "In Pyre Need"
- 162 -> "Myths of the White Lands"
+ 32 -> Quests.ANIMAL_MAGNETISM.questName
+ 33 -> Quests.BETWEEN_A_ROCK.questName
+ 34 -> Quests.BIG_CHOMPY_BIRD_HUNTING.questName
+ 35 -> Quests.BIOHAZARD.questName
+ 36 -> Quests.CABIN_FEVER.questName
+ 37 -> Quests.CLOCK_TOWER.questName
+ 38 -> Quests.CONTACT.questName
+ 39 -> Quests.ZOGRE_FLESH_EATERS.questName
+ 40 -> Quests.CREATURE_OF_FENKENSTRAIN.questName
+ 41 -> Quests.DARKNESS_OF_HALLOWVALE.questName
+ 42 -> Quests.DEATH_TO_THE_DORGESHUUN.questName
+ 43 -> Quests.DEATH_PLATEAU.questName
+ 44 -> Quests.DESERT_TREASURE.questName
+ 45 -> Quests.DEVIOUS_MINDS.questName
+ 46 -> Quests.THE_DIG_SITE.questName
+ 47 -> Quests.DRUIDIC_RITUAL.questName
+ 48 -> Quests.DWARF_CANNON.questName
+ 49 -> Quests.EADGARS_RUSE.questName
+ 50 -> Quests.EAGLES_PEAK.questName
+ 51 -> Quests.ELEMENTAL_WORKSHOP_I.questName
+ 52 -> Quests.ELEMENTAL_WORKSHOP_II.questName
+ 53 -> Quests.ENAKHRAS_LAMENT.questName
+ 54 -> Quests.ENLIGHTENED_JOURNEY.questName
+ 55 -> Quests.THE_EYES_OF_GLOUPHRIE.questName
+ 56 -> Quests.FAIRYTALE_I_GROWING_PAINS.questName
+ 57 -> Quests.FAIRYTALE_II_CURE_A_QUEEN.questName
+ 58 -> Quests.FAMILY_CREST.questName
+ 59 -> Quests.THE_FEUD.questName
+ 60 -> Quests.FIGHT_ARENA.questName
+ 61 -> Quests.FISHING_CONTEST.questName
+ 62 -> Quests.FORGETTABLE_TALE.questName
+ 63 -> Quests.THE_FREMENNIK_TRIALS.questName
+ 64 -> Quests.WATERFALL_QUEST.questName
+ 65 -> Quests.GARDEN_OF_TRANQUILITY.questName
+ 66 -> Quests.GERTRUDES_CAT.questName
+ 67 -> Quests.GHOSTS_AHOY.questName
+ 68 -> Quests.THE_GIANT_DWARF.questName
+ 69 -> Quests.THE_GOLEM.questName
+ 70 -> Quests.THE_GRAND_TREE.questName
+ 71 -> Quests.THE_HAND_IN_THE_SAND.questName
+ 72 -> Quests.HAUNTED_MINE.questName
+ 73 -> Quests.HAZEEL_CULT.questName
+ 74 -> Quests.HEROES_QUEST.questName
+ 75 -> Quests.HOLY_GRAIL.questName
+ 76 -> Quests.HORROR_FROM_THE_DEEP.questName
+ 77 -> Quests.ICTHLARINS_LITTLE_HELPER.questName
+ 78 -> Quests.IN_AID_OF_THE_MYREQUE.questName
+ 79 -> Quests.IN_SEARCH_OF_THE_MYREQUE.questName
+ 80 -> Quests.JUNGLE_POTION.questName
+ 81 -> Quests.LEGENDS_QUEST.questName
+ 82 -> Quests.LOST_CITY.questName
+ 83 -> Quests.THE_LOST_TRIBE.questName
+ 84 -> Quests.LUNAR_DIPLOMACY.questName
+ 85 -> Quests.MAKING_HISTORY.questName
+ 86 -> Quests.MERLINS_CRYSTAL.questName
+ 87 -> Quests.MONKEY_MADNESS.questName
+ 88 -> Quests.MONKS_FRIEND.questName
+ 89 -> Quests.MOUNTAIN_DAUGHTER.questName
+ 90 -> Quests.MOURNINGS_END_PART_I.questName
+ 91 -> Quests.MOURNINGS_END_PART_II.questName
+ 92 -> Quests.MURDER_MYSTERY.questName
+ 93 -> Quests.MY_ARMS_BIG_ADVENTURE.questName
+ 94 -> Quests.NATURE_SPIRIT.questName
+ 95 -> Quests.OBSERVATORY_QUEST.questName
+ 96 -> Quests.ONE_SMALL_FAVOUR.questName
+ 97 -> Quests.PLAGUE_CITY.questName
+ 98 -> Quests.PRIEST_IN_PERIL.questName
+ 99 -> Quests.RAG_AND_BONE_MAN.questName
+ 100 -> Quests.RATCATCHERS.questName
+ 101 -> Quests.RECIPE_FOR_DISASTER.questName
+ 102 -> Quests.RECRUITMENT_DRIVE.questName
+ 103 -> Quests.REGICIDE.questName
+ 104 -> Quests.ROVING_ELVES.questName
+ 105 -> Quests.ROYAL_TROUBLE.questName
+ 106 -> Quests.RUM_DEAL.questName
+ 107 -> Quests.SCORPION_CATCHER.questName
+ 108 -> Quests.SEA_SLUG.questName
+ 109 -> Quests.THE_SLUG_MENACE.questName
+ 110 -> Quests.SHADES_OF_MORTTON.questName
+ 111 -> Quests.SHADOW_OF_THE_STORM.questName
+ 112 -> Quests.SHEEP_HERDER.questName
+ 113 -> Quests.SHILO_VILLAGE.questName
+ 114 -> Quests.A_SOULS_BANE.questName
+ 115 -> Quests.SPIRITS_OF_THE_ELID.questName
+ 116 -> Quests.SWAN_SONG.questName
+ 117 -> Quests.TAI_BWO_WANNAI_TRIO.questName
+ 118 -> Quests.A_TAIL_OF_TWO_CATS.questName
+ 119 -> Quests.TEARS_OF_GUTHIX.questName
+ 120 -> Quests.TEMPLE_OF_IKOV.questName
+ 121 -> Quests.THRONE_OF_MISCELLANIA.questName
+ 122 -> Quests.THE_TOURIST_TRAP.questName
+ 123 -> Quests.WITCHS_HOUSE.questName
+ 124 -> Quests.TREE_GNOME_VILLAGE.questName
+ 125 -> Quests.TRIBAL_TOTEM.questName
+ 126 -> Quests.TROLL_ROMANCE.questName
+ 127 -> Quests.TROLL_STRONGHOLD.questName
+ 128 -> Quests.UNDERGROUND_PASS.questName
+ 129 -> Quests.WANTED.questName
+ 130 -> Quests.WATCHTOWER.questName
+ 131 -> Quests.COLD_WAR.questName
+ 132 -> Quests.THE_FREMENNIK_ISLES.questName
+ 133 -> Quests.TOWER_OF_LIFE.questName
+ 134 -> Quests.THE_GREAT_BRAIN_ROBBERY.questName
+ 135 -> Quests.WHAT_LIES_BELOW.questName
+ 136 -> Quests.OLAFS_QUEST.questName
+ 137 -> Quests.ANOTHER_SLICE_OF_HAM.questName
+ 138 -> Quests.DREAM_MENTOR.questName
+ 139 -> Quests.GRIM_TALES.questName
+ 140 -> Quests.KINGS_RANSOM.questName
+ 141 -> Quests.THE_PATH_OF_GLOUPHRIE.questName
+ 142 -> Quests.BACK_TO_MY_ROOTS.questName
+ 143 -> Quests.LAND_OF_THE_GOBLINS.questName
+ 144 -> Quests.DEALING_WITH_SCABARAS.questName
+ 145 -> Quests.WOLF_WHISTLE.questName
+ 146 -> Quests.AS_A_FIRST_RESORT.questName
+ 147 -> Quests.CATAPULT_CONSTRUCTION.questName
+ 148 -> Quests.KENNITHS_CONCERNS.questName
+ 149 -> Quests.LEGACY_OF_SEERGAZE.questName
+ 150 -> Quests.PERILS_OF_ICE_MOUNTAIN.questName
+ 151 -> Quests.TOKTZ_KET_DILL.questName
+ 152 -> Quests.SMOKING_KILLS.questName
+ 153 -> Quests.ROCKING_OUT.questName
+ 154 -> Quests.SPIRIT_OF_SUMMER.questName
+ 155 -> Quests.MEETING_HISTORY.questName
+ 156 -> Quests.ALL_FIRED_UP.questName
+ 157 -> Quests.SUMMERS_END.questName
+ 158 -> Quests.DEFENDER_OF_VARROCK.questName
+ 159 -> Quests.SWEPT_AWAY.questName
+ 160 -> Quests.WHILE_GUTHIX_SLEEPS.questName
+ 161 -> Quests.IN_PYRE_NEED.questName
+ 162 -> Quests.MYTHS_OF_THE_WHITE_LANDS.questName
else -> ""
}
- return name
+ return quest as String
}
}
diff --git a/Server/src/main/content/global/handlers/iface/SmeltingInterface.java b/Server/src/main/content/global/handlers/iface/SmeltingInterface.java
index 4032ff524..b7fadd28c 100644
--- a/Server/src/main/content/global/handlers/iface/SmeltingInterface.java
+++ b/Server/src/main/content/global/handlers/iface/SmeltingInterface.java
@@ -49,7 +49,7 @@ public class SmeltingInterface extends ComponentPlugin {
* @author 'Vexia
*/
public enum BarButton {
- BRONZE_1(16, Bar.BRONZE, 1), BRONZE_5(15, Bar.BRONZE, 5), BRONZE_10(14, Bar.BRONZE, 10), BRONZE_X(13, Bar.BRONZE, -1), BLURITE_1(20, Bar.BLURITE, 1), BLURITE_5(19, Bar.BLURITE, 5), BLURITE_10(18, Bar.BLURITE, 10), BLURITE_X(17, Bar.BLURITE, -1), IRON_1(24, Bar.IRON, 1), IRON_5(23, Bar.IRON, 5), IRON_10(22, Bar.IRON, 10), IRON_X(21, Bar.IRON, -1), SILVER_1(28, Bar.SILVER, 1), SILVER_5(27, Bar.SILVER, 5), SILVER_10(26, Bar.SILVER, 10), SILVER_X(25, Bar.SILVER, -1), STEEL_1(32, Bar.STEEL, 1), STEEL_5(31, Bar.STEEL, 5), STEEL_10(30, Bar.STEEL, 10), STEEL_X(29, Bar.STEEL, -1), GOLD_1(36, Bar.GOLD, 1), GOLD_5(35, Bar.GOLD, 5), GOLD_10(34, Bar.GOLD, 10), GOLD_X(33, Bar.GOLD, -1), MITHRIL_1(40, Bar.MITHRIL, 1), MITHRIL_5(39, Bar.MITHRIL, 5), MITHRIL_10(38, Bar.MITHRIL, 10), MITHRIL_X(37, Bar.MITHRIL, -1), ADAMANT_1(44, Bar.ADAMANT, 1), ADAMANT_5(43, Bar.ADAMANT, 5), ADAMANT_10(42, Bar.ADAMANT, 10), ADAMANT_X(41, Bar.ADAMANT, -1), RUNE_1(48, Bar.RUNITE, 1), RUNE_5(47, Bar.RUNITE, 5), RUNE_10(46, Bar.RUNITE, 10), RUNE_X(45, Bar.RUNITE, -1);
+ BRONZE_1(16, Bar.BRONZE, 1), BRONZE_5(15, Bar.BRONZE, 5), BRONZE_10(14, Bar.BRONZE, 30), BRONZE_X(13, Bar.BRONZE, -1), BLURITE_1(20, Bar.BLURITE, 1), BLURITE_5(19, Bar.BLURITE, 5), BLURITE_10(18, Bar.BLURITE, 30), BLURITE_X(17, Bar.BLURITE, -1), IRON_1(24, Bar.IRON, 1), IRON_5(23, Bar.IRON, 5), IRON_10(22, Bar.IRON, 30), IRON_X(21, Bar.IRON, -1), SILVER_1(28, Bar.SILVER, 1), SILVER_5(27, Bar.SILVER, 5), SILVER_10(26, Bar.SILVER, 30), SILVER_X(25, Bar.SILVER, -1), STEEL_1(32, Bar.STEEL, 1), STEEL_5(31, Bar.STEEL, 5), STEEL_10(30, Bar.STEEL, 30), STEEL_X(29, Bar.STEEL, -1), GOLD_1(36, Bar.GOLD, 1), GOLD_5(35, Bar.GOLD, 5), GOLD_10(34, Bar.GOLD, 30), GOLD_X(33, Bar.GOLD, -1), MITHRIL_1(40, Bar.MITHRIL, 1), MITHRIL_5(39, Bar.MITHRIL, 5), MITHRIL_10(38, Bar.MITHRIL, 30), MITHRIL_X(37, Bar.MITHRIL, -1), ADAMANT_1(44, Bar.ADAMANT, 1), ADAMANT_5(43, Bar.ADAMANT, 5), ADAMANT_10(42, Bar.ADAMANT, 30), ADAMANT_X(41, Bar.ADAMANT, -1), RUNE_1(48, Bar.RUNITE, 1), RUNE_5(47, Bar.RUNITE, 5), RUNE_10(46, Bar.RUNITE, 30), RUNE_X(45, Bar.RUNITE, -1);
/**
* Constructs a new {@code BarButton} {@code Object}.
diff --git a/Server/src/main/content/global/handlers/item/EctophialListener.kt b/Server/src/main/content/global/handlers/item/EctophialListener.kt
index 6370c9c22..111db96c5 100644
--- a/Server/src/main/content/global/handlers/item/EctophialListener.kt
+++ b/Server/src/main/content/global/handlers/item/EctophialListener.kt
@@ -13,6 +13,7 @@ import core.game.world.update.flag.context.Graphics
import org.rs09.consts.Items
import org.rs09.consts.Scenery
import org.rs09.consts.Sounds
+import content.data.Quests
@Suppress("unused")
class EctophialListener : InteractionListener {
@@ -37,7 +38,7 @@ class EctophialListener : InteractionListener {
}
on(Items.ECTOPHIAL_4251, IntType.ITEM, "empty") { player, node ->
- if (!hasRequirement(player, "Ghosts Ahoy"))
+ if (!hasRequirement(player, Quests.GHOSTS_AHOY))
return@on true
if (player.isTeleBlocked) {
diff --git a/Server/src/main/content/global/handlers/item/EnchantJewelleryTabListener.kt b/Server/src/main/content/global/handlers/item/EnchantJewelleryTabListener.kt
index 1a31d30b5..b37ed1b1e 100644
--- a/Server/src/main/content/global/handlers/item/EnchantJewelleryTabListener.kt
+++ b/Server/src/main/content/global/handlers/item/EnchantJewelleryTabListener.kt
@@ -10,12 +10,14 @@ import org.rs09.consts.Sounds
class EnchantJewelleryTabListener : InteractionListener {
private val LVL_1_ENCHANT = mapOf(
+ Items.BLUE_DRAGONHIDE_1751 to Items.PLAIN_SATCHEL_10877,
Items.SAPPHIRE_RING_1637 to Items.RING_OF_RECOIL_2550,
Items.SAPPHIRE_NECKLACE_1656 to Items.GAMES_NECKLACE8_3853,
Items.SAPPHIRE_AMULET_1694 to Items.AMULET_OF_MAGIC_1727,
Items.SAPPHIRE_BRACELET_11072 to Items.BRACELET_OF_CLAY_11074
)
private val LVL_2_ENCHANT = mapOf(
+ Items.GREEN_DRAGONHIDE_1753 to Items.GREEN_SATCHEL_10878,
Items.EMERALD_RING_1639 to Items.RING_OF_DUELLING8_2552,
Items.EMERALD_NECKLACE_1658 to Items.BINDING_NECKLACE_5521,
Items.EMERALD_AMULET_1696 to Items.AMULET_OF_DEFENCE_1729,
@@ -23,6 +25,7 @@ class EnchantJewelleryTabListener : InteractionListener {
)
private val LVL_3_ENCHANT = mapOf(
+ Items.RED_DRAGONHIDE_1749 to Items.RED_SATCHEL_10879,
Items.RUBY_RING_1641 to Items.RING_OF_FORGING_2568,
Items.RUBY_NECKLACE_1660 to Items.DIGSITE_PENDANT_5_11194,
Items.RUBY_AMULET_1698 to Items.AMULET_OF_STRENGTH_1725,
@@ -30,6 +33,7 @@ class EnchantJewelleryTabListener : InteractionListener {
)
private val LVL_4_ENCHANT = mapOf(
+ Items.DAGANNOTH_HIDE_6155 to Items.GOLD_SATCHEL_10881,
Items.DIAMOND_RING_1643 to Items.RING_OF_LIFE_2570,
Items.DIAMOND_NECKLACE_1662 to Items.PHOENIX_NECKLACE_11090,
Items.DIAMOND_AMULET_1700 to Items.AMULET_OF_POWER_1731,
@@ -37,6 +41,7 @@ class EnchantJewelleryTabListener : InteractionListener {
)
private val LVL_5_ENCHANT = mapOf(
+ Items.SUQAH_HIDE_9080 to Items.RUNE_SATCHEL_10882,
Items.DRAGONSTONE_RING_1645 to Items.RING_OF_WEALTH4_14646,
Items.DRAGON_NECKLACE_1664 to Items.SKILLS_NECKLACE4_11105,
Items.DRAGONSTONE_AMMY_1702 to Items.AMULET_OF_GLORY4_1712,
@@ -44,6 +49,7 @@ class EnchantJewelleryTabListener : InteractionListener {
)
private val LVL_6_ENCHANT = mapOf(
+ Items.BLACK_DRAGONHIDE_1747 to Items.BLACK_SATCHEL_10880,
Items.ONYX_RING_6575 to Items.RING_OF_STONE_6583,
Items.ONYX_NECKLACE_6577 to Items.BERSERKER_NECKLACE_11128,
Items.ONYX_AMULET_6581 to Items.AMULET_OF_FURY_6585,
diff --git a/Server/src/main/content/global/handlers/item/EnchantedGemListener.kt b/Server/src/main/content/global/handlers/item/EnchantedGemListener.kt
index 01d999e00..252dbe2ff 100644
--- a/Server/src/main/content/global/handlers/item/EnchantedGemListener.kt
+++ b/Server/src/main/content/global/handlers/item/EnchantedGemListener.kt
@@ -1,5 +1,6 @@
package content.global.handlers.item
+import content.global.skill.slayer.SlayerUtils
import core.api.*
import content.global.skill.slayer.Tasks
import org.rs09.consts.Items
@@ -41,7 +42,8 @@ class EnchantedGemDialogue() : DialogueFile() {
if(getSlayerTask(player!!) == Tasks.JAD) {
npcl(core.game.dialogue.FacialExpression.FRIENDLY, "You're currently assigned to kill TzTok-Jad!")
} else {
- npcl(core.game.dialogue.FacialExpression.FRIENDLY, "You're currently assigned to kill ${getSlayerTaskName(player!!)}s; only ${getSlayerTaskKillsRemaining(player!!)} more to go.")
+ npcl(core.game.dialogue.FacialExpression.FRIENDLY, "You're currently assigned to kill ${SlayerUtils.pluralise(
+ getSlayerTaskName(player!!))}; only ${getSlayerTaskKillsRemaining(player!!)} more to go.")
}
setVarp(player!!, 2502, getSlayerTaskFlags(player!!) shr 4)
stage = 1
diff --git a/Server/src/main/content/global/handlers/item/ExplorersRingPlugin.kt b/Server/src/main/content/global/handlers/item/ExplorersRingPlugin.kt
index 586967573..79208d80f 100644
--- a/Server/src/main/content/global/handlers/item/ExplorersRingPlugin.kt
+++ b/Server/src/main/content/global/handlers/item/ExplorersRingPlugin.kt
@@ -53,9 +53,9 @@ class ExplorersRingPlugin : InteractionListener {
sendMessage(player, "You have used up all of your charges for the day.")
return@on true
}
- sendDialogue(player, "Choose the item that you wish to convert to coins.")
- addDialogueAction (player) {_,_ ->
- sendItemSelect (player, "Choose") { slot, optionIndex ->
+ //sendDialogue(player, "Choose the item that you wish to convert to coins.")
+ //addDialogueAction (player) {_,_ ->
+ sendItemSelect (player, "Cast Low Level Alchemy on:") { slot, optionIndex ->
val item = player.inventory[slot]
if (item == null)
return@sendItemSelect
@@ -63,7 +63,7 @@ class ExplorersRingPlugin : InteractionListener {
return@sendItemSelect
getStoreFile()[player.username.lowercase() + ":alchs"] = remaining - 1
}
- }
+ //}
return@on true
}
diff --git a/Server/src/main/content/global/handlers/item/HouseTeleTabOptionListener.kt b/Server/src/main/content/global/handlers/item/HouseTeleTabOptionListener.kt
index 61ac1b029..ee6e3f1b8 100644
--- a/Server/src/main/content/global/handlers/item/HouseTeleTabOptionListener.kt
+++ b/Server/src/main/content/global/handlers/item/HouseTeleTabOptionListener.kt
@@ -5,24 +5,34 @@ import core.game.interaction.IntType
import core.game.interaction.InteractionListener
import core.game.node.entity.player.link.TeleportManager
import core.game.node.item.Item
+import core.game.node.entity.player.Player
+import core.game.world.repository.Repository
class HouseTeleTabOptionListener : InteractionListener {
override fun defineListeners() {
val homeTabID = 8013
on(homeTabID, IntType.ITEM, "break") {player, node ->
- var hasHouse = player.houseManager.location.exitLocation != null
- if (!hasHouse) {
- sendMessage( player, "You must have a house to teleport to before attempting that.")
- return@on false
+ //Snowscape: teleport to the last house you entered, if possible
+ var owner: Player
+ val lastHouseOwner = Repository.getPlayerByName(player.getAttribute("lasthouseentered", null))
+ if (lastHouseOwner != null && !lastHouseOwner.getHouseManager().isLocked()) {
+ owner = lastHouseOwner
+ } else {
+ var hasHouse = player.houseManager.location.exitLocation != null
+ if (!hasHouse) {
+ sendMessage( player, "You must have a house to teleport to before attempting that.")
+ return@on false
+ }
+ owner = player
}
closeInterface(player)
lock(player, 5)
if (inInventory(player, node.id)) {
- player.houseManager.preEnter(player, false)
- val location = player.houseManager.getEnterLocation()
+ owner.houseManager.preEnter(player, false)
+ val location = owner.houseManager.getEnterLocation()
if (teleport(player, location, TeleportManager.TeleportType.TELETABS)) {
removeItem(player, Item(node.id, 1))
- player.houseManager.postEnter(player, false)
+ owner.houseManager.postEnter(player, false)
}
}
return@on true
diff --git a/Server/src/main/content/global/handlers/item/ItemQuestRequirementListener.kt b/Server/src/main/content/global/handlers/item/ItemQuestRequirementListener.kt
index 4dd960bad..8acaa698a 100644
--- a/Server/src/main/content/global/handlers/item/ItemQuestRequirementListener.kt
+++ b/Server/src/main/content/global/handlers/item/ItemQuestRequirementListener.kt
@@ -4,6 +4,7 @@ import core.api.*
import core.game.node.entity.player.link.quest.QuestRepository
import org.rs09.consts.Items
import core.game.interaction.InteractionListener
+import content.data.Quests
class ItemQuestRequirementListener : InteractionListener {
@@ -106,7 +107,7 @@ class ItemQuestRequirementListener : InteractionListener {
/*
onEquip(fremennikIslesEquipment) { player, _ ->
- if (!isQuestComplete(player, "Fremennik Isles")) {
+ if (!isQuestComplete(player, Quests.THE_FREMENNIK_ISLES)) {
sendMessage(player, "You must have completed The Fremennik Isles to equip this.")
return@onEquip false
}
@@ -114,7 +115,7 @@ class ItemQuestRequirementListener : InteractionListener {
}
onEquip(fremennikIslesDuringQuestEquipment){ player, _ ->
- if (questStage(player, "Fremennik Isles") > 0) {
+ if (questStage(player, Quests.THE_FREMENNIK_ISLES) > 0) {
sendMessage(player, "You must have started The Fremennik Isles to equip this.")
return@onEquip false
}
@@ -123,23 +124,23 @@ class ItemQuestRequirementListener : InteractionListener {
*/
onEquip(fremennikTrialsEquipment) { player, _ ->
- return@onEquip hasRequirement(player, "Fremennik Trials")
+ return@onEquip hasRequirement(player, Quests.THE_FREMENNIK_TRIALS)
}
onEquip(fremennikIslesEquipment) {player, _ ->
- return@onEquip hasRequirement(player, "The Fremennik Isles")
+ return@onEquip hasRequirement(player, Quests.THE_FREMENNIK_ISLES)
}
onEquip(avasBackpacks){ player, _ ->
- return@onEquip hasRequirement(player, "Animal Magnetism")
+ return@onEquip hasRequirement(player, Quests.ANIMAL_MAGNETISM)
}
onEquip(lostCityWeapons){ player, _ ->
- return@onEquip hasRequirement(player, "Lost City")
+ return@onEquip hasRequirement(player, Quests.LOST_CITY)
}
onEquip(Items.CAPE_OF_LEGENDS_1052) { player, _ ->
- return@onEquip hasRequirement(player, "Legend's Quest")
+ return@onEquip hasRequirement(player, Quests.LEGENDS_QUEST)
}
onEquip(questCapes) { player, _ ->
@@ -152,84 +153,84 @@ class ItemQuestRequirementListener : InteractionListener {
}
onEquip(Items.WOLFBANE_2952){ player, _ ->
- return@onEquip hasRequirement(player, "Priest in Peril")
+ return@onEquip hasRequirement(player, Quests.PRIEST_IN_PERIL)
}
onEquip(Items.ANCIENT_MACE_11061){ player, _ ->
- return@onEquip hasRequirement(player, "Another Slice of H.A.M")
+ return@onEquip hasRequirement(player, Quests.ANOTHER_SLICE_OF_HAM)
}
onEquip(Items.ANCIENT_STAFF_4675){ player, _ ->
- return@onEquip hasRequirement(player, "Desert Treasure")
+ return@onEquip hasRequirement(player, Quests.DESERT_TREASURE)
}
onEquip(Items.ELEMENTAL_SHIELD_2890) { player, _ ->
- return@onEquip hasRequirement(player, "Elemental Workshop I")
+ return@onEquip hasRequirement(player, Quests.ELEMENTAL_WORKSHOP_I)
}
onEquip(crystalEquipment){ player, _ ->
- return@onEquip hasRequirement(player, "Roving Elves")
+ return@onEquip hasRequirement(player, Quests.ROVING_ELVES)
}
onEquip(dragonSlayerEquipment) {player, _ ->
- return@onEquip hasRequirement(player, "Dragon Slayer")
+ return@onEquip hasRequirement(player, Quests.DRAGON_SLAYER)
}
onEquip(Items.DRAGON_SCIMITAR_4587) {player, _ ->
- return@onEquip hasRequirement(player, "Monkey Madness")
+ return@onEquip hasRequirement(player, Quests.MONKEY_MADNESS)
}
onEquip(Items.GLOVES_7462) {player, _ ->
- return@onEquip hasRequirement(player, "Recipe for Disaster")
+ return@onEquip hasRequirement(player, Quests.RECIPE_FOR_DISASTER)
}
onEquip(Items.SLAYER_HELMET_13263) {player, _ ->
- return@onEquip hasRequirement(player, "Smoking Kills")
+ return@onEquip hasRequirement(player, Quests.SMOKING_KILLS)
}
onEquip (Items.DRAGON_HALBERD_3204) {player, _ ->
- return@onEquip hasRequirement(player, "Regicide")
+ return@onEquip hasRequirement(player, Quests.REGICIDE)
}
onEquip (Items.CLIMBING_BOOTS_3105) {player, _ ->
- return@onEquip hasRequirement(player, "Death Plateau")
+ return@onEquip hasRequirement(player, Quests.DEATH_PLATEAU)
}
onEquip (godBooks) {player, _ ->
- return@onEquip hasRequirement(player, "Horror from the Deep")
+ return@onEquip hasRequirement(player, Quests.HORROR_FROM_THE_DEEP)
}
onEquip (pharaohScepters) {player, _ ->
- return@onEquip hasRequirement(player, "Icthlarin's Little Helper")
+ return@onEquip hasRequirement(player, Quests.ICTHLARINS_LITTLE_HELPER)
}
onEquip (Items.DRAGON_SQ_SHIELD_1187) {player, _ ->
//because I know people won't believe it: https://runescape.wiki/w/Dragon_sq_shield?oldid=899636
- return@onEquip hasRequirement(player, "Legend's Quest")
+ return@onEquip hasRequirement(player, Quests.LEGENDS_QUEST)
}
onEquip (initiateArmour) {player, _ ->
- return@onEquip hasRequirement(player, "Recruitment Drive")
+ return@onEquip hasRequirement(player, Quests.RECRUITMENT_DRIVE)
}
onEquip (proselyteArmour) {player, _ ->
- return@onEquip hasRequirement(player, "The Slug Menace")
+ return@onEquip hasRequirement(player, Quests.THE_SLUG_MENACE)
}
onEquip (spiritShields) {player, _ ->
- return@onEquip hasRequirement(player, "Summer's End")
+ return@onEquip hasRequirement(player, Quests.SUMMERS_END)
}
onEquip (Items.DRAGON_MACE_1434) {player, _ ->
- return@onEquip hasRequirement(player, "Heroes' Quest")
+ return@onEquip hasRequirement(player, Quests.HEROES_QUEST)
}
onEquip (Items.DRAGON_BATTLEAXE_1377) {player, _ ->
- return@onEquip hasRequirement(player, "Heroes' Quest")
+ return@onEquip hasRequirement(player, Quests.HEROES_QUEST)
}
onEquip (Items.DARKLIGHT_6746) {player, _ ->
- return@onEquip hasRequirement(player, "Shadow of the Storm")
+ return@onEquip hasRequirement(player, Quests.SHADOW_OF_THE_STORM)
}
}
}
diff --git a/Server/src/main/content/global/handlers/item/SilverSicklePlugin.java b/Server/src/main/content/global/handlers/item/SilverSicklePlugin.java
index eb403f33b..e7529d646 100644
--- a/Server/src/main/content/global/handlers/item/SilverSicklePlugin.java
+++ b/Server/src/main/content/global/handlers/item/SilverSicklePlugin.java
@@ -8,6 +8,7 @@ import core.game.node.entity.player.Player;
import core.plugin.Initializable;
import core.plugin.Plugin;
import content.region.morytania.quest.naturespirit.NSUtils;
+import content.data.Quests;
/**
* Handles the Silver Sickle (b) to collect Mort Myre Fungus.
@@ -28,7 +29,7 @@ public final class SilverSicklePlugin extends OptionHandler {
switch (option) {
case "operate":
case "cast bloom":
- if(player.getQuestRepository().getQuest("Nature Spirit").getStage(player) >= 75) {
+ if(player.getQuestRepository().getQuest(Quests.NATURE_SPIRIT).getStage(player) >= 75) {
player.getPacketDispatch().sendAnimation(9021);
NSUtils.castBloom(player);
} else {
diff --git a/Server/src/main/content/global/handlers/item/SnowscapeSatchelListener.kt b/Server/src/main/content/global/handlers/item/SnowscapeSatchelListener.kt
new file mode 100755
index 000000000..872c94341
--- /dev/null
+++ b/Server/src/main/content/global/handlers/item/SnowscapeSatchelListener.kt
@@ -0,0 +1,183 @@
+package content.global.handlers.item
+
+import core.api.*
+import core.game.container.Container
+import content.global.skill.summoning.familiar.BurdenContainerListener
+import core.game.node.Node
+import core.game.node.entity.player.Player
+//import core.game.node.entity.player.info.login.PlayerSaver
+import core.game.node.item.Item
+import core.game.interaction.InteractionListener
+import core.game.interaction.IntType
+import org.json.simple.JSONArray
+import org.json.simple.JSONObject
+import org.json.simple.parser.JSONParser
+import org.rs09.consts.Items
+
+import core.game.component.Component
+import core.game.component.CloseEvent
+import core.game.container.access.InterfaceContainer
+import content.global.handlers.scenery.BankBoothListener
+import content.global.handlers.npc.BankerNPC
+
+/**
+ * Listener for satchels from Creature Creation, repurposed for Snowscape
+ * They are repurposed as item pouches, using the summoning familiar inventory interface
+ * @author
+ */
+class SnowscapeSatchelListener : InteractionListener {
+
+ companion object {
+
+ val plainSatchelId = 10877
+ val greenSatchelId = 10878
+ val redSatchelId = 10879
+ val blackSatchelId = 10880
+ val goldSatchelId = 10881
+ val runeSatchelId = 10882
+ val satchelIds = intArrayOf(plainSatchelId,greenSatchelId,redSatchelId,blackSatchelId,goldSatchelId,runeSatchelId)
+
+
+
+
+ private fun transferItem(player: Player, satchelId: Int, item: Item, amount: Int, withdraw: Boolean, asNote: Boolean = false) {
+ if (withdraw == false && !isAllowed(player, satchelId, unnote(item).getId())) {
+ player.sendMessage(item.getName() + " cannot be stored in the " + Item(satchelId).getName() + ".")
+ return
+ }
+ if (withdraw == true && asNote == false && satchelId == plainSatchelId) {
+ player.sendMessage("This satchel can only be emptied by a banker. Use it on a bank booth to get the items.")
+ return
+ }
+ val to = if (withdraw) player.getInventory() else getSatchel(player, satchelId)
+ val from = if (withdraw) getSatchel(player, satchelId) else player.getInventory()
+ val maximum = if (asNote) to.getMaximumAdd(note(item)) else to.getMaximumAdd(unnote(item))
+ if (maximum < 1 && withdraw == false) {
+ player.sendMessage("There is not enough space for the " + item.getName() + " in the satchel.")
+ return
+ }
+ val finalAmount = kotlin.comparisons.minOf(amount, from.getAmount(item), maximum)
+ val finalItem = Item(item.getId(), finalAmount)
+ if (finalAmount > 0 && from.remove(finalItem)) {
+ if (asNote) to.add(note(finalItem)) else to.add(unnote(finalItem))
+ }
+ }
+
+ private fun emptySatchel(player: Player, satchelId: Int, asNote: Boolean = false) {
+ if (asNote == false && satchelId == plainSatchelId) {
+ player.sendMessage("This satchel can only be emptied by a banker. Use it on a Bank Booth to get the items.")
+ return
+ }
+ val satchel = getSatchel(player, satchelId)
+ repeat(satchel.capacity()) { index ->
+ var item = satchel.get(index)
+ if (item != null) {
+ transferItem(player, satchelId, item, satchel.getAmount(item), true, asNote)
+ }
+ }
+ }
+
+
+ //Function to handle constructing the correct interfaces when the satchel is opened
+ private fun openSatchel(player: Player, node: Node) {
+ val satchelId = node.asItem().getId()
+ val satchel = getSatchel(player, satchelId)
+ if (satchel.getListeners().count() < 1) satchel.register(BurdenContainerListener(player))
+
+ player.getInterfaceManager().open(Component(671)).setCloseEvent(CloseEvent { player, component ->
+ player.getInterfaceManager().closeSingleTab()
+ removeAttribute(player, "openSatchel")
+ return@CloseEvent true
+ }
+ )
+ setAttribute(player, "openSatchel", satchelId)
+ satchel.shift()
+ player.getInterfaceManager().openSingleTab(Component(665))
+ InterfaceContainer.generateItems(player, player.getInventory().toArray(), arrayOf("Store-X","Store-All","Store-10","Store-5","Store-1"),665,0,7,4,93)
+ InterfaceContainer.generateItems(player, satchel.toArray(), arrayOf("Withdraw-X","Withdraw-All","Withdraw-10","Withdraw-5","Withdraw-1"),671,27,5,6,30)
+ }
+
+ // This is called by BurdenInterfacePlugin.java when the player interacts with the familiar interface and the "openSatchel" attribute exists
+ fun satchelInterfaceAction(player: Player, component: Component, opcode: Int, button: Int, slot: Int, itemId: Int) {
+ val satchelId = getAttribute(player, "openSatchel", 0)
+ val withdraw = component.getId() == 671
+ val container = if (withdraw) getSatchel(player, satchelId) else player.getInventory()
+ val item = if (slot >= 0 && slot < container.capacity()) container.get(slot) else null
+ if (item == null && button != 29) return
+ when (opcode) {
+ 155 -> if (button == 29) emptySatchel(player, satchelId) else transferItem(player, satchelId, item!!, 1, withdraw)
+ 196 -> transferItem(player, satchelId, item!!, 5, withdraw)
+ 124 -> transferItem(player, satchelId, item!!, 10, withdraw)
+ 199 -> transferItem(player, satchelId, item!!, container.getAmount(item), withdraw)
+ 234 -> sendInputDialogue(player, true, "Enter the amount:") { value -> transferItem(player, satchelId, item!!, value as Int, withdraw) }
+ 9 -> player.sendMessage(item!!.getDefinition().getExamine())
+ }
+ }
+
+
+
+ fun getSatchel(player: Player, satchelId: Int): Container {
+ var satchel: Container? = null
+ when (satchelId) {
+ plainSatchelId -> satchel = player.plainSatchel
+ greenSatchelId -> satchel = player.greenSatchel
+ redSatchelId -> satchel = player.redSatchel
+ blackSatchelId -> satchel = player.blackSatchel
+ goldSatchelId -> satchel = player.goldSatchel
+ runeSatchelId -> satchel = player.runeSatchel
+ }
+ return satchel!!
+ }
+
+ // Checks if the item is allowed in the satchel. The NPCDropTables.java function calls this on satchels the player is carrying.
+ fun isAllowed(player: Player, satchelId: Int, itemId: Int): Boolean {
+ when (satchelId) {
+ plainSatchelId -> return itemId !in satchelIds
+ greenSatchelId -> return (Item(itemId).getName().contains(" seed") || Item(itemId).getName().contains("Grimy") || Item(itemId).getName().contains("Clean "))
+ redSatchelId -> return itemId in intArrayOf(*(12158..12168).toList().toIntArray()) || Item(itemId).getName().equals("Clue scroll")
+ blackSatchelId -> return itemId in intArrayOf(995)
+ goldSatchelId -> return itemId in intArrayOf(436,438,440,442,444,446,447,449,451,453,668,2892,2349,2351,2353,2355,2357,2359,2361,2363,2365,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,6571,6573)
+ runeSatchelId -> return itemId in intArrayOf(556,555,557,554,558,559,564,562,9075,561,563,560,565,566,4694,4695,4696,4697,4698,4699)
+ }
+ return false
+ }
+ }
+
+
+
+ override fun defineListeners() {
+
+ onUseAnyWith(IntType.ITEM, *satchelIds) { player, used, with ->
+ val satchelId = with.asItem().getId()
+ transferItem(player, satchelId, used.asItem(), player.getInventory().getAmount(used.asItem()),false)
+ return@onUseAnyWith true
+ }
+
+ on(satchelIds, IntType.ITEM, "inspect","operate") { player, node ->
+ openSatchel(player, node)
+ return@on true
+ }
+
+ on(satchelIds, IntType.ITEM, "empty") { player, node ->
+ emptySatchel(player, node.asItem().getId())
+ return@on true
+ }
+
+ // BankBoothListener values are public but BankChestListener values are not, so rather than edit the BankChestListener file I have copied the IDs here. 12309 is the Culinomancer's chest.
+ val bankChests = intArrayOf(3194,4483,10562,14382,16695,16696,21301,27662,27663)
+ val bankUseWiths = intArrayOf(*BankBoothListener.BANK_BOOTHS, 12309, *bankChests)
+ onUseWith(IntType.SCENERY, satchelIds, *bankUseWiths) { player, used, with ->
+ emptySatchel(player, used.asItem().getId(), true)
+ return@onUseWith true
+ }
+
+ //6362 is the Ourania Altar banker.
+ val bankers = intArrayOf(*BankerNPC.NPC_IDS, *BankerNPC.SPECIAL_NPC_IDS, 6362)
+
+ onUseWith(IntType.NPC, satchelIds, *bankers) { player, used, with ->
+ emptySatchel(player, used.asItem().getId(), true)
+ return@onUseWith true
+ }
+
+ }
+}
diff --git a/Server/src/main/content/global/handlers/item/SnowscapeTeleorb.kt b/Server/src/main/content/global/handlers/item/SnowscapeTeleorb.kt
new file mode 100644
index 000000000..789827f2c
--- /dev/null
+++ b/Server/src/main/content/global/handlers/item/SnowscapeTeleorb.kt
@@ -0,0 +1,146 @@
+package content.global.handlers.item
+
+import core.api.*
+import core.game.node.Node
+import core.game.node.entity.player.Player
+import core.game.node.entity.skill.Skills
+import core.game.node.item.Item
+import core.game.interaction.InteractionListener
+import core.game.interaction.IntType
+import core.game.world.map.Location
+import core.game.world.map.build.DynamicRegion
+import core.game.world.map.zone.ZoneRestriction
+import core.game.world.update.flag.context.Animation
+import core.game.world.update.flag.context.Graphics
+import core.game.node.entity.player.link.TeleportManager
+import core.game.dialogue.*
+import core.tools.START_DIALOGUE
+import org.rs09.consts.Items
+import org.rs09.consts.Sounds
+
+import core.game.component.Component
+
+/**
+ * Listener for the strange teleorb object. Normally this object is part of the While Guthix Sleeps quest, but it has been repurposed.
+ * The new purpose is a custom teleport artifact, allowing players to save a location and teleport back to it.
+ * @author
+ */
+class SnowscapeTeleorb : InteractionListener {
+
+ // The teleorb item id
+ val teleorb = 14534
+
+ // How many law runes are required for one teleport charge
+ val runesPerTeleportNormal = 20
+ val runesPerTeleportBoosted = 2
+
+ override fun defineListeners() {
+ on(teleorb, IntType.ITEM, "inspect") { player, node ->
+ inspect(player, node)
+ return@on true
+ }
+ on(teleorb, IntType.ITEM, "activate") { player, node ->
+ activate(player, node)
+ return@on true
+ }
+ }
+ private fun inspect(player: Player, node: Node) {
+ openDialogue(player,SnowscapeTeleorbDialogue())
+ }
+
+ private fun activate(player: Player, node: Node) {
+ val charges = getAttribute(player, "teleorb:charges",0) as Int
+ var runesPerTeleport = if (getAttribute(player, "snowscape:boostedmode", false)) runesPerTeleportBoosted else runesPerTeleportNormal
+ if (charges >= runesPerTeleport) {
+ val destination = getAttribute(player, "teleorb:location", Location.create(3236,3218,0))
+ player.getTeleporter().send(destination, TeleportManager.TeleportType.ENTRANA_MAGIC_DOOR)
+ setAttribute(player, "/save:teleorb:charges", charges - runesPerTeleport)
+ player.sendMessage("Charges remaining: " + ((getAttribute(player, "teleorb:charges",0) as Int) / runesPerTeleport))
+ rewardXP(player, Skills.MAGIC, 15.0 * runesPerTeleport)
+ } else {
+ player.sendMessage(" The teleorb is out of charges.")
+ }
+ }
+
+
+}
+
+
+
+
+class SnowscapeTeleorbDialogue : DialogueFile() {
+
+ // How many law runes are required for one teleport charge
+ val runesPerTeleportNormal = 20
+ val runesPerTeleportBoosted = 2
+
+ val teleorb = 14534
+ val lawRune = 563
+
+ override fun handle(componentID: Int, buttonID: Int) {
+ when (stage) {
+ START_DIALOGUE -> options("Update Location","Recharge","Show Info").also {stage++}
+
+ 1 -> when (buttonID) {
+ 1 -> player?.let {
+ end()
+ val region = it.getViewport().getRegion()
+ if (region == null || region is DynamicRegion || it.getZoneMonitor().isRestricted(ZoneRestriction.OFF_MAP)) {
+ it.sendMessage("This location cannot be saved!")
+ } else {
+ setAttribute(it, "/save:teleorb:location", it.getLocation())
+ sendInputDialogue(it, false, "Location saved. Enter a description of this location:",) { value ->
+ setAttribute(it, "/save:teleorb:description", value as String)
+ }
+ it.sendMessage("Location saved.")
+ it.graphics(Graphics(343))
+ it.animate(Animation(1818))
+ playAudio(it, Sounds.TELE_OTHER_CAST_199)
+ }
+ }
+ 2 -> options("Recharge with Law Runes","Recharge with additional orbs").also {stage++}
+ 3 -> player?.let {
+ end()
+ var runesPerTeleport = if (getAttribute(it, "snowscape:boostedmode", false)) runesPerTeleportBoosted else runesPerTeleportNormal
+ it.sendMessage("Current saved location: " + getAttribute(it, "teleorb:description", "Unknown").replace("_"," "))
+ it.sendMessage("Charges remaining: " + ((getAttribute(it, "teleorb:charges",0) as Int) / runesPerTeleport))
+ }
+ }
+ 2 -> when (buttonID) {
+ 1 -> player?.let {
+ end()
+ var runesPerTeleport = if (getAttribute(it, "snowscape:boostedmode", false)) runesPerTeleportBoosted else runesPerTeleportNormal
+ sendInputDialogue(it, true, "Each charge requires $runesPerTeleport Law Runes. How many runes would you like to use?",) { value ->
+ var amount = kotlin.math.min(amountInInventory(it,lawRune), value as Int)
+ if (removeItem(it, Item(lawRune, amount))) {
+ it.sendMessage("You charge the teleorb with $amount Law Runes.")
+ amount += (getAttribute(it, "teleorb:charges",0) as Int)
+ setAttribute(it, "/save:teleorb:charges", amount)
+ it.sendMessage("Current charges: " + ((getAttribute(it, "teleorb:charges",0) as Int) / runesPerTeleport))
+ it.graphics(Graphics(141,96))
+ it.animate(Animation(722))
+ playAudio(it, Sounds.LUNAR_EMBUE_RUNES_2888) //Yes, Imbue is mispelled in the sounds list.
+ }
+ }
+ }
+ 2 -> player?.let {
+ end()
+ var runesPerTeleport = if (getAttribute(it, "snowscape:boostedmode", false)) runesPerTeleportBoosted else runesPerTeleportNormal
+ sendInputDialogue(it, true, "Each additional orb adds one charge. How many would you like to use?",) { value ->
+ var amount = kotlin.math.min(amountInInventory(it,teleorb) - 1, value as Int)
+ if (amount > 0 && removeItem(it, Item(teleorb, amount))) {
+ it.sendMessage("You destroy $amount teleorbs, fusing their energy into one.")
+ amount = amount * runesPerTeleport
+ amount += (getAttribute(it, "teleorb:charges",0) as Int)
+ setAttribute(it, "/save:teleorb:charges", amount)
+ it.sendMessage("Current charges: " + ((getAttribute(it, "teleorb:charges",0) as Int) / runesPerTeleport))
+ it.graphics(Graphics(141,96))
+ it.animate(Animation(722))
+ playAudio(it, Sounds.LUNAR_EMBUE_RUNES_2888)
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Server/src/main/content/global/handlers/item/TeleTabsListener.kt b/Server/src/main/content/global/handlers/item/TeleTabsListener.kt
index 21a291360..acf1ee45b 100644
--- a/Server/src/main/content/global/handlers/item/TeleTabsListener.kt
+++ b/Server/src/main/content/global/handlers/item/TeleTabsListener.kt
@@ -1,39 +1,55 @@
package content.global.handlers.item
-import core.api.inInventory
-import core.api.removeItem
-import core.api.teleport
+import content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners.Companion.ARDOUGNE_TELE_ATTRIBUTE
+import core.api.*
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.TeleportManager
import core.game.node.item.Item
import core.game.world.map.Location
-import core.api.hasRequirement;
+import content.data.Quests
+
+import core.cache.def.impl.ItemDefinition;
class TeleTabsListener : InteractionListener {
enum class TeleTabs(val item: Int, val location: Location, val exp: Double, val requirementCheck: (Player) -> Boolean = { true }) {
ADDOUGNE_TELEPORT(8011, Location.create(2662, 3307, 0), 61.0, {
- player -> hasRequirement(player, "Plague City");
+ player -> getAttribute(player, ARDOUGNE_TELE_ATTRIBUTE, false)
}),
AIR_ALTAR_TELEPORT(13599, Location.create(2978, 3296, 0), 0.0),
- ASTRAL_ALTAR_TELEPORT(13611, Location.create(2156, 3862, 0), 0.0),
- BLOOD_ALTAR_TELEPORT(13610, Location.create(3559, 9778, 0), 0.0),
+ ASTRAL_ALTAR_TELEPORT(13611, Location.create(2156, 3862, 0), 0.0, {
+ player -> hasRequirement(player, Quests.LUNAR_DIPLOMACY);
+ }),
+ BLOOD_ALTAR_TELEPORT(13610, Location.create(3559, 9778, 0), 0.0, {
+ player -> hasRequirement(player, Quests.LEGACY_OF_SEERGAZE);
+ }),
BODY_ALTAR_TELEPORT(13604, Location.create(3055, 3443, 0), 0.0),
CAMELOT_TELEPORT(8010, Location.create(2757, 3477, 0), 55.5),
CHAOS_ALTAR_TELEPORT(13606, Location.create(3058, 3593, 0), 0.0),
- COSMIC_ALTAR_TELEPORT(13605, Location.create(2411, 4380, 0), 0.0),
- DEATH_ALTAR_TELEPORT(13609, Location.create(1863, 4639, 0), 0.0),
+ COSMIC_ALTAR_TELEPORT(13605, Location.create(2411, 4380, 0), 0.0, {
+ player -> hasRequirement(player, Quests.LOST_CITY);
+ }),
+ DEATH_ALTAR_TELEPORT(13609, Location.create(1863, 4639, 0), 0.0, {
+ player -> hasRequirement(player, Quests.MOURNINGS_END_PART_II);
+ }),
EARTH_ALTAR_TELEPORT(13602, Location.create(3304, 3472, 0), 0.0),
FALADOR_TELEPORT(8009, Location.create(2966, 3380, 0), 47.0),
FIRE_ALTAR_TELEPORT(13603, Location.create(3311, 3252, 0), 0.0),
- LAW_ALTAR_TELEPORT(13608, Location.create(2857, 3378, 0), 0.0),
+ LAW_ALTAR_TELEPORT(13608, Location.create(2857, 3378, 0), 0.0, {
+ player -> if (!ItemDefinition.canEnterEntrana(player)) (player.sendMessage("The power of Saradomin prevents you from taking armour or weaponry to Entrana.") !is Unit) else true; // ugly way of doing this, but the sendMessage function returns a Unit type, so by using !is Unit it becomes false.
+ }),
LUMBRIDGE_TELEPORT(8008, Location.create(3222, 3218, 0), 41.0),
MIND_ALTAR_TELEPORT(13600, Location.create(2979, 3510, 0), 0.0),
NATURE_ALTAR_TELEPORT(13607, Location.create(2868, 3013, 0), 0.0),
+ TELEKINETIC_GRAB(8022, Location.create(2836, 3285, 0), 0.0, {
+ player -> hasRequirement(player, Quests.DRAGON_SLAYER);
+ }),
VARROCK_TELEPORT(8007, Location.create(3212, 3423, 0), 35.00),
- WATCH_TOWER_TELEPORT(8012, Location.create(2548, 3114, 0), 68.00),
+ WATCH_TOWER_TELEPORT(8012, Location.create(2548, 3114, 0), 68.00, {
+ player -> hasRequirement(player, Quests.WATCHTOWER);
+ }),
WATER_ALTAR_TELEPORT(13601, Location.create(3182, 3162, 0), 0.0);
companion object {
@@ -51,9 +67,17 @@ class TeleTabsListener : InteractionListener {
val tabEnum = TeleTabs.forId(tab)
if (tabEnum != null && inInventory(player,tab)) {
val tabloc = tabEnum.location
- if (inInventory(player, tab) && tabEnum.requirementCheck(player)) {
- if (teleport(player, tabloc, TeleportManager.TeleportType.TELETABS)) {
- removeItem(player, Item(node.id, 1))
+ if (inInventory(player, tab)) {
+ if (tabEnum.requirementCheck(player)){
+ if (teleport(player, tabloc, TeleportManager.TeleportType.TELETABS)) {
+ removeItem(player, Item(node.id, 1))
+ }
+ }
+ else {
+ when (tabEnum){
+ TeleTabs.ADDOUGNE_TELEPORT -> sendMessage(player, "You need to complete Plague City to use this tablet.")
+ else -> sendMessage(player, "You do not have the requirements to use this tablet.")
+ }
}
}
}
diff --git a/Server/src/main/content/global/handlers/item/TeleportCrystalPlugin.java b/Server/src/main/content/global/handlers/item/TeleportCrystalPlugin.java
index 94c3b4eb7..5bbda0ffc 100644
--- a/Server/src/main/content/global/handlers/item/TeleportCrystalPlugin.java
+++ b/Server/src/main/content/global/handlers/item/TeleportCrystalPlugin.java
@@ -14,6 +14,7 @@ import core.game.world.map.zone.impl.WildernessZone;
import core.plugin.Plugin;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
/**
* Represents the rotten potato plugin.
@@ -34,7 +35,7 @@ public final class TeleportCrystalPlugin extends OptionHandler {
@Override
public boolean handle(Player player, Node node, String option) {
- if (!hasRequirement(player, "Mourning's End Part I"))
+ if (!hasRequirement(player, Quests.MOURNINGS_END_PART_I))
return true;
if (!WildernessZone.checkTeleport(player, 20)) {
player.getPacketDispatch().sendMessage("The crystal is unresponsive.");
diff --git a/Server/src/main/content/global/handlers/item/equipment/CrystalEquipmentRegister.kt b/Server/src/main/content/global/handlers/item/equipment/CrystalEquipmentRegister.kt
index 2bb7bb48d..4504e9dfd 100644
--- a/Server/src/main/content/global/handlers/item/equipment/CrystalEquipmentRegister.kt
+++ b/Server/src/main/content/global/handlers/item/equipment/CrystalEquipmentRegister.kt
@@ -7,7 +7,7 @@ class CrystalEquipmentRegister : StartupListener {
val shield: Array = arrayOf(Items.NEW_CRYSTAL_SHIELD_4224, Items.CRYSTAL_SHIELD_FULL_4225, Items.CRYSTAL_SHIELD_9_10_4226, Items.CRYSTAL_SHIELD_8_10_4227, Items.CRYSTAL_SHIELD_7_10_4228, Items.CRYSTAL_SHIELD_6_10_4229, Items.CRYSTAL_SHIELD_5_10_4230, Items.CRYSTAL_SHIELD_4_10_4231, Items.CRYSTAL_SHIELD_3_10_4232, Items.CRYSTAL_SHIELD_2_10_4233, Items.CRYSTAL_SHIELD_1_10_4234, Items.CRYSTAL_SEED_4207)
val bow: Array = arrayOf(Items.NEW_CRYSTAL_BOW_4212, Items.CRYSTAL_BOW_FULL_4214, Items.CRYSTAL_BOW_9_10_4215, Items.CRYSTAL_BOW_8_10_4216, Items.CRYSTAL_BOW_7_10_4217, Items.CRYSTAL_BOW_6_10_4218, Items.CRYSTAL_BOW_5_10_4219, Items.CRYSTAL_BOW_4_10_4220, Items.CRYSTAL_BOW_3_10_4221, Items.CRYSTAL_BOW_2_10_4222, Items.CRYSTAL_BOW_1_10_4223, Items.CRYSTAL_SEED_4207)
override fun startup() {
- EquipmentDegrader.registerSet(250, shield)
- EquipmentDegrader.registerSet(250, bow)
+ EquipmentDegrader.registerSet(1200, shield)
+ EquipmentDegrader.registerSet(1200, bow)
}
}
\ No newline at end of file
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/AncientMaceSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/AncientMaceSpecialHandler.java
index 330523540..9c04d990f 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/AncientMaceSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/AncientMaceSpecialHandler.java
@@ -57,7 +57,7 @@ public final class AncientMaceSpecialHandler extends MeleeSwingHandler implement
state.setStyle(CombatStyle.MELEE);
int hit = 0;
if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.1, 0.98)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1));
+ hit = RandomFunction.random(calculateHit(entity, victim, 1) + 1);
if (entity.getSkills().getPrayerPoints() < entity.getSkills().getStaticLevel(5)) {
entity.getSkills().setPrayerPoints(entity.getSkills().getPrayerPoints() + hit);
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/BackstabSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/BackstabSpecialHandler.java
index bb243ad37..2baaab97e 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/BackstabSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/BackstabSpecialHandler.java
@@ -59,13 +59,10 @@ public final class BackstabSpecialHandler extends MeleeSwingHandler implements P
}
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- double accuracy = 1.0;
- if (!victim.getProperties().getCombatPulse().isAttacking()) {
- accuracy = 1.75;
- }
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, accuracy, 0.98)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.0));
- victim.getSkills().updateLevel(Skills.DEFENCE, -hit / 10, 0);
+ if (!victim.getProperties().getCombatPulse().isAttacking() || isAccurateImpact(entity, victim, CombatStyle.MELEE)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.0) + 1);
+ if (victim.getSkills().getStaticLevel(Skills.DEFENCE) >= victim.getSkills().getDynamicLevels()[Skills.DEFENCE])
+ victim.getSkills().updateLevel(Skills.DEFENCE, -hit, 0);
}
state.setEstimatedHit(hit);
return 1;
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/ChainhitSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/ChainhitSpecialHandler.java
index a4682149f..b3e276dcd 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/ChainhitSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/ChainhitSpecialHandler.java
@@ -1,9 +1,7 @@
package content.global.handlers.item.equipment.special;
import core.game.node.entity.Entity;
-import core.game.node.entity.combat.BattleState;
-import core.game.node.entity.combat.CombatStyle;
-import core.game.node.entity.combat.DeathTask;
+import core.game.node.entity.combat.*;
import core.game.node.entity.combat.ImpactHandler.HitsplatType;
import core.game.node.entity.impl.Animator.Priority;
import core.game.node.entity.impl.Projectile;
@@ -17,7 +15,6 @@ import core.game.world.update.flag.context.Graphics;
import core.plugin.Initializable;
import core.plugin.Plugin;
import core.tools.RandomFunction;
-import core.game.node.entity.combat.RangeSwingHandler;
import core.game.world.GameWorld;
import core.game.world.repository.Repository;
import org.rs09.consts.Sounds;
@@ -34,6 +31,13 @@ import static core.api.ContentAPIKt.playGlobalAudio;
@Initializable
public final class ChainhitSpecialHandler extends RangeSwingHandler implements Plugin {
+ /**
+ * Constructs a new {@code ChainhitSpecialHandler} {@code Object}.
+ */
+ public ChainhitSpecialHandler() {
+ super(SwingHandlerFlag.IGNORE_PRAYER_BOOSTS_DAMAGE);
+ }
+
/**
* The sp::ecial energy required.
*/
@@ -159,7 +163,7 @@ public final class ChainhitSpecialHandler extends RangeSwingHandler implements P
public boolean pulse() {
BattleState bs = new BattleState(entity, e);
bs.setMaximumHit(calculateHit(player, e, 1.0));
- bs.setEstimatedHit(RandomFunction.RANDOM.nextInt(bs.getMaximumHit()));
+ bs.setEstimatedHit(RandomFunction.random(bs.getMaximumHit() + 1));
handleHit(victim, e, player, bs);
ChainhitSpecialHandler.super.visualizeImpact(player, e, bs);
return true;
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/ChinchompaSwingHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/ChinchompaSwingHandler.java
index fea739a85..0bd2e6d33 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/ChinchompaSwingHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/ChinchompaSwingHandler.java
@@ -31,13 +31,6 @@ public final class ChinchompaSwingHandler extends RangeSwingHandler {
*/
private static final Graphics END_GRAPHIC = new Graphics(157, 96);
- /**
- * Constructs a new {@code ChinchompaSwingHandler} {@code Object}.
- */
- public ChinchompaSwingHandler() {
- super(SwingHandlerFlag.IGNORE_STAT_BOOSTS_DAMAGE);
- }
-
@Override
public int swing(Entity entity, Entity victim, BattleState state) {
boolean multi = entity.getProperties().isMultiZone() && victim.getProperties().isMultiZone();
@@ -72,7 +65,7 @@ public final class ChinchompaSwingHandler extends RangeSwingHandler {
s.setStyle(CombatStyle.RANGE);
int hit = 0;
if (isAccurateImpact(entity, e, CombatStyle.RANGE)) {
- hit = RandomFunction.random(calculateHit(entity, e, 1.0));
+ hit = RandomFunction.random(calculateHit(entity, e, 1.0) + 1);
}
s.setEstimatedHit(hit);
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/CleaveSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/CleaveSpecialHandler.java
index dd669c168..f728dbaf2 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/CleaveSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/CleaveSpecialHandler.java
@@ -57,8 +57,8 @@ public final class CleaveSpecialHandler extends MeleeSwingHandler implements Plu
}
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.18, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.2203));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.25) + 1);
}
state.setEstimatedHit(hit);
return 1;
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/DescentOfDarknessSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/DescentOfDarknessSpecialHandler.java
index 519f9462a..75ae1f8a8 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/DescentOfDarknessSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/DescentOfDarknessSpecialHandler.java
@@ -30,7 +30,7 @@ public final class DescentOfDarknessSpecialHandler extends RangeSwingHandler imp
/**
* The special energy required.
*/
- private static final int SPECIAL_ENERGY = 65;
+ private static final int SPECIAL_ENERGY = 55;
/**
* The descent of dragons projectile.
@@ -102,13 +102,13 @@ public final class DescentOfDarknessSpecialHandler extends RangeSwingHandler imp
state.setMaximumHit(max);
int hit = minDamage;
if (isAccurateImpact(entity, victim, CombatStyle.RANGE, 1.15, 1.0)) {
- hit += RandomFunction.random(max - minDamage);
+ hit += RandomFunction.random(max - minDamage + 1);
}
state.setEstimatedHit(hit);
if (w.getType() == WeaponType.DOUBLE_SHOT) {
hit = minDamage;
if (isAccurateImpact(entity, victim, CombatStyle.RANGE, 1.15, 1.0)) {
- hit += RandomFunction.random(max - minDamage);
+ hit += RandomFunction.random(max - minDamage + 1);
}
state.setSecondaryHit(hit);
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/EnergyDrainSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/EnergyDrainSpecialHandler.java
index c7b6dec41..4686eb2b8 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/EnergyDrainSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/EnergyDrainSpecialHandler.java
@@ -57,8 +57,8 @@ public final class EnergyDrainSpecialHandler extends MeleeSwingHandler implement
}
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.2, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.25, 1.0)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1) + 1);
}
if (victim instanceof Player) {
((Player) victim).getSettings().updateRunEnergy(10);
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/FeintSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/FeintSpecialHandler.java
index a22ba8c10..b85962790 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/FeintSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/FeintSpecialHandler.java
@@ -52,8 +52,9 @@ public final class FeintSpecialHandler extends MeleeSwingHandler implements Plug
}
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.0, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, RandomFunction.random(1.0, 1.2)));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.0, 0.25)) {
+ int minDamage = calculateHit(entity, victim, 0.2);
+ hit = minDamage + RandomFunction.random(calculateHit(entity, victim, 1.0) + 1);
}
state.setEstimatedHit(hit);
return 1;
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/HamstringSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/HamstringSpecialHandler.java
index fefffaabd..6a89af4fc 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/HamstringSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/HamstringSpecialHandler.java
@@ -46,7 +46,8 @@ public final class HamstringSpecialHandler extends RangeSwingHandler implements
state.setMaximumHit(max);
int hit = 0;
if (isAccurateImpact(entity, victim)) {
- hit = RandomFunction.random(max);
+ int minDamage = calculateHit(entity, victim, 0.2);
+ hit = minDamage + RandomFunction.random(calculateHit(entity, victim, 1.0) + 1);
}
state.setEstimatedHit(hit);
Companion.useAmmo(entity, state, victim.getLocation());
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/HealingBladeSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/HealingBladeSpecialHandler.java
index 76780908b..5589c48c0 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/HealingBladeSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/HealingBladeSpecialHandler.java
@@ -57,20 +57,20 @@ public final class HealingBladeSpecialHandler extends MeleeSwingHandler implemen
}
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.12, 0.98)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.005));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 2.0, 1.0)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.1) + 1);
+ int healthRestore = hit / 2;
+ double prayerRestore = hit * 0.25;
+ if (healthRestore < 10) {
+ healthRestore = 10;
+ }
+ if (prayerRestore < 5) {
+ prayerRestore = 5;
+ }
+ entity.getSkills().heal(healthRestore);
+ entity.getSkills().incrementPrayerPoints(prayerRestore);
}
state.setEstimatedHit(hit);
- int healthRestore = hit / 2;
- double prayerRestore = hit * 0.25;
- if (healthRestore < 10) {
- healthRestore = 10;
- }
- if (prayerRestore < 5) {
- prayerRestore = 5;
- }
- entity.getSkills().heal(healthRestore);
- entity.getSkills().incrementPrayerPoints(prayerRestore);
return 1;
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/IceCleaveSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/IceCleaveSpecialHandler.java
index 42053679b..83c1e4a50 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/IceCleaveSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/IceCleaveSpecialHandler.java
@@ -57,8 +57,8 @@ public final class IceCleaveSpecialHandler extends MeleeSwingHandler implements
}
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.075, 0.98)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.005));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 2.0, 1.0)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.1) + 1);
}
state.setEstimatedHit(hit);
return 1;
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/ImpaleSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/ImpaleSpecialHandler.java
index 11ddbd9f9..2e0ff5aa4 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/ImpaleSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/ImpaleSpecialHandler.java
@@ -59,7 +59,7 @@ public final class ImpaleSpecialHandler extends MeleeSwingHandler implements Plu
state.setStyle(CombatStyle.MELEE);
int hit = 0;
if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.1, 0.98)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.1));
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.1) + 1);
}
state.setEstimatedHit(hit);
return 1;
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/JudgementSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/JudgementSpecialHandler.java
index 0fb647924..abdb00cc5 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/JudgementSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/JudgementSpecialHandler.java
@@ -57,8 +57,8 @@ public final class JudgementSpecialHandler extends MeleeSwingHandler implements
}
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.25, 0.98)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.25));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 2.0, 1.0)) {
+ hit = RandomFunction.random((int) (calculateHit(entity, victim, 1.1) * 1.25) + 1);
}
state.setEstimatedHit(hit);
return 1;
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/PhantomStrikeSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/PhantomStrikeSpecialHandler.java
index 18af20d24..82f5b3eb3 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/PhantomStrikeSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/PhantomStrikeSpecialHandler.java
@@ -49,7 +49,7 @@ public final class PhantomStrikeSpecialHandler extends RangeSwingHandler impleme
state.setMaximumHit(max);
int hit = 0;
if (isAccurateImpact(entity, victim)) {
- hit = RandomFunction.random(max);
+ hit = RandomFunction.random(max + 1);
}
state.setEstimatedHit(hit);
Companion.useAmmo(entity, state, victim.getLocation());
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/PowershotSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/PowershotSpecialHandler.java
index aca1a0070..4fe5e5f90 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/PowershotSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/PowershotSpecialHandler.java
@@ -56,10 +56,7 @@ public final class PowershotSpecialHandler extends RangeSwingHandler implements
return -1;
}
state.setStyle(CombatStyle.RANGE);
- int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.RANGE, 1.98, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.0));
- }
+ int hit = RandomFunction.random(calculateHit(entity, victim, 1.0) + 1);
state.setEstimatedHit(hit);
Companion.useAmmo(entity, state, victim.getLocation());
return 1 + (int) Math.ceil(entity.getLocation().getDistance(victim.getLocation()) * 0.3);
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/PowerstabSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/PowerstabSpecialHandler.java
index 4c7ea7a83..172ca036c 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/PowerstabSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/PowerstabSpecialHandler.java
@@ -85,7 +85,7 @@ public final class PowerstabSpecialHandler extends MeleeSwingHandler implements
BattleState s = targets[count++] = new BattleState(entity, e);
int hit = 0;
if (isAccurateImpact(entity, e)) {
- hit = RandomFunction.random(calculateHit(entity, e, 1.0));
+ hit = RandomFunction.random(calculateHit(entity, e, 1.0) + 1);
}
s.setStyle(CombatStyle.MELEE);
s.setEstimatedHit(hit);
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/PunctureSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/PunctureSpecialHandler.java
index e489173fc..b5fc3357f 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/PunctureSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/PunctureSpecialHandler.java
@@ -61,18 +61,13 @@ public final class PunctureSpecialHandler extends MeleeSwingHandler implements P
return -1;
}
state.setStyle(CombatStyle.MELEE);
- // First hit
- //double accuracyMod, double defenceMod
int hit = 0;
- // accuracyMod defenceMod
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.05, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.1306));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.15, 1.0)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.15) + 1);
}
state.setEstimatedHit(hit);
- // Second hit
- // accuracyMod defenceMod
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.05, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.1306));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.15, 1.0)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.15) + 1);
} else {
hit = 0;
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/QuickSmashSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/QuickSmashSpecialHandler.java
index cc5e5a557..e1d043c9d 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/QuickSmashSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/QuickSmashSpecialHandler.java
@@ -3,9 +3,11 @@ package content.global.handlers.item.equipment.special;
import core.game.node.entity.Entity;
import core.game.node.entity.combat.BattleState;
import core.game.node.entity.combat.CombatStyle;
+import core.game.node.entity.combat.DeathTask;
import core.game.node.entity.combat.MeleeSwingHandler;
import core.game.node.entity.impl.Animator.Priority;
import core.game.node.entity.player.Player;
+import core.game.node.entity.player.link.prayer.PrayerType;
import core.game.world.GameWorld;
import core.game.world.update.flag.context.Animation;
import core.game.world.update.flag.context.Graphics;
@@ -65,16 +67,22 @@ public final class QuickSmashSpecialHandler extends MeleeSwingHandler implements
return -1;
}
}
+ if (DeathTask.isDead(victim)) {
+ return -1;
+ }
if (!p.getSettings().drainSpecial(SPECIAL_ENERGY)) {
return -1;
}
- // TODO: apply protection prayers/experience manually (since this is bypassing normal BattleState machinery)
visualize(entity, victim, null);
int hit = 0;
if (isAccurateImpact(entity, victim)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.));
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.0) + 1);
}
- victim.getImpactHandler().handleImpact(entity, hit, CombatStyle.MELEE);
+ if (victim.hasProtectionPrayer(CombatStyle.MELEE))
+ hit *= (victim instanceof Player) ? 0.6 : 0;
+ BattleState b = new BattleState();
+ b.setEstimatedHit(victim.getImpactHandler().handleImpact(entity, hit, CombatStyle.MELEE).getAmount());
+ addExperience(entity, victim, b);
return 1;
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/RampageSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/RampageSpecialHandler.java
index 0aef9cd2b..2e70ab9ec 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/RampageSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/RampageSpecialHandler.java
@@ -65,15 +65,15 @@ public final class RampageSpecialHandler extends MeleeSwingHandler implements Pl
p.visualize(ANIMATION, GRAPHIC);
@SuppressWarnings("unused")
int boost = 0;
- for (int i = 0; i < 6; i++) {
- if (i == 2 || i == 3 || i == 5) {
- continue;
+ for (int i = 0; i < 7; i++) {
+ if (i == Skills.ATTACK || i == Skills.DEFENCE || i == Skills.RANGE || i == Skills.MAGIC) {
+ int drain = (int) (p.getSkills().getLevel(i) * 0.1);
+ boost += drain;
+ p.getSkills().updateLevel(i, -drain, 0);
}
- double drain = p.getSkills().getLevel(i) * 0.1;
- boost += drain;
- p.getSkills().updateLevel(i, (int) -drain, (int) (p.getSkills().getStaticLevel(i) - drain));
}
- p.getSkills().updateLevel(Skills.STRENGTH, (int) (p.getSkills().getStaticLevel(Skills.STRENGTH) * 0.20));
+ boost = 10 + (boost / 4);
+ p.getSkills().updateLevel(Skills.STRENGTH, boost, Math.max(p.getSkills().getStaticLevel(Skills.STRENGTH) + boost, p.getSkills().getLevel(Skills.STRENGTH)));
return -1;
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SaradominsLightningHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SaradominsLightningHandler.java
index 3875ba7be..9e672f4db 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/SaradominsLightningHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/SaradominsLightningHandler.java
@@ -52,9 +52,9 @@ public final class SaradominsLightningHandler extends MeleeSwingHandler implemen
state.setStyle(CombatStyle.MAGIC);
int hit = 0;
int secondary = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.10, 0.98)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.1));
- secondary = 5 + RandomFunction.RANDOM.nextInt(14);
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.10, 1.0)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.1) + 1);
+ secondary = 1 + RandomFunction.random(16);
}
state.setEstimatedHit(hit);
state.setSecondaryHit(secondary);
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SeercullSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SeercullSpecialHandler.java
index 5d9bc30ef..b4a374d3e 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/SeercullSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/SeercullSpecialHandler.java
@@ -1,5 +1,6 @@
package content.global.handlers.item.equipment.special;
+import core.game.node.entity.combat.SwingHandlerFlag;
import core.game.node.entity.skill.Skills;
import core.game.node.entity.Entity;
import core.game.node.entity.combat.BattleState;
@@ -24,6 +25,13 @@ import static core.api.ContentAPIKt.playGlobalAudio;
@Initializable
public final class SeercullSpecialHandler extends RangeSwingHandler implements Plugin {
+ /**
+ * Constructs a new {@code SeercullSpecialHandler} {@code Object}.
+ */
+ public SeercullSpecialHandler() {
+ super(SwingHandlerFlag.IGNORE_PRAYER_BOOSTS_DAMAGE);
+ }
+
/**
* The special energy required.
*/
@@ -57,11 +65,9 @@ public final class SeercullSpecialHandler extends RangeSwingHandler implements P
if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) {
return -1;
}
- int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.RANGE, 1.05, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.0));
+ int hit = RandomFunction.random(calculateHit(entity, victim, 1.0) + 1);
+ if (victim.getSkills().getLevel(Skills.MAGIC) >= victim.getSkills().getStaticLevel(Skills.MAGIC))
victim.getSkills().updateLevel(Skills.MAGIC, -hit, 0);
- }
Companion.useAmmo(entity, state, victim.getLocation());
state.setEstimatedHit(hit);
return 1;
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SeverSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SeverSpecialHandler.java
index 116e993d4..eb8419c10 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/SeverSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/SeverSpecialHandler.java
@@ -56,8 +56,8 @@ public final class SeverSpecialHandler extends MeleeSwingHandler implements Plug
return -1;
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.124, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.0));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.25, 1.0)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.0) + 1);
if (victim instanceof Player) {
Player p = (Player) victim;
if (p.getPrayer().get(PrayerType.PROTECT_FROM_MAGIC)) {
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/ShatterSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/ShatterSpecialHandler.java
index aebbd909f..1b226c390 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/ShatterSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/ShatterSpecialHandler.java
@@ -56,8 +56,8 @@ public final class ShatterSpecialHandler extends MeleeSwingHandler implements Pl
}
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 0.87, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.3546));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.25, 1.0)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.5) + 1);
}
state.setEstimatedHit(hit);
return 1;
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SliceAndDiceSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SliceAndDiceSpecialHandler.java
index 808cae7a4..9f755280c 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/SliceAndDiceSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/SliceAndDiceSpecialHandler.java
@@ -56,24 +56,25 @@ public final class SliceAndDiceSpecialHandler extends MeleeSwingHandler implemen
return -1;
}
int maximum = calculateHit(entity, victim, 1.0);
- int[] hits = new int[] {0, 1};
- int hit = getHit(entity, victim, maximum);
+ int[] hits;
+ int hit = getHit(entity, victim, maximum - 1, maximum / 2);
if (hit > 0) {
- hits = new int[] {hit, hit / 2, (hit / 2) / 2, (hit / 2) - ((hit / 2) / 2)};
+ hits = new int[] {hit, hit / 2, (hit / 2) / 2, (hit / 2) / 2 + 1};
} else {
- hit = getHit(entity, victim, maximum);
+ hit = getHit(entity, victim, maximum * 7 / 8, maximum * 3 / 8);
if (hit > 0) {
- hits = new int[] {0, hit, hit / 2, hit - (hit / 2)};
+ hits = new int[] {0, hit, hit / 2, hit / 2 + 1};
} else {
- hit = getHit(entity, victim, maximum);
+ hit = getHit(entity, victim, maximum * 3 / 4, maximum / 4);
if (hit > 0) {
- hits = new int[] {0, 0, hit / 2, (hit / 2) + 10};
+ hits = new int[] {0, 0, hit, hit + 1};
} else {
- hit = getHit(entity, victim, (int) (maximum * 1.5));
+ hit = getHit(entity, victim, maximum * 5 / 4, maximum / 4);
if (hit > 0) {
hits = new int[] {0, 0, 0, hit};
} else {
- hits = new int[] {0, RandomFunction.random(2)};
+ hit = RandomFunction.random(2);
+ hits = new int[] {0, 0, hit, hit};
}
}
}
@@ -95,9 +96,9 @@ public final class SliceAndDiceSpecialHandler extends MeleeSwingHandler implemen
* @param maximum The maximum hit.
* @return The hit.
*/
- private int getHit(Entity entity, Entity victim, int maximum) {
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.25, 0.98)) {
- return RandomFunction.random(maximum);
+ private int getHit(Entity entity, Entity victim, int maximum, int minimum) {
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE)) {
+ return RandomFunction.random(minimum, maximum + 1);
}
return 0;
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SmashSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SmashSpecialHandler.java
index e4137d26c..ba4989eda 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/SmashSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/SmashSpecialHandler.java
@@ -59,7 +59,8 @@ public final class SmashSpecialHandler extends MeleeSwingHandler implements Plug
state.setStyle(CombatStyle.MELEE);
int hit = 0;
if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.0, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, RandomFunction.random(1.0, 1.5)));
+ int max = calculateHit(entity, victim, 1.0);
+ hit = max / 4 + RandomFunction.random(max + 1);
int lower = (int) (victim.getSkills().getLevel(Skills.DEFENCE) * 0.30);
victim.getSkills().updateLevel(Skills.DEFENCE, -lower, 0);
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SnapshotSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SnapshotSpecialHandler.java
index ddd761a21..618a0f4b2 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/SnapshotSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/SnapshotSpecialHandler.java
@@ -3,6 +3,7 @@ package content.global.handlers.item.equipment.special;
import core.game.node.entity.Entity;
import core.game.node.entity.combat.BattleState;
import core.game.node.entity.combat.CombatStyle;
+import core.game.node.entity.combat.SwingHandlerFlag;
import core.game.node.entity.impl.Animator.Priority;
import core.game.node.entity.impl.Projectile;
import core.game.node.entity.player.Player;
@@ -25,6 +26,13 @@ import static core.api.ContentAPIKt.playGlobalAudio;
@Initializable
public final class SnapshotSpecialHandler extends RangeSwingHandler implements Plugin {
+ /**
+ * Constructs a new {@code SnapshotSpecialHandler} {@code Object}.
+ */
+ public SnapshotSpecialHandler() {
+ super(SwingHandlerFlag.IGNORE_PRAYER_BOOSTS_DAMAGE);
+ }
+
/**
* The special energy required.
*/
@@ -67,13 +75,13 @@ public final class SnapshotSpecialHandler extends RangeSwingHandler implements P
int max = calculateHit(entity, victim, 1.0);
state.setMaximumHit(max);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 0.9, 1.0)) {
- hit = RandomFunction.random(max);
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.43, 1.0)) {
+ hit = RandomFunction.random(max + 1);
}
state.setEstimatedHit(hit);
hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 0.9, 1.0)) {
- hit = RandomFunction.random(max);
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.43, 1.0)) {
+ hit = RandomFunction.random(max + 1);
}
state.setSecondaryHit(hit);
Companion.useAmmo(entity, state, victim.getLocation());
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SnipeSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SnipeSpecialHandler.java
index b3941ef7c..4d5b66609 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/SnipeSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/SnipeSpecialHandler.java
@@ -60,9 +60,10 @@ public final class SnipeSpecialHandler extends RangeSwingHandler implements Plug
}
state.setStyle(CombatStyle.RANGE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.RANGE, 1.05, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.0));
- victim.getSkills().updateLevel(Skills.DEFENCE, -hit, 0);
+ if (!victim.getProperties().getCombatPulse().isAttacking() || isAccurateImpact(entity, victim, CombatStyle.RANGE)) {
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.0) + 1);
+ if (victim.getSkills().getStaticLevel(Skills.DEFENCE) >= victim.getSkills().getDynamicLevels()[Skills.DEFENCE])
+ victim.getSkills().updateLevel(Skills.DEFENCE, -hit, 0);
}
Companion.useAmmo(entity, state, victim.getLocation());
state.setEstimatedHit(hit);
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SpearWallSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SpearWallSpecialHandler.java
index bdbef4ee4..c83d2fd5d 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/SpearWallSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/SpearWallSpecialHandler.java
@@ -85,7 +85,7 @@ public final class SpearWallSpecialHandler extends MeleeSwingHandler implements
if (CombatStyle.RANGE.getSwingHandler().canSwing(entity, e) != InteractionType.NO_INTERACT) {
BattleState s = targets[count++] = new BattleState(entity, e);
int hit = 0;
- hit = RandomFunction.random(calculateHit(entity, e, 1.0));
+ hit = RandomFunction.random(calculateHit(entity, e, 1.0) + 1);
s.setStyle(CombatStyle.MELEE);
s.setEstimatedHit(hit);
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SweepSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SweepSpecialHandler.java
index 4b7947736..3ef8ce0f7 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/SweepSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/SweepSpecialHandler.java
@@ -66,14 +66,14 @@ public final class SweepSpecialHandler extends MeleeSwingHandler implements Plug
for (BattleState s : targets) {
s.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, s.getVictim(), CombatStyle.MELEE, 1, 0.94)) {
- hit = RandomFunction.random(calculateHit(entity, s.getVictim(), 1.1));
+ if (isAccurateImpact(entity, s.getVictim(), CombatStyle.MELEE)) {
+ hit = RandomFunction.random(calculateHit(entity, s.getVictim(), 1.1) + 1);
}
s.setEstimatedHit(hit);
if (s.getVictim().size() > 1) {
hit = 0;
- if (isAccurateImpact(entity, s.getVictim(), CombatStyle.MELEE, 1, 0.94)) {
- hit = RandomFunction.random(calculateHit(entity, s.getVictim(), 1.1));
+ if (isAccurateImpact(entity, s.getVictim(), CombatStyle.MELEE, 0.75, 1.0)) {
+ hit = RandomFunction.random(calculateHit(entity, s.getVictim(), 1.1) + 1);
}
s.setSecondaryHit(hit);
}
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/WarstrikeSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/WarstrikeSpecialHandler.java
index 8982b198b..177769d5d 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/WarstrikeSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/WarstrikeSpecialHandler.java
@@ -57,8 +57,8 @@ public final class WarstrikeSpecialHandler extends MeleeSwingHandler implements
}
state.setStyle(CombatStyle.MELEE);
int hit = 0;
- if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.049, 0.98)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.1));
+ if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 2.0, 1.0)) {
+ hit = RandomFunction.random((int) (calculateHit(entity, victim, 1.1) * 1.1) + 1);
}
state.setEstimatedHit(hit);
if (victim instanceof Player) {
@@ -68,10 +68,10 @@ public final class WarstrikeSpecialHandler extends MeleeSwingHandler implements
if (left > 0) {
left = -victim.getSkills().updateLevel(Skills.STRENGTH, -left, 0);
if (left > 0) {
- left = -victim.getSkills().updateLevel(Skills.ATTACK, -left, 0);
+ left = (int) -(victim.getSkills().getPrayerPoints() + left);
+ victim.getSkills().decrementPrayerPoints(left);
if (left > 0) {
- left = (int) -(victim.getSkills().getPrayerPoints() + left);
- victim.getSkills().decrementPrayerPoints(left);
+ left = -victim.getSkills().updateLevel(Skills.ATTACK, -left, 0);
if (left > 0) {
left = -victim.getSkills().updateLevel(Skills.MAGIC, -left, 0);
if (left > 0)
diff --git a/Server/src/main/content/global/handlers/item/equipment/special/WeakenSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/WeakenSpecialHandler.java
index 0fda16c8c..b8f45d90f 100644
--- a/Server/src/main/content/global/handlers/item/equipment/special/WeakenSpecialHandler.java
+++ b/Server/src/main/content/global/handlers/item/equipment/special/WeakenSpecialHandler.java
@@ -57,18 +57,19 @@ public final class WeakenSpecialHandler extends MeleeSwingHandler implements Plu
state.setStyle(CombatStyle.MELEE);
int hit = 0;
if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.0, 1.0)) {
- hit = RandomFunction.random(calculateHit(entity, victim, 1.0));
+ hit = RandomFunction.random(calculateHit(entity, victim, 1.0) + 1);
+ if (victim instanceof Player) {
+ ((Player) victim).getPacketDispatch().sendMessage("You have been drained.");
+ }
+ // TODO 10% drain to demons
+ int lower = (int) (victim.getSkills().getStaticLevel(Skills.DEFENCE) * 0.05) + 1;
+ victim.getSkills().updateLevel(Skills.DEFENCE, -lower, 0);
+ lower = (int) (victim.getSkills().getStaticLevel(Skills.ATTACK) * 0.05) + 1;
+ victim.getSkills().updateLevel(Skills.ATTACK, -lower, 0);
+ lower = (int) (victim.getSkills().getStaticLevel(Skills.STRENGTH) * 0.05) + 1;
+ victim.getSkills().updateLevel(Skills.STRENGTH, -lower, 0);
}
state.setEstimatedHit(hit);
- if (victim instanceof Player) {
- ((Player) victim).getPacketDispatch().sendMessage("You have been drained.");
- }
- int lower = (int) (victim.getSkills().getLevel(Skills.DEFENCE) * 0.05);
- victim.getSkills().updateLevel(Skills.DEFENCE, -lower, 0);
- int lower2 = (int) (victim.getSkills().getLevel(Skills.ATTACK) * 0.05);
- victim.getSkills().updateLevel(Skills.ATTACK, -lower2, 0);
- int lower3 = (int) (victim.getSkills().getLevel(Skills.STRENGTH) * 0.05);
- victim.getSkills().updateLevel(Skills.STRENGTH, -lower3, 0);
return hit;
}
diff --git a/Server/src/main/content/global/handlers/item/withnpc/CatOnArdougneCivilian.kt b/Server/src/main/content/global/handlers/item/withnpc/CatOnArdougneCivilian.kt
index 7046b50a2..e69de29bb 100644
--- a/Server/src/main/content/global/handlers/item/withnpc/CatOnArdougneCivilian.kt
+++ b/Server/src/main/content/global/handlers/item/withnpc/CatOnArdougneCivilian.kt
@@ -1,56 +0,0 @@
-package content.global.handlers.item.withnpc
-
-import core.api.Container
-import core.api.*
-import org.rs09.consts.Items
-import org.rs09.consts.NPCs
-import core.game.interaction.InteractionListener
-import core.game.interaction.IntType
-
-class CatOnArdougneCivilian: InteractionListener {
-
- private val civilians = intArrayOf(
- NPCs.CIVILIAN_785,
- NPCs.CIVILIAN_786,
- NPCs.CIVILIAN_787
- )
-
- private val cats = intArrayOf(
- Items.PET_CAT_1561,
- Items.PET_CAT_1562,
- Items.PET_CAT_1563,
- Items.PET_CAT_1564,
- Items.PET_CAT_1565,
- Items.PET_CAT_1566,
- Items.OVERGROWN_CAT_1567,
- Items.OVERGROWN_CAT_1568,
- Items.OVERGROWN_CAT_1569,
- Items.OVERGROWN_CAT_1570,
- Items.OVERGROWN_CAT_1571,
- Items.OVERGROWN_CAT_1572,
- Items.LAZY_CAT_6551,
- Items.LAZY_CAT_6552,
- Items.LAZY_CAT_6553,
- Items.LAZY_CAT_6554,
- Items.WILY_CAT_6555,
- Items.WILY_CAT_6556,
- Items.WILY_CAT_6557,
- Items.WILY_CAT_6558,
- Items.WILY_CAT_6559,
- Items.WILY_CAT_6560,
- Items.HELL_CAT_7582,
- Items.OVERGROWN_HELLCAT_7581,
- Items.LAZY_HELL_CAT_7584,
- Items.WILY_HELLCAT_7585,
- )
-
- override fun defineListeners() {
- onUseWith(IntType.NPC,cats,*civilians){ player, used, _ ->
- sendItemDialogue(player,Items.DEATH_RUNE_560,"You hand over the cat. You are given 100 Death Runes.")
- player.familiarManager.removeDetails(used.idHash)
- removeItem(player,used,Container.INVENTORY)
- addItem(player,Items.DEATH_RUNE_560,100)
- return@onUseWith true
- }
- }
-}
\ No newline at end of file
diff --git a/Server/src/main/content/global/handlers/item/withnpc/GCItemOnCat.kt b/Server/src/main/content/global/handlers/item/withnpc/GCItemOnCat.kt
index 3209b4f45..0b54ccf55 100644
--- a/Server/src/main/content/global/handlers/item/withnpc/GCItemOnCat.kt
+++ b/Server/src/main/content/global/handlers/item/withnpc/GCItemOnCat.kt
@@ -10,27 +10,27 @@ import org.rs09.consts.NPCs
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
import core.game.world.GameWorld.Pulser
+import content.data.Quests
class GCItemOnCat : InteractionListener {
override fun defineListeners() {
- val GERTCAT = "Gertrude's Cat"
val BEND_DOWN = 827
onUseWith(IntType.NPC, Items.BUCKET_OF_MILK_1927, NPCs.GERTRUDES_CAT_2997) { player, used, with ->
- if(getQuestStage(player, GERTCAT) == 20 && removeItem(player, used.asItem())){
+ if(getQuestStage(player, Quests.GERTRUDES_CAT) == 20 && removeItem(player, used.asItem())){
addItem(player, Items.BUCKET_1925)
animate(player, BEND_DOWN) //bend down
sendChat(with.asNpc(), "Mew!")
- setQuestStage(player, GERTCAT, 30)
+ setQuestStage(player, Quests.GERTRUDES_CAT, 30)
}
return@onUseWith true
}
onUseWith(IntType.NPC, Items.DOOGLE_SARDINE_1552, NPCs.GERTRUDES_CAT_2997){ player, used, with ->
- if(getQuestStage(player, GERTCAT) == 30 && removeItem(player, used.asItem())){
+ if(getQuestStage(player, Quests.GERTRUDES_CAT) == 30 && removeItem(player, used.asItem())){
animate(player, BEND_DOWN)
sendChat(with.asNpc(), "Mew!")
- setQuestStage(player, GERTCAT, 40)
+ setQuestStage(player, Quests.GERTRUDES_CAT, 40)
}
return@onUseWith true
}
@@ -42,7 +42,7 @@ class GCItemOnCat : InteractionListener {
onUseWith(IntType.NPC, Items.THREE_LITTLE_KITTENS_13236, NPCs.GERTRUDES_CAT_2997){ player, used, with ->
if(removeItem(player, used.asItem())){
- setQuestStage(player, GERTCAT, 60)
+ setQuestStage(player, Quests.GERTRUDES_CAT, 60)
//below copied verbatim from original, I don't like it.
Pulser.submit(object : Pulse(1) {
var count = 0
diff --git a/Server/src/main/content/global/handlers/item/withnpc/GertrudeCatUsePlugin.java b/Server/src/main/content/global/handlers/item/withnpc/GertrudeCatUsePlugin.java
index b939f3735..efddb3bed 100644
--- a/Server/src/main/content/global/handlers/item/withnpc/GertrudeCatUsePlugin.java
+++ b/Server/src/main/content/global/handlers/item/withnpc/GertrudeCatUsePlugin.java
@@ -14,6 +14,7 @@ import core.game.world.map.path.Pathfinder;
import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable;
import core.plugin.Plugin;
+import content.data.Quests;
/**
* Represents the plugin used to handle the use with interactions.
@@ -50,7 +51,7 @@ public final class GertrudeCatUsePlugin extends UseWithHandler {
public boolean handle(NodeUsageEvent event) {
final Player player = event.getPlayer();
final NPC npc = ((NPC) event.getUsedWith());
- final Quest quest = player.getQuestRepository().getQuest("Gertrude's Cat");
+ final Quest quest = player.getQuestRepository().getQuest(Quests.GERTRUDES_CAT);
if (event.getUsedItem().getId() == 1927 && quest.getStage(player) == 20) {
if (player.getInventory().remove(event.getUsedItem())) {
player.getInventory().add(EMPTY_BUCKET);
diff --git a/Server/src/main/content/global/handlers/item/withnpc/RopeOnLadyKeli.kt b/Server/src/main/content/global/handlers/item/withnpc/RopeOnLadyKeli.kt
index dab9e0c12..3dbd34a6d 100644
--- a/Server/src/main/content/global/handlers/item/withnpc/RopeOnLadyKeli.kt
+++ b/Server/src/main/content/global/handlers/item/withnpc/RopeOnLadyKeli.kt
@@ -5,20 +5,19 @@ import org.rs09.consts.Items
import org.rs09.consts.NPCs
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
+import content.data.Quests
class RopeOnLadyKeli : InteractionListener {
override fun defineListeners() {
- val PAR = "Prince Ali Rescue"
-
onUseWith(IntType.NPC, Items.ROPE_954, NPCs.LADY_KELI_919) { player, used, with ->
- if(getQuestStage(player, PAR) in 40..50 && getAttribute(player, "guard-drunk", false)){
+ if(getQuestStage(player, Quests.PRINCE_ALI_RESCUE) in 40..50 && getAttribute(player, "guard-drunk", false)){
if(removeItem(player, used.asItem())){
sendDialogue(player, "You overpower Keli, tie her up, and put her in a cupboard.")
- setQuestStage(player, PAR, 50)
+ setQuestStage(player, Quests.PRINCE_ALI_RESCUE, 50)
setAttribute(player, "keli-gone", getWorldTicks() + 350)
}
} else {
- if (getQuestStage(player, PAR) == 40){
+ if (getQuestStage(player, Quests.PRINCE_ALI_RESCUE) == 40){
sendMessage(player, "You need to do something about the guard first.")
}
}
diff --git a/Server/src/main/content/global/handlers/item/withobject/AmmoMouldOnFurnace.kt b/Server/src/main/content/global/handlers/item/withobject/AmmoMouldOnFurnace.kt
index 5b78dd96b..0d5929d0a 100644
--- a/Server/src/main/content/global/handlers/item/withobject/AmmoMouldOnFurnace.kt
+++ b/Server/src/main/content/global/handlers/item/withobject/AmmoMouldOnFurnace.kt
@@ -1,7 +1,7 @@
package content.global.handlers.item.withobject
+import content.data.Quests
import core.api.*
-import content.region.kandarin.quest.dwarfcannon.DwarfCannon
import core.game.node.Node
import core.game.node.entity.player.Player
import core.game.node.entity.skill.Skills
@@ -19,8 +19,8 @@ class AmmoMouldOnFurnace : InteractionListener {
private fun cannonBallOnUseWithHandler(player: Player, used: Node, with: Node): Boolean {
face(player, with.centerLocation)
- if(!isQuestComplete(player, DwarfCannon.NAME)) {
- sendDialogue(player, "You need to complete the ${DwarfCannon.NAME} quest in order to do this.")
+ if(!isQuestComplete(player, Quests.DWARF_CANNON)) {
+ sendDialogue(player, "You need to complete the ${Quests.DWARF_CANNON} quest in order to do this.")
return true
}
if (getDynLevel(player, Skills.SMITHING) < levelRequirement) {
diff --git a/Server/src/main/content/global/handlers/item/withobject/SmithingPlugin.java b/Server/src/main/content/global/handlers/item/withobject/SmithingPlugin.java
index 95d10cb2c..e9ef946b3 100644
--- a/Server/src/main/content/global/handlers/item/withobject/SmithingPlugin.java
+++ b/Server/src/main/content/global/handlers/item/withobject/SmithingPlugin.java
@@ -15,6 +15,7 @@ import core.game.node.scenery.Scenery;
import core.plugin.Plugin;
import core.plugin.Initializable;
import core.plugin.ClassScanner;
+import content.data.Quests;
/**
* Represents the option handler used for smithing.
@@ -68,7 +69,7 @@ public final class SmithingPlugin extends UseWithHandler {
@Override
public boolean handle(NodeUsageEvent event) {
final Player player = event.getPlayer();
- if (((Scenery) event.getUsedWith()).getId() == 2782 && !player.getQuestRepository().isComplete("Doric's Quest")) {
+ if (((Scenery) event.getUsedWith()).getId() == 2782 && !player.getQuestRepository().isComplete(Quests.DORICS_QUEST)) {
player.getDialogueInterpreter().sendDialogue("Property of Doric the Dwarf.");
return true;
}
diff --git a/Server/src/main/content/global/handlers/item/withobject/WaterSourceListener.kt b/Server/src/main/content/global/handlers/item/withobject/WaterSourceListener.kt
index a53198e44..59a8e2049 100644
--- a/Server/src/main/content/global/handlers/item/withobject/WaterSourceListener.kt
+++ b/Server/src/main/content/global/handlers/item/withobject/WaterSourceListener.kt
@@ -7,6 +7,7 @@ import core.game.world.update.flag.context.Animation
import org.rs09.consts.Items
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
+import core.game.world.map.Location
import org.rs09.consts.Sounds
/**
@@ -14,8 +15,10 @@ import org.rs09.consts.Sounds
* @author Ceikry
*/
class WaterSourceListener : InteractionListener {
- //this is ugly!
- private val waterSources = intArrayOf(21355, 16302, 6827, 11661, 24160, 34577, 15936, 15937, 15938, 23920, 35469, 24265, 153, 879, 880, 2864, 6232, 10436, 10437, 10827, 11007, 11759, 21764, 22973, 24161, 24214, 24265, 28662, 30223, 30820, 34579, 36781, 873, 874, 4063, 6151, 8699, 9143, 9684, 10175, 12279, 12974, 13563, 13564, 14868, 14917, 14918, 15678, 16704, 16705, 20358, 22715, 24112, 24314, 25729, 25929, 26966, 29105, 33458, 34082, 34411, 34496, 34547, 34566, 35762, 36971, 37154, 37155, 878, 884, 3264, 3305, 3359, 4004, 4005, 6097, 6249, 6549, 8747, 8927, 11793, 12201, 12897, 24166, 26945, 31359, 32023, 32024, 34576, 35671, 40063, 13561, 13563, 13559, 12089)
+ // NOTE '9695' should be removed from the array below once the sink object can be used directly, this is a temporary
+ // solution.
+ // this is ugly!
+ private val waterSources = intArrayOf(21355, 16302, 6827, 11661, 24160, 34577, 15936, 15937, 15938, 23920, 35469, 24265, 153, 879, 880, 2864, 6232, 10436, 10437, 10827, 11007, 11759, 21764, 22973, 24161, 24214, 24265, 28662, 30223, 30820, 34579, 36781, 873, 874, 4063, 6151, 8699, 9143, 9684, 9695, 10175, 12279, 12974, 13563, 13564, 14868, 14917, 14918, 15678, 16704, 16705, 20358, 22715, 24112, 24314, 25729, 25929, 26966, 29105, 33458, 34082, 34411, 34496, 34547, 34566, 35762, 36971, 37154, 37155, 878, 884, 3264, 3305, 3359, 4004, 4005, 6097, 6249, 6549, 8747, 8927, 11793, 12201, 12897, 24166, 26945, 31359, 32023, 32024, 34576, 35671, 40063, 13561, 13563, 13559, 12089)
private val nonWellableMsg = "If I drop my @ down there, I don't think I'm likely to get it back."
private val animation = Animation(832)
@@ -31,6 +34,11 @@ class WaterSourceListener : InteractionListener {
return@onUseWith true
}
+ if(with.id == 9695 && player.location.regionId != 11571)
+ {
+ return@onUseWith false
+ }
+
//ugly achievement code, achievement system sux
if(vessel == WaterVessel.BUCKET && with.id == 11661)
{
@@ -59,6 +67,15 @@ class WaterSourceListener : InteractionListener {
return@onUseWith true
}
+
+ // This is needed to make the crafting guild sink work, but technically it's wrong as it is the noticeboard and
+ // not the sink being used. This is a temporary solution until the sink object can be used directly.
+ setDest(IntType.SCENERY, intArrayOf(9695), "use") { player, node ->
+ if (player.location.regionId == 11571){
+ return@setDest Location.create(2934, 3280, 0)
+ }
+ return@setDest node.location
+ }
}
private fun formatMsgText(name: String, template: String): String
diff --git a/Server/src/main/content/global/handlers/npc/RatNPC.java b/Server/src/main/content/global/handlers/npc/RatNPC.java
index 11f4fce94..f8a380db4 100644
--- a/Server/src/main/content/global/handlers/npc/RatNPC.java
+++ b/Server/src/main/content/global/handlers/npc/RatNPC.java
@@ -7,6 +7,7 @@ import core.game.node.item.GroundItemManager;
import core.game.node.item.Item;
import core.plugin.Initializable;
import core.game.world.map.Location;
+import content.data.Quests;
/**
* Represents a rat npc.
@@ -51,7 +52,7 @@ public class RatNPC extends AbstractNPC {
super.finalizeDeath(killer);
if (killer instanceof Player) {
final Player p = ((Player) killer);
- if (p.getQuestRepository().getQuest("Witch's Potion").isStarted(p)) {
+ if (p.getQuestRepository().getQuest(Quests.WITCHS_POTION).isStarted(p)) {
GroundItemManager.create(RAT_TAIL, getLocation(), p);
}
}
diff --git a/Server/src/main/content/global/handlers/npc/SheepBehavior.kt b/Server/src/main/content/global/handlers/npc/SheepBehavior.kt
index d9767f8a4..b329d4622 100644
--- a/Server/src/main/content/global/handlers/npc/SheepBehavior.kt
+++ b/Server/src/main/content/global/handlers/npc/SheepBehavior.kt
@@ -17,6 +17,7 @@ import org.rs09.consts.NPCs
import org.rs09.consts.Sounds
import core.game.world.map.Location
import core.game.world.map.Direction
+import content.data.Quests
private val sheepIds = intArrayOf(
NPCs.SHEEP_42,
@@ -74,7 +75,7 @@ class SheepBehavior : NPCBehavior(*sheepIds), InteractionListener {
val sheep = node as NPC
sheep.faceTemporary(player, 1)
if (sheep.id == NPCs.SHEEP_3579) {
- if (player.questRepository.getQuest("Sheep Shearer").isStarted(player)) {
+ if (player.questRepository.getQuest(Quests.SHEEP_SHEARER).isStarted(player)) {
setAttribute(player, ATTR_IS_PENGUIN_SHEEP_SHEARED, true)
}
animate(player, Animation(893))
diff --git a/Server/src/main/content/global/handlers/scenery/DoogleLeafPlugin.java b/Server/src/main/content/global/handlers/scenery/DoogleLeafPlugin.java
deleted file mode 100644
index 99da19d9c..000000000
--- a/Server/src/main/content/global/handlers/scenery/DoogleLeafPlugin.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package content.global.handlers.scenery;
-
-import core.cache.def.impl.SceneryDefinition;
-import core.game.interaction.OptionHandler;
-import core.game.node.Node;
-import core.game.node.entity.player.Player;
-import core.game.node.item.Item;
-import core.plugin.Initializable;
-import core.plugin.Plugin;
-
-/**
- * Represents the doogle leaf plugin for this object.
- * @author 'Vexia
- * @version 1.0
- */
-public class DoogleLeafPlugin extends OptionHandler {
-
- /**
- * Represents the leaf item.
- */
- private static final Item LEAF = new Item(1573, 1);
-
- @Override
- public Plugin newInstance(Object arg) throws Throwable {
- SceneryDefinition.forId(31155).getHandlers().put("option:pick-leaf", this);
- return this;
- }
-
- @Override
- public boolean handle(Player player, Node node, String option) {
- if (!player.getInventory().add(LEAF)) {
- player.getPacketDispatch().sendMessage("You don't have have enough space in your inventory.");
- } else {
- player.getPacketDispatch().sendMessage("You pick some doogle leaves.");
- }
- return true;
- }
-
-}
diff --git a/Server/src/main/content/global/handlers/scenery/DoorManagingPlugin.java b/Server/src/main/content/global/handlers/scenery/DoorManagingPlugin.java
index 295badfd8..b6d18c0fa 100644
--- a/Server/src/main/content/global/handlers/scenery/DoorManagingPlugin.java
+++ b/Server/src/main/content/global/handlers/scenery/DoorManagingPlugin.java
@@ -11,6 +11,9 @@ import core.game.world.map.Location;
import core.game.world.map.RegionManager;
import core.plugin.Initializable;
import core.plugin.Plugin;
+import org.rs09.consts.Sounds;
+
+import static core.api.ContentAPIKt.*;
/**
* Plugin used for handling the opening/closing of (double)
@@ -39,6 +42,14 @@ public final class DoorManagingPlugin extends OptionHandler {
if (name.contains("drawers") || name.contains("wardrobe") || name.contains("cupboard")) {
switch(option) {
case "open":
+ if (name.contains("drawers")) {
+ playAudio(player, Sounds.DRAWER_OPEN_64);
+ } else if (name.contains("wardrobe")) {
+ animate(player, 545, false);
+ playAudio(player, Sounds.WARDROBE_OPEN_96);
+ } else if (name.contains("cupboard")) {
+ playAudio(player, Sounds.CUPBOARD_OPEN_58);
+ }
case "go-through":
if (object.isActive()) {
SceneryBuilder.replace(object, object.transform(object.getId() + 1), 80);
@@ -46,6 +57,14 @@ public final class DoorManagingPlugin extends OptionHandler {
return true;
case "close":
case "shut":
+ if (name.contains("drawers")) {
+ playAudio(player, Sounds.DRAWER_CLOSE_63);
+ } else if (name.contains("wardrobe")) {
+ animate(player, 544, false);
+ playAudio(player, Sounds.WARDROBE_CLOSE_95);
+ } else if (name.contains("cupboard")) {
+ playAudio(player, Sounds.CUPBOARD_CLOSE_57);
+ }
SceneryBuilder.replace(object, object.transform(object.getId() - 1));
return true;
}
diff --git a/Server/src/main/content/global/handlers/scenery/FieldPickingPlugin.java b/Server/src/main/content/global/handlers/scenery/FieldPickingPlugin.java
index 307c09b20..1d0fa5c07 100644
--- a/Server/src/main/content/global/handlers/scenery/FieldPickingPlugin.java
+++ b/Server/src/main/content/global/handlers/scenery/FieldPickingPlugin.java
@@ -72,7 +72,7 @@ public final class FieldPickingPlugin extends OptionHandler {
player.dispatch(new ResourceProducedEvent(reward.getId(), reward.getAmount(), node, -1));
if (plant.name().startsWith("NETTLES") && (player.getEquipment().get(EquipmentContainer.SLOT_HANDS) == null || player.getEquipment().get(EquipmentContainer.SLOT_HANDS) != null && !player.getEquipment().get(EquipmentContainer.SLOT_HANDS).getName().contains("glove"))) {
player.getPacketDispatch().sendMessage("You have been stung by the nettles!");
- player.getImpactHandler().manualHit(player, 2, HitsplatType.POISON);
+ player.getImpactHandler().manualHit(player, 6, HitsplatType.POISON);
return true;
}
if (plant.respawn != -1 && plant != PickingPlant.FLAX) {
diff --git a/Server/src/main/content/global/handlers/scenery/LadderManagingPlugin.java b/Server/src/main/content/global/handlers/scenery/LadderManagingPlugin.java
index 0cb9a6500..9712fe790 100644
--- a/Server/src/main/content/global/handlers/scenery/LadderManagingPlugin.java
+++ b/Server/src/main/content/global/handlers/scenery/LadderManagingPlugin.java
@@ -23,6 +23,8 @@ public final class LadderManagingPlugin extends OptionHandler {
SceneryDefinition.setOptionHandler("climb-up", this);
SceneryDefinition.setOptionHandler("climb-down", this);
SceneryDefinition.setOptionHandler("climb", this);
+ SceneryDefinition.setOptionHandler("walk-up", this);
+ SceneryDefinition.setOptionHandler("walk-down", this);
return this;
}
diff --git a/Server/src/main/content/global/handlers/scenery/SearchOptionPlugin.java b/Server/src/main/content/global/handlers/scenery/SearchOptionPlugin.java
index 3b2144efb..f637107f1 100644
--- a/Server/src/main/content/global/handlers/scenery/SearchOptionPlugin.java
+++ b/Server/src/main/content/global/handlers/scenery/SearchOptionPlugin.java
@@ -7,6 +7,9 @@ import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.plugin.Initializable;
import core.plugin.Plugin;
+import content.data.Quests;
+
+import static core.api.ContentAPIKt.*;
/**
* Handles the search option.
@@ -80,6 +83,10 @@ public class SearchOptionPlugin extends OptionHandler {
player.getInventory().add(new Item(946));
return true;
}
+ if (node.getId() == 12799 && hasRequirement(player, Quests.IN_AID_OF_THE_MYREQUE)) {
+ openBankAccount(player);
+ return true;
+ }
player.getPacketDispatch().sendMessage("You search the " + node.getName().toLowerCase() + " but find nothing.");
return true;
}
diff --git a/Server/src/main/content/global/handlers/scenery/SignpostListener.kt b/Server/src/main/content/global/handlers/scenery/SignpostListener.kt
index 837462159..583aa259d 100644
--- a/Server/src/main/content/global/handlers/scenery/SignpostListener.kt
+++ b/Server/src/main/content/global/handlers/scenery/SignpostListener.kt
@@ -11,18 +11,21 @@ class SignpostListener : InteractionListener {
override fun defineListeners() {
on(Scenery.SIGNPOST_18493, IntType.SCENERY, "read") { player, node ->
if (node.asScenery().location.equals(Location(3235, 3228))) {
+ // Authentic
setInterfaceText(player, "Head north towards Fred's farm, and the windmill.", 135, 3) // North
setInterfaceText(player, "South to the swamps of Lumbridge.", 135, 9) // South
setInterfaceText(player, "Cross the bridge and head east to Al Kharid or north to Varrock.", 135, 8) // East
setInterfaceText(player, "West to the Lumbridge Castle and Draynor Village. Beware the goblins!", 135, 12) // West
openInterface(player, Components.AIDE_COMPASS_135)
} else if (node.asScenery().location.equals(Location(3261, 3230))) {
+ // Authentic
setInterfaceText(player, "North to farms and Varrock.", 135, 3) // North
setInterfaceText(player, "The River Lum lies to the south.", 135, 9) // South
setInterfaceText(player, "East to Al Kharid - toll gate; bring some money.", 135, 8) // East
setInterfaceText(player, "West to Lumbridge.", 135, 12) // West
openInterface(player, Components.AIDE_COMPASS_135)
} else if (node.asScenery().location.equals(Location(2983, 3278))) {
+ // Authentic
setInterfaceText(player, "North to the glorious White Knights' city of Falador.", 135, 3) // North
setInterfaceText(player, "South to Rimmington.", 135, 9) // South
setInterfaceText(player, "East to Port Sarim and Draynor Village.", 135, 8) // East
@@ -45,12 +48,14 @@ class SignpostListener : InteractionListener {
}
on(Scenery.SIGNPOST_24263, IntType.SCENERY, "read") { player, node ->
if (node.asScenery().location.equals(Location(3268, 3332))) {
+ // Authentic
setInterfaceText(player, "Sheep lay this way.", 135, 3) // North
setInterfaceText(player, "South through farms to Al Kharid and Lumbridge.", 135, 9) // South
setInterfaceText(player, "East to Al Kharid mine and follow the path north to Varrock east gate.", 135, 8) // East
setInterfaceText(player, "West to Champion's Guild and Varrock south gate.", 135, 12) // West
openInterface(player, Components.AIDE_COMPASS_135)
} else if (node.asScenery().location.equals(Location(3283, 3333))) {
+ // Authentic
setInterfaceText(player, "North to Varrock mine and Varrock east gate.", 135, 3) // North
setInterfaceText(player, "South to large Mining area and Al Kharid.", 135, 9) // South
setInterfaceText(player, "Follow the path east to the Dig Site.", 135, 8) // East
@@ -66,7 +71,13 @@ class SignpostListener : InteractionListener {
return@on true
}
on(Scenery.SIGNPOST_4132, IntType.SCENERY, "read") { player, node ->
- if (node.asScenery().location.equals(Location(3166, 3286))) {
+ if (node.asScenery().location.equals(Location(3223, 3427))) {
+ setInterfaceText(player, "North to Varrock Palace.", 135, 3) // North
+ setInterfaceText(player, "South to the Champion's Guild.", 135, 9) // South
+ setInterfaceText(player, "East to the Dig Site.", 135, 8) // East
+ setInterfaceText(player, "West to Barbarian Village and Falador.", 135, 12) // West
+ openInterface(player, Components.AIDE_COMPASS_135)
+ } else if (node.asScenery().location.equals(Location(3166, 3286))) {
setInterfaceText(player, "North to the windmill.", 135, 3) // North
setInterfaceText(player, "South to a fishing pond next to Fred's farm.", 135, 9) // South
setInterfaceText(player, "East to Lumbridge.", 135, 8) // East
@@ -133,6 +144,56 @@ class SignpostListener : InteractionListener {
}
return@on true
}
+ on(Scenery.SIGNPOST_4135, IntType.SCENERY, "read") { player, node ->
+ if (node.asScenery().location.equals(Location(3448, 3486))) {
+ setInterfaceText(player, "North to the Slayer Tower.", 135, 3) // North
+ setInterfaceText(player, "South to Mort Myre Swamp.", 135, 9) // South
+ setInterfaceText(player, "East to Canifis.", 135, 8) // East
+ setInterfaceText(player, "West to Varrock.", 135, 12) // West
+ openInterface(player, Components.AIDE_COMPASS_135)
+ } else {
+ setInterfaceText(player, "North to unknown.", 135, 3) // North
+ setInterfaceText(player, "South to unknown.", 135, 9) // South
+ setInterfaceText(player, "East to unknown.", 135, 8) // East
+ setInterfaceText(player, "West to unknown.", 135, 12) // West
+ openInterface(player, Components.AIDE_COMPASS_135)
+ }
+ return@on true
+ }
+ on(Scenery.SIGNPOST_31296, IntType.SCENERY, "read") { player, node ->
+ if (node.asScenery().location.equals(Location(3304, 3109))) {
+ // Authentic
+ setInterfaceText(player, "North to Al Kharid.", 135, 3) // North
+ setInterfaceText(player, "South to the Desert Mining Camp and Pollnivneach.", 135, 9) // South
+ setInterfaceText(player, "East and across the river to the Ruins of Uzer.", 135, 8) // East
+ setInterfaceText(player, "West to the Kalphite Lair.", 135, 12) // West
+ openInterface(player, Components.AIDE_COMPASS_135)
+ } else {
+ setInterfaceText(player, "North to unknown.", 135, 3) // North
+ setInterfaceText(player, "South to unknown.", 135, 9) // South
+ setInterfaceText(player, "East to unknown.", 135, 8) // East
+ setInterfaceText(player, "West to unknown.", 135, 12) // West
+ openInterface(player, Components.AIDE_COMPASS_135)
+ }
+ return@on true
+ }
+ on(Scenery.STONE_SIGNPOST_11630, IntType.SCENERY, "read") { player, node ->
+ // Authentic // https://youtu.be/vvHXKTOh_g4
+ if (node.asScenery().location.equals(Location(2967, 3412))) {
+ setInterfaceText(player, "North to Goblin Village.", 135, 3) // North
+ setInterfaceText(player, "South to Falador.", 135, 9) // South
+ setInterfaceText(player, "East to Varrock.", 135, 8) // East
+ setInterfaceText(player, "West to Taverley.", 135, 12) // West
+ openInterface(player, Components.AIDE_COMPASS_135)
+ } else {
+ setInterfaceText(player, "North to unknown.", 135, 3) // North
+ setInterfaceText(player, "South to unknown.", 135, 9) // South
+ setInterfaceText(player, "East to unknown.", 135, 8) // East
+ setInterfaceText(player, "West to unknown.", 135, 12) // West
+ openInterface(player, Components.AIDE_COMPASS_135)
+ }
+ return@on true
+ }
}
/**
* Old handlers of Signpost. Not all should be opening the AIDE_COMPASS.
diff --git a/Server/src/main/content/global/handlers/scenery/ThievingGuidePlugin.java b/Server/src/main/content/global/handlers/scenery/ThievingGuidePlugin.java
index 71efac4a5..4d306fc5e 100644
--- a/Server/src/main/content/global/handlers/scenery/ThievingGuidePlugin.java
+++ b/Server/src/main/content/global/handlers/scenery/ThievingGuidePlugin.java
@@ -81,24 +81,33 @@ public class ThievingGuidePlugin extends OptionHandler {
player.getDialogueInterpreter().sendDialogues(2266, null, "And where do you think you're going? A little too eager", "I think. Come and talk to me before you go wandering", "around in there.");
break;
case "crack":
- if (player.getSkills().getLevel(Skills.THIEVING) < 50) {
- player.getPacketDispatch().sendMessage("You need to be level " + level + " thief to crack this safe.");
- return true;
- }
- if (player.getInventory().freeSlots() == 0) {
- player.getPacketDispatch().sendMessage("Not enough inventory space.");
- return true;
- }
- final boolean success = success(player, Skills.THIEVING);
- player.lock(4);
- player.getPacketDispatch().sendMessage("You start cracking the safe.");
- player.animate(animations[success ? 1 : 0]);
+
GameWorld.getPulser().submit(new Pulse(3, player) {
@Override
public boolean pulse() {
+ if (player.getSkills().getLevel(Skills.THIEVING) < 50) {
+ player.getPacketDispatch().sendMessage("You need to be level " + level + " thief to crack this safe.");
+ return true;
+ }
+ if (player.getInventory().freeSlots() == 0) {
+ player.getPacketDispatch().sendMessage("Not enough inventory space.");
+ return true;
+ }
+ if (player.getSkills().getLifepoints() <= 6) {
+ player.getPacketDispatch().sendMessage("You're too injured to be dealing with traps right now.");
+ return true;
+ }
+ if (player.getLocation().getDistance(node.getLocation()) >= 1) {
+ return true;
+ }
+
+ final boolean success = success(player, Skills.THIEVING);
+ //player.lock(4);
+ player.getPacketDispatch().sendMessage("You start cracking the safe.");
+ player.animate(animations[success ? 1 : 0]);
if (success) {
handleSuccess(player, (Scenery) node);
- return true;
+ return false;
}
final boolean trapped = RandomFunction.random(3) == 1;
if (trapped) {
@@ -109,11 +118,12 @@ public class ThievingGuidePlugin extends OptionHandler {
@Override
public boolean pulse() {
player.animate(new Animation(-1, Priority.HIGH));
- return true;
+ return false;
}
});
}
- return true;
+
+ return false;
}
});
break;
diff --git a/Server/src/main/content/global/skill/agility/WildernessCourse.kt b/Server/src/main/content/global/skill/agility/WildernessCourse.kt
index ab6644421..00f08cf31 100644
--- a/Server/src/main/content/global/skill/agility/WildernessCourse.kt
+++ b/Server/src/main/content/global/skill/agility/WildernessCourse.kt
@@ -116,25 +116,19 @@ class WildernessCourse
when (counter++) {
0 -> {
AgilityHandler.forceWalk(player, -1, Location.create(x, 3937, 0), Location.create(x, 3940, 0), Animation.create(10580), 15, 0.0, null, 1) //10
- println("1")
player.teleporter.send(Location.create(3004, 3947, 0), TeleportManager.TeleportType.INSTANT, TeleportManager.WILDY_TELEPORT)
- println("tele")
counter++
AgilityHandler.forceWalk(player, 0, Location.create(x, 3948, 0), Location.create(x, 3950, 0), Animation.create(10579), 20, 12.5, null, 5) //20
- println("3")
return true
}
2 -> {
player.teleporter.send(Location.create(3004, 3947, 0), TeleportManager.TeleportType.INSTANT, TeleportManager.WILDY_TELEPORT)
- println("tele")
counter++
AgilityHandler.forceWalk(player, 0, Location.create(x, 3948, 0), Location.create(x, 3950, 0), Animation.create(10579), 20, 12.5, null, 5)
- println("3")
return true
}
3 -> {
AgilityHandler.forceWalk(player, 0, Location.create(x, 3948, 0), Location.create(x, 3950, 0), Animation.create(10579), 20, 12.5, null, 5)
- println("3")
return true
}
}
diff --git a/Server/src/main/content/global/skill/agility/shortcuts/BarSqueezeShortcut.java b/Server/src/main/content/global/skill/agility/shortcuts/BarSqueezeShortcut.java
index 2321706b1..efe0f727f 100644
--- a/Server/src/main/content/global/skill/agility/shortcuts/BarSqueezeShortcut.java
+++ b/Server/src/main/content/global/skill/agility/shortcuts/BarSqueezeShortcut.java
@@ -9,6 +9,7 @@ import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable;
import core.plugin.Plugin;
+import content.data.Quests;
/**
* Handles the bar squeezing shortcut.
@@ -61,7 +62,7 @@ public class BarSqueezeShortcut extends AgilityShortcut {
@Override
public boolean checkRequirements(Player player) {
- if (!player.getQuestRepository().isComplete("Priest in Peril") && !(player.getLocation().getY() >= 3159 && player.getLocation().getY() <= 3161)) {
+ if (!player.getQuestRepository().isComplete(Quests.PRIEST_IN_PERIL) && !(player.getLocation().getY() >= 3159 && player.getLocation().getY() <= 3161)) {
player.getDialogueInterpreter().sendDialogue("You need to have completed Priest in Peril in order to do this.");
return false;
}
diff --git a/Server/src/main/content/global/skill/agility/shortcuts/TunnelShortcut.java b/Server/src/main/content/global/skill/agility/shortcuts/TunnelShortcut.java
index 7388fde01..42cf77e34 100644
--- a/Server/src/main/content/global/skill/agility/shortcuts/TunnelShortcut.java
+++ b/Server/src/main/content/global/skill/agility/shortcuts/TunnelShortcut.java
@@ -15,6 +15,7 @@ import core.plugin.Initializable;
import core.plugin.Plugin;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
/**
* Handles a tunnel shortcut.
@@ -73,7 +74,7 @@ public class TunnelShortcut extends AgilityShortcut {
@Override
public void run(final Player player, Scenery object, String option, boolean failed) {
if (object.getId() == 14922) {
- if (!hasRequirement(player, "Swan Song"))
+ if (!hasRequirement(player, Quests.SWAN_SONG))
return;
}
player.lock(6);
diff --git a/Server/src/main/content/global/skill/construction/BuildHotspot.java b/Server/src/main/content/global/skill/construction/BuildHotspot.java
index 32a461b9f..c5ca6c8e7 100644
--- a/Server/src/main/content/global/skill/construction/BuildHotspot.java
+++ b/Server/src/main/content/global/skill/construction/BuildHotspot.java
@@ -59,7 +59,7 @@ public enum BuildHotspot {
DINING_BENCH_1(15300, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_MID_ANIM, Decoration.BENCH_WOODEN, Decoration.BENCH_OAK, Decoration.BENCH_CARVED_OAK, Decoration.BENCH_TEAK, Decoration.BENCH_CARVED_TEAK, Decoration.BENCH_MAHOGANY, Decoration.BENCH_GILDED),
DINING_BENCH_2(15299, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_MID_ANIM, Decoration.BENCH_WOODEN, Decoration.BENCH_OAK, Decoration.BENCH_CARVED_OAK, Decoration.BENCH_TEAK, Decoration.BENCH_CARVED_TEAK, Decoration.BENCH_MAHOGANY,Decoration.BENCH_GILDED),
ROPE_BELL_PULL(15304, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.ROPE_PULL, Decoration.BELL_PULL, Decoration.FANCY_BELL_PULL),
- WALL_DECORATION(15303, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.OAK_DECORATION, Decoration.TEAK_DECORATION, Decoration.GILDED_DECORATION),
+ WALL_DECORATION(15303, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.OAK_DECORATION, Decoration.TEAK_DECORATION, Decoration.GILDED_DECORATION),
/**
* Low-level Work shop hotspots.
@@ -67,11 +67,11 @@ public enum BuildHotspot {
REPAIR(15448, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.REPAIR_BENCH, Decoration.WHETSTONE, Decoration.ARMOUR_STAND),
WORKBENCH(15439, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.WORKBENCH_WOODEN, Decoration.WORKBENCH_OAK,Decoration.WORKBENCH_STEEL_FRAME, Decoration.WORKBENCH_WITH_VICE,Decoration.WORKBENCH_WITH_LATHE),
CRAFTING(15441, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.CRAFTING_TABLE_1, Decoration.CRAFTING_TABLE_2,Decoration.CRAFTING_TABLE_3, Decoration.CRAFTING_TABLE_4),
- TOOL1(15443, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2, Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4, Decoration.TOOL_STORE_5),
- TOOL2(15444, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2,Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4,Decoration.TOOL_STORE_5),
- TOOL3(15445, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2,Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4,Decoration.TOOL_STORE_5),
- TOOL4(15446, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2,Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4,Decoration.TOOL_STORE_5),
- TOOL5(15447, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2,Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4,Decoration.TOOL_STORE_5),
+ TOOL1(15443, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2, Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4, Decoration.TOOL_STORE_5),
+ TOOL2(15444, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2,Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4,Decoration.TOOL_STORE_5),
+ TOOL3(15445, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2,Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4,Decoration.TOOL_STORE_5),
+ TOOL4(15446, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2,Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4,Decoration.TOOL_STORE_5),
+ TOOL5(15447, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.TOOL_STORE_1, Decoration.TOOL_STORE_2,Decoration.TOOL_STORE_3, Decoration.TOOL_STORE_4,Decoration.TOOL_STORE_5),
HERALDRY(15450, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.PLUMING_STAND, Decoration.SHIELD_EASEL,Decoration.BANNER_EASEL),
/**
@@ -188,20 +188,10 @@ public enum BuildHotspot {
MAP(15396, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.SMALL_MAP, Decoration.MEDIUM_MAP, Decoration.LARGE_MAP),
BOOKCASE2(15397, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.WOODEN_BOOKCASE, Decoration.OAK_BOOKCASE, Decoration.MAHOGANY_BOOKCASE),
- /**
- * Manegerie Hotspots
- */
- OBELISK(44911, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.MINI_OBELISK),
- PET_FEEDER(44910, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.OAK_PET_FEEDER, Decoration.TEAK_PET_FEEDER, Decoration.MAHOGANY_PET_FEEDER),
- PET_HOUSE(44909, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.OAK_PET_HOUSE, Decoration.TEAK_PET_HOUSE, Decoration.MAHOGANY_PET_HOUSE, Decoration.CONSECRATED_PET_HOUSE, Decoration.DESECRATED_PET_HOUSE, Decoration.NATURAL_PET_HOUSE),
- HABITAT_1(44907, BuildHotspotType.LINKED, BuildingUtils.BUILD_MID_ANIM, Decoration.GARDEN_HABITAT, Decoration.JUNGLE_HABITAT, Decoration.DESERT_HABITAT, Decoration.POLAR_HABITAT, Decoration.VOLCANIC_HABITAT),
- HABITAT_2(44908, BuildHotspotType.LINKED, BuildingUtils.BUILD_MID_ANIM, Decoration.GARDEN_HABITAT, Decoration.JUNGLE_HABITAT, Decoration.DESERT_HABITAT, Decoration.POLAR_HABITAT, Decoration.VOLCANIC_HABITAT),
-
-
/**
* Combat room hotspots.
*/
- WALL_DECORATION2(15297, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.OAK_DECORATION, Decoration.TEAK_DECORATION, Decoration.GILDED_DECORATION),
+ WALL_DECORATION2(15297, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.OAK_DECORATION, Decoration.TEAK_DECORATION, Decoration.GILDED_DECORATION),
STORAGE_SPACE(15296, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.GLOVE_RACK, Decoration.WEAPONS_RACK, Decoration.EXTRA_WEAPONS_RACK),
CR_RING(15277, BuildHotspotType.LINKED, BuildingUtils.BUILD_MID_ANIM, Decoration.BOXING_RING, Decoration.FENCING_RING, Decoration.COMBAT_RING, Decoration.NOTHING, Decoration.NOTHING2),
CR_CORNER(15278, BuildHotspotType.LINKED, BuildingUtils.BUILD_MID_ANIM, Decoration.BOXING_RING, Decoration.FENCING_RING, Decoration.COMBAT_RING, Decoration.NOTHING, Decoration.NOTHING2),
@@ -238,7 +228,7 @@ public enum BuildHotspot {
LECTERN(15420, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.OAK_LECTERN, Decoration.EAGLE_LECTERN, Decoration.DEMON_LECTERN, Decoration.TEAK_EAGLE_LECTERN, Decoration.TEAK_DEMON_LECTERN, Decoration.MAHOGANY_EAGLE_LECTERN, Decoration.MAHOGANY_DEMON_LECTERN),
CRYSTAL_BALL(15422, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.CRYSTAL_BALL, Decoration.ELEMENTAL_SPHERE, Decoration.CRYSTAL_OF_POWER),
BOOKCASE3(15425, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.WOODEN_BOOKCASE, Decoration.OAK_BOOKCASE, Decoration.MAHOGANY_BOOKCASE),
- WALL_CHART(15423, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_HIGH_ANIM, Decoration.ALCHEMICAL_CHART, Decoration.ASTRONOMICAL_CHART, Decoration.INFERNAL_CHART),
+ WALL_CHART(15423, BuildHotspotType.RECURSIVE, BuildingUtils.BUILD_HIGH_ANIM, Decoration.ALCHEMICAL_CHART, Decoration.ASTRONOMICAL_CHART, Decoration.INFERNAL_CHART),
TELESCOPE(15424, BuildHotspotType.INDIVIDUAL, BuildingUtils.BUILD_MID_ANIM, Decoration.TELESCOPE1, Decoration.TELESCOPE2, Decoration.TELESCOPE3),
/**
@@ -394,7 +384,6 @@ public enum BuildHotspot {
linkedHotspots.add(new BuildHotspot[] { PRISON, PRISON_DOOR });
linkedHotspots.add(new BuildHotspot[] { DUNGEON_DOOR_LEFT, DUNGEON_DOOR_RIGHT });
linkedHotspots.add(new BuildHotspot[] { DUNGEON_DOOR_LEFT2, DUNGEON_DOOR_RIGHT2 });
- linkedHotspots.add(new BuildHotspot[] { HABITAT_1, HABITAT_2 });
linkedHotspots.add(new BuildHotspot[] { SMALL_PLANT_1, SMALL_PLANT1 });
linkedHotspots.add(new BuildHotspot[] { SHELVES, SHELVES_2 });
}
diff --git a/Server/src/main/content/global/skill/construction/BuildingUtils.java b/Server/src/main/content/global/skill/construction/BuildingUtils.java
index 424e5aa94..02bfbd9c2 100644
--- a/Server/src/main/content/global/skill/construction/BuildingUtils.java
+++ b/Server/src/main/content/global/skill/construction/BuildingUtils.java
@@ -349,7 +349,7 @@ public final class BuildingUtils {
*/
public static void removeDecoration(Player player, Scenery object) {
if (object.getId() == Decoration.PORTAL.getObjectId() && player.getHouseManager().getPortalAmount() <= 1) {
- player.getPacketDispatch().sendMessage("You need atleast one portal, how else would you leave your house?");
+ sendMessage(player, "You need at least one portal, how else would you leave your house?");
return;
}
Location l = object.getLocation();
@@ -369,6 +369,10 @@ public final class BuildingUtils {
if (objectId == object.getId() && hotspot.getCurrentX() == l.getChunkOffsetX() && hotspot.getCurrentY() == l.getChunkOffsetY()) {
player.animate(REMOVE_ANIMATION);
removeDecoration(player, region, room, hotspot, object, style);
+ Decoration decoration = Decoration.forObjectId(object.getId());
+ for (Item item : decoration.getRefundItems()) {
+ addItemOrDrop(player, item.getId(), item.getAmount());
+ }
break;
}
}
diff --git a/Server/src/main/content/global/skill/construction/CrestType.java b/Server/src/main/content/global/skill/construction/CrestType.java
index f54466772..277c77231 100644
--- a/Server/src/main/content/global/skill/construction/CrestType.java
+++ b/Server/src/main/content/global/skill/construction/CrestType.java
@@ -3,6 +3,7 @@ package content.global.skill.construction;
import core.game.node.entity.player.Player;
import org.rs09.consts.Items;
import core.game.node.entity.skill.Skills;
+import content.data.Quests;
/**
* Family crest types.
@@ -16,7 +17,7 @@ public enum CrestType implements CrestRequirement {
@Override
public boolean eligible(Player player) {
- return player.getQuestRepository().isComplete("Shield of Arrav");
+ return player.getQuestRepository().isComplete(Quests.SHIELD_OF_ARRAV);
}
},
ASGARNIA("the symbol of Asgarnia"), // no requirements
@@ -24,21 +25,21 @@ public enum CrestType implements CrestRequirement {
@Override
public boolean eligible(Player player) {
- return player.getQuestRepository().isComplete("The Lost Tribe");
+ return player.getQuestRepository().isComplete(Quests.THE_LOST_TRIBE);
}
},
DRAGON("a dragon") { // requires Dragon Slayer
@Override
public boolean eligible(Player player) {
- return player.getQuestRepository().isComplete("Dragon Slayer");
+ return player.getQuestRepository().isComplete(Quests.DRAGON_SLAYER);
}
},
FAIRY("a fairy") { // requries Lost City
@Override
public boolean eligible(Player player) {
- return player.getQuestRepository().isComplete("Lost City");
+ return player.getQuestRepository().isComplete(Quests.LOST_CITY);
}
},
GUTHIX("the symbol of Guthix") { // Requires 70+ Prayer
diff --git a/Server/src/main/content/global/skill/construction/Decoration.java b/Server/src/main/content/global/skill/construction/Decoration.java
index 058de5a8b..95ad2c9b3 100644
--- a/Server/src/main/content/global/skill/construction/Decoration.java
+++ b/Server/src/main/content/global/skill/construction/Decoration.java
@@ -1,6 +1,4 @@
package content.global.skill.construction;
-
-
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.game.node.scenery.Scenery;
@@ -9,1071 +7,690 @@ import org.rs09.consts.Items;
/**
* Represents the decorations.
- * @author Emperor
+ * @author Emperor, Player Name
*
*/
public enum Decoration {
-
/**
* Garden centrepiece decorations.
*/
- PORTAL(13405, 8168, 1, 100.0, new Item(Items.IRON_BAR_2351, 10)),
- ROCK(13406, 8169, 5, 100.0, new Item(Items.LIMESTONE_BRICK_3420, 5)),
- POND(13407, 8170, 10, 100.0, new Item(Items.SOFT_CLAY_1761, 10)),
- IMP_STATUE(13408, 8171, 15, 150.0, new Item(Items.LIMESTONE_BRICK_3420, 5), new Item(Items.SOFT_CLAY_1761, 5)),
- SMALL_OBELISK(42004, 14657, 41, 676, new Item(Items.MARBLE_BLOCK_8786, 1), new Item(Items.SPIRIT_SHARDS_12183, 1000), new Item(Items.CRIMSON_CHARM_12160, 10), new Item(Items.BLUE_CHARM_12163, 10)),
- DUNGEON_ENTRANCE(13409, 8172, 70, 500.0, new Item(Items.MARBLE_BLOCK_8786)),
+ PORTAL (13405, 8168, 1, 100, new Item[] { new Item(Items.IRON_BAR_2351, 10) }),
+ ROCK (13406, 8169, 5, 100, new Item[] { new Item(Items.LIMESTONE_BRICK_3420, 5) }),
+ POND (13407, 8170, 10, 100, new Item[] { new Item(Items.SOFT_CLAY_1761, 10) }),
+ IMP_STATUE (13408, 8171, 15, 150, new Item[] { new Item(Items.LIMESTONE_BRICK_3420, 5), new Item(Items.SOFT_CLAY_1761, 5) }),
+ SMALL_OBELISK (42004, 14657, 41, 676, new Item[] { new Item(Items.MARBLE_BLOCK_8786), new Item(Items.SPIRIT_SHARDS_12183, 1000), new Item(Items.CRIMSON_CHARM_12160, 10), new Item(Items.BLUE_CHARM_12163, 10) }),
+ DUNGEON_ENTRANCE(13409, 8172, 70, 500, new Item[] { new Item(Items.MARBLE_BLOCK_8786) }),
-
/**
* Garden big tree decorations.
*/
- BIG_DEAD_TREE(13411, 8173, 5, 31.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_DEAD_TREE_8417)),
- BIG_TREE(13412, 8174, 10, 44.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_NICE_TREE_8419)),
- BIG_OAK_TREE(13413, 8175, 15, 70.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_OAK_TREE_8421)),
- BIG_WILLOW_TREE(13414, 8176, 30, 100.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_WILLOW_TREE_8423)),
- BIG_MAPLE_TREE(13415, 8177, 45, 122.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_MAPLE_TREE_8425)),
- BIG_YEW_TREE(13416, 8178, 60, 141.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_YEW_TREE_8427)),
- BIG_MAGIC_TREE(13417, 8179, 75, 223.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_MAGIC_TREE_8429)),
-
+ BIG_DEAD_TREE (13411, 8173, 5, 31, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_DEAD_TREE_8417) }),
+ BIG_TREE (13412, 8174, 10, 44, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_NICE_TREE_8419) }),
+ BIG_OAK_TREE (13413, 8175, 15, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_OAK_TREE_8421) }),
+ BIG_WILLOW_TREE(13414, 8176, 30, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_WILLOW_TREE_8423) }),
+ BIG_MAPLE_TREE (13415, 8177, 45, 122, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_MAPLE_TREE_8425) }),
+ BIG_YEW_TREE (13416, 8178, 60, 141, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_YEW_TREE_8427) }),
+ BIG_MAGIC_TREE (13417, 8179, 75, 223, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_MAGIC_TREE_8429) }),
+
/**
* Garden tree decorations.
*/
- DEAD_TREE(13418, 8173, 5, 31.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_DEAD_TREE_8417)),
- TREE(13419, 8174, 10, 44.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_NICE_TREE_8419)),
- OAK_TREE(13420, 8175, 15, 70.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_OAK_TREE_8421)),
- WILLOW_TREE(13421, 8176, 30, 100.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_WILLOW_TREE_8423)),
- MAPLE_TREE(13423, 8177, 45, 122.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_MAPLE_TREE_8425)),
- YEW_TREE(13422, 8178, 60, 141.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_YEW_TREE_8427)),
- MAGIC_TREE(13424, 8179, 75, 223.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_MAGIC_TREE_8429)),
-
+ DEAD_TREE (13418, 8173, 5, 31, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_DEAD_TREE_8417) }),
+ TREE (13419, 8174, 10, 44, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_NICE_TREE_8419) }),
+ OAK_TREE (13420, 8175, 15, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_OAK_TREE_8421) }),
+ WILLOW_TREE(13421, 8176, 30, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_WILLOW_TREE_8423) }),
+ MAPLE_TREE (13423, 8177, 45, 122, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_MAPLE_TREE_8425) }),
+ YEW_TREE (13422, 8178, 60, 141, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_YEW_TREE_8427) }),
+ MAGIC_TREE (13424, 8179, 75, 223, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_MAGIC_TREE_8429) }),
+
/**
* Garden big plant 1 decorations.
*/
- FERN(13425, 8186, 1, 31.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_1_8431)),
- BUSH(13426, 8187, 6, 70.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_2_8433)),
- TALL_PLANT(13427, 8188, 12, 100.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_3_8435)),
-
+ FERN (13425, 8186, 1, 31, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_1_8431) }),
+ BUSH (13426, 8187, 6, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_2_8433) }),
+ TALL_PLANT(13427, 8188, 12, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_3_8435) }),
+
/**
* Garden big plant 2 decorations.
*/
- SHORT_PLANT(13428, 8189, 1, 31.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_1_8431)),
- LARGE_LEAF_PLANT(13429, 8190, 6, 70.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_2_8433)),
- HUGE_PLANT(13430, 8191, 12, 100.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_3_8435)),
+ SHORT_PLANT (13428, 8189, 1, 31, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_1_8431) }),
+ LARGE_LEAF_PLANT(13429, 8190, 6, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_2_8433) }),
+ HUGE_PLANT (13430, 8191, 12, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_3_8435) }),
/**
* Garden small plant 1 decorations.
*/
- PLANT(13431, 8180, 1, 31.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_1_8431)),
- SMALL_FERN(13432, 8181, 6, 70.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_2_8433)),
- FERN_SP(13433, 8182, 12, 100.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_3_8435)),
+ PLANT (13431, 8180, 1, 31, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_1_8431) }),
+ SMALL_FERN(13432, 8181, 6, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_2_8433) }),
+ FERN_SP (13433, 8182, 12, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_3_8435) }),
/**
* Garden small plant 2 decorations.
*/
- DOCK_LEAF(13434, 8183, 1, 31.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_1_8431)),
- THISTLE(13435, 8184, 6, 70.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_2_8433)),
- REEDS(13436, 8185, 12, 100.0, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_PLANT_3_8435)),
-
+ DOCK_LEAF(13434, 8183, 1, 31, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_1_8431) }),
+ THISTLE (13435, 8184, 6, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_2_8433) }),
+ REEDS (13436, 8185, 12, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_PLANT_3_8435) }),
+
/**
* Parlour chair spot
*/
- CRUDE_CHAIR(13581, 8309, 1, 66.0, new Item(Items.PLANK_960, 2)),
- WOODEN_CHAIR(13582, 8310, 8, 96.0, new Item(Items.PLANK_960, 3)),
- ROCKING_CHAIR(13583, 8311, 14, 96.0, new Item(Items.PLANK_960, 3)),
- OAK_CHAIR(13584, 8312, 19, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- OAK_ARMCHAIR(13585, 8313, 26, 180.0, new Item(Items.OAK_PLANK_8778, 3)),
- TEAK_ARMCHAIR(13586, 8314, 35, 180.0, new Item(Items.TEAK_PLANK_8780, 2)),
- MAHOGANY_ARMCHAIR(13587, 8315, 50, 280.0, new Item(Items.MAHOGANY_PLANK_8782, 2)),
+ CRUDE_CHAIR (13581, 8309, 1, 58, new Item[] { new Item(Items.PLANK_960, 2) }),
+ WOODEN_CHAIR (13582, 8310, 8, 87, new Item[] { new Item(Items.PLANK_960, 3) }),
+ ROCKING_CHAIR (13583, 8311, 14, 87, new Item[] { new Item(Items.PLANK_960, 3) }),
+ OAK_CHAIR (13584, 8312, 19, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ OAK_ARMCHAIR (13585, 8313, 26, 180, new Item[] { new Item(Items.OAK_PLANK_8778, 3) }),
+ TEAK_ARMCHAIR (13586, 8314, 35, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ MAHOGANY_ARMCHAIR(13587, 8315, 50, 280, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2) }),
/**
* Rugs rugs rugs
*/
- BROWN_RUG_CORNER(13588, 8316, 2, 30.0, new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- RED_RUG_CORNER(13591, 8317, 13, 60.0, new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- OPULENT_RUG_CORNER(13594, 8318, 65, 360.0, new Item(Items.BOLT_OF_CLOTH_8790, 4), new Item(Items.GOLD_LEAF_8784, 1)),
-
- BROWN_RUG_END(13589, 8316, 2, 30.0, new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- RED_RUG_END(13592, 8317, 13, 60.0, new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- OPULENT_RUG_END(13595, 8318, 65, 360.0, new Item(Items.BOLT_OF_CLOTH_8790, 4), new Item(Items.GOLD_LEAF_8784, 1)),
-
- BROWN_RUG_CENTER(13590, 8316, 2, 30.0, new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- RED_RUG_CENTER(13593, 8317, 13, 60.0, new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- OPULENT_RUG_CENTER(13596, 8318, 65, 360.0, new Item(Items.BOLT_OF_CLOTH_8790, 4), new Item(Items.GOLD_LEAF_8784, 1)),
+ BROWN_RUG_CORNER (13588, 8316, 2, 30, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ RED_RUG_CORNER (13591, 8317, 13, 60, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ OPULENT_RUG_CORNER(13594, 8318, 65, 360, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 4), new Item(Items.GOLD_LEAF_8784) }),
+ BROWN_RUG_END (13589, 8316, 2, 30, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ RED_RUG_END (13592, 8317, 13, 60, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ OPULENT_RUG_END (13595, 8318, 65, 360, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 4), new Item(Items.GOLD_LEAF_8784) }),
+ BROWN_RUG_CENTER (13590, 8316, 2, 30, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ RED_RUG_CENTER (13593, 8317, 13, 60, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ OPULENT_RUG_CENTER(13596, 8318, 65, 360, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 4), new Item(Items.GOLD_LEAF_8784) }),
/**
* Parlour fireplaces
*/
- CLAY_FIREPLACE(13609, 8325, 3, 30.0, new Item(Items.SOFT_CLAY_1761, 3)),
- STONE_FIREPLACE(13611, 8326, 33, 40.0, new Item(Items.LIMESTONE_BRICK_3420, 2)),
- MARBLE_FIREPLACE(13613, 8327, 63, 500.0, new Item(Items.MARBLE_BLOCK_8786, 1)),
+ CLAY_FIREPLACE (13609, 8325, 3, 30, new Item[] { new Item(Items.SOFT_CLAY_1761, 3) }),
+ STONE_FIREPLACE (13611, 8326, 33, 40, new Item[] { new Item(Items.LIMESTONE_BRICK_3420, 2) }),
+ MARBLE_FIREPLACE(13613, 8327, 63, 500, new Item[] { new Item(Items.MARBLE_BLOCK_8786) }),
/**
* Parlour curtain spot
*/
- TORN_CURTAINS(13603, 8322, 2, 132.0, new Item(Items.PLANK_960, 3), new Item(Items.BOLT_OF_CLOTH_8790, 3)),
- CURTAINS(13604, 8323, 18, 225.0, new Item(Items.OAK_PLANK_8778, 3), new Item(Items.BOLT_OF_CLOTH_8790, 3)),
- OPULENT_CURTAINS(13605, 8324, 40, 315.0, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.BOLT_OF_CLOTH_8790, 3)),
+ TORN_CURTAINS (13603, 8322, 2, 132, new Item[] { new Item(Items.PLANK_960, 3), new Item(Items.BOLT_OF_CLOTH_8790, 3) }),
+ CURTAINS (13604, 8323, 18, 225, new Item[] { new Item(Items.OAK_PLANK_8778, 3), new Item(Items.BOLT_OF_CLOTH_8790, 3) }),
+ OPULENT_CURTAINS(13605, 8324, 40, 315, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.BOLT_OF_CLOTH_8790, 3) }),
/**
- * Parlour bookcases
+ * Bookcases
*/
- WOODEN_BOOKCASE(13597, 8319, 4, 132.0, new Item(Items.PLANK_960, 4)),
- OAK_BOOKCASE(13598, 8320, 29, 225.0, new Item(Items.OAK_PLANK_8778, 3)),
- MAHOGANY_BOOKCASE(13599, 8321, 40, 315.0, new Item(Items.MAHOGANY_PLANK_8782, 3)),
+ WOODEN_BOOKCASE (13597, 8319, 4, 115, new Item[] { new Item(Items.PLANK_960, 4) }),
+ OAK_BOOKCASE (13598, 8320, 29, 180, new Item[] { new Item(Items.OAK_PLANK_8778, 3) }),
+ MAHOGANY_BOOKCASE(13599, 8321, 40, 420, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3) }),
-
/**
* Kitchen Beer Barrels
* TODO: These also require cooking levels!
* Basic: 1, Cider: 14, Asgarnian: 24, Greenman's: 29, D.Bitter: 39, Chef's: 54
*
*/
- BASIC_BEER_BARREL(13568, 8239, 7, 87.0, new Item(Items.PLANK_960, 3)),
- CIDER_BARREL(13569, 8240, 12, 91.0, new Item(Items.PLANK_960, 3), new Item(Items.CIDER_5763, 8)),
- ASGARNIAN_ALE_BARREL(13570, 8241, 18, 184.0, new Item(Items.OAK_PLANK_8778, 3), new Item(Items.ASGARNIAN_ALE_1905, 8)),
- GREENMANS_ALE_BARREL(13571, 8242, 26, 184.0, new Item(Items.OAK_PLANK_8778, 3), new Item(Items.GREENMANS_ALE_1909, 8)),
- DRAGON_BITTER_BARREL(13572, 8243, 36, 224.0, new Item(Items.OAK_PLANK_8778, 3), new Item(Items.DRAGON_BITTER_1911, 8), new Item(Items.STEEL_BAR_2353, 2)),
- CHEFS_DELIGHT_BARREL(13573, 8244, 48, 224.0, new Item(Items.OAK_PLANK_8778, 3), new Item(Items.CHEFS_DELIGHT_5755, 8), new Item(Items.STEEL_BAR_2353, 2)),
-
-
+ BASIC_BEER_BARREL (13568, 8239, 7, 87, new Item[] { new Item(Items.PLANK_960, 3) }),
+ CIDER_BARREL (13569, 8240, 12, 91, new Item[] { new Item(Items.PLANK_960, 3), new Item(Items.CIDER_5763, 8) }),
+ ASGARNIAN_ALE_BARREL(13570, 8241, 18, 184, new Item[] { new Item(Items.OAK_PLANK_8778, 3), new Item(Items.ASGARNIAN_ALE_1905, 8) }),
+ GREENMANS_ALE_BARREL(13571, 8242, 26, 184, new Item[] { new Item(Items.OAK_PLANK_8778, 3), new Item(Items.GREENMANS_ALE_1909, 8) }),
+ DRAGON_BITTER_BARREL(13572, 8243, 36, 224, new Item[] { new Item(Items.OAK_PLANK_8778, 3), new Item(Items.DRAGON_BITTER_1911, 8), new Item(Items.STEEL_BAR_2353, 2) }),
+ CHEFS_DELIGHT_BARREL(13573, 8244, 48, 224, new Item[] { new Item(Items.OAK_PLANK_8778, 3), new Item(Items.CHEFS_DELIGHT_5755, 8), new Item(Items.STEEL_BAR_2353, 2) }),
+
/**
* Kitchen Tables!
*/
- KITCHEN_WOODEN_TABLE(13577, 8246, 12, 87.0, new Item(Items.PLANK_960, 3)),
- KITCHEN_OAK_TABLE(13578, 8247, 32, 180.0, new Item(Items.OAK_PLANK_8778, 3)),
- KITCHEN_TEAK_TABLE(13579, 8248, 52, 270.0, new Item(Items.TEAK_PLANK_8780, 3)),
-
-
+ KITCHEN_WOODEN_TABLE(13577, 8246, 12, 87, new Item[] { new Item(Items.PLANK_960, 3) }),
+ KITCHEN_OAK_TABLE (13578, 8247, 32, 180, new Item[] { new Item(Items.OAK_PLANK_8778, 3) }),
+ KITCHEN_TEAK_TABLE (13579, 8248, 52, 270, new Item[] { new Item(Items.TEAK_PLANK_8780, 3) }),
+
/**
* Kitchen Stoves
*/
- BASIC_FIREPIT(13528, 8216, 5, 40.0, new Item(Items.SOFT_CLAY_1761, 2), new Item(Items.STEEL_BAR_2353, 1)),
- FIREPIT_WITH_HOOK(13529, 8217, 11, 60.0, new Item(Items.SOFT_CLAY_1761, 2), new Item(Items.STEEL_BAR_2353, 2)),
- FIREPIT_WITH_POT(13531, 8218, 17, 80.0, new Item(Items.SOFT_CLAY_1761, 2), new Item(Items.STEEL_BAR_2353, 3)),
- SMALL_OVEN(13533, 8219, 24, 80.0, new Item(Items.STEEL_BAR_2353, 4)),
- LARGE_OVEN(13536, 8220, 29, 100.0, new Item(Items.STEEL_BAR_2353, 5)),
- BASIC_RANGE(13539, 8221, 34, 120.0, new Item(Items.STEEL_BAR_2353, 6)),
- FANCY_RANGE(13542, 8222, 42, 160.0, new Item(Items.STEEL_BAR_2353, 8)),
-
+ BASIC_FIREPIT (13528, 8216, 5, 40, new Item[] { new Item(Items.SOFT_CLAY_1761, 2), new Item(Items.STEEL_BAR_2353) }),
+ FIREPIT_WITH_HOOK(13529, 8217, 11, 60, new Item[] { new Item(Items.SOFT_CLAY_1761, 2), new Item(Items.STEEL_BAR_2353, 2) }),
+ FIREPIT_WITH_POT (13531, 8218, 17, 80, new Item[] { new Item(Items.SOFT_CLAY_1761, 2), new Item(Items.STEEL_BAR_2353, 3) }),
+ SMALL_OVEN (13533, 8219, 24, 80, new Item[] { new Item(Items.STEEL_BAR_2353, 4) }),
+ LARGE_OVEN (13536, 8220, 29, 100, new Item[] { new Item(Items.STEEL_BAR_2353, 5) }),
+ BASIC_RANGE (13539, 8221, 34, 120, new Item[] { new Item(Items.STEEL_BAR_2353, 6) }),
+ FANCY_RANGE (13542, 8222, 42, 160, new Item[] { new Item(Items.STEEL_BAR_2353, 8) }),
+
/**
* Kitchen larders
*/
- WOODEN_LARDER(13565, 8233, 9, 228.0, new Item(Items.PLANK_960, 8)),
- OAK_LARDER(13566, 8234, 33, 480.0, new Item(Items.OAK_PLANK_8778, 8)),
- TEAK_LARDER(13567, 8235, 43, 750.0, new Item(Items.TEAK_PLANK_8780, 8), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
-
-
+ WOODEN_LARDER(13565, 8233, 9, 228, new Item[] { new Item(Items.PLANK_960, 8) }),
+ OAK_LARDER (13566, 8234, 33, 480, new Item[] { new Item(Items.OAK_PLANK_8778, 8) }),
+ TEAK_LARDER (13567, 8235, 43, 750, new Item[] { new Item(Items.TEAK_PLANK_8780, 8), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+
/**
* Kitchen shelves
*/
- WOODEN_SHELVES_1(13545, 8223, 6, 87.0, new Item(Items.PLANK_960, 3)),
- WOODEN_SHELVES_2(13546, 8224, 12, 147.0, new Item(Items.PLANK_960, 3), new Item(Items.SOFT_CLAY_1761, 6)),
- WOODEN_SHELVES_3(13547, 8225, 23, 147.0, new Item(Items.PLANK_960, 3), new Item(Items.SOFT_CLAY_1761, 6)),
- OAK_SHELVES_1(13548, 8226, 34, 240.0, new Item(Items.OAK_PLANK_8778, 3), new Item(Items.SOFT_CLAY_1761, 6)),
- OAK_SHELVES_2(13549, 8227, 45, 240.0, new Item(Items.OAK_PLANK_8778, 3), new Item(Items.SOFT_CLAY_1761, 6)),
- TEAK_SHELVES_1(13550, 8228, 56, 330.0, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.SOFT_CLAY_1761, 6)),
- TEAK_SHELVES_2(13551, 8229, 67, 930.0, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.SOFT_CLAY_1761, 6), new Item(Items.GOLD_LEAF_8784, 2)),
-
+ WOODEN_SHELVES_1(13545, 8223, 6, 87, new Item[] { new Item(Items.PLANK_960, 3) }),
+ WOODEN_SHELVES_2(13546, 8224, 12, 147, new Item[] { new Item(Items.PLANK_960, 3), new Item(Items.SOFT_CLAY_1761, 6) }),
+ WOODEN_SHELVES_3(13547, 8225, 23, 147, new Item[] { new Item(Items.PLANK_960, 3), new Item(Items.SOFT_CLAY_1761, 6) }),
+ OAK_SHELVES_1 (13548, 8226, 34, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 3), new Item(Items.SOFT_CLAY_1761, 6) }),
+ OAK_SHELVES_2 (13549, 8227, 45, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 3), new Item(Items.SOFT_CLAY_1761, 6) }),
+ TEAK_SHELVES_1 (13550, 8228, 56, 330, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.SOFT_CLAY_1761, 6) }),
+ TEAK_SHELVES_2 (13551, 8229, 67, 930, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.SOFT_CLAY_1761, 6), new Item(Items.GOLD_LEAF_8784, 2) }),
+
/**
* Kitchen sinks
*/
- PUMP_AND_DRAIN(13559, 8230, 7, 100.0, new Item(Items.STEEL_BAR_2353, 5)),
- PUMP_AND_TUB(13561, 8231, 27, 200.0, new Item(Items.STEEL_BAR_2353, 10)),
- SINK(13563, 8232, 47, 300.0, new Item(Items.STEEL_BAR_2353, 15)),
-
-
+ PUMP_AND_DRAIN(13559, 8230, 7, 100, new Item[] { new Item(Items.STEEL_BAR_2353, 5) }),
+ PUMP_AND_TUB (13561, 8231, 27, 200, new Item[] { new Item(Items.STEEL_BAR_2353, 10) }),
+ SINK (13563, 8232, 47, 300, new Item[] { new Item(Items.STEEL_BAR_2353, 15) }),
+
/**
* Kitchen cat baskets/blankets
*/
- CAT_BLANKET(13574, 8236, 5, 15.0, new Item(Items.BOLT_OF_CLOTH_8790, 1)),
- CAT_BASKET(13575, 8237, 19, 58.0, new Item(Items.PLANK_960, 2)),
- CAST_BASKET_CUSHIONED(13576, 8238, 33, 58.0, new Item(Items.PLANK_960, 2), new Item(Items.WOOL_1737, 2)),
-
-
+ CAT_BLANKET (13574, 8236, 5, 15, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790) }),
+ CAT_BASKET (13575, 8237, 19, 58, new Item[] { new Item(Items.PLANK_960, 2) }),
+ CAST_BASKET_CUSHIONED(13576, 8238, 33, 58, new Item[] { new Item(Items.PLANK_960, 2), new Item(Items.WOOL_1737, 2) }),
+
/**
* Dining room tables
*/
- DINING_TABLE_WOOD(13293, 8246, 10, 115.0, new Item(Items.PLANK_960, 4)),
- DINING_TABLE_OAK(13294, 8247, 22, 240.0, new Item(Items.OAK_PLANK_8778, 4)),
- DINING_TABLE_CARVED_OAK(13295, 8247, 31, 360.0, new Item(Items.OAK_PLANK_8778, 6)),
- DINING_TABLE_TEAK(13296, 8248, 38, 360.0, new Item(Items.TEAK_PLANK_8780, 4)),
- DINING_TABLE_CARVED_TEAK(13297, 8248, 45, 600.0, new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- DINING_TABLE_MAHOGANY(13298, 8120, 52, 840.0, new Item(Items.MAHOGANY_PLANK_8782, 6)),
- DINING_TABLE_OPULENT(13299, 8121, 72, 3100.0, new Item(Items.MAHOGANY_PLANK_8782, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4),
- new Item(Items.GOLD_LEAF_8784, 4), new Item(Items.MARBLE_BLOCK_8786, 2)),
-
+ DINING_TABLE_WOOD (13293, 8246, 10, 115, new Item[] { new Item(Items.PLANK_960, 4) }),
+ DINING_TABLE_OAK (13294, 8247, 22, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 4) }),
+ DINING_TABLE_CARVED_OAK (13295, 8247, 31, 360, new Item[] { new Item(Items.OAK_PLANK_8778, 6) }),
+ DINING_TABLE_TEAK (13296, 8248, 38, 360, new Item[] { new Item(Items.TEAK_PLANK_8780, 4) }),
+ DINING_TABLE_CARVED_TEAK(13297, 8248, 45, 600, new Item[] { new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ DINING_TABLE_MAHOGANY (13298, 8120, 52, 840, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 6) }),
+ DINING_TABLE_OPULENT (13299, 8121, 72, 3100, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4), new Item(Items.GOLD_LEAF_8784, 4), new Item(Items.MARBLE_BLOCK_8786, 2) }),
/**
* Dining room benches
*/
- BENCH_WOODEN(13300, 8108, 10, 115.0, new Item(Items.PLANK_960, 4)),
- BENCH_OAK(13301, 8109, 22, 240.0, new Item(Items.OAK_PLANK_8778, 4)),
- BENCH_CARVED_OAK(13302, 8110, 31, 240.0, new Item(Items.OAK_PLANK_8778, 4)),
- BENCH_TEAK(13303, 8111, 38, 360.0, new Item(Items.TEAK_PLANK_8780, 4)),
- BENCH_CARVED_TEAK(13304, 8112, 44, 360.0, new Item(Items.TEAK_PLANK_8780, 4)),
- BENCH_MAHOGANY(13305, 8113, 52, 560.0, new Item(Items.MAHOGANY_PLANK_8782, 6)),
- BENCH_GILDED(13306, 8114, 61, 1760.0, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 4)),
-
+ BENCH_WOODEN (13300, 8108, 10, 115, new Item[] { new Item(Items.PLANK_960, 4) }),
+ BENCH_OAK (13301, 8109, 22, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 4) }),
+ BENCH_CARVED_OAK (13302, 8110, 31, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 4) }),
+ BENCH_TEAK (13303, 8111, 38, 360, new Item[] { new Item(Items.TEAK_PLANK_8780, 4) }),
+ BENCH_CARVED_TEAK(13304, 8112, 44, 360, new Item[] { new Item(Items.TEAK_PLANK_8780, 4) }),
+ BENCH_MAHOGANY (13305, 8113, 52, 560, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 6) }),
+ BENCH_GILDED (13306, 8114, 61, 1760, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 4) }),
+
/**
* Dining room bell-pulls
*/
- ROPE_PULL(13307, 8099, 5, 15.0, new Item(Items.ROPE_954, 1), new Item(Items.OAK_PLANK_8778, 1)),
- BELL_PULL(13308, 8100, 19, 58.0, new Item(Items.TEAK_PLANK_8780, 1), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- FANCY_BELL_PULL(13309, 8101, 33, 58.0, new Item(Items.TEAK_PLANK_8780, 1), new Item(Items.BOLT_OF_CLOTH_8790, 2), new Item(Items.GOLD_LEAF_8784, 1)),
-
+ ROPE_PULL (13307, 8099, 5, 15, new Item[] { new Item(Items.ROPE_954), new Item(Items.OAK_PLANK_8778) }),
+ BELL_PULL (13308, 8100, 19, 58, new Item[] { new Item(Items.TEAK_PLANK_8780), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ FANCY_BELL_PULL(13309, 8101, 33, 58, new Item[] { new Item(Items.TEAK_PLANK_8780), new Item(Items.BOLT_OF_CLOTH_8790, 2), new Item(Items.GOLD_LEAF_8784) }),
+
/**
* Workshop workbench
*/
- WORKBENCH_WOODEN(13704, 8375, 17, 145.0, new Item(Items.PLANK_960, 1)),
- WORKBENCH_OAK(13705, 8376, 32, 300.0, new Item(Items.OAK_PLANK_8778, 5)),
- WORKBENCH_STEEL_FRAME(13706, 8377, 46, 440.0, new Item(Items.OAK_PLANK_8778, 6), new Item(Items.STEEL_BAR_2353, 4)),
- WORKBENCH_WITH_VICE(13707, 8378, 62, 750.0, new Item(Items.STEEL_FRAMED_BENCH_8377, 1), new Item(Items.OAK_PLANK_8778, 2), new Item(Items.STEEL_BAR_2353, 1)),
- WORKBENCH_WITH_LATHE(13708, 8379, 77, 1000.0, new Item(Items.OAK_WORKBENCH_8376, 1), new Item(Items.OAK_PLANK_8778, 2), new Item(Items.STEEL_BAR_2353, 1)),
-
+ WORKBENCH_WOODEN (13704, 8375, 17, 143, new Item[] { new Item(Items.PLANK_960, 5) }),
+ WORKBENCH_OAK (13705, 8376, 32, 300, new Item[] { new Item(Items.OAK_PLANK_8778, 5) }),
+ WORKBENCH_STEEL_FRAME(13706, 8377, 46, 440, new Item[] { new Item(Items.OAK_PLANK_8778, 6), new Item(Items.STEEL_BAR_2353, 4) }),
+ WORKBENCH_WITH_VICE (13707, 8378, 62, 750, new Item[] { new Item(Items.OAK_PLANK_8778, 8), new Item(Items.STEEL_BAR_2353, 5) }),
+ WORKBENCH_WITH_LATHE (13708, 8379, 77, 1000, new Item[] { new Item(Items.OAK_PLANK_8778, 8), new Item(Items.STEEL_BAR_2353, 6) }),
+
/**
* Workshop repair benches/stands
*/
- REPAIR_BENCH(13713, 8389, 15, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- WHETSTONE(13714, 8390, 35, 260.0, new Item(Items.OAK_PLANK_8778, 4), new Item(Items.LIMESTONE_BRICK_3420, 1)),
- ARMOUR_STAND(13715, 8391, 55, 500.0, new Item(Items.OAK_PLANK_8778, 8), new Item(Items.LIMESTONE_BRICK_3420, 1)),
-
+ REPAIR_BENCH(13713, 8389, 15, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ WHETSTONE (13714, 8390, 35, 260, new Item[] { new Item(Items.OAK_PLANK_8778, 4), new Item(Items.LIMESTONE_BRICK_3420) }),
+ ARMOUR_STAND(13715, 8391, 55, 500, new Item[] { new Item(Items.OAK_PLANK_8778, 8), new Item(Items.LIMESTONE_BRICK_3420) }),
+
/**
* Workshop easels
*/
- PLUMING_STAND(13716, 8392, 16, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- SHIELD_EASEL(13717, 8393, 41, 240.0, new Item(Items.OAK_PLANK_8778, 4)),
- BANNER_EASEL(13718, 8394, 66, 510.0, new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
-
+ PLUMING_STAND(13716, 8392, 16, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ SHIELD_EASEL (13717, 8393, 41, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 4) }),
+ BANNER_EASEL (13718, 8394, 66, 510, new Item[] { new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+
/**
* Workshop crafting tables
* TODO: These are upgradable hotspots, therefore crafting table 3 would require
* crafting table 2 to be already built in that spot.
*/
- CRAFTING_TABLE_1(13709, 8380, 16, 50.0, new Item(Items.OAK_PLANK_8778, 4)),
- CRAFTING_TABLE_2(13710, 8381, 25, 100.0, new Item(Items.MOLTEN_GLASS_1775, 1)),
- CRAFTING_TABLE_3(13711, 8382, 34, 175.0, new Item(Items.MOLTEN_GLASS_1775, 2)),
- CRAFTING_TABLE_4(13712, 8383, 42, 240.0, new Item(Items.OAK_PLANK_8778, 2)),
-
+ CRAFTING_TABLE_1(13709, 8380, 16, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 4) }),
+ CRAFTING_TABLE_2(13710, 8381, 25, 1, new Item[] { new Item(Items.MOLTEN_GLASS_1775) }),
+ CRAFTING_TABLE_3(13711, 8382, 34, 2, new Item[] { new Item(Items.MOLTEN_GLASS_1775, 2) }),
+ CRAFTING_TABLE_4(13712, 8383, 42, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+
/**
* Workshop tool stores
* These are also upgradable just like the tables above.
*/
- TOOL_STORE_1(13699, 8384, 15, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- TOOL_STORE_2(13700, 8385, 25, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- TOOL_STORE_3(13701, 8386, 35, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- TOOL_STORE_4(13702, 8387, 44, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- TOOL_STORE_5(13703, 8388, 55, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
+ TOOL_STORE_1(13699, 8384, 15, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TOOL_STORE_2(13700, 8385, 25, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TOOL_STORE_3(13701, 8386, 35, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TOOL_STORE_4(13702, 8387, 44, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TOOL_STORE_5(13703, 8388, 55, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
-
/**
* Wall-mounted decorations
*/
- OAK_DECORATION(13606, 8102, 16, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- TEAK_DECORATION(13606, 8103, 36, 180.0, new Item(Items.TEAK_PLANK_8780, 2)),
- GILDED_DECORATION(13607, 8104, 56, 1020.0, new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.GOLD_LEAF_8784, 2)),
-
+ OAK_DECORATION (13606, 8102, 16, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TEAK_DECORATION (13606, 8103, 36, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ GILDED_DECORATION(13607, 8104, 56, 1020, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.GOLD_LEAF_8784, 2) }),
+
/**
* Staircases.
*/
- OAK_STAIRCASE(13497, 8249, 27, 680.0, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 4)),
- TEAK_STAIRCASE(13499, 8252, 48, 980.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 4)),
- SPIRAL_STAIRCASE(13503, 8258, 67, 1040.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.LIMESTONE_BRICK_3420, 7)),
- MARBLE_STAIRCASE(13501, 8257, 82, 3200.0, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MARBLE_BLOCK_8786, 5)),
- MARBLE_SPIRAL(13505, 8259, 97, 4400.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.MARBLE_BLOCK_8786, 7)),
-
+ OAK_STAIRCASE (13497, 8249, 27, 680, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 4) }),
+ TEAK_STAIRCASE (13499, 8252, 48, 980, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 4) }),
+ SPIRAL_STAIRCASE(13503, 8258, 67, 1040, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.LIMESTONE_BRICK_3420, 7) }),
+ MARBLE_STAIRCASE(13501, 8257, 82, 3200, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MARBLE_BLOCK_8786, 5) }),
+ MARBLE_SPIRAL (13505, 8259, 97, 4400, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.MARBLE_BLOCK_8786, 7) }),
+
/**
* Staircases going down.
*/
- OAK_STAIRS_DOWN(13498, 8249, 27, 680.0, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 4)),
- TEAK_STAIRS_DOWN(13500, 8252, 48, 980.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 4)),
- SPIRAL_STAIRS_DOWN(13504, 8258, 67, 1040.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.LIMESTONE_BRICK_3420, 7)),
- MARBLE_STAIRS_DOWN(13502, 8257, 82, 3200.0, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MARBLE_BLOCK_8786, 5)),
- MARBLE_SPIRAL_DOWN(13506, 8259, 97, 4400.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.MARBLE_BLOCK_8786, 7)),
-
+ OAK_STAIRS_DOWN (13498, 8249, 27, 680, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 4) }),
+ TEAK_STAIRS_DOWN (13500, 8252, 48, 980, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 4) }),
+ SPIRAL_STAIRS_DOWN(13504, 8258, 67, 1040, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.LIMESTONE_BRICK_3420, 7) }),
+ MARBLE_STAIRS_DOWN(13502, 8257, 82, 3200, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MARBLE_BLOCK_8786, 5) }),
+ MARBLE_SPIRAL_DOWN(13506, 8259, 97, 4400, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.MARBLE_BLOCK_8786, 7) }),
+
/**
* Portal room decorations.
*/
- TEAK_PORTAL(13636, 8328, 50, 270.0, new Item(Items.TEAK_PLANK_8780, 3)),
- MAHOGANY_PORTAL(13637, 8329, 65, 420.0, new Item(Items.MAHOGANY_PLANK_8782, 3)),
- MARBLE_PORTAL(13638, 8330, 80, 1500.0, new Item(Items.MARBLE_BLOCK_8786, 3)),
- TELEPORT_FOCUS(13640, 8331, 50, 40, new Item(Items.LIMESTONE_BRICK_3420, 2)),
- GREATER_TELEPORT_FOCUS(13641, 8332, 65, 500.0, new Item(Items.MARBLE_BLOCK_8786, 1)),
- SCRYING_POOL(13639, 8333, 80, 2000.0, new Item(Items.MARBLE_BLOCK_8786, 4)),
- TEAK_VARROCK_PORTAL(13615, true),
- MAHOGANY_VARROCK_PORTAL(13622, true),
- MARBLE_VARROCK_PORTAL(13629, true),
- TEAK_LUMBRIDGE_PORTAL(13616, true),
+ TEAK_PORTAL (13636, 8328, 50, 270, new Item[] { new Item(Items.TEAK_PLANK_8780, 3) }),
+ MAHOGANY_PORTAL (13637, 8329, 65, 420, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3) }),
+ MARBLE_PORTAL (13638, 8330, 80, 1500, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 3) }),
+ TELEPORT_FOCUS (13640, 8331, 50, 40, new Item[] { new Item(Items.LIMESTONE_BRICK_3420, 2) }),
+ GREATER_TELEPORT_FOCUS (13641, 8332, 65, 500, new Item[] { new Item(Items.MARBLE_BLOCK_8786) }),
+ SCRYING_POOL (13639, 8333, 80, 2000, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 4) }),
+ TEAK_VARROCK_PORTAL (13615, true),
+ MAHOGANY_VARROCK_PORTAL (13622, true),
+ MARBLE_VARROCK_PORTAL (13629, true),
+ TEAK_LUMBRIDGE_PORTAL (13616, true),
MAHOGANY_LUMBRIDGE_PORTAL(13623, true),
- MARBLE_LUMBRIDGE_PORTAL(13630, true),
- TEAK_FALADOR_PORTAL(13617, true),
- MAHOGANY_FALADOR_PORTAL(13624, true),
- MARBLE_FALADOR_PORTAL(13631, true),
- TEAK_CAMELOT_PORTAL(13618, true),
- MAHOGANY_CAMELOT_PORTAL(13625, true),
- MARBLE_CAMELOT_PORTAL(13632, true),
- TEAK_ARDOUGNE_PORTAL(13619, true),
- MAHOGANY_ARDOUGNE_PORTAL(13626, true),
- MARBLE_ARDOUGNE_PORTAL(13633, true),
- TEAK_YANILLE_PORTAL(13620, true),
- MAHOGANY_YANILLE_PORTAL(13627, true),
- MARBLE_YANILLE_PORTAL(13634, true),
- TEAK_KHARYRLL_PORTAL(13621, true),
- MAHOGANY_KHARYRLL_PORTAL(13628, true),
- MARBLE_KHARYRLL_PORTAL(13635, true),
-
+ MARBLE_LUMBRIDGE_PORTAL (13630, true),
+ TEAK_FALADOR_PORTAL (13617, true),
+ MAHOGANY_FALADOR_PORTAL (13624, true),
+ MARBLE_FALADOR_PORTAL (13631, true),
+ TEAK_CAMELOT_PORTAL (13618, true),
+ MAHOGANY_CAMELOT_PORTAL (13625, true),
+ MARBLE_CAMELOT_PORTAL (13632, true),
+ TEAK_ARDOUGNE_PORTAL (13619, true),
+ MAHOGANY_ARDOUGNE_PORTAL (13626, true),
+ MARBLE_ARDOUGNE_PORTAL (13633, true),
+ TEAK_YANILLE_PORTAL (13620, true),
+ MAHOGANY_YANILLE_PORTAL (13627, true),
+ MARBLE_YANILLE_PORTAL (13634, true),
+ TEAK_KHARYRLL_PORTAL (13621, true),
+ MAHOGANY_KHARYRLL_PORTAL (13628, true),
+ MARBLE_KHARYRLL_PORTAL (13635, true),
+
/**
* Skill hall decorations.
*/
- MITHRIL_ARMOUR(13491, 8270, 28, 135.0, new Item(Items.OAK_PLANK_8778, 2), new Item(Items.MITHRIL_FULL_HELM_1159, 1), new Item(Items.MITHRIL_PLATEBODY_1121, 1), new Item(Items.MITHRIL_PLATESKIRT_1085, 1)),
- ADAMANT_ARMOUR(13492, 8271, 28, 150.0, new Item(Items.OAK_PLANK_8778, 2), new Item(Items.ADAMANT_FULL_HELM_1161, 1), new Item(Items.ADAMANT_PLATEBODY_1123, 1), new Item(Items.ADAMANT_PLATESKIRT_1091, 1)),
- RUNE_ARMOUR(13493, 8272, 28, 165.0, new Item(Items.OAK_PLANK_8778, 2),new Item(Items.RUNE_FULL_HELM_1163, 1), new Item(Items.RUNE_PLATEBODY_1127, 1), new Item(Items.RUNE_PLATESKIRT_1093, 1)),
- CRAWLING_HAND(13481, 8260, 38, 211.0, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.CRAWLING_HAND_7982, 1)),
- COCKATRICE_HEAD(13482, 8261, 38, 224.0, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.COCKATRICE_HEAD_7983, 1)),
- BASILISK_HEAD(13483, 8262, 38, 243.0, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.BASILISK_HEAD_7984, 1)),
- KURASK_HEAD(13484, 8263, 58, 357.0, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.KURASK_HEAD_7985, 1)),
- ABYSSAL_DEMON_HEAD(13485, 8264, 58, 389.0, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.ABYSSAL_HEAD_7986, 1)),
- KBD_HEAD(13486, 8265, 78, 1103.0, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.KBD_HEADS_7987, 1)),
- KQ_HEAD(13487, 8266, 78, 1103.0, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.KQ_HEAD_7988, 1)),
- MOUNTED_BASS(13488, 8267, 36, 151.0, new Item(Items.OAK_PLANK_8778, 2), new Item(Items.BIG_BASS_7990, 1)),
- MOUNTED_SWORDFISH(13489, 8268, 56, 230.0, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.BIG_SWORDFISH_7992, 1)),
- MOUNTED_SHARK(13490, 8269, 76, 350.0, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.BIG_SHARK_7994, 1)),
- RUNE_CASE1(13507, 8095, 41, 190.0, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775, 2), new Item(Items.FIRE_RUNE_554, 1), new Item(Items.AIR_RUNE_556, 1), new Item(Items.EARTH_RUNE_557, 1), new Item(Items.WATER_RUNE_555, 1)),
- RUNE_CASE2(13508, 8095, 41, 212.0, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775, 2), new Item(Items.BODY_RUNE_559, 1), new Item(Items.COSMIC_RUNE_564, 1), new Item(Items.CHAOS_RUNE_562, 1), new Item(Items.NATURE_RUNE_561, 1)),
-
-
+ MITHRIL_ARMOUR (13491, 8270, 28, 135, new Item[] { new Item(Items.OAK_PLANK_8778, 2), new Item(Items.MITHRIL_FULL_HELM_1159, 1), new Item(Items.MITHRIL_PLATEBODY_1121, 1), new Item(Items.MITHRIL_PLATESKIRT_1085, 1) }, new Item[] { new Item(Items.MITHRIL_FULL_HELM_1159, 1), new Item(Items.MITHRIL_PLATEBODY_1121, 1), new Item(Items.MITHRIL_PLATESKIRT_1085, 1) }),
+ ADAMANT_ARMOUR (13492, 8271, 28, 150, new Item[] { new Item(Items.OAK_PLANK_8778, 2), new Item(Items.ADAMANT_FULL_HELM_1161, 1), new Item(Items.ADAMANT_PLATEBODY_1123, 1), new Item(Items.ADAMANT_PLATESKIRT_1091, 1) }, new Item[] { new Item(Items.ADAMANT_FULL_HELM_1161, 1), new Item(Items.ADAMANT_PLATEBODY_1123, 1), new Item(Items.ADAMANT_PLATESKIRT_1091, 1) }),
+ RUNE_ARMOUR (13493, 8272, 28, 165, new Item[] { new Item(Items.OAK_PLANK_8778, 2), new Item(Items.RUNE_FULL_HELM_1163, 1), new Item(Items.RUNE_PLATEBODY_1127, 1), new Item(Items.RUNE_PLATESKIRT_1093, 1) }, new Item[] { new Item(Items.RUNE_FULL_HELM_1163, 1), new Item(Items.RUNE_PLATEBODY_1127, 1), new Item(Items.RUNE_PLATESKIRT_1093, 1) }),
+ CRAWLING_HAND (13481, 8260, 38, 211, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.CRAWLING_HAND_7982) }),
+ COCKATRICE_HEAD (13482, 8261, 38, 224, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.COCKATRICE_HEAD_7983) }),
+ BASILISK_HEAD (13483, 8262, 38, 243, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.BASILISK_HEAD_7984) }),
+ KURASK_HEAD (13484, 8263, 58, 357, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.KURASK_HEAD_7985) }),
+ ABYSSAL_DEMON_HEAD(13485, 8264, 58, 389, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.ABYSSAL_HEAD_7986) }),
+ KBD_HEAD (13486, 8265, 78, 1103, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.KBD_HEADS_7987) }),
+ KQ_HEAD (13487, 8266, 78, 1103, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.KQ_HEAD_7988) }),
+ MOUNTED_BASS (13488, 8267, 36, 151, new Item[] { new Item(Items.OAK_PLANK_8778, 2), new Item(Items.BIG_BASS_7990) }),
+ MOUNTED_SWORDFISH (13489, 8268, 56, 230, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.BIG_SWORDFISH_7992) }),
+ MOUNTED_SHARK (13490, 8269, 76, 350, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.BIG_SHARK_7994) }),
+ RUNE_CASE1 (13507, 8095, 41, 190, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775, 2), new Item(Items.FIRE_RUNE_554, 1), new Item(Items.AIR_RUNE_556, 1), new Item(Items.EARTH_RUNE_557, 1), new Item(Items.WATER_RUNE_555, 1) }),
+ RUNE_CASE2 (13508, 8095, 41, 212, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775, 2), new Item(Items.BODY_RUNE_559, 1), new Item(Items.COSMIC_RUNE_564, 1), new Item(Items.CHAOS_RUNE_562, 1), new Item(Items.NATURE_RUNE_561, 1) }),
+
/**
* Games room decorations.
*/
- CLAY_STONE(13392, 8153, 39, 100.0, new Item(Items.SOFT_CLAY_1761, 10)),
- LIMESTONE_STONE(13393, 8154, 59, 200.0, new Item(Items.LIMESTONE_BRICK_3420, 10)),
- MARBLE_STONE(13394, 8155, 79, 2000.0, new Item(Items.MARBLE_BLOCK_8786, 4)),
- HOOP_AND_STICK(13398, 8162, 30, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- DARTBOARD(13400, 8163, 54, 290.0, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.STEEL_BAR_2353, 1)),
- ARCHERY_TARGET(13402, 8164, 81, 600.0, new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.STEEL_BAR_2353, 3)),
- BALANCE_1(13395, 8156, 37, 176.0, new Item(Items.FIRE_RUNE_554, 500), new Item(Items.AIR_RUNE_556, 500), new Item(Items.EARTH_RUNE_557, 500), new Item(Items.WATER_RUNE_555, 500)),
- BALANCE_2(13396, 8157, 57, 252.0, new Item(Items.FIRE_RUNE_554, 1000), new Item(Items.AIR_RUNE_556, 1000), new Item(Items.EARTH_RUNE_557, 1000), new Item(Items.WATER_RUNE_555, 1000)),
- BALANCE_3(13397, 8158, 77, 356.0, new Item(Items.FIRE_RUNE_554, 2000), new Item(Items.AIR_RUNE_556, 2000), new Item(Items.EARTH_RUNE_557, 2000), new Item(Items.WATER_RUNE_555, 2000)),
- OAK_CHEST(13385, 8165, 34, 240.0, new Item(Items.OAK_PLANK_8778, 4)),
- TEAK_CHEST(13387, 8166, 44, 660.0, new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.GOLD_LEAF_8784, 1)),
- MAHOGANY_CHEST(13389, 8167, 54, 860.0, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 1)),
- JESTER(13390, 8159, 39, 360.0, new Item(Items.TEAK_PLANK_8780, 4)),
- TREASURE_HUNT(13379, 8160, 49, 800.0, new Item(Items.TEAK_PLANK_8780, 8), new Item(Items.STEEL_BAR_2353, 4)),
- HANGMAN(13404, 8161, 59, 1200.0, new Item(Items.TEAK_PLANK_8780, 12), new Item(Items.STEEL_BAR_2353, 6)),
-
-
+ CLAY_STONE (13392, 8153, 39, 100, new Item[] { new Item(Items.SOFT_CLAY_1761, 10) }),
+ LIMESTONE_STONE(13393, 8154, 59, 200, new Item[] { new Item(Items.LIMESTONE_BRICK_3420, 10) }),
+ MARBLE_STONE (13394, 8155, 79, 2000, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 4) }),
+ HOOP_AND_STICK (13398, 8162, 30, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ DARTBOARD (13400, 8163, 54, 290, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.STEEL_BAR_2353) }),
+ ARCHERY_TARGET (13402, 8164, 81, 600, new Item[] { new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.STEEL_BAR_2353, 3) }),
+ BALANCE_1 (13395, 8156, 37, 176, new Item[] { new Item(Items.FIRE_RUNE_554, 500), new Item(Items.AIR_RUNE_556, 500), new Item(Items.EARTH_RUNE_557, 500), new Item(Items.WATER_RUNE_555, 500) }),
+ BALANCE_2 (13396, 8157, 57, 252, new Item[] { new Item(Items.FIRE_RUNE_554, 1000), new Item(Items.AIR_RUNE_556, 1000), new Item(Items.EARTH_RUNE_557, 1000), new Item(Items.WATER_RUNE_555, 1000) }),
+ BALANCE_3 (13397, 8158, 77, 356, new Item[] { new Item(Items.FIRE_RUNE_554, 2000), new Item(Items.AIR_RUNE_556, 2000), new Item(Items.EARTH_RUNE_557, 2000), new Item(Items.WATER_RUNE_555, 2000) }),
+ OAK_CHEST (13385, 8165, 34, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 4) }),
+ TEAK_CHEST (13387, 8166, 44, 660, new Item[] { new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.GOLD_LEAF_8784) }),
+ MAHOGANY_CHEST (13389, 8167, 54, 860, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784) }),
+ JESTER (13390, 8159, 39, 360, new Item[] { new Item(Items.TEAK_PLANK_8780, 4) }),
+ TREASURE_HUNT (13379, 8160, 49, 800, new Item[] { new Item(Items.TEAK_PLANK_8780, 8), new Item(Items.STEEL_BAR_2353, 4) }),
+ HANGMAN (13404, 8161, 59, 1200, new Item[] { new Item(Items.TEAK_PLANK_8780, 12), new Item(Items.STEEL_BAR_2353, 6) }),
+
/**
* Combat room decorations.
*/
- BOXING_RING(13129, 8023, 32, 570.0, new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- FENCING_RING(13133, 8024, 41, 570.0, new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 6)),
- COMBAT_RING(13137, 8025, 51, 630.0, new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 6)),
- BALANCE_BEAM_LEFT(13143, 8027, 81, 1000.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 5)),
- BALANCE_BEAM_CENTER(13142, 8027, 81, 1000.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 5)),
- BALANCE_BEAM_RIGHT(13144, 8027, 81, 1000.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 5)),
- RANGING_PEDESTALS(13147, 8026, 71, 720.0, new Item(Items.TEAK_PLANK_8780, 8)),
- MAGIC_BARRIER(13145, 8026, 71, 720.0, new Item(Items.TEAK_PLANK_8780, 8)),
- NOTHING(13721, 8027, 81, 1000.0, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 5)),
- NOTHING2(13721, 8026, 71, 720.0, new Item(Items.TEAK_PLANK_8780, 8)),
- INVISIBLE_WALL(15283, 8023, 32, 570.0, new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- INVISIBLE_WALL2(15284, 8023, 32, 570.0, new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- INVISIBLE_WALL3(15285, 8023, 32, 570.0, new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- GLOVE_RACK(13381, 8028, 34, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- WEAPONS_RACK(13382, 8029, 44, 180.0, new Item(Items.TEAK_PLANK_8780, 2)),
- EXTRA_WEAPONS_RACK(13383, 8030, 54, 440.0, new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.STEEL_BAR_2353, 4)),
- BOXING_MAT_CORNER(13126, 8023, 32, 570.0, new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- FENCING_MAT_CORNER(13135, 8024, 41, 570.0, new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 6)),
- COMBAT_MAT_CORNER(13138, 8025, 51, 630.0, new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 6)),
- BOXING_MAT_SIDE(13128, 8023, 32, 570.0, new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- FENCING_MAT_SIDE(13134, 8024, 41, 570.0, new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 6)),
- COMBAT_MAT_SIDE(13139, 8025, 51, 630.0, new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 6)),
- BOXING_MAT(13127, 8023, 32, 570.0, new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- FENCING_MAT(13136, 8024, 41, 570.0, new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 6)),
- COMBAT_MAT(13140, 8025, 51, 630.0, new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 6)),
-
-
+ BOXING_RING (13129, 8023, 32, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ FENCING_RING (13133, 8024, 41, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 6) }),
+ COMBAT_RING (13137, 8025, 51, 630, new Item[] { new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 6) }),
+ BALANCE_BEAM_LEFT (13143, 8027, 81, 1000, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 5) }),
+ BALANCE_BEAM_CENTER(13142, 8027, 81, 1000, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 5) }),
+ BALANCE_BEAM_RIGHT (13144, 8027, 81, 1000, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 5) }),
+ RANGING_PEDESTALS (13147, 8026, 71, 720, new Item[] { new Item(Items.TEAK_PLANK_8780, 8) }),
+ MAGIC_BARRIER (13145, 8026, 71, 720, new Item[] { new Item(Items.TEAK_PLANK_8780, 8) }),
+ NOTHING (13721, 8027, 81, 1000, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 5) }),
+ NOTHING2 (13721, 8026, 71, 720, new Item[] { new Item(Items.TEAK_PLANK_8780, 8) }),
+ INVISIBLE_WALL (15283, 8023, 32, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ INVISIBLE_WALL2 (15284, 8023, 32, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ INVISIBLE_WALL3 (15285, 8023, 32, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ GLOVE_RACK (13381, 8028, 34, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ WEAPONS_RACK (13382, 8029, 44, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ EXTRA_WEAPONS_RACK (13383, 8030, 54, 440, new Item[] { new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.STEEL_BAR_2353, 4) }),
+ BOXING_MAT_CORNER (13126, 8023, 32, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ FENCING_MAT_CORNER (13135, 8024, 41, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 6) }),
+ COMBAT_MAT_CORNER (13138, 8025, 51, 630, new Item[] { new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 6) }),
+ BOXING_MAT_SIDE (13128, 8023, 32, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ FENCING_MAT_SIDE (13134, 8024, 41, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 6) }),
+ COMBAT_MAT_SIDE (13139, 8025, 51, 630, new Item[] { new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 6) }),
+ BOXING_MAT (13127, 8023, 32, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 6), new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ FENCING_MAT (13136, 8024, 41, 570, new Item[] { new Item(Items.OAK_PLANK_8778, 8), new Item(Items.BOLT_OF_CLOTH_8790, 6) }),
+ COMBAT_MAT (13140, 8025, 51, 630, new Item[] { new Item(Items.TEAK_PLANK_8780, 6), new Item(Items.BOLT_OF_CLOTH_8790, 6) }),
+
/**
* Formal garden decorations
*/
- GAZEBO(13477, 8192, 65, 1200, new Item(Items.MAHOGANY_PLANK_8782, 8), new Item(Items.STEEL_BAR_2353, 4)),
- SMALL_FOUNTAIN(13478, 8193, 71, 500, new Item(Items.MARBLE_BLOCK_8786, 1)),
- LARGE_FOUNTAIN(13479, 8194, 75, 1000, new Item(Items.MARBLE_BLOCK_8786, 2)),
- POSH_FOUNTAIN(13480, 8195, 81, 1500, new Item(Items.MARBLE_BLOCK_8786, 3)),
- SUNFLOWER(13446, 8213, 66, 70, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_SUNFLOWER_8457, 1)),
- MARIGOLDS(13447, 8214, 71, 100, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_MARIGOLDS_8459, 1)),
- ROSES(13448, 8215, 76, 122, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_ROSES_8461, 1)),
- SUNFLOWER_BIG(13443, 8213, 66, 70, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_SUNFLOWER_8457, 1)),
- MARIGOLDS_BIG(13444, 8214, 71, 100, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_MARIGOLDS_8459, 1)),
- ROSES_BIG(13445, 8215, 76, 122, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_ROSES_8461, 1)),
- ROSEMARY(13440, 8210, 66, 70, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_ROSEMARY_8451, 1)),
- DAFFODILS(13441, 8211, 71, 100, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_DAFFODILS_8453, 1)),
- BLUEBELLS(13442, 8212, 76, 122, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_BLUEBELLS_8455, 1)),
- ROSEMARY_BIG(13437, 8210, 66, 70, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_ROSEMARY_8451, 1)),
- DAFFODILS_BIG(13438, 8211, 71, 100, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_DAFFODILS_8453, 1)),
- BLUEBELLS_BIG(13439, 8212, 76, 122, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.BAGGED_BLUEBELLS_8455, 1)),
- THORNY_HEDGE1(13456, 8203, 56, 70, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.THORNY_HEDGE_8437, 1)),
- THORNY_HEDGE2(13457, 8203, 56, 70, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.THORNY_HEDGE_8437, 1)),
- THORNY_HEDGE3(13458, 8203, 56, 70, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.THORNY_HEDGE_8437, 1)),
- NICE_HEDGE1(13459, 8204, 60, 100, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.NICE_HEDGE_8439, 1)),
- NICE_HEDGE2(13461, 8204, 60, 100, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.NICE_HEDGE_8439, 1)),
- NICE_HEDGE3(13460, 8204, 60, 100, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.NICE_HEDGE_8439, 1)),
- SMALL_BOX_HEDGE1(13462, 8205, 64, 122, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.SMALL_BOX_HEDGE_8441, 1)),
- SMALL_BOX_HEDGE2(13464, 8205, 64, 122, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.SMALL_BOX_HEDGE_8441, 1)),
- SMALL_BOX_HEDGE3(13463, 8205, 64, 122, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.SMALL_BOX_HEDGE_8441, 1)),
- TOPIARY_HEDGE1(13465, 8206, 68, 141, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.TOPIARY_HEDGE_8443, 1)),
- TOPIARY_HEDGE2(13467, 8206, 68, 141, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.TOPIARY_HEDGE_8443, 1)),
- TOPIARY_HEDGE3(13466, 8206, 68, 141, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.TOPIARY_HEDGE_8443, 1)),
- FANCY_HEDGE1(13468, 8207, 72, 158, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.FANCY_HEDGE_8445, 1)),
- FANCY_HEDGE2(13470, 8207, 72, 158, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.FANCY_HEDGE_8445, 1)),
- FANCY_HEDGE3(13469, 8207, 72, 158, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.FANCY_HEDGE_8445, 1)),
- TALL_FANCY_HEDGE1(13471, 8208, 76, 223, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.TALL_FANCY_HEDGE_8447, 1)),
- TALL_FANCY_HEDGE2(13473, 8208, 76, 223, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.TALL_FANCY_HEDGE_8447, 1)),
- TALL_FANCY_HEDGE3(13472, 8208, 76, 223, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.TALL_FANCY_HEDGE_8447, 1)),
- TALL_BOX_HEDGE1(13474, 8209, 80, 316, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.TALL_BOX_HEDGE_8449, 1)),
- TALL_BOX_HEDGE2(13476, 8209, 80, 316, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.TALL_BOX_HEDGE_8449, 1)),
- TALL_BOX_HEDGE3(13475, 8209, 80, 316, new int[] {BuildingUtils.WATERING_CAN}, new Item(Items.TALL_BOX_HEDGE_8449, 1)),
- BOUNDARY_STONES(13449, 8196, 55, 100, new Item(Items.SOFT_CLAY_1761, 10)),
- WOODEN_FENCE(13450, 8197, 59, 280, new Item(Items.PLANK_960, 10)),
- STONE_WALL(13451, 8198, 63, 200, new Item(Items.LIMESTONE_BRICK_3420, 10)),
- IRON_RAILINGS(13452, 8199, 67, 220, new Item(Items.IRON_BAR_2351, 10), new Item(Items.LIMESTONE_BRICK_3420, 6)),
- PICKET_FENCE(13453, 8200, 71, 640, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 2)),
- GARDEN_FENCE(13454, 8201, 75, 940, new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 2)),
- MARBLE_WALL(13455, 8202, 79, 4000, new Item(Items.MARBLE_BLOCK_8786, 10)),
-
-
+ GAZEBO (13477, 8192, 65, 1200, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 8), new Item(Items.STEEL_BAR_2353, 4) }),
+ SMALL_FOUNTAIN (13478, 8193, 71, 500, new Item[] { new Item(Items.MARBLE_BLOCK_8786) }),
+ LARGE_FOUNTAIN (13479, 8194, 75, 1000, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 2) }),
+ POSH_FOUNTAIN (13480, 8195, 81, 1500, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 3) }),
+ SUNFLOWER (13446, 8213, 66, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_SUNFLOWER_8457) }),
+ MARIGOLDS (13447, 8214, 71, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_MARIGOLDS_8459) }),
+ ROSES (13448, 8215, 76, 122, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_ROSES_8461) }),
+ SUNFLOWER_BIG (13443, 8213, 66, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_SUNFLOWER_8457) }),
+ MARIGOLDS_BIG (13444, 8214, 71, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_MARIGOLDS_8459) }),
+ ROSES_BIG (13445, 8215, 76, 122, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_ROSES_8461) }),
+ ROSEMARY (13440, 8210, 66, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_ROSEMARY_8451) }),
+ DAFFODILS (13441, 8211, 71, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_DAFFODILS_8453) }),
+ BLUEBELLS (13442, 8212, 76, 122, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_BLUEBELLS_8455) }),
+ ROSEMARY_BIG (13437, 8210, 66, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_ROSEMARY_8451) }),
+ DAFFODILS_BIG (13438, 8211, 71, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_DAFFODILS_8453) }),
+ BLUEBELLS_BIG (13439, 8212, 76, 122, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.BAGGED_BLUEBELLS_8455) }),
+ THORNY_HEDGE1 (13456, 8203, 56, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.THORNY_HEDGE_8437) }),
+ THORNY_HEDGE2 (13457, 8203, 56, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.THORNY_HEDGE_8437) }),
+ THORNY_HEDGE3 (13458, 8203, 56, 70, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.THORNY_HEDGE_8437) }),
+ NICE_HEDGE1 (13459, 8204, 60, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.NICE_HEDGE_8439) }),
+ NICE_HEDGE2 (13461, 8204, 60, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.NICE_HEDGE_8439) }),
+ NICE_HEDGE3 (13460, 8204, 60, 100, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.NICE_HEDGE_8439) }),
+ SMALL_BOX_HEDGE1 (13462, 8205, 64, 122, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.SMALL_BOX_HEDGE_8441) }),
+ SMALL_BOX_HEDGE2 (13464, 8205, 64, 122, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.SMALL_BOX_HEDGE_8441) }),
+ SMALL_BOX_HEDGE3 (13463, 8205, 64, 122, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.SMALL_BOX_HEDGE_8441) }),
+ TOPIARY_HEDGE1 (13465, 8206, 68, 141, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.TOPIARY_HEDGE_8443) }),
+ TOPIARY_HEDGE2 (13467, 8206, 68, 141, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.TOPIARY_HEDGE_8443) }),
+ TOPIARY_HEDGE3 (13466, 8206, 68, 141, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.TOPIARY_HEDGE_8443) }),
+ FANCY_HEDGE1 (13468, 8207, 72, 158, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.FANCY_HEDGE_8445) }),
+ FANCY_HEDGE2 (13470, 8207, 72, 158, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.FANCY_HEDGE_8445) }),
+ FANCY_HEDGE3 (13469, 8207, 72, 158, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.FANCY_HEDGE_8445) }),
+ TALL_FANCY_HEDGE1(13471, 8208, 76, 223, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.TALL_FANCY_HEDGE_8447) }),
+ TALL_FANCY_HEDGE2(13473, 8208, 76, 223, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.TALL_FANCY_HEDGE_8447) }),
+ TALL_FANCY_HEDGE3(13472, 8208, 76, 223, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.TALL_FANCY_HEDGE_8447) }),
+ TALL_BOX_HEDGE1 (13474, 8209, 80, 316, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.TALL_BOX_HEDGE_8449) }),
+ TALL_BOX_HEDGE2 (13476, 8209, 80, 316, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.TALL_BOX_HEDGE_8449) }),
+ TALL_BOX_HEDGE3 (13475, 8209, 80, 316, new int[] { BuildingUtils.WATERING_CAN }, new Item[] { new Item(Items.TALL_BOX_HEDGE_8449) }),
+ BOUNDARY_STONES (13449, 8196, 55, 100, new Item[] { new Item(Items.SOFT_CLAY_1761, 10) }),
+ WOODEN_FENCE (13450, 8197, 59, 280, new Item[] { new Item(Items.PLANK_960, 10) }),
+ STONE_WALL (13451, 8198, 63, 200, new Item[] { new Item(Items.LIMESTONE_BRICK_3420, 10) }),
+ IRON_RAILINGS (13452, 8199, 67, 220, new Item[] { new Item(Items.IRON_BAR_2351, 10), new Item(Items.LIMESTONE_BRICK_3420, 6) }),
+ PICKET_FENCE (13453, 8200, 71, 640, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 2) }),
+ GARDEN_FENCE (13454, 8201, 75, 940, new Item[] { new Item(Items.TEAK_PLANK_8780, 10), new Item(Items.STEEL_BAR_2353, 2) }),
+ MARBLE_WALL (13455, 8202, 79, 4000, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 10) }),
+
/**
* Bedroom decorations.
*/
- WOODEN_BED(13148, 8031, 20, 117, new Item(Items.PLANK_960, 3), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- OAK_BED(13149, 8032, 30, 210, new Item(Items.OAK_PLANK_8778, 3), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- LARGE_OAK_BED(13150, 8033, 34, 330, new Item(Items.OAK_PLANK_8778, 5), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- TEAK_BED(13151, 8034, 40, 300, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- LARGE_TEAK_BED(13152, 8035, 45, 480, new Item(Items.TEAK_PLANK_8780, 5), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- FOUR_POSTER(13153, 8036, 53, 450, new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- GILDED_FOUR_POSTER(13154, 8037, 60, 1330, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.BOLT_OF_CLOTH_8790, 2), new Item(Items.GOLD_LEAF_8784, 2)),
- OAK_CLOCK(13169, 8052, 25, 142, new Item(Items.OAK_PLANK_8778, 2), new Item(Items.CLOCKWORK_8792, 1)),
- TEAK_CLOCK(13170, 8053, 55, 202, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.CLOCKWORK_8792, 1)),
- GILDED_CLOCK(13171, 8054, 85, 602, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.CLOCKWORK_8792, 1), new Item(Items.GOLD_LEAF_8784, 1)),
- SHAVING_STAND(13162, 8045, 21, 30, new Item(Items.PLANK_960, 1), new Item(Items.MOLTEN_GLASS_1775, 1)),
- OAK_SHAVING_STAND(13163, 8046, 29, 61, new Item(Items.OAK_PLANK_8778, 1), new Item(Items.MOLTEN_GLASS_1775, 1)),
- OAK_DRESSER(13164, 8047, 37, 121, new Item(Items.OAK_PLANK_8778, 2), new Item(Items.MOLTEN_GLASS_1775, 1)),
- TEAK_DRESSER(13165, 8048, 46, 181, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775, 1)),
- FANCY_TEAK_DRESSER(13166, 8049, 56, 182, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775, 2)),
- MAHOGANY_DRESSER(13167, 8050, 64, 281, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.MOLTEN_GLASS_1775, 1)),
- GILDED_DRESSER(13168, 8051, 74, 582, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.MOLTEN_GLASS_1775, 2), new Item(Items.GOLD_LEAF_8784, 1)),
- SHOE_BOX(13155, 8038, 20, 58, new Item(Items.PLANK_960, 2)),
- OAK_DRAWERS(13156, 8039, 27, 120, new Item(Items.OAK_PLANK_8778, 2)),
- OAK_WARDROBE(13157, 8040, 39, 180, new Item(Items.OAK_PLANK_8778, 3)),
- TEAK_DRAWERS(13158, 8041, 51, 180, new Item(Items.TEAK_PLANK_8780, 2)),
- TEAK_WARDROBE(13159, 8042, 63, 270, new Item(Items.TEAK_PLANK_8780, 3)),
- MAHOGANY_WARDROBE(13160, 8043, 75, 420, new Item(Items.MAHOGANY_PLANK_8782, 2)),
- GILDED_WARDROBE(13161, 8044, 87, 720, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.GOLD_LEAF_8784, 1)),
-
-
+ WOODEN_BED (13148, 8031, 20, 117, new Item[] { new Item(Items.PLANK_960, 3), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ OAK_BED (13149, 8032, 30, 210, new Item[] { new Item(Items.OAK_PLANK_8778, 3), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ LARGE_OAK_BED (13150, 8033, 34, 330, new Item[] { new Item(Items.OAK_PLANK_8778, 5), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ TEAK_BED (13151, 8034, 40, 300, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ LARGE_TEAK_BED (13152, 8035, 45, 480, new Item[] { new Item(Items.TEAK_PLANK_8780, 5), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ FOUR_POSTER (13153, 8036, 53, 450, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ GILDED_FOUR_POSTER(13154, 8037, 60, 1330, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.BOLT_OF_CLOTH_8790, 2), new Item(Items.GOLD_LEAF_8784, 2) }),
+ OAK_CLOCK (13169, 8052, 25, 142, new Item[] { new Item(Items.OAK_PLANK_8778, 2), new Item(Items.CLOCKWORK_8792) }),
+ TEAK_CLOCK (13170, 8053, 55, 202, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.CLOCKWORK_8792) }),
+ GILDED_CLOCK (13171, 8054, 85, 602, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.CLOCKWORK_8792), new Item(Items.GOLD_LEAF_8784) }),
+ SHAVING_STAND (13162, 8045, 21, 30, new Item[] { new Item(Items.PLANK_960), new Item(Items.MOLTEN_GLASS_1775) }),
+ OAK_SHAVING_STAND (13163, 8046, 29, 61, new Item[] { new Item(Items.OAK_PLANK_8778), new Item(Items.MOLTEN_GLASS_1775) }),
+ OAK_DRESSER (13164, 8047, 37, 121, new Item[] { new Item(Items.OAK_PLANK_8778, 2), new Item(Items.MOLTEN_GLASS_1775) }),
+ TEAK_DRESSER (13165, 8048, 46, 181, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775) }),
+ FANCY_TEAK_DRESSER(13166, 8049, 56, 182, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775, 2) }),
+ MAHOGANY_DRESSER (13167, 8050, 64, 281, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.MOLTEN_GLASS_1775) }),
+ GILDED_DRESSER (13168, 8051, 74, 582, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.MOLTEN_GLASS_1775, 2), new Item(Items.GOLD_LEAF_8784) }),
+ SHOE_BOX (13155, 8038, 20, 58, new Item[] { new Item(Items.PLANK_960, 2) }),
+ OAK_DRAWERS (13156, 8039, 27, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ OAK_WARDROBE (13157, 8040, 39, 180, new Item[] { new Item(Items.OAK_PLANK_8778, 3) }),
+ TEAK_DRAWERS (13158, 8041, 51, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ TEAK_WARDROBE (13159, 8042, 63, 270, new Item[] { new Item(Items.TEAK_PLANK_8780, 3) }),
+ MAHOGANY_WARDROBE (13160, 8043, 75, 420, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2) }),
+ GILDED_WARDROBE (13161, 8044, 87, 720, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.GOLD_LEAF_8784) }),
+
/**
* Quest hall decorations.
*/
- ANTIDRAGON_SHIELD(13522, 8282, 47, 280, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ANTI_DRAGON_SHIELD_1540, 1)),
- AMULET_OF_GLORY(13523, 8283, 47, 290, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.AMULET_OF_GLORY_1704, 1)),
- CAPE_OF_LEGENDS(13524, 8284, 47, 300, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.CAPE_OF_LEGENDS_1052, 1)),
- KING_ARTHUR(13510, 8285, 35, 211, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ARTHUR_PORTRAIT_7995, 1)),
- ELENA(13511, 8286, 35, 211, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ELENA_PORTRAIT_7996, 1)),
- GIANT_DWARF(13512, 8287, 35, 211, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.KELDAGRIM_PORTRAIT_7997, 1)),
- MISCELLANIANS(13513, 8288, 35, 311, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.MISC_PORTRAIT_7998, 1)),
- LUMBRIDGE(13517, 8289, 44, 314, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.LUMBRIDGE_PAINTING_8002, 1)),
- THE_DESERT(13514, 8290, 44, 314, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.DESERT_PAINTING_7999, 1)),
- MORYTANIA(13518, 8291, 44, 314, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.MORYTANIA_PAINTING_8003, 1)),
- KARAMJA(13516, 8292, 65, 464, new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.KARAMJA_PAINTING_8001, 1)),
- ISAFDAR(13515, 8293, 65, 464, new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.ISAFDAR_PAINTING_8000, 1)),
- SILVERLIGHT(13519, 8279, 42, 187, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.SILVERLIGHT_2402, 1)),
- EXCALIBUR(13521, 8280, 42, 194, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.EXCALIBUR_35, 1)),
- DARKLIGHT(13520, 8281, 42, 202, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.DARKLIGHT_6746, 1)),
- SMALL_MAP(13525, 8294, 38, 211, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.SMALL_MAP_8004, 1)),
- MEDIUM_MAP(13526, 8295, 58, 451, new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.MEDIUM_MAP_8005, 1)),
- LARGE_MAP(13527, 8296, 78, 591, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.LARGE_MAP_8006, 1)),
-
- /**
- * Menagerie Decorations
- */
- //OBELISK
- MINI_OBELISK(44837, 15236, 41, 676, new Item(Items.MARBLE_BLOCK_8786, 1), new Item(Items.SPIRIT_SHARDS_12183, 1000), new Item(Items.GOLD_CHARM_12158, 10), new Item(Items.GREEN_CHARM_12159, 10), new Item(Items.CRIMSON_CHARM_12160, 10), new Item(Items.BLUE_CHARM_12163, 10))
- //PET_FEEDER
- ,
- OAK_PET_FEEDER(44834, 15233, 37, 240, new Item(Items.OAK_PLANK_8778, 4)),
- TEAK_PET_FEEDER(44835, 15234, 52, 380, new Item(Items.TEAK_PLANK_8780, 4)),
- MAHOGANY_PET_FEEDER(44836, 15235, 67, 880, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 1))
- //PET_HOUSE
- ,
- OAK_PET_HOUSE(44828, 15227, 37, 240, new Item(Items.OAK_PLANK_8778, 4)),
- TEAK_PET_HOUSE(44829, 15228, 52, 380, new Item(Items.TEAK_PLANK_8780, 4)),
- MAHOGANY_PET_HOUSE(44830, 15229, 67, 580, new Item(Items.MAHOGANY_PLANK_8782, 4)),
- CONSECRATED_PET_HOUSE(44831, 15230, 92, 1580, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.MAGIC_STONE_8788, 1)),
- DESECRATED_PET_HOUSE(44832, 15231, 92, 1580, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.MAGIC_STONE_8788, 1)),
- NATURAL_PET_HOUSE(44833, 15232, 92, 1580, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.MAGIC_STONE_8788, 1))
- //HABITAT_SPACE
- ,
- GARDEN_HABITAT(new int[]{
- 4497,
- 4498,
- 44500,
- 44501,
- 44502,
- 44503,
- 44504,
- 44505,
- 44506,
- 44507,
- 44508,
- 44509,
- 44510,
- 44511,
- 44512,
- 44513,
- 44514,
- 44515,
- 44516,
- 44517,
- 44518,
- 44519,
- 44520,
- 44521,
- 44522,
- 44523,
- 44524,
- 44525,
- 44526,
- 44527,
- 44528,
- 44529,
- 44530,
- 44531,
- 44532,
- 44533,
- 44534,
- 44535,
- 44536,
- 44537,
- 44538,
- 44539,
- 44540,
- 44541,
- 44542,
- 44543,
- 44544,
- 44545,
- 44546,
- 44547,
- 44548,
- 44549,
- 44550,
- 44551,
- 44552,
- 44553,
- 44554,
- 44555,
- 44556,
- 44557,
- 44558,
- 44559,
- 44560,
- 44561,
- 44562,
- 44563 }, 15222, 37, 201, new Item(Items.BAGGED_PLANT_1_8431, 1), new Item(Items.BAGGED_PLANT_2_8433, 1), new Item(Items.BAGGED_PLANT_3_8435, 1)),
- JUNGLE_HABITAT(new int[]
- {
- 44564,
- 44565,
- 44566,
- 44567,
- 44568,
- 44569,
- 44570,
- 44571,
- 44572,
- 44573,
- 44574,
- 44575,
- 44576,
- 44577,
- 44578,
- 44579,
- 44580,
- 44581,
- 44582,
- 44583,
- 44584,
- 44585,
- 44586,
- 44587,
- 44588,
- 44589,
- 44590,
- 44591,
- 44592,
- 44593,
- 44594,
- 44595,
- 44596,
- 44597,
- 44598,
- 44599,
- 44600,
- 44601,
- 44602,
- 44603,
- 44604,
- 44605,
- 44606,
- 44607,
- 44608,
- 44609,
- 44610,
- 44611,
- 44612,
- 44613,
- 44614,
- 44615,
- 44616,
- 44617,
- 44618,
- 44619,
- 44620,
- 44621,
- 44622,
- 44623,
- 44624,
- 44625,
- 44626,
- 44627,
- 44628,
- 44629 }, 15223, 47, 278, new Item(Items.BAGGED_PLANT_3_8435, 3), new Item(Items.BAGGED_WILLOW_TREE_8423, 1), new Item(Items.BUCKET_OF_WATER_1929, 5)),
- DESERT_HABITAT(new int[]
- {
- 44630,
- 44631,
- 44632,
- 44633,
- 44634,
- 44635,
- 44636,
- 44637,
- 44638,
- 44639,
- 44640,
- 44641,
- 44642,
- 44643,
- 44644,
- 44645,
- 44646,
- 44647,
- 44648,
- 44649,
- 44650,
- 44651,
- 44652,
- 44653,
- 44654,
- 44655,
- 44656,
- 44657,
- 44658,
- 44659,
- 44660,
- 44661,
- 44662,
- 44663,
- 44664,
- 44665,
- 44666,
- 44667,
- 44668,
- 44669,
- 44670,
- 44671,
- 44672,
- 44673,
- 44674,
- 44675,
- 44676,
- 44677,
- 44678,
- 44679,
- 44680,
- 44681,
- 44682,
- 44683,
- 44684,
- 44685,
- 44686,
- 44687,
- 44688,
- 44689,
- 44690,
- 44691,
- 44692,
- 44693,
- 44694,
- 44695 }, 15224, 57, 238, new Item(Items.BUCKET_OF_SAND_1783, 10), new Item(Items.LIMESTONE_BRICK_3420, 5), new Item(15237, 1)),
- POLAR_HABITAT(new int[]
- {
- 44696,
- 44697,
- 44698,
- 44699,
- 44700,
- 44701,
- 44702,
- 44703,
- 44704,
- 44705,
- 44706,
- 44707,
- 44708,
- 44709,
- 44710,
- 44711,
- 44712,
- 44713,
- 44714,
- 44715,
- 44716,
- 44717,
- 44718,
- 44719,
- 44720,
- 44721,
- 44722,
- 44723,
- 44724,
- 44725,
- 44726,
- 44727,
- 44728,
- 44729,
- 44730,
- 44731,
- 44732,
- 44733,
- 44734,
- 44735,
- 44736,
- 44737,
- 44738,
- 44739,
- 44740,
- 44741,
- 44742,
- 44743,
- 44744,
- 44745,
- 44746,
- 44747,
- 44748,
- 44749,
- 44750,
- 44751,
- 44752,
- 44753,
- 44754,
- 44755,
- 44756,
- 44757,
- 44758,
- 44759,
- 44760,
- 44761 }, 15225, 67, 373, new Item(Items.AIR_RUNE_556, 1000), new Item(Items.WATER_RUNE_555, 1000), new Item(15239, 1)),
- VOLCANIC_HABITAT(new int[]
- {
- 44762,
- 44763,
- 44764,
- 44765,
- 44766,
- 44767,
- 44768,
- 44769,
- 44770,
- 44771,
- 44772,
- 44773,
- 44774,
- 44775,
- 44776,
- 44777,
- 44778,
- 44779,
- 44780,
- 44781,
- 44782,
- 44783,
- 44784,
- 44785,
- 44786,
- 44787,
- 44788,
- 44789,
- 44790,
- 44791,
- 44792,
- 44793,
- 44794,
- 44795,
- 44796,
- 44797,
- 44798,
- 44799,
- 44800,
- 44801,
- 44802,
- 44803,
- 44804,
- 44805,
- 44806,
- 44807,
- 44808,
- 44809,
- 44810,
- 44811,
- 44812,
- 44813,
- 44814,
- 44815,
- 44816,
- 44817,
- 44818,
- 44819,
- 44820,
- 44821,
- 44822,
- 44823,
- 44824,
- 44825,
- 44826,
- 44827 }, 15226, 77, 77, new Item(Items.FIRE_RUNE_554, 1000), new Item(Items.EARTH_RUNE_557, 1000), new Item(Items.BAGGED_DEAD_TREE_8417, 1), new Item(Items.STONE_SLAB_13245, 5)),
-
+ ANTIDRAGON_SHIELD(13522, 8282, 47, 280, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ANTI_DRAGON_SHIELD_1540) }, new Item[] { new Item(Items.ANTI_DRAGON_SHIELD_1540) }),
+ AMULET_OF_GLORY (13523, 8283, 47, 290, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.AMULET_OF_GLORY_1704) }, new Item[] { new Item(Items.AMULET_OF_GLORY_1704) }),
+ CAPE_OF_LEGENDS (13524, 8284, 47, 300, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.CAPE_OF_LEGENDS_1052) }, new Item[] { new Item(Items.CAPE_OF_LEGENDS_1052) }),
+ KING_ARTHUR (13510, 8285, 35, 211, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ARTHUR_PORTRAIT_7995) }),
+ ELENA (13511, 8286, 35, 211, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ELENA_PORTRAIT_7996) }),
+ GIANT_DWARF (13512, 8287, 35, 211, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.KELDAGRIM_PORTRAIT_7997) }),
+ MISCELLANIANS (13513, 8288, 35, 311, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.MISC_PORTRAIT_7998) }),
+ LUMBRIDGE (13517, 8289, 44, 314, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.LUMBRIDGE_PAINTING_8002) }),
+ THE_DESERT (13514, 8290, 44, 314, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.DESERT_PAINTING_7999) }),
+ MORYTANIA (13518, 8291, 44, 314, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.MORYTANIA_PAINTING_8003) }),
+ KARAMJA (13516, 8292, 65, 464, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.KARAMJA_PAINTING_8001) }),
+ ISAFDAR (13515, 8293, 65, 464, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.ISAFDAR_PAINTING_8000) }),
+ SILVERLIGHT (13519, 8279, 42, 187, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.SILVERLIGHT_2402) }, new Item[] { new Item(Items.SILVERLIGHT_2402) }),
+ EXCALIBUR (13521, 8280, 42, 194, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.EXCALIBUR_35) }, new Item[] { new Item(Items.EXCALIBUR_35) }),
+ DARKLIGHT (13520, 8281, 42, 202, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.DARKLIGHT_6746) }, new Item[] { new Item(Items.DARKLIGHT_6746) }),
+ SMALL_MAP (13525, 8294, 38, 211, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.SMALL_MAP_8004) }),
+ MEDIUM_MAP (13526, 8295, 58, 451, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.MEDIUM_MAP_8005) }),
+ LARGE_MAP (13527, 8296, 78, 591, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.LARGE_MAP_8006) }),
/**
* Study decorations.
*/
- GLOBE(13649, 8341, 41, 180, new Item(Items.OAK_PLANK_8778, 3)),
- ORNAMENTAL_GLOBE(13650, 8342, 50, 270, new Item(Items.TEAK_PLANK_8780, 3)),
- LUNAR_GLOBE(13651, 8343, 59, 570, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.GOLD_LEAF_8784, 1)),
- CELESTIAL_GLOBE(13652, 8344, 68, 570, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.GOLD_LEAF_8784, 1)),
- ARMILLARY_SPHERE(13653, 8345, 77, 960, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.GOLD_LEAF_8784, 2), new Item(Items.STEEL_BAR_2353, 4)),
- SMALL_ORREY(13654, 8346, 86, 1320, new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.GOLD_LEAF_8784, 3)),
- LARGE_ORREY(13655, 8347, 95, 1420, new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.GOLD_LEAF_8784, 5)),
- OAK_LECTERN(13642, 8334, 40, 60, new Item(Items.OAK_PLANK_8778, 1)),
- EAGLE_LECTERN(13643, 8335, 47, 120, new Item(Items.OAK_PLANK_8778, 2)),
- DEMON_LECTERN(13644, 8336, 47, 120, new Item(Items.OAK_PLANK_8778, 2)),
- TEAK_EAGLE_LECTERN(13645, 8337, 57, 180, new Item(Items.TEAK_PLANK_8780, 2)),
- TEAK_DEMON_LECTERN(13646, 8338, 57, 180, new Item(Items.TEAK_PLANK_8780, 2)),
- MAHOGANY_EAGLE_LECTERN(13647, 8339, 67, 580, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.GOLD_LEAF_8784, 1)),
- MAHOGANY_DEMON_LECTERN(13648, 8340, 67, 580, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.GOLD_LEAF_8784, 1)),
- CRYSTAL_BALL(13659, 8351, 42, 280, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.UNPOWERED_ORB_567, 1)),
- ELEMENTAL_SPHERE(13660, 8352, 54, 580, new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.UNPOWERED_ORB_567, 1), new Item(Items.GOLD_LEAF_8784, 1)),
- CRYSTAL_OF_POWER(13661, 8353, 66, 890, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.UNPOWERED_ORB_567, 1), new Item(Items.GOLD_LEAF_8784, 2)),
- ALCHEMICAL_CHART(13662, 8354, 43, 30, new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- ASTRONOMICAL_CHART(13663, 8355, 63, 45, new Item(Items.BOLT_OF_CLOTH_8790, 3)),
- INFERNAL_CHART(13664, 8356, 83, 60, new Item(Items.BOLT_OF_CLOTH_8790, 4)),
- TELESCOPE1(13656, 8348, 44, 121, new Item(Items.OAK_PLANK_8778, 2), new Item(Items.MOLTEN_GLASS_1775, 1)),
- TELESCOPE2(13657, 8349, 64, 181, new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775, 1)),
- TELESCOPE3(13658, 8350, 84, 580, new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.MOLTEN_GLASS_1775, 1)),
-
+ GLOBE (13649, 8341, 41, 180, new Item[] { new Item(Items.OAK_PLANK_8778, 3) }),
+ ORNAMENTAL_GLOBE (13650, 8342, 50, 270, new Item[] { new Item(Items.TEAK_PLANK_8780, 3) }),
+ LUNAR_GLOBE (13651, 8343, 59, 570, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.GOLD_LEAF_8784) }),
+ CELESTIAL_GLOBE (13652, 8344, 68, 570, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.GOLD_LEAF_8784) }),
+ ARMILLARY_SPHERE (13653, 8345, 77, 960, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.GOLD_LEAF_8784, 2), new Item(Items.STEEL_BAR_2353, 4) }),
+ SMALL_ORREY (13654, 8346, 86, 1320, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.GOLD_LEAF_8784, 3) }),
+ LARGE_ORREY (13655, 8347, 95, 1420, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.GOLD_LEAF_8784, 5) }),
+ OAK_LECTERN (13642, 8334, 40, 60, new Item[] { new Item(Items.OAK_PLANK_8778) }),
+ EAGLE_LECTERN (13643, 8335, 47, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ DEMON_LECTERN (13644, 8336, 47, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TEAK_EAGLE_LECTERN (13645, 8337, 57, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ TEAK_DEMON_LECTERN (13646, 8338, 57, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ MAHOGANY_EAGLE_LECTERN(13647, 8339, 67, 580, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.GOLD_LEAF_8784) }),
+ MAHOGANY_DEMON_LECTERN(13648, 8340, 67, 580, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.GOLD_LEAF_8784) }),
+ CRYSTAL_BALL (13659, 8351, 42, 280, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.UNPOWERED_ORB_567) }),
+ ELEMENTAL_SPHERE (13660, 8352, 54, 580, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.UNPOWERED_ORB_567), new Item(Items.GOLD_LEAF_8784) }),
+ CRYSTAL_OF_POWER (13661, 8353, 66, 890, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.UNPOWERED_ORB_567), new Item(Items.GOLD_LEAF_8784, 2) }),
+ ALCHEMICAL_CHART (13662, 8354, 43, 30, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ ASTRONOMICAL_CHART (13663, 8355, 63, 45, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 3) }),
+ INFERNAL_CHART (13664, 8356, 83, 60, new Item[] { new Item(Items.BOLT_OF_CLOTH_8790, 4) }),
+ TELESCOPE1 (13656, 8348, 44, 121, new Item[] { new Item(Items.OAK_PLANK_8778, 2), new Item(Items.MOLTEN_GLASS_1775) }),
+ TELESCOPE2 (13657, 8349, 64, 181, new Item[] { new Item(Items.TEAK_PLANK_8780, 2), new Item(Items.MOLTEN_GLASS_1775) }),
+ TELESCOPE3 (13658, 8350, 84, 580, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2), new Item(Items.MOLTEN_GLASS_1775) }),
+
/**
* Costume room decorations.
*/
- OAK_TREASURE_CHEST(18804, 9839, 48, 120, new Item(Items.OAK_PLANK_8778, 2)),
- TEAK_TREASURE_CHEST(18806, 9840, 66, 180, new Item(Items.TEAK_PLANK_8780, 2)),
- MAHOGANY_TREASURE_CHEST(18808, 9841, 84, 280, new Item(Items.MAHOGANY_PLANK_8782, 2)),
- OAK_ARMOUR_CASE(18778, 9826, 46, 180, new Item(Items.OAK_PLANK_8778, 3)),
- TEAK_ARMOUR_CASE(18780, 9827, 64, 270, new Item(Items.TEAK_PLANK_8780, 3)),
- MGANY_ARMOUR_CASE(18782, 9828, 82, 420, new Item(Items.MAHOGANY_PLANK_8782, 3)),
- OAK_MAGIC_WARDROBE(18784, 9829, 42, 240, new Item(Items.OAK_PLANK_8778, 4)),
- C_OAK_MAGIC_WARDROBE(18786, 9830, 51, 360, new Item(Items.OAK_PLANK_8778, 6)),
- TEAK_MAGIC_WARDROBE(18788, 9831, 60, 360, new Item(Items.TEAK_PLANK_8780, 4)),
- C_TEAK_MAGIC_WARDROBE(18790, 9832, 69, 540, new Item(Items.TEAK_PLANK_8780, 6)),
- MGANY_MAGIC_WARDROBE(18792, 9833, 78, 560, new Item(Items.MAHOGANY_PLANK_8782, 4)),
- GILDED_MAGIC_WARDROBE(18794, 9834, 87, 860, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 1)),
- MARBLE_MAGIC_WARDROBE(18796, 9835, 96, 500, new Item(Items.MARBLE_BLOCK_8786, 1)),
- OAK_CAPE_RACK(18766, 9817, 54, 240, new Item(Items.OAK_PLANK_8778, 4)),
- TEAK_CAPE_RACK(18767, 9818, 63, 360, new Item(Items.TEAK_PLANK_8780, 4)),
- MGANY_CAPE_RACK(18768, 9819, 72, 560, new Item(Items.MAHOGANY_PLANK_8782, 4)),
- GILDED_CAPE_RACK(18769, 9820, 81, 860, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 1)),
- MARBLE_CAPE_RACK(18770, 9821, 90, 500, new Item(Items.MARBLE_BLOCK_8786, 1)),
- MAGIC_CAPE_RACK(18771, 9822, 99, 1000, new Item(Items.MAGIC_STONE_8788, 1)),
- OAK_TOY_BOX(18798, 9836, 50, 120, new Item(Items.OAK_PLANK_8778, 2)),
- TEAK_TOY_BOX(18800, 9837, 68, 180, new Item(Items.TEAK_PLANK_8780, 2)),
- MAHOGANY_TOY_BOX(18802, 9838, 86, 280, new Item(Items.MAHOGANY_PLANK_8782, 2)),
- OAK_COSTUME_BOX(18772, 9823, 44, 120, new Item(Items.OAK_PLANK_8778, 2)),
- TEAK_COSTUME_BOX(18774, 9824, 62, 180, new Item(Items.TEAK_PLANK_8780, 2)),
- MAHOGANY_COSTUME_BOX(18776, 9825, 80, 280, new Item(Items.MAHOGANY_PLANK_8782, 2)),
-
+ OAK_TREASURE_CHEST (18804, 9839, 48, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TEAK_TREASURE_CHEST (18806, 9840, 66, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ MAHOGANY_TREASURE_CHEST(18808, 9841, 84, 280, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2) }),
+ OAK_ARMOUR_CASE (18778, 9826, 46, 180, new Item[] { new Item(Items.OAK_PLANK_8778, 3) }),
+ TEAK_ARMOUR_CASE (18780, 9827, 64, 270, new Item[] { new Item(Items.TEAK_PLANK_8780, 3) }),
+ MGANY_ARMOUR_CASE (18782, 9828, 82, 420, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3) }),
+ OAK_MAGIC_WARDROBE (18784, 9829, 42, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 4) }),
+ C_OAK_MAGIC_WARDROBE (18786, 9830, 51, 360, new Item[] { new Item(Items.OAK_PLANK_8778, 6) }),
+ TEAK_MAGIC_WARDROBE (18788, 9831, 60, 360, new Item[] { new Item(Items.TEAK_PLANK_8780, 4) }),
+ C_TEAK_MAGIC_WARDROBE (18790, 9832, 69, 540, new Item[] { new Item(Items.TEAK_PLANK_8780, 6) }),
+ MGANY_MAGIC_WARDROBE (18792, 9833, 78, 560, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4) }),
+ GILDED_MAGIC_WARDROBE (18794, 9834, 87, 860, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784) }),
+ MARBLE_MAGIC_WARDROBE (18796, 9835, 96, 500, new Item[] { new Item(Items.MARBLE_BLOCK_8786) }),
+ OAK_CAPE_RACK (18766, 9817, 54, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 4) }),
+ TEAK_CAPE_RACK (18767, 9818, 63, 360, new Item[] { new Item(Items.TEAK_PLANK_8780, 4) }),
+ MGANY_CAPE_RACK (18768, 9819, 72, 560, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4) }),
+ GILDED_CAPE_RACK (18769, 9820, 81, 860, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784) }),
+ MARBLE_CAPE_RACK (18770, 9821, 90, 500, new Item[] { new Item(Items.MARBLE_BLOCK_8786) }),
+ MAGIC_CAPE_RACK (18771, 9822, 99, 1000, new Item[] { new Item(Items.MAGIC_STONE_8788) }),
+ OAK_TOY_BOX (18798, 9836, 50, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TEAK_TOY_BOX (18800, 9837, 68, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ MAHOGANY_TOY_BOX (18802, 9838, 86, 280, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2) }),
+ OAK_COSTUME_BOX (18772, 9823, 44, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TEAK_COSTUME_BOX (18774, 9824, 62, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ MAHOGANY_COSTUME_BOX (18776, 9825, 80, 280, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 2) }),
+
/**
* Chapel decorations.
*/
- OAK_ALTAR(13179, 8062, 45, 240, new Item(Items.OAK_PLANK_8778, 4)),
- TEAK_ALTAR(13182, 8063, 50, 360, new Item(Items.TEAK_PLANK_8780, 4)),
- CLOTH_ALTAR(13185, 8064, 56, 390, new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- MAHOGANY_ALTAR(13188, 8065, 60, 590, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- LIMESTONE_ALTAR(13191, 8066, 64, 910, new Item(Items.MAHOGANY_PLANK_8782, 6), new Item(Items.BOLT_OF_CLOTH_8790, 2), new Item(Items.LIMESTONE_BRICK_3420, 2)),
- MARBLE_ALTAR(13194, 8067, 70, 1030, new Item(Items.MARBLE_BLOCK_8786, 2), new Item(Items.BOLT_OF_CLOTH_8790, 2)),
- GILDED_ALTAR(13197, 8068, 75, 2230, new Item(Items.MARBLE_BLOCK_8786, 2), new Item(Items.BOLT_OF_CLOTH_8790, 2), new Item(Items.GOLD_LEAF_8784, 4)),
- SMALL_STATUE(13271, 8082, 49, 40, new Item(Items.LIMESTONE_BRICK_3420, 2)),
- MEDIUM_STATUE(13272, 8083, 69, 500, new Item(Items.MARBLE_BLOCK_8786, 1)),
- LARGE_STATUE(13282, 8084, 89, 1500, new Item(Items.MARBLE_BLOCK_8786, 3)),
- WINDCHIMES(13214, 8079, 49, 323, new Item(Items.OAK_PLANK_8778, 4), new Item(Items.STEEL_BAR_2353, 4)),
- BELLS(13215, 8080, 58, 480, new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.STEEL_BAR_2353, 6)),
- ORGAN(13216, 8081, 69, 680, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.STEEL_BAR_2353, 6)),
- SARADOMIN_SYMBOL(13172, 8055, 48, 120, new Item(Items.OAK_PLANK_8778, 2)),
- ZAMORAK_SYMBOL(13173, 8056, 48, 120, new Item(Items.OAK_PLANK_8778, 2)),
- GUTHIX_SYMBOL(13174, 8057, 48, 120, new Item(Items.OAK_PLANK_8778, 2)),
- SARADOMIN_ICON(13175, 8058, 59, 960, new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.GOLD_LEAF_8784, 2)),
- ZAMORAK_ICON(13176, 8059, 59, 960, new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.GOLD_LEAF_8784, 2)),
- GUTHIX_ICON(13177, 8060, 59, 960, new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.GOLD_LEAF_8784, 2)),
- ICON_OF_BOB(13178, 8061, 71, 1160, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 2)),
- STEEL_TORCHES(13202, 8070, 45, 80, new Item(Items.STEEL_BAR_2353, 2)),
- WOODEN_TORCHES(13200, 8069, 49, 58, new Item(Items.PLANK_960, 2)),
- STEEL_CANDLESTICKS(13204, 8071, 53, 124, new Item(Items.STEEL_BAR_2353, 6), new Item(Items.CANDLE_36, 6)),
- GOLD_CANDLESTICKS(13206, 8072, 57, 46, new Item(Items.GOLD_BAR_2357, 6), new Item(Items.CANDLE_36, 6)),
- INCENSE_BURNERS(13208, 8073, 61, 280, new Item(Items.OAK_PLANK_8778, 4), new Item(Items.STEEL_BAR_2353, 2)),
- MAHOGANY_BURNERS(13210, 8074, 65, 600, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.STEEL_BAR_2353, 2)),
- MARBLE_BURNERS(13212, 8075, 69, 1600, new Item(Items.MARBLE_BLOCK_8786, 2), new Item(Items.STEEL_BAR_2353, 2)),
- SHUTTERED_WINDOW(new int[] { 13253, 13226, 13235, 13244, 13217, 13262 }, 8076, 49, 228, new Item(Items.PLANK_960, 8)),
- DECORATIVE_WINDOW(new int[] { 13254, 13227, 13236, 13245, 13218, 13263 }, 8077, 69, 200, new Item(Items.MOLTEN_GLASS_1775, 8)),
- STAINED_GLASS(new int[] { 13255, 13228, 13237, 13246, 13219, 13264 }, 8078, 89, 400, new Item(Items.MOLTEN_GLASS_1775, 16)),
+ OAK_ALTAR (13179, 8062, 45, 240, new Item[] { new Item(Items.OAK_PLANK_8778, 4) }),
+ TEAK_ALTAR (13182, 8063, 50, 360, new Item[] { new Item(Items.TEAK_PLANK_8780, 4) }),
+ CLOTH_ALTAR (13185, 8064, 56, 390, new Item[] { new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ MAHOGANY_ALTAR (13188, 8065, 60, 590, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ LIMESTONE_ALTAR (13191, 8066, 64, 910, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 6), new Item(Items.BOLT_OF_CLOTH_8790, 2), new Item(Items.LIMESTONE_BRICK_3420, 2) }),
+ MARBLE_ALTAR (13194, 8067, 70, 1030, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 2), new Item(Items.BOLT_OF_CLOTH_8790, 2) }),
+ GILDED_ALTAR (13197, 8068, 75, 2230, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 2), new Item(Items.BOLT_OF_CLOTH_8790, 2), new Item(Items.GOLD_LEAF_8784, 4) }),
+ SMALL_STATUE (13271, 8082, 49, 40, new Item[] { new Item(Items.LIMESTONE_BRICK_3420, 2) }),
+ MEDIUM_STATUE (13272, 8083, 69, 500, new Item[] { new Item(Items.MARBLE_BLOCK_8786) }),
+ LARGE_STATUE (13282, 8084, 89, 1500, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 3) }),
+ WINDCHIMES (13214, 8079, 49, 323, new Item[] { new Item(Items.OAK_PLANK_8778, 4), new Item(Items.STEEL_BAR_2353, 4) }),
+ BELLS (13215, 8080, 58, 480, new Item[] { new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.STEEL_BAR_2353, 6) }),
+ ORGAN (13216, 8081, 69, 680, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.STEEL_BAR_2353, 6) }),
+ SARADOMIN_SYMBOL (13172, 8055, 48, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ ZAMORAK_SYMBOL (13173, 8056, 48, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ GUTHIX_SYMBOL (13174, 8057, 48, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ SARADOMIN_ICON (13175, 8058, 59, 960, new Item[] { new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.GOLD_LEAF_8784, 2) }),
+ ZAMORAK_ICON (13176, 8059, 59, 960, new Item[] { new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.GOLD_LEAF_8784, 2) }),
+ GUTHIX_ICON (13177, 8060, 59, 960, new Item[] { new Item(Items.TEAK_PLANK_8780, 4), new Item(Items.GOLD_LEAF_8784, 2) }),
+ ICON_OF_BOB (13178, 8061, 71, 1160, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 2) }),
+ STEEL_TORCHES (13202, 8070, 45, 80, new Item[] { new Item(Items.STEEL_BAR_2353, 2) }),
+ WOODEN_TORCHES (13200, 8069, 49, 58, new Item[] { new Item(Items.PLANK_960, 2) }),
+ STEEL_CANDLESTICKS(13204, 8071, 53, 124, new Item[] { new Item(Items.STEEL_BAR_2353, 6), new Item(Items.CANDLE_36, 6) }),
+ GOLD_CANDLESTICKS (13206, 8072, 57, 46, new Item[] { new Item(Items.GOLD_BAR_2357, 6), new Item(Items.CANDLE_36, 6) }),
+ INCENSE_BURNERS (13208, 8073, 61, 280, new Item[] { new Item(Items.OAK_PLANK_8778, 4), new Item(Items.STEEL_BAR_2353, 2) }),
+ MAHOGANY_BURNERS (13210, 8074, 65, 600, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.STEEL_BAR_2353, 2) }),
+ MARBLE_BURNERS (13212, 8075, 69, 1600, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 2), new Item(Items.STEEL_BAR_2353, 2) }),
+ SHUTTERED_WINDOW (new int[] { 13253, 13226, 13235, 13244, 13217, 13262 }, 8076, 49, 228, new Item[] { new Item(Items.PLANK_960, 8) }),
+ DECORATIVE_WINDOW (new int[] { 13254, 13227, 13236, 13245, 13218, 13263 }, 8077, 69, 200, new Item[] { new Item(Items.MOLTEN_GLASS_1775, 8) }),
+ STAINED_GLASS (new int[] { 13255, 13228, 13237, 13246, 13219, 13264 }, 8078, 89, 400, new Item[] { new Item(Items.MOLTEN_GLASS_1775, 16) }),
/**
* Throne room
*/
- OAK_THRONE(13665, 8357, 60, 800, new Item(Items.OAK_PLANK_8778, 5), new Item(Items.MARBLE_BLOCK_8786, 1)),
- TEAK_THRONE(13666, 8358, 67, 1450, new Item(Items.TEAK_PLANK_8780, 5), new Item(Items.MARBLE_BLOCK_8786, 2)),
- MAHOGANY_THRONE(13667, 8359, 74, 2200, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MARBLE_BLOCK_8786, 3)),
- GILDED_THRONE(13668, 8360, 81, 1700, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MARBLE_BLOCK_8786, 2), new Item(Items.GOLD_LEAF_8784, 3)),
- SKELETON_THRONE(13669, 8361, 88, 7003, new Item(Items.MAGIC_STONE_8788, 5), new Item(Items.MARBLE_BLOCK_8786, 4), new Item(Items.BONES_526, 5), new Item(Items.SKULL_964, 2)),
- CRYSTAL_THRONE(13670, 8362, 95, 15000, new Item(Items.MAGIC_STONE_8788, 15)),
- DEMONIC_THRONE(13671, 8363, 99, 25000, new Item(Items.MAGIC_STONE_8788, 25)),
- OAK_LEVER(13672, 8364, 68, 300, new Item(Items.OAK_PLANK_8778, 5)),
- TEAK_LEVER(13673, 8365, 78, 450, new Item(Items.TEAK_PLANK_8780, 5)),
- MAHOGANY_LEVER(13674, 8366, 88, 700, new Item(Items.MAHOGANY_PLANK_8782, 5)),
- FLOOR_DECORATION(new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8370, 61, 700, new Item(Items.MAHOGANY_PLANK_8782, 5)),
- STEEL_CAGE(new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8371, 68, 1100, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.STEEL_BAR_2353, 20)),
- FLOOR_TRAP(new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8372, 74, 770, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.CLOCKWORK_8792, 10)),
- MAGIC_CIRCLE(new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8373, 82, 2700, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MAGIC_STONE_8788, 2)),
- MAGIC_CAGE(new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8374, 89, 4700, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MAGIC_STONE_8788, 4)),
- OAK_TRAPDOOR(13675, 8367, 68, 300, new Item(Items.OAK_PLANK_8778, 5)),
- TEAK_TRAPDOOR(13676, 8368, 78, 450, new Item(Items.TEAK_PLANK_8780, 5)),
- MAHOGANY_TRAPDOOR(13677, 8369, 88, 700, new Item(Items.MAHOGANY_PLANK_8782, 5)),
- CARVED_TEAK_BENCH(13694, 8112, 44, 360, new Item(Items.TEAK_PLANK_8780, 4)),
- MAHOGANY_BENCH(13695, 8113, 52, 560, new Item(Items.MAHOGANY_PLANK_8782, 4)),
- GILDED_BENCH(13696, 8114, 61, 1760, new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 4)),
- OAK_DECO(13798, 8102, 16, 120.0, new Item(Items.OAK_PLANK_8778, 2)),
- TEAK_DECO(13814, 8103, 36, 180.0, new Item(Items.TEAK_PLANK_8780, 2)),
- GILDED_DECO(13782, 8104, 56, 1020.0, new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.GOLD_LEAF_8784, 2)),
- ROUND_SHIELD(13734, 8105, 66, 120, new Item(Items.OAK_PLANK_8778, 2)),
- SQUARE_SHIELD(13766, 8106, 76, 360, new Item(Items.TEAK_PLANK_8780, 4)),
- KITE_SHIELD(13750, 8107, 86, 420, new Item(Items.MAHOGANY_PLANK_8782, 3)),
-
+ OAK_THRONE (13665, 8357, 60, 800, new Item[] { new Item(Items.OAK_PLANK_8778, 5), new Item(Items.MARBLE_BLOCK_8786) }),
+ TEAK_THRONE (13666, 8358, 67, 1450, new Item[] { new Item(Items.TEAK_PLANK_8780, 5), new Item(Items.MARBLE_BLOCK_8786, 2) }),
+ MAHOGANY_THRONE (13667, 8359, 74, 2200, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MARBLE_BLOCK_8786, 3) }),
+ GILDED_THRONE (13668, 8360, 81, 1700, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MARBLE_BLOCK_8786, 2), new Item(Items.GOLD_LEAF_8784, 3) }),
+ SKELETON_THRONE (13669, 8361, 88, 7003, new Item[] { new Item(Items.MAGIC_STONE_8788, 5), new Item(Items.MARBLE_BLOCK_8786, 4), new Item(Items.BONES_526, 5), new Item(Items.SKULL_964, 2) }),
+ CRYSTAL_THRONE (13670, 8362, 95, 15000, new Item[] { new Item(Items.MAGIC_STONE_8788, 15) }),
+ DEMONIC_THRONE (13671, 8363, 99, 25000, new Item[] { new Item(Items.MAGIC_STONE_8788, 25) }),
+ OAK_LEVER (13672, 8364, 68, 300, new Item[] { new Item(Items.OAK_PLANK_8778, 5) }),
+ TEAK_LEVER (13673, 8365, 78, 450, new Item[] { new Item(Items.TEAK_PLANK_8780, 5) }),
+ MAHOGANY_LEVER (13674, 8366, 88, 700, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5) }),
+ FLOOR_DECORATION (new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8370, 61, 700, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5) }),
+ STEEL_CAGE (new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8371, 68, 1100, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.STEEL_BAR_2353, 20) }),
+ FLOOR_TRAP (new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8372, 74, 770, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.CLOCKWORK_8792, 10) }),
+ MAGIC_CIRCLE (new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8373, 82, 2700, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MAGIC_STONE_8788, 2) }),
+ MAGIC_CAGE (new int[] { 13689, 13686, 13687, 13688, 13684, 13685 }, 8374, 89, 4700, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.MAGIC_STONE_8788, 4) }),
+ OAK_TRAPDOOR (13675, 8367, 68, 300, new Item[] { new Item(Items.OAK_PLANK_8778, 5) }),
+ TEAK_TRAPDOOR (13676, 8368, 78, 450, new Item[] { new Item(Items.TEAK_PLANK_8780, 5) }),
+ MAHOGANY_TRAPDOOR(13677, 8369, 88, 700, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5) }),
+ CARVED_TEAK_BENCH(13694, 8112, 44, 360, new Item[] { new Item(Items.TEAK_PLANK_8780, 4) }),
+ MAHOGANY_BENCH (13695, 8113, 52, 560, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4) }),
+ GILDED_BENCH (13696, 8114, 61, 1760, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 4), new Item(Items.GOLD_LEAF_8784, 4) }),
+ OAK_DECO (13798, 8102, 16, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ TEAK_DECO (13814, 8103, 36, 180, new Item[] { new Item(Items.TEAK_PLANK_8780, 2) }),
+ GILDED_DECO (13782, 8104, 56, 1020, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3), new Item(Items.GOLD_LEAF_8784, 2) }),
+ ROUND_SHIELD (13734, 8105, 66, 120, new Item[] { new Item(Items.OAK_PLANK_8778, 2) }),
+ SQUARE_SHIELD (13766, 8106, 76, 360, new Item[] { new Item(Items.TEAK_PLANK_8780, 4) }),
+ KITE_SHIELD (13750, 8107, 86, 420, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 3) }),
+
/**
* Oubliette
*/
- SPIKES_MID(13334, 8302, 65, 623, new Item(Items.STEEL_BAR_2353, 20), new Item(Items.COINS_995, 50000)),
- SPIKES_SIDE(13335, 8302, 65, 623, new Item(Items.STEEL_BAR_2353, 20), new Item(Items.COINS_995, 50000)),
- SPIKES_CORNER(13336, 8302, 65, 623, new Item(Items.STEEL_BAR_2353, 20), new Item(Items.COINS_995, 50000)),
- SPIKES_FL(13338, 8302, 65, 623, new Item(Items.STEEL_BAR_2353, 20), new Item(Items.COINS_995, 50000)),
- TENTACLE_MID(13331, 8303, 71, 326, new Item(Items.BUCKET_OF_WATER_1929, 20), new Item(Items.COINS_995, 100000)),
- TENTACLE_SIDE(13332, 8303, 71, 326, new Item(Items.BUCKET_OF_WATER_1929, 20), new Item(Items.COINS_995, 100000)),
- TENTACLE_CORNER(13333, 8303, 71, 326, new Item(Items.BUCKET_OF_WATER_1929, 20), new Item(Items.COINS_995, 100000)),
- TENTACLE_FL(13338, 8303, 71, 326, new Item(Items.BUCKET_OF_WATER_1929, 20), new Item(Items.COINS_995, 100000)),
- FP_FLOOR_MID(13371, 8304, 77, 357, new Item(Items.TINDERBOX_590, 20), new Item(Items.COINS_995, 125000)),
- FP_FLOOR_SIDE(13371, 8304, 77, 357, new Item(Items.TINDERBOX_590, 20), new Item(Items.COINS_995, 125000)),
- FP_FLOOR_CORNER(13371, 8304, 77, 357, new Item(Items.TINDERBOX_590, 20), new Item(Items.COINS_995, 125000)),
- FLAME_PIT(13337, 8304, 77, 357, new Item(Items.TINDERBOX_590, 20), new Item(Items.COINS_995, 125000)),
- ROCNAR_FLOOR_MID(13371, 8305, 83, 387, new Item(Items.COINS_995, 150000)),
- ROCNAR_FLOOR_SIDE(13371, 8305, 83, 387, new Item(Items.COINS_995, 150000)),
- ROCNAR_FLOOR_CORNER(13371, 8305, 83, 387, new Item(Items.COINS_995, 150000)),
- ROCNAR(13373, 8305, 83, 387, new Item(Items.COINS_995, 150000)),
- ROCNAR_FL(13338, 8305, 83, 387, new Item(Items.COINS_995, 150000)),
- OAK_CAGE(13313, 8297, 65, 640, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 2)),
- OAK_CAGE_DOOR(13314, 8297, 65, 640, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 2)),
- OAK_STEEL_CAGE(13316, 8298, 70, 800, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 10)),
- OAK_STEEL_CAGE_DOOR(13317, 8298, 70, 800, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 10)),
- STEEL_CAGE_OU(13319, 8299, 75, 400, new Item(Items.STEEL_BAR_2353, 20)),
- STEEL_CAGE_DOOR(13320, 8299, 75, 400, new Item(Items.STEEL_BAR_2353, 20)),
- SPIKED_CAGE(13322, 8300, 80, 500, new Item(Items.STEEL_BAR_2353, 25)),
- SPIKED_CAGE_DOOR(13323, 8300, 80, 500, new Item(Items.STEEL_BAR_2353, 25)),
- BONE_CAGE(13325, 8301, 85, 603, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.BONES_526, 10)),
- BONE_CAGE_DOOR(13326, 8301, 85, 603, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.BONES_526, 10)),
- SKELETON_GUARD(13366, 8131, 70, 223, new Item(Items.COINS_995, 50000)),
- GUARD_DOG(13367, 8132, 74, 273, new Item(Items.COINS_995, 75000)),
- HOBGOBLIN(13368, 8133, 78, 316, new Item(Items.COINS_995, 100000)),
- BABY_RED_DRAGON(13372, 8134, 82, 387, new Item(Items.COINS_995, 150000)),
- HUGE_SPIDER(13370, 8135, 86, 447, new Item(Items.COINS_995, 200000)),
- TROLL(13369, 8136, 90, 1000, new Item(Items.COINS_995, 1000000)),
- HELLHOUND(2715, 8137, 94, 2236, new Item(Items.COINS_995, 5000000)),
- OAK_LADDER(13328, 8306, 68, 300, new Item(Items.OAK_PLANK_8778, 5)),
- TEAK_LADDER(13329, 8307, 78, 450, new Item(Items.TEAK_PLANK_8780, 5)),
- MAHOGANY_LADDER(13330, 8308, 88, 700, new Item(Items.MAHOGANY_PLANK_8782, 5)),
- DECORATIVE_BLOOD(13312, 8125, 72, 4, new Item(Items.RED_DYE_1763, 4)),
- DECORATIVE_PIPE(13311, 8126, 83, 120, new Item(Items.STEEL_BAR_2353, 6)),
- HANGING_SKELETON(13310, 8127, 94, 3, new Item(Items.SKULL_964, 2), new Item(Items.BONES_526, 6)),
- CANDLE(13342, 8128, 72, 243, new Item(Items.OAK_PLANK_8778, 4), new Item(Items.LIT_CANDLE_33, 4)),
- TORCH(13341, 8129, 84, 244, new Item(Items.OAK_PLANK_8778, 4), new Item(Items.LIT_TORCH_594, 4)),
- SKULL_TORCH(13343, 8130, 94, 246, new Item(Items.OAK_PLANK_8778, 4), new Item(Items.LIT_TORCH_594, 4), new Item(Items.SKULL_964, 4)),
-
+ SPIKES_MID (13334, 8302, 65, 623, new Item[] { new Item(Items.STEEL_BAR_2353, 20), new Item(Items.COINS_995, 50000) }),
+ SPIKES_SIDE (13335, 8302, 65, 623, new Item[] { new Item(Items.STEEL_BAR_2353, 20), new Item(Items.COINS_995, 50000) }),
+ SPIKES_CORNER (13336, 8302, 65, 623, new Item[] { new Item(Items.STEEL_BAR_2353, 20), new Item(Items.COINS_995, 50000) }),
+ SPIKES_FL (13338, 8302, 65, 623, new Item[] { new Item(Items.STEEL_BAR_2353, 20), new Item(Items.COINS_995, 50000) }),
+ TENTACLE_MID (13331, 8303, 71, 326, new Item[] { new Item(Items.BUCKET_OF_WATER_1929, 20), new Item(Items.COINS_995, 100000) }),
+ TENTACLE_SIDE (13332, 8303, 71, 326, new Item[] { new Item(Items.BUCKET_OF_WATER_1929, 20), new Item(Items.COINS_995, 100000) }),
+ TENTACLE_CORNER (13333, 8303, 71, 326, new Item[] { new Item(Items.BUCKET_OF_WATER_1929, 20), new Item(Items.COINS_995, 100000) }),
+ TENTACLE_FL (13338, 8303, 71, 326, new Item[] { new Item(Items.BUCKET_OF_WATER_1929, 20), new Item(Items.COINS_995, 100000) }),
+ FP_FLOOR_MID (13371, 8304, 77, 357, new Item[] { new Item(Items.TINDERBOX_590, 20), new Item(Items.COINS_995, 125000) }),
+ FP_FLOOR_SIDE (13371, 8304, 77, 357, new Item[] { new Item(Items.TINDERBOX_590, 20), new Item(Items.COINS_995, 125000) }),
+ FP_FLOOR_CORNER (13371, 8304, 77, 357, new Item[] { new Item(Items.TINDERBOX_590, 20), new Item(Items.COINS_995, 125000) }),
+ FLAME_PIT (13337, 8304, 77, 357, new Item[] { new Item(Items.TINDERBOX_590, 20), new Item(Items.COINS_995, 125000) }),
+ ROCNAR_FLOOR_MID (13371, 8305, 83, 387, new Item[] { new Item(Items.COINS_995, 150000) }),
+ ROCNAR_FLOOR_SIDE (13371, 8305, 83, 387, new Item[] { new Item(Items.COINS_995, 150000) }),
+ ROCNAR_FLOOR_CORNER(13371, 8305, 83, 387, new Item[] { new Item(Items.COINS_995, 150000) }),
+ ROCNAR (13373, 8305, 83, 387, new Item[] { new Item(Items.COINS_995, 150000) }),
+ ROCNAR_FL (13338, 8305, 83, 387, new Item[] { new Item(Items.COINS_995, 150000) }),
+ OAK_CAGE (13313, 8297, 65, 640, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 2) }),
+ OAK_CAGE_DOOR (13314, 8297, 65, 640, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 2) }),
+ OAK_STEEL_CAGE (13316, 8298, 70, 800, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 10) }),
+ OAK_STEEL_CAGE_DOOR(13317, 8298, 70, 800, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 10) }),
+ STEEL_CAGE_OU (13319, 8299, 75, 400, new Item[] { new Item(Items.STEEL_BAR_2353, 20) }),
+ STEEL_CAGE_DOOR (13320, 8299, 75, 400, new Item[] { new Item(Items.STEEL_BAR_2353, 20) }),
+ SPIKED_CAGE (13322, 8300, 80, 500, new Item[] { new Item(Items.STEEL_BAR_2353, 25) }),
+ SPIKED_CAGE_DOOR (13323, 8300, 80, 500, new Item[] { new Item(Items.STEEL_BAR_2353, 25) }),
+ BONE_CAGE (13325, 8301, 85, 603, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.BONES_526, 10) }),
+ BONE_CAGE_DOOR (13326, 8301, 85, 603, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.BONES_526, 10) }),
+ SKELETON_GUARD (13366, 8131, 70, 223, new Item[] { new Item(Items.COINS_995, 50000) }),
+ GUARD_DOG (13367, 8132, 74, 273, new Item[] { new Item(Items.COINS_995, 75000) }),
+ HOBGOBLIN (13368, 8133, 78, 316, new Item[] { new Item(Items.COINS_995, 100000) }),
+ BABY_RED_DRAGON (13372, 8134, 82, 387, new Item[] { new Item(Items.COINS_995, 150000) }),
+ HUGE_SPIDER (13370, 8135, 86, 447, new Item[] { new Item(Items.COINS_995, 200000) }),
+ TROLL (13369, 8136, 90, 1000, new Item[] { new Item(Items.COINS_995, 1000000) }),
+ HELLHOUND (2715, 8137, 94, 2236, new Item[] { new Item(Items.COINS_995, 5000000) }),
+ OAK_LADDER (13328, 8306, 68, 300, new Item[] { new Item(Items.OAK_PLANK_8778, 5) }),
+ TEAK_LADDER (13329, 8307, 78, 450, new Item[] { new Item(Items.TEAK_PLANK_8780, 5) }),
+ MAHOGANY_LADDER (13330, 8308, 88, 700, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5) }),
+ DECORATIVE_BLOOD (13312, 8125, 72, 4, new Item[] { new Item(Items.RED_DYE_1763, 4) }),
+ DECORATIVE_PIPE (13311, 8126, 83, 120, new Item[] { new Item(Items.STEEL_BAR_2353, 6) }),
+ HANGING_SKELETON (13310, 8127, 94, 3, new Item[] { new Item(Items.SKULL_964, 2), new Item(Items.BONES_526, 6) }),
+ CANDLE (13342, 8128, 72, 243, new Item[] { new Item(Items.OAK_PLANK_8778, 4), new Item(Items.LIT_CANDLE_33, 4) }),
+ TORCH (13341, 8129, 84, 244, new Item[] { new Item(Items.OAK_PLANK_8778, 4), new Item(Items.LIT_TORCH_594, 4) }),
+ SKULL_TORCH (13343, 8130, 94, 246, new Item[] { new Item(Items.OAK_PLANK_8778, 4), new Item(Items.LIT_TORCH_594, 4), new Item(Items.SKULL_964, 4) }),
+
/**
* Dungeon corridor, junction, stairs & pit
*/
- OAK_DOOR_LEFT(13344, 8122, 74, 600, new Item(Items.OAK_PLANK_8778, 10)),
- OAK_DOOR_RIGHT(13345, 8122, 74, 600, new Item(Items.OAK_PLANK_8778, 10)),
- STEEL_DOOR_LEFT(13346, 8123, 84, 800, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 10)),
- STEEL_DOOR_RIGHT(13347, 8123, 84, 800, new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 10)),
- MARBLE_DOOR_LEFT(13348, 8124, 94, 2000, new Item(Items.MARBLE_BLOCK_8786, 4)),
- MARBLE_DOOR_RIGHT(13349, 8124, 94, 2000, new Item(Items.MARBLE_BLOCK_8786, 4)),
- SPIKE_TRAP(13356, 8143, 72, 223, new Item(Items.COINS_995, 50000)),
- MAN_TRAP(13357, 8144, 76, 273, new Item(Items.COINS_995, 75000)),
- TANGLE_TRAP(13358, 8145, 80, 316, new Item(Items.COINS_995, 100000)),
- MARBLE_TRAP(13359, 8146, 84, 387, new Item(Items.COINS_995, 150000)),
- TELEPORT_TRAP(13360, 8147, 88, 447, new Item(Items.COINS_995, 200000)),
-
- /* objID, int, lvl, exp, materials */
- PIT_DOG(39260, 18791, 70, 200, new Item(Items.COINS_995, 40000)),
- PIT_OGRE(39261, 18792, 73, 234, new Item(Items.COINS_995, 55000)),
- PIT_ROCK_PROTECTOR(39262, 18793, 79, 300, new Item(Items.COINS_995, 90000)),
- PIT_SCABARITE(39263, 18794, 84, 387, new Item(Items.COINS_995, 150000)),
- PIT_BLACK_DEMON(39264, 18795, 89, 547, new Item(Items.COINS_995, 300000)),
- PIT_IRON_DRAGON(39265, 18796, 97, 2738, new Item(Items.COINS_995, 7500000)),
+ OAK_DOOR_LEFT (13344, 8122, 74, 600, new Item[] { new Item(Items.OAK_PLANK_8778, 10) }),
+ OAK_DOOR_RIGHT (13345, 8122, 74, 600, new Item[] { new Item(Items.OAK_PLANK_8778, 10) }),
+ STEEL_DOOR_LEFT (13346, 8123, 84, 800, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 10) }),
+ STEEL_DOOR_RIGHT (13347, 8123, 84, 800, new Item[] { new Item(Items.OAK_PLANK_8778, 10), new Item(Items.STEEL_BAR_2353, 10) }),
+ MARBLE_DOOR_LEFT (13348, 8124, 94, 2000, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 4) }),
+ MARBLE_DOOR_RIGHT (13349, 8124, 94, 2000, new Item[] { new Item(Items.MARBLE_BLOCK_8786, 4) }),
+ SPIKE_TRAP (13356, 8143, 72, 223, new Item[] { new Item(Items.COINS_995, 50000) }),
+ MAN_TRAP (13357, 8144, 76, 273, new Item[] { new Item(Items.COINS_995, 75000) }),
+ TANGLE_TRAP (13358, 8145, 80, 316, new Item[] { new Item(Items.COINS_995, 100000) }),
+ MARBLE_TRAP (13359, 8146, 84, 387, new Item[] { new Item(Items.COINS_995, 150000) }),
+ TELEPORT_TRAP (13360, 8147, 88, 447, new Item[] { new Item(Items.COINS_995, 200000) }),
+ PIT_DOG (39260, 18791, 70, 200, new Item[] { new Item(Items.COINS_995, 40000) }),
+ PIT_OGRE (39261, 18792, 73, 234, new Item[] { new Item(Items.COINS_995, 55000) }),
+ PIT_ROCK_PROTECTOR(39262, 18793, 79, 300, new Item[] { new Item(Items.COINS_995, 90000) }),
+ PIT_SCABARITE (39263, 18794, 84, 387, new Item[] { new Item(Items.COINS_995, 150000) }),
+ PIT_BLACK_DEMON (39264, 18795, 89, 547, new Item[] { new Item(Items.COINS_995, 300000) }),
+ PIT_IRON_DRAGON (39265, 18796, 97, 2738, new Item[] { new Item(Items.COINS_995, 7500000) }),
/**
* Treasure room
*/
- DEMON(13378, 8138, 75, 707, new Item(Items.COINS_995, 500000)),
- KALPHITE_SOLDIER(13374, 8139, 80, 866, new Item(Items.COINS_995, 750000)),
- TOK_XIL(13377, 8140, 85, 2236, new Item(Items.COINS_995, 5000000)),
- DAGANNOTH(13376, 8141, 90, 2738, new Item(Items.COINS_995, 7500000)),
- STEEL_DRAGON(13375, 8142, 95, 3162, new Item(Items.COINS_995, 1000000)),
- WOODEN_CRATE(13283, 8148, 75, 143, new Item(Items.PLANK_960, 5)),
- OAK_T_CHEST(13285, 8149, 79, 340, new Item(Items.OAK_PLANK_8778, 5), new Item(Items.STEEL_BAR_2353, 2)),
- TEAK_T_CHEST(13287, 8150, 83, 530, new Item(Items.TEAK_PLANK_8780, 5), new Item(Items.STEEL_BAR_2353, 4)),
- MGANY_T_CHEST(13289, 8151, 87, 1000, new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.GOLD_LEAF_8784, 1)),
- MAGIC_CHEST(13291, 8152, 91, 1000, new Item(Items.MAGIC_STONE_8788, 1)),
-
+ DEMON (13378, 8138, 75, 707, new Item[] { new Item(Items.COINS_995, 500000) }),
+ KALPHITE_SOLDIER (13374, 8139, 80, 866, new Item[] { new Item(Items.COINS_995, 750000) }),
+ TOK_XIL (13377, 8140, 85, 2236, new Item[] { new Item(Items.COINS_995, 5000000) }),
+ DAGANNOTH (13376, 8141, 90, 2738, new Item[] { new Item(Items.COINS_995, 7500000) }),
+ STEEL_DRAGON (13375, 8142, 95, 3162, new Item[] { new Item(Items.COINS_995, 1000000) }),
+ WOODEN_CRATE (13283, 8148, 75, 143, new Item[] { new Item(Items.PLANK_960, 5) }),
+ OAK_T_CHEST (13285, 8149, 79, 340, new Item[] { new Item(Items.OAK_PLANK_8778, 5), new Item(Items.STEEL_BAR_2353, 2) }),
+ TEAK_T_CHEST (13287, 8150, 83, 530, new Item[] { new Item(Items.TEAK_PLANK_8780, 5), new Item(Items.STEEL_BAR_2353, 4) }),
+ MGANY_T_CHEST (13289, 8151, 87, 1000, new Item[] { new Item(Items.MAHOGANY_PLANK_8782, 5), new Item(Items.GOLD_LEAF_8784) }),
+ MAGIC_CHEST (13291, 8152, 91, 1000, new Item[] { new Item(Items.MAGIC_STONE_8788) }),
+
/**
* Style related decoration.
*/
- BASIC_WOOD_WINDOW(13099, -1, 1, 0.0),
- BASIC_STONE_WINDOW(13091, -1, 1, 0.0),
- WHITEWASHED_STONE_WINDOW(13005, -1, 1, 0.0),
- FREMENNIK_WINDOW(13112, -1, 1, 0.0),
- TROPICAL_WOOD_WINDOW(10816, -1, 1, 0.0),
- FANCY_STONE_WINDOW(13117, -1, 1, 0.0),
-
+ BASIC_WOOD_WINDOW (13099, -1, 1, 0),
+ BASIC_STONE_WINDOW (13091, -1, 1, 0),
+ WHITEWASHED_STONE_WINDOW (13005, -1, 1, 0),
+ FREMENNIK_WINDOW (13112, -1, 1, 0),
+ TROPICAL_WOOD_WINDOW (10816, -1, 1, 0),
+ FANCY_STONE_WINDOW (13117, -1, 1, 0),
;
+
/**
* The object id.
*/
private final int objectId;
-
+
/**
* The item id for the interface.
*/
@@ -1083,17 +700,22 @@ public enum Decoration {
* The level requirement.
*/
private final int level;
-
+
/**
* The experience gained for building this decoration.
*/
- private final double experience;
-
+ private final int experience;
+
/**
* The item required.
*/
private final Item[] items;
-
+
+ /**
+ * The items that will be refunded.
+ */
+ private final Item[] refundItems;
+
/**
* The tools required.
*/
@@ -1103,33 +725,72 @@ public enum Decoration {
* The object ids depending on styling.
*/
private final int[] objectIds;
-
+
/**
* If this node should be invisible to user build options
*/
private boolean invisibleNode;
-
+
/**
- * Constructs a new {@code Portal} {@code Object}.
+ * Constructs a new object, no items, no tools, no refund items.
* @param objectId The object id.
* @param interfaceItem The item id for the building interface.
* @param level The level required.
* @param experience The experience gained.
- * @param items The items required.
*/
- private Decoration(int objectId, int interfaceItem, int level, double experience, Item... items) {
- this(objectId, interfaceItem, level, experience, new int[] { 2347, 8794 }, items);
+ Decoration(int objectId, int interfaceItem, int level, int experience) {
+ this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, new Item[] {}, new Item[] {});
}
-
+
/**
- * Constructs a new {@code Portal} {@code Object}.
+ * Constructs a new object, no tools, no refund items.
* @param objectId The object id.
* @param interfaceItem The item id for the building interface.
* @param level The level required.
* @param experience The experience gained.
* @param items The items required.
*/
- private Decoration(int objectId, int interfaceItem, int level, double experience, int[] tools, Item... items) {
+ Decoration(int objectId, int interfaceItem, int level, int experience, Item[] items) {
+ this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, new Item[] {});
+ }
+
+ /**
+ * Constructs a new object, no refund items.
+ * @param objectId The object id.
+ * @param interfaceItem The item id for the building interface.
+ * @param level The level required.
+ * @param experience The experience gained.
+ * @param tools The tools needed.
+ * @param items The items required.
+ */
+ Decoration(int objectId, int interfaceItem, int level, int experience, int[] tools, Item[] items) {
+ this(objectId, interfaceItem, level, experience, tools, items, new Item[] {});
+ }
+
+ /**
+ * Constructs a new object, no tools.
+ * @param objectId The object id.
+ * @param interfaceItem The item id for the building interface.
+ * @param level The level required.
+ * @param experience The experience gained.
+ * @param items The items required.
+ * @param refundItems The items to be refunded when the item is removed.
+ */
+ Decoration(int objectId, int interfaceItem, int level, int experience, Item[] items, Item[] refundItems) {
+ this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, refundItems);
+ }
+
+ /**
+ * Constructs a new object.
+ * @param objectId The object id.
+ * @param interfaceItem The item id for the building interface.
+ * @param level The level required.
+ * @param experience The experience gained.
+ * @param tools The tools needed.
+ * @param items The items required.
+ * @param refundItems The items to be refunded when the item is removed.
+ */
+ Decoration(int objectId, int interfaceItem, int level, int experience, int[] tools, Item[] items, Item[] refundItems) {
this.objectId = objectId;
this.objectIds = null;
this.interfaceItem = interfaceItem;
@@ -1137,39 +798,54 @@ public enum Decoration {
this.experience = experience;
this.tools = tools;
this.items = items;
+ this.refundItems = refundItems;
}
-
+
/**
* Decoration
* @param objectId
* @param invisibleNode
*/
- private Decoration(int objectId, boolean invisibleNode) {
+ Decoration(int objectId, boolean invisibleNode) {
this(objectId, -1, -1, -1);
this.invisibleNode = true;
}
-
+
/**
- * Constructs a new {@code Portal} {@code Object}.
+ * Constructs a new object, no tools, no refund items.
* @param objectIds The object id.
* @param interfaceItem The item id for the building interface.
* @param level The level required.
* @param experience The experience gained.
* @param items The items required.
*/
- private Decoration(int[] objectIds, int interfaceItem, int level, double experience, Item... items) {
- this(objectIds, interfaceItem, level, experience, new int[] { 2347, 8794 }, items);
+ Decoration(int[] objectIds, int interfaceItem, int level, int experience, Item[] items) {
+ this(objectIds, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, new Item[] {});
}
-
/**
- * Constructs a new {@code Portal} {@code Object}.
+ * Constructs a new object no refund items.
* @param objectIds The object id.
* @param interfaceItem The item id for the building interface.
* @param level The level required.
* @param experience The experience gained.
+ * @param tools The tools needed.
* @param items The items required.
*/
- private Decoration(int[] objectIds, int interfaceItem, int level, double experience, int[] tools, Item... items) {
+ Decoration(int[] objectIds, int interfaceItem, int level, int experience, int[] tools, Item[] items) {
+ this(objectIds, interfaceItem, level, experience, tools, items, new Item[] {});
+ }
+
+ /**
+ * Constructs a new object.
+ * @param objectIds The object id.
+ * @param interfaceItem The item id for the building interface.
+ * @param level The level required.
+ * @param experience The experience gained.
+ * @param tools The tools needed.
+ * @param items The items required.
+ * @param refundItems The items to be refunded when the item is removed.
+ */
+ Decoration(int[] objectIds, int interfaceItem, int level, int experience, int[] tools, Item[] items, Item[] refundItems) {
this.objectId = objectIds[0];
this.objectIds = objectIds;
this.interfaceItem = interfaceItem;
@@ -1177,6 +853,7 @@ public enum Decoration {
this.experience = experience;
this.tools = tools;
this.items = items;
+ this.refundItems = refundItems;
}
/**
@@ -1203,7 +880,7 @@ public enum Decoration {
}
return null;
}
-
+
/**
* Gets a decoration for the given object id
* @param objectId - the object id of the built object
@@ -1217,7 +894,7 @@ public enum Decoration {
}
return null;
}
-
+
public static Decoration forName(String name) {
for (Decoration d : Decoration.values()) {
if (d.name().equals(name)) {
@@ -1239,7 +916,7 @@ public enum Decoration {
}
return 0;
}
-
+
/**
* Gets the objectId.
* @param style The current housing style.
@@ -1251,7 +928,7 @@ public enum Decoration {
}
return objectId;
}
-
+
/**
* Gets the objectId.
* @return The objectId.
@@ -1272,7 +949,7 @@ public enum Decoration {
* Gets the experience.
* @return The experience.
*/
- public double getExperience() {
+ public int getExperience() {
return experience;
}
@@ -1284,6 +961,14 @@ public enum Decoration {
return items;
}
+ /**
+ * Gets the refund items.
+ * @return The refund items.
+ */
+ public Item[] getRefundItems() {
+ return refundItems;
+ }
+
/**
* Gets the tools.
* @return The tools.
@@ -1308,10 +993,11 @@ public enum Decoration {
return objectIds;
}
+ /**
+ * If this node should be invisible to user build options
+ * @return true if so.
+ */
public boolean isInvisibleNode() {
return invisibleNode;
}
-
-
-
}
diff --git a/Server/src/main/content/global/skill/construction/HouseManager.java b/Server/src/main/content/global/skill/construction/HouseManager.java
index 8afd8dcff..65ee6c3d9 100644
--- a/Server/src/main/content/global/skill/construction/HouseManager.java
+++ b/Server/src/main/content/global/skill/construction/HouseManager.java
@@ -20,7 +20,6 @@ import core.game.world.GameWorld;
import org.rs09.consts.Sounds;
import java.awt.*;
-import java.nio.ByteBuffer;
import static core.api.ContentAPIKt.*;
import static core.api.regionspec.RegionSpecificationKt.fillWith;
@@ -99,39 +98,12 @@ public final class HouseManager {
}
- public void save(ByteBuffer buffer) {
- buffer.put((byte) location.ordinal());
- buffer.put((byte) style.ordinal());
- if (hasServant()) {
- servant.save(buffer);
- } else {
- buffer.put((byte) -1);
- }
- for (int z = 0; z < 4; z++) {
- for (int x = 0; x < 8; x++) {
- for (int y = 0; y < 8; y++) {
- Room room = rooms[z][x][y];
- if (room != null) {
- buffer.put((byte) z).put((byte) x).put((byte) y);
- buffer.put((byte) room.getProperties().ordinal());
- buffer.put((byte) room.getRotation().toInteger());
- for (int i = 0; i < room.getHotspots().length; i++) {
- if (room.getHotspots()[i].getDecorationIndex() > -1) {
- buffer.put((byte) i);
- buffer.put((byte) room.getHotspots()[i].getDecorationIndex());
- }
- }
- buffer.put((byte) -1);
- }
- }
- }
- }
- buffer.put((byte) -1);//Eof
- }
-
public void parse(JSONObject data){
location = HouseLocation.values()[Integer.parseInt( data.get("location").toString())];
style = HousingStyle.values()[Integer.parseInt( data.get("style").toString())];
+ if (data.get("locked") != null) {
+ locked = true;
+ }
Object servRaw = data.get("servant");
if(servRaw != null){
servant = Servant.parse((JSONObject) servRaw);
@@ -155,28 +127,6 @@ public final class HouseManager {
}
}
-
- public void parse(ByteBuffer buffer) {
- location = HouseLocation.values()[buffer.get() & 0xFF];
- style = HousingStyle.values()[buffer.get() & 0xFF];
- servant = Servant.parse(buffer);
- int z = 0;
- while ((z = buffer.get()) != -1) {
- if (z == 3) {
- hasDungeon = true;
- }
- int x = buffer.get();
- int y = buffer.get();
- Room room = rooms[z][x][y] = new Room(RoomProperties.values()[buffer.get() & 0xFF]);
- room.configure(style);
- room.setRotation(Direction.get(buffer.get() & 0xFF));
- int spot = 0;
- while ((spot = buffer.get()) != -1) {
- room.getHotspots()[spot].setDecorationIndex(buffer.get() & 0xFF);
- }
- }
- }
-
/**
* Prepares for entering the player's house.
* @param player
@@ -188,6 +138,7 @@ public final class HouseManager {
construct();
}
player.setAttribute("poh_entry", HouseManager.this);
+ player.setAttribute("/save:original-loc", location.getExitLocation());
player.lock(1);
player.debug("House location: " + houseRegion.getBaseLocation() + ", entry: " + getEnterLocation());
}
@@ -256,7 +207,7 @@ public final class HouseManager {
}
/**
- * Leaves this house.
+ * Leaves this house through the portal.
* @param player The player leaving.
*/
public static void leave(Player player) {
@@ -277,7 +228,9 @@ public final class HouseManager {
*/
public void toggleBuildingMode(Player player, boolean enable) {
if (!isInHouse(player)) {
- player.getPacketDispatch().sendMessage("Building mode really only helps if you're in a house.");
+ //player.getPacketDispatch().sendMessage("Building mode really only helps if you're in a house.");
+ setLocked(enable);
+ player.sendMessage("Your house is now "+(player.getHouseManager().isLocked() ? "locked." : "unlocked." ));
return;
}
if (buildingMode != enable) {
diff --git a/Server/src/main/content/global/skill/construction/HouseZone.java b/Server/src/main/content/global/skill/construction/HouseZone.java
index dd0075f23..33f875362 100644
--- a/Server/src/main/content/global/skill/construction/HouseZone.java
+++ b/Server/src/main/content/global/skill/construction/HouseZone.java
@@ -3,11 +3,12 @@ package content.global.skill.construction;
import core.game.node.entity.Entity;
import core.game.node.entity.player.Player;
+import core.game.world.map.build.DynamicRegion;
import core.game.world.map.zone.MapZone;
-import core.game.world.map.zone.ZoneRestriction;
import core.game.world.map.RegionManager;
import core.game.world.map.Region;
import core.game.system.task.Pulse;
+import core.game.world.map.zone.ZoneRestriction;
import static core.api.ContentAPIKt.*;
@@ -37,7 +38,7 @@ public final class HouseZone extends MapZone {
* Constructs the house zone object.
*/
public HouseZone(HouseManager house) {
- super("poh-zone" + house, true, ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.FOLLOWERS);
+ super("poh-zone" + house, true);
this.house = house;
}
@@ -81,15 +82,19 @@ public final class HouseZone extends MapZone {
if (e instanceof Player) {
Player p = (Player) e;
HouseManager.leave(p);
+ return true;
}
- return true;
+ return super.death(e, killer);
}
@Override
public boolean leave(Entity e, boolean logout) {
if (e instanceof Player) {
Player p = (Player) e;
- if (house == p.getHouseManager()) {
+ // The below tears down the house if the owner was the one who left
+ //if (house == p.getHouseManager()) {
+ // Snowscape: tear down the house when the last person leaves, allowing guests to stay in the house without the owner.
+ if (!house.getHouseRegion().isViewed() && (!house.hasDungeon() || !house.getDungeonRegion().isViewed())) {
house.expelGuests(p);
int toRemove = previousRegion;
int dungRemove = previousDungeon;
@@ -109,7 +114,11 @@ public final class HouseZone extends MapZone {
}
});
}
+ // Clear logout listener and original-loc (if appropriate)
clearLogoutListener(p, "houselogout");
+ if (!getAttribute(p, "kidnapped-by-random", false)) {
+ removeAttribute(p, "/save:original-loc");
+ }
return true;
}
return true;
diff --git a/Server/src/main/content/global/skill/construction/PortalOptionPlugin.java b/Server/src/main/content/global/skill/construction/PortalOptionPlugin.java
index 23d951dac..23d9621a2 100644
--- a/Server/src/main/content/global/skill/construction/PortalOptionPlugin.java
+++ b/Server/src/main/content/global/skill/construction/PortalOptionPlugin.java
@@ -8,6 +8,7 @@ import core.game.dialogue.DialoguePlugin;
import core.game.interaction.OptionHandler;
import core.game.node.Node;
import core.game.node.entity.player.Player;
+import core.game.node.entity.skill.Skills;
import core.game.node.scenery.Scenery;
import core.plugin.Initializable;
import core.plugin.Plugin;
@@ -33,6 +34,7 @@ public final class PortalOptionPlugin extends OptionHandler {
SceneryDefinition.forId(13405).getHandlers().put("option:lock", this);
SceneryDefinition.forId(13405).getHandlers().put("option:enter", this);
ClassScanner.definePlugin(new PortalDialogue());
+ ClassScanner.definePlugin(new PortalExitDialogue());
return this;
}
@@ -40,7 +42,8 @@ public final class PortalOptionPlugin extends OptionHandler {
public boolean handle(Player player, Node node, String option) {
Scenery object = node.asScenery();
if (object.getId() == 13405 && option.equals("enter")) {
- HouseManager.leave(player);
+ player.getDialogueInterpreter().open("houseExitDialogue");
+ //HouseManager.leave(player);
return true;
}
if (option.equals("lock")) {
@@ -111,11 +114,14 @@ public final class PortalOptionPlugin extends OptionHandler {
break;
}
//If the Player has a house, but does not have their house moved to the portal they are interacting with
+ /* Snowscape: allow entering house from anywhere
if (player.getHouseManager().getLocation().getPortalId() != player.getAttribute("con:portal", -1)) {
player.getPacketDispatch().sendMessage(" Your house is in " + player.getHouseManager().getLocation().getName() + ".");
player.sendMessage(" Speak with an estate agent to change your house location.");
break;
}
+ */
+ player.removeAttribute("lasthouseentered");
player.getHouseManager().enter(player, buttonId == 2);
break;
case 3:
@@ -134,10 +140,12 @@ public final class PortalOptionPlugin extends OptionHandler {
player.getPacketDispatch().sendMessage("You aren't a friend of yourself!");
return Unit.INSTANCE;
}
+ /* Snowscape: allow entering house if host is not home.
if (!p.getHouseManager().isLoaded()) {
player.getPacketDispatch().sendMessage("This player is not at home right now.");
return Unit.INSTANCE;
}
+ */
if (p.getHouseManager().isBuildingMode()) {
player.getPacketDispatch().sendMessage("This player is in building mode.");
return Unit.INSTANCE;
@@ -146,6 +154,7 @@ public final class PortalOptionPlugin extends OptionHandler {
player.getPacketDispatch().sendMessage("The other player has locked their house.");
return Unit.INSTANCE;
}
+ player.setAttribute("/save:lasthouseentered", (String) value);
p.setAttribute("poh_owner", (String) value);
p.getHouseManager().enter(player, false);
return Unit.INSTANCE;
@@ -162,4 +171,114 @@ public final class PortalOptionPlugin extends OptionHandler {
return new int[] { DialogueInterpreter.getDialogueKey("con:portal") };
}
}
+
+
+
+ /**
+ * Snowscape: select destination via dialogue when leaving the house
+ *
+ */
+ @PluginManifest(type= PluginType.DIALOGUE)
+ private class PortalExitDialogue extends DialoguePlugin {
+
+ /**
+ * Constructs a new {@code PortalExitDialogue} {@code Object}
+ */
+ public PortalExitDialogue() {
+
+ }
+
+ /**
+ * Constructs a new {@code PortalExitDialogue} {@code Object}
+ * @param player The player.
+ */
+ public PortalExitDialogue(Player player) {
+ super(player);
+ }
+
+ @Override
+ public DialoguePlugin newInstance(Player player) {
+ return new PortalExitDialogue(player);
+ }
+
+ @Override
+ public boolean open(Object... args) {
+ options("Leave house (home location)", "Rimmington", "Taverly", "Pollnivneach", "Next Page");
+ stage = 1;
+ return true;
+ }
+
+ @Override
+ public boolean handle(int interfaceId, int buttonId) {
+ switch (stage) {
+ case 1:
+ switch (buttonId) {
+ case 1:
+ HouseManager.leave(player);
+ end();
+ break;
+ case 2:
+ attemptHouseExit(HouseLocation.RIMMINGTON);
+ end();
+ break;
+ case 3:
+ attemptHouseExit(HouseLocation.TAVERLY);
+ end();
+ break;
+ case 4:
+ attemptHouseExit(HouseLocation.POLLNIVNEACH);
+ end();
+ break;
+ case 5:
+ options("Rellekka", "Brimhaven","Yanille", "Cancel");
+ stage = 2;
+ break;
+ }
+ break;
+ case 2:
+ switch (buttonId) {
+ case 1:
+ attemptHouseExit(HouseLocation.RELLEKKA);
+ end();
+ break;
+ case 2:
+ attemptHouseExit(HouseLocation.BRIMHAVEN);
+ end();
+ break;
+ case 3:
+ attemptHouseExit(HouseLocation.YANILLE);
+ end();
+ break;
+ case 4:
+ end();
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public int[] getIds() {
+ return new int[] { DialogueInterpreter.getDialogueKey("houseExitDialogue") };
+ }
+
+ public void attemptHouseExit(HouseLocation targetLocation){
+ int level = 0;
+ String message = null;
+ if (player.getHouseManager().isInHouse(player)) {
+ level = getStatLevel(player, Skills.CONSTRUCTION);
+ message = "You need ";
+ } else {
+ level = getStatLevel(Repository.getPlayerByName(player.getAttribute("lasthouseentered", null)), Skills.CONSTRUCTION);
+ message = "The house owner needs ";
+ }
+
+ if (targetLocation.getLevelRequirement() <= level){
+ //player.animate(Animation.RESET);
+ player.getProperties().setTeleportLocation(targetLocation.getExitLocation());
+ } else {
+ player.sendMessage(message + targetLocation.getLevelRequirement() + " Construction to for you to teleport to " + targetLocation.getName() + ".");
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Server/src/main/content/global/skill/construction/Servant.java b/Server/src/main/content/global/skill/construction/Servant.java
index 63275330d..a3527bdad 100644
--- a/Server/src/main/content/global/skill/construction/Servant.java
+++ b/Server/src/main/content/global/skill/construction/Servant.java
@@ -5,8 +5,6 @@ import core.game.node.entity.npc.NPC;
import core.game.node.item.Item;
import org.json.simple.JSONObject;
-import java.nio.ByteBuffer;
-
/**
* Represents a player's servant.
* @author Emperor
@@ -44,26 +42,9 @@ public final class Servant extends NPC {
}
/**
- * Saves the servant details.
- * @param buffer The buffer to write on.
- */
- public void save(ByteBuffer buffer) {
- buffer.put((byte) type.ordinal());
- buffer.putShort((byte) uses);
- if (item == null) {
- buffer.putShort((short) -1);
- } else {
- buffer.putShort((short) item.getId());
- buffer.putInt(item.getAmount());
- }
- buffer.put((byte) (greet ? 1 : 0));
- }
-
- /**
- * Parses the servant from the buffer.
+ * Parses the servant from the save file.
* @return The servant.
*/
-
public static Servant parse(JSONObject data){
int type = Integer.parseInt( data.get("type").toString());
Servant servant = new Servant(ServantType.values()[type]);
@@ -77,21 +58,6 @@ public final class Servant extends NPC {
return servant;
}
- public static Servant parse(ByteBuffer buffer) {
- int type = buffer.get();
- if (type == -1) {
- return null;
- }
- Servant servant = new Servant(ServantType.values()[type]);
- servant.uses = buffer.getShort() & 0xFFFF;
- int itemId = buffer.getShort() & 0xFFFF;
- if ((short) itemId != -1) {
- servant.item = new Item(itemId, buffer.getInt());
- }
- servant.greet = buffer.get() == 1;
- return servant;
- }
-
/**
* Gets the item value.
* @return The item.
diff --git a/Server/src/main/content/global/skill/construction/decoration/costume/SnowscapeFancyDressBox.kt b/Server/src/main/content/global/skill/construction/decoration/costume/SnowscapeFancyDressBox.kt
new file mode 100644
index 000000000..8306a1e41
--- /dev/null
+++ b/Server/src/main/content/global/skill/construction/decoration/costume/SnowscapeFancyDressBox.kt
@@ -0,0 +1,30 @@
+package content.global.skill.construction.decoration.costume
+
+import core.game.node.scenery.Scenery
+import core.game.node.scenery.SceneryBuilder
+import core.game.interaction.InteractionListener
+import core.game.interaction.IntType
+import core.api.*
+
+/**
+ *
+ *
+ */
+class SnowscapeCostumeRoomBank : InteractionListener {
+
+ val IDs = intArrayOf(18772,18774,18776)
+
+ override fun defineListeners() {
+ on(IDs, IntType.SCENERY, "open"){ player, node ->
+ if (!player.houseManager.isInHouse(player)) {
+ sendMessage(player, "You can only do that in your own house.")
+ return@on true
+ }
+
+ setAttribute(player, "inCostumeRoomBank", true)
+ openBankAccount(player)
+
+ return@on true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/skill/construction/decoration/portalchamber/PortalChamberPlugin.java b/Server/src/main/content/global/skill/construction/decoration/portalchamber/PortalChamberPlugin.java
index 3c658fec2..bf1f26c54 100644
--- a/Server/src/main/content/global/skill/construction/decoration/portalchamber/PortalChamberPlugin.java
+++ b/Server/src/main/content/global/skill/construction/decoration/portalchamber/PortalChamberPlugin.java
@@ -17,6 +17,8 @@ import core.plugin.Initializable;
import core.plugin.Plugin;
import core.plugin.ClassScanner;
+import static content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners.ARDOUGNE_TELE_ATTRIBUTE;
+
/**
* PortalChamberPlugin
* @author Clayton Williams
@@ -87,6 +89,12 @@ public class PortalChamberPlugin extends OptionHandler {
}
for (Locations l : Locations.values()) {
if (l.name().contains(identifier)) {
+ if (l == Locations.ARDOUGNE){
+ if (!player.getAttribute(ARDOUGNE_TELE_ATTRIBUTE, false)) {
+ player.sendMessage("You do not have the requirements to direct the portal there");
+ return;
+ }
+ }
Item[] runes = l.runes;
if (!player.getInventory().containsItems(runes)) {
player.sendMessage("You do not have the required runes to build this portal");
diff --git a/Server/src/main/content/global/skill/construction/decoration/questhall/MountedGlory.kt b/Server/src/main/content/global/skill/construction/decoration/questhall/MountedGlory.kt
index 4f7ddb15b..47051e46f 100644
--- a/Server/src/main/content/global/skill/construction/decoration/questhall/MountedGlory.kt
+++ b/Server/src/main/content/global/skill/construction/decoration/questhall/MountedGlory.kt
@@ -4,8 +4,10 @@ import core.api.playGlobalAudio
import core.api.teleport
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
+import core.game.node.Node
import core.game.node.entity.player.Player
import core.game.node.item.Item
+import core.game.node.scenery.Scenery
import core.game.system.task.Pulse
import core.game.world.map.Location
import core.game.world.update.flag.context.Animation
@@ -27,27 +29,31 @@ class MountedGlory : InteractionListener {
)
override fun defineListeners() {
- on(MOUNTED_GLORY, IntType.SCENERY, "Edgeville") { player, _ ->
- mountedGloryTeleport(player,0)
+ on(MOUNTED_GLORY, IntType.SCENERY, "Edgeville") { player, `object` ->
+ mountedGloryAction(player, `object`, 0)
return@on true
}
- on(MOUNTED_GLORY, IntType.SCENERY, "Karamja") { player, _ ->
- mountedGloryTeleport(player,1)
+ on(MOUNTED_GLORY, IntType.SCENERY, "Karamja") { player, `object` ->
+ mountedGloryAction(player, `object`, 1)
return@on true
}
- on(MOUNTED_GLORY, IntType.SCENERY, "Draynor Village") { player, _ ->
- mountedGloryTeleport(player,2)
+ on(MOUNTED_GLORY, IntType.SCENERY, "Draynor Village") { player, `object` ->
+ mountedGloryAction(player, `object`, 2)
return@on true
}
- on(MOUNTED_GLORY, IntType.SCENERY, "Al Kharid") { player, _ ->
- mountedGloryTeleport(player,3)
+ on(MOUNTED_GLORY, IntType.SCENERY, "Al Kharid") { player, `object` ->
+ mountedGloryAction(player, `object`, 3)
return@on true
}
}
- private fun mountedGloryTeleport(player : Player, int : Int) {
+ private fun mountedGloryAction(player : Player, `object` : Node, int : Int) {
+ if (player.houseManager.isBuildingMode) {
+ player.dialogueInterpreter.open("con:removedec", `object` as Scenery)
+ return
+ }
if (!player.zoneMonitor.teleport(1, Item(Items.AMULET_OF_GLORY_1704))) {
return
}
diff --git a/Server/src/main/content/global/skill/construction/decoration/study/LecternPlugin.kt b/Server/src/main/content/global/skill/construction/decoration/study/LecternPlugin.kt
index 826056ce3..eb4accf67 100644
--- a/Server/src/main/content/global/skill/construction/decoration/study/LecternPlugin.kt
+++ b/Server/src/main/content/global/skill/construction/decoration/study/LecternPlugin.kt
@@ -10,6 +10,7 @@ import core.game.node.entity.player.Player
import core.game.node.entity.player.link.diary.DiaryType
import core.game.node.entity.skill.Skills
import content.global.skill.construction.Decoration
+import content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners.Companion.ARDOUGNE_TELE_ATTRIBUTE
import core.game.node.entity.combat.spell.MagicStaff
import core.game.node.item.Item
import core.game.system.task.Pulse
@@ -84,6 +85,11 @@ class LecternPlugin : OptionHandler() {
player.sendMessages("You need the Bones to Peaches ability purchased from MTA before making these.", "This requirement doesn't apply to actually using the tabs.")
return false
}
+ if(this == ARDOUGNE && !getAttribute(player, ARDOUGNE_TELE_ATTRIBUTE, false)){
+ sendMessage(player, "You need to unlock Ardougne teleport before you can make a tablet.")
+ return false
+
+ }
var found = false
for (d in requiredDecorations) if (d.objectId == objectId) found = true
if (!found) {
diff --git a/Server/src/main/content/global/skill/construction/decoration/study/TelescopePlugin.kt b/Server/src/main/content/global/skill/construction/decoration/study/TelescopePlugin.kt
index 6149fae5e..ea1d8c783 100644
--- a/Server/src/main/content/global/skill/construction/decoration/study/TelescopePlugin.kt
+++ b/Server/src/main/content/global/skill/construction/decoration/study/TelescopePlugin.kt
@@ -26,25 +26,31 @@ class TelescopePlugin : OptionHandler() {
}
override fun handle(player: Player?, node: Node?, option: String?): Boolean {
+ val obj = node?.asScenery() as Scenery
val star = ShootingStarPlugin.getStar()
val delay: Int = 25000 + (25000 / 3)
val timeLeft = delay - star.ticks
- val fakeTimeLeftBecauseFuckPlayers = TimeUnit.MILLISECONDS.toMinutes(timeLeft * 600L) + if(RandomFunction.random(0,100) % 2 == 0) 2 else -2
- val obj = node?.asScenery() as Scenery
+ val window = when (obj.id) {
+ 13657 -> 9
+ 13658 -> 2
+ else -> 24
+ }
+ val fakeTimeLeft = RandomFunction.random(-window, window+1) + TimeUnit.MILLISECONDS.toMinutes(timeLeft * 600L)
player?.lock()
player?.animate(ANIMATION)
- player?.interfaceManager?.open(Component(782)).also { player?.unlock()
- Pulser.submit(object : Pulse(2, player) {
- override fun pulse(): Boolean {
- if (obj.isActive) {
- player?.dialogueInterpreter?.sendDialogue("You see a shooting star! The star looks like it will land","in about $fakeTimeLeftBecauseFuckPlayers minutes!")
+ player?.interfaceManager?.open(Component(782)).also {
+ player?.unlock()
+ Pulser.submit(object : Pulse(2, player) {
+ override fun pulse(): Boolean {
+ if (obj.isActive) {
+ player?.dialogueInterpreter?.sendDialogue("You see a shooting star! The star looks like it will land","in about $fakeTimeLeft minutes!")
+ return true
+ }
return true
}
- return true
- }
- })
- return true
- }
+ })
+ return true
+ }
}
companion object {
diff --git a/Server/src/main/content/global/skill/construction/decoration/workshop/SnowscapeWorkbench.kt b/Server/src/main/content/global/skill/construction/decoration/workshop/SnowscapeWorkbench.kt
new file mode 100644
index 000000000..86974da72
--- /dev/null
+++ b/Server/src/main/content/global/skill/construction/decoration/workshop/SnowscapeWorkbench.kt
@@ -0,0 +1,104 @@
+package content.global.skill.construction.decoration.workshop
+
+
+
+import core.api.*
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.node.Node
+import core.game.node.entity.player.Player
+import core.game.node.entity.skill.Skills
+import core.game.node.scenery.Scenery
+import core.game.node.item.Item
+import org.rs09.consts.Items
+import content.global.skill.construction.BuildingUtils
+
+
+/**
+ * Simple replacement intil flatpacks are in. Using the workbench will consume planks in exchange for construction exp.
+ *
+ *
+ */
+
+class SnowscapeWorkbench : InteractionListener {
+
+ val workbenchIds = intArrayOf(13704,13705,13706,13707,13708)
+ val plankIds = intArrayOf(Items.PLANK_960, Items.OAK_PLANK_8778, Items.TEAK_PLANK_8780, Items.MAHOGANY_PLANK_8782)
+
+ override fun defineListeners() {
+ defineInteraction(
+ IntType.SCENERY,
+ workbenchIds,
+ "work-at",
+ persistent = true, allowedDistance = 1,
+ handler = ::handlePlankConstruction
+ )
+ }
+
+ private fun handlePlankConstruction(player: Player, node: Node, state: Int) : Boolean {
+ if (!inInventory(player, Items.SAW_8794) || !inInventory(player, Items.HAMMER_2347)) {
+ sendMessage(player,"You need a hammer and saw to do that.")
+ player.scripts.reset()
+ return false
+ }
+
+ for (plankId in plankIds) {
+ if (amountInInventory(player, plankId) > 0) {
+ if (node.id < getAllowedWorkbench(plankId)) {
+ sendMessage(player,"You need a better workbench to use ${Item(plankId).getName()}s.")
+ player.scripts.reset()
+ return false
+ }
+ if (getDynLevel(player, Skills.CONSTRUCTION) < getLevelRequirement(plankId)) {
+ sendMessage(player,"You need level ${getLevelRequirement(plankId)} construction to use ${Item(plankId).getName()}s.")
+ player.scripts.reset()
+ return false
+ }
+
+ if (removeItem(player, Item(plankId, 1))) {
+ rewardXP(player, Skills.CONSTRUCTION, getExperience(plankId))
+ animate(player, BuildingUtils.BUILD_MID_ANIM) //This animation has a sound effect built in
+
+ return delayScript(player, 1)
+ }
+ }
+ }
+
+
+ sendMessage(player,"You have no planks in your inventory.")
+ player.scripts.reset()
+ return false
+ }
+
+ // The following functions really should have been an enum class or something, but I don't know how to do that
+
+ fun getAllowedWorkbench(plankId: Int) : Int {
+ return when (plankId) {
+ Items.PLANK_960 -> 13704
+ Items.OAK_PLANK_8778 -> 13705
+ Items.TEAK_PLANK_8780 -> 13706
+ Items.MAHOGANY_PLANK_8782 -> 13707
+ else -> 0
+ }
+ }
+
+ fun getExperience(plankId: Int) : Double {
+ return when (plankId) {
+ Items.PLANK_960 -> 30.0
+ Items.OAK_PLANK_8778 -> 60.0
+ Items.TEAK_PLANK_8780 -> 90.0
+ Items.MAHOGANY_PLANK_8782 -> 140.0
+ else -> 0.0
+ }
+ }
+
+ fun getLevelRequirement(plankId: Int) : Int {
+ return when (plankId) {
+ Items.PLANK_960 -> 1
+ Items.OAK_PLANK_8778 -> 15
+ Items.TEAK_PLANK_8780 -> 35
+ Items.MAHOGANY_PLANK_8782 -> 40
+ else -> 0
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/skill/construction/npc/HouseServantDialogue.java b/Server/src/main/content/global/skill/construction/npc/HouseServantDialogue.java
index 4fd2d8c47..ddb967ebe 100644
--- a/Server/src/main/content/global/skill/construction/npc/HouseServantDialogue.java
+++ b/Server/src/main/content/global/skill/construction/npc/HouseServantDialogue.java
@@ -360,7 +360,7 @@ public class HouseServantDialogue extends DialoguePlugin {
bankFetch(player, new Item(Items.MARBLE_BLOCK_8786));
break;
case 3: //magic stones
- bankFetch(player, new Item(Items.MAGIC_STONE_4703));
+ bankFetch(player, new Item(Items.MAGIC_STONE_8788));
break;
}
break;
diff --git a/Server/src/main/content/global/skill/cooking/CookingRecipePlugin.java b/Server/src/main/content/global/skill/cooking/CookingRecipePlugin.java
index 9ef36bcaf..067217358 100644
--- a/Server/src/main/content/global/skill/cooking/CookingRecipePlugin.java
+++ b/Server/src/main/content/global/skill/cooking/CookingRecipePlugin.java
@@ -44,29 +44,30 @@ public final class CookingRecipePlugin extends UseWithHandler {
@Override
public boolean handle(NodeUsageEvent event) {
Recipe recipe = null;
+ Item part = null;
// TODO: Transitioning to a Listener would save an O(n) pass through the recipes list on every use-with
+ recipeloop:
for (Recipe temp : Recipe.RECIPES) {
if (temp.isSingular()) {
if (temp.getBase().getId() == event.getUsedItem().getId() || temp.getBase().getId() == event.getBaseItem().getId()) {
for (Item ingredient : temp.getIngredients()) {
if (ingredient.getId() == event.getBaseItem().getId() || ingredient.getId() == event.getUsedItem().getId()) {
recipe = temp;
- break;
+ break recipeloop;
}
}
}
} else {
- Item part = null;
- Item ingredient = null;
for (int k = 0; k < temp.getParts().length; k++) {
for (int i = 0; i < temp.getIngredients().length; i++) {
- part = temp.getParts()[k];
- ingredient = temp.getIngredients()[i];
- if (part.getId() == event.getUsedItem().getId() && ingredient.getId() == event.getBaseItem().getId() || part.getId() == event.getBaseItem().getId() && ingredient.getId() == event.getUsedItem().getId()) {
+ Item tempPart = temp.getParts()[k];
+ Item ingredient = temp.getIngredients()[i];
+ if (tempPart.getId() == event.getUsedItem().getId() && ingredient.getId() == event.getBaseItem().getId() || tempPart.getId() == event.getBaseItem().getId() && ingredient.getId() == event.getUsedItem().getId()) {
if (k == i) {// represents that this ingredient can
// mix with the other.
recipe = temp;
- break;
+ part = tempPart;
+ break recipeloop;
}
}
}
@@ -76,6 +77,7 @@ public final class CookingRecipePlugin extends UseWithHandler {
if (recipe != null) {
final Player player = event.getPlayer();
final Recipe recipe_ = recipe;
+ final Item part_ = part;
SkillDialogueHandler handler = new SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, recipe.getProduct()) {
@Override
public void create(final int amount, int index) {
@@ -91,7 +93,7 @@ public final class CookingRecipePlugin extends UseWithHandler {
@Override
public int getAll(int index) {
- return player.getInventory().getAmount(recipe_.getBase());
+ return player.getInventory().getAmount(part_ != null ? part_ : recipe_.getBase());
}
};
if (player.getInventory().getAmount(recipe.getBase()) == 1) {
diff --git a/Server/src/main/content/global/skill/cooking/CookingRewrite.kt b/Server/src/main/content/global/skill/cooking/CookingRewrite.kt
index 76d485956..7bc993a8b 100644
--- a/Server/src/main/content/global/skill/cooking/CookingRewrite.kt
+++ b/Server/src/main/content/global/skill/cooking/CookingRewrite.kt
@@ -66,7 +66,7 @@ class CookingRewrite : InteractionListener {
}
companion object {
- val COOKING_OBJs = intArrayOf(24313,21302, 13528, 13529, 13533, 13531, 13536, 13539, 13542, 2728, 2729, 2730, 2731, 2732, 2859, 3038, 3039, 3769, 3775, 4265, 4266, 5249, 5499, 5631, 5632, 5981, 9682, 10433, 11404, 11405, 11406, 12102, 12796, 13337, 13881, 14169, 14919, 15156, 20000, 20001, 21620, 21792, 22713, 22714, 23046, 24283, 24284, 25155, 25156, 25465, 25730, 27297, 29139, 30017, 32099, 33500, 34495, 34546, 36973, 37597, 37629, 37726, 114, 4172, 5275, 8750, 16893, 22154, 34410, 34565, 114, 9085, 9086, 9087, 12269, 15398, 25440, 25441, 2724, 2725, 2726, 4618, 4650, 5165, 6093, 6094, 6095, 6096, 8712, 9374, 9439, 9440, 9441, 10824, 17640, 17641, 17642, 17643, 18039, 21795, 24285, 24329, 27251, 33498, 35449, 36815, 36816, 37426, 40110, 10377)
+ val COOKING_OBJs = intArrayOf(24313,21302, 13528, 13529, 13533, 13531, 13536, 13539, 13542, 2728, 2729, 2730, 2731, 2732, 2859, 3038, 3039, 3769, 3775, 4265, 4266, 5249, 5499, 5631, 5632, 5981, 9682, 10433, 11404, 11405, 11406, 12102, 12796, 13337, 13881, 14169, 14919, 15156, 20000, 20001, 21620, 21792, 22713, 22714, 23046, 24283, 24284, 25155, 25156, 25465, 25730, 27297, 29139, 30017, 32099, 33500, 34495, 34546, 36973, 37597, 37629, 37726, 114, 4172, 5275, 8750, 16893, 22154, 34410, 34565, 114, 9085, 9086, 9087, 12269, 15398, 25440, 25441, 2724, 2725, 2726, 4618, 4650, 5165, 6093, 6094, 6095, 6096, 8712, 9374, 9439, 9440, 9441, 10824, 17640, 17641, 17642, 17643, 18039, 18170, 21795, 24285, 24329, 27251, 33498, 35449, 36815, 36816, 37426, 40110, 10377)
@JvmStatic
fun cook(player: Player, `object`: Scenery?, initial: Int, product: Int, amount: Int) {
diff --git a/Server/src/main/content/global/skill/cooking/StandardCookingPulse.java b/Server/src/main/content/global/skill/cooking/StandardCookingPulse.java
index f081bed5a..d70856a27 100644
--- a/Server/src/main/content/global/skill/cooking/StandardCookingPulse.java
+++ b/Server/src/main/content/global/skill/cooking/StandardCookingPulse.java
@@ -4,6 +4,8 @@ import content.global.skill.skillcapeperks.SkillcapePerks;
import core.game.event.ResourceProducedEvent;
import core.game.node.entity.impl.Animator;
import core.game.node.entity.player.Player;
+import core.game.node.entity.player.info.LogType;
+import core.game.node.entity.player.info.PlayerMonitor;
import core.game.node.entity.player.link.audio.Audio;
import core.game.node.entity.skill.Skills;
import core.game.node.item.GroundItemManager;
@@ -15,7 +17,8 @@ import core.tools.RandomFunction;
import org.rs09.consts.Items;
import org.rs09.consts.Sounds;
-import static core.api.ContentAPIKt.playAudio;
+import static core.api.ContentAPIKt.*;
+import content.data.Quests;
public class StandardCookingPulse extends Pulse {
//range animation
@@ -38,12 +41,17 @@ public class StandardCookingPulse extends Pulse {
private boolean burned = false;
public CookableItems properties;
+ private int initialAmount;
+ private int processedAmount;
+
public StandardCookingPulse(Player player, Scenery object, int initial, int product, int amount) {
this.player = player;
this.object = object;
this.initial = initial;
this.product = product;
this.amount = amount;
+ this.initialAmount = amountInInventory(player, initial);
+ this.processedAmount = 0;
}
@Override
@@ -72,7 +80,7 @@ public class StandardCookingPulse extends Pulse {
this.experience = 0;
if (properties != null) {
// Handle Cook's Assistant range
- if (object.getId() == LUMBRIDGE_RANGE && !player.getQuestRepository().isComplete("Cook's Assistant")) {
+ if (object.getId() == LUMBRIDGE_RANGE && !player.getQuestRepository().isComplete(Quests.COOKS_ASSISTANT)) {
player.getPacketDispatch().sendMessage("You need to have completed the Cook's Assistant quest in order to use that range.");
return false;
}
@@ -169,6 +177,11 @@ public class StandardCookingPulse extends Pulse {
player.getInventory().add(productItem);
player.dispatch(new ResourceProducedEvent(productItem.getId(), 1, object, initialItem.getId()));
player.getSkills().addExperience(Skills.COOKING, experience, true);
+ processedAmount++;
+ if (processedAmount > initialAmount) {
+ PlayerMonitor.log(player, LogType.DUPE_ALERT, "cooked item (" + player.getName() + ", " + initialItem.getName() + "): initialAmount " + initialAmount + ", processedAmount " + processedAmount);
+ }
+ player.incrementAttribute("/save:stats_manager:food_cooked", 1);
} else {
player.dispatch(new ResourceProducedEvent(CookableItems.getBurnt(initial).getId(), 1, object, initialItem.getId()));
player.getInventory().add(CookableItems.getBurnt(initial));
diff --git a/Server/src/main/content/global/skill/cooking/recipe/HangoverRecipe.kt b/Server/src/main/content/global/skill/cooking/recipe/HangoverRecipe.kt
new file mode 100644
index 000000000..063b85ce4
--- /dev/null
+++ b/Server/src/main/content/global/skill/cooking/recipe/HangoverRecipe.kt
@@ -0,0 +1,44 @@
+package content.global.skill.cooking.recipe
+
+import core.api.*
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.node.entity.skill.Skills
+import org.rs09.consts.Items
+
+class HangoverRecipe : InteractionListener {
+
+ companion object{
+ private const val SNAPE_GRASS = Items.SNAPE_GRASS_231
+ private const val HANGOVER_CURE = Items.HANGOVER_CURE_1504
+ private const val BUCKET_OF_MILK = Items.BUCKET_OF_MILK_1927
+ private const val CHOCOLATE_DUST = Items.CHOCOLATE_DUST_1975
+ private const val CHOCOLATE_MILK = Items.CHOCOLATEY_MILK_1977
+ }
+
+ override fun defineListeners() {
+ onUseWith(IntType.ITEM, CHOCOLATE_DUST, BUCKET_OF_MILK) { player, _, _ ->
+ if(hasLevelDyn(player, Skills.COOKING, 4)){
+ if(removeItem(player, CHOCOLATE_DUST) and removeItem(player, BUCKET_OF_MILK)){
+ addItem(player, CHOCOLATE_MILK)
+ sendItemDialogue(player, CHOCOLATE_MILK, "You mix the chocolate into the bucket.")
+ }
+ }
+ else {
+ sendDialogue(player, "You need a Cooking level of at least 4 to make chocolate milk.")
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(IntType.ITEM, SNAPE_GRASS, CHOCOLATE_MILK) { player, _, _ ->
+ if (removeItem(player, SNAPE_GRASS) && removeItem(player, CHOCOLATE_MILK))
+ {
+ sendItemDialogue(player, HANGOVER_CURE, "You mix the snape grass into the bucket.")
+ addItem(player, HANGOVER_CURE)
+ return@onUseWith true
+ }
+ return@onUseWith false
+ }
+
+ }
+}
diff --git a/Server/src/main/content/global/skill/cooking/recipe/Recipe.java b/Server/src/main/content/global/skill/cooking/recipe/Recipe.java
index 2402a9772..3e2eff513 100644
--- a/Server/src/main/content/global/skill/cooking/recipe/Recipe.java
+++ b/Server/src/main/content/global/skill/cooking/recipe/Recipe.java
@@ -119,6 +119,9 @@ public abstract class Recipe {
}
}
if (index != -1) {
+ if (!player.getInventory().containItems(event.getBaseItem().getId(), event.getUsedItem().getId())) {
+ return;
+ }
if (player.getInventory().remove(event.getBaseItem()) && player.getInventory().remove(event.getUsedItem())) {
player.getInventory().add(getParts()[index + 1]);
String message = getMixMessage(event);
diff --git a/Server/src/main/content/global/skill/crafting/BattlestaffListener.kt b/Server/src/main/content/global/skill/crafting/BattlestaffListener.kt
index 54a82b557..bb31a0689 100644
--- a/Server/src/main/content/global/skill/crafting/BattlestaffListener.kt
+++ b/Server/src/main/content/global/skill/crafting/BattlestaffListener.kt
@@ -10,11 +10,11 @@ import kotlin.math.min
class BattlestaffListener : InteractionListener {
- private val battlestaff = Items.BATTLESTAFF_1391
+ private val battlestaff = intArrayOf(Items.BATTLESTAFF_1391, Items.DRAMEN_STAFF_772)
val orbs = BattlestaffProduct.values().map { it.requiredOrbItemId }.toIntArray()
override fun defineListeners() {
- onUseWith(IntType.ITEM, orbs, battlestaff) { player, used, with ->
+ onUseWith(IntType.ITEM, orbs, *battlestaff) { player, used, with ->
val product = BattlestaffProduct.productMap[used.id] ?: return@onUseWith true
if (!hasLevelDyn(player, Skills.CRAFTING, product.minimumLevel)) {
@@ -25,7 +25,7 @@ class BattlestaffListener : InteractionListener {
// Avoids sending dialogue if only one can be created
if (amountInInventory(player, used.id) == 1 || amountInInventory(player, with.id) == 1) {
- if (removeItem(player, product.requiredOrbItemId) && removeItem(player, Items.BATTLESTAFF_1391)) {
+ if (removeItem(player, product.requiredOrbItemId) && removeItem(player, with.id)) {
addItem(player, product.producedItemId, product.amountProduced)
rewardXP(player, Skills.CRAFTING, product.experience)
}
@@ -44,7 +44,7 @@ class BattlestaffListener : InteractionListener {
runTask(player, 2, amount) {
if (amount < 1) return@runTask
- if (removeItem(player, product.requiredOrbItemId) && removeItem(player, Items.BATTLESTAFF_1391)) {
+ if (removeItem(player, product.requiredOrbItemId) && removeItem(player, with.id)) {
addItem(player, product.producedItemId, product.amountProduced)
rewardXP(player, Skills.CRAFTING, product.experience)
}
diff --git a/Server/src/main/content/global/skill/crafting/LeatherCraftDialogue.java b/Server/src/main/content/global/skill/crafting/LeatherCraftDialogue.java
index 0692339a6..65fa4ae71 100644
--- a/Server/src/main/content/global/skill/crafting/LeatherCraftDialogue.java
+++ b/Server/src/main/content/global/skill/crafting/LeatherCraftDialogue.java
@@ -196,7 +196,7 @@ public final class LeatherCraftDialogue extends DialoguePlugin {
case 5:
case 9:
case 13:
- amt = 10;
+ amt = 30;
break;
case 4:
case 8:
diff --git a/Server/src/main/content/global/skill/crafting/armour/DragonCraftPulse.java b/Server/src/main/content/global/skill/crafting/armour/DragonCraftPulse.java
index bc8022884..924d1364a 100644
--- a/Server/src/main/content/global/skill/crafting/armour/DragonCraftPulse.java
+++ b/Server/src/main/content/global/skill/crafting/armour/DragonCraftPulse.java
@@ -95,9 +95,6 @@ public final class DragonCraftPulse extends SkillPulse- {
player.getInventory().add(item);
player.getSkills().addExperience(Skills.CRAFTING, hide.getExperience(), true);
LeatherCrafting.decayThread(player);
- if (LeatherCrafting.isLastThread(player)) {
- LeatherCrafting.removeThread(player);
- }
amount--;
}
return amount < 1;
diff --git a/Server/src/main/content/global/skill/crafting/armour/HardCraftPulse.java b/Server/src/main/content/global/skill/crafting/armour/HardCraftPulse.java
index 4d02be91c..5a2207b4a 100644
--- a/Server/src/main/content/global/skill/crafting/armour/HardCraftPulse.java
+++ b/Server/src/main/content/global/skill/crafting/armour/HardCraftPulse.java
@@ -75,9 +75,6 @@ public final class HardCraftPulse extends SkillPulse
- {
player.getInventory().add(item);
player.getSkills().addExperience(Skills.CRAFTING, 35, true);
LeatherCrafting.decayThread(player);
- if (LeatherCrafting.isLastThread(player)) {
- LeatherCrafting.removeThread(player);
- }
}
amount--;
return amount < 1;
diff --git a/Server/src/main/content/global/skill/crafting/armour/LeatherCrafting.java b/Server/src/main/content/global/skill/crafting/armour/LeatherCrafting.java
index 2767fbc65..02f14d1ee 100644
--- a/Server/src/main/content/global/skill/crafting/armour/LeatherCrafting.java
+++ b/Server/src/main/content/global/skill/crafting/armour/LeatherCrafting.java
@@ -1,8 +1,12 @@
package content.global.skill.crafting.armour;
+import core.api.Container;
import core.game.component.Component;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
+import org.rs09.consts.Items;
+
+import static core.api.ContentAPIKt.*;
/**
* Represents a useful class for leather crafting related information.
@@ -40,52 +44,17 @@ public final class LeatherCrafting {
*/
private static final Component COMPONENT = new Component(154);
- /**
- * Checks if its the last thrad.
- * @return {@code True} if so.
- */
- public static boolean isLastThread(final Player player) {
- final Item thread = getThread(player);
- if (thread == null) {
- return false;
- }
- int charge = thread.getCharge();
- return charge >= 1004;
- }
-
/**
* Method used to decay thread.
- */
- public static void decayThread(final Player player) {
- final Item thread = getThread(player);
- if (thread == null) {
- return;
- }
- int charge = thread.getCharge();
- thread.setCharge(charge + 1);
- }
-
- /**
- * Method used to remove thread.
- * @param player the player.
- */
- public static void removeThread(final Player player) {
- if (player.getInventory().remove(THREAD)) {
- player.getPacketDispatch().sendMessage("You use a reel of your thread.");
- Item thread = getThread(player);
- if (thread != null) {
- thread.setCharge(1000);
- }
- }
- }
-
- /**
- * Gets the thread.
- * @param player the player.
- * @return the item.
+ * @author Player Name
*/
- public static Item getThread(final Player player) {
- return player.getInventory().get(player.getInventory().getSlot(THREAD));
+ public static void decayThread(final Player player) {
+ int charges = getAttribute(player, "threadCharges", 5) - 1;
+ if (charges <= 0 && removeItem(player, Items.THREAD_1734, Container.INVENTORY)) {
+ charges = 5;
+ sendMessage(player, "You use a reel of your thread.");
+ }
+ setAttribute(player, "/save:threadCharges", charges);
}
/**
diff --git a/Server/src/main/content/global/skill/crafting/armour/SnakeSkinPulse.java b/Server/src/main/content/global/skill/crafting/armour/SnakeSkinPulse.java
index a851caaf6..be012d01c 100644
--- a/Server/src/main/content/global/skill/crafting/armour/SnakeSkinPulse.java
+++ b/Server/src/main/content/global/skill/crafting/armour/SnakeSkinPulse.java
@@ -82,9 +82,6 @@ public final class SnakeSkinPulse extends SkillPulse
- {
player.getInventory().add(item);
player.getSkills().addExperience(Skills.CRAFTING, skin.getExperience(), true);
LeatherCrafting.decayThread(player);
- if (LeatherCrafting.isLastThread(player)) {
- LeatherCrafting.removeThread(player);
- }
}
amount--;
return amount < 1;
diff --git a/Server/src/main/content/global/skill/crafting/armour/SoftCraftPulse.java b/Server/src/main/content/global/skill/crafting/armour/SoftCraftPulse.java
index 2d62c165a..ab49815cf 100644
--- a/Server/src/main/content/global/skill/crafting/armour/SoftCraftPulse.java
+++ b/Server/src/main/content/global/skill/crafting/armour/SoftCraftPulse.java
@@ -90,10 +90,6 @@ public final class SoftCraftPulse extends SkillPulse
- {
player.getInventory().add(item);
player.getSkills().addExperience(Skills.CRAFTING, soft.getExperience(), true);
LeatherCrafting.decayThread(player);
- if (LeatherCrafting.isLastThread(player)) {
- LeatherCrafting.removeThread(player);
- }
-
if (soft == LeatherCrafting.SoftLeather.GLOVES) {
player.getAchievementDiaryManager().finishTask(player, DiaryType.LUMBRIDGE, 1, 3);
}
diff --git a/Server/src/main/content/global/skill/crafting/jewellery/JewelleryCrafting.java b/Server/src/main/content/global/skill/crafting/jewellery/JewelleryCrafting.java
index 37304e77d..89358a5fc 100644
--- a/Server/src/main/content/global/skill/crafting/jewellery/JewelleryCrafting.java
+++ b/Server/src/main/content/global/skill/crafting/jewellery/JewelleryCrafting.java
@@ -5,6 +5,7 @@ import core.game.component.Component;
import core.game.node.entity.skill.Skills;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
+import static core.api.ContentAPIKt.*;
import java.util.HashMap;
@@ -185,7 +186,9 @@ public class JewelleryCrafting {
for (int i = 0; i < data.items.length; i++) {
if (player.getInventory().contains(data.getItems()[i], 1)) {
length++;
- }
+ } else if (inEquipmentOrInventory(player, 10881, 1) && player.goldSatchel.contains(data.getItems()[i], 1)){
+ length++;
+ }
}
if (!player.getInventory().contains(mouldFor(data.name()), 1)) {
length--;
@@ -235,6 +238,9 @@ public class JewelleryCrafting {
amt = player.getInventory().getAmount(new Item(GOLD_BAR));
} else {
int first = player.getInventory().getAmount(new Item(data.getItems()[0]));
+ if (inEquipmentOrInventory(player, 10881, 1)) {
+ first += player.goldSatchel.getAmount(new Item(data.getItems()[0]));
+ }
int second = player.getInventory().getAmount(new Item(data.getItems()[1]));
if (first == second) {
amt = first;
@@ -250,7 +256,9 @@ public class JewelleryCrafting {
for (int i = 0; i < data.items.length; i++) {
if (player.getInventory().contains(data.getItems()[i], amount)) {
length++;
- }
+ } else if (data.getItems()[i] != GOLD_BAR && inEquipmentOrInventory(player, 10881, 1) && player.goldSatchel.contains(data.getItems()[i], 1)){
+ length++;
+ }
}
if (length != data.getItems().length) {
player.getPacketDispatch().sendMessage("You don't have the required items to make this item.");
diff --git a/Server/src/main/content/global/skill/crafting/jewellery/JewelleryPulse.java b/Server/src/main/content/global/skill/crafting/jewellery/JewelleryPulse.java
index e69a7ee29..be2f7b58c 100644
--- a/Server/src/main/content/global/skill/crafting/jewellery/JewelleryPulse.java
+++ b/Server/src/main/content/global/skill/crafting/jewellery/JewelleryPulse.java
@@ -67,11 +67,19 @@ public final class JewelleryPulse extends SkillPulse
- {
if (++ticks % 5 != 0) {
return false;
}
- if (player.getInventory().remove(getItems())) {
+ Item items[] = getItems();
+ for (int i = 0; i < items.length; i++) {
+ if (player.getInventory().remove(items[i]) || (items[i].getId() != 2357 && inEquipmentOrInventory(player, 10881, 1) && player.goldSatchel.remove(items[i]))) {
+ continue;
+ } else {
+ return true;
+ }
+ }
+ //if (player.getInventory().remove(getItems())) {
final Item item = new Item(type.getSendItem());
player.getInventory().add(item);
player.getSkills().addExperience(Skills.CRAFTING, type.getExperience(), true);
- }
+ //}
amount--;
return amount < 1;
}
diff --git a/Server/src/main/content/global/skill/crafting/lightsources/LightSourceLighter.kt b/Server/src/main/content/global/skill/crafting/lightsources/LightSourceLighter.kt
index e25677810..81a1a98cc 100644
--- a/Server/src/main/content/global/skill/crafting/lightsources/LightSourceLighter.kt
+++ b/Server/src/main/content/global/skill/crafting/lightsources/LightSourceLighter.kt
@@ -66,6 +66,12 @@ class LightSourceLighter : UseWithHandler(590,36,38){
lightSource ?: return false
+ // For Sea Slug Quest - No lighting of any torch on the fishing platform.
+ if(event.player.location.isInRegion(11059)) {
+ event.player.sendMessage("Your tinderbox is damp from the sea crossing. It won't work here.")
+ return true
+ }
+
if(!light(event.player,used,lightSource)){
event.player.sendMessage("You need a Firemaking level of at least ${lightSource.levelRequired} to light this.")
}
diff --git a/Server/src/main/content/global/skill/crafting/pottery/FirePotteryPulse.java b/Server/src/main/content/global/skill/crafting/pottery/FirePotteryPulse.java
index e7af471ef..e4cf4ec71 100644
--- a/Server/src/main/content/global/skill/crafting/pottery/FirePotteryPulse.java
+++ b/Server/src/main/content/global/skill/crafting/pottery/FirePotteryPulse.java
@@ -56,7 +56,7 @@ public final class FirePotteryPulse extends SkillPulse
- {
return false;
}
if (!player.getInventory().containsItem(pottery.getUnfinished())) {
- player.getPacketDispatch().sendMessage("You need a " + pottery.name().toLowerCase() + "in order to do this.");
+ player.getPacketDispatch().sendMessage("You need a " + pottery.name().toLowerCase() + " in order to do this.");
return false;
}
return true;
diff --git a/Server/src/main/content/global/skill/farming/CompostBin.kt b/Server/src/main/content/global/skill/farming/CompostBin.kt
index 617e800db..c7e7f5cc2 100644
--- a/Server/src/main/content/global/skill/farming/CompostBin.kt
+++ b/Server/src/main/content/global/skill/farming/CompostBin.kt
@@ -19,6 +19,19 @@ class CompostBin(val player: Player, val bin: CompostBins) {
var finishedTime = 0L
var isFinished = false
+ /**
+ * Resets the compost bin to its initial state.
+ */
+ fun reset() {
+ items.clear()
+ isSuperCompost = true
+ isTomatoes = true
+ isClosed = false
+ finishedTime = 0L
+ isFinished = false
+ updateBit()
+ }
+
fun isFull() : Boolean {
return items.size == 15
}
diff --git a/Server/src/main/content/global/skill/farming/CropHarvester.kt b/Server/src/main/content/global/skill/farming/CropHarvester.kt
index 779609bf8..b70347b67 100644
--- a/Server/src/main/content/global/skill/farming/CropHarvester.kt
+++ b/Server/src/main/content/global/skill/farming/CropHarvester.kt
@@ -61,7 +61,13 @@ class CropHarvester : OptionHandler() {
}
}
val anim = when (requiredItem) {
- Items.SPADE_952 -> if (fPatch.type == PatchType.HERB_PATCH) Animation(2282) else Animation(830)
+ Items.SPADE_952 -> {
+ when (fPatch.type) {
+ PatchType.HERB_PATCH -> Animation(2282)
+ PatchType.FLOWER_PATCH -> Animation(2292)
+ else -> Animation(830)
+ }
+ }
Items.SECATEURS_5329 -> if (fPatch.type == PatchType.TREE_PATCH) Animation(2277) else Animation(7227)
Items.MAGIC_SECATEURS_7409 -> if (fPatch.type == PatchType.TREE_PATCH) Animation(3340) else Animation(7228)
else -> Animation(0)
@@ -76,19 +82,36 @@ class CropHarvester : OptionHandler() {
sendMessage(player, "You lack the needed tool to harvest these crops.")
return true
}
- if (firstHarvest) {
+ val necklace = getItemFromEquipment(player, EquipmentSlot.NECK)
+ var noted = false
+ if (necklace != null && (necklace.name.lowercase().contains("amulet of farming") || necklace.name.lowercase().contains("amulet of nature"))) {
+ noted = true
+ } else if (inEquipment(player,10878,1)) {
+ noted = true
+ }
+ val sendHarvestMessages = if (fPatch.type == PatchType.FLOWER_PATCH) false else true
+ if (sendHarvestMessages && firstHarvest) {
sendMessage(player, "You begin to harvest the $patchName.")
+ if (noted) {
+ sendMessage(player, "The leprechaun exchanges your produce for banknotes.")
+ }
firstHarvest = false
}
animate(player, anim)
playAudio(player, sound)
+ // TODO: If a flower patch is being harvested, delay the clearing of the
+ // patch until after the animation has played - https://youtu.be/lg4GktlVNUY?t=75
delay = 2
- addItem(player, reward.id)
+ if (noted) {
+ addItem(player, note(reward).id)
+ } else {
+ addItem(player, reward.id)
+ }
rewardXP(player, Skills.FARMING, plantable.harvestXP)
if (patch.patch.type in livesBased) {
patch.rollLivesDecrement(
getDynLevel(player, Skills.FARMING),
- requiredItem == Items.MAGIC_SECATEURS_7409
+ inInventory(player, Items.MAGIC_SECATEURS_7409) //add ||inEquipment() check when Fairy Tale pt 1 has been implemented
)
} else {
patch.harvestAmt--
@@ -96,7 +119,7 @@ class CropHarvester : OptionHandler() {
patch.clear()
}
}
- if (patch.cropLives <= 0 || patch.harvestAmt <= 0) {
+ if (sendHarvestMessages && (patch.cropLives <= 0 || patch.harvestAmt <= 0)) {
sendMessage(player, "The $patchName is now empty.")
}
return patch.cropLives <= 0 || patch.harvestAmt <= 0
diff --git a/Server/src/main/content/global/skill/farming/DigUpPatchDialogue.kt b/Server/src/main/content/global/skill/farming/DigUpPatchDialogue.kt
index 21a773c20..a0d70bb07 100644
--- a/Server/src/main/content/global/skill/farming/DigUpPatchDialogue.kt
+++ b/Server/src/main/content/global/skill/farming/DigUpPatchDialogue.kt
@@ -24,7 +24,7 @@ class DigUpPatchDialogue(player: Player? = null) : DialoguePlugin(player) {
}
if (patch?.patch?.type == PatchType.TREE_PATCH) {
val isTreeStump = patch?.getCurrentState() == patch?.plantable!!.value + patch?.plantable!!.stages + 2
- if (!isTreeStump) {
+ if (patch!!.isGrown() && !isTreeStump) {
sendMessage(player, "You need to chop this tree down first.") // this message is not authentic
stage = 1000
return true
diff --git a/Server/src/main/content/global/skill/farming/FarmerPayOptionDialogue.kt b/Server/src/main/content/global/skill/farming/FarmerPayOptionDialogue.kt
index eeb8903f5..7b29a5568 100644
--- a/Server/src/main/content/global/skill/farming/FarmerPayOptionDialogue.kt
+++ b/Server/src/main/content/global/skill/farming/FarmerPayOptionDialogue.kt
@@ -1,68 +1,113 @@
package content.global.skill.farming
-import core.game.node.item.Item
-import org.rs09.consts.Items
+import core.api.*
import core.game.dialogue.DialogueFile
+import core.game.dialogue.FacialExpression
+import core.game.dialogue.Topic
+import core.game.node.item.Item
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
+import org.rs09.consts.Items
-class FarmerPayOptionDialogue(val patch: Patch): DialogueFile() {
+class FarmerPayOptionDialogue(val patch: Patch, val quickPay: Boolean = false): DialogueFile() {
var item: Item? = null
override fun handle(componentID: Int, buttonID: Int) {
- when(stage){
+ when (stage) {
START_DIALOGUE -> {
- item = patch.plantable?.protectionItem
- val protectionText = when(item?.id){
- Items.COMPOST_6032 -> if(item?.amount == 1) "bucket of compost" else "buckets of compost"
- Items.POTATOES10_5438 -> if(item?.amount == 1) "sack of potatoes" else "sacks of potatoes"
- Items.ONIONS10_5458 -> if(item?.amount == 1) "sack of onions" else "sacks of onions"
- Items.CABBAGES10_5478 -> if(item?.amount == 1) "sack of cabbages" else "sacks of cabbages"
- Items.JUTE_FIBRE_5931 -> "jute fibres"
- Items.APPLES5_5386 -> if(item?.amount == 1) "basket of apples" else "baskets of apples"
- Items.MARIGOLDS_6010 -> "harvest of marigold"
- Items.TOMATOES5_5968 -> if(item?.amount == 1) "basket of tomatoes" else "baskets of tomatoes"
- Items.ORANGES5_5396 -> if(item?.amount == 1) "basket of oranges" else "baskets of oranges"
- Items.COCONUT_5974 -> "coconuts"
- Items.CACTUS_SPINE_6016 -> "cactus spines"
- Items.STRAWBERRIES5_5406 -> if(item?.amount == 1) "basket of strawberries" else "baskets of strawberries"
- Items.BANANAS5_5416 -> if(item?.amount == 1) "basket of bananas" else "baskets of bananas"
- else -> item?.name?.toLowerCase()
- }
- if(item == null) npc("Sorry, I won't protect that.").also { stage = END_DIALOGUE }
- else{
- npc("I would like ${item?.amount} $protectionText","to protect that patch.")
- stage++
- }
- }
-
- 1 -> options("Sure!","No, thanks.").also { stage++ }
- 2 -> {
- if(player!!.inventory.containsItem(item)){
- player("Here you go.").also { stage = 10 }
+ if (patch.patch.type == PatchType.TREE_PATCH && patch.plantable != null && patch.isGrown()) {
+ // This is for the right-click "Pay" option; full dialogue is in GardenerDialoguePlugin
+ showTopics(
+ Topic("Yes, get rid of the tree.", 300, true),
+ Topic("No thanks.", END_DIALOGUE, true),
+ title = "Pay 200 gp to have the tree chopped down?"
+ )
+ } else if (patch.protectionPaid) {
+ npc("I don't know what you're talking about - I'm already", "looking after that patch for you.").also { stage = 100 }
+ } else if (patch.isDead) {
+ npc("That patch is dead - it's too late for me to do", "anything about it now.").also { stage = END_DIALOGUE }
+ } else if (patch.isDiseased) {
+ npc("That patch is diseased - I can't look after it", "until it has been cured.").also { stage = END_DIALOGUE } // this dialogue is not authentic
+ } else if (patch.isWeedy() || patch.isEmptyAndWeeded()) {
+ npc(FacialExpression.NEUTRAL, "You don't have anything planted in that patch. Plant", "something and I might agree to look after it for you.").also { stage = END_DIALOGUE }
+ } else if (patch.isGrown()) {
+ npc("That patch is already fully grown!", "I don't know what you want me to do with it!").also { stage = END_DIALOGUE }
} else {
- item = Item(item!!.noteChange,item!!.amount)
- if(player!!.inventory.containsItem(item)){
- player("Here you go.").also { stage = 10 }
+ item = patch.plantable?.protectionItem
+ val protectionText = when (item?.id) {
+ Items.COMPOST_6032 -> if (item?.amount == 1) "bucket of compost" else "buckets of compost"
+ Items.POTATOES10_5438 -> if (item?.amount == 1) "sack of potatoes" else "sacks of potatoes"
+ Items.ONIONS10_5458 -> if (item?.amount == 1) "sack of onions" else "sacks of onions"
+ Items.CABBAGES10_5478 -> if (item?.amount == 1) "sack of cabbages" else "sacks of cabbages"
+ Items.JUTE_FIBRE_5931 -> "jute fibres"
+ Items.APPLES5_5386 -> if (item?.amount == 1) "basket of apples" else "baskets of apples"
+ Items.MARIGOLDS_6010 -> "harvest of marigold"
+ Items.TOMATOES5_5968 -> if (item?.amount == 1) "basket of tomatoes" else "baskets of tomatoes"
+ Items.ORANGES5_5396 -> if (item?.amount == 1) "basket of oranges" else "baskets of oranges"
+ Items.COCONUT_5974 -> "coconuts"
+ Items.CACTUS_SPINE_6016 -> "cactus spines"
+ Items.STRAWBERRIES5_5406 -> if (item?.amount == 1) "basket of strawberries" else "baskets of strawberries"
+ Items.BANANAS5_5416 -> if (item?.amount == 1) "basket of bananas" else "baskets of bananas"
+ else -> item?.name?.lowercase()
+ }
+ if (item == null) {
+ npc("Sorry, I won't protect that.").also { stage = END_DIALOGUE }
+ } else if (quickPay && !(inInventory(player!!, item!!.id, item!!.amount) || inInventory(player!!, note(item!!).id, note(item!!).amount))) {
+ val amount = if (item?.amount == 1) "one" else item?.amount
+ npc(FacialExpression.HAPPY, "I want $amount $protectionText for that.")
+ stage = 200
+ } else if (quickPay) {
+ val amount = if (item?.amount == 1) "one" else item?.amount
+ showTopics(
+ Topic("Yes", 20, true),
+ Topic("No", END_DIALOGUE, true),
+ title = "Pay $amount $protectionText?"
+ )
} else {
- player("I don't have that to give.").also { stage = 20 }
+ val amount = if (item?.amount == 1) "one" else item?.amount
+ npc("If you like, but I want $amount $protectionText for that.")
+ stage++
}
}
}
- 10 -> {
- if(player!!.inventory.remove(item)){
- npc("Thank you! I'll keep an eye on this patch.").also { stage = END_DIALOGUE }
- patch?.protectionPaid = true
+ 1 -> {
+ if (!(inInventory(player!!, item!!.id, item!!.amount) || inInventory(player!!, note(item!!).id, note(item!!).amount))) {
+ player("I'm afraid I don't have any of those at the moment.").also { stage = 10 }
} else {
- npc("That stuff just... vanished....").also { stage = END_DIALOGUE }
+ showTopics(
+ Topic(FacialExpression.NEUTRAL, "Okay, it's a deal.", 20),
+ Topic(FacialExpression.NEUTRAL, "No, that's too much.", 10)
+ )
}
}
+ 10 -> npc("Well, I'm not wasting my time for free.").also { stage = END_DIALOGUE }
+
20 -> {
- npc("Come back when you do.")
- stage = END_DIALOGUE
+ if (removeItem(player!!, item) || removeItem(player!!, note(item!!))) {
+ patch.protectionPaid = true
+ // Note: A slight change in this dialogue was seen in a December 2009 video - https://youtu.be/7gVh42ylQ48?t=138
+ npc("That'll do nicely, ${if (player!!.isMale) "sir" else "madam"}. Leave it with me - I'll make sure", "those crops grow for you.").also { stage = END_DIALOGUE }
+ } else {
+ npc("This shouldn't be happening. Please report this.").also { stage = END_DIALOGUE }
+ }
+ }
+
+ 100 -> player("Oh sorry, I forgot.").also { stage = END_DIALOGUE }
+
+ // Right-click "Pay" - protect patch - player doesn't have payment
+ 200 -> player(FacialExpression.NEUTRAL, "Thanks, maybe another time.").also { stage = END_DIALOGUE }
+
+ // Right-click "Pay" - chop down tree
+ 300 -> {
+ if (removeItem(player!!, Item(Items.COINS_995, 200))) {
+ patch.clear()
+ dialogue("The gardener obligingly removes your tree.").also { stage = END_DIALOGUE }
+ } else {
+ dialogue("You need 200 gp to pay for that.").also { stage = END_DIALOGUE } // not authentic
+ }
}
}
}
-}
\ No newline at end of file
+}
diff --git a/Server/src/main/content/global/skill/farming/FarmerPayOptionHandler.kt b/Server/src/main/content/global/skill/farming/FarmerPayOptionHandler.kt
index 724ce6c73..52d7874ad 100644
--- a/Server/src/main/content/global/skill/farming/FarmerPayOptionHandler.kt
+++ b/Server/src/main/content/global/skill/farming/FarmerPayOptionHandler.kt
@@ -1,5 +1,6 @@
package content.global.skill.farming
+import core.api.openDialogue
import core.game.node.Node
import core.game.node.entity.player.Player
import core.game.interaction.InteractionListener
@@ -8,35 +9,20 @@ import core.game.interaction.IntType
class FarmerPayOptionHandler : InteractionListener {
override fun defineListeners() {
- on(IntType.NPC,"pay","pay (north)","pay (north-west)"){ player, node ->
+ on(IntType.NPC,"pay","pay (north)","pay (north-west)") { player, node ->
return@on attemptPay(player,node,0)
}
- on(IntType.NPC,"pay (south)","pay (south-east)"){ player, node ->
+ on(IntType.NPC,"pay (south)","pay (south-east)") { player, node ->
return@on attemptPay(player,node,1)
}
}
- fun attemptPay(player: Player, node: Node, index: Int): Boolean{
+ fun attemptPay(player: Player, node: Node, index: Int): Boolean {
val farmer = Farmers.forId(node.id) ?: return false
val patch = farmer.patches[index].getPatchFor(player)
- if(patch.plantable == null){
- player.dialogueInterpreter.sendDialogue("I have nothing to protect in that patch.")
- return true
- }
-
- if(patch.protectionPaid){
- player.dialogueInterpreter.sendDialogue("I have already paid to protect that patch.")
- return true
- }
-
- if(patch.isGrown()){
- player.dialogueInterpreter.sendDialogue("This patch is already fully grown!")
- return true
- }
-
- player.dialogueInterpreter.open(FarmerPayOptionDialogue(patch),node.asNpc())
+ openDialogue(player, FarmerPayOptionDialogue(patch, true), node.asNpc())
return true
}
}
\ No newline at end of file
diff --git a/Server/src/main/content/global/skill/farming/FarmingPatch.kt b/Server/src/main/content/global/skill/farming/FarmingPatch.kt
index c322e4de8..ed033d253 100644
--- a/Server/src/main/content/global/skill/farming/FarmingPatch.kt
+++ b/Server/src/main/content/global/skill/farming/FarmingPatch.kt
@@ -117,8 +117,8 @@ enum class FarmingPatch(val varbit: Int, val type: PatchType) {
}
}
- fun getPatchFor(player: Player): Patch{
- var crops = getOrStartTimer
(player)!!
- return crops.getPatch(this)
+ fun getPatchFor(player: Player, addPatch : Boolean = true): Patch{
+ val crops = getOrStartTimer (player)
+ return crops.getPatch(this, addPatch)
}
}
diff --git a/Server/src/main/content/global/skill/farming/FarmingState.kt b/Server/src/main/content/global/skill/farming/FarmingState.kt
deleted file mode 100644
index ed7f769e5..000000000
--- a/Server/src/main/content/global/skill/farming/FarmingState.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-package content.global.skill.farming
-
-import core.api.*
-import core.Util.clamp
-import core.game.node.entity.player.Player
-import core.game.system.task.Pulse
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.launch
-import org.json.simple.JSONArray
-import org.json.simple.JSONObject
-import core.game.node.entity.state.PlayerState
-import core.game.node.entity.state.State
-import core.tools.SystemLogger
-import java.util.concurrent.TimeUnit
-import content.global.skill.farming.timers.*
-
-@PlayerState("farming")
-/**
- * Kept around solely for the purpose of porting save data from this old system to the new one.
- * //TODO REMOVE BY END OF 2023
-**/
-class FarmingState(player: Player? = null) : State(player) {
- override fun save(root: JSONObject) {}
- override fun parse(_data: JSONObject) {
- player ?: return
- if(_data.containsKey("farming-bins")){
- _data["bins"] = _data["farming-bins"]
- val timer = getOrStartTimer (player)
- timer.parse (_data, player)
- }
- if(_data.containsKey("farming-patches")){
- _data["patches"] = _data["farming-patches"]
- val timer = getOrStartTimer (player)
- timer.parse(_data, player)
- }
- }
-
- override fun newInstance(player: Player?): State {
- return FarmingState(player)
- }
-
- override fun createPulse() {}
-}
diff --git a/Server/src/main/content/global/skill/farming/HealthChecker.kt b/Server/src/main/content/global/skill/farming/HealthChecker.kt
index 43d0e24d9..5c819f1a3 100644
--- a/Server/src/main/content/global/skill/farming/HealthChecker.kt
+++ b/Server/src/main/content/global/skill/farming/HealthChecker.kt
@@ -36,13 +36,22 @@ class HealthChecker : OptionHandler() {
rewardXP(player, Skills.FARMING, patch.plantable?.checkHealthXP ?: 0.0)
patch.isCheckHealth = false
when (type) {
- PatchType.TREE_PATCH -> patch.setCurrentState(patch.getCurrentState() + 1)
- PatchType.FRUIT_TREE_PATCH -> patch.setCurrentState(patch.getCurrentState() - 14)
- PatchType.BUSH_PATCH -> {
- sendMessage(player, "You examine the bush for signs of disease and find that it's in perfect health.")
- patch.setCurrentState(patch.plantable!!.value + patch.plantable!!.stages + 4)
+ PatchType.TREE_PATCH -> {
+ patch.setCurrentState(patch.getCurrentState() + 1)
+ sendMessage(player, "You examine the tree for signs of disease and find that it is in perfect health.")
+ }
+ PatchType.FRUIT_TREE_PATCH -> {
+ patch.setCurrentState(patch.getCurrentState() - 14)
+ sendMessage(player, "You examine the tree for signs of disease and find that it is in perfect health.")
+ }
+ PatchType.BUSH_PATCH -> {
+ patch.setCurrentState(patch.plantable!!.value + patch.plantable!!.stages + 4)
+ sendMessage(player, "You examine the bush for signs of disease and find that it's in perfect health.")
+ }
+ PatchType.CACTUS_PATCH -> {
+ patch.setCurrentState(patch.plantable!!.value + patch.plantable!!.stages + 3)
+ sendMessage(player, "You examine the cactus for signs of disease and find that it is in perfect health.")
}
- PatchType.CACTUS_PATCH -> patch.setCurrentState(patch.plantable!!.value + patch.plantable!!.stages + 3)
else -> log(this::class.java, Log.ERR, "Unreachable patch type from when(type) switch in HealthChecker.kt")
}
diff --git a/Server/src/main/content/global/skill/farming/Patch.kt b/Server/src/main/content/global/skill/farming/Patch.kt
index 486f1d5bf..c3b70eb6d 100644
--- a/Server/src/main/content/global/skill/farming/Patch.kt
+++ b/Server/src/main/content/global/skill/farming/Patch.kt
@@ -123,6 +123,9 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
log(this::class.java, Log.DEBUG, "Patch for ${player.username} at varbit ${patch.varbit} with plantable ${plantable?.name ?: "none"} was set to diseased at stage $currentGrowthStage, which isn't valid.")
return (state and (0x80.inv()))
}
+ else if (state in listOf(0, 1, 2, 3)){
+ // we're weedy (or an empty plot) as normal just continue
+ }
else {
log (this::class.java, Log.ERR, "Patch for ${player.username} at varbit ${patch.varbit} with plantable ${plantable?.name ?: "none"} was set to state $state at growth stage $currentGrowthStage, which isn't valid. We're not sure why this is happening.")
}
@@ -134,6 +137,13 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
return compost != CompostType.NONE
}
+ /**
+ * Returns true if the patch is fully grown.
+ *
+ * Note: This returns true if the patch is fully weedy.
+ * Use `plantable == null` to check if a patch does
+ * not have anything planted.
+ */
fun isGrown(): Boolean{
return currentGrowthStage == (plantable?.stages ?: 0)
}
@@ -144,7 +154,8 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
PatchType.FRUIT_TREE_PATCH -> setVarbit(player, patch.varbit, plantable!!.value + plantable!!.stages + 20)
PatchType.BUSH_PATCH -> setVarbit(player, patch.varbit, 250 + (plantable!!.ordinal - Plantable.REDBERRY_SEED.ordinal))
PatchType.CACTUS_PATCH -> setVarbit(player, patch.varbit, 31)
- else -> log(this::class.java, Log.WARN, "Invalid setting of isCheckHealth for patch type: " + patch.type.name)
+ PatchType.TREE_PATCH -> setVarbit(player, patch.varbit, plantable!!.value + plantable!!.stages)
+ else -> log(this::class.java, Log.WARN, "Invalid setting of isCheckHealth for patch type: " + patch.type.name + "at" + patch.name)
}
} else {
when(patch.type){
@@ -276,18 +287,18 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
return
}
- diseaseMod = when(compost){
+ // This is so a cheat can force disease
+ diseaseMod = if (diseaseMod < 0) -128 else when(compost){
CompostType.NONE -> 0
CompostType.COMPOST -> 8
CompostType.SUPERCOMPOST -> 13
}
- if(patch != FarmingPatch.TROLL_STRONGHOLD_HERB && RandomFunction.random(128) <= (17 - diseaseMod) && !isWatered && !isGrown() && !protectionPaid && !isFlowerProtected() && patch.type != PatchType.EVIL_TURNIP_PATCH ){
- //bush, tree, fruit tree, herb and cactus can not disease on stage 1(0) of growth.
- if(!((patch.type == PatchType.BUSH_PATCH || patch.type == PatchType.TREE_PATCH || patch.type == PatchType.FRUIT_TREE_PATCH || patch.type == PatchType.CACTUS_PATCH || patch.type == PatchType.HERB_PATCH) && currentGrowthStage == 0)) {
- isDiseased = true
- return
- }
+ if(patch != FarmingPatch.TROLL_STRONGHOLD_HERB && RandomFunction.random(128) <= (17 - diseaseMod) && !isWatered && !isGrown() && !protectionPaid && !isFlowerProtected() && patch.type != PatchType.EVIL_TURNIP_PATCH && currentGrowthStage != 0){
+ isDiseased = true
+ // If we manually set disease mod reset it back to 0 so that crops can naturally grow after being treated/accidentally attempted to disease when they cannot be
+ if (diseaseMod < 0) diseaseMod = 0
+ return
}
if((patch.type == PatchType.FRUIT_TREE_PATCH || patch.type == PatchType.TREE_PATCH || patch.type == PatchType.BUSH_PATCH || patch.type == PatchType.CACTUS_PATCH) && plantable != null && plantable?.stages == currentGrowthStage + 1){
@@ -340,6 +351,19 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
}
fun clear(){
+ if (isGrown()) {
+ var seedAmount = 1
+ var seedMessage = "a seed"
+ if (patch.type == PatchType.ALLOTMENT || plantable!! == Plantable.JUTE_SEED) {
+ seedAmount = 3
+ seedMessage = "some seeds"
+ } else if (patch.type == PatchType.HOPS_PATCH) {
+ seedAmount = 4
+ seedMessage = "some seeds"
+ }
+ addItemOrDrop(player, plantable!!.itemID, seedAmount)
+ sendMessage(player, "You find $seedMessage in the patch as you clear it.")
+ }
isCheckHealth = false
isDiseased = false
isDead = false
@@ -376,7 +400,7 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
FarmingPatch.CATHERBY_ALLOTMENT_S,FarmingPatch.CATHERBY_ALLOTMENT_N -> FarmingPatch.CATHERBY_FLOWER_C
FarmingPatch.PORT_PHAS_ALLOTMENT_SE,FarmingPatch.PORT_PHAS_ALLOTMENT_NW -> FarmingPatch.PORT_PHAS_FLOWER_C
else -> return false
- }.getPatchFor(player)
+ }.getPatchFor(player, false)
return (fpatch.plantable != null &&
(fpatch.plantable == plantable?.protectionFlower || fpatch.plantable == Plantable.forItemID(Items.WHITE_LILY_SEED_14589))
diff --git a/Server/src/main/content/global/skill/farming/PatchRaker.kt b/Server/src/main/content/global/skill/farming/PatchRaker.kt
index 27bc3d8fa..10af95489 100644
--- a/Server/src/main/content/global/skill/farming/PatchRaker.kt
+++ b/Server/src/main/content/global/skill/farming/PatchRaker.kt
@@ -15,7 +15,7 @@ object PatchRaker {
val p = patch.getPatchFor(player)
val patchName = p.patch.type.displayName()
var firstRake = true
- if (p.isEmptyAndWeeded()) {
+ if (!p.isWeedy()) {
sendMessage(player, "This $patchName doesn't need weeding right now.")
return
}
diff --git a/Server/src/main/content/global/skill/farming/Plantable.kt b/Server/src/main/content/global/skill/farming/Plantable.kt
index c77d22b6e..83c016c64 100644
--- a/Server/src/main/content/global/skill/farming/Plantable.kt
+++ b/Server/src/main/content/global/skill/farming/Plantable.kt
@@ -3,88 +3,88 @@ package content.global.skill.farming
import core.game.node.item.Item
import org.rs09.consts.Items
-enum class Plantable(val itemID: Int, val value: Int, val stages: Int, val plantingXP: Double, val harvestXP: Double, val checkHealthXP: Double, val requiredLevel: Int, val applicablePatch: PatchType, val harvestItem: Int, val protectionItem: Item? = null,val protectionFlower: Plantable? = null) {
+enum class Plantable(val itemID: Int, val displayName: String, val value: Int, val stages: Int, val plantingXP: Double, val harvestXP: Double, val checkHealthXP: Double, val requiredLevel: Int, val applicablePatch: PatchType, val harvestItem: Int, val protectionItem: Item? = null, val protectionFlower: Plantable? = null) {
- //Flowers
- MARIGOLD_SEED(5096,8,4,8.5,47.0,0.0,2,PatchType.FLOWER_PATCH,Items.MARIGOLDS_6010),
- ROSEMARY_SEED(5097,13,4,12.0,66.5,0.0,11,PatchType.FLOWER_PATCH, Items.ROSEMARY_6014),
- NASTURTIUM_SEED(5098,18,4,19.5,111.0,0.0,24,PatchType.FLOWER_PATCH,Items.NASTURTIUMS_6012),
- WOAD_SEED(5099,23,4,20.5,115.5,0.0,25,PatchType.FLOWER_PATCH,Items.WOAD_LEAF_1793),
- LIMPWURT_SEED(5100,28,4,21.5,120.0,0.0,26,PatchType.FLOWER_PATCH,Items.LIMPWURT_ROOT_225),
- WHITE_LILY_SEED(14589,37,4,42.0,250.0,0.0,52,PatchType.FLOWER_PATCH,Items.WHITE_LILY_14583),
+ // Flowers
+ MARIGOLD_SEED(Items.MARIGOLD_SEED_5096,"marigold seed",8,4,8.5,47.0,0.0,2,PatchType.FLOWER_PATCH,Items.MARIGOLDS_6010),
+ ROSEMARY_SEED(Items.ROSEMARY_SEED_5097,"rosemary seed",13,4,12.0,66.5,0.0,11,PatchType.FLOWER_PATCH, Items.ROSEMARY_6014),
+ NASTURTIUM_SEED(Items.NASTURTIUM_SEED_5098,"nasturtium seed",18,4,19.5,111.0,0.0,24,PatchType.FLOWER_PATCH,Items.NASTURTIUMS_6012),
+ WOAD_SEED(Items.WOAD_SEED_5099,"woad seed",23,4,20.5,115.5,0.0,25,PatchType.FLOWER_PATCH,Items.WOAD_LEAF_1793),
+ LIMPWURT_SEED(Items.LIMPWURT_SEED_5100,"limpwurt seed",28,4,21.5,120.0,0.0,26,PatchType.FLOWER_PATCH,Items.LIMPWURT_ROOT_225),
+ WHITE_LILY_SEED(Items.WHITE_LILY_SEED_14589,"white lily seed",37,4,42.0,250.0,0.0,52,PatchType.FLOWER_PATCH,Items.WHITE_LILY_14583),
- //Flower(Technically)
- SCARECROW(6059,33,3,0.0,0.0,0.0,23,PatchType.FLOWER_PATCH,Items.SCARECROW_6059),
+ // Flower (technically)
+ SCARECROW(Items.SCARECROW_6059,"scarecrow",33,3,0.0,0.0,0.0,23,PatchType.FLOWER_PATCH,Items.SCARECROW_6059),
- //Allotments
- POTATO_SEED(5318, 6, 4, 8.0, 9.0, 0.0, 1, PatchType.ALLOTMENT, Items.POTATO_1942,Item(Items.COMPOST_6032,2),MARIGOLD_SEED),
- ONION_SEED(5319, 13, 4, 9.5, 10.5,0.0, 5, PatchType.ALLOTMENT,Items.ONION_1957,Item(Items.POTATOES10_5438),MARIGOLD_SEED),
- CABBAGE_SEED(5324, 20, 4, 10.0, 11.5, 0.0,7, PatchType.ALLOTMENT,Items.CABBAGE_1965,Item(Items.ONIONS10_5458),ROSEMARY_SEED),
- TOMATO_SEED(5322,27,4,12.5,14.0,0.0,12,PatchType.ALLOTMENT,Items.TOMATO_1982,Item(Items.CABBAGES10_5478,2),MARIGOLD_SEED),
- SWEETCORN_SEED(5320,34,6,17.0,19.0,0.0,20,PatchType.ALLOTMENT,Items.SWEETCORN_5986,Item(Items.JUTE_FIBRE_5931,10),SCARECROW),
- STRAWBERRY_SEED(5323,43,6,26.0,29.0,0.0,31,PatchType.ALLOTMENT,Items.STRAWBERRY_5504,Item(Items.APPLES5_5386)),
- WATERMELON_SEED(5321,52,8,48.5,54.5,0.0,47,PatchType.ALLOTMENT,Items.WATERMELON_5982,Item(Items.CURRY_LEAF_5970,10),NASTURTIUM_SEED),
+ // Allotments
+ POTATO_SEED(Items.POTATO_SEED_5318, "potato seed", 6, 4, 8.0, 9.0, 0.0, 1, PatchType.ALLOTMENT, Items.POTATO_1942,Item(Items.COMPOST_6032,2),MARIGOLD_SEED),
+ ONION_SEED(Items.ONION_SEED_5319, "onion seed", 13, 4, 9.5, 10.5,0.0, 5, PatchType.ALLOTMENT,Items.ONION_1957,Item(Items.POTATOES10_5438),MARIGOLD_SEED),
+ CABBAGE_SEED(Items.CABBAGE_SEED_5324, "cabbage seed", 20, 4, 10.0, 11.5, 0.0,7, PatchType.ALLOTMENT,Items.CABBAGE_1965,Item(Items.ONIONS10_5458),ROSEMARY_SEED),
+ TOMATO_SEED(Items.TOMATO_SEED_5322,"tomato seed",27,4,12.5,14.0,0.0,12,PatchType.ALLOTMENT,Items.TOMATO_1982,Item(Items.CABBAGES10_5478,2),MARIGOLD_SEED),
+ SWEETCORN_SEED(Items.SWEETCORN_SEED_5320,"sweetcorn seed",34,6,17.0,19.0,0.0,20,PatchType.ALLOTMENT,Items.SWEETCORN_5986,Item(Items.JUTE_FIBRE_5931,10),SCARECROW),
+ STRAWBERRY_SEED(Items.STRAWBERRY_SEED_5323,"strawberry seed",43,6,26.0,29.0,0.0,31,PatchType.ALLOTMENT,Items.STRAWBERRY_5504,Item(Items.APPLES5_5386)),
+ WATERMELON_SEED(Items.WATERMELON_SEED_5321,"watermelon seed",52,8,48.5,54.5,0.0,47,PatchType.ALLOTMENT,Items.WATERMELON_5982,Item(Items.CURRY_LEAF_5970,10),NASTURTIUM_SEED),
- //Hops
- BARLEY_SEED(5305,49,4,8.5,9.5,0.0,3,PatchType.HOPS_PATCH,Items.BARLEY_6006,Item(Items.COMPOST_6032,3)),
- HAMMERSTONE_SEED(5307,4,4,9.0,10.0,0.0,4,PatchType.HOPS_PATCH,Items.HAMMERSTONE_HOPS_5994,Item(Items.MARIGOLDS_6010)),
- ASGARNIAN_SEED(5308,11,5,10.9,12.0,0.0,8,PatchType.HOPS_PATCH,Items.ASGARNIAN_HOPS_5996,Item(Items.ONIONS10_5458)),
- JUTE_SEED(5306,56,5,13.0,14.5,0.0,13,PatchType.HOPS_PATCH,Items.JUTE_FIBRE_5931,Item(Items.BARLEY_MALT_6008,6)),
- YANILLIAN_SEED(5309,19,6,14.5,16.0,0.0,16,PatchType.HOPS_PATCH,Items.YANILLIAN_HOPS_5998,Item(Items.TOMATOES5_5968)),
- KRANDORIAN_SEED(5310,28,7,17.5,19.5,0.0,21,PatchType.HOPS_PATCH,Items.KRANDORIAN_HOPS_6000,Item(Items.CABBAGES10_5478,3)),
- WILDBLOOD_SEED(5311,38,8,23.0,26.0,0.0,28,PatchType.HOPS_PATCH,Items.WILDBLOOD_HOPS_6002,Item(Items.NASTURTIUMS_6012)),
+ // Hops
+ BARLEY_SEED(Items.BARLEY_SEED_5305,"barley seed",49,4,8.5,9.5,0.0,3,PatchType.HOPS_PATCH,Items.BARLEY_6006,Item(Items.COMPOST_6032,3)),
+ HAMMERSTONE_SEED(Items.HAMMERSTONE_SEED_5307,"Hammerstone hop seed",4,4,9.0,10.0,0.0,4,PatchType.HOPS_PATCH,Items.HAMMERSTONE_HOPS_5994,Item(Items.MARIGOLDS_6010)),
+ ASGARNIAN_SEED(Items.ASGARNIAN_SEED_5308,"Asgarnian hop seed",11,5,10.9,12.0,0.0,8,PatchType.HOPS_PATCH,Items.ASGARNIAN_HOPS_5996,Item(Items.ONIONS10_5458)),
+ JUTE_SEED(Items.JUTE_SEED_5306,"jute plant seed",56,5,13.0,14.5,0.0,13,PatchType.HOPS_PATCH,Items.JUTE_FIBRE_5931,Item(Items.BARLEY_MALT_6008,6)),
+ YANILLIAN_SEED(Items.YANILLIAN_SEED_5309,"Yanillian hop seed",19,6,14.5,16.0,0.0,16,PatchType.HOPS_PATCH,Items.YANILLIAN_HOPS_5998,Item(Items.TOMATOES5_5968)),
+ KRANDORIAN_SEED(Items.KRANDORIAN_SEED_5310,"Krandorian hop seed",28,7,17.5,19.5,0.0,21,PatchType.HOPS_PATCH,Items.KRANDORIAN_HOPS_6000,Item(Items.CABBAGES10_5478,3)),
+ WILDBLOOD_SEED(Items.WILDBLOOD_SEED_5311,"Wildblood hop seed",38,8,23.0,26.0,0.0,28,PatchType.HOPS_PATCH,Items.WILDBLOOD_HOPS_6002,Item(Items.NASTURTIUMS_6012)),
- //Trees
- OAK_SAPLING(5370,8,4,14.0,0.0,467.3,15,PatchType.TREE_PATCH,Items.OAK_ROOTS_6043,Item(Items.TOMATOES5_5968)),
- WILLOW_SAPLING(5371,15,6,25.0,0.0,1456.5,30,PatchType.TREE_PATCH,Items.WILLOW_ROOTS_6045,Item(Items.APPLES5_5386)),
- MAPLE_SAPLING(5372,24,8,45.0,0.0,3403.4,45,PatchType.TREE_PATCH,Items.MAPLE_ROOTS_6047,Item(Items.ORANGES5_5396)),
- YEW_SAPLING(5373,35,10,81.0,0.0,7069.9,60,PatchType.TREE_PATCH,Items.YEW_ROOTS_6049,Item(Items.CACTUS_SPINE_6016,10)),
- MAGIC_SAPLING(5374,48,12,145.5,0.0,13768.3,75,PatchType.TREE_PATCH,Items.MAGIC_ROOTS_6051,Item(Items.COCONUT_5974,25)),
+ // Trees
+ OAK_SAPLING(Items.OAK_SAPLING_5370,"oak sapling",8,4,14.0,0.0,467.3,15,PatchType.TREE_PATCH,Items.OAK_ROOTS_6043,Item(Items.TOMATOES5_5968)),
+ WILLOW_SAPLING(Items.WILLOW_SAPLING_5371,"willow sapling",15,6,25.0,0.0,1456.5,30,PatchType.TREE_PATCH,Items.WILLOW_ROOTS_6045,Item(Items.APPLES5_5386)),
+ MAPLE_SAPLING(Items.MAPLE_SAPLING_5372,"maple sapling",24,8,45.0,0.0,3403.4,45,PatchType.TREE_PATCH,Items.MAPLE_ROOTS_6047,Item(Items.ORANGES5_5396)),
+ YEW_SAPLING(Items.YEW_SAPLING_5373,"yew sapling",35,10,81.0,0.0,7069.9,60,PatchType.TREE_PATCH,Items.YEW_ROOTS_6049,Item(Items.CACTUS_SPINE_6016,10)),
+ MAGIC_SAPLING(Items.MAGIC_SAPLING_5374,"magic Tree sapling",48,12,145.5,0.0,13768.3,75,PatchType.TREE_PATCH,Items.MAGIC_ROOTS_6051,Item(Items.COCONUT_5974,25)),
- //Fruit Trees
- APPLE_SAPLING(5496,8,6,22.0,8.5,1199.5,27,PatchType.FRUIT_TREE_PATCH,Items.COOKING_APPLE_1955,Item(Items.SWEETCORN_5986,9)),
- BANANA_SAPLING(5497,35,6,28.0,10.5,1750.5,33,PatchType.FRUIT_TREE_PATCH,Items.BANANA_1963,Item(Items.APPLES5_5386,4)),
- ORANGE_SAPLING(5498,72,6,35.5,13.5,2470.2,39,PatchType.FRUIT_TREE_PATCH,Items.ORANGE_2108,Item(Items.STRAWBERRIES5_5406,3)),
- CURRY_SAPLING(5499,99,6,40.0,15.0,2906.9,42,PatchType.FRUIT_TREE_PATCH,Items.CURRY_LEAF_5970,Item(Items.BANANAS5_5416,5)),
- PINEAPPLE_SAPLING(5500,136,6,57.0,21.5,4605.7,51,PatchType.FRUIT_TREE_PATCH,Items.PINEAPPLE_2114,Item(Items.WATERMELON_5982,10)),
- PAPAYA_SAPLING(5501,163,6,72.0,27.0,6146.4,57,PatchType.FRUIT_TREE_PATCH,Items.PAPAYA_FRUIT_5972,Item(Items.PINEAPPLE_2114,10)),
- PALM_SAPLING(5502,200,6,110.5,41.5,10150.1,68,PatchType.FRUIT_TREE_PATCH,Items.COCONUT_5974,Item(Items.PAPAYA_FRUIT_5972,15)),
+ // Fruit Trees
+ APPLE_SAPLING(Items.APPLE_SAPLING_5496,"apple tree sapling",8,6,22.0,8.5,1199.5,27,PatchType.FRUIT_TREE_PATCH,Items.COOKING_APPLE_1955,Item(Items.SWEETCORN_5986,9)),
+ BANANA_SAPLING(Items.BANANA_SAPLING_5497,"banana tree sapling",35,6,28.0,10.5,1750.5,33,PatchType.FRUIT_TREE_PATCH,Items.BANANA_1963,Item(Items.APPLES5_5386,4)),
+ ORANGE_SAPLING(Items.ORANGE_SAPLING_5498,"orange tree sapling",72,6,35.5,13.5,2470.2,39,PatchType.FRUIT_TREE_PATCH,Items.ORANGE_2108,Item(Items.STRAWBERRIES5_5406,3)),
+ CURRY_SAPLING(Items.CURRY_SAPLING_5499,"curry tree sapling",99,6,40.0,15.0,2906.9,42,PatchType.FRUIT_TREE_PATCH,Items.CURRY_LEAF_5970,Item(Items.BANANAS5_5416,5)),
+ PINEAPPLE_SAPLING(Items.PINEAPPLE_SAPLING_5500,"pineapple plant",136,6,57.0,21.5,4605.7,51,PatchType.FRUIT_TREE_PATCH,Items.PINEAPPLE_2114,Item(Items.WATERMELON_5982,10)),
+ PAPAYA_SAPLING(Items.PAPAYA_SAPLING_5501,"papaya tree sapling",163,6,72.0,27.0,6146.4,57,PatchType.FRUIT_TREE_PATCH,Items.PAPAYA_FRUIT_5972,Item(Items.PINEAPPLE_2114,10)),
+ PALM_SAPLING(Items.PALM_SAPLING_5502,"palm tree sapling",200,6,110.5,41.5,10150.1,68,PatchType.FRUIT_TREE_PATCH,Items.COCONUT_5974,Item(Items.PAPAYA_FRUIT_5972,15)),
- //Bushes
- REDBERRY_SEED(5101,5,5,11.5,4.5,64.0,10,PatchType.BUSH_PATCH,Items.REDBERRIES_1951,Item(Items.CABBAGES10_5478,4)),
- CADAVABERRY_SEED(5102,15,6,18.0,7.0,102.5,22,PatchType.BUSH_PATCH,Items.CADAVA_BERRIES_753,Item(Items.TOMATOES5_5968,3)),
- DWELLBERRY_SEED(5103,26,27,31.5,12.0,177.5,36,PatchType.BUSH_PATCH,Items.DWELLBERRIES_2126,Item(Items.STRAWBERRIES5_5406,3)),
- JANGERBERRY_SEED(5104,38,8,50.5,19.0,284.5,48,PatchType.BUSH_PATCH,Items.JANGERBERRIES_247,Item(Items.WATERMELON_5982,6)),
- WHITEBERRY_SEED(5105,51,8,78.0,29.0,437.5,59,PatchType.BUSH_PATCH,Items.WHITE_BERRIES_239,null),
- POISON_IVY_SEED(5106,197,8,120.0,45.0,675.0,70,PatchType.BUSH_PATCH,Items.POISON_IVY_BERRIES_6018,null),
+ // Bushes
+ REDBERRY_SEED(Items.REDBERRY_SEED_5101,"redberry bush seed",5,5,11.5,4.5,64.0,10,PatchType.BUSH_PATCH,Items.REDBERRIES_1951,Item(Items.CABBAGES10_5478,4)),
+ CADAVABERRY_SEED(Items.CADAVABERRY_SEED_5102,"cadavaberry bush seed",15,6,18.0,7.0,102.5,22,PatchType.BUSH_PATCH,Items.CADAVA_BERRIES_753,Item(Items.TOMATOES5_5968,3)),
+ DWELLBERRY_SEED(Items.DWELLBERRY_SEED_5103,"dwellberry bush seed",26,27,31.5,12.0,177.5,36,PatchType.BUSH_PATCH,Items.DWELLBERRIES_2126,Item(Items.STRAWBERRIES5_5406,3)),
+ JANGERBERRY_SEED(Items.JANGERBERRY_SEED_5104,"jangerberry bush seed",38,8,50.5,19.0,284.5,48,PatchType.BUSH_PATCH,Items.JANGERBERRIES_247,Item(Items.WATERMELON_5982,6)),
+ WHITEBERRY_SEED(Items.WHITEBERRY_SEED_5105,"whiteberry bush seed",51,8,78.0,29.0,437.5,59,PatchType.BUSH_PATCH,Items.WHITE_BERRIES_239,null),
+ POISON_IVY_SEED(Items.POISON_IVY_SEED_5106,"poison ivy bush seed",197,8,120.0,45.0,675.0,70,PatchType.BUSH_PATCH,Items.POISON_IVY_BERRIES_6018,null),
- //Herbs
- GUAM_SEED(5291,4,4,11.0,12.5,0.0,9,PatchType.HERB_PATCH,Items.GRIMY_GUAM_199),
- MARRENTILL_SEED(5292,11,4,13.5,15.0,0.0,14,PatchType.HERB_PATCH,Items.GRIMY_MARRENTILL_201),
- TARROMIN_SEED(5293,18,4,16.0,18.0,0.0,19,PatchType.HERB_PATCH,Items.GRIMY_TARROMIN_203),
- HARRALANDER_SEED(5294,25,4,21.5,24.0,0.0,26,PatchType.HERB_PATCH,Items.GRIMY_HARRALANDER_205),
- RANARR_SEED(5295,32,4,27.0,30.5,0.0,32,PatchType.HERB_PATCH,Items.GRIMY_RANARR_207),
- AVANTOE_SEED(5298,39,4,54.5,61.5,0.0,50,PatchType.HERB_PATCH,Items.GRIMY_AVANTOE_211),
- TOADFLAX_SEED(5296,46,4,34.0,38.5,0.0,38,PatchType.HERB_PATCH,Items.GRIMY_TOADFLAX_3049),
- IRIT_SEED(5297,53,4,43.0,48.5,0.0,44,PatchType.HERB_PATCH,Items.GRIMY_IRIT_209),
- KWUARM_SEED(5299,68,4,69.0,78.0,0.0,56,PatchType.HERB_PATCH,Items.GRIMY_KWUARM_213),
- SNAPDRAGON_SEED(5300,75,4,87.5,98.5,0.0,62,PatchType.HERB_PATCH,Items.GRIMY_SNAPDRAGON_3051),
- CADANTINE_SEED(5301,82,4,106.5,120.0,0.0,67,PatchType.HERB_PATCH,Items.GRIMY_CADANTINE_215),
- LANTADYME_SEED(5302,89,4,134.5,151.5,0.0,73,PatchType.HERB_PATCH,Items.GRIMY_LANTADYME_2485),
- DWARF_WEED_SEED(5303,96,4,170.5,192.0,0.0,79,PatchType.HERB_PATCH,Items.GRIMY_DWARF_WEED_217),
- TORSTOL_SEED(5304,103,4,199.5,224.5,0.0,85,PatchType.HERB_PATCH,Items.GRIMY_TORSTOL_219),
- GOUT_TUBER(6311,192,4,105.0,45.0,0.0,29,PatchType.HERB_PATCH,Items.GOUTWEED_3261),
- SPIRIT_WEED_SEED(12176, 204, 4, 32.0, 36.0, 0.0, 36, PatchType.HERB_PATCH, Items.GRIMY_SPIRIT_WEED_12174),
+ // Herbs
+ GUAM_SEED(Items.GUAM_SEED_5291,"guam seed",4,4,11.0,12.5,0.0,9,PatchType.HERB_PATCH,Items.GRIMY_GUAM_199),
+ MARRENTILL_SEED(Items.MARRENTILL_SEED_5292,"marrentill seed",11,4,13.5,15.0,0.0,14,PatchType.HERB_PATCH,Items.GRIMY_MARRENTILL_201),
+ TARROMIN_SEED(Items.TARROMIN_SEED_5293,"tarromin seed",18,4,16.0,18.0,0.0,19,PatchType.HERB_PATCH,Items.GRIMY_TARROMIN_203),
+ HARRALANDER_SEED(Items.HARRALANDER_SEED_5294,"harralander seed",25,4,21.5,24.0,0.0,26,PatchType.HERB_PATCH,Items.GRIMY_HARRALANDER_205),
+ RANARR_SEED(Items.RANARR_SEED_5295,"ranarr seed",32,4,27.0,30.5,0.0,32,PatchType.HERB_PATCH,Items.GRIMY_RANARR_207),
+ AVANTOE_SEED(Items.AVANTOE_SEED_5298,"avantoe seed",39,4,54.5,61.5,0.0,50,PatchType.HERB_PATCH,Items.GRIMY_AVANTOE_211),
+ TOADFLAX_SEED(Items.TOADFLAX_SEED_5296,"toadflax seed",46,4,34.0,38.5,0.0,38,PatchType.HERB_PATCH,Items.GRIMY_TOADFLAX_3049),
+ IRIT_SEED(Items.IRIT_SEED_5297,"irit seed",53,4,43.0,48.5,0.0,44,PatchType.HERB_PATCH,Items.GRIMY_IRIT_209),
+ KWUARM_SEED(Items.KWUARM_SEED_5299,"kwuarm seed",68,4,69.0,78.0,0.0,56,PatchType.HERB_PATCH,Items.GRIMY_KWUARM_213),
+ SNAPDRAGON_SEED(Items.SNAPDRAGON_SEED_5300,"snapdragon seed",75,4,87.5,98.5,0.0,62,PatchType.HERB_PATCH,Items.GRIMY_SNAPDRAGON_3051),
+ CADANTINE_SEED(Items.CADANTINE_SEED_5301,"cadantine seed",82,4,106.5,120.0,0.0,67,PatchType.HERB_PATCH,Items.GRIMY_CADANTINE_215),
+ LANTADYME_SEED(Items.LANTADYME_SEED_5302,"lantadyme seed",89,4,134.5,151.5,0.0,73,PatchType.HERB_PATCH,Items.GRIMY_LANTADYME_2485),
+ DWARF_WEED_SEED(Items.DWARF_WEED_SEED_5303,"dwarf weed seed",96,4,170.5,192.0,0.0,79,PatchType.HERB_PATCH,Items.GRIMY_DWARF_WEED_217),
+ TORSTOL_SEED(Items.TORSTOL_SEED_5304,"torstol seed",103,4,199.5,224.5,0.0,85,PatchType.HERB_PATCH,Items.GRIMY_TORSTOL_219),
+ GOUT_TUBER(Items.GOUT_TUBER_6311,"gout tuber",192,4,105.0,45.0,0.0,29,PatchType.HERB_PATCH,Items.GOUTWEED_3261),
+ SPIRIT_WEED_SEED(Items.SPIRIT_WEED_SEED_12176,"spirit weed seed", 204, 4, 32.0, 36.0, 0.0, 36, PatchType.HERB_PATCH, Items.GRIMY_SPIRIT_WEED_12174),
- //Other
- BELLADONNA_SEED(5281, 4, 4, 91.0, 128.0, 0.0, 63, PatchType.BELLADONNA_PATCH, Items.CAVE_NIGHTSHADE_2398),
- MUSHROOM_SPORE(Items.MUSHROOM_SPORE_5282, 6, 7, 61.5, 57.7, 0.0, 53, PatchType.MUSHROOM_PATCH, Items.MUSHROOM_6004),
- CACTUS_SEED(Items.CACTUS_SEED_5280, 8, 7, 66.5, 25.0, 374.0, 55, PatchType.CACTUS_PATCH, Items.CACTUS_SPINE_6016),
- EVIL_TURNIP_SEED(Items.EVIL_TURNIP_SEED_12148, 4, 1, 41.0, 46.0, 0.0, 42, PatchType.EVIL_TURNIP_PATCH, Items.EVIL_TURNIP_12134)
+ // Special
+ BELLADONNA_SEED(Items.BELLADONNA_SEED_5281, "belladonna seed", 4, 4, 91.0, 128.0, 0.0, 63, PatchType.BELLADONNA_PATCH, Items.CAVE_NIGHTSHADE_2398),
+ MUSHROOM_SPORE(Items.MUSHROOM_SPORE_5282, "mushroom spore", 6, 7, 61.5, 57.7, 0.0, 53, PatchType.MUSHROOM_PATCH, Items.MUSHROOM_6004),
+ CACTUS_SEED(Items.CACTUS_SEED_5280, "cactus seed", 8, 7, 66.5, 25.0, 374.0, 55, PatchType.CACTUS_PATCH, Items.CACTUS_SPINE_6016),
+ EVIL_TURNIP_SEED(Items.EVIL_TURNIP_SEED_12148, "evil turnip seed", 4, 1, 41.0, 46.0, 0.0, 42, PatchType.EVIL_TURNIP_PATCH, Items.EVIL_TURNIP_12134)
;
- constructor(itemID: Int, value: Int, stages: Int, plantingXP: Double, harvestXP: Double, checkHealthXP: Double, requiredLevel: Int, applicablePatch: PatchType, harvestItem: Int, protectionFlower: Plantable)
- : this(itemID,value,stages,plantingXP,harvestXP,checkHealthXP,requiredLevel,applicablePatch,harvestItem,null,protectionFlower)
+ constructor(itemID: Int, displayName: String, value: Int, stages: Int, plantingXP: Double, harvestXP: Double, checkHealthXP: Double, requiredLevel: Int, applicablePatch: PatchType, harvestItem: Int, protectionFlower: Plantable)
+ : this(itemID,displayName,value,stages,plantingXP,harvestXP,checkHealthXP,requiredLevel,applicablePatch,harvestItem,null,protectionFlower)
companion object {
@JvmField
val plantables = values().map { it.itemID to it }.toMap()
diff --git a/Server/src/main/content/global/skill/farming/ToolLeprechaunInterface.kt b/Server/src/main/content/global/skill/farming/ToolLeprechaunInterface.kt
index 980d20b07..75fbe8f07 100644
--- a/Server/src/main/content/global/skill/farming/ToolLeprechaunInterface.kt
+++ b/Server/src/main/content/global/skill/farming/ToolLeprechaunInterface.kt
@@ -69,7 +69,7 @@ class ToolLeprechaunInterface : InterfaceListener {
setHasMagicSecateurs(player,false)
}
} else {
- sendMessage(player, "You already have one of those stored.")
+ sendMessage(player, "You cannot store more than one pair of secateurs in here.")
}
}
22 -> {
@@ -80,7 +80,7 @@ class ToolLeprechaunInterface : InterfaceListener {
removeItem(player, can)
setWateringCan(player,can)
} else {
- sendMessage(player, "You already have one of those stored.")
+ sendMessage(player, "You cannot store more than one watering can in here.")
}
}
23 -> doDeposit(player, Items.GARDENING_TROWEL_5325, ::setHasGardeningTrowel, ::hasGardeningTrowel)
@@ -119,7 +119,15 @@ class ToolLeprechaunInterface : InterfaceListener {
depositMethod.invoke(player, true)
removeItem(player, item)
} else {
- sendMessage(player, "You already have one of those stored.")
+ val itemName = when (item) {
+ // secateurs and watering cans are handled separately
+ Items.RAKE_5341 -> "rake"
+ Items.SEED_DIBBER_5343 -> "dibber"
+ Items.SPADE_952 -> "spade"
+ Items.GARDENING_TROWEL_5325 -> "trowel"
+ else -> getItemName(item).lowercase()
+ }
+ sendMessage(player, "You cannot store more than one $itemName in here.")
}
}
@@ -127,7 +135,7 @@ class ToolLeprechaunInterface : InterfaceListener {
player ?: return
val hasAmount = amountInInventory(player, item)
var finalAmount = amount
- val spaceLeft = (if (item == Items.BUCKET_1925) 31 else 255) - quantityCheckMethod.invoke(player)
+ val spaceLeft = (if (item == Items.BUCKET_1925) 255 else 255) - quantityCheckMethod.invoke(player)
if (hasAmount == 0) {
val itemName = if (item == Items.BUCKET_1925) "buckets" else getItemName(item).lowercase()
@@ -175,7 +183,7 @@ class ToolLeprechaunInterface : InterfaceListener {
private fun doStackedWithdrawal(player: Player?, item: Int, amount: Int, updateQuantityMethod: (Player?, Int) -> Unit, quantityCheckMethod: (Player?) -> Int) {
player ?: return
- val hasAmount = quantityCheckMethod.invoke(player)
+ val hasAmount = if (item == Items.BUCKET_1925) 31 else quantityCheckMethod.invoke(player)
var finalAmount = amount
if (hasAmount == 0) {
diff --git a/Server/src/main/content/global/skill/farming/UseWithPatchHandler.kt b/Server/src/main/content/global/skill/farming/UseWithPatchHandler.kt
index d71a7c409..6dac10dce 100644
--- a/Server/src/main/content/global/skill/farming/UseWithPatchHandler.kt
+++ b/Server/src/main/content/global/skill/farming/UseWithPatchHandler.kt
@@ -5,7 +5,6 @@ import core.game.node.entity.player.link.diary.DiaryType
import core.game.node.entity.skill.Skills
import core.game.node.item.Item
import core.game.system.task.Pulse
-import core.game.world.update.flag.context.Animation
import org.rs09.consts.Items
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
@@ -13,6 +12,7 @@ import core.game.interaction.QueueStrength
import core.tools.StringUtils
import core.tools.prependArticle
import org.rs09.consts.Sounds
+import content.data.Quests
class UseWithPatchHandler : InteractionListener {
val RAKE = Items.RAKE_5341
@@ -21,11 +21,14 @@ class UseWithPatchHandler : InteractionListener {
val SECATEURS = Items.SECATEURS_5329
val MAGIC_SECATEURS = Items.MAGIC_SECATEURS_7409
val TROWEL = Items.GARDENING_TROWEL_5325
- val pourBucketAnim = Animation(2283)
- val wateringCanAnim = Animation(2293)
- val plantCureAnim = Animation(2288)
- val secateursTreeAnim = Animation(2277)
- val magicSecateursTreeAnim = Animation(3340)
+ val spadeDigAnim = getAnimation(830)
+ val trowelDigAnim = getAnimation(2272)
+ val pourBucketAnim = getAnimation(2283)
+ val seedDibberAnim = getAnimation(2291)
+ val wateringCanAnim = getAnimation(2293)
+ val plantCureAnim = getAnimation(2288)
+ val secateursTreeAnim = getAnimation(2277)
+ val magicSecateursTreeAnim = getAnimation(3340)
@JvmField
val allowedNodes = ArrayList()
@@ -37,7 +40,7 @@ class UseWithPatchHandler : InteractionListener {
val usedItem = used.asItem()
if (patch == FarmingPatch.TROLL_STRONGHOLD_HERB) {
- if (!hasRequirement(player, "My Arm's Big Adventure"))
+ if (!hasRequirement(player, Quests.MY_ARMS_BIG_ADVENTURE))
return@onUseWith true
}
@@ -46,7 +49,7 @@ class UseWithPatchHandler : InteractionListener {
RAKE -> PatchRaker.rake(player,patch)
SEED_DIBBER -> sendMessage(player, "I should plant a seed, not the seed dibber.")
SPADE -> {
- val anim = getAnimation(830)
+ val anim = spadeDigAnim
val p = patch.getPatchFor(player)
if (p.isDead) {
sendMessage(player, "You start digging the farming patch...")
@@ -112,7 +115,7 @@ class UseWithPatchHandler : InteractionListener {
return@onUseWith true
}
- val anim = Animation(2272)
+ val anim = trowelDigAnim
submitIndividualPulse(player, object : Pulse(anim.duration) {
override fun pulse(): Boolean {
@@ -156,15 +159,21 @@ class UseWithPatchHandler : InteractionListener {
Items.WATERING_CAN_5331,Items.WATERING_CAN1_5333,Items.WATERING_CAN2_5334,Items.WATERING_CAN3_5335,Items.WATERING_CAN4_5336,Items.WATERING_CAN5_5337,Items.WATERING_CAN6_5338,Items.WATERING_CAN7_5339,Items.WATERING_CAN8_5340 -> {
val p = patch.getPatchFor(player)
val t = p.patch.type
- if (p.isWatered || p.isEmptyAndWeeded() || p.isGrown() || p.plantable == Plantable.SCARECROW) {
- sendMessage(player, "This patch doesn't need watering.")
- } else if (t == PatchType.ALLOTMENT || t == PatchType.FLOWER_PATCH || t == PatchType.HOPS_PATCH) {
+ if (t == PatchType.ALLOTMENT || t == PatchType.FLOWER_PATCH || t == PatchType.HOPS_PATCH) {
submitIndividualPulse(player, object : Pulse() {
override fun pulse(): Boolean {
- if (p.isWeedy()) {
+ if (p.isWeedy() || p.isEmptyAndWeeded()) {
sendMessage(player, "You should grow something first.")
return true
}
+ if (p.isWatered || p.isGrown() || p.plantable == Plantable.SCARECROW) {
+ sendMessage(player, "This patch doesn't need watering.")
+ return true
+ }
+ if (p.isDiseased || p.isDead) {
+ sendMessage(player, "Water isn't going to cure that!")
+ return true
+ }
if (usedItem.id == Items.WATERING_CAN_5331) {
sendMessage(player, "You need to fill the watering can first.")
return true
@@ -178,6 +187,8 @@ class UseWithPatchHandler : InteractionListener {
return true
}
})
+ } else {
+ sendMessage(player, "This patch doesn't need watering.")
}
}
@@ -212,9 +223,9 @@ class UseWithPatchHandler : InteractionListener {
val plantable = Plantable.forItemID(usedItem.id) ?: return@onUseWith false
if (plantable.applicablePatch != patch.type) {
- val seedNamePlural = StringUtils.plusS(plantable.name.replace("_", " ").lowercase())
+ val plantableNamePlural = StringUtils.plusS(plantable.displayName)
val patchType = if (plantable.applicablePatch == PatchType.ALLOTMENT) "a vegetable patch" else prependArticle(plantable.applicablePatch.displayName())
- sendMessage(player, "You can only plant $seedNamePlural in $patchType.")
+ sendMessage(player, "You can only plant $plantableNamePlural in $patchType.")
return@onUseWith true
}
@@ -232,66 +243,74 @@ class UseWithPatchHandler : InteractionListener {
return@onUseWith true
}
- val plantItem =
- if (patch.type == PatchType.ALLOTMENT) Item(plantable.itemID,3) else if (patch.type == PatchType.HOPS_PATCH) {
- if (plantable == Plantable.JUTE_SEED) Item(plantable.itemID,3) else Item(plantable.itemID,4)
- } else {
- Item(plantable.itemID,1)
- }
-
- if (patch.type == PatchType.ALLOTMENT) {
- if (!player.inventory.containsItem(plantItem)) {
- sendMessage(player, "You need 3 seeds to plant an allotment patch.")
- return@onUseWith true
- }
+ val plantItem = when (patch.type) {
+ PatchType.ALLOTMENT -> Item(plantable.itemID, 3)
+ PatchType.HOPS_PATCH -> if (plantable == Plantable.JUTE_SEED) Item(plantable.itemID, 3) else Item(plantable.itemID, 4)
+ else -> Item(plantable.itemID,1)
}
- if (patch.type != PatchType.FRUIT_TREE_PATCH && patch.type != PatchType.TREE_PATCH) {
- if (!inInventory(player, Items.SEED_DIBBER_5343)) {
- sendMessage(player, "You need a seed dibber to plant that.")
- return@onUseWith true
- }
- } else {
- if (!inInventory(player, Items.SPADE_952) && plantable != Plantable.SCARECROW) {
- sendMessage(player, "You need a spade to plant that.")
- return@onUseWith true
- }
+
+ if (!player.inventory.containsItem(plantItem)) {
+ val seedPlural = if (plantItem.amount == 1) "seed" else "seeds"
+ sendMessage(player, "You need ${plantItem.amount} $seedPlural to plant ${prependArticle(patch.type.displayName())}.")
+ return@onUseWith true
}
- player.lock()
- if (removeItem(player, plantItem)) {
- if (plantable != Plantable.SCARECROW) {
- animate(player, 2291)
- playAudio(player, Sounds.FARMING_DIBBING_2432)
- }
- val delay = if (plantable == Plantable.SCARECROW) 0 else 3
- submitIndividualPulse(player, object : Pulse(delay) {
- override fun pulse(): Boolean {
- if (plantable == Plantable.JUTE_SEED && patch == FarmingPatch.MCGRUBOR_HOPS && !player.achievementDiaryManager.hasCompletedTask(DiaryType.SEERS_VILLAGE, 0, 7)) {
- player.achievementDiaryManager.finishTask(player, DiaryType.SEERS_VILLAGE, 0, 7)
- }
- p.plant(plantable)
- rewardXP(player, Skills.FARMING, plantable.plantingXP)
- p.setNewHarvestAmount()
- if (p.patch.type == PatchType.TREE_PATCH || p.patch.type == PatchType.FRUIT_TREE_PATCH) {
- addItem(player, Items.PLANT_POT_5350)
- }
- val itemAmount = if (plantItem.amount == 1) "a" else plantItem.amount
- val itemName = if (plantItem.amount == 1) getItemName(plantItem.id).lowercase() else StringUtils.plusS(getItemName(plantItem.id).lowercase())
- val patchName = p.patch.type.displayName()
- if (plantable == Plantable.SCARECROW) {
- sendMessage(player, "You place the scarecrow in the $patchName.")
- } else {
- sendMessage(player, "You plant $itemAmount $itemName in the $patchName.")
- }
+ val requiredItem = when (patch.type) {
+ PatchType.TREE_PATCH, PatchType.FRUIT_TREE_PATCH -> Items.SPADE_952
+ PatchType.FLOWER_PATCH -> if (plantable == Plantable.SCARECROW) null else Items.SEED_DIBBER_5343
+ else -> Items.SEED_DIBBER_5343
+ }
+ if (requiredItem != null && !inInventory(player, requiredItem)) {
+ sendMessage(player, "You need ${prependArticle(requiredItem.asItem().name.lowercase())} to plant that.")
+ return@onUseWith true
+ }
- player.unlock()
- return true
+ queueScript(player, 0, QueueStrength.WEAK) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ val (anim, sound) = when (requiredItem) {
+ Items.SPADE_952 -> Pair(spadeDigAnim, Sounds.DIGSPADE_1470)
+ else -> Pair(seedDibberAnim,Sounds.FARMING_DIBBING_2432)
+ }
+ animate(player, anim)
+ playAudio(player, sound)
+ val delay = if (patch.type == PatchType.TREE_PATCH || patch.type == PatchType.FRUIT_TREE_PATCH || plantable == Plantable.SCARECROW) 3 else 0
+ return@queueScript delayScript(player,anim.duration + delay)
}
- })
+ 1 -> {
+ if (removeItem(player, plantItem)) {
+ if (plantable == Plantable.JUTE_SEED && patch == FarmingPatch.MCGRUBOR_HOPS && !player.achievementDiaryManager.hasCompletedTask(DiaryType.SEERS_VILLAGE, 0, 7)) {
+ player.achievementDiaryManager.finishTask(player, DiaryType.SEERS_VILLAGE, 0, 7)
+ }
+ p.plant(plantable)
+ rewardXP(player, Skills.FARMING, plantable.plantingXP)
+ p.setNewHarvestAmount()
+ if (p.patch.type == PatchType.TREE_PATCH || p.patch.type == PatchType.FRUIT_TREE_PATCH) {
+ addItem(player, Items.PLANT_POT_5350)
+ }
+
+ val itemAmount =
+ if (p.patch.type == PatchType.TREE_PATCH || p.patch.type == PatchType.FRUIT_TREE_PATCH) "the"
+ else if (plantItem.amount == 1) "a"
+ else plantItem.amount
+ val itemName =
+ if (plantItem.amount == 1) plantable.displayName else StringUtils.plusS(
+ plantable.displayName
+ )
+ val patchName = p.patch.type.displayName()
+ if (plantable == Plantable.SCARECROW) {
+ sendMessage(player, "You place the scarecrow in the $patchName.")
+ } else {
+ sendMessage(player, "You plant $itemAmount $itemName in the $patchName.")
+ }
+ }
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
}
}
}
-
return@onUseWith true
}
}
diff --git a/Server/src/main/content/global/skill/farming/timers/CropGrowth.kt b/Server/src/main/content/global/skill/farming/timers/CropGrowth.kt
index ae3765a99..074e5ae43 100644
--- a/Server/src/main/content/global/skill/farming/timers/CropGrowth.kt
+++ b/Server/src/main/content/global/skill/farming/timers/CropGrowth.kt
@@ -58,12 +58,18 @@ class CropGrowth : PersistTimer (500, "farming:crops", isSoft = true) {
for ((_, patch) in patchMap) {
val type = patch.patch.type
val shouldPlayCatchup = !patch.isGrown() || (type == PatchType.BUSH_PATCH && patch.getFruitOrBerryCount() < 4) || (type == PatchType.FRUIT_TREE_PATCH && patch.getFruitOrBerryCount() < 6)
- if(shouldPlayCatchup && patch.plantable != null && !patch.isDead){
- var stagesToSimulate = if (!patch.isGrown()) patch.plantable!!.stages - patch.currentGrowthStage else 0
- if (type == PatchType.BUSH_PATCH)
- stagesToSimulate += Math.min(4, 4 - patch.getFruitOrBerryCount())
- if (type == PatchType.FRUIT_TREE_PATCH)
- stagesToSimulate += Math.min(6, 6 - patch.getFruitOrBerryCount())
+ if (shouldPlayCatchup && !patch.isDead) {
+ var stagesToSimulate = if (!patch.isGrown()) {
+ if (patch.isWeedy() || patch.isEmptyAndWeeded()) patch.currentGrowthStage % 4
+ else patch.plantable!!.stages - patch.currentGrowthStage
+ } else 0
+
+ if (patch.plantable != null) {
+ if (type == PatchType.BUSH_PATCH)
+ stagesToSimulate += Math.min(4, 4 - patch.getFruitOrBerryCount())
+ if (type == PatchType.FRUIT_TREE_PATCH)
+ stagesToSimulate += Math.min(6, 6 - patch.getFruitOrBerryCount())
+ }
val nowTime = System.currentTimeMillis()
var simulatedTime = patch.nextGrowth
@@ -77,8 +83,8 @@ class CropGrowth : PersistTimer (500, "farming:crops", isSoft = true) {
}
}
- fun getPatch(patch: FarmingPatch): Patch {
- return patchMap[patch] ?: (Patch(player,patch).also { patchMap[patch] = it })
+ fun getPatch(patch: FarmingPatch, addPatch: Boolean ): Patch {
+ return patchMap[patch] ?: (Patch(player,patch).also { if (addPatch) patchMap[patch] = it })
}
fun getPatches(): MutableCollection{
diff --git a/Server/src/main/content/global/skill/firemaking/FireMakingPulse.java b/Server/src/main/content/global/skill/firemaking/FireMakingPulse.java
index 50b969efd..7d9f0b35d 100644
--- a/Server/src/main/content/global/skill/firemaking/FireMakingPulse.java
+++ b/Server/src/main/content/global/skill/firemaking/FireMakingPulse.java
@@ -19,6 +19,8 @@ import org.rs09.consts.Items;
import static core.api.ContentAPIKt.inInventory;
import static core.api.ContentAPIKt.replaceSlot;
+import static core.api.ContentAPIKt.removeItem;
+
/**
* Represents the pulse used to light a log.
* @author 'Vexia
@@ -89,9 +91,14 @@ public final class FireMakingPulse extends SkillPulse- {
if (player.getAttribute("remove-log", false)) {
player.removeAttribute("remove-log");
if (inInventory(player, node.getId(), 1)) {
- replaceSlot(player, node.getSlot(), new Item(node.getId(), (node.getAmount() - 1)), node, Container.INVENTORY);
+ //replaceSlot(player, node.getSlot(), new Item(node.getId(), (node.getAmount() - 1)), node, Container.INVENTORY);
+ // Snowscape, remove any item instead of specific slot, and update the grounditem with our new location.
+ removeItem(player, new Item(node.getId(), 1), Container.INVENTORY);
+ this.groundItem = new GroundItem(node, player.getLocation(), player);
GroundItemManager.create(groundItem);
- }
+ } else {
+ return false;
+ }
}
return true;
}
@@ -102,24 +109,28 @@ public final class FireMakingPulse extends SkillPulse
- {
@Override
public boolean reward() {
+ /* Snowscape: this section allows making a new fire without an animation if you're fast enough, but since we auto-repeat we don't need that
if (getLastFire() >= GameWorld.getTicks()) {
createFire();
return true;
}
- if (ticks == 0) {
+ */
+ if (ticks % 5 == 0) {
player.animate(ANIMATION);
}
- if (++ticks % 3 != 0) {
+ if (++ticks % 5 != 0) {
return false;
}
- if (ticks % 12 == 0) {
- player.animate(ANIMATION);
- }
+
if (!success()) {
return false;
}
createFire();
- return true;
+ // Snowscape: return with the remove-log attribute, so the next pulse attempts to remove another log and start over
+ player.setAttribute("remove-log", true);
+ return false;
+
+
}
/**
diff --git a/Server/src/main/content/global/skill/fishing/Fish.kt b/Server/src/main/content/global/skill/fishing/Fish.kt
index 46b73bee2..8ccc67f24 100644
--- a/Server/src/main/content/global/skill/fishing/Fish.kt
+++ b/Server/src/main/content/global/skill/fishing/Fish.kt
@@ -24,7 +24,7 @@ enum class Fish(val id: Int, val level: Int, val experience: Double, val lowChan
LOBSTER(Items.RAW_LOBSTER_377, 40, 90.0, 0.16, 0.375),
BASS(Items.RAW_BASS_363, 46, 100.0, 0.078, 0.16),
SWORDFISH(Items.RAW_SWORDFISH_371, 50, 100.0, 0.105, 0.191),
- LAVA_EEL(Items.RAW_LAVA_EEL_2148, 53, 30.0, 0.227, 0.379),
+ LAVA_EEL(Items.RAW_LAVA_EEL_2148, 53, 60.0, 0.227, 0.379),
MONKFISH(Items.RAW_MONKFISH_7944, 62, 120.0, 0.293, 0.356),
KARAMBWAN(Items.RAW_KARAMBWAN_3142, 65, 105.0, 0.414, 0.629),
SHARK(Items.RAW_SHARK_383, 76, 110.0, 0.121, 0.16),
diff --git a/Server/src/main/content/global/skill/fishing/FishingOption.kt b/Server/src/main/content/global/skill/fishing/FishingOption.kt
index b75ccf9b4..5b304893c 100644
--- a/Server/src/main/content/global/skill/fishing/FishingOption.kt
+++ b/Server/src/main/content/global/skill/fishing/FishingOption.kt
@@ -11,7 +11,7 @@ enum class FishingOption(val tool: Int, val level: Int, val animation: Animation
CRAYFISH_CAGE(Items.CRAYFISH_CAGE_13431, 1, Animation(10009), null, "cage", Fish.CRAYFISH),
SMALL_NET(Items.SMALL_FISHING_NET_303, 1, Animation(621), null, "net", Fish.SHRIMP, Fish.ANCHOVIE),
BAIT(Items.FISHING_ROD_307, 5, Animation(622), intArrayOf(Items.FISHING_BAIT_313), "bait", Fish.SARDINE, Fish.HERRING),
- LURE(Items.FLY_FISHING_ROD_309, 20, Animation(622), intArrayOf(Items.FEATHER_314, Items.STRIPY_FEATHER_10087), "lure", Fish.TROUT, Fish.SALMON, Fish.RAINBOW_FISH),
+ LURE(Items.FLY_FISHING_ROD_309, 20, Animation(622), intArrayOf(Items.FEATHER_314, Items.STRIPY_FEATHER_10087, Items.RED_FEATHER_10088, Items.BLUE_FEATHER_10089, Items.YELLOW_FEATHER_10090, Items.ORANGE_FEATHER_10091), "lure", Fish.TROUT, Fish.SALMON, Fish.RAINBOW_FISH),
PIKE_BAIT(Items.FISHING_ROD_307, 25, Animation(622), intArrayOf(Items.FISHING_BAIT_313), "bait", Fish.PIKE),
LOBSTER_CAGE(Items.LOBSTER_POT_301, 40, Animation(619), null, "cage", Fish.LOBSTER),
HARPOON(Items.HARPOON_311, 35, Animation(618), null, "harpoon", Fish.TUNA, Fish.SWORDFISH),
diff --git a/Server/src/main/content/global/skill/fletching/BoltCreatePlugin.java b/Server/src/main/content/global/skill/fletching/BoltCreatePlugin.java
deleted file mode 100644
index 711e9b626..000000000
--- a/Server/src/main/content/global/skill/fletching/BoltCreatePlugin.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-package core.game.node.entity.skill.fletching;
-
-import core.game.dialogue.SkillDialogueHandler;
-import core.game.dialogue.SkillDialogueHandler.SkillDialogue;
-import core.game.node.entity.skill.fletching.items.bolts.Bolt;
-import core.game.node.entity.skill.fletching.items.bolts.BoltPulse;
-import org.crandor.game.interaction.NodeUsageEvent;
-import org.crandor.game.interaction.UseWithHandler;
-import org.crandor.game.node.entity.player.Player;
-import org.crandor.net.packet.PacketRepository;
-import org.crandor.net.packet.context.ChildPositionContext;
-import org.crandor.net.packet.out.RepositionChild;
-import org.crandor.plugin.InitializablePlugin;
-import org.crandor.plugin.Plugin;
-
-*/
-/**
- * Represents the bolt creating plugin.
- * @author 'Vexia
- * @version 1.0
- *//*
-
-@InitializablePlugin
-public final class BoltCreatePlugin extends UseWithHandler {
-
- */
-/**
- * Constructs a new {@code BoltCreatePlugin} {@code Object}.
- *//*
-
- public BoltCreatePlugin() {
- super(314);
- }
-
- @Override
- public Plugin
newInstance(Object arg) throws Throwable {
- for (Bolt bolt : Bolt.values()) {
- addHandler(bolt.getItem().getId(), ITEM_TYPE, this);
- }
- return this;
- }
-
- @Override
- public boolean handle(final NodeUsageEvent event) {
- final Player player = event.getPlayer();
-
- }
-
-}
-*/
diff --git a/Server/src/main/content/global/skill/fletching/BoltGemPlugin.java b/Server/src/main/content/global/skill/fletching/BoltGemPlugin.java
deleted file mode 100644
index 70c38b30a..000000000
--- a/Server/src/main/content/global/skill/fletching/BoltGemPlugin.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//package core.game.node.entity.skill.fletching;
-//
-//import core.game.dialogue.SkillDialogueHandler;
-//import core.game.dialogue.SkillDialogueHandler.SkillDialogue;
-//import core.game.node.entity.skill.fletching.items.gem.GemBolt;
-//import core.game.node.entity.skill.fletching.items.gem.GemBoltPulse;
-//import org.crandor.game.interaction.NodeUsageEvent;
-//import org.crandor.game.interaction.UseWithHandler;
-//import org.crandor.game.node.entity.player.Player;
-//import org.crandor.net.packet.PacketRepository;
-//import org.crandor.net.packet.context.ChildPositionContext;
-//import org.crandor.net.packet.out.RepositionChild;
-//import org.crandor.plugin.InitializablePlugin;
-//import org.crandor.plugin.Plugin;
-//
-///**
-// * Represents the plugin used to handle gem bolt making.
-// * @author 'Vexia
-// * @version 1.0
-// */
-//@InitializablePlugin
-//public class BoltGemPlugin extends UseWithHandler {
-//
-// /**
-// * Constructs a new {@code BoltGemPlugin} {@code Object}.
-// */
-// public BoltGemPlugin() {
-// super(45, 46, 9187, 9188, 9189, 9190, 9191, 9192, 9193, 9194);
-// }
-//
-// @Override
-// public Plugin newInstance(Object arg) throws Throwable {
-// for (GemBolt bolt : GemBolt.values()) {
-// addHandler(bolt.getBase().getId(), ITEM_TYPE, this);
-// }
-// return this;
-// }
-//
-// @Override
-// public boolean handle(final NodeUsageEvent event) {
-// final Player player = event.getPlayer();
-//
-// }
-//
-//}
diff --git a/Server/src/main/content/global/skill/fletching/DartCreatePlugin.java b/Server/src/main/content/global/skill/fletching/DartCreatePlugin.java
deleted file mode 100644
index c43104095..000000000
--- a/Server/src/main/content/global/skill/fletching/DartCreatePlugin.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-package core.game.node.entity.skill.fletching;
-
-import core.game.node.entity.skill.fletching.items.darts.Dart;
-import org.crandor.game.interaction.NodeUsageEvent;
-import org.crandor.game.interaction.UseWithHandler;
-import org.crandor.plugin.InitializablePlugin;
-import org.crandor.plugin.Plugin;
-import core.game.content.quest.touristrap.TouristTrap;
-
-*/
-/**
- * Represents the plugin used to create a dart.
- * @author 'Vexia
- * @version 1.0
- *//*
-
-@InitializablePlugin
-public final class DartCreatePlugin extends UseWithHandler {
-
- */
-/**
- * Constructs a new {@code DartCreatePlugin} {@code Object}.
- *//*
-
- public DartCreatePlugin() {
- super(314);
- }
-
- @Override
- public Plugin newInstance(Object arg) throws Throwable {
- for (Dart dart : Dart.values()) {
- addHandler(dart.getItem().getId(), ITEM_TYPE, this);
- }
- return this;
- }
-
- @Override
- public boolean handle(NodeUsageEvent event) {
- if (event.getPlayer().getQuestRepository().getQuest(TouristTrap.NAME).getStage(event.getPlayer()) < 60) {
- event.getPlayer().getPacketDispatch().sendMessage("You need to start Tourist Trap in order to do this.");
- return true;
- }
- event.getPlayer().getDialogueInterpreter().open(328933, event.getUsedItem(), event.getBaseItem());
- return true;
- }
-
-}
-*/
diff --git a/Server/src/main/content/global/skill/fletching/FletchItem.java b/Server/src/main/content/global/skill/fletching/FletchItem.java
deleted file mode 100644
index fee42d6c1..000000000
--- a/Server/src/main/content/global/skill/fletching/FletchItem.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-package core.game.node.entity.skill.fletching;
-
-import org.crandor.game.node.item.Item;
-
-*/
-/**
- * Represents a fletching item to make.
- * @author 'Vexia
- *//*
-
-public enum FletchItem {
- ARROW_SHAFT(FletchType.LOG, new Item(52, 15), 1, 5), SHORTBOW(FletchType.LOG, new Item(50), 5, 5),
- LONGBOW(FletchType.LOG, new Item(48), 10, 10),
- OAK_SHORTBOW(FletchType.OAK, new Item(54), 20, 16.5),
- OAK_LONGBOW(FletchType.OAK, new Item(56), 25, 25),
- WILLOW_SHORTBOW(FletchType.WILLOW, new Item(60), 35, 33.3),
- WILLOW_LONGBOW(FletchType.WILLOW, new Item(58), 40, 41.5),
- MAPLE_SHORTBOW(FletchType.MAPLE, new Item(64), 50, 50),
- MAPLE_LONGBOW(FletchType.MAPLE, new Item(62), 55, 58.3),
- YEW_SHORTBOW(FletchType.YEW, new Item(68), 65, 55),
- YEW_LONGBOW(FletchType.YEW, new Item(66), 70, 75),
- MAGIC_SHORTBOW(FletchType.MAGIC, new Item(72), 80, 83.3),
- MAGIC_LONGBOW(FletchType.MAGIC, new Item(70), 85, 91.5),
- WOODEN_STOCK(FletchType.LOG, new Item(9440), 9, 6),
- OAK_STOCK(FletchType.OAK, new Item(9442), 24, 16),
- WILLOW_STOCK(FletchType.WILLOW, new Item(9444), 39, 22),
- TEAK_STOCK(FletchType.TEAK, new Item(9446), 46, 27),
- MAPLE_STOCK(FletchType.MAPLE, new Item(9448), 54, 32),
- MAHOGANY_STOCK(FletchType.MAHOGANY, new Item(9450), 61, 41),
- YEW_STOCK(FletchType.YEW, new Item(9452), 69, 50);
-
- */
-/**
- * Constructs a new {@code FletchItem.java} {@code Object}.
- * @param type the type.
- * @param product the product.
- * @param level the level.
- * @param experience the experience.
- *//*
-
- FletchItem(final FletchType type, final Item product, final int level, final double experience) {
- this.type = type;
- this.product = product;
- this.level = level;
- this.experience = experience;
- }
-
- */
-/**
- * Represents the type this item pertaint o.
- *//*
-
- private FletchType type;
-
- */
-/**
- * Represents the product of this item.
- *//*
-
- private Item product;
-
- */
-/**
- * Represents the level.
- *//*
-
- private final int level;
-
- */
-/**
- * Represents the experience.
- *//*
-
- private final double experience;
-
- */
-/**
- * Gets the type.
- * @return The type.
- *//*
-
- public FletchType getType() {
- return type;
- }
-
- */
-/**
- * Sets the type.
- * @param type The type to set.
- *//*
-
- public void setType(FletchType type) {
- this.type = type;
- }
-
- */
-/**
- * Gets the product.
- * @return The product.
- *//*
-
- public Item getProduct() {
- return product;
- }
-
- */
-/**
- * Sets the product.
- * @param product The product to set.
- *//*
-
- public void setProduct(Item product) {
- this.product = product;
- }
-
- */
-/**
- * Gets the level.
- * @return The level.
- *//*
-
- public int getLevel() {
- return level;
- }
-
- */
-/**
- * Gets the experience.
- * @return The experience.
- *//*
-
- public double getExperience() {
- return experience;
- }
-}
-*/
diff --git a/Server/src/main/content/global/skill/fletching/FletchType.java b/Server/src/main/content/global/skill/fletching/FletchType.java
deleted file mode 100644
index 33509c1ab..000000000
--- a/Server/src/main/content/global/skill/fletching/FletchType.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-package core.game.node.entity.skill.fletching;
-
-import org.crandor.game.component.Component;
-import org.crandor.game.node.item.Item;
-
-*/
-/**
- * Represents the multiple fletching types(log types)
- * @author 'Vexia
- *//*
-
-public enum FletchType {
- LOG(new Item(1511), FletchItem.ARROW_SHAFT, FletchItem.SHORTBOW, FletchItem.LONGBOW, FletchItem.WOODEN_STOCK), OAK(new Item(1521), FletchItem.OAK_SHORTBOW, FletchItem.OAK_LONGBOW, FletchItem.OAK_STOCK), WILLOW(new Item(1519), FletchItem.WILLOW_SHORTBOW, FletchItem.WILLOW_LONGBOW, FletchItem.WILLOW_STOCK), MAPLE(new Item(1517), FletchItem.MAPLE_SHORTBOW, FletchItem.MAPLE_LONGBOW, FletchItem.MAPLE_STOCK), TEAK(new Item(6333), FletchItem.TEAK_STOCK), MAHOGANY(new Item(6332), FletchItem.MAHOGANY_STOCK), YEW(new Item(1515), FletchItem.YEW_SHORTBOW, FletchItem.YEW_LONGBOW, FletchItem.YEW_STOCK), MAGIC(new Item(1513), FletchItem.MAGIC_SHORTBOW, FletchItem.MAGIC_LONGBOW);
-
- */
-/**
- * Constructs a new {@code FletchType} {@code Object}.
- * @param log the log.
- * @param items the item.s
- *//*
-
- FletchType(final Item log, final FletchItem... items) {
- this.log = log;
- this.items = items;
- }
-
- */
-/**
- * Represents the log of this type.
- *//*
-
- private final Item log;
-
- */
-/**
- * Represents the fletching items of this type.
- *//*
-
- private FletchItem[] items;
-
- */
-/**
- * Gets the items.
- * @return The items.
- *//*
-
- public FletchItem[] getItems() {
- return items;
- }
-
- */
-/**
- * Gets the log.
- * @return The log.
- *//*
-
- public Item getLog() {
- return log;
- }
-
- */
-/**
- * Method used to get the component based on type.
- * @return the component.
- *//*
-
- public Component getComponent() {
- return items.length > 1 ? new Component(301 + items.length) : new Component(309);
- }
-
- */
-/**
- * Method used to get the FletchType based on the log item.
- * @param item the item.
- * @return the fletch type.
- *//*
-
- public static FletchType forItem(final Item item) {
- for (FletchType type : FletchType.values()) {
- if (type.getLog().getId() == item.getId()) {
- return type;
- }
- }
- return null;
- }
-}
-*/
diff --git a/Server/src/main/content/global/skill/fletching/Fletching.java b/Server/src/main/content/global/skill/fletching/Fletching.java
index 4dea01354..15fda63c1 100644
--- a/Server/src/main/content/global/skill/fletching/Fletching.java
+++ b/Server/src/main/content/global/skill/fletching/Fletching.java
@@ -132,6 +132,7 @@ public class Fletching {
YEW_LONGBOW((byte) 1,66,855,70, 75, new Animation(6688)),
MAGIC_SHORTBOW((byte) 1,72,861,80, 83.3, new Animation(6683)),
MAGIC_LONGBOW((byte) 1,70,859,85, 91.5, new Animation(6689)),
+ OGRE_COMP_BOW((byte) 1,4825,4827,30, 45, new Animation(-1)),
//crossbows
BRONZE_CBOW((byte) 2,9454,9174,9, 6, new Animation(6671)),
@@ -190,13 +191,13 @@ public class Fletching {
}
public enum ArrowHeads {
- BRONZE_ARROW(39, 882, 1, 2.6),
- IRON_ARROW(40, 884, 15, 3.8),
- STEEL_ARROW(41, 886, 30, 6.3),
- MITHRIL_ARROW(42, 888, 45, 8.8),
- ADAMANT_ARROW(43, 890, 60, 11.3),
- RUNE_ARROW(44, 892, 75, 13.8),
- DRAGON_ARROW(11237, 11212, 90, 16.3),
+ BRONZE_ARROW(39, 882, 1, 1.3),
+ IRON_ARROW(40, 884, 15, 2.5),
+ STEEL_ARROW(41, 886, 30, 5),
+ MITHRIL_ARROW(42, 888, 45, 7.5),
+ ADAMANT_ARROW(43, 890, 60, 10),
+ RUNE_ARROW(44, 892, 75, 12.5),
+ DRAGON_ARROW(11237, 11212, 90, 15),
BROAD_ARROW(13278, 4160, 52, 15);
public int unfinished,finished,level;
@@ -265,13 +266,13 @@ public class Fletching {
}
}
private enum Items{
- STANDARD(1511,FletchingItems.ARROW_SHAFT, FletchingItems.SHORT_BOW, FletchingItems.LONG_BOW, FletchingItems.WOODEN_STOCK),
- ACHEY(2862, FletchingItems.OGRE_ARROW_SHAFT),
- OAK(1521, FletchingItems.OAK_SHORTBOW, FletchingItems.OAK_LONGBOW, FletchingItems.OAK_STOCK),
- WILLOW(1519, FletchingItems.WILLOW_SHORTBOW, FletchingItems.WILLOW_LONGBOW, FletchingItems.WILLOW_STOCK),
- MAPLE(1517, FletchingItems.MAPLE_SHORTOW, FletchingItems.MAPLE_LONGBOW, FletchingItems.MAPLE_STOCK),
- YEW(1515, FletchingItems.YEW_SHORTBOW, FletchingItems.YEW_LONGBOW, FletchingItems.YEW_STOCK),
- MAGIC(1513, FletchingItems.MAGIC_SHORTBOW, FletchingItems.MAGIC_LONGBOW),
+ STANDARD(1511, FletchingItems.ARROW_SHAFT, FletchingItems.SHORT_BOW, FletchingItems.LONG_BOW, FletchingItems.WOODEN_STOCK),
+ ACHEY(2862, FletchingItems.OGRE_ARROW_SHAFT, FletchingItems.OGRE_COMP_BOW),
+ OAK(1521, FletchingItems.OAK_ARROW_SHAFT, FletchingItems.OAK_SHORTBOW, FletchingItems.OAK_LONGBOW, FletchingItems.OAK_STOCK),
+ WILLOW(1519, FletchingItems.WILLOW_ARROW_SHAFT, FletchingItems.WILLOW_SHORTBOW, FletchingItems.WILLOW_LONGBOW, FletchingItems.WILLOW_STOCK),
+ MAPLE(1517, FletchingItems.MAPLE_ARROW_SHAFT, FletchingItems.MAPLE_SHORTOW, FletchingItems.MAPLE_LONGBOW, FletchingItems.MAPLE_STOCK),
+ YEW(1515, FletchingItems.YEW_ARROW_SHAFT, FletchingItems.YEW_SHORTBOW, FletchingItems.YEW_LONGBOW, FletchingItems.YEW_STOCK),
+ MAGIC(1513, FletchingItems.MAGIC_ARROW_SHAFT, FletchingItems.MAGIC_SHORTBOW, FletchingItems.MAGIC_LONGBOW),
TEAK(6333, FletchingItems.TEAK_STOCK),
MAHOGANY(6332, FletchingItems.MAHOGANY_STOCK);
@@ -304,28 +305,34 @@ public class Fletching {
//Achey logs
OGRE_ARROW_SHAFT(2864, 6.4, 5, 4),
+ OGRE_COMP_BOW(4825, 45, 30, 1),
//Oak logs
+ OAK_ARROW_SHAFT(52, 10, 15, 30),
OAK_SHORTBOW(54, 16.5, 20, 1),
OAK_LONGBOW(56,25,25,1),
OAK_STOCK(9442, 16, 24, 1),
//Willow logs
+ WILLOW_ARROW_SHAFT(52, 15, 30, 45),
WILLOW_SHORTBOW(60, 33.3, 35, 1),
WILLOW_LONGBOW(58, 41.5, 40, 1),
WILLOW_STOCK(9444, 22, 39, 1),
//Maple logs
+ MAPLE_ARROW_SHAFT(52, 20, 45, 60),
MAPLE_SHORTOW(64, 50, 50, 1),
MAPLE_LONGBOW(62, 58.3, 55, 1),
MAPLE_STOCK(9448, 32, 54, 1),
//Yew logs
+ YEW_ARROW_SHAFT(52, 25, 60, 75),
YEW_SHORTBOW(68, 67.5, 65, 1),
YEW_LONGBOW(66, 75, 70, 1),
YEW_STOCK(9452, 50, 69, 1),
//Magic logs
+ MAGIC_ARROW_SHAFT(52, 30, 75, 90),
MAGIC_SHORTBOW(72, 83.3, 80,1),
MAGIC_LONGBOW(70, 91.5, 85, 1),
diff --git a/Server/src/main/content/global/skill/fletching/FletchingListeners.kt b/Server/src/main/content/global/skill/fletching/FletchingListeners.kt
index 54ac72b5d..464a0b6ff 100644
--- a/Server/src/main/content/global/skill/fletching/FletchingListeners.kt
+++ b/Server/src/main/content/global/skill/fletching/FletchingListeners.kt
@@ -1,11 +1,13 @@
package content.global.skill.fletching
-import core.game.node.entity.skill.Skills
-import content.global.skill.fletching.Fletching
+import content.data.Quests
import content.global.skill.fletching.items.arrow.ArrowHeadPulse
import content.global.skill.fletching.items.arrow.HeadlessArrowPulse
+import content.global.skill.fletching.items.arrow.HeadlessOgreArrowPulse
import content.global.skill.fletching.items.bow.StringPulse
import content.global.skill.fletching.items.crossbow.LimbPulse
+import core.api.*
+import core.game.node.entity.skill.Skills
import core.game.node.item.Item
import core.net.packet.PacketRepository
import core.net.packet.context.ChildPositionContext
@@ -21,6 +23,7 @@ import org.rs09.consts.Items.YELLOW_FEATHER_10090
import core.game.dialogue.SkillDialogueHandler
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
+import core.game.node.entity.player.Player
class FletchingListeners : InteractionListener {
@@ -32,7 +35,9 @@ class FletchingListeners : InteractionListener {
val MITH_GRAPPLE = Items.MITH_GRAPPLE_9418
val ROPE_GRAPPLE = Items.MITH_GRAPPLE_9419
val ARROW_SHAFT = Items.ARROW_SHAFT_52
+ val OGRE_ARROW_SHAFT = Items.OGRE_ARROW_SHAFT_2864
val FLETCHED_SHAFT = Items.HEADLESS_ARROW_53
+ val FLIGHTED_OGRE_ARROW = Items.FLIGHTED_OGRE_ARROW_2865
val UNFINISHED_ARROWS = Fletching.ArrowHeads.values().map(Fletching.ArrowHeads::unfinished).toIntArray()
val FEATHERS = intArrayOf(FEATHER_314,STRIPY_FEATHER_10087,RED_FEATHER_10088,BLUE_FEATHER_10089,YELLOW_FEATHER_10090,ORANGE_FEATHER_10091)
val UNSTRUNG_BOWS = Fletching.String.values().map(Fletching.String::unfinished).toIntArray()
@@ -42,6 +47,14 @@ class FletchingListeners : InteractionListener {
onUseWith(IntType.ITEM,STRINGS,*UNSTRUNG_BOWS){ player, string, bow ->
val enum = Fletching.stringMap[bow.id] ?: return@onUseWith false
+
+ if (bow.id == Items.UNSTRUNG_COMP_BOW_4825) {
+ // You shouldn't be able to string a bow
+ if (getQuestStage(player, Quests.ZOGRE_FLESH_EATERS) < 8) {
+ player.packetDispatch.sendMessage("You must have started Zogre Flesh Eaters and asked Grish to string this.")
+ return@onUseWith true
+ }
+ }
if(enum.string != string.id){
player.sendMessage("That's not the right kind of string for this.")
return@onUseWith true
@@ -76,6 +89,21 @@ class FletchingListeners : InteractionListener {
return@onUseWith true
}
+ onUseWith(IntType.ITEM,OGRE_ARROW_SHAFT,*FEATHERS){ player, shaft, feather ->
+ val handler: SkillDialogueHandler =
+ object : SkillDialogueHandler(player, SkillDialogue.MAKE_SET_ONE_OPTION, Item(FLIGHTED_OGRE_ARROW)) {
+ override fun create(amount: Int, index: Int) {
+ player.pulseManager.run(HeadlessOgreArrowPulse(player, shaft.asItem(), Item(feather.id, 4), amount))
+ }
+
+ override fun getAll(index: Int): Int {
+ return player.inventory.getAmount(FLIGHTED_OGRE_ARROW)
+ }
+ }
+ handler.open()
+ return@onUseWith true
+ }
+
onUseWith(IntType.ITEM,FLETCHED_SHAFT,*UNFINISHED_ARROWS){ player, shaft, unfinished ->
val head = Fletching.arrowHeadMap[unfinished.id] ?: return@onUseWith false
val handler: SkillDialogueHandler =
@@ -134,6 +162,36 @@ class FletchingListeners : InteractionListener {
return@onUseWith true
}
+ /**
+ * (Long) Kebbit bolts don't need feathers and go 6 at a time so use their own interaction
+ */
+ fun makeKebbitBolt(player : Player, ingredient : Item) : Boolean{
+ val longBolts = when(ingredient.id){
+ Items.KEBBIT_SPIKE_10105 -> false
+ Items.LONG_KEBBIT_SPIKE_10107 -> true
+ else -> return false
+ }
+ val level = if(longBolts) 42 else 26
+ if (getDynLevel(player, Skills.FLETCHING) < level){
+ sendMessage(player, "You need a fletching level of $level to create ${if (longBolts) "long " else ""}kebbit bolts.")
+ return true
+ }
+ val finalProduct = if(longBolts) Items.LONG_KEBBIT_BOLTS_10159 else Items.KEBBIT_BOLTS_10158
+ val xp = if(longBolts) 47.7 else 28.6 // source https://runescape.wiki/w/Fletching?oldid=1069981#Bolts_2
+ if(removeItem(player, ingredient.id)){
+ addItem(player, finalProduct, 6)
+ player.skills.addExperience(Skills.FLETCHING, xp)
+ animate(player, 885)
+ }
+ return true
+ }
+ onUseWith(IntType.ITEM, Items.CHISEL_1755, Items.KEBBIT_SPIKE_10105) { player, used, with ->
+ return@onUseWith makeKebbitBolt(player, with as Item)
+ }
+
+ onUseWith(IntType.ITEM, Items.CHISEL_1755, Items.LONG_KEBBIT_SPIKE_10107) { player, used, with ->
+ return@onUseWith makeKebbitBolt(player, with as Item)
+ }
}
}
\ No newline at end of file
diff --git a/Server/src/main/content/global/skill/fletching/FletchingPulse.java b/Server/src/main/content/global/skill/fletching/FletchingPulse.java
index 9c7d0d638..54219541e 100644
--- a/Server/src/main/content/global/skill/fletching/FletchingPulse.java
+++ b/Server/src/main/content/global/skill/fletching/FletchingPulse.java
@@ -9,6 +9,7 @@ import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.game.world.update.flag.context.Animation;
import core.tools.StringUtils;
+import content.data.Quests;
/**
* fletching skill pulse
@@ -36,6 +37,11 @@ public final class FletchingPulse extends SkillPulse- {
*/
private int amount = 0;
+ /**
+ * Represents the amount to arrows fletched (for ogre arrow shafts which is a random number from 2-6).
+ */
+ private int finalAmount = 0;
+
/**
* Constructs a new {@code FletchingPulse.java} {@code Object}.
* @param player
@@ -57,11 +63,22 @@ public final class FletchingPulse extends SkillPulse
- {
amount = player.getInventory().getAmount(node);
}
if (fletch == Fletching.FletchingItems.OGRE_ARROW_SHAFT) {
- if (player.getQuestRepository().getQuest("Big Chompy Bird Hunting").getStage(player) == 0) {
+ if (player.getQuestRepository().getQuest(Quests.BIG_CHOMPY_BIRD_HUNTING).getStage(player) == 0) {
player.getPacketDispatch().sendMessage("You must have started Big Chompy Bird Hunting to make those.");
return false;
}
}
+ if (fletch == Fletching.FletchingItems.OGRE_COMP_BOW) {
+ // Technically, this isn't supposed to show up till you've asked Grish.
+ if (player.getQuestRepository().getQuest(Quests.ZOGRE_FLESH_EATERS).getStage(player) < 8) {
+ player.getPacketDispatch().sendMessage("You must have started Zogre Flesh Eaters and asked Grish to make this.");
+ return false;
+ }
+ if (!player.getInventory().contains(2859, 1)) {
+ player.getPacketDispatch().sendMessage("You need to have Wolf Bones in order to make this.");
+ return false;
+ }
+ }
return true;
}
@@ -82,9 +99,18 @@ public final class FletchingPulse extends SkillPulse
- {
if (player.getInventory().remove(node)) {
final Item item = new Item(fletch.id,fletch.amount);
if ( fletch == Fletching.FletchingItems.OGRE_ARROW_SHAFT ) {
- item.setAmount(RandomFunction.random(3,6));
+ // The amount of shafts given is random; between two and six will be made.
+ finalAmount = RandomFunction.random(2,6);
+ item.setAmount(finalAmount);
}
- player.getInventory().add(item);
+ if ( fletch == Fletching.FletchingItems.OGRE_COMP_BOW ) {
+ if (!player.getInventory().contains(2859, 1)) {
+ return false;
+ } else {
+ player.getInventory().remove(new Item(2859));
+ }
+ }
+ player.getInventory().add(item);
player.getSkills().addExperience(Skills.FLETCHING, fletch.experience, true);
String message = getMessage();
player.getPacketDispatch().sendMessage(message);
@@ -110,6 +136,18 @@ public final class FletchingPulse extends SkillPulse
- {
switch (fletch) {
case ARROW_SHAFT:
return "You carefully cut the wood into 15 arrow shafts.";
+ case OAK_ARROW_SHAFT:
+ return "You carefully cut the wood into 30 arrow shafts.";
+ case WILLOW_ARROW_SHAFT:
+ return "You carefully cut the wood into 45 arrow shafts.";
+ case MAPLE_ARROW_SHAFT:
+ return "You carefully cut the wood into 60 arrow shafts.";
+ case YEW_ARROW_SHAFT:
+ return "You carefully cut the wood into 75 arrow shafts.";
+ case MAGIC_ARROW_SHAFT:
+ return "You carefully cut the wood into 90 arrow shafts.";
+ case OGRE_ARROW_SHAFT:
+ return "You carefully cut the wood into " + finalAmount + " arrow shafts.";
default:
return "You carefully cut the wood into " + (StringUtils.isPlusN(fletch.getItem().getName()) ? "an" : "a") + " " + fletch.getItem().getName().replace("(u)", "").trim() + ".";
}
diff --git a/Server/src/main/content/global/skill/fletching/items/arrow/HeadlessOgreArrowPulse.java b/Server/src/main/content/global/skill/fletching/items/arrow/HeadlessOgreArrowPulse.java
new file mode 100644
index 000000000..fd7af6731
--- /dev/null
+++ b/Server/src/main/content/global/skill/fletching/items/arrow/HeadlessOgreArrowPulse.java
@@ -0,0 +1,131 @@
+package content.global.skill.fletching.items.arrow;
+
+import core.game.node.entity.player.Player;
+import core.game.node.entity.skill.SkillPulse;
+import core.game.node.entity.skill.Skills;
+import core.game.node.item.Item;
+import org.rs09.consts.Items;
+
+import static core.api.ContentAPIKt.hasSpaceFor;
+import static core.api.ContentAPIKt.sendDialogue;
+
+/**
+ * Represents the arrow pulse for creating unfinished ogre arrows.
+ * @author 'Vexia
+ */
+public final class HeadlessOgreArrowPulse extends SkillPulse
- {
+
+ /**
+ * Represents the headless ogre arrow item.
+ */
+ private final Item HEADLESS_ARROW = new Item(Items.FLIGHTED_OGRE_ARROW_2865);
+
+ /**
+ * Represents the ogre arrow shaft item.
+ */
+ private final Item ARROW_SHAFT = new Item(Items.OGRE_ARROW_SHAFT_2864);
+
+ /**
+ * Represents the feather items.
+ */
+ private static final Item[] FEATHER = new Item[] {
+ new Item(Items.FEATHER_314, 4),
+ };
+
+ /**
+ * The feather being used.
+ */
+ private Item feather;
+
+ /**
+ * Represents the amount to make.
+ */
+ private int sets;
+
+ /**
+ * Constructs a new {@code ArrowPulse.java} {@code Object}.
+ * @param player the player.
+ * @param node the node.
+ */
+ public HeadlessOgreArrowPulse(Player player, Item node, Item feather, int sets) {
+ super(player, node);
+ this.sets = sets;
+ this.feather = feather;
+ }
+
+ @Override
+ public boolean checkRequirements() {
+ if (!player.getInventory().containsItem(ARROW_SHAFT)) {
+ player.getDialogueInterpreter().sendDialogue("You don't have any arrow shafts.");
+ return false;
+ }
+ if (feather == null || !player.getInventory().containsItem(feather)) {
+ player.getDialogueInterpreter().sendDialogue("You don't have any feathers.");
+ return false;
+ }
+ if (!hasSpaceFor(player, HEADLESS_ARROW.asItem())) {
+ sendDialogue(player, "You do not have enough inventory space.");
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void animate() {
+ }
+
+ @Override
+ public boolean reward() {
+ int featherAmount = player.getInventory().getAmount(feather);
+ int shaftAmount = player.getInventory().getAmount(ARROW_SHAFT);
+ if (getDelay() == 1) {
+ super.setDelay(3);
+ }
+ if (featherAmount >= 24 && shaftAmount >= 6) {
+ feather.setAmount(24);
+ ARROW_SHAFT.setAmount(6);
+ player.getPacketDispatch().sendMessage("You attach 24 feathers to 6 ogre arrow shafts.");
+ } else {
+ int amount = Math.min(featherAmount / 4, shaftAmount);
+ feather.setAmount(amount*4);
+ ARROW_SHAFT.setAmount(amount);
+ player.getPacketDispatch().sendMessage(amount == 1
+ ? "You attach a feathers to a shaft." : "You attach " + amount * 4 + " feathers to " + amount + " ogre arrow shafts.");
+ }
+ if (player.getInventory().remove(feather, ARROW_SHAFT)) {
+ HEADLESS_ARROW.setAmount(ARROW_SHAFT.getAmount());
+ player.getSkills().addExperience(Skills.FLETCHING, HEADLESS_ARROW.getAmount(), true);
+ player.getInventory().add(HEADLESS_ARROW);
+ }
+ HEADLESS_ARROW.setAmount(1);
+ feather.setAmount(1);
+ ARROW_SHAFT.setAmount(1);
+ if (!player.getInventory().containsItem(ARROW_SHAFT)) {
+ return true;
+ }
+ if (!player.getInventory().containsItem(feather)) {
+ return true;
+ }
+ sets--;
+ return sets <= 0;
+ }
+
+ @Override
+ public void message(int type) {
+ }
+
+ /**
+ * Gets the feather item.
+ * @return the item.
+ */
+ private Item getFeather() {
+ int length = FEATHER.length;
+ for (int i = 0; i < length; i++) {
+ Item f = FEATHER[i];
+ if (player.getInventory().containsItem(f)) {
+ return f;
+ }
+ }
+ return null;
+ }
+}
diff --git a/Server/src/main/content/global/skill/fletching/items/bow/StringPulse.java b/Server/src/main/content/global/skill/fletching/items/bow/StringPulse.java
index fd1b2c560..0d8645e44 100644
--- a/Server/src/main/content/global/skill/fletching/items/bow/StringPulse.java
+++ b/Server/src/main/content/global/skill/fletching/items/bow/StringPulse.java
@@ -1,7 +1,7 @@
package content.global.skill.fletching.items.bow;
-import core.api.Container;
-import core.api.ContentAPIKt;
+import core.game.node.entity.player.info.LogType;
+import core.game.node.entity.player.info.PlayerMonitor;
import core.game.node.entity.player.link.diary.DiaryType;
import core.game.world.map.zone.ZoneBorders;
import core.game.node.entity.skill.SkillPulse;
@@ -10,6 +10,8 @@ import content.global.skill.fletching.Fletching;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
+import static core.api.ContentAPIKt.amountInInventory;
+
/**
* Represents the skill pulse of stringing.
*
@@ -27,6 +29,9 @@ public class StringPulse extends SkillPulse
- {
*/
private int amount;
+ private int initialAmount;
+ private int processedAmount;
+
/**
* Constructs a new {@code StringbowPlugin.java} {@code Object}.
*
@@ -37,6 +42,8 @@ public class StringPulse extends SkillPulse
- {
super(player, node);
this.bow = bow;
this.amount = amount;
+ this.initialAmount = amountInInventory(player, node.getId());
+ this.processedAmount = 0;
}
@Override
@@ -70,6 +77,10 @@ public class StringPulse extends SkillPulse
- {
player.getInventory().add(new Item(bow.product));
player.getSkills().addExperience(Skills.FLETCHING, bow.experience, true);
player.getPacketDispatch().sendMessage("You add a string to the bow.");
+ processedAmount++;
+ if (processedAmount > initialAmount) {
+ PlayerMonitor.log(player, LogType.DUPE_ALERT, "fletched item (" + player.getName() + ", " + bow.unfinished + "): initialAmount " + initialAmount + ", processedAmount " + processedAmount);
+ }
if (bow == Fletching.String.MAGIC_SHORTBOW
&& (new ZoneBorders(2721, 3489, 2724, 3493, 0).insideBorder(player)
diff --git a/Server/src/main/content/global/skill/fletching/items/darts/DartPulse.java b/Server/src/main/content/global/skill/fletching/items/darts/DartPulse.java
index 6f21ba8d7..d65fac185 100644
--- a/Server/src/main/content/global/skill/fletching/items/darts/DartPulse.java
+++ b/Server/src/main/content/global/skill/fletching/items/darts/DartPulse.java
@@ -7,6 +7,7 @@ import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
+import content.data.Quests;
/**
* Represents the dart pulse.
@@ -46,7 +47,7 @@ public final class DartPulse extends SkillPulse
- {
player.getDialogueInterpreter().sendDialogue("You need a fletching level of " + dart.level + " to do this.");
return false;
}
- if (!player.getQuestRepository().isComplete("The Tourist Trap")){
+ if (!player.getQuestRepository().isComplete(Quests.THE_TOURIST_TRAP)){
player.getDialogueInterpreter().sendDialogue("You need to have completed Tourist Trap to fletch darts.");
return false;
}
diff --git a/Server/src/main/content/global/skill/gather/SkillingResource.java b/Server/src/main/content/global/skill/gather/SkillingResource.java
index 178f6679b..2d2b43e65 100644
--- a/Server/src/main/content/global/skill/gather/SkillingResource.java
+++ b/Server/src/main/content/global/skill/gather/SkillingResource.java
@@ -612,9 +612,6 @@ public enum SkillingResource {
*/
RUNITE_ORE_0(2107, 85, 0.95, 1250 | 2500 << 16, 125.0, 451, 1, "runite rocks", null, 452, Skills.MINING),
RUNITE_ORE_1(2106, 85, 0.95, 1250 | 2500 << 16, 125.0, 451, 1, "runite rocks", null, 450, Skills.MINING),
- RUNITE_ORE_2(6669, 85, 0.95, 1250 | 2500 << 16, 125.0, 451, 1, "runite rocks", null, 21296, Skills.MINING),
- RUNITE_ORE_3(6671, 85, 0.95, 1250 | 2500 << 16, 125.0, 451, 1, "runite rocks", null, 21298, Skills.MINING),
- RUNITE_ORE_4(6670, 85, 0.95, 1250 | 2500 << 16, 125.0, 451, 1, "runite rocks", null, 21297, Skills.MINING),
RUNITE_ORE_5(14861, 85, 0.95, 1250 | 2500 << 16, 125.0, 451, 1, "runite rocks", null, 25373, Skills.MINING),
RUNITE_ORE_6(14860, 85, 0.95, 1250 | 2500 << 16, 125.0, 451, 1, "runite rocks", null, 25372, Skills.MINING),
RUNITE_ORE_7(14859, 85, 0.95, 1250 | 2500 << 16, 125.0, 451, 1, "runite rocks", null, 25371, Skills.MINING),
@@ -632,7 +629,15 @@ public enum SkillingResource {
*/
GEM_ROCK_0(23567, 40, 0.95, 166 | 175 << 16, 65, 1625, 1, "gem rocks", null, 21297, Skills.MINING),
GEM_ROCK_1(23566, 40, 0.95, 166 | 175 << 16, 65, 1625, 1, "gem rocks", null, 21296, Skills.MINING),
- GEM_ROCK_2(23568, 40, 0.95, 166 | 175 << 16, 65, 1625, 1, "gem rocks", null, 21298, Skills.MINING);
+ GEM_ROCK_2(23568, 40, 0.95, 166 | 175 << 16, 65, 1625, 1, "gem rocks", null, 21298, Skills.MINING),
+
+ /**
+ * Magic stone.
+ */
+ MAGIC_STONE_0(6669, 20, 0.3, 100 | 200 << 16, 0.0, 4703, 1, "magic stone", null, 21296, Skills.MINING),
+ MAGIC_STONE_1(6671, 20, 0.3, 100 | 200 << 16, 0.0, 4703, 1, "magic stone", null, 21298, Skills.MINING),
+ MAGIC_STONE_2(6670, 20, 0.3, 100 | 200 << 16, 0.0, 4703, 1, "magic stone", null, 21297, Skills.MINING);
+
/**
* The resources mapping.
diff --git a/Server/src/main/content/global/skill/gather/fishing/barbfishing/BarbFishingPulse.kt b/Server/src/main/content/global/skill/gather/fishing/barbfishing/BarbFishingPulse.kt
index 2a66a2f1f..a44387209 100644
--- a/Server/src/main/content/global/skill/gather/fishing/barbfishing/BarbFishingPulse.kt
+++ b/Server/src/main/content/global/skill/gather/fishing/barbfishing/BarbFishingPulse.kt
@@ -48,6 +48,10 @@ class BarbFishingPulse(player: Player) : SkillPulse
(player,NPC(1176)) {
}
override fun reward(): Boolean {
+ if (delay == 1){
+ super.setDelay(5)
+ return false
+ }
val stragiXP = arrayOf(5,6,7)
val fishXP = arrayOf(50,70,80)
val reward = getRandomFish()
diff --git a/Server/src/main/content/global/skill/gather/mining/MiningListener.kt b/Server/src/main/content/global/skill/gather/mining/MiningListener.kt
index d744b0a8f..1c46081a4 100644
--- a/Server/src/main/content/global/skill/gather/mining/MiningListener.kt
+++ b/Server/src/main/content/global/skill/gather/mining/MiningListener.kt
@@ -106,10 +106,9 @@ class MiningListener : InteractionListener {
}
// Give the mining reward, increment 'rocks mined' attribute
- if(addItem(player, reward, rewardAmount)) {
- var rocksMined = getAttribute(player, "$STATS_BASE:$STATS_ROCKS", 0)
- setAttribute(player, "/save:$STATS_BASE:$STATS_ROCKS", ++rocksMined)
- }
+ addItemOrDrop(player, reward, rewardAmount)
+ var rocksMined = getAttribute(player, "$STATS_BASE:$STATS_ROCKS", 0)
+ setAttribute(player, "/save:$STATS_BASE:$STATS_ROCKS", rocksMined + rewardAmount)
// Calculate bonus gem chance while mining
if (!isEssence) {
@@ -136,7 +135,7 @@ class MiningListener : InteractionListener {
}
// Transform ore to depleted version
- if (!isEssence && resource!!.respawnRate != 0) {
+ if (!isEssence && resource!!.respawnRate != 0 && RandomFunction.roll(getDynLevel(player, Skills.MINING)*5/resource!!.respawnDuration + 1)) {
SceneryBuilder.replace(node as Scenery, Scenery(resource!!.emptyId, node.getLocation(), node.type, node.rotation), resource!!.respawnDuration)
node.setActive(false)
return true
diff --git a/Server/src/main/content/global/skill/gather/mining/MiningNode.java b/Server/src/main/content/global/skill/gather/mining/MiningNode.java
index 5f7f00cf3..d403ae49b 100644
--- a/Server/src/main/content/global/skill/gather/mining/MiningNode.java
+++ b/Server/src/main/content/global/skill/gather/mining/MiningNode.java
@@ -403,9 +403,6 @@ public enum MiningNode{
//Runite
RUNITE_ORE_0( 2107, 452, (byte) 12),
RUNITE_ORE_1( 2106, 450, (byte) 12),
- RUNITE_ORE_2( 6669, 21296, (byte) 12),
- RUNITE_ORE_3( 6671, 21298, (byte) 12),
- RUNITE_ORE_4( 6670, 21297, (byte) 12),
RUNITE_ORE_5( 14861,25373, (byte) 12),
RUNITE_ORE_6( 14860,25372, (byte) 12),
RUNITE_ORE_7( 14859,25371, (byte) 12),
@@ -437,8 +434,14 @@ public enum MiningNode{
GRANITE(10947,10945, (byte) 16),
//Rubium?
- RUBIUM(29746,29747, (byte) 17);
+ RUBIUM(29746,29747, (byte) 17),
+ //Magic stone (Tears of Guthix)
+ MAGIC_STONE_0( 6669, 21296, (byte) 18), // Was mistaken for RUNITE_ORE_2
+ MAGIC_STONE_1( 6671, 21298, (byte) 18), // Was mistaken for RUNITE_ORE_3
+ MAGIC_STONE_2( 6670, 21297, (byte) 18), // Was mistaken for RUNITE_ORE_4
+
+ ;
public static List gemRockGems = new ArrayList<>(20);
@@ -522,21 +525,21 @@ public enum MiningNode{
experience = 80.0;
rate = 0.70;
reward = 447;
- level = 55;
+ level = 50;
break;
case 11:
respawnRate = 400 | 800 << 16;
experience = 95.0;
rate = 0.85;
reward = 449;
- level = 70;
+ level = 60;
break;
case 12:
respawnRate = 1250 | 2500 << 16;
experience = 125.0;
rate = 0.95;
reward = 451;
- level = 85;
+ level = 70;
break;
case 13:
respawnRate = 166 | 175 << 16;
@@ -573,6 +576,13 @@ public enum MiningNode{
reward = 12630;
level = 46;
break;
+ case 18:
+ respawnRate = 100 | 200 << 16;
+ experience = 0.0;
+ rate = 0.3;
+ reward = 4703;
+ level = 20;
+ break;
}
}
private static HashMap NODE_MAP = new HashMap<>();
diff --git a/Server/src/main/content/global/skill/gather/mining/MiningSkillPulse.kt b/Server/src/main/content/global/skill/gather/mining/MiningSkillPulse.kt
index aa7ef70e6..58464672e 100644
--- a/Server/src/main/content/global/skill/gather/mining/MiningSkillPulse.kt
+++ b/Server/src/main/content/global/skill/gather/mining/MiningSkillPulse.kt
@@ -11,6 +11,7 @@ import core.game.node.entity.player.Player
import core.game.node.entity.player.link.diary.DiaryType
import core.game.node.entity.skill.Skills
import content.data.skill.SkillingTool
+import content.global.activity.shootingstar.StarBonus
import content.global.skill.skillcapeperks.SkillcapePerks
import core.game.node.item.ChanceItem
import core.game.node.scenery.Scenery
@@ -164,10 +165,9 @@ class MiningSkillPulse(private val player: Player, private val node: Node) : Pul
}
// Give the mining reward, increment 'rocks mined' attribute
- if(addItem(player, reward, rewardAmount)) {
- var rocksMined = getAttribute(player, "$STATS_BASE:$STATS_ROCKS", 0)
- setAttribute(player, "/save:$STATS_BASE:$STATS_ROCKS", ++rocksMined)
- }
+ addItemOrDrop(player, reward, rewardAmount)
+ var rocksMined = getAttribute(player, "$STATS_BASE:$STATS_ROCKS", 0)
+ setAttribute(player, "/save:$STATS_BASE:$STATS_ROCKS", rocksMined + rewardAmount)
// Calculate bonus gem chance while mining
if (!isMiningEssence) {
@@ -225,7 +225,7 @@ class MiningSkillPulse(private val player: Player, private val node: Node) : Pul
}
// If player has mining boost from Shooting Star, roll chance at extra ore
- if (player.hasActiveState("shooting-star")) {
+ if (hasTimerActive(player)) {
if (RandomFunction.getRandom(5) == 3) {
sendMessage(player, "...you manage to mine a second ore thanks to the Star Sprite.")
amount += 1
diff --git a/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingListener.kt b/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingListener.kt
index c73b135b6..4ca385088 100644
--- a/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingListener.kt
+++ b/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingListener.kt
@@ -156,7 +156,7 @@ class WoodcuttingListener : InteractionListener {
//OSRS: https://oldschool.runescape.wiki/w/Woodcutting scroll down to the mechanics section
//RS3 : https://runescape.wiki/w/Woodcutting scroll down to the mechanics section, and expand the tree felling chances table
if (resource.getRespawnRate() > 0) {
- if (RandomFunction.roll(8) || listOf(1, 2, 3, 4, 6).contains(resource.identifier.toInt())){
+ if (RandomFunction.roll(8) || listOf(2, 3, 4, 6).contains(resource.identifier.toInt())){
if (resource.isFarming()) {
val fPatch = forObject(node.asScenery())
if (fPatch != null) {
diff --git a/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingSkillPulse.java b/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingSkillPulse.java
index 70bd09d38..bdb54f1fe 100644
--- a/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingSkillPulse.java
+++ b/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingSkillPulse.java
@@ -204,7 +204,7 @@ public class WoodcuttingSkillPulse extends Pulse {
if (resource.isFarming()) {
FarmingPatch fPatch = FarmingPatch.forObject(node.asScenery());
if(fPatch != null) {
- Patch patch = fPatch.getPatchFor(player);
+ Patch patch = fPatch.getPatchFor(player, true);
patch.setCurrentState(patch.getCurrentState() + 1);
}
return true;
diff --git a/Server/src/main/content/global/skill/herblore/FinishedPotion.java b/Server/src/main/content/global/skill/herblore/FinishedPotion.java
index e78d80432..38a71f84d 100644
--- a/Server/src/main/content/global/skill/herblore/FinishedPotion.java
+++ b/Server/src/main/content/global/skill/herblore/FinishedPotion.java
@@ -8,34 +8,34 @@ import org.rs09.consts.Items;
* @author 'Vexia
*/
public enum FinishedPotion {
- ATTACK_POTION(UnfinishedPotion.GUAM, new Item(221), 3, 25, new Item(121)),
- ANTIPOISON_POTION(UnfinishedPotion.MARRENTILL, new Item(235), 5, 37.5, new Item(175)),
- STRENGTH_POTION(UnfinishedPotion.TARROMIN, new Item(225), 12, 50, new Item(115)),
- RESTORE_POTION(UnfinishedPotion.HARRALANDER, new Item(223), 22, 62.5, new Item(127)),
- ENERGY_POTION(UnfinishedPotion.HARRALANDER, new Item(1975), 26, 67.5, new Item(3010)),
- DEFENCE_POTION(UnfinishedPotion.RANARR, new Item(239), 30, 45, new Item(133)),
- AGILITY_POTION(UnfinishedPotion.TOADFLAX, new Item(2152), 34, 80, new Item(3034)),
- COMBAT_POTION(UnfinishedPotion.HARRALANDER, new Item(9736), 36, 84, new Item(9741)),
- PRAYER_POTION(UnfinishedPotion.RANARR, new Item(231), 38, 87.5, new Item(139)),
- SUMMONING_POTION(UnfinishedPotion.SPIRIT_WEED, new Item(12109), 40, 92, new Item(12142)),
- SUPER_ATTACK(UnfinishedPotion.IRIT, new Item(221), 45, 100, new Item(145)),
- SUPER_ANTIPOISON(UnfinishedPotion.IRIT, new Item(235), 48, 106.3, new Item(181)),
- FISHING_POTION(UnfinishedPotion.AVANTOE, new Item(231), 50, 112.5, new Item(151)),
- SUPER_ENERGY(UnfinishedPotion.AVANTOE, new Item(2970), 52, 117.5, new Item(3018)),
- HUNTING_POTION(UnfinishedPotion.AVANTOE, new Item(Items.KEBBIT_TEETH_DUST_10111), 53, 120, new Item(10000)),
- SUPER_STRENGTH(UnfinishedPotion.KWUARM, new Item(225), 55, 125, new Item(157)),
+ ATTACK_POTION(UnfinishedPotion.GUAM, new Item(221), 3, 25, new Item(2428)),
+ ANTIPOISON_POTION(UnfinishedPotion.MARRENTILL, new Item(235), 5, 37.5, new Item(2446)),
+ STRENGTH_POTION(UnfinishedPotion.TARROMIN, new Item(225), 12, 50, new Item(113)),
+ RESTORE_POTION(UnfinishedPotion.HARRALANDER, new Item(223), 22, 62.5, new Item(2430)),
+ ENERGY_POTION(UnfinishedPotion.HARRALANDER, new Item(1975), 26, 67.5, new Item(3008)),
+ DEFENCE_POTION(UnfinishedPotion.RANARR, new Item(239), 30, 45, new Item(2432)),
+ AGILITY_POTION(UnfinishedPotion.TOADFLAX, new Item(2152), 34, 80, new Item(3032)),
+ COMBAT_POTION(UnfinishedPotion.HARRALANDER, new Item(9736), 36, 84, new Item(9739)),
+ PRAYER_POTION(UnfinishedPotion.RANARR, new Item(231), 38, 87.5, new Item(2434)),
+ SUMMONING_POTION(UnfinishedPotion.SPIRIT_WEED, new Item(12109), 40, 92, new Item(12140)),
+ SUPER_ATTACK(UnfinishedPotion.IRIT, new Item(221), 45, 100, new Item(2436)),
+ SUPER_ANTIPOISON(UnfinishedPotion.IRIT, new Item(235), 48, 106.3, new Item(2448)),
+ FISHING_POTION(UnfinishedPotion.AVANTOE, new Item(231), 50, 112.5, new Item(2438)),
+ SUPER_ENERGY(UnfinishedPotion.AVANTOE, new Item(2970), 52, 117.5, new Item(3016)),
+ HUNTING_POTION(UnfinishedPotion.AVANTOE, new Item(Items.KEBBIT_TEETH_DUST_10111), 53, 120, new Item(9998)),
+ SUPER_STRENGTH(UnfinishedPotion.KWUARM, new Item(225), 55, 125, new Item(2440)),
WEAPON_POISON(UnfinishedPotion.KWUARM, new Item(241), 60, 137.5, new Item(187)),
- SUPER_RESTORE(UnfinishedPotion.SNAPDRAGON, new Item(223), 63, 142.5, new Item(3026)),
- SUPER_DEFENCE(UnfinishedPotion.CADANTINE, new Item(239), 66, 160, new Item(163)),
- ANTIFIRE(UnfinishedPotion.LANTADYME, new Item(241), 69, 157.5, new Item(2454)),
- SUPER_RANGING_POTION(UnfinishedPotion.DWARF_WEED, new Item(245), 72, 162.5, new Item(169)),
- SUPER_MAGIC(UnfinishedPotion.LANTADYME, new Item(3138), 76, 172.5, new Item(3042)),
- ZAMORAK_BREW(UnfinishedPotion.TORSTOL, new Item(247), 78, 175, new Item(189)),
- SARADOMIN_BREW(UnfinishedPotion.TOADFLAX, GrindingItem.BIRDS_NEST.getProduct(), 81, 180, new Item(6687)),
+ SUPER_RESTORE(UnfinishedPotion.SNAPDRAGON, new Item(223), 63, 142.5, new Item(3024)),
+ SUPER_DEFENCE(UnfinishedPotion.CADANTINE, new Item(239), 66, 160, new Item(2442)),
+ ANTIFIRE(UnfinishedPotion.LANTADYME, new Item(241), 69, 157.5, new Item(2452)),
+ SUPER_RANGING_POTION(UnfinishedPotion.DWARF_WEED, new Item(245), 72, 162.5, new Item(2444)),
+ SUPER_MAGIC(UnfinishedPotion.LANTADYME, new Item(3138), 76, 172.5, new Item(3040)),
+ ZAMORAK_BREW(UnfinishedPotion.TORSTOL, new Item(247), 78, 175, new Item(2450)),
+ SARADOMIN_BREW(UnfinishedPotion.TOADFLAX, GrindingItem.BIRDS_NEST.getProduct(), 81, 180, new Item(6685)),
STRONG_WEAPON_POISON(UnfinishedPotion.STRONG_WEAPON_POISON, new Item(223), 73, 165, new Item(5937)),
SUPER_STRONG_WEAPON_POISON(UnfinishedPotion.SUPER_STRONG_WEAPON_POISON, new Item(6018), 82, 190, new Item(5940)),
- STRONG_ANTIPOISON(UnfinishedPotion.STRONG_ANTIPOISON, new Item(6049), 68, 155, new Item(5945)),
- SUPER_STRONG_ANTIPOISON(UnfinishedPotion.SUPER_STRONG_ANTIPOISON, new Item(6051), 79, 177.5, new Item(5954)),
+ STRONG_ANTIPOISON(UnfinishedPotion.STRONG_ANTIPOISON, new Item(6049), 68, 155, new Item(5943)),
+ SUPER_STRONG_ANTIPOISON(UnfinishedPotion.SUPER_STRONG_ANTIPOISON, new Item(6051), 79, 177.5, new Item(5952)),
BLAMISH_OIL(UnfinishedPotion.HARRALANDER, new Item(1581), 25, 80, new Item(1582));
/**
diff --git a/Server/src/main/content/global/skill/herblore/HerbCleanListener.kt b/Server/src/main/content/global/skill/herblore/HerbCleanListener.kt
index 7ba8cfe5a..9136cd3ed 100644
--- a/Server/src/main/content/global/skill/herblore/HerbCleanListener.kt
+++ b/Server/src/main/content/global/skill/herblore/HerbCleanListener.kt
@@ -6,6 +6,10 @@ import core.game.interaction.InteractionListener
import core.game.node.entity.skill.Skills
import core.game.node.item.Item
import java.util.*
+import content.data.Quests
+
+import core.game.system.task.Pulse
+
/**
* Dirty herb cleaning listener
@@ -15,7 +19,7 @@ class HerbCleanListener : InteractionListener {
override fun defineListeners() {
on(IntType.ITEM, "clean") { player, node ->
lock(player, 1)
- if (!requireQuest(player, "Druidic Ritual", "before you can use Herblore.")) return@on true
+ if (!requireQuest(player, Quests.DRUIDIC_RITUAL, "before you can use Herblore.")) return@on true
val herb: Herbs = Herbs.forItem(node as Item) ?: return@on true
if (getDynLevel(player, Skills.HERBLORE) < herb.level) {
@@ -24,11 +28,30 @@ class HerbCleanListener : InteractionListener {
}
val exp = herb.experience
+
+ player.pulseManager.run(object : Pulse() {
+ var counter = 0
+ override fun pulse(): Boolean {
+ if (amountInInventory(player, node.asItem().id) == 0 )
+ return true
+ if(removeItem(player, node.asItem().id)) {
+ addItem(player, herb.product.id)
+ rewardXP(player, Skills.HERBLORE, exp)
+ playAudio(player, 5153)
+ //sendMessage(player, "You clean the dirt from the " + herb.product.name.lowercase(Locale.getDefault()).replace("clean", "").trim { it <= ' ' } + " leaf.")
+ }
+ return false
+ }
+ })
+ return@on true
+
+ /* Vanilla actions, replaced by pulse above
replaceSlot(player, node.asItem().slot, herb.product, node.asItem())
rewardXP(player, Skills.HERBLORE, exp)
playAudio(player, 5153)
sendMessage(player, "You clean the dirt from the " + herb.product.name.lowercase(Locale.getDefault()).replace("clean", "").trim { it <= ' ' } + " leaf.")
return@on true
+ */
}
}
}
\ No newline at end of file
diff --git a/Server/src/main/content/global/skill/herblore/HerbTarPulse.java b/Server/src/main/content/global/skill/herblore/HerbTarPulse.java
index 45793be82..cbc66e0f8 100644
--- a/Server/src/main/content/global/skill/herblore/HerbTarPulse.java
+++ b/Server/src/main/content/global/skill/herblore/HerbTarPulse.java
@@ -5,6 +5,7 @@ import core.game.node.entity.skill.Skills;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.game.world.update.flag.context.Animation;
+import content.data.Quests;
/**
* Represents the pulse used to create herb tars.
@@ -25,7 +26,7 @@ public final class HerbTarPulse extends SkillPulse- {
/**
* Represents the swamp tar item.
*/
- private static final Item SWAMP_TAR = new Item(1939, 15);
+ private static final Item SWAMP_TAR = new Item(1939, 45);
/**
* Represents the tar to make.
@@ -52,7 +53,7 @@ public final class HerbTarPulse extends SkillPulse
- {
@Override
public boolean checkRequirements() {
- if (!player.getQuestRepository().isComplete("Druidic Ritual")) {
+ if (!player.getQuestRepository().isComplete(Quests.DRUIDIC_RITUAL)) {
player.getPacketDispatch().sendMessage("You must complete the Druidic Ritual quest before you can use Herblore.");
return false;
}
@@ -65,7 +66,7 @@ public final class HerbTarPulse extends SkillPulse
- {
return false;
}
if (!player.getInventory().containsItem(SWAMP_TAR)) {
- player.getPacketDispatch().sendMessage("You need at least 15 swamp tar in order to do this.");
+ player.getPacketDispatch().sendMessage("You need at least 45 swamp tar in order to do this.");
return false;
}
return true;
@@ -83,7 +84,7 @@ public final class HerbTarPulse extends SkillPulse
- {
return false;
}
if (player.getInventory().containsItem(SWAMP_TAR) && player.getInventory().containsItem(tar.getIngredient()) && player.getInventory().remove(SWAMP_TAR) && player.getInventory().remove(tar.getIngredient())) {
- final Item item = new Item(tar.getTar().getId(), 15);
+ final Item item = new Item(tar.getTar().getId(), 45);
player.getInventory().add(item);
player.getSkills().addExperience(Skills.HERBLORE, tar.getExperience(), true);
player.getPacketDispatch().sendMessage("You add the " + tar.getIngredient().getName().toLowerCase().replace("clean", "").trim() + " to the swamp tar.");
diff --git a/Server/src/main/content/global/skill/herblore/HerblorePulse.java b/Server/src/main/content/global/skill/herblore/HerblorePulse.java
index fbf1a8c73..0f859ad23 100644
--- a/Server/src/main/content/global/skill/herblore/HerblorePulse.java
+++ b/Server/src/main/content/global/skill/herblore/HerblorePulse.java
@@ -12,6 +12,7 @@ import core.tools.RandomFunction;
import org.rs09.consts.Sounds;
import static core.api.ContentAPIKt.playAudio;
+import content.data.Quests;
/**
@@ -69,7 +70,7 @@ public final class HerblorePulse extends SkillPulse
- {
@Override
public boolean checkRequirements() {
- if (!player.getQuestRepository().isComplete("Druidic Ritual")) {
+ if (!player.getQuestRepository().isComplete(Quests.DRUIDIC_RITUAL)) {
player.getPacketDispatch().sendMessage("You must complete the Druidic Ritual quest before you can use Herblore.");
return false;
}
diff --git a/Server/src/main/content/global/skill/herblore/Herbs.java b/Server/src/main/content/global/skill/herblore/Herbs.java
index 5ee4959eb..1973162f1 100644
--- a/Server/src/main/content/global/skill/herblore/Herbs.java
+++ b/Server/src/main/content/global/skill/herblore/Herbs.java
@@ -7,7 +7,7 @@ import core.game.node.item.Item;
* @author 'Vexia
*/
public enum Herbs {
- GUAM(new Item(199), 2.5, 3, new Item(249)), MARRENTILL(new Item(201), 3.8, 5, new Item(251)), TARROMIN(new Item(203), 5, 11, new Item(253)), HARRALANDER(new Item(205), 6.3, 20, new Item(255)), RANARR(new Item(207), 7.5, 25, new Item(257)), TOADFLAX(new Item(3049), 8, 30, new Item(2998)), SPIRIT_WEED(new Item(12174), 7.8, 35, new Item(12172)), IRIT(new Item(209), 8.8, 40, new Item(259)), AVANTOE(new Item(211), 10, 48, new Item(261)), KWUARM(new Item(213), 11.3, 54, new Item(263)), SNAPDRAGON(new Item(3051), 11.8, 59, new Item(3000)), CADANTINE(new Item(215), 12.5, 65, new Item(265)), LANTADYME(new Item(2485), 13.1, 67, new Item(2481)), DWARF_WEED(new Item(217), 13.8, 70, new Item(267)), TORSTOL(new Item(219), 15, 75, new Item(269)), SNAKE_WEED(new Item(1525), 2.5, 3, new Item(1526)), ARDRIGAL(new Item(1527), 2.5, 3, new Item(1528)), SITO_FOIL(new Item(1529), 2.5, 3, new Item(1530)), VOLENCIA_MOSS(new Item(1531), 2.5, 3, new Item(1532)), ROGUES_PUSE(new Item(1533), 2.5, 3, new Item(1534));
+ GUAM(new Item(199), 2.5, 3, new Item(249)), MARRENTILL(new Item(201), 3.8, 5, new Item(251)), TARROMIN(new Item(203), 5, 11, new Item(253)), HARRALANDER(new Item(205), 6.3, 20, new Item(255)), RANARR(new Item(207), 7.5, 25, new Item(257)), TOADFLAX(new Item(3049), 8, 30, new Item(2998)), SPIRIT_WEED(new Item(12174), 7.8, 35, new Item(12172)), IRIT(new Item(209), 8.8, 40, new Item(259)), AVANTOE(new Item(211), 10, 48, new Item(261)), KWUARM(new Item(213), 11.3, 54, new Item(263)), SNAPDRAGON(new Item(3051), 11.8, 59, new Item(3000)), CADANTINE(new Item(215), 12.5, 65, new Item(265)), LANTADYME(new Item(2485), 13.1, 67, new Item(2481)), DWARF_WEED(new Item(217), 13.8, 70, new Item(267)), TORSTOL(new Item(219), 15, 75, new Item(269)), SNAKE_WEED(new Item(1525), 2.5, 3, new Item(1526)), ARDRIGAL(new Item(1527), 2.5, 3, new Item(1528)), SITO_FOIL(new Item(1529), 2.5, 3, new Item(1530)), VOLENCIA_MOSS(new Item(1531), 2.5, 3, new Item(1532)), ROGUES_PURSE(new Item(1533), 0, 8, new Item(1534));
/**
* Represents the herb item.
diff --git a/Server/src/main/content/global/skill/herblore/UnfinishedPotion.java b/Server/src/main/content/global/skill/herblore/UnfinishedPotion.java
index 699a03b74..aa6e48d27 100644
--- a/Server/src/main/content/global/skill/herblore/UnfinishedPotion.java
+++ b/Server/src/main/content/global/skill/herblore/UnfinishedPotion.java
@@ -9,6 +9,7 @@ import core.game.node.item.Item;
public enum UnfinishedPotion {
GUAM(Herbs.GUAM.getProduct(), 3, new Item(91)),
MARRENTILL(Herbs.MARRENTILL.getProduct(), 5, new Item(93)),
+ ROGUES_PURSE(Herbs.ROGUES_PURSE.getProduct(), 5, new Item(4840)),
TARROMIN(Herbs.TARROMIN.getProduct(), 12, new Item(95)),
HARRALANDER(Herbs.HARRALANDER.getProduct(), 22, new Item(97)),
RANARR(Herbs.RANARR.getProduct(), 30, new Item(99)),
diff --git a/Server/src/main/content/global/skill/hunter/ImpBoxPlugin.java b/Server/src/main/content/global/skill/hunter/ImpBoxPlugin.java
index 800e342eb..a1cf25062 100644
--- a/Server/src/main/content/global/skill/hunter/ImpBoxPlugin.java
+++ b/Server/src/main/content/global/skill/hunter/ImpBoxPlugin.java
@@ -46,10 +46,16 @@ public class ImpBoxPlugin extends OptionHandler {
public boolean handle(Player player, Node node, String option) {
switch (option) {
case "bank":
+ int boxSlot = node.asItem().getSlot();
+ player.getInventory().replace(new Item(10025), boxSlot);
+ player.sendMessage("You free the imp in exchange for it taking some items to your bank.");
+ player.getBank().openDepositBox();
+ /* Snowscape Custom: the normal imp interface is broken, so we fixed/buffed it by making it act as a one-time-use deposit box instead.
Component component = new Component(478);
component.setPlugin(new ImpInterfaceHandler((Item) node));
player.getInterfaceManager().open(component);
PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 478, 61, 91, player.getInventory(), true));
+ */
break;
case "talk-to":
player.getDialogueInterpreter().open("imp-box");
diff --git a/Server/src/main/content/global/skill/hunter/TrapSetting.java b/Server/src/main/content/global/skill/hunter/TrapSetting.java
index ec0f87ba3..73a69dbd8 100644
--- a/Server/src/main/content/global/skill/hunter/TrapSetting.java
+++ b/Server/src/main/content/global/skill/hunter/TrapSetting.java
@@ -20,6 +20,8 @@ import org.rs09.consts.Sounds;
import static core.api.ContentAPIKt.playAudio;
+import core.game.node.entity.npc.drop.NPCDropTables;
+
/**
* A setting for a trap type.
* @author Vexia
@@ -161,7 +163,13 @@ public class TrapSetting {
return;
}
addTool(player, wrapper, type);
- player.getInventory().add(wrapper.getItems().toArray(new Item[] {}));
+ // Snowscape modification: custom bonecrusher functionality extended to include hunter bones
+ //player.getInventory().add(wrapper.getItems().toArray(new Item[] {}));
+ for (Item item: wrapper.getItems().toArray(new Item[] {})) {
+ if (!NPCDropTables.handleBoneCrusher(player, item)) {
+ player.getInventory().add(item);
+ }
+ }
} else {
if (isObjectTrap() && !ground) {
player.getInventory().add(wrapper.getItems().toArray(new Item[] {}));
@@ -306,7 +314,7 @@ public class TrapSetting {
case 3:
handleCatch(counter, wrapper, node, npc, success);
if (success) {
- wrapper.setTicks(GameWorld.getTicks() + 100);
+ wrapper.setTicks(GameWorld.getTicks() + 1000);
wrapper.setReward(node);
wrapper.setObject(getFinalId(wrapper, node));
switch(wrapper.getType()) {
diff --git a/Server/src/main/content/global/skill/hunter/TrapWrapper.java b/Server/src/main/content/global/skill/hunter/TrapWrapper.java
index 4cbe32987..b596d864c 100644
--- a/Server/src/main/content/global/skill/hunter/TrapWrapper.java
+++ b/Server/src/main/content/global/skill/hunter/TrapWrapper.java
@@ -102,7 +102,7 @@ public final class TrapWrapper {
this.type = type;
this.object = object;
this.originalId = object.getId();
- this.ticks = GameWorld.getTicks() + (100);
+ this.ticks = GameWorld.getTicks() + (1000);
this.instance = HunterManager.getInstance(player);
this.object.getAttributes().setAttribute("trap-uid", instance.getUid());
}
diff --git a/Server/src/main/content/global/skill/hunter/Traps.java b/Server/src/main/content/global/skill/hunter/Traps.java
index f2151d660..e5e30ca34 100644
--- a/Server/src/main/content/global/skill/hunter/Traps.java
+++ b/Server/src/main/content/global/skill/hunter/Traps.java
@@ -21,12 +21,12 @@ import static core.api.ContentAPIKt.log;
*/
public enum Traps {
BIRD_SNARE(new TrapSetting(10006, new int[] { 19175 }, new int[] {}, "lay", 19174, Animation.create(5208), Animation.create(5207), 1),
- new TrapNode(new int[] { 5073 }, 1, 34, new int[] { 19179, 19180 }, new Item[] { new Item(10088, 8), new Item(9978), new Item(526) }),
- new TrapNode(new int[] { 5075 }, 5, 48, new int[] { 19183, 19184 }, new Item[] { new Item(10090, 8), new Item(9978), new Item(526) }),
- new TrapNode(new int[] { 5076 }, 9, 61, new int[] { 19185, 19186 }, new Item[] { new Item(10091, 8), new Item(9978), new Item(526) }),
- new TrapNode(new int[] { 5074 }, 11, 64.7, new int[] { 19181, 19182 }, new Item[] { new Item(10089, 8), new Item(9978), new Item(526) }),
- new TrapNode(new int[] { 5072 }, 19, 95.2, new int[] { 19177, 19178 }, new Item[] { new Item(10087, 8), new Item(9978), new Item(526) }),
- new TrapNode(new int[] { 7031 }, 39, 167, new int[] { 28931, 28930 }, new Item[] { new Item(11525, 8), new Item(9978), new Item(526) }) {
+ new TrapNode(new int[] { 5073 }, 1, 34, new int[] { 19179, 19180 }, new Item[] { new Item(10088, 60), new Item(9978), new Item(526) }),
+ new TrapNode(new int[] { 5075 }, 5, 48, new int[] { 19183, 19184 }, new Item[] { new Item(10090, 60), new Item(9978), new Item(526) }),
+ new TrapNode(new int[] { 5076 }, 9, 61, new int[] { 19185, 19186 }, new Item[] { new Item(10091, 60), new Item(9978), new Item(526) }),
+ new TrapNode(new int[] { 5074 }, 11, 64.7, new int[] { 19181, 19182 }, new Item[] { new Item(10089, 60), new Item(9978), new Item(526) }),
+ new TrapNode(new int[] { 5072 }, 19, 95.2, new int[] { 19177, 19178 }, new Item[] { new Item(10087, 60), new Item(9978), new Item(526) }),
+ new TrapNode(new int[] { 7031 }, 39, 167, new int[] { 28931, 28930 }, new Item[] { new Item(11525, 60), new Item(9978), new Item(526) }) {
@Override
public boolean canCatch(TrapWrapper wrapper, final NPC npc) {
return false;
diff --git a/Server/src/main/content/global/skill/magic/MagicAltarListener.kt b/Server/src/main/content/global/skill/magic/MagicAltarListener.kt
index 554dcab4f..eb4e61fc5 100644
--- a/Server/src/main/content/global/skill/magic/MagicAltarListener.kt
+++ b/Server/src/main/content/global/skill/magic/MagicAltarListener.kt
@@ -9,6 +9,7 @@ import core.game.node.entity.player.link.SpellBookManager.SpellBook
import core.game.node.entity.skill.Skills
import org.rs09.consts.Scenery
import org.rs09.consts.Sounds
+import content.data.Quests
class MagicAltarListener : InteractionListener {
override fun defineListeners() {
@@ -24,7 +25,7 @@ class MagicAltarListener : InteractionListener {
private fun meetsRequirements(player: Player, altar: Node): Boolean {
val level = if (altar.id == ANCIENT_ALTAR) 50 else 65
- if (!hasRequirement(player, if (altar.id == ANCIENT_ALTAR) "Desert Treasure" else "Lunar Diplomacy")) {
+ if (!hasRequirement(player, if (altar.id == ANCIENT_ALTAR) Quests.DESERT_TREASURE else Quests.LUNAR_DIPLOMACY)) {
return false
}
diff --git a/Server/src/main/content/global/skill/magic/SpellListener.kt b/Server/src/main/content/global/skill/magic/SpellListener.kt
index 64383b0a7..c9ba1b177 100644
--- a/Server/src/main/content/global/skill/magic/SpellListener.kt
+++ b/Server/src/main/content/global/skill/magic/SpellListener.kt
@@ -62,7 +62,12 @@ abstract class SpellListener(val bookName: String) : Listener {
}
fun removeRunes(player: Player,removeAttr: Boolean = true){
+ /* Snowscape modification: remove runes from the inventory or rune satchel
player.inventory.remove(*player.getAttribute("spell:runes",ArrayList
- ()).toTypedArray())
+ */
+ player.getAttribute("spell:runes",ArrayList
- ()).toTypedArray().forEach { rune ->
+ if (!player.inventory.remove(rune)) player.runeSatchel.remove(rune)
+ }
if(removeAttr) {
player.removeAttribute("spell:runes")
player.removeAttribute("tablet-spell")
diff --git a/Server/src/main/content/global/skill/magic/SpellUtils.kt b/Server/src/main/content/global/skill/magic/SpellUtils.kt
index a80d646a5..2f44a37e0 100644
--- a/Server/src/main/content/global/skill/magic/SpellUtils.kt
+++ b/Server/src/main/content/global/skill/magic/SpellUtils.kt
@@ -6,6 +6,7 @@ import core.game.node.entity.combat.spell.CombinationRune
import core.game.node.entity.combat.spell.MagicStaff
import core.game.node.entity.combat.spell.Runes
import core.game.node.item.Item
+import core.api.*
object SpellUtils {
fun usingStaff(p: Player, rune: Int): Boolean {
@@ -20,15 +21,54 @@ object SpellUtils {
return false
}
+ // Snowscape modifications: replaced entire "hasrune" function to only check the inventory once per rune, so the rune satchel has less overhead.
+ fun hasRune(p:Player,rune:Item):Boolean{
+ if(usingStaff(p,rune.id)) return true
+ val removeItems = p.getAttribute("spell:runes",ArrayList
- ())
+
+ val baseAmt = kotlin.math.max(p.inventory.getAmount(rune.id),(if (inEquipmentOrInventory(p, 10882)) p.runeSatchel.getAmount(rune.id) else 0))
+
+ if(baseAmt >= 0){
+ removeItems.add(Item(rune.getId(),kotlin.math.min(baseAmt,rune.getAmount())))
+ p.setAttribute("spell:runes",removeItems)
+ }
+
+ var amtRemaining = rune.amount - baseAmt
+ val possibleComboRunes = CombinationRune.eligibleFor(Runes.forId(rune.id))
+ for (r in possibleComboRunes) {
+ // Check if this combination rune was already added for a different element
+ for (alreadyListed in removeItems){
+ if (alreadyListed.getId() == r.id){
+ amtRemaining -= alreadyListed.getAmount()
+ }
+ }
+
+ val amt = kotlin.math.max(p.inventory.getAmount(r.id),(if (inEquipmentOrInventory(p, 10882)) p.runeSatchel.getAmount(r.id) else 0))
+ if (amt > 0 && amtRemaining > 0) {
+
+ if (amtRemaining <= amt) {
+ removeItems.add(Item(r.id,amtRemaining))
+ amtRemaining = 0
+ break
+ }
+ removeItems.add(Item(r.id,amt))
+ amtRemaining -= amt
+ }
+ }
+ p.setAttribute("spell:runes",removeItems)
+ return amtRemaining <= 0
+ }
+
+/* Snowscape: Original function left here for easier merging of updates.
fun hasRune(p:Player,rune:Item):Boolean{
val removeItems = p.getAttribute("spell:runes",ArrayList
- ())
if(usingStaff(p,rune.id)) return true
- if(p.inventory.containsItem(rune)){
+ if(p.inventory.containsItem(rune) || (inEquipmentOrInventory(p, 10882) && p.runeSatchel.containsItem(rune))){
removeItems.add(rune)
p.setAttribute("spell:runes",removeItems)
}
- val baseAmt = p.inventory.getAmount(rune.id)
+ val baseAmt = p.inventory.getAmount(rune.id) + (if (inEquipmentOrInventory(p, 10882)) p.runeSatchel.getAmount(rune.id) else 0)
var amtRemaining = rune.amount - baseAmt
val possibleComboRunes = CombinationRune.eligibleFor(Runes.forId(rune.id))
for (r in possibleComboRunes) {
@@ -49,9 +89,9 @@ object SpellUtils {
fun hasRune(p: Player, item: Item, toRemove: MutableList
- , message: Boolean): Boolean {
if (!usingStaff(p, item.id)) {
- val hasBaseRune = p.inventory.contains(item.id, item.amount)
+ val hasBaseRune = p.inventory.contains(item.id, item.amount) || (inEquipmentOrInventory(p, 10882) && p.runeSatchel.contains(item.id, item.amount))
if (!hasBaseRune) {
- val baseAmt = p.inventory.getAmount(item.id)
+ val baseAmt = p.inventory.getAmount(item.id) + (if (inEquipmentOrInventory(p, 10882)) p.runeSatchel.getAmount(item.id) else 0)
if (baseAmt > 0) {
toRemove.add(Item(item.id, p.inventory.getAmount(item.id)))
}
@@ -81,7 +121,7 @@ object SpellUtils {
}
return true
}
-
+*/
fun attackableNPC(npc: NPC): Boolean{
return npc.definition.hasAction("attack")
}
diff --git a/Server/src/main/content/global/skill/magic/ancient/AncientTeleportPlugin.java b/Server/src/main/content/global/skill/magic/ancient/AncientTeleportPlugin.java
index 3944c3c7e..ec6c8999c 100644
--- a/Server/src/main/content/global/skill/magic/ancient/AncientTeleportPlugin.java
+++ b/Server/src/main/content/global/skill/magic/ancient/AncientTeleportPlugin.java
@@ -51,10 +51,12 @@ public final class AncientTeleportPlugin extends MagicSpell {
@Override
public boolean cast(Entity entity, Node target) {
+ /* Snowscape Custom to allow teleporting in wilderness. The teleport limitations are still checked later by the send() function, so this is not
if (entity.isTeleBlocked() || !super.meetsRequirements(entity, true, false)) {
entity.asPlayer().sendMessage("A magical force has stopped you from teleporting.");
return false;
}
+ */
if (entity.getTeleporter().send(location.transform(0, RandomFunction.random(3), 0), getSpellId() == 28 ? TeleportType.HOME : TeleportType.ANCIENT)) {
if (!super.meetsRequirements(entity, true, true)) {
entity.getTeleporter().getCurrentTeleport().stop();
diff --git a/Server/src/main/content/global/skill/magic/lunar/DreamSpell.java b/Server/src/main/content/global/skill/magic/lunar/DreamSpell.java
deleted file mode 100644
index e35542f0a..000000000
--- a/Server/src/main/content/global/skill/magic/lunar/DreamSpell.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package content.global.skill.magic.lunar;
-
-import core.game.node.entity.combat.spell.MagicSpell;
-import core.game.node.entity.combat.spell.Runes;
-import core.game.node.entity.skill.Skills;
-import core.game.node.Node;
-import core.game.node.entity.Entity;
-import core.game.node.entity.combat.spell.SpellType;
-import core.game.node.entity.player.Player;
-import core.game.node.entity.player.link.SpellBookManager.SpellBook;
-import core.game.node.item.Item;
-import core.game.system.task.Pulse;
-import core.game.world.GameWorld;
-import core.game.world.update.flag.context.Animation;
-import core.game.world.update.flag.context.Graphics;
-import core.plugin.Initializable;
-import core.plugin.Plugin;
-
-/**
- * Represents the dream magic spell.
- * @author 'Vexia
- * @version 1.0
- */
-@Initializable
-public final class DreamSpell extends MagicSpell {
-
- /**
- * Represents the starting animation.
- */
- private static final Animation START = Animation.create(6295);
-
- /**
- * Represents the dreaming animation.
- */
- private static final Animation DREAMING = Animation.create(6296);
-
- /**
- * Represents the end animation.
- */
- private static final Animation END = Animation.create(6297);
-
- /**
- * Represents the graphics of this spell.
- */
- private static final Graphics GRAPHIC = new Graphics(1056);
-
- /**
- * Constructs a new {@code CureOtherSpell} {@code Object}.
- */
- public DreamSpell() {
- super(SpellBook.LUNAR, 79, 82, null, null, null, new Item[] { new Item(Runes.COSMIC_RUNE.getId(), 1), new Item(Runes.ASTRAL_RUNE.getId(), 2), new Item(Runes.BODY_RUNE.getId(), 5) });
- }
-
- @Override
- public Plugin
newInstance(SpellType arg) throws Throwable {
- SpellBook.LUNAR.register(10, this);
- return this;
- }
-
- @Override
- public boolean cast(Entity entity, Node target) {
- final Player p = (Player) entity;
- if (p.getSkills().getLifepoints() == p.getSkills().getStaticLevel(Skills.HITPOINTS)) {
- p.getPacketDispatch().sendMessage("You have no need to cast this spell since your hitpoints are already full.");
- return false;
- }
- if (!meetsRequirements(entity, true, true)) {
- return false;
- }
- p.animate(START);
- p.lock();
- GameWorld.getPulser().submit(new Pulse(4, p) {
- @Override
- public boolean pulse() {
- p.animate(DREAMING);
- p.graphics(GRAPHIC);
- p.unlock();
- return true;
- }
-
- });
- p.getPulseManager().run(new Pulse(18, p) {
- @Override
- public boolean pulse() {
- p.graphics(GRAPHIC);
- p.getSkills().heal(1);
- if (p.getSkills().getLifepoints() == p.getSkills().getStaticLevel(Skills.HITPOINTS)) {
- stop();
- return true;
- }
- return false;
- }
-
- @Override
- public void stop() {
- super.stop();
- p.graphics(new Graphics(-1));
- p.animate(END);
- }
- });
- return true;
- }
-
-}
diff --git a/Server/src/main/content/global/skill/magic/lunar/LunarListeners.kt b/Server/src/main/content/global/skill/magic/lunar/LunarListeners.kt
index 6ed1cfebc..d88710205 100644
--- a/Server/src/main/content/global/skill/magic/lunar/LunarListeners.kt
+++ b/Server/src/main/content/global/skill/magic/lunar/LunarListeners.kt
@@ -9,6 +9,7 @@ import content.global.skill.magic.spellconsts.Lunar
import core.api.*
import core.game.component.CloseEvent
import core.game.component.Component
+import core.game.interaction.QueueStrength
import core.game.node.Node
import core.game.node.entity.combat.ImpactHandler
import core.game.node.entity.npc.NPC
@@ -92,7 +93,8 @@ class LunarListeners : SpellListener("lunar"), Commands {
onCast(Lunar.OURANIA_TELEPORT, NONE) { player, _ ->
requires(player, 71, arrayOf(Item(Items.ASTRAL_RUNE_9075, 2), Item(Items.LAW_RUNE_563, 1), Item(Items.EARTH_RUNE_557, 6)))
if (!player.isTeleBlocked) playGlobalAudio(player.location, Sounds.TELEPORT_ALL_200)
- sendTeleport(player, 69.0, Location.create(2469, 3247, 0))
+ //sendTeleport(player, 69.0, Location.create(2469, 3247, 0))
+ sendTeleport(player, 69.0, Location.create(3314, 4818, 0))
}
// Level 71
@@ -169,9 +171,10 @@ class LunarListeners : SpellListener("lunar"), Commands {
}
// Level 79
- /**
- * Dream
- */
+ onCast(Lunar.DREAM, NONE) { player, _ ->
+ requires(player, 79, arrayOf(Item(Items.ASTRAL_RUNE_9075, 2), Item(Items.BODY_RUNE_559, 5), Item(Items.COSMIC_RUNE_564, 1)))
+ dream(player)
+ }
// Level 80
onCast(Lunar.STRING_JEWELLERY, NONE) { player, _ ->
@@ -320,30 +323,38 @@ class LunarListeners : SpellListener("lunar"), Commands {
}
// Level 66
- fun curePlant(player: Player, obj: Scenery){
+ fun curePlant(player: Player, obj: Scenery) {
+ if (CompostBins.forObject(obj) != null) {
+ sendMessage(player, "Bins don't often get diseased.")
+ return
+ }
val fPatch = FarmingPatch.forObject(obj)
- if(fPatch == null){
- sendMessage(player, "You attempt to cast Cure Plant on ${obj.definition.name}!")
- sendMessage(player, "Nothing interesting happens.")
+ if (fPatch == null) {
+ sendMessage(player, "Umm... this spell won't cure that!")
return
}
val patch = fPatch.getPatchFor(player)
- if(!patch.isDiseased && !patch.isWeedy() && !patch.isEmptyAndWeeded()){
- sendMessage(player, "It is growing just fine.")
- return
- }
- if(patch.isWeedy()){
+ if (patch.isWeedy()) {
sendMessage(player, "The weeds are healthy enough already.")
return
}
- if(patch.isDead){
- sendMessage(player, "It says 'Cure' not 'Resurrect'. Although death may arise from disease, it is not in itself a disease and hence cannot be cured. So there.")
+ if (patch.isEmptyAndWeeded()) {
+ sendMessage(player, "There's nothing there to cure.")
return
}
- if(patch.isGrown()){
+ if (patch.isGrown()) {
sendMessage(player, "That's not diseased.")
return
}
+ if (patch.isDead) {
+ sendMessage(player, "It says 'Cure' not 'Resurrect'. Although death may arise from disease, it is not in itself a disease and hence cannot be cured. So there.")
+ return
+ }
+ if (!patch.isDiseased) {
+ sendMessage(player, "It is growing just fine.")
+ return
+ }
+
patch.cureDisease()
removeRunes(player)
addXP(player,60.0)
@@ -364,16 +375,26 @@ class LunarListeners : SpellListener("lunar"), Commands {
setDelay(player, false)
openSingleTab(player, Components.DREAM_MONSTER_STAT_522)
- setInterfaceText(player, "Monster name : ${npc.definition.name}", Components.DREAM_MONSTER_STAT_522, 0)
- setInterfaceText(player, "Combat Level : ${npc.definition.combatLevel}", Components.DREAM_MONSTER_STAT_522, 1)
- setInterfaceText(player, "Hitpoints : ${npc.definition.handlers[NPCConfigParser.LIFEPOINTS] ?: 0}", Components.DREAM_MONSTER_STAT_522, 2)
- setInterfaceText(player, "Max hit : ${npc.getSwingHandler(false).calculateHit(npc, player, 1.0)}", Components.DREAM_MONSTER_STAT_522, 3)
+ var bonuses = npc.properties.bonuses
+ setInterfaceText(player, "Monster name: ${npc.definition.name} (${npc.definition.combatLevel})", Components.DREAM_MONSTER_STAT_522, 0)
+ setInterfaceText(player, """
+Att:${npc.definition.handlers[NPCConfigParser.ATTACK_LEVEL] ?: 0}
+Str:${npc.definition.handlers[NPCConfigParser.STRENGTH_LEVEL] ?: 0}
+Ranged:${npc.definition.handlers[NPCConfigParser.RANGE_LEVEL] ?: 0}
+Magic:${npc.definition.handlers[NPCConfigParser.MAGIC_LEVEL] ?: 0}""", Components.DREAM_MONSTER_STAT_522, 1)
+ setInterfaceText(player, """
+Defence:${npc.definition.handlers[NPCConfigParser.DEFENCE_LEVEL] ?: 0}
+HP:${npc.definition.handlers[NPCConfigParser.LIFEPOINTS] ?: 0}
+Max-hit:${npc.getSwingHandler(false).calculateHit(npc, player, 1.0)}""", Components.DREAM_MONSTER_STAT_522, 2)
+ setInterfaceText(player, "${bonuses[0]},${bonuses[1]},${bonuses[2]},${bonuses[3]},${bonuses[4]}, ${bonuses[5]},${bonuses[6]},${bonuses[7]},${bonuses[8]},${bonuses[9]}", Components.DREAM_MONSTER_STAT_522, 3)
val poisonStatus = if(npc.definition.handlers.getOrDefault(NPCConfigParser.POISON_IMMUNE,false) == true){
- "This creature is immune to poison."
- } else "This creature is not immune to poison."
-
- setInterfaceText(player, poisonStatus, Components.DREAM_MONSTER_STAT_522, 4)
+ "Immune to poison. "
+ } else ""
+ val poisonStatus2 = if(npc.definition.handlers.getOrDefault(NPCConfigParser.POISONOUS,false) == true){
+ "Poisonous."
+ } else ""
+ setInterfaceText(player, poisonStatus + poisonStatus2, Components.DREAM_MONSTER_STAT_522, 4)
}
// Level 67
@@ -568,9 +589,38 @@ class LunarListeners : SpellListener("lunar"), Commands {
}
// Level 79
- /**
- * Dream
- */
+ private fun dream(player: Player) {
+ if(player.skills.lifepoints >= getStatLevel(player, Skills.HITPOINTS)) {
+ sendMessage(player, "You have no need to cast this spell since your hitpoints are already full.")
+ return
+ }
+
+ animate(player, Animations.LUNAR_SPELLBOOK_DREAM_START_6295)
+ delayEntity(player, 4)
+ queueScript(player, 4, QueueStrength.WEAK) { stage: Int ->
+ when(stage) {
+ 0 -> {
+ animate(player, Animations.LUNAR_SPELLBOOK_DREAM_MID_6296)
+ sendGraphics(Graphics.LUNAR_SPELLBOOK_DREAM_1056, player.location)
+ playAudio(player, Sounds.LUNAR_SLEEP_3619)
+ return@queueScript delayScript(player, 5)
+ }
+ else -> {
+ sendGraphics(Graphics.LUNAR_SPELLBOOK_DREAM_1056, player.location)
+ // This heals 2 HP every min. Naturally you heal 1 for a total of 3
+ // The script steps every 5 ticks and we want 50 ticks before a heal
+ if (stage.mod(10) == 0){
+ heal(player, 1)
+ if(player.skills.lifepoints >= getStatLevel(player, Skills.HITPOINTS)) {
+ animate(player, Animations.LUNAR_SPELLBOOK_DREAM_END_6297)
+ return@queueScript stopExecuting(player)
+ }
+ }
+ return@queueScript delayScript(player, 5)
+ }
+ }
+ }
+ }
private fun stringJewellery(player: Player) {
val playerJewellery = ArrayDeque- ()
@@ -659,6 +709,24 @@ class LunarListeners : SpellListener("lunar"), Commands {
sendMessage(player, "You need to use this spell on logs.")
return
}
+ player.pulseManager.run(object : Pulse() {
+ var counter = 0
+ override fun pulse(): Boolean {
+ removeAttribute(player, "spell:runes")
+ if (amountInInventory(player, item.id) == 0 )
+ return true
+ requires(player, 86, arrayOf(Item(Items.ASTRAL_RUNE_9075, 2), Item(Items.NATURE_RUNE_561, 1), Item(Items.EARTH_RUNE_557, 15)))
+ if(removeItem(player, item.id) && addItem(player, plankType.plank.id)) {
+ removeRunes(player, false)
+ if (counter % 6 == 0)
+ visualizeSpell(player, Animations.LUNAR_SPELLBOOK_PLANK_MAKE_6298, Graphics.LUNAR_SPELLBOOK_PLANK_MAKE_1063, 120, Sounds.LUNAR_MAKE_PLANK_3617)
+ addXP(player, 90.0)
+ }
+ counter++
+ return false
+ }
+ })
+ /* Vanilla Spell
if (amountInInventory(player, Items.COINS_995) < plankType.price || !removeItem(player, Item(Items.COINS_995, plankType.price))) {
sendMessage(player, "You need ${plankType.price} coins to convert that log into a plank.")
return
@@ -670,6 +738,7 @@ class LunarListeners : SpellListener("lunar"), Commands {
replaceSlot(player, item.slot, plankType.plank)
addXP(player, 90.0)
showMagicTab(player)
+ */
}
// Level 91
diff --git a/Server/src/main/content/global/skill/magic/modern/CrumbleUndead.java b/Server/src/main/content/global/skill/magic/modern/CrumbleUndead.java
index ec23e258f..0c9f896b1 100644
--- a/Server/src/main/content/global/skill/magic/modern/CrumbleUndead.java
+++ b/Server/src/main/content/global/skill/magic/modern/CrumbleUndead.java
@@ -17,6 +17,8 @@ import core.plugin.Initializable;
import core.plugin.Plugin;
import org.rs09.consts.Sounds;
+import static core.api.SnowscapeAPIKt.*;
+
/**
* Handles the crumble undead spell.
* @author Emperor
@@ -35,7 +37,7 @@ public final class CrumbleUndead extends CombatSpell {
@Override
public boolean cast(Entity entity, Node target) {
NPC npc = target instanceof NPC ? (NPC) target : null;
- if (npc == null || npc.getTask() == null || !npc.getTask().undead) {
+ if (npc == null || !isUndead(npc)) {
((Player) entity).getPacketDispatch().sendMessage("This spell only affects the undead.");
return false;
}
diff --git a/Server/src/main/content/global/skill/magic/modern/ModernData.kt b/Server/src/main/content/global/skill/magic/modern/ModernData.kt
index 793a757b5..4740bd02d 100644
--- a/Server/src/main/content/global/skill/magic/modern/ModernData.kt
+++ b/Server/src/main/content/global/skill/magic/modern/ModernData.kt
@@ -50,6 +50,15 @@ enum class ChargeOrbData(
Graphics(150, 90),
Sounds.CHARGE_AIR_ORB_116,
Items.AIR_ORB_573
+ ),
+ CHARGE_TELE_ORB(
+ 7171,
+ arrayOf(Item(Items.COSMIC_RUNE_564, 3), Item(Items.AIR_RUNE_556, 30), Item(Items.UNPOWERED_ORB_567)),
+ 66,
+ 76.0,
+ Graphics(150, 90),
+ Sounds.CHARGE_AIR_ORB_116,
+ 14534
);
companion object{
val spellMap = HashMap
()
diff --git a/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt b/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt
index 230fd75b1..8c0eb276f 100644
--- a/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt
+++ b/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt
@@ -1,5 +1,6 @@
package content.global.skill.magic.modern
+import content.data.Quests
import content.global.skill.magic.SpellListener
import content.global.skill.magic.SpellUtils.hasRune
import content.global.skill.magic.TeleportMethod
@@ -22,6 +23,7 @@ import core.game.node.entity.player.Player
import core.game.node.entity.player.link.TeleportManager
import core.game.node.entity.player.link.diary.DiaryType
import core.game.node.entity.skill.Skills
+import content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners
import core.game.node.item.Item
import core.game.world.map.Location
import core.game.world.update.flag.context.Animation
@@ -30,6 +32,9 @@ import org.rs09.consts.Items
import org.rs09.consts.Scenery
import org.rs09.consts.Sounds
+import core.game.system.task.Pulse
+import core.game.world.repository.Repository
+
class ModernListeners : SpellListener("modern"){
override fun defineListeners() {
onCast(Modern.HOME_TELEPORT, NONE){ player, _ ->
@@ -65,28 +70,33 @@ class ModernListeners : SpellListener("modern"){
}
onCast(Modern.ARDOUGNE_TELEPORT, NONE){ player, _ ->
- if (!hasRequirement(player, "Plague City"))
- return@onCast
- requires(player,51, arrayOf(Item(Items.WATER_RUNE_555,2),Item(Items.LAW_RUNE_563,2)))
- sendTeleport(player,61.0, Location.create(2662, 3307, 0))
+ if (getAttribute(player, PlagueCityListeners.ARDOUGNE_TELE_ATTRIBUTE, false)){
+ requires(player,51, arrayOf(Item(Items.WATER_RUNE_555,2),Item(Items.LAW_RUNE_563,2)))
+ sendTeleport(player,61.0, Location.create(2662, 3307, 0))
+ }
+ else {
+ // source https://runescape.salmoneus.net/forums/topic/289818-ardougne-teleport-help/
+ sendDialogue(player, "You haven\'t learnt how to cast this spell yet")
+ }
+ return@onCast
}
onCast(Modern.WATCHTOWER_TELEPORT, NONE){ player, _ ->
- if (!hasRequirement(player, "Watchtower"))
+ if (!hasRequirement(player, Quests.WATCHTOWER))
return@onCast
requires(player,58, arrayOf(Item(Items.EARTH_RUNE_557,2),Item(Items.LAW_RUNE_563,2)))
sendTeleport(player,68.0, Location.create(2549, 3112, 0))
}
onCast(Modern.TROLLHEIM_TELEPORT, NONE){ player, _ ->
- if (!hasRequirement(player, "Eadgar's Ruse"))
+ if (!hasRequirement(player, Quests.EADGARS_RUSE))
return@onCast
requires(player,61, arrayOf(Item(Items.FIRE_RUNE_554,2),Item(Items.LAW_RUNE_563,2)))
sendTeleport(player,68.0, Location.create(2891, 3678, 0))
}
onCast(Modern.APE_ATOLL_TELEPORT, NONE){ player, _ ->
- if (!hasRequirement(player, "Monkey Madness"))
+ if (!hasRequirement(player, Quests.MONKEY_MADNESS))
return@onCast
requires(player,64, arrayOf(Item(Items.FIRE_RUNE_554,2),Item(Items.WATER_RUNE_555,2),Item(Items.LAW_RUNE_563,2),Item(Items.BANANA_1963)))
sendTeleport(player,74.0, Location.create(2754, 2784, 0))
@@ -129,6 +139,7 @@ class ModernListeners : SpellListener("modern"){
onCast(Modern.CHARGE_EARTH_ORB, OBJECT, Scenery.OBELISK_OF_EARTH_29415, 3, method = ::chargeOrb)
onCast(Modern.CHARGE_FIRE_ORB, OBJECT, Scenery.OBELISK_OF_FIRE_2153, 3, method = ::chargeOrb)
onCast(Modern.CHARGE_AIR_ORB, OBJECT, Scenery.OBELISK_OF_AIR_2152, 3, method = ::chargeOrb)
+ onCast(Modern.CHARGE_AIR_ORB, OBJECT, 7171, 3, method = ::chargeOrb)
}
private fun boneConvert(player: Player,bananas: Boolean){
@@ -183,21 +194,27 @@ class ModernListeners : SpellListener("modern"){
return
}
- var bar = Bar.forOre(item.id) ?: return
- if(bar == Bar.IRON && player.inventory.getAmount(Items.COAL_453) >= 2 && player.skills.getLevel(Skills.SMITHING) >= Bar.STEEL.level && player.inventory.contains(Items.IRON_ORE_441,1)) bar = Bar.STEEL
+ fun returnBar(player: Player,item: Item): Bar? {
+ // Loop through all metal bars starting with the highest tier
+ for (potentialBar in Bar.values().reversed()) {
+ // Check if the ore being cast on is needed for the current bar being considered
+ val inputOreInBar = potentialBar.ores.map{it.id}.contains(item.id)
+ // Check the player has all the required ores (and corresponding quantities) to make the current bar being considered
+ val playerHasNecessaryOres = potentialBar.ores.all{ore -> inInventory(player, ore.id, ore.amount)}
+ // If both tests pass return the current bar being considered as the one the spell should try to make
+ if (inputOreInBar && playerHasNecessaryOres) return potentialBar
+ }
+ // If none of the bars passed both tests the player must be missing a required ore
+ player.packetDispatch.sendMessage("You do not have the required ores to make this bar.")
+ return null
+ }
+ var bar = returnBar(player,item)?: return
if(player.skills.getLevel(Skills.SMITHING) < bar.level){
player.sendMessage("You need a smithing level of ${bar.level} to superheat that ore.")
return
}
- for (items in bar.ores) {
- if (!player.inventory.contains(items.id, items.amount)) {
- player.packetDispatch.sendMessage("You do not have the required ores to make this bar.")
- return
- }
- }
-
player.lock(3)
removeRunes(player)
addXP(player,53.0)
@@ -206,7 +223,8 @@ class ModernListeners : SpellListener("modern"){
player.pulseManager.run(SmeltingPulse(player, item, bar, 1, true))
setDelay(player,false)
}
-
+
+ // Snowscape: Alchemy spells have been modified. Spells now repeat, and low alchemy converts up to 100 items at a time for bulk pricing.
fun alchemize(player: Player, item: Item, high: Boolean, explorersRing: Boolean = false): Boolean {
if(item.name == "Coins") player.sendMessage("You can't alchemize something that's already gold!").also { return false }
if((!item.definition.isTradeable) && (!item.definition.isAlchemizable)) player.sendMessage("You can't cast this spell on something like that.").also { return false }
@@ -222,29 +240,72 @@ class ModernListeners : SpellListener("modern"){
return false
}
+ var loop = true
+
+ val ringOfWealth = intArrayOf(14646,14644,14642,14640,14638)
+ if(high && ringOfWealth.contains(item.id)){
+ if (getAttribute(player, "ringofwealth:unlocked", false)) {
+ player.sendMessage("You have already unlocked the permanent Wealth effect and can no longer ")
+ player.sendMessage("high alchemize this ring.")
+ return false
+ } else {
+ player.setAttribute("/save:ringofwealth:unlocked", true)
+ player.sendMessage("Combining the Alchemy spell with the Wealth enchantment causes a strange ")
+ player.sendMessage("interaction. You are now permanently enchanted with the Wealth effect and ")
+ player.sendMessage("no longer need to wear the ring to get the benefit of increased rare drops.")
+ loop = false
+ }
+ }
+
if (player.pulseManager.current !is MovementPulse) {
player.pulseManager.clear()
}
- if (explorersRing) {
- visualize(player, LOW_ALCH_ANIM, EXPLORERS_RING_GFX)
- } else {
- val weapon = getItemFromEquipment(player, EquipmentSlot.WEAPON)
- if (weapon != null && weapon.id in MagicStaff.FIRE_RUNE.staves) {
- visualize(player, if (high) HIGH_ALCH_STAFF_ANIM else LOW_ALCH_STAFF_ANIM, if (high) HIGH_ALCH_STAFF_GFX else LOW_ALCH_STAFF_GFX)
- } else {
- visualize(player, if (high) HIGH_ALCH_ANIM else LOW_ALCH_ANIM, if (high) HIGH_ALCH_GFX else LOW_ALCH_GFX)
+ player.setAttribute("alchemyspelltime", getWorldTicks() + 100)
+
+ player.pulseManager.run(object : Pulse(){
+ var counter = 0
+ override fun pulse(): Boolean {
+ if (amountInInventory(player, item.id) == 0 || getAttribute(player, "alchemyspelltime", 0) <= getWorldTicks())
+ return true
+
+ if (counter % (if (high) 5 else 2) == 0) {
+ if (explorersRing) {
+ visualize(player, LOW_ALCH_ANIM, EXPLORERS_RING_GFX)
+ } else {
+ val weapon = getItemFromEquipment(player, EquipmentSlot.WEAPON)
+ if (weapon != null && weapon.id in MagicStaff.FIRE_RUNE.staves) {
+ visualize(player, if (high) HIGH_ALCH_STAFF_ANIM else LOW_ALCH_STAFF_ANIM, if (high) HIGH_ALCH_STAFF_GFX else LOW_ALCH_STAFF_GFX)
+ } else {
+ visualize(player, if (high) HIGH_ALCH_ANIM else LOW_ALCH_ANIM, if (high) HIGH_ALCH_GFX else LOW_ALCH_GFX)
+ }
+ }
+ playAudio(player, if (high) Sounds.HIGH_ALCHEMY_97 else Sounds.LOW_ALCHEMY_98)
+ player.dispatch(ItemAlchemizationEvent(item.id, high))
+ if (!explorersRing) {
+ removeAttribute(player, "spell:runes")
+ if (high)
+ requires(player,55, arrayOf(Item(Items.FIRE_RUNE_554,5),Item(Items.NATURE_RUNE_561,1)))
+ else
+ requires(player,21, arrayOf(Item(Items.FIRE_RUNE_554,3),Item(Items.NATURE_RUNE_561)))
+ removeRunes(player, false)
+ addXP(player, if (high) 65.0 else 31.0)
+ }
+ val amount = if (high) 1 else kotlin.math.min(10, amountInInventory(player, item.id))
+ if (player.inventory.remove(Item(item.id, amount)) && coins.amount > 0) {
+ player.inventory.add(Item(coins.id, coins.amount * amount))
+ }
+ //showMagicTab(player)
+ //setDelay(player, 2)
+ }
+ if (loop && !explorersRing) {
+ counter++
+ return false
+ } else {
+ return true
+ }
}
- }
- playAudio(player, if (high) Sounds.HIGH_ALCHEMY_97 else Sounds.LOW_ALCHEMY_98)
- player.dispatch(ItemAlchemizationEvent(item.id, high))
- if (player.inventory.remove(Item(item.id, 1)) && coins.amount > 0) {
- player.inventory.add(coins)
- }
- removeRunes(player)
- addXP(player, if (high) 65.0 else 31.0)
- showMagicTab(player)
- setDelay(player, 5)
+ })
return true
}
@@ -272,17 +333,26 @@ class ModernListeners : SpellListener("modern"){
player.sendMessage("A magical force prevents you from teleporting.")
return
}
- val hasHouse = player.houseManager.location.exitLocation != null
- if(!hasHouse){
- player.sendMessage("You do not have a house you can teleport to.")
- return
+
+ //Snowscape: teleport to the last house you entered, if possible
+ var houseOwner: Player
+ val lastHouseOwner = Repository.getPlayerByName(player.getAttribute("lasthouseentered", null))
+ if (lastHouseOwner != null && !lastHouseOwner.getHouseManager().isLocked()) {
+ houseOwner = lastHouseOwner
+ } else {
+ val hasHouse = player.houseManager.location.exitLocation != null
+ if(!hasHouse){
+ player.sendMessage("You do not have a house you can teleport to.")
+ return
+ }
+ houseOwner = player
}
- player.houseManager.preEnter(player, false)
+ houseOwner.houseManager.preEnter(player, false)
val teleType = TeleportManager.TeleportType.NORMAL
- val loc = player.houseManager.getEnterLocation()
+ val loc = houseOwner.houseManager.getEnterLocation()
player.teleporter.send(loc, teleType)
- player.houseManager.postEnter(player, false) //this actually runs when the teleport is SUBMITTED rather than EXECUTED, but this is fine
+ houseOwner.houseManager.postEnter(player, false) //this actually runs when the teleport is SUBMITTED rather than EXECUTED, but this is fine
removeRunes(player)
addXP(player,30.0)
setDelay(player,true)
diff --git a/Server/src/main/content/global/skill/prayer/Bones.kt b/Server/src/main/content/global/skill/prayer/Bones.kt
index 755a8062b..0917df2cb 100644
--- a/Server/src/main/content/global/skill/prayer/Bones.kt
+++ b/Server/src/main/content/global/skill/prayer/Bones.kt
@@ -28,6 +28,7 @@ enum class Bones(
*/
val bonemealId: Int?,
) {
+ ASHES(Items.ASHES_592, 4.5, null), //Snowscape: added ashes so the bonecrusher feature gives prayer exp. Ashes cannot be bured normally.
BONES(Items.BONES_526, 4.5, Items.BONEMEAL_4255),
BONES_2(Items.BONES_2530, 4.5, Items.BONEMEAL_4255),
BONES_3(Items.BONES_3187, 4.5, Items.BONEMEAL_4255),
diff --git a/Server/src/main/content/global/skill/prayer/PrayerAltarListener.kt b/Server/src/main/content/global/skill/prayer/PrayerAltarListener.kt
index 8ca2c7467..71982f578 100644
--- a/Server/src/main/content/global/skill/prayer/PrayerAltarListener.kt
+++ b/Server/src/main/content/global/skill/prayer/PrayerAltarListener.kt
@@ -12,11 +12,12 @@ import core.game.node.entity.skill.Skills
import core.game.world.map.Location
import org.rs09.consts.Scenery
import org.rs09.consts.Sounds
+import content.data.Quests
class PrayerAltarListener : InteractionListener {
override fun defineListeners() {
on(altars, IntType.SCENERY, "pray", "pray-at") { player, node ->
- if (node.id == Scenery.TRIBAL_STATUE_3863 && !hasRequirement(player, "Tai Bwo Wannai Trio")) {
+ if (node.id == Scenery.TRIBAL_STATUE_3863 && !hasRequirement(player, Quests.TAI_BWO_WANNAI_TRIO)) {
// https://runescape.wiki/w/Tribal_Statue?oldid=1940922
return@on true
}
@@ -43,9 +44,9 @@ class PrayerAltarListener : InteractionListener {
}
on(Scenery.CHAOS_ALTAR_61, IntType.SCENERY, "check") { player, _ ->
- if (getQuestStage(player, "Merlin's Crystal") == 70) {
+ if (getQuestStage(player, Quests.MERLINS_CRYSTAL) == 70) {
sendDialogue(player, "You find a small inscription at the bottom of the altar. It reads: 'Snarthon Candtrick Termanto'.")
- setQuestStage(player, "Merlin's Crystal", 80)
+ setQuestStage(player, Quests.MERLINS_CRYSTAL, 80)
} else {
sendMessage(player, "An altar of the evil god Zamorak.")
}
diff --git a/Server/src/main/content/global/skill/runecrafting/Altar.java b/Server/src/main/content/global/skill/runecrafting/Altar.java
index 29cc03953..c31853789 100644
--- a/Server/src/main/content/global/skill/runecrafting/Altar.java
+++ b/Server/src/main/content/global/skill/runecrafting/Altar.java
@@ -5,6 +5,9 @@ import core.game.node.entity.player.Player;
import core.game.node.scenery.Scenery;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
+
+import core.game.world.map.Location;
/**
* Represents an altar an it's relative information(corresponding ruin, etc)
@@ -72,24 +75,32 @@ public enum Altar {
*/
public void enterRift(Player player) {
if (this == ASTRAL) {
- if (!hasRequirement(player, "Lunar Diplomacy"))
+ if (!hasRequirement(player, Quests.LUNAR_DIPLOMACY))
return;
}
if (this == DEATH) {
- if (!hasRequirement(player, "Mourning's End Part II"))
+ if (!hasRequirement(player, Quests.MOURNINGS_END_PART_II))
return;
}
if (this == BLOOD) {
- if (!hasRequirement(player, "Legacy of Seergaze"))
+ if (!hasRequirement(player, Quests.LEGACY_OF_SEERGAZE))
return;
+ }
+ if (this == SOUL) {
+ if (player.getQuestRepository().isComplete(Quests.DRAGON_SLAYER)) {
+ player.getProperties().setTeleportLocation(Location.create(2836, 3285, 0));
+ } else {
+ player.sendMessage("You need to have completed the Dragon Slayer quest in order to do that.");
+ return;
+ }
}
if (this == LAW) {
if (!ItemDefinition.canEnterEntrana(player)) {
- player.sendMessage("You can't take weapons and armour into the law rift.");
+ player.sendMessage("The power of Saradomin prevents you from taking armour or weaponry to Entrana.");
return;
}
}
- if (this == COSMIC && !player.getQuestRepository().isComplete("Lost City")) {
+ if (this == COSMIC && !player.getQuestRepository().isComplete(Quests.LOST_CITY)) {
player.getPacketDispatch().sendMessage("You need to have completed the Lost City quest in order to do that.");
return;
}
diff --git a/Server/src/main/content/global/skill/runecrafting/CombinationRune.java b/Server/src/main/content/global/skill/runecrafting/CombinationRune.java
index 62760bfdc..e23a78f8b 100644
--- a/Server/src/main/content/global/skill/runecrafting/CombinationRune.java
+++ b/Server/src/main/content/global/skill/runecrafting/CombinationRune.java
@@ -7,11 +7,11 @@ import core.game.node.item.Item;
* @author 'Vexia
*/
public enum CombinationRune {
- MIST(new Item(4695), 6, 8.0, new Altar[] { Altar.WATER, Altar.AIR }, Rune.AIR, Rune.WATER),
- DUST(new Item(4696), 10, 8.3, new Altar[] { Altar.EARTH, Altar.AIR }, Rune.AIR, Rune.EARTH),
- MUD(new Item(4698), 13, 9.3, new Altar[] { Altar.EARTH, Altar.WATER }, Rune.WATER, Rune.EARTH),
- SMOKE(new Item(4697), 15, 8.5, new Altar[] { Altar.FIRE, Altar.AIR }, Rune.AIR, Rune.FIRE),
- STEAM(new Item(4694), 19, 9.3, new Altar[] { Altar.WATER, Altar.FIRE }, Rune.WATER, Rune.FIRE),
+ MIST(new Item(4695), 6, 10.0, new Altar[] { Altar.WATER, Altar.AIR }, Rune.AIR, Rune.WATER),
+ DUST(new Item(4696), 10, 10.0, new Altar[] { Altar.EARTH, Altar.AIR }, Rune.AIR, Rune.EARTH),
+ MUD(new Item(4698), 13, 10.0, new Altar[] { Altar.EARTH, Altar.WATER }, Rune.WATER, Rune.EARTH),
+ SMOKE(new Item(4697), 15, 10.0, new Altar[] { Altar.FIRE, Altar.AIR }, Rune.AIR, Rune.FIRE),
+ STEAM(new Item(4694), 19, 10.0, new Altar[] { Altar.WATER, Altar.FIRE }, Rune.WATER, Rune.FIRE),
LAVA(new Item(4699), 23, 10.0, new Altar[] { Altar.FIRE, Altar.EARTH }, Rune.EARTH, Rune.FIRE);
/**
diff --git a/Server/src/main/content/global/skill/runecrafting/MysteriousRuinListener.kt b/Server/src/main/content/global/skill/runecrafting/MysteriousRuinListener.kt
index 68fcf10c7..7bf55dd7f 100644
--- a/Server/src/main/content/global/skill/runecrafting/MysteriousRuinListener.kt
+++ b/Server/src/main/content/global/skill/runecrafting/MysteriousRuinListener.kt
@@ -1,5 +1,6 @@
package content.global.skill.runecrafting
+import content.data.Quests
import content.region.misthalin.varrock.diary.VarrockAchivementDiary.Companion.EasyTasks.ENTER_EARTH_ALTAR
import core.api.*
import core.game.container.impl.EquipmentContainer.SLOT_HAT
@@ -19,7 +20,7 @@ class MysteriousRuinListener : InteractionListener {
private val animation = Animation(827)
private val allowedUsed = arrayOf(1438, 1448, 1444, 1440, 1442, 5516, 1446, 1454, 1452, 1462, 1458, 1456, 1450, 1460).toIntArray()
private val allowedWith = allRuins()
- private val nothingInteresting = "Nothing interesting happens"
+ private val nothingInteresting = "Nothing interesting happens."
override fun defineListeners() {
onUseWith(IntType.SCENERY, allowedUsed, *allowedWith) { player, used, with ->
@@ -76,9 +77,9 @@ class MysteriousRuinListener : InteractionListener {
private fun checkQuestCompletion(player: Player, ruin: MysteriousRuin): Boolean {
return when (ruin) {
- MysteriousRuin.DEATH -> hasRequirement(player, QuestReq(MEP_2), true)
- MysteriousRuin.BLOOD -> hasRequirement(player, QuestReq(SEERGAZE), true)
- else -> hasRequirement(player, QuestReq(RUNE_MYSTERIES), true)
+ MysteriousRuin.DEATH -> hasRequirement(player, Quests.MOURNINGS_END_PART_II, true)
+ MysteriousRuin.BLOOD -> hasRequirement(player, Quests.LEGACY_OF_SEERGAZE, true)
+ else -> hasRequirement(player, Quests.RUNE_MYSTERIES, true)
}
}
@@ -102,4 +103,4 @@ class MysteriousRuinListener : InteractionListener {
})
}
-}
\ No newline at end of file
+}
diff --git a/Server/src/main/content/global/skill/runecrafting/PouchManager.kt b/Server/src/main/content/global/skill/runecrafting/PouchManager.kt
index 52aba0d4b..6bb4020f0 100644
--- a/Server/src/main/content/global/skill/runecrafting/PouchManager.kt
+++ b/Server/src/main/content/global/skill/runecrafting/PouchManager.kt
@@ -1,5 +1,6 @@
package content.global.skill.runecrafting
+import core.api.*
import core.game.container.Container
import core.game.node.entity.player.Player
import core.game.node.entity.skill.Skills
@@ -7,109 +8,131 @@ import core.game.node.item.Item
import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.rs09.consts.Items
-import core.tools.colorize
/**
* A class for managing rune pouches.
* @param player the player this manager instance belongs to.
- * @author Ceikry
+ * @author Ceikry, Player Name
*/
class PouchManager(val player: Player) {
-
val pouches = mapOf(
- Items.SMALL_POUCH_5509 to RCPouch(3,1),
- Items.MEDIUM_POUCH_5510 to RCPouch(6,25),
- Items.LARGE_POUCH_5512 to RCPouch(9,50),
- Items.GIANT_POUCH_5514 to RCPouch(12,75)
+ Items.SMALL_POUCH_5509 to RCPouch(3, 3, 1),
+ Items.MEDIUM_POUCH_5510 to RCPouch(6, 264, 25),
+ Items.LARGE_POUCH_5512 to RCPouch(9, 186, 50),
+ Items.GIANT_POUCH_5514 to RCPouch(12,140, 75)
)
/**
* Method to add essence to a pouch
- * @param pouchId the id of the pouch we are adding to
+ * @param itemId the item ID of the pouch we are adding to
* @param amount the amount of essence to add
* @param essence the ID of the essence item we are trying to add
- * @author Ceikry
+ * @author Ceikry, Player Name
*/
- fun addToPouch(pouchId: Int, amount: Int, essence: Int){
- if(!checkRequirement(pouchId)){
- player.sendMessage(colorize("%RYou lack the required level to use this pouch."))
+ fun addToPouch(itemId: Int, amount: Int, essence: Int, fromBank: Boolean = false) {
+ val pouchId = if (isDecayedPouch(itemId)) itemId - 1 else itemId
+ if (!checkRequirement(pouchId)) {
+ sendMessage(player, "You lack the required level to use this pouch.")
return
}
var amt = amount
val pouch = pouches[pouchId]
- val otherEssence = when(essence){
+ val otherEssence = when(essence) {
Items.RUNE_ESSENCE_1436 -> Items.PURE_ESSENCE_7936
Items.PURE_ESSENCE_7936 -> Items.RUNE_ESSENCE_1436
else -> 0
}
pouch ?: return
- if(amount > pouch.container.freeSlots()){
+ if (amount > pouch.container.freeSlots()) {
amt = pouch.container.freeSlots()
}
- if(amt == 0){
- player.sendMessage("This pouch is already full.")
+ if (amt == pouch.container.freeSlots()) {
+ sendMessage(player, "Your pouch is full.") //https://www.youtube.com/watch?v=wbYtRwODKTo
}
- if(pouch.container.contains(otherEssence,1)){
- player.sendMessage("You can only store one type of essence in each pouch.")
+ if (pouch.container.contains(otherEssence,1)) {
+ sendMessage(player, "You can only store one type of essence in each pouch.")
return
}
- player.inventory.remove(Item(essence,amt))
- pouch.container.add(Item(essence,amt))
- }
+ var disappeared = false
+ if (itemId != Items.SMALL_POUCH_5509) {
+ pouch.charges -= amt
+ }
+ if (pouch.charges <= 0) {
+ pouch.currentCap -= when (pouchId) {
+ Items.MEDIUM_POUCH_5510 -> 1
+ Items.LARGE_POUCH_5512 -> 2
+ Items.GIANT_POUCH_5514 -> 3
+ else /*small pouch*/ -> 0
+ }
+ if (pouch.currentCap <= 0) {
+ // The pouch will disappear: https://runescape.wiki/w/Runecrafting_pouches?oldid=708494, https://oldschool.runescape.wiki/w/Essence_pouch
+ // "Degraded pouches will continue to degrade and lose essence capacity until they disappear or are repaired." implies that this is the end result of a gradual decay process
+ if (removeItem(player, itemId)) {
+ disappeared = true
+ sendMessage(player, "Your pouch has degraded completely.")
+ // Reset the pouch for when the player obtains a new one
+ pouch.currentCap = pouch.capacity
+ pouch.charges = pouch.maxCharges
+ pouch.remakeContainer()
+ replaceAllItems(player, itemId, itemId - 1) //in case the player had more copies
+ }
+ } else {
+ if (!isDecayedPouch(itemId)) {
+ replaceAllItems(player, itemId, itemId + 1)
+ }
+ sendMessage(player, "Your pouch has decayed through use.") //https://www.youtube.com/watch?v=FUcPYrgPUlQ
+ pouch.charges = 9 * pouch.currentCap //implied by multiple contemporaneous sources, quantified only by https://oldschool.runescape.wiki/w/Large_pouch
+ pouch.remakeContainer()
+ if (amt > pouch.currentCap) {
+ amt = pouch.currentCap
+ }
+ }
+ }
+ val essItem = Item(essence, amt)
+ if (!disappeared && (fromBank && player.getBank().remove(essItem)) || removeItem(player, essItem)) {
+ pouch.container.add(essItem)
+ }
+ }
/**
* Method to withdraw rune essence from a pouch.
- * @param pouchId the item ID of the pouch to withdraw from
- * @author Ceikry
+ * @param itemId the item ID of the pouch to withdraw from
+ * @author Ceikry, Player Name
*/
- fun withdrawFromPouch(pouchId: Int){
+ fun withdrawFromPouch(itemId: Int) {
+ val pouchId = if (isDecayedPouch(itemId)) itemId - 1 else itemId
val pouch = pouches[pouchId]
pouch ?: return
- val playerFree = player.inventory.freeSlots()
+ val playerFree = freeSlots(player)
var amount = pouch.currentCap - pouch.container.freeSlots()
- if (amount > playerFree) amount = playerFree
- player.debug("$amount")
- if(amount == 0) return
- val essence = Item(pouch.container.get(0).id,amount)
- pouch.container.remove(essence)
- pouch.container.shift()
- player.inventory.add(essence)
- if(pouch.charges-- <= 0){
- pouch.currentCap -= when(pouchId){
- 5510 -> 1
- 5512 -> 2
- 5514 -> 3
- else -> 0
- }
- if(pouch.currentCap <= 0){
- player.inventory.remove(Item(pouchId))
- player.inventory.add(Item(pouchId + 1))
- player.sendMessage(colorize("%RYour ${Item(pouchId).name} has degraded completely."))
- }
- pouch.remakeContainer()
- pouch.charges = 10
- if(pouchId != 5509) {
- player.sendMessage(colorize("%RYour ${Item(pouchId).name.toLowerCase()} has degraded slightly from use."))
+ if (amount > playerFree) {
+ amount = playerFree
+ } else {
+ sendMessage(player, "Your pouch has no essence left in it.") //https://www.youtube.com/watch?v=wbYtRwODKTo
+ if (amount == 0) {
+ return
}
}
-
+ val essence = Item(pouch.container.get(0).id, amount)
+ pouch.container.remove(essence)
+ pouch.container.shift()
+ addItem(player, essence.id, essence.amount)
}
-
/**
* Method to save pouches to a root JSONObject
* @param root the JSONObject we are adding the "pouches" JSONArray to
* @author Ceikry
*/
- fun save(root: JSONObject){
+ fun save(root: JSONObject) {
val pouches = JSONArray()
- for(i in this.pouches){
+ for(i in this.pouches) {
val pouch = JSONObject()
pouch.put("id",i.key.toString())
val items = JSONArray()
- for(item in i.value.container.toArray()){
+ for(item in i.value.container.toArray()) {
item ?: continue
val it = JSONObject()
it.put("itemId",item.id.toString())
@@ -124,14 +147,13 @@ class PouchManager(val player: Player) {
root.put("pouches",pouches)
}
-
/**
* Method to parse save data from a JSONArray
* @param data the JSONArray that contains the data to parse
* @author Ceikry
*/
- fun parse(data: JSONArray){
- for(e in data){
+ fun parse(data: JSONArray) {
+ for (e in data){
val pouch = e as JSONObject
val id = pouch["id"].toString().toInt()
val p = pouches[id]
@@ -141,7 +163,7 @@ class PouchManager(val player: Player) {
p.charges = charges
p.currentCap = currentCap
p.remakeContainer()
- for(i in pouch["container"] as JSONArray){
+ for (i in pouch["container"] as JSONArray) {
val it = i as JSONObject
it["itemId"] ?: continue
val item = it["itemId"].toString().toInt()
@@ -151,33 +173,31 @@ class PouchManager(val player: Player) {
}
}
-
/**
* Method for checking the level requirement for a given pouch.
* @param pouchId the item ID of the pouch to check
* @author Ceikry
*/
- fun checkRequirement(pouchId: Int): Boolean{
+ fun checkRequirement(pouchId: Int): Boolean {
val p = pouches[pouchId]
p ?: return false
return player.skills.getLevel(Skills.RUNECRAFTING) >= p.levelRequirement
}
-
/**
* Method for sending the player a message about how much space is left in a pouch
- * @param pouchId the item ID of the pouch to check
- * @author Ceikry
+ * @param itemId the item ID of the pouch to check
+ * @author Ceikry, Player Name
*/
- fun checkAmount(pouchId: Int){
+ fun checkAmount(itemId: Int) {
+ val pouchId = if (isDecayedPouch(itemId)) itemId - 1 else itemId
val p = pouches[pouchId]
p ?: return
player.sendMessage("This pouch has space for ${p.container.freeSlots()} more essence.")
}
-
- fun isDecayedPouch(pouchId: Int): Boolean{
- if(pouchId == 5510) return false
+ fun isDecayedPouch(pouchId: Int): Boolean {
+ if (pouchId == Items.MEDIUM_POUCH_5510) return false
return pouches[pouchId - 1] != null
}
@@ -185,12 +205,12 @@ class PouchManager(val player: Player) {
* A class that represents a runecrafting pouch.
* @author Ceikry
*/
- class RCPouch(val capacity: Int, val levelRequirement: Int){
+ class RCPouch(val capacity: Int, val maxCharges: Int, val levelRequirement: Int) {
var container = Container(capacity)
var currentCap = capacity
- var charges = 10
- fun remakeContainer(){
+ var charges = maxCharges
+ fun remakeContainer() {
this.container = Container(currentCap)
}
}
-}
\ No newline at end of file
+}
diff --git a/Server/src/main/content/global/skill/runecrafting/Rune.java b/Server/src/main/content/global/skill/runecrafting/Rune.java
index 7736c579b..ef69a1d2f 100644
--- a/Server/src/main/content/global/skill/runecrafting/Rune.java
+++ b/Server/src/main/content/global/skill/runecrafting/Rune.java
@@ -11,9 +11,9 @@ import core.game.node.item.Item;
public enum Rune {
AIR(Runes.AIR_RUNE.transform(), 1, 5, new int[] { 1, 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }),
MIND(Runes.MIND_RUNE.transform(), 2, 5.5, new int[] { 1, 14, 28, 42, 56, 70, 84, 98, 112 }),
- WATER(Runes.WATER_RUNE.transform(), 5, 6, new int[] { 1, 19, 38, 57, 76, 95, 114 }),
- EARTH(Runes.EARTH_RUNE.transform(), 9, 6.5, new int[] { 1, 26, 52, 78, 104 }),
- FIRE(Runes.FIRE_RUNE.transform(), 14, 7, new int[] { 1, 35, 70, 105 }),
+ WATER(Runes.WATER_RUNE.transform(), 1, 5, new int[] { 1, 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }),
+ EARTH(Runes.EARTH_RUNE.transform(), 1, 5, new int[] { 1, 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }),
+ FIRE(Runes.FIRE_RUNE.transform(), 1, 5, new int[] { 1, 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }),
BODY(Runes.BODY_RUNE.transform(), 20, 7.5, new int[] { 1, 46, 92, 138 }),
COSMIC(Runes.COSMIC_RUNE.transform(), 27, 8, new int[] { 1, 59, 118 }),
CHAOS(Runes.CHAOS_RUNE.transform(), 35, 8.5, new int[] { 1, 74, 148 }),
@@ -22,7 +22,7 @@ public enum Rune {
LAW(Runes.LAW_RUNE.transform(), 54, 9.5, new int[] { 1, 110, }),
DEATH(Runes.DEATH_RUNE.transform(), 65, 10, new int[] { 1, 131 }),
BLOOD(Runes.BLOOD_RUNE.transform(), 77, 10.5, new int[] { 1, 154 }),
- SOUL(Runes.SOUL_RUNE.transform(), 90, 11);
+ SOUL(Runes.SOUL_RUNE.transform(), 90, 11, new int[] { 1, 179 });
/**
* Constructs a new {@code Rune} {@code Object}.
diff --git a/Server/src/main/content/global/skill/runecrafting/RuneCraftPulse.java b/Server/src/main/content/global/skill/runecrafting/RuneCraftPulse.java
index d32bea579..017efe99c 100644
--- a/Server/src/main/content/global/skill/runecrafting/RuneCraftPulse.java
+++ b/Server/src/main/content/global/skill/runecrafting/RuneCraftPulse.java
@@ -2,6 +2,7 @@ package content.global.skill.runecrafting;
import content.global.handlers.item.equipment.fistofguthixgloves.FOGGlovesManager;
import core.ServerConstants;
+import core.api.Container;
import core.game.container.impl.EquipmentContainer;
import core.game.node.entity.impl.Animator.Priority;
import core.game.node.entity.player.Player;
@@ -23,11 +24,13 @@ import org.rs09.consts.Sounds;
import java.util.ArrayList;
import java.util.Arrays;
+import content.data.Quests;
/**
* A class used to craft runes.
*
* @author Vexia
+ * @author Player Name
*/
public final class RuneCraftPulse extends SkillPulse- {
@@ -40,6 +43,7 @@ public final class RuneCraftPulse extends SkillPulse
- {
* Represents the pure essence item.
*/
private static final Item PURE_ESSENCE = new Item(7936);
+ private static final Item SOFT_CLAY = new Item(1761);
/**
* Represents the binding necklace item.
@@ -100,53 +104,53 @@ public final class RuneCraftPulse extends SkillPulse
- {
@Override
public boolean checkRequirements() {
if (altar == Altar.ASTRAL) {
- if (!hasRequirement(player, "Lunar Diplomacy"))
+ if (!hasRequirement(player, Quests.LUNAR_DIPLOMACY))
return false;
}
if (altar == Altar.DEATH) {
- if (!hasRequirement(player, "Mourning's End Part II"))
+ if (!hasRequirement(player, Quests.MOURNINGS_END_PART_II))
return false;
}
if (altar == Altar.BLOOD) {
- if (!hasRequirement(player, "Legacy of Seergaze"))
+ if (!hasRequirement(player, Quests.LEGACY_OF_SEERGAZE))
return false;
}
- if (!altar.isOurania() && player.getSkills().getLevel(Skills.RUNECRAFTING) < rune.getLevel()) {
- player.getPacketDispatch().sendMessage("You need a Runecrafting level of at least " + rune.getLevel() + " to craft this rune.");
+ if (!altar.isOurania() && getDynLevel(player, Skills.RUNECRAFTING) < rune.getLevel()) {
+ sendMessage(player, "You need a Runecrafting level of at least " + rune.getLevel() + " to craft this rune.");
return false;
}
- if (combination && !player.getInventory().containsItem(PURE_ESSENCE)) {
- player.getPacketDispatch().sendMessage("You need pure essence to craft this rune.");
+ if (combination && amountInInventory(player, PURE_ESSENCE.getId()) == 0) {
+ sendMessage(player, "You need pure essence to craft this rune.");
return false;
}
- if (!altar.isOurania() && !rune.isNormal() && !player.getInventory().containsItem(PURE_ESSENCE)) {
- player.getPacketDispatch().sendMessage("You need pure essence to craft this rune.");
+ if (!altar.isOurania() && !rune.isNormal() && amountInInventory(player, PURE_ESSENCE.getId()) == 0 && amountInInventory(player, SOFT_CLAY.getId()) == 0) {
+ sendMessage(player, "You need pure essence to craft this rune, or soft clay to craft teleport tablets.");
return false;
}
- if (!altar.isOurania() && rune.isNormal() && !player.getInventory().containsItem(PURE_ESSENCE) && !player.getInventory().containsItem(RUNE_ESSENCE)) {
- player.getPacketDispatch().sendMessage("You need rune essence or pure essence in order to craft this rune.");
+ if (!altar.isOurania() && rune.isNormal() && amountInInventory(player, PURE_ESSENCE.getId()) == 0 && amountInInventory(player, RUNE_ESSENCE.getId()) == 0 && amountInInventory(player, SOFT_CLAY.getId()) == 0) {
+ sendMessage(player, "You need rune or pure essence to craft this rune, or soft clay to craft teleport tablets.");
return false;
}
- if (altar.isOurania() && !player.getInventory().containsItem(PURE_ESSENCE)) {
- player.getPacketDispatch().sendMessage("You need pure essence to craft this rune.");
+ if (altar.isOurania() && amountInInventory(player, PURE_ESSENCE.getId()) == 0) {
+ sendMessage(player, "You need pure essence to craft this rune.");
return false;
}
- if (combination && player.getSkills().getLevel(Skills.RUNECRAFTING) < combo.getLevel()) {
- player.getPacketDispatch().sendMessage("You need a Runecrafting level of at least " + combo.getLevel() + " to combine this rune.");
+ if (combination && getDynLevel(player, Skills.RUNECRAFTING) < combo.getLevel()) {
+ sendMessage(player, "You need a Runecrafting level of at least " + combo.getLevel() + " to combine this rune.");
return false;
}
if (node != null) {
if (node.getName().contains("rune") && !hasSpellImbue()) {
final Rune r = Rune.forItem(node);
final Talisman t = Talisman.forName(r.name());
- if (!player.getInventory().containsItem(t.getTalisman())) {
- player.getPacketDispatch().sendMessage("You don't have the correct talisman to combine this rune.");
+ if (amountInInventory(player, t.getTalisman().getId()) == 0) {
+ sendMessage(player, "You don't have the correct talisman to combine this rune.");
return false;
}
talisman = t;
}
}
- player.lock(4);
+ player.lock(2);
return true;
}
@@ -159,33 +163,79 @@ public final class RuneCraftPulse extends SkillPulse
- {
@Override
public boolean reward() {
+ setDelay(5);
if (!combination) {
- craft();
+ if (amountInInventory(player, SOFT_CLAY.getId()) > 0) {
+ craftTablet();
+ } else {
+ craft();
+ }
} else {
combine();
}
- return true;
+ SnowscapePouchListener.Companion.emptyPouches(player);
+ return false;
}
+ private static final int[][] OuraniaTable = { //https://x.com/JagexAsh/status/1312893446395506688/photo/1
+ /*level up to 9*/ { 2, 7, 15, 30, 60, 105, 165, 250, 400, 700,1300,2500,5000,10000},
+ /*level up to 19*/ { 3, 9, 21, 45, 85, 145, 225, 400,1000,2200,4600,6700,8500,10000},
+ /*level up to 29*/ { 8, 23, 55, 110, 220, 430, 850,1650,3250,4750,6150,7500,8800,10000},
+ /*level up to 39*/ { 20, 60, 120, 250, 500,1000,2000,4000,5300,6500,7600,8500,9300,10000},
+ /*level up to 49*/ { 40, 120, 240, 500,1000,2000,4000,5500,6500,7300,8050,8750,9400,10000},
+ /*level up to 59*/ { 80, 250, 600,1300,2650,4150,5250,6250,7000,7700,8350,8950,9500,10000},
+ /*level up to 69*/ {100, 300, 700,1500,3050,4450,5500,6450,7200,7900,8500,9050,9550,10000},
+ /*level up to 79*/ {200, 700,1700,3500,5000,6200,7100,7800,8300,8700,9100,9400,9700,10000},
+ /*level up to 89*/ {400,1000,2450,3900,5250,6300,7100,7800,8400,8900,9300,9600,9800,10000},
+ /*level up to 98*/ {650,1650,3300,4750,6100,7100,7800,8400,8900,9300,9600,9800,9900,10000},
+ /*level up to 99*/ {900,2200,3750,5200,6550,7500,8100,8600,9000,9300,9600,9800,9900,10000}
+ };
+
/**
* Method used to craft runes.
*/
private void craft() {
- final Item item = new Item(getEssence().getId(), getEssenceAmount());
- int amount = player.getInventory().getAmount(item);
- if (!altar.isOurania()) {
+ final Item item = getEssenceItem();
+ //int amount = player.getInventory().getAmount(item);
+ int amount = 2;
+ if (altar.isOurania()) {
+ amount = 1;
+ if (removeItem(player, item, Container.INVENTORY)) {
+ sendMessage(player, "You bind the temple's power into runes.");
+ player.incrementAttribute("/save:" + STATS_BASE + ":" + STATS_RC, amount);
+
+ int[] OuraniaValues;
+ if (getDynLevel(player, Skills.RUNECRAFTING) == 99) {
+ OuraniaValues = OuraniaTable[10];
+ } else {
+ int index = getDynLevel(player, Skills.RUNECRAFTING) / 10;
+ OuraniaValues = OuraniaTable[index];
+ }
+ for (int i = 0; i < amount; i++) {
+ int roll = RandomFunction.random(10000);
+ Rune rune = null;
+ for (int j = 0; j < 14; j++) {
+ if (roll < OuraniaValues[j]) {
+ rune = Rune.values()[13 - j];
+ break;
+ }
+ }
+ rewardXP(player, Skills.RUNECRAFTING, rune.getExperience() * 4);
+ addItemOrDrop(player, rune.getRune().getId(), getMultiplier(rune));
+ }
+ }
+ } else {
int total = 0;
for(int j = 0; j < amount; j++) {
// since getMultiplier is stochastic, roll `amount` independent copies
- total += getMultiplier();
+ total += getMultiplier(rune);
}
- Item i = new Item(rune.getRune().getId(), total);
- if (player.getInventory().remove(item) && player.getInventory().hasSpaceFor(i)) {
- player.getPacketDispatch().sendMessage("You bind the temple's power into " + (combination ? combo.getRune().getName().toLowerCase() : rune.getRune().getName().toLowerCase()) + "s.");
- player.getInventory().add(i);
+ if (removeItem(player, item, Container.INVENTORY)) {
+ sendMessage(player, "You bind the temple's power into " + (combination ? combo.getRune().getName().toLowerCase() : rune.getRune().getName().toLowerCase()) + "s.");
+ addItemOrDrop(player, rune.getRune().getId(), total);
player.incrementAttribute("/save:" + STATS_BASE + ":" + STATS_RC, amount);
-
+
// Fist of guthix gloves
double xp = rune.getExperience() * amount;
if ((altar == Altar.AIR && inEquipment(player, Items.AIR_RUNECRAFTING_GLOVES_12863, 1))
@@ -193,7 +243,7 @@ public final class RuneCraftPulse extends SkillPulse
- {
|| (altar == Altar.EARTH && inEquipment(player, Items.EARTH_RUNECRAFTING_GLOVES_12865, 1))) {
xp += xp * FOGGlovesManager.updateCharges(player, amount) / amount;
}
- player.getSkills().addExperience(Skills.RUNECRAFTING, xp, true);
+ rewardXP(player, Skills.RUNECRAFTING, xp);
// Achievement Diary handling
// Craft some nature runes
@@ -201,7 +251,8 @@ public final class RuneCraftPulse extends SkillPulse
- {
player.getAchievementDiaryManager().finishTask(player, DiaryType.KARAMJA, 2, 3);
}
// Craft 196 or more air runes simultaneously
- if (altar == Altar.AIR && i.getAmount() >= 196) {
+ //Snowscape: since runecrafting is one essence at a time, you can't craft 196 at once. So just trigger when level 66 is reached.
+ if (altar == Altar.AIR && getDynLevel(player, Skills.RUNECRAFTING) >= 66) {
player.getAchievementDiaryManager().finishTask(player, DiaryType.FALADOR, 2, 2);
}
// Craft a water rune at the Water Altar
@@ -210,64 +261,77 @@ public final class RuneCraftPulse extends SkillPulse
- {
}
}
- } else {
- if (player.getInventory().remove(item)) {
- player.getPacketDispatch().sendMessage("You bind the temple's power into runes.");
- player.incrementAttribute("/save:" + STATS_BASE + ":" + STATS_RC, amount);
- for (int i = 0; i < amount; i++) {
- Rune rune = null;
- while (rune == null) {
- final Rune temp = Rune.values()[RandomFunction.random(Rune.values().length)];
- if (player.getSkills().getLevel(Skills.RUNECRAFTING) >= temp.getLevel()) {
- rune = temp;
- } else {
- if (RandomFunction.random(3) == 1) {
- rune = temp;
- }
- }
- }
- player.getSkills().addExperience(Skills.RUNECRAFTING, rune.getExperience() * 2, true);
- Item runeItem = rune.getRune();
- player.getInventory().add(runeItem);
- }
- }
}
}
/**
* Method used to combine runes.
*/
- private final void combine() {
+ private void combine() {
final Item remove = node.getName().contains("talisman") ? node : talisman != null ? talisman.getTalisman() : Talisman.forName(Rune.forItem(node).name()).getTalisman();
boolean imbued = hasSpellImbue();
- if (!imbued ? player.getInventory().remove(remove) : imbued) {
+ if (!imbued ? removeItem(player, remove, Container.INVENTORY) : imbued) {
int amount = 0;
- int essenceAmt = player.getInventory().getAmount(PURE_ESSENCE);
+ //int essenceAmt = player.getInventory().getAmount(PURE_ESSENCE);
+ int essenceAmt = 1;
+ int multiplier = getMultiplier(altar.getRune()) * 2;
final Item rune = node.getName().contains("rune") ? Rune.forItem(node).getRune() : Rune.forName(Talisman.forItem(node).name()).getRune();
int runeAmt = player.getInventory().getAmount(rune);
- if (essenceAmt > runeAmt) {
- amount = runeAmt;
- } else {
- amount = essenceAmt;
- }
- if (player.getInventory().remove(new Item(PURE_ESSENCE.getId(), amount)) && player.getInventory().remove(new Item(rune.getId(), amount))) {
+ amount = Math.min(multiplier, runeAmt);
+ if (removeItem(player, new Item(PURE_ESSENCE.getId(), essenceAmt), Container.INVENTORY) && removeItem(player, new Item(rune.getId(), amount), Container.INVENTORY)) {
+ rewardXP(player, Skills.RUNECRAFTING, combo.getExperience() * 2);
for (int i = 0; i < amount; i++) {
if (RandomFunction.random(1, 3) == 1 || hasBindingNecklace()) {
- player.getInventory().add(new Item(combo.getRune().getId(), 1));
- player.getSkills().addExperience(Skills.RUNECRAFTING, combo.getExperience(), true);
+ addItemOrDrop(player, combo.getRune().getId(), 1);
+ //rewardXP(player, Skills.RUNECRAFTING, combo.getExperience());
}
}
if (hasBindingNecklace()) {
player.getEquipment().get(EquipmentContainer.SLOT_AMULET).setCharge(player.getEquipment().get(EquipmentContainer.SLOT_AMULET).getCharge() - 1);
- if (1000 - player.getEquipment().get(EquipmentContainer.SLOT_AMULET).getCharge() > 14) {
- player.getEquipment().remove(BINDING_NECKLACE, true);
- player.getPacketDispatch().sendMessage("Your binding necklace crumbles into dust.");
+ if (1000 - player.getEquipment().get(EquipmentContainer.SLOT_AMULET).getCharge() >= 400) {
+ if (player.getEquipment().remove(BINDING_NECKLACE, true)) {
+ sendMessage(player, "
Your binding necklace crumbles into dust.");
+ playAudio(player, Sounds.DESTROY_OBJECT_2381);
+ }
}
+ } else {
+ sendMessage(player, "Some of the runes are destroyed, as you are not wearing a Binding Necklace.");
}
+ // Snowscape: adding the imbue effect after crafting so that a talisman isn't required for every essence
+ player.setAttribute("spell:imbue", GameWorld.getTicks() + 20);
}
}
}
+ /**
+ * Method used to craft tablets. Custom for Snowscape
+ */
+ private final void craftTablet() {
+ //int amount = player.getInventory().getAmount(new Item(1761));
+ int amount = 1;
+ Item clay = new Item(1761, amount);
+ Item tablet = null;
+ if (altar == Altar.AIR) { tablet = new Item(13599, amount); }
+ if (altar == Altar.MIND) { tablet = new Item(13600, amount); }
+ if (altar == Altar.WATER) { tablet = new Item(13601, amount); }
+ if (altar == Altar.EARTH) { tablet = new Item(13602, amount); }
+ if (altar == Altar.FIRE) { tablet = new Item(13603, amount); }
+ if (altar == Altar.BODY) { tablet = new Item(13604, amount); }
+ if (altar == Altar.COSMIC) { tablet = new Item(13605, amount); }
+ if (altar == Altar.CHAOS) { tablet = new Item(13606, amount); }
+ if (altar == Altar.ASTRAL) { tablet = new Item(13611, amount); }
+ if (altar == Altar.NATURE) { tablet = new Item(13607, amount); }
+ if (altar == Altar.LAW) { tablet = new Item(13608, amount); }
+ if (altar == Altar.DEATH) { tablet = new Item(13609, amount); }
+ if (altar == Altar.BLOOD) { tablet = new Item(13610, amount); }
+ if (altar == Altar.SOUL) { tablet = new Item(8022, amount); }
+ if (tablet != null && player.getInventory().remove(clay)) {
+ player.getInventory().add(tablet);
+ player.getSkills().addExperience(Skills.RUNECRAFTING, rune.getExperience() * amount * 2, true);
+ player.getPacketDispatch().sendMessage("You bind the temple's power into teleport tablets.");
+ }
+ }
+
/**
* Checks if the player has the spell imbue.
*
@@ -278,39 +342,25 @@ public final class RuneCraftPulse extends SkillPulse- {
}
/**
- * Gets the essence amount.
+ * Gets the rune essence item.
*
- * @return the amount of essence.
+ * @return the rune essence item.
*/
- private int getEssenceAmount() {
- if (altar.isOurania() && player.getInventory().containsItem(PURE_ESSENCE)) {
- return player.getInventory().getAmount(PURE_ESSENCE);
+ private Item getEssenceItem() {
+ if (altar.isOurania() && amountInInventory(player, PURE_ESSENCE.getId()) > 0) {
+ //return new Item(PURE_ESSENCE.getId(), amountInInventory(player, PURE_ESSENCE.getId()));
+ return new Item(PURE_ESSENCE.getId(), 1);
}
- if (!rune.isNormal() && player.getInventory().containsItem(PURE_ESSENCE)) {
- return player.getInventory().getAmount(PURE_ESSENCE);
- } else if (rune.isNormal() && player.getInventory().containsItem(PURE_ESSENCE)) {
- return player.getInventory().getAmount(PURE_ESSENCE);
- } else {
- return player.getInventory().getAmount(RUNE_ESSENCE);
+ if (!rune.isNormal() && amountInInventory(player, PURE_ESSENCE.getId()) > 0) {
+ //return new Item(PURE_ESSENCE.getId(), amountInInventory(player, PURE_ESSENCE.getId()));
+ return new Item(PURE_ESSENCE.getId(), 1);
}
- }
-
- /**
- * Gets the rune essence that needs to be defined.
- *
- * @return the item.
- */
- private Item getEssence() {
- if (altar.isOurania() && player.getInventory().containsItem(PURE_ESSENCE)) {
- return PURE_ESSENCE;
- }
- if (!rune.isNormal() && player.getInventory().containsItem(PURE_ESSENCE)) {
- return PURE_ESSENCE;
- } else if (rune.isNormal() && player.getInventory().containsItem(PURE_ESSENCE)) {
- return PURE_ESSENCE;
- } else {
- return RUNE_ESSENCE;
+ if (rune.isNormal() && amountInInventory(player, RUNE_ESSENCE.getId()) > 0) {
+ //return new Item(RUNE_ESSENCE.getId(), amountInInventory(player, RUNE_ESSENCE.getId()));
+ return new Item(RUNE_ESSENCE.getId(), 1);
}
+ //return new Item(PURE_ESSENCE.getId(), amountInInventory(player, PURE_ESSENCE.getId()));
+ return new Item(PURE_ESSENCE.getId(), 1);
}
/**
@@ -318,11 +368,11 @@ public final class RuneCraftPulse extends SkillPulse
- {
*
* @return the amount.
*/
- public int getMultiplier() {
- if (altar.isOurania()) {
- return 1;
- }
- int rcLevel = player.getSkills().getLevel(Skills.RUNECRAFTING);
+ public int getMultiplier(Rune rune) {
+ //if (altar.isOurania()) {
+ // return 1;
+ //}
+ int rcLevel = getDynLevel(player, Skills.RUNECRAFTING);
int runecraftingFormulaRevision = ServerConstants.RUNECRAFTING_FORMULA_REVISION;
boolean lumbridgeDiary = player.getAchievementDiaryManager().getDiary(DiaryType.LUMBRIDGE).isComplete(1);
return RuneCraftPulse.getMultiplier(rcLevel, rune, runecraftingFormulaRevision, lumbridgeDiary);
@@ -337,7 +387,7 @@ public final class RuneCraftPulse extends SkillPulse
- {
}
}
- if(multipleLevels.length > i && runecraftingFormulaRevision >= 573) {
+ if (multipleLevels.length > i && runecraftingFormulaRevision >= 573) {
int a = Math.max(multipleLevels[i-1], rune.getLevel());
int b = multipleLevels[i];
if(b <= 99 || runecraftingFormulaRevision >= 581) {
@@ -374,5 +424,4 @@ public final class RuneCraftPulse extends SkillPulse
- {
public Altar getAltar() {
return altar;
}
-
}
diff --git a/Server/src/main/content/global/skill/runecrafting/RunePouchPlugin.kt b/Server/src/main/content/global/skill/runecrafting/RunePouchPlugin.kt
index 41779cf1f..599ca05b0 100644
--- a/Server/src/main/content/global/skill/runecrafting/RunePouchPlugin.kt
+++ b/Server/src/main/content/global/skill/runecrafting/RunePouchPlugin.kt
@@ -11,7 +11,7 @@ import core.tools.colorize
/**
* Handles the rune pouches.
- * @author Ceikry
+ * @author Ceikry, Player Name
*/
class RunePouchPlugin : OptionHandler() {
@Throws(Throwable::class)
@@ -37,21 +37,11 @@ class RunePouchPlugin : OptionHandler() {
if(preferenceFlag == 0) rEssAmt else pEssAmt
)
-
- if(player.pouchManager.isDecayedPouch(node.id)){
- player.debug("E2")
- when(option) { //Handling for IF the pouch has already completely decayed
- "drop" -> player.dialogueInterpreter.open(9878,Item(node.id))
- else -> player.sendMessage(colorize("%RThis pouch has completely decayed and needs to be repaired."))
- }
- } else {
- player.debug("E")
- when (option) { //Normal handling
- "fill" -> player.pouchManager.addToPouch(node.id, essence.amount, essence.id)
- "empty" -> player.pouchManager.withdrawFromPouch(node.id)
- "check" -> player.pouchManager.checkAmount(node.id)
- "drop" -> player.dialogueInterpreter.open(9878,Item(node.id))
- }
+ when (option) {
+ "fill" -> player.pouchManager.addToPouch(node.id, essence.amount, essence.id)
+ "empty" -> player.pouchManager.withdrawFromPouch(node.id)
+ "check" -> player.pouchManager.checkAmount(node.id)
+ "drop" -> player.dialogueInterpreter.open(9878,Item(node.id))
}
return true
}
@@ -59,4 +49,4 @@ class RunePouchPlugin : OptionHandler() {
override fun isWalk(): Boolean {
return false
}
-}
\ No newline at end of file
+}
diff --git a/Server/src/main/content/global/skill/runecrafting/RunecraftingPlugin.java b/Server/src/main/content/global/skill/runecrafting/RunecraftingPlugin.java
index 6bb69109f..954948eaf 100644
--- a/Server/src/main/content/global/skill/runecrafting/RunecraftingPlugin.java
+++ b/Server/src/main/content/global/skill/runecrafting/RunecraftingPlugin.java
@@ -24,6 +24,7 @@ import core.plugin.Initializable;
import core.plugin.Plugin;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
/**
* Handles runecraftign related options.
@@ -52,7 +53,7 @@ public class RunecraftingPlugin extends OptionHandler {
@Override
public boolean handle(final Player player, Node node, String option) {
- if (!player.getQuestRepository().isComplete("Rune Mysteries") && player.getDetails().getRights() != Rights.ADMINISTRATOR) {
+ if (!player.getQuestRepository().isComplete(Quests.RUNE_MYSTERIES) && player.getDetails().getRights() != Rights.ADMINISTRATOR) {
player.getPacketDispatch().sendMessage("You need to finish the Rune Mysteries Quest in order to do this.");
return true;
}
@@ -97,7 +98,7 @@ public class RunecraftingPlugin extends OptionHandler {
}
Altar a = Altar.forObject(((Scenery) node));
if (a == Altar.ASTRAL) {
- if (!hasRequirement(player, "Lunar Diplomacy"))
+ if (!hasRequirement(player, Quests.LUNAR_DIPLOMACY))
return true;
}
player.getPulseManager().run(new RuneCraftPulse(player, null, a, false, null));
diff --git a/Server/src/main/content/global/skill/runecrafting/SnowscapePouchListener.kt b/Server/src/main/content/global/skill/runecrafting/SnowscapePouchListener.kt
new file mode 100755
index 000000000..0c98a6268
--- /dev/null
+++ b/Server/src/main/content/global/skill/runecrafting/SnowscapePouchListener.kt
@@ -0,0 +1,91 @@
+package content.global.skill.runecrafting
+
+import core.api.*
+import core.game.node.Node
+import core.game.node.entity.player.Player
+import core.game.node.item.Item
+import core.game.interaction.InteractionListener
+import core.game.interaction.IntType
+import org.rs09.consts.Items
+import content.global.handlers.scenery.BankBoothListener
+import content.global.handlers.npc.BankerNPC
+import content.global.skill.summoning.familiar.BurdenBeast
+import content.global.skill.summoning.familiar.Forager
+
+/**
+ * Listener for using runecrafting pouches on banks for easier refilling.
+ * Using any pouch on a bank booth, chest, or banker will refill all the carried pouches as well as the familiar inventory.
+ * @author
+ */
+class SnowscapePouchListener : InteractionListener {
+
+ companion object {
+
+ val pouchIds = intArrayOf(5509,5510,5511,5512,5513,5514,5515)
+
+ // Called by the runecraft pulse
+ fun emptyPouches(player: Player) {
+ if (amountInInventory(player, Items.PURE_ESSENCE_7936) > 0 || amountInInventory(player, Items.RUNE_ESSENCE_1436) > 0) return
+
+ if (player.getFamiliarManager().hasFamiliar()) {
+ val familiar = player.getFamiliarManager().getFamiliar()
+ if (familiar.isBurdenBeast() && (familiar as BurdenBeast).getContainer().containsAtLeastOneItem(Items.PURE_ESSENCE_7936)) {
+ (familiar as BurdenBeast).transfer(Item(Items.PURE_ESSENCE_7936), 99, true)
+ }
+ }
+
+ for (pouchId in pouchIds) {
+ if (inInventory(player, pouchId, 1)) {
+ player.pouchManager.withdrawFromPouch(pouchId)
+ }
+ }
+ }
+ }
+
+ private fun fillPouchFromBank(player: Player) {
+ val playerBank = player.getBank()
+ for (pouchId in pouchIds) {
+ if (inInventory(player, pouchId, 1)) {
+ player.pouchManager.addToPouch(pouchId, playerBank.getAmount(Items.PURE_ESSENCE_7936), Items.PURE_ESSENCE_7936, true)
+ }
+ }
+
+ if (player.getFamiliarManager().hasFamiliar()) {
+ val familiar = player.getFamiliarManager().getFamiliar()
+ if (familiar.isBurdenBeast() && (familiar !is Forager)) {
+ val familiarContainer = (familiar as BurdenBeast).getContainer()
+ val amount = kotlin.math.min(familiarContainer.getMaximumAdd(Item(Items.PURE_ESSENCE_7936)), playerBank.getAmount(Item(Items.PURE_ESSENCE_7936)))
+ val item = Item(Items.PURE_ESSENCE_7936, amount)
+ if (playerBank.remove(item)) familiarContainer.add(item)
+ if (familiarContainer.freeSlots() == 0) sendMessage(player, "Your familiar is full.")
+
+ }
+ }
+
+ sendMessage(player, "There is ${player.getBank().getAmount(Items.PURE_ESSENCE_7936)} Pure Essence remaining in your bank.")
+ }
+
+
+
+ override fun defineListeners() {
+
+ // BankBoothListener values are public but BankChestListener values are not, so rather than edit the BankChestListener file I have copied the IDs here. 12309 is the Culinomancer's chest.
+ val bankChests = intArrayOf(3194,4483,10562,14382,16695,16696,21301,27662,27663)
+ val bankUseWiths = intArrayOf(*BankBoothListener.BANK_BOOTHS, 12309, *bankChests)
+
+ //6362 is the Ourania Altar banker.
+ val bankers = intArrayOf(*BankerNPC.NPC_IDS, *BankerNPC.SPECIAL_NPC_IDS, 6362)
+
+ onUseWith(IntType.SCENERY, pouchIds, *bankUseWiths) { player, used, with ->
+ fillPouchFromBank(player)
+ return@onUseWith true
+ }
+
+ onUseWith(IntType.NPC, pouchIds, *bankers) { player, used, with ->
+ fillPouchFromBank(player)
+ return@onUseWith true
+ }
+ }
+
+
+}
diff --git a/Server/src/main/content/global/skill/runecrafting/abyss/DarkMageDialogue.java b/Server/src/main/content/global/skill/runecrafting/abyss/DarkMageDialogue.java
index b7297429e..a7b6450cd 100644
--- a/Server/src/main/content/global/skill/runecrafting/abyss/DarkMageDialogue.java
+++ b/Server/src/main/content/global/skill/runecrafting/abyss/DarkMageDialogue.java
@@ -4,6 +4,9 @@ import core.game.dialogue.DialoguePlugin;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
+import org.rs09.consts.Items;
+
+import static core.api.ContentAPIKt.replaceAllItems;
/**
* Handles the dark mages dialogue.
@@ -140,26 +143,19 @@ public final class DarkMageDialogue extends DialoguePlugin {
private boolean repair() {
player.pouchManager.getPouches().forEach((id, pouch) -> {
pouch.setCurrentCap(pouch.getCapacity());
- pouch.setCharges(10);
- Item essence = null;
- if(!pouch.getContainer().isEmpty()){
- int ess = pouch.getContainer().get(0).getId();
- int amount = pouch.getContainer().getAmount(ess);
- essence = new Item(ess,amount);
+ pouch.setCharges(pouch.getMaxCharges());
+ Item essItem = null;
+ if (!pouch.getContainer().isEmpty()) {
+ int essence = pouch.getContainer().get(0).getId();
+ int amount = pouch.getContainer().getAmount(essence);
+ essItem = new Item(essence, amount);
}
pouch.remakeContainer();
- if(essence != null){
- pouch.getContainer().add(essence);
+ if (essItem != null) {
+ pouch.getContainer().add(essItem);
}
- if(id != 5509) {
- if (player.getInventory().contains(id + 1, 1)) {
- player.getInventory().remove(new Item(id + 1, 1));
- player.getInventory().add(new Item(id, 1));
- }
- if (player.getBank().contains(id + 1, 1)) {
- player.getBank().remove(new Item(id + 1, 1));
- player.getBank().add(new Item(id, 1));
- }
+ if (id != Items.SMALL_POUCH_5509) {
+ replaceAllItems(player, id + 1, id);
}
});
return true;
diff --git a/Server/src/main/content/global/skill/runecrafting/abyss/ZamorakMageDialogue.java b/Server/src/main/content/global/skill/runecrafting/abyss/ZamorakMageDialogue.java
index 1b46aa4e0..ab06e4843 100644
--- a/Server/src/main/content/global/skill/runecrafting/abyss/ZamorakMageDialogue.java
+++ b/Server/src/main/content/global/skill/runecrafting/abyss/ZamorakMageDialogue.java
@@ -7,6 +7,7 @@ import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
+import content.data.Quests;
/**
@@ -51,7 +52,7 @@ public final class ZamorakMageDialogue extends DialoguePlugin {
public boolean open(Object... args) {
npc = (NPC) args[0];
varrockMage = npc.getId() == 2261 || npc.getId() == 2260;
- if (!player.getQuestRepository().isComplete("Rune Mysteries")) {
+ if (!player.getQuestRepository().isComplete(Quests.RUNE_MYSTERIES)) {
end();
player.sendMessage("The mage doesn't seem interested in talking to you.");
return true;
@@ -190,7 +191,7 @@ public final class ZamorakMageDialogue extends DialoguePlugin {
stage++;
break;
case 201:
- npc("And there is an ubundant supply of this 'essence' there", "you say?");
+ npc("And there is an abundant supply of this 'essence' there", "you say?");
stage++;
break;
case 202:
@@ -299,7 +300,7 @@ public final class ZamorakMageDialogue extends DialoguePlugin {
switch (stage) {
case 0:
if (!player.hasItem(ORBS[0]) && !player.getInventory().containsItem(ORBS[1])) {
- player("Uh...", "No...", "I kinda lost that orb thingy that you have me.");
+ player("Uh...", "No...", "I kinda lost that orb thingy that you gave me.");
stage++;
break;
}
@@ -313,14 +314,14 @@ public final class ZamorakMageDialogue extends DialoguePlugin {
break;
case 1:
player.getInventory().add(ORBS[0], player);
- npc("What?", "Incompetent fool. Take this.", "And do not make me refret allying myself with you.");
+ npc("What?", "Incompetent fool. Take this.", "And do not make me regret allying myself with you.");
stage++;
break;
case 2:
end();
break;
case 3:
- npc("I assume the task to be self-explainatory.", "What is it you wish to know?");
+ npc("I assume the task to be self-explanatory.", "What is it you wish to know?");
stage++;
break;
case 4:
@@ -328,7 +329,7 @@ public final class ZamorakMageDialogue extends DialoguePlugin {
stage++;
break;
case 5:
- npc("All I wish for you to do is to teleport to this 'rune", "essence' location from three different locations wile", "carrying the scrying orb I gave you.", "It will collect the data as you teleport.");
+ npc("All I wish for you to do is to teleport to this 'rune", "essence' location from three different locations while", "carrying the scrying orb I gave you.", "It will collect the data as you teleport.");
stage++;
break;
case 6:
diff --git a/Server/src/main/content/global/skill/skillcapeperks/SkillcapePerks.kt b/Server/src/main/content/global/skill/skillcapeperks/SkillcapePerks.kt
index 7ee273098..7dbc1992b 100644
--- a/Server/src/main/content/global/skill/skillcapeperks/SkillcapePerks.kt
+++ b/Server/src/main/content/global/skill/skillcapeperks/SkillcapePerks.kt
@@ -15,7 +15,9 @@ import core.ServerStore.Companion.getBoolean
import core.ServerStore.Companion.getInt
import core.api.*
import core.cache.def.impl.ItemDefinition
+import core.tools.END_DIALOGUE
import org.rs09.consts.Items
+import content.data.Quests
enum class SkillcapePerks(val attribute: String, val effect: ((Player) -> Unit)? = null) {
BAREFISTED_SMITHING("cape_perks:barefisted-smithing"),
@@ -47,7 +49,6 @@ enum class SkillcapePerks(val attribute: String, val effect: ((Player) -> Unit)?
player.dialogueInterpreter.sendDialogue("Your cape is still on cooldown.")
} else {
player.dialogueInterpreter.open(509871233)
- store[player.name] = used + 1
}
}),
SEED_ATTRACTION("cape_perks:seed_attract",{player ->
@@ -195,11 +196,11 @@ enum class SkillcapePerks(val attribute: String, val effect: ((Player) -> Unit)?
end()
if(spellbook != null){
if (spellbook == SpellBookManager.SpellBook.ANCIENT) {
- if (!hasRequirement(player, "Desert Treasure"))
+ if (!hasRequirement(player, Quests.DESERT_TREASURE))
return true
}
else if (spellbook == SpellBookManager.SpellBook.LUNAR) {
- if (!hasRequirement(player, "Lunar Diplomacy"))
+ if (!hasRequirement(player, Quests.LUNAR_DIPLOMACY))
return true
}
player.spellBookManager.setSpellBook(spellbook)
@@ -222,54 +223,69 @@ enum class SkillcapePerks(val attribute: String, val effect: ((Player) -> Unit)?
}
override fun open(vararg args: Any?): Boolean {
- options("Air","Mind","Water","Earth","More...")
+ altarList(0)
stage = 0
return true
}
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
- when(stage){
- 0 -> when(buttonId){
+ when(stage) {
+ 0 -> when(buttonId) {
1 -> sendAltar(player, Altar.AIR)
2 -> sendAltar(player, Altar.MIND)
3 -> sendAltar(player, Altar.WATER)
4 -> sendAltar(player, Altar.EARTH)
- 5 -> options("Fire","Body","Cosmic","Chaos","More...").also { stage++ }
+ 5 -> altarList(++stage)
}
- 1 -> when(buttonId){
- 1 -> sendAltar(player, Altar.FIRE)
- 2 -> sendAltar(player, Altar.BODY)
- 3 -> sendAltar(player, Altar.COSMIC)
- 4 -> sendAltar(player, Altar.CHAOS)
- 5 -> options("Astral","Nature","Law","Death","More...").also { stage++ }
+ 1 -> when(buttonId) {
+ 1 -> altarList(--stage)
+ 2 -> sendAltar(player, Altar.FIRE)
+ 3 -> sendAltar(player, Altar.BODY)
+ 4 -> sendAltar(player, Altar.COSMIC)
+ 5 -> altarList(++stage)
}
- 2 -> when(buttonId){
- 1 -> sendAltar(player, Altar.ASTRAL)
- 2 -> sendAltar(player, Altar.NATURE)
- 3 -> sendAltar(player, Altar.LAW)
- 4 -> sendAltar(player, Altar.DEATH)
- 5 -> options("Blood","Nevermind").also { stage++ }
+ 2 -> when(buttonId) {
+ 1 -> altarList(--stage)
+ 2 -> sendAltar(player, Altar.CHAOS)
+ 3 -> sendAltar(player, Altar.ASTRAL)
+ 4 -> sendAltar(player, Altar.NATURE)
+ 5 -> altarList(++stage)
}
- 3 -> when(buttonId){
- 1 -> sendAltar(player, Altar.BLOOD)
- 2 -> end()
+ 3 -> when(buttonId) {
+ 1 -> altarList(--stage)
+ 2 -> sendAltar(player, Altar.LAW)
+ 3 -> sendAltar(player, Altar.DEATH)
+ 4 -> sendAltar(player, Altar.BLOOD)
+ 5 -> altarList(0).also { stage = 0 }
}
}
return true
}
- fun sendAltar(player: Player,altar: Altar){
+ fun altarList(stage: Int) {
+ when (stage) {
+ 0 -> options("Air", "Mind", "Water", "Earth", "More...")
+ 1 -> options("Back...", "Fire", "Body", "Cosmic", "More...")
+ 2 -> options("Back...", "Chaos", "Astral", "Nature", "More...")
+ 3 -> options("Back...", "Law", "Death", "Blood", "More...")
+ }
+ }
+
+ fun sendAltar(player: Player,altar: Altar) {
end()
- if (altar == Altar.DEATH && !hasRequirement(player, "Mourning's End Part II")) return
- if (altar == Altar.ASTRAL && !hasRequirement(player, "Lunar Diplomacy")) return
- if (altar == Altar.BLOOD && !hasRequirement(player, "Legacy of Seergaze")) return
+ if (altar == Altar.DEATH && !hasRequirement(player, Quests.MOURNINGS_END_PART_II)) return
+ if (altar == Altar.ASTRAL && !hasRequirement(player, Quests.LUNAR_DIPLOMACY)) return
+ if (altar == Altar.BLOOD && !hasRequirement(player, Quests.LEGACY_OF_SEERGAZE)) return
if (altar == Altar.LAW && !ItemDefinition.canEnterEntrana(player)) {
- sendItemDialogue(player, Items.SARADOMIN_SYMBOL_8055, "No weapons or armour are permitted on holy Entrana.")
+ sendMessage(player, "The power of Saradomin prevents you from taking armour or weaponry to Entrana.");
return
}
var endLoc = if (altar == Altar.ASTRAL) Location.create(2151, 3864, 0) else altar.ruin.end
+ val store = ServerStore.getArchive("daily-abyss-warp")
+ val used = store.getInt(player.name,0)
+ store[player.name] = used + 1
player.teleporter.send(endLoc, TeleportManager.TeleportType.TELE_OTHER)
player.incrementAttribute("/save:cape_perks:abyssal_warp",-1)
}
diff --git a/Server/src/main/content/global/skill/slayer/FishingExplosivePlugin.java b/Server/src/main/content/global/skill/slayer/FishingExplosivePlugin.java
deleted file mode 100644
index 196a4c62d..000000000
--- a/Server/src/main/content/global/skill/slayer/FishingExplosivePlugin.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package content.global.skill.slayer;
-
-import core.cache.def.impl.SceneryDefinition;
-import core.game.interaction.NodeUsageEvent;
-import core.game.interaction.OptionHandler;
-import core.game.interaction.UseWithHandler;
-import core.game.node.Node;
-import core.game.node.entity.Entity;
-import core.game.node.entity.combat.CombatStyle;
-import core.game.node.entity.combat.ImpactHandler.HitsplatType;
-import core.game.node.entity.impl.Projectile;
-import core.game.node.entity.npc.AbstractNPC;
-import core.game.node.entity.npc.NPC;
-import core.game.node.entity.player.Player;
-import core.game.node.entity.player.link.HintIconManager;
-import core.game.node.entity.player.link.diary.DiaryType;
-import core.game.node.item.Item;
-import core.game.node.scenery.Scenery;
-import core.game.system.task.Pulse;
-import core.game.world.GameWorld;
-import core.game.world.map.Direction;
-import core.game.world.map.Location;
-import core.game.world.update.flag.context.Animation;
-import core.game.world.update.flag.context.Graphics;
-import core.plugin.Initializable;
-import core.plugin.Plugin;
-import core.tools.RandomFunction;
-
-/**
- * Represents the plugin used to handle the fishing expolosive on a omnious
- * fishing spot.
- * @author 'Vexia
- */
-@Initializable
-public final class FishingExplosivePlugin extends OptionHandler {
-
- /**
- * Represents the ominous fishing spot ids.
- */
- private final static int[] IDS = new int[] { 10087, 10088, 10089 };
-
- @Override
- public Plugin
newInstance(Object arg) throws Throwable {
- for (int id : IDS) {
- SceneryDefinition.forId(id).getHandlers().put("option:lure", this);
- SceneryDefinition.forId(id).getHandlers().put("option:bait", this);
- }
- new FishingExplosiveHandler().newInstance(arg);
- new MogreNPC().newInstance(arg);
- return this;
- }
-
- @Override
- public boolean handle(Player player, Node node, String option) {
- player.getPacketDispatch().sendMessage("Something seems to have scared all the fishes away...");
- return true;
- }
-
- @Override
- public Location getDestination(Node node, Node n) {
- return node.getLocation();
- }
-
- /**
- * Represents the handler for the fishing expolsive on a fishing spot.
- * @author 'Vexia
- * @version 1.0
- */
- public static final class FishingExplosiveHandler extends UseWithHandler {
-
- /**
- * Represents the throwing animation.
- */
- private static final Animation ANIMATION = new Animation(385);
-
- /**
- * Represents the splashing graphics.
- */
- private static final Graphics SPLASH_GRAPHIC = new Graphics(68);
-
- /**
- * Represents the npc mogre id.
- */
- private static final int MOGRE_ID = 114;
-
- /**
- * Represents the messages used to send for the mogres.
- */
- private static final String[] MESSAGES = new String[] { "Da boom-boom kill all da fishies!", "I smack you good!", "Smash stupid human!", "Tasty human!", "Human hit me on the head!", "I get you!", "Human scare all da fishies!" };
-
- /**
- * Constructs a new {@code FishingExplosiveHandler} {@code Object}.
- */
- public FishingExplosiveHandler() {
- super(6664, 12633);
- }
-
- @Override
- public Plugin newInstance(Object arg) throws Throwable {
- for (int i : IDS) {
- addHandler(i, OBJECT_TYPE, this);
- }
- return this;
- }
-
- @Override
- public boolean handle(final NodeUsageEvent event) {
- final Player player = event.getPlayer();
- if (player.getAttributes().containsKey("hasMogre")) {
- player.getDialogueInterpreter().sendDialogues(player, null, "Sinister as that fishing spot is, why would I want to", "explode it?");
- return true;
- }
- if (!player.getInventory().remove(new Item(event.getUsedItem().getId(), 1))) {
- return true;
- }
- final int delay = (int) (2 + (player.getLocation().getDistance(event.getUsedWith().getLocation())) * 0.5);
- player.animate(ANIMATION);
- player.getPacketDispatch().sendMessage("You hurl the shuddering vial into the water...");
- sendProjectile(player, (Scenery) event.getUsedWith());
- GameWorld.getPulser().submit(new Pulse(delay, player) {
- @Override
- public boolean pulse() {
- Direction dir = event.getUsedWith().getDirection();
- NPC mogre = NPC.create(MOGRE_ID, event.getUsedWith().getLocation().transform(dir.getStepX() << 1, dir.getStepY() << 1, 0));
- mogre.init();
- mogre.moveStep();
- mogre.setRespawn(false);
- mogre.getProperties().getCombatPulse().attack(player);
- mogre.setAttribute("player", player);
- mogre.sendChat(MESSAGES[RandomFunction.random(MESSAGES.length)]);
- HintIconManager.registerHintIcon(player, mogre);
- if (event.getUsedItem().getId() == 12633) {
- mogre.getImpactHandler().manualHit(player, 15, HitsplatType.NORMAL);
- }
- player.setAttribute("hasMogre", true);
- mogre.graphics(SPLASH_GRAPHIC);
- player.getPacketDispatch().sendMessage("...and a Mogre appears!");
- return true;
- }
- });
- return true;
- }
-
- /**
- * Method used to send the fishign explosive projectile.
- * @param player the player.
- * @param object the object.
- */
- private void sendProjectile(final Player player, final Scenery object) {
- Projectile p = Projectile.create(player, null, 49, 30, 20, 30, Projectile.getSpeed(player, object.getLocation()));
- p.setEndLocation(object.getLocation());
- p.send();
- }
-
- @Override
- public Location getDestination(Player player, Node with) {
- return player.getLocation();
- }
- }
-
- /**
- * Represents a mogre npc.
- * @author 'Vexia
- * @version 1.0
- */
- public final class MogreNPC extends AbstractNPC {
-
- /**
- * Constructs a new {@code MogreNPC} {@code Object}.
- * @param id the id.
- * @param location the location.
- */
- public MogreNPC(int id, Location location) {
- super(id, location, true);
- }
-
- /**
- * Constructs a new {@code MogreNPC} {@code Object}.
- */
- public MogreNPC() {
- super(0, null);
- }
-
- @Override
- public void tick() {
- super.tick();
- final Player pl = getAttribute("player", null);
- if (pl == null || pl.getLocation().getDistance(getLocation()) > 15) {
- clear();
- }
- }
-
- @Override
- public void clear() {
- super.clear();
- final Player pl = getAttribute("player", null);
- if (pl != null) {
- pl.removeAttribute("hasMogre");
- }
- }
-
- @Override
- public boolean isAttackable(Entity entity, CombatStyle style, boolean message) {
- final Player pl = getAttribute("player", null);
- return pl != null && pl == entity && super.isAttackable(entity, style, message);
- }
-
- @Override
- public void finalizeDeath(final Entity killer) {
- super.finalizeDeath(killer);
- if (killer instanceof Player) {
- final Player player = killer.asPlayer();
- player.getAchievementDiaryManager().finishTask(player,DiaryType.FALADOR, 2, 7);
- }
- }
-
- @Override
- public AbstractNPC construct(int id, Location location, Object... objects) {
- return new MogreNPC(id, location);
- }
-
- @Override
- public int[] getIds() {
- return new int[] { 114 };
- }
-
- }
-}
diff --git a/Server/src/main/content/global/skill/slayer/Master.java b/Server/src/main/content/global/skill/slayer/Master.java
index 0a3d3619d..aad0fa5e4 100644
--- a/Server/src/main/content/global/skill/slayer/Master.java
+++ b/Server/src/main/content/global/skill/slayer/Master.java
@@ -10,36 +10,38 @@ import java.util.List;
/**
* A non-garbage way of representing slayer masters
+ * Source for task amounts: ...
+ * Need to add a source for weights
* @author ceik
+ * @author gregf
*/
public enum Master {
- TURAEL(8273, 0, 0, new int[]{15, 50}, new int[]{0, 0, 0},
+ TURAEL(8273, 3, 0, new int[]{15, 50}, new int[]{0, 0, 0},
new Task(Tasks.BANSHEE, 8),
new Task(Tasks.BATS, 7),
- new Task(Tasks.BIRDS, 6),
new Task(Tasks.BEARS, 7),
- new Task(Tasks.CAVE_BUG, 8),
+ new Task(Tasks.BIRDS, 6),
+ new Task(Tasks.CAVE_BUG, 8),
new Task(Tasks.CAVE_CRAWLERS, 8),
new Task(Tasks.CAVE_SLIMES, 8),
new Task(Tasks.COWS, 8),
new Task(Tasks.CRAWLING_HAND, 8),
+ new Task(Tasks.DESERT_LIZARDS, 8),
new Task(Tasks.DOG, 7),
new Task(Tasks.DWARF, 7),
new Task(Tasks.GHOSTS, 7),
new Task(Tasks.GOBLINS, 7),
new Task(Tasks.ICE_FIENDS, 8),
new Task(Tasks.KALPHITES, 6),
- new Task(Tasks.DESERT_LIZARDS, 8),
new Task(Tasks.MINOTAURS, 7),
new Task(Tasks.MONKEYS, 6),
- new Task(Tasks.RATS, 7),
- new Task(Tasks.SCORPIONS, 7),
+ new Task(Tasks.SCORPIONS, 7),
new Task(Tasks.SKELETONS, 7),
new Task(Tasks.SPIDERS, 6),
new Task(Tasks.WOLVES, 7),
new Task(Tasks.ZOMBIES, 7)),
- MAZCHNA(8274, 20, 0, new int[]{30, 70}, new int[]{2, 5, 15},
+ MAZCHNA(8274, 20, 0, new int[]{40, 70}, new int[]{2, 5, 15},
new Task(Tasks.BANSHEE, 8),
new Task(Tasks.BATS,7),
new Task(Tasks.BEARS,6),
@@ -59,221 +61,191 @@ public enum Master {
new Task(Tasks.HOBGOBLINS, 7),
new Task(Tasks.ICE_WARRIOR, 7),
new Task(Tasks.KALPHITES,6),
- //new Task(Tasks.KILLERWATTS, 6),
- //new Task(Tasks.MOGRES, 8),
+ new Task(Tasks.MOGRES, 8),
new Task(Tasks.PYREFIENDS, 8),
new Task(Tasks.ROCK_SLUGS,8),
- new Task(Tasks.SCORPIONS,7),
new Task(Tasks.SHADE,8),
new Task(Tasks.SKELETONS, 7),
new Task(Tasks.VAMPIRES, 6),
- //new Task(Tasks.WALL_BEASTS,7),
+ // new Task(Tasks.WALL_BEASTS,7),
new Task(Tasks.WOLVES, 7),
new Task(Tasks.ZOMBIES,7)),
- VANNAKA(1597, 40, 0, new int[]{30, 80}, new int[]{4, 20, 60},
+ VANNAKA(1597, 40, 0, new int[]{60, 120}, new int[]{4, 20, 60},
new Task(Tasks.ABERRANT_SPECTRES, 8),
- new Task(Tasks.ABYSSAL_DEMONS, 5),
new Task(Tasks.ANKOU,7),
new Task(Tasks.BANSHEE,6),
- new Task(Tasks.BASILISKS,8),
- new Task(Tasks.BLOODVELDS,8),
+ new Task(Tasks.BASILISKS,8),
new Task(Tasks.BLUE_DRAGONS,7),
+ new Task(Tasks.BLOODVELDS,8),
new Task(Tasks.BRINE_RATS,7),
- new Task(Tasks.BRONZE_DRAGONS,7),
new Task(Tasks.CAVE_BUG,7),
new Task(Tasks.CAVE_CRAWLERS,7),
new Task(Tasks.CAVE_SLIMES,7),
new Task(Tasks.COCKATRICES,8),
new Task(Tasks.CRAWLING_HAND,6),
- new Task(Tasks.CROCODILES,6),
- new Task(Tasks.DAGANNOTHS, 7),
+ new Task(Tasks.CROCODILES,6, new Integer[]{30, 60}),
+ new Task(Tasks.DAGANNOTHS, 7),
+ new Task(Tasks.DESERT_LIZARDS,7, new Integer[]{30, 60}),
new Task(Tasks.DUST_DEVILS,8),
- new Task(Tasks.EARTH_WARRIORS,6),
- new Task(Tasks.ELVES, 7),
+ new Task(Tasks.EARTH_WARRIORS,6, new Integer[]{30, 60}),
+ new Task(Tasks.ELVES, 7, new Integer[]{30, 60}),
//new Task(Tasks.FEVER_SPIDERS,7),
new Task(Tasks.FIRE_GIANTS,7),
- new Task(Tasks.GARGOYLES, 5),
new Task(Tasks.GHOULS,7),
- new Task(Tasks.GREEN_DRAGONS,6),
+ new Task(Tasks.GREEN_DRAGONS,6, new Integer[]{30, 60}),
new Task(Tasks.HARPIE_BUG_SWARMS,8),
new Task(Tasks.HELLHOUNDS,7),
new Task(Tasks.HILL_GIANTS,7),
- new Task(Tasks.HOBGOBLINS,7),
- new Task(Tasks.ICE_GIANTS,7),
+ new Task(Tasks.ICE_GIANTS,7, new Integer[]{30, 60}),
new Task(Tasks.ICE_WARRIOR,7),
new Task(Tasks.INFERNAL_MAGES,8),
new Task(Tasks.JELLIES,8),
new Task(Tasks.JUNGLE_HORRORS, 8),
new Task(Tasks.KALPHITES,7),
- //new Task(Tasks.KILLERWATTS,6),
+ // new Task(Tasks.KILLERWATTS,6),
new Task(Tasks.KURASKS,7),
- new Task(Tasks.DESERT_LIZARDS,7),
- new Task(Tasks.LESSER_DEMONS,7),
- //new Task(Tasks.MOGRES,7),
- //new Task(Tasks.MOLANISKS,7),
+ new Task(Tasks.LESSER_DEMONS,7),
+ new Task(Tasks.MOGRES,7),
+ // new Task(Tasks.MOLANISKS,7),
new Task(Tasks.MOSS_GIANTS,7),
- new Task(Tasks.NECHRYAELS, 5),
new Task(Tasks.OGRES,7),
new Task(Tasks.OTHERWORDLY_BEING,8),
new Task(Tasks.PYREFIENDS,8),
new Task(Tasks.ROCK_SLUGS,7),
+ // new Task(Tasks.SEA_SNAKES,6),
new Task(Tasks.SHADE,8),
- //new Task(Tasks.SEA_SNAKES,6),
- //new Task(Tasks.SHADOW_WARRIORS, 8),
- new Task(Tasks.SPIRTUAL_MAGES,3),
- new Task(Tasks.SPIRTUAL_RANGERS, 3),
- new Task(Tasks.SPIRTUAL_WARRIORS,3),
- //new Task(Tasks.TERROR_DOGS,6),
+ // new Task(Tasks.SHADOW_WARRIORS, 8),
new Task(Tasks.TROLLS,7),
new Task(Tasks.TUROTHS, 8),
new Task(Tasks.VAMPIRES,7),
- //new Task(Tasks.WALL_BEAST,6),
- new Task(Tasks.WEREWOLFS,7)),
+ // new Task(Tasks.WALL_BEASTS,6),
+ new Task(Tasks.WEREWOLVES,7)),
CHAELDAR(1598, 70, 0, new int[]{110, 170}, new int[]{10, 50, 150},
new Task(Tasks.ABERRANT_SPECTRES,8),
new Task(Tasks.ABYSSAL_DEMONS,12),
- new Task(Tasks.AVIANSIES,9),
new Task(Tasks.BANSHEE, 5),
new Task(Tasks.BASILISKS,7),
- new Task(Tasks.BLACK_DEMONS,10),
- new Task(Tasks.BLOODVELDS,8),
new Task(Tasks.BLUE_DRAGONS,8),
+ new Task(Tasks.BLOODVELDS,8),
new Task(Tasks.BRINE_RATS,7),
- new Task(Tasks.BRONZE_DRAGONS,11),
+ new Task(Tasks.BRONZE_DRAGONS,11, new Integer[]{30, 60}),
+ new Task(Tasks.CAVE_BUG, 5),
new Task(Tasks.CAVE_CRAWLERS, 5),
new Task(Tasks.CAVE_HORRORS,10),
new Task(Tasks.CAVE_SLIMES,6),
new Task(Tasks.COCKATRICES,6),
+ new Task(Tasks.CRAWLING_HAND, 5),
+ new Task(Tasks.CROCODILES, 5, new Integer[]{30, 60}),
new Task(Tasks.DAGANNOTHS,11),
+ new Task(Tasks.DESERT_LIZARDS, 5, new Integer[]{30, 60}),
new Task(Tasks.DUST_DEVILS,9),
- new Task(Tasks.ELVES,8),
+ new Task(Tasks.ELVES,8, new Integer[]{60, 90}),
//new Task(Tasks.FEVER_SPIDERS,7),
new Task(Tasks.FIRE_GIANTS, 12),
new Task(Tasks.GARGOYLES,11),
new Task(Tasks.GREATER_DEMONS,9),
new Task(Tasks.HARPIE_BUG_SWARMS,6),
- new Task(Tasks.HELLHOUNDS,9),
+ new Task(Tasks.HELLHOUNDS,9),
+ new Task(Tasks.IRON_DRAGONS,12, new Integer[]{30, 60}),
new Task(Tasks.INFERNAL_MAGES,7),
- new Task(Tasks.IRON_DRAGONS,12),
new Task(Tasks.JELLIES, 10),
new Task(Tasks.JUNGLE_HORRORS,10),
new Task(Tasks.KALPHITES,11),
new Task(Tasks.KURASKS, 12),
new Task(Tasks.LESSER_DEMONS,9),
- new Task(Tasks.DESERT_LIZARDS, 5),
- //new Task(Tasks.MOGRES,6),
- //new Task(Tasks.MOLANISKS,6),
- //new Task(Tasks.MUTATED_ZYGOMITES,7),
+ new Task(Tasks.MOGRES,6),
+ // new Task(Tasks.MOLANISKS,6),
+ //new Task(Tasks.MUTATED_ZYGOMITES,7, new Integer[]{30, 60}),
new Task(Tasks.NECHRYAELS, 12),
new Task(Tasks.PYREFIENDS,6),
new Task(Tasks.ROCK_SLUGS, 5),
- //new Task(Tasks.SHADOW_WARRIORS,8),
- new Task(Tasks.SKELETAL_WYVERN,7),
+ // new Task(Tasks.SHADOW_WARRIORS,8),
new Task(Tasks.SPIRTUAL_WARRIORS,4),
new Task(Tasks.SPIRTUAL_RANGERS,4),
new Task(Tasks.SPIRTUAL_MAGES,4),
- new Task(Tasks.STEEL_DRAGONS,9),
new Task(Tasks.TROLLS,11),
new Task(Tasks.TUROTHS, 10)),
- //new Task(Tasks.WALL_BEASTS,6),
+ // new Task(Tasks.WALL_BEASTS,6, new Integer[]{10, 20}),
+ // new Task(Tasks.WARPED_TERROR_BIRD, 5),
+ // new Task(Tasks.WARPED_TORTOISE, 5)
- SUMONA(7780, 90, 35, new int[]{50, 185}, new int[]{12, 60, 180},
+ SUMONA(7780, 85, 35, new int[]{120, 185}, new int[]{12, 60, 180},
new Task(Tasks.ABERRANT_SPECTRES, 15),
new Task(Tasks.ABYSSAL_DEMONS, 10),
- new Task(Tasks.AVIANSIES, 7),
+ new Task(Tasks.AVIANSIES, 10),
new Task(Tasks.BANSHEE, 15),
new Task(Tasks.BASILISKS, 15),
new Task(Tasks.BLACK_DEMONS, 10),
- new Task(Tasks.BLOODVELDS, 10),
new Task(Tasks.BLUE_DRAGONS, 5),
+ new Task(Tasks.BLOODVELDS, 10),
new Task(Tasks.CAVE_CRAWLERS, 15),
new Task(Tasks.CAVE_HORRORS, 15),
- new Task(Tasks.CROCODILES, 4),
new Task(Tasks.DAGANNOTHS, 10),
- new Task(Tasks.DESERT_LIZARDS, 4),
new Task(Tasks.DUST_DEVILS, 15),
- new Task(Tasks.ELVES, 10),
+ new Task(Tasks.ELVES, 10, new Integer[]{60, 90}),
new Task(Tasks.FIRE_GIANTS, 10),
new Task(Tasks.GARGOYLES, 10),
new Task(Tasks.GREATER_DEMONS, 10),
new Task(Tasks.HELLHOUNDS, 10),
- new Task(Tasks.IRON_DRAGONS, 7),
+ new Task(Tasks.IRON_DRAGONS, 7, new Integer[]{30, 60}),
new Task(Tasks.KALPHITES, 10),
new Task(Tasks.KURASKS, 15),
new Task(Tasks.NECHRYAELS, 10),
- // newTask(Tasks.RED_DRAGONS, 5),
- new Task(Tasks.SCORPIONS, 4),
+ new Task(Tasks.RED_DRAGONS, 5),
+ // new Task(Tasks.SCABARITES, 9, new Integer[]{30, 60}),
new Task(Tasks.SPIRTUAL_MAGES, 10),
new Task(Tasks.SPIRTUAL_WARRIORS, 10),
- // new Task(Tasks.TERROR_DOGS, 10),
+ // new Task(Tasks.TERROR_DOGS, 10, new Integer[]{30, 60}),
new Task(Tasks.TROLLS, 10),
- new Task(Tasks.TUROTHS, 15),
- new Task(Tasks.VAMPIRES, 10)),
- //new Task(Tasks.WARPED_TORTOISE, 15)),
+ new Task(Tasks.TUROTHS, 15)),
+ // new Task(Tasks.WARPED_TORTOISE, 15)),
- DURADEL(8275, 100, 50, new int[]{50, 199}, new int[]{15, 75, 225},
+ DURADEL(8275, 100, 50, new int[]{130, 200}, new int[]{15, 75, 225},
new Task(Tasks.ABERRANT_SPECTRES,7),
new Task(Tasks.ABYSSAL_DEMONS,12),
- new Task(Tasks.ANKOU,5),
- new Task(Tasks.AVIANSIES,8),
- new Task(Tasks.BLACK_DEMONS,8),
- new Task(Tasks.BLACK_DRAGONS,9),
+ new Task(Tasks.AVIANSIES, 10),
+ new Task(Tasks.BLACK_DEMONS,8),
+ new Task(Tasks.BLACK_DRAGONS,9, new Integer[]{40, 80}),
new Task(Tasks.BLOODVELDS,8),
- new Task(Tasks.BLUE_DRAGONS,4),
- new Task(Tasks.CAVE_HORRORS,4),
- new Task(Tasks.DAGANNOTHS,9),
+ new Task(Tasks.DAGANNOTHS,9),
new Task(Tasks.DARK_BEASTS,11),
new Task(Tasks.DUST_DEVILS,5),
- new Task(Tasks.ELVES,4),
- new Task(Tasks.FIRE_GIANTS,7),
+ new Task(Tasks.FIRE_GIANTS,7),
new Task(Tasks.GARGOYLES,8),
+ new Task(Tasks.GORAKS,9),
new Task(Tasks.GREATER_DEMONS,9),
new Task(Tasks.HELLHOUNDS, 10),
- new Task(Tasks.IRON_DRAGONS,5),
+ new Task(Tasks.IRON_DRAGONS,5, new Integer[]{40, 80}),
new Task(Tasks.KALPHITES,9),
- new Task(Tasks.KURASKS,4),
- new Task(Tasks.MITHRIL_DRAGONS,9),
+ new Task(Tasks.MITHRIL_DRAGONS,9, new Integer[]{4, 8}),
new Task(Tasks.NECHRYAELS,9),
- //new Task(Tasks.RED_DRAGONS,8),
- new Task(Tasks.SKELETAL_WYVERN,7),
+ // new Task(Tasks.SCABARITES, 9, new Integer[]{40, 80}),
+ new Task(Tasks.SKELETAL_WYVERN,7, new Integer[]{40, 80}),
new Task(Tasks.SPIRTUAL_MAGES,2),
- new Task(Tasks.SPIRTUAL_RANGERS,2),
- new Task(Tasks.SPIRTUAL_WARRIORS,2),
- new Task(Tasks.STEEL_DRAGONS,7),
- new Task(Tasks.SUQAHS,8),
- new Task(Tasks.TROLLS,6),
- new Task(Tasks.TZHAAR, 10),
- new Task(Tasks.VAMPIRES,8),
- // new Task(Tasks.WARPED_TERRORBIRD,8),
+ new Task(Tasks.STEEL_DRAGONS,7, new Integer[]{40, 80}),
+ new Task(Tasks.SUQAHS,8, new Integer[]{40, 80}),
+ // new Task(Tasks.WARPED_TERROR_BIRD,8),
new Task(Tasks.WATERFIENDS,2));
- //new Task(Tasks.MUTATED_ZYGOMITES,2),
- //Boss Tasks below this point - Crash
- //new Task(Tasks.JAD, 1),
- //new Task(Tasks.COMMANDER_ZILYANA,1),
- //new Task(Tasks.CHAOS_ELEMENTAL, 1),
- //new Task(Tasks.GENERAL_GRARDOOR,1),
- //new Task(Tasks.GIANT_MOLE,1),
- //new Task(Tasks.KING_BLACK_DRAGON,1),
- //new Task(Tasks.KRIL_TSUTSAROTH,1),
- //new Task(Tasks.KREE_ARRA,1));
- private static HashMap idMap = new HashMap<>();
+ private static final HashMap idMap = new HashMap<>();
static{
Arrays.stream(Master.values()).forEach(m -> idMap.putIfAbsent(m.npc_id, m));
}
- int npc_id,required_combat,required_slayer;
- public int[] assignment_range;
- int[] streakPoints;
- public List tasks;
- Master(int npc_id, int required_combat, int required_slayer, int[] assignment_range, int[] streakPoints, Task... tasks) {
+ final int npc_id;
+ final int required_combat;
+ final int required_slayer;
+ public final int[] default_assignment_range;
+ final int[] streakPoints;
+ public final List tasks;
+ Master(int npc_id, int required_combat, int required_slayer, int[] default_assignment_range, int[] streakPoints, Task... tasks) {
this.npc_id = npc_id;
this.required_combat = required_combat;
this.required_slayer = required_slayer;
- this.assignment_range = assignment_range;
+ this.default_assignment_range = default_assignment_range;
this.streakPoints = streakPoints;
this.tasks = new ArrayList<>(Arrays.asList(tasks));
}
@@ -301,9 +273,17 @@ public enum Master {
public static class Task{
public Tasks task;
public Integer weight;
- Task(Tasks task, Integer weight){
+ public Integer[] task_range;
+ public Task(Tasks task, Integer weight){
this.task = task;
this.weight = weight;
+ this.task_range = new Integer[]{null, null};
+ }
+
+ Task(Tasks task, Integer weight, Integer[] task_range){
+ this.task = task;
+ this.weight = weight;
+ this.task_range = task_range;
}
}
}
diff --git a/Server/src/main/content/global/skill/slayer/MogreNPC.kt b/Server/src/main/content/global/skill/slayer/MogreNPC.kt
new file mode 100644
index 000000000..c1f5fce49
--- /dev/null
+++ b/Server/src/main/content/global/skill/slayer/MogreNPC.kt
@@ -0,0 +1,33 @@
+package content.global.skill.slayer
+
+import core.game.node.entity.Entity
+import core.game.node.entity.npc.AbstractNPC
+import core.game.world.map.Location
+import org.rs09.consts.NPCs
+
+/**
+ * Represents a mogre npc.
+ * @author 'Vexia
+ * @author gregf36665
+ * @version 2.0
+ */
+class MogreNPC : AbstractNPC(NPCs.MOGRE_114, null) {
+
+ override fun tick() {
+ super.tick()
+ val victim = properties.combatPulse.getVictim()
+ if (victim != null) {
+ if (victim.location.getDistance(getLocation()) > 15) {
+ clear()
+ }
+ }
+ }
+
+ override fun construct(id: Int, location: Location?, vararg objects: Any?): AbstractNPC {
+ return MogreNPC()
+ }
+
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.MOGRE_114)
+ }
+}
diff --git a/Server/src/main/content/global/skill/slayer/SlayerEquipmentFlags.kt b/Server/src/main/content/global/skill/slayer/SlayerEquipmentFlags.kt
index c953bf9de..e8c5e01e6 100644
--- a/Server/src/main/content/global/skill/slayer/SlayerEquipmentFlags.kt
+++ b/Server/src/main/content/global/skill/slayer/SlayerEquipmentFlags.kt
@@ -72,7 +72,7 @@ object SlayerEquipmentFlags {
val isCape = SlayerManager.getInstance(player).flags.equipmentFlags == 0x3F
val hasMask = hasBlackMask(player)
- return if(hasMask) 1.15
+ return if(hasMask) 1.1667
else if(isCape) 1.075
else 1.0
}
diff --git a/Server/src/main/content/global/skill/slayer/SlayerManager.kt b/Server/src/main/content/global/skill/slayer/SlayerManager.kt
index 5542a7777..f0ff71ed5 100644
--- a/Server/src/main/content/global/skill/slayer/SlayerManager.kt
+++ b/Server/src/main/content/global/skill/slayer/SlayerManager.kt
@@ -13,6 +13,8 @@ import org.json.simple.JSONObject
import java.util.*
import org.rs09.consts.Items
+import content.global.skill.hunter.HunterNPC
+
/**
* Manages the players slayer data.
* @author Ceikry
@@ -101,9 +103,13 @@ class SlayerManager(val player: Player? = null) : LoginListener, PersistPlayer,
val player = entity as? Player ?: return
val slayer = getInstance(player)
val flags = slayer.flags
+ var xp = npc.skills.maximumLifepoints.toDouble()
+ //Snowscape custom: grant a third of the normal slayer exp on all kills (this stacks with the exp from on-task kills)
+ if (npc !is HunterNPC)
+ rewardXP(player, Skills.SLAYER, xp/3)
if (slayer.hasTask() && npc.id in slayer.task!!.npcs) {
- var xp = npc.skills.maximumLifepoints.toDouble()
+
if (slayer.task!!.dragon && inEquipment(player, Items.DRAGON_SLAYER_GLOVES_12862)) {
xp *= 1.15
FOGGlovesManager.updateCharges(player)
diff --git a/Server/src/main/content/global/skill/slayer/SlayerMasterDialogue.java b/Server/src/main/content/global/skill/slayer/SlayerMasterDialogue.java
index 25f059d22..cb6aa6570 100644
--- a/Server/src/main/content/global/skill/slayer/SlayerMasterDialogue.java
+++ b/Server/src/main/content/global/skill/slayer/SlayerMasterDialogue.java
@@ -15,7 +15,9 @@ import core.game.node.entity.player.link.quest.Quest;
import core.game.node.item.Item;
import core.plugin.Initializable;
+
import static core.tools.DialogueConstKt.END_DIALOGUE;
+import content.data.Quests;
/**
* Represents the dialogue plugin used for a slayer master.
@@ -98,7 +100,7 @@ public final class SlayerMasterDialogue extends DialoguePlugin {
npc = (NPC) args[0];
}
master = Master.forId(args[0] instanceof NPC ? ((NPC) args[0]).getId() : (int) args[0]);
- quest = player.getQuestRepository().getQuest("Animal Magnetism");
+ quest = player.getQuestRepository().getQuest(Quests.ANIMAL_MAGNETISM);
if (master == Master.DURADEL) {
if (Skillcape.isMaster(player, Skills.SLAYER)) {
@@ -349,7 +351,7 @@ public final class SlayerMasterDialogue extends DialoguePlugin {
if (player.getInventory().freeSlots() != 0) {
player.getInventory().add(GEM);
SlayerManager.getInstance(player).generate(master);
- interpreter.sendDialogues(master.getNpc(), getExpression(master), "We'll start you off hunting " + SlayerManager.getInstance(player).getTaskName() + "'s, you'll need to", "kill " + SlayerManager.getInstance(player).getAmount() + " of them.");
+ interpreter.sendDialogues(master.getNpc(), getExpression(master), "We'll start you off hunting " + SlayerUtils.pluralise(SlayerManager.getInstance(player).getTaskName()) + ", you'll need to", "kill " + SlayerManager.getInstance(player).getAmount() + " of them.");
stage = 510;
} else if (player.getInventory().freeSlots() == 0) {
player("Sorry, I don't have enough inventory space.");
@@ -485,7 +487,7 @@ public final class SlayerMasterDialogue extends DialoguePlugin {
if (SlayerManager.getInstance(player).getTask() == Tasks.JAD) {
interpreter.sendDialogues(master.getNpc(), getExpression(master), "Excellent, you're doing great. Your new task is to", "defeat the almighty TzTok-Jad.");
} else {
- interpreter.sendDialogues(master.getNpc(), getExpression(master), "Excellent, you're doing great. Your new task is to kill", "" + SlayerManager.getInstance(player).getAmount() + " " + SlayerManager.getInstance(player).getTaskName() + "s.");
+ interpreter.sendDialogues(master.getNpc(), getExpression(master), "Excellent, you're doing great. Your new task is to kill", "" + SlayerManager.getInstance(player).getAmount() + " " + SlayerUtils.pluralise(SlayerManager.getInstance(player).getTaskName()) + ".");
}
stage = 844;
break;
@@ -499,7 +501,7 @@ public final class SlayerMasterDialogue extends DialoguePlugin {
if (SlayerManager.getInstance(player).getTask() == Tasks.JAD) {
interpreter.sendDialogues(master.getNpc(), getExpression(master), "Excellent, you're doing great. Your new task is to", "defeat the almighty TzTok-Jad.");
} else {
- interpreter.sendDialogues(master.getNpc(), getExpression(master), "Excellent, you're doing great. Your new task is to kill", "" + SlayerManager.getInstance(player).getAmount() + " " + SlayerManager.getInstance(player).getTaskName() + "'s.");
+ interpreter.sendDialogues(master.getNpc(), getExpression(master), "Excellent, you're doing great. Your new task is to kill", "" + SlayerManager.getInstance(player).getAmount() + " " + SlayerUtils.pluralise(SlayerManager.getInstance(player).getTaskName()) + ".");
}
stage = 844;
}
diff --git a/Server/src/main/content/global/skill/slayer/SlayerPlugin.java b/Server/src/main/content/global/skill/slayer/SlayerPlugin.java
index 35d6a4544..53e426aa3 100644
--- a/Server/src/main/content/global/skill/slayer/SlayerPlugin.java
+++ b/Server/src/main/content/global/skill/slayer/SlayerPlugin.java
@@ -12,6 +12,7 @@ import core.plugin.Initializable;
import core.plugin.Plugin;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
/**
* Handles related slayer nodes.
@@ -27,7 +28,6 @@ public class SlayerPlugin extends OptionHandler {
@Override
public Plugin newInstance(Object arg) throws Throwable {
- SceneryDefinition.forId(8783).getHandlers().put("option:open", this);
SceneryDefinition.forId(8785).getHandlers().put("option:climb-up", this);
SceneryDefinition.forId(23158).getHandlers().put("option:exit", this);
SceneryDefinition.forId(23157).getHandlers().put("option:exit", this);
@@ -52,9 +52,6 @@ public class SlayerPlugin extends OptionHandler {
@Override
public boolean handle(Player player, Node node, String option) {
switch (node.getId()) {
- case 8783:
- player.teleport(new Location(2044, 4649, 0));
- break;
case 8785:
player.teleport(new Location(2543, 3327, 0));
break;
@@ -63,7 +60,7 @@ public class SlayerPlugin extends OptionHandler {
player.teleport(new Location(2729, 3733, 0));
break;
case 15767:
- if (!hasRequirement(player, "Cabin Fever"))
+ if (!hasRequirement(player, Quests.CABIN_FEVER))
return true;
player.teleport(new Location(3748, 9373, 0));
break;
diff --git a/Server/src/main/content/global/skill/slayer/SlayerRewardPlugin.java b/Server/src/main/content/global/skill/slayer/SlayerRewardPlugin.java
index 84d54b18d..247e87b82 100644
--- a/Server/src/main/content/global/skill/slayer/SlayerRewardPlugin.java
+++ b/Server/src/main/content/global/skill/slayer/SlayerRewardPlugin.java
@@ -17,6 +17,7 @@ import core.plugin.Plugin;
import core.plugin.ClassScanner;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
/**
* Handles the slayer reward interface plugin.
@@ -309,7 +310,7 @@ public class SlayerRewardPlugin extends ComponentPlugin {
@Override
public boolean handle(Player player, Node node, String option) {
- if (!hasRequirement(player, "Smoking Kills"))
+ if (!hasRequirement(player, Quests.SMOKING_KILLS))
return true;
openTab(player, BUY);
return true;
diff --git a/Server/src/main/content/global/skill/slayer/SlayerUtils.kt b/Server/src/main/content/global/skill/slayer/SlayerUtils.kt
index 34fc944c1..c034fc557 100644
--- a/Server/src/main/content/global/skill/slayer/SlayerUtils.kt
+++ b/Server/src/main/content/global/skill/slayer/SlayerUtils.kt
@@ -1,19 +1,16 @@
package content.global.skill.slayer
+import core.api.setVarp
import core.game.node.entity.combat.BattleState
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.SpellBookManager.SpellBook
import core.game.node.entity.player.link.diary.DiaryType
import core.game.node.entity.skill.Skills
-import content.global.skill.slayer.Master
-import content.global.skill.slayer.Tasks
import core.tools.RandomFunction
import org.rs09.consts.Items
-import java.util.ArrayList
-import core.api.*
object SlayerUtils {
- fun generate(player: Player, master: Master): Tasks?
+ fun generate(player: Player, master: Master): Master.Task?
{
val tasks: MutableList = ArrayList(10)
val taskWeightSum = intArrayOf(0)
@@ -24,7 +21,7 @@ object SlayerUtils {
tasks.shuffle(RandomFunction.RANDOM)
var rnd = RandomFunction.random(taskWeightSum[0])
for (task in tasks) {
- if (rnd < task!!.weight) return task.task
+ if (rnd < task!!.weight) return task
rnd -= task.weight
}
return null
@@ -35,11 +32,14 @@ object SlayerUtils {
return player.getSkills().getLevel(Skills.SLAYER) >= task.levelReq && !SlayerManager.getInstance(player).flags.removed.contains(task) && task.hasQuestRequirements(player)
}
- fun assign(player: Player, task: Tasks, master: Master)
+ fun assign(player: Player, task: Master.Task, master: Master)
{
SlayerManager.getInstance(player).master = master
- SlayerManager.getInstance(player).task = task
- SlayerManager.getInstance(player).amount = RandomFunction.random(master.assignment_range[0], master.assignment_range[1])
+ SlayerManager.getInstance(player).task = task.task
+ if (task.task_range[0] == null)
+ SlayerManager.getInstance(player).amount = RandomFunction.random(master.default_assignment_range[0], master.default_assignment_range[1])
+ else
+ SlayerManager.getInstance(player).amount = RandomFunction.random(task.task_range[0], task.task_range[1])
if (master == Master.DURADEL) {
player.achievementDiaryManager.finishTask(player, DiaryType.KARAMJA, 2, 8)
} else if (master == Master.VANNAKA) {
@@ -57,4 +57,24 @@ object SlayerUtils {
.spellBook == SpellBook.MODERN.interfaceId
)
}
+
+ @JvmStatic
+ fun pluralise(str: String): String {
+ return when (str) {
+ "black bear" -> "bears"
+ "cyclops" -> "cyclopes"
+ "guard dog" -> "dogs"
+ "dwarf" -> "dwarves"
+ "elf warrior" -> "elves"
+ "jelly" -> "jellies"
+ "nechryael" -> str // the plural and singular is the same
+ "turoth" -> str // the plural and singular is the same
+ "tzhaar-mej" -> "tzHaar"
+ "werewolf" -> "werewolves"
+ "wolf" -> "wolves"
+ "kalphite worker" -> "kalphites"
+ "scarab swarm" -> "scabarites"
+ else -> str + "s"
+ }
+ }
}
diff --git a/Server/src/main/content/global/skill/slayer/Tasks.java b/Server/src/main/content/global/skill/slayer/Tasks.java
index 76f8c4fce..81a195f5a 100644
--- a/Server/src/main/content/global/skill/slayer/Tasks.java
+++ b/Server/src/main/content/global/skill/slayer/Tasks.java
@@ -8,104 +8,132 @@ import java.util.HashMap;
import core.game.node.entity.player.Player;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
/**
* A non-garbage way of representing tasks
+ * Slayer level source: ...
+ * Combat level source: None
* @author ceik
+ * @author gregf
*/
public enum Tasks {
- ABERRANT_SPECTRES(65, new int[] { 1604, 1605, 1606, 1607, 7801, 7802, 7803, 7804 }, new String[] { "Aberrant spectres have an extremely potent stench that drains", "stats and life points. A nose peg, protects against the stench." }, 60, true, false),
- ABYSSAL_DEMONS(85, new int[] { 1615, 4230 }, new String[] { "Abyssal Demons are nasty creatures to deal with, they aren't really part, ", "of this realm, and are able to move very quickly to trap their prey"}, 85, false, false),
- ANKOU(40, new int[] { 4381, 4382, 4383 }, new String[] { "Neither skeleton nor ghost, but a combination of both." }, 1, true, false),
- AVIANSIES(60, new int[] { 6245, 6243, 6235, 6232, 6244, 6246, 6233, 6241, 6238, 6237, 6240, 6242, 6239, 6234 }, new String[] { "Graceful, bird-like creature." }, 1, false, false),
- BANSHEE(20, new int[] { 1612 }, new String[] { "Banshees use a piercing scream to shock their enemies", "you'll need some Earmuffs to protect yourself from them." }, 15, true, false),
- BASILISKS(40, new int[] { 1616, 1617, 4228 }, new String[] { "A mirror shield is much necessary when hunting", "these mad creatures." }, 40, false, false),
- BATS(5, new int[] { 412, 78, 1005, 2482, 3711, }, new String[] { "These little creatures are incredibly quick.", "make sure you keep your eye on them at all times." }, 1, false, false),
- BEARS(13, new int[] { 106, 105, 1195, 3645, 3664, 1326, 1327 }, new String[] { "A large animal with a crunching punch." }, 1, false, false),
- BIRDS(1, new int[] { 1475, 5120, 5121, 5122, 5123, 5133, 1475, 1476, 41, 951, 1017, 1401, 1402, 2313, 2314, 2315, 1016, 1550, 147, 1180, 1754, 1755, 1756, 2252, 4570, 4571, 1911, 6114, 46, 2693, 6113, 6112, 146, 149, 150, 450, 451, 1179, 1322, 1323, 1324, 1325, 1400, 2726, 2727, 3197, 138, 48, 4373, 4374, 4535, 139, 1751, 148, 1181, 6382, 2459, 2460, 2461, 2462, 2707, 2708, 6115, 6116, 3296, 6378, 1996, 3675, 3676, 6792, 6946, 7320, 7322, 7324, 7326, 7328, 1692, 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6322, 6323, 6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 6332, 3476, 1018, 1403, }, new String[] { "Birds aren't the most intelligent of creatures, but watch out for their", "sharp, stabbing beaks." }, 1, false, false),
- BLACK_DEMONS(80, new int[] { 84, 677, 4702, 4703, 4704, 4705, 6208, }, new String[] { "Black Demons are magic creatures that are weak to magic attacks.", "They're the strongest demon and very dangerous." }, 1, false, false),
- BLACK_DRAGONS(80, new int[] {54, 4673, 4674, 4675, 4676, 3376, 50 }, new String[] { "Black dragons are the strongest dragons", "watch out for their fiery breath" }, 1, false, true, 40 | 80 << 16),
- BLOODVELDS(50, new int[] { 1618, 1619, 6215, 7643, 7642 }, new String[] { "Bloodvelds are strange demonic creatures, they use their long rasping tongue", "to feed on just about anything they can find." }, 50, false, false),
- BLUE_DRAGONS(65, new int[] { 55, 4681, 4682, 4683, 4684, 5178, 52, 4665, 4666, }, new String[] { "Blue dragons aren't as strong as other dragons but they're still", "very powerful, watch out for their fiery breath." }, 1, false, true),
- BRINE_RATS(45, new int[] { 3707 }, new String[] { "Small little creatures they are, yet so very", "powerful." }, 47, false, false),
- BRONZE_DRAGONS(75, new int[] { 1590 }, new String[] { "Bronze dragons aren't as strong as other dragons but they're still", "very powerful, watch out for their fiery breath." }, 1, false, true, 30 | 60 << 16),
- CATABLEPONS(35, new int[] { 4397, 4398, 4399, }, new String[] { "They use the magic spell Weaken to drain up to 15% of their", "opponent's maximum Strength level." }, 1, false, false),
- CAVE_BUG(1, new int[] { 1832, 5750, }, new String[] { "It regenerates life points quickly and seems to be a good", "herblore monster." }, 7, false, false),
- CAVE_CRAWLERS(10, new int[] { 1600, 1601, 1602, 1603, }, new String[] { "The poisonous parts of them are presumably removed." }, 10, false, false),
- CAVE_HORRORS(85, new int[] { 4353, 4354, 4355, 4356, 4357, }, new String[] { "A Cave horror wears a creepy mask, it is", "preferred to wear a witchwood icon." }, 58, "Cabin Fever"),
- CAVE_SLIMES(15, new int[] { 1831 }, new String[] { "These are lesser versions of jellies, watch out they can poison you." }, 17, false, false),
- COCKATRICES(25, new int[] { 1620, 1621, 4227, }, new String[] { "A Mirror shield is necessary when", "fighting these monsters." }, 25, false, false),
- COWS(5, new int[] { 1766, 1768, 2310, 81, 397, 955, 1767, 3309 }, new String[] { "Cow's may seem stupid, however they know more then", "you think. Don't under estimate them." }, 1, false, false),
+ ABERRANT_SPECTRES(65, new int[] { 1604, 1605, 1606, 1607, 7801, 7802, 7803, 7804 }, new String[] { "Aberrant Spectres are fetid, vile ghosts. The very", "smell of them will paralyse and harm you. A nose peg", "will help ignore their stink." }, 60, true, false),
+ ABYSSAL_DEMONS(85, new int[] { 1615 }, new String[] { "Abyssal Demons are nasty creatures to fight. They", "aren't really part of this realm, and are able to", "move very quickly to trap their prey."}, 85, false, false),
+ ANKOU(40, new int[] { 4381, 4382, 4383 }, new String[] { "Ankou are undead skeletal ghosts. They'll fight you", "up close but make sure to take advantage out of their", "limited defence." }, 1, true, false),
+ AVIANSIES(60, new int[] { 6245, 6243, 6235, 6232, 6244, 6246, 6233, 6241, 6238, 6237, 6240, 6242, 6239, 6234 }, new String[] { "Aviansies are bird-like creatures found in the icy", "dungeons of the north. Melee weapons can't reach them,", "so use Magic or Ranged attacks." }, 1, false, false),
+ BANSHEE(20, new int[] { 1612 }, new String[] { "Banshees use a piercing scream to shock their enemies.", "You'll need some earmuffs to protect yourself from them." }, 15, true, false),
+ BASILISKS(40, new int[] { 1616, 1617 }, new String[] { "Basilisks, like Cockatrice, have a gaze which will", "paralyse and harm their prey. You'll need a Mirror", "Shield to protect you." }, 40, false, false),
+ BATS(5, new int[] { 412, 78, 3711 }, new String[] { "Bats are rarely found on the ground, so you'll have", "to fight them while they're airborne, which won't be", "easy for melee." }, 1, false, false),
+ BEARS(13, new int[] { 106, 105, 1195, 3645, 3664, 1326, 1327 }, new String[] { "Bears are tough creatures and fierce fighters, watch", "out for their powerful claws." }, 1, false, false),
+ BIRDS(1, new int[] { 1475, 5120, 5121, 5122, 5123, 5133, 1475, 1476, 41, 951, 1017, 1401, 1402, 2313, 2314, 2315, 1016, 1550, 147, 1180, 1754, 1755, 1756, 2252, 4570, 4571, 1911, 6114, 46, 2693, 6113, 6112, 146, 149, 150, 450, 451, 1179, 1322, 1323, 1324, 1325, 1400, 2726, 2727, 3197, 138, 48, 4373, 4374, 4535, 139, 1751, 148, 1181, 6382, 2459, 2460, 2461, 2462, 2707, 2708, 6115, 6116, 3296, 6378, 1996, 3675, 3676, 6792, 6946, 7320, 7322, 7324, 7326, 7328, 1692, 6322, 3476, 1018, 1403, }, new String[] { "Birds aren't the most intelligent of creatures, but", "watch out for their sharp stabbing beaks." }, 1, false, false),
+ BLACK_DEMONS(80, new int[] { 84, 677, 4702, 4703, 4704, 4705, 6208, }, new String[] { "Black Demons are magic creatures that are weak", "to magic attacks. They're a very strong", "demon and very dangerous." }, 1, false, false),
+ BLACK_DRAGONS(80, new int[] {54, 4673, 4674, 4675, 4676, 3376, 50 }, new String[] { "Black dragons are the strongest dragons;", "watch out for their fiery breath." }, 1, false, true),
+ BLOODVELDS(50, new int[] { 1618, 1619, 6215, 7643, 7642 }, new String[] { "Bloodvelds are strange demonic creatures, they use their", "long rasping tongue to feed on just about", "anything they can find." }, 50, false, false),
+ BLUE_DRAGONS(65, new int[] { 55, 4681, 4682, 4683, 4684, 5178, 52, 4665, 4666, }, new String[] { "Blue dragons aren't as strong as other dragons but they're", "still very powerful, watch out for their fiery breath." }, 1, false, true),
+ BRINE_RATS(45, new int[] { 3707 }, new String[] { "Brine rats can be found in caves that are near the", "sea. They are hairless, bad-tempered and generally", "unfriendly." }, 47, Quests.OLAFS_QUEST),
+ BRONZE_DRAGONS(75, new int[] { 1590 }, new String[] { "Bronze Dragons are the weakest of the metallic", "dragons, their bronze scales are far thicker than", "normal bronze armour." }, 1, false, true),
+ CATABLEPONS(35, new int[] { 4397, 4398, 4399, }, new String[] { "Catablepon are mythical, cow like, magical creatures", "Beware their weakening glare." }, 1, false, false),
+ CAVE_BUG(1, new int[] { 1832, 5750, }, new String[] { "Cave Bugs are like Cave Crawlers, except smaller and", "easier to squish, though they still have a fondness", "for plants." }, 7, false, false),
+ CAVE_CRAWLERS(10, new int[] { 1600, 1601, 1602, 1603, }, new String[] { "Cave Crawlers are small and fast, often hiding in", "ambush. Avoid their barbed tongue or you'll", "get poisoned." }, 10, false, false),
+ CAVE_HORRORS(85, new int[] { 4353, 4354, 4355, 4356, 4357, }, new String[] { "Cave Horrors can be found under Mos Le'Harmless. You", "will need a Witchwood Icon to fight them effectively." }, 58, Quests.CABIN_FEVER),
+ CAVE_SLIMES(15, new int[] { 1831 }, new String[] { "Cave Slimes are the lesser cousins of Jellies, though", "don't be fooled they can still be dangerous as", "they're often poisonous." }, 17, false, false),
+ COCKATRICES(25, new int[] { 1620, 1621, 4227, }, new String[] { "Cockatrice, like Basilisks, have a gaze which will", "paralyse and harm their prey. You'll need a Mirror", "Shield to protect you." }, 25, false, false),
+ COWS(5, new int[] { 81, 1766, 1768, 2310, 397, 955, 1767, 3309 }, new String[] { "Cows are bigger than you, so they'll often hit fairly", "hard but are usually fairly slow to react." }, 1, false, false),
CRAWLING_HAND(1,new int[] { 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 4226, 7640, 7641 }, new String[] { "Crawling Hands are undead severed hands, fast and", "dexterous they claw their victims." }, 5, true, false),
- CROCODILES(50, new int[] { 1993, 6779 }, new String[] { "Crocodiles can be found near water and marshes in and near the Kharidian Desert." }, 1, false, false),
- CYCLOPES(25,new int[] { 116, 4291, 4292, 6078, 6079, 6080, 6081, 6269, 6270 }, new String[] { "Large one eyed creatures who normally wield a", "large mallet." }, 1, false, false),
- DAGANNOTHS(75, new int[] { 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 2454, 2455, 2456, 2881, 2882, 2883, 2887, 2888, 3591, }, new String[] { "There are many types of Dagannoth, the most powerful being the three Dagannoth Kings." }, 1, false, false),
- DARK_BEASTS(90, new int[] { 2783 }, new String[] { "A dark beast can attack using magic or melee." }, 90, false, false),
- DESERT_LIZARDS(15, new int[] { 2803, 2804, 2805, 2806, 2807 }, new String[] { "Desert lizards are big Slayer monsters found in the Kharidian Desert." }, 22, false, false),
- DOG(15, new int[] { 99, 3582, 6374, 1994, 1593, 1594, 3582 }, new String[] { "Dogs are much like Wolves, they are", "pack creatures which will hunt in groups." }, 1, false, false),
+ CROCODILES(50, new int[] { 1993, 6779 }, new String[] { "Crocodiles are large reptiles which live near water.", "You'll want to have a stabbing weapon handy for", "puncturing their thick scaly hides." }, 1, false, false),
+ DAGANNOTHS(75, new int[] { 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 2454, 2455, 2456, 2881, 2882, 2883, 2887, 2888, 3591, }, new String[] { "Dagannoth are large sea dwelling creatures which are", "very aggressive. You'll often find them in caves", "near sea water." }, 1, Quests.HORROR_FROM_THE_DEEP),
+ DARK_BEASTS(90, new int[] { 2783 }, new String[] { "Dark Beasts are large, dog-like predators.", "Their massively muscled bodies protect", "them from crushing weapons." }, 90, Quests.MOURNINGS_END_PART_II),
+ DESERT_LIZARDS(15, new int[] { 2803, 2804, 2805, 2806, 2807, 2808 }, new String[] { "Lizards are large reptiles with tough skin. Those", "found in the desert will need you to douse them with", "freezing water to finish them off after a tough battle." }, 22, false, false),
+ DOG(15, new int[] { 99, 3582, 1994, 1593, 1594, 3582 }, new String[] { "Dogs are much like Wolves, they are", "pack creatures which will hunt in groups." }, 1, false, false),
DUST_DEVILS(70, new int[] { 1624 }, new String[] { "Dust Devils use clouds of dust, sand, ash and whatever", "else they can inhale to blind and disorientate", "their victims." }, 65, false, false),
- DWARF(6, new int[] { 118, 120, 121, 382, 3219, 3220, 3221, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3294, 3295, 4316, 5880, 5881, 5882, 5883, 5884, 5885, 2130, 2131, 2132, 2133, 3276, 3277, 3278, 3279, 119, 2423 }, new String[] { "They are slightly resistant to Magic attacks", "and are not recommended for low levels." }, 1, false, false),
- EARTH_WARRIORS(35, new int[] { 124 }, new String[] { "An Earth warrior is a monster made of earth"," which fights using melee." }, 1, false, false),
- ELVES(70, new int[] { 1183, 1184, 2359, 2360, 2361, 2362, 7438, 7439, 7440, 7441 }, new String[]{"Elves are agile creatures."}, 1, false, false),
- FIRE_GIANTS(65, new int[] { 110, 1582, 1583, 1584, 1585, 1586, 7003, 7004 }, new String[] { "Like other giants, Fire Giants often wield large weapons", "learn to recognise what kind of weapon it is, and act accordingly." }, 1, false, false),
- FLESH_CRAWLERS(15, new int[] { 4389, 4390, 4391 }, new String[] { "Flesh crawlers are medium level monsters found on", "level 2 of the Stronghold of Security." }, 1, false, false),
- GARGOYLES(80, new int[] { 1610, 1611, 6389 }, new String[] { "Gargoyles are winged creatures of stone. You'll need to fight them to", "near death before breaking them apart with a rock hammer." }, 75, false, false),
- GHOSTS(13, new int[] { 103, 104, 491, 1541, 1549, 2716, 2931, 4387, 388, 5342, 5343, 5344, 5345, 5346, 5347, 5348, 1698, 5349, 5350, 5351, 5352, 5369, 5370, 5371, 5372, 5373, 5374, 5572, 6094, 6095, 6096, 6097, 6098, 6504, 13645, 13466, 13467, 13468, 13469, 13470, 13471, 13472, 13473, 13474, 13475, 13476, 13477, 13478, 13479, 13480, 13481 }, new String[] { "A Ghost is an undead monster that is found", "in various places and dungeons. " }, 1, false, false),
- GHOULS(25, new int[] { 1218, 3059 }, new String[] { "Ghouls are a humanoid race and the descendants of a long-dead society", "that degraded to the point that its people ate their dead." }, 1, false, false),
+ DWARF(6, new int[] { 118, 120, 121, 382, 3219, 3220, 3221, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3294, 3295, 4316, 5880, 5881, 5882, 5883, 5884, 5885, 2130, 2131, 2132, 2133, 3276, 3277, 3278, 3279, 119, 2423 }, new String[] { "Dwarves are a small but tough race of miners, often", "using pickaxes to pierce their opponents armour." }, 1, false, false),
+ EARTH_WARRIORS(35, new int[] { 124 }, new String[] { "Earth Warriors are a kind of earth elemental,", "grind them to dust with blunt weapons." }, 1, false, false),
+ ELVES(70, new int[] { 1183, 1184, 2359, 2360, 2361, 2362, 2373, 7438, 7439, 7440, 7441 }, new String[]{ "Elves are quick, agile, and vicious fighters which", "often favour bows and polearms."}, 1, Quests.REGICIDE),
+ // Waiting for either Rum Deal or Pirate Pete and Fever Spiders before adding this assignment
+ FEVER_SPIDER(1, new int[] { 2850 }, new String[] { "Fever Spiders are giant spiders that carry the deadly", "Spider Fever. If you don't want to catch it I suggest", "you wear Slayer Gloves to fight them." }, 42, Quests.RUM_DEAL),
+ FIRE_GIANTS(65, new int[] { 110, 1582, 1583, 1584, 1585, 1586, 7003, 7004 }, new String[] { "Like other giants, Fire Giants often wield large weapons", "learn to recognise what kind of weapon it is,", "and act accordingly." }, 1, false, false),
+ FLESH_CRAWLERS(15, new int[] { 4389, 4390, 4391 }, new String[] { "Flesh Crawlers are scavengers and will eat you - and", "anyone else, given the chance." }, 1, false, false),
+ GARGOYLES(80, new int[] { 1610, 6389 }, new String[] { "Gargoyles are winged creatures of stone. You'll need", "to fight them to near death before breaking them apart", "with a rock hammer." }, 75, false, false),
+ GHOSTS(13, new int[] { 103, 104, 491, 1541, 1549, 2716, 2931, 4387, 388, 5342, 5343, 5344, 5345, 5346, 5347, 5348, 1698, 5349, 5350, 5351, 5352, 5369, 5370, 5371, 5372, 5373, 5374, 5572, 6094, 6095, 6096, 6097, 6098, 6504, 13645, 13466, 13467, 13468, 13469, 13470, 13471, 13472, 13473, 13474, 13475, 13476, 13477, 13478, 13479, 13480, 13481 }, new String[] { "Ghosts are undead so magic is your best bet against", "them, there is even a spell specially for fighting", "the undead." }, 1, true, false),
+ GHOULS(25, new int[] { 1218, 3059 }, new String[] { "Ghouls aren't undead but they are stronger and", "tougher than they look. However they're also very", "cowardly and will run if they're losing a fight." }, 1, false, false),
GOBLINS(1, new int[] { 100, 101, 102, 444, 445, 489, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2678, 2679, 2680, 2681, 3060, 3264, 3265, 3266, 3267, 3413, 3414, 3415, 3726, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4407, 4408, 4409, 4410, 4411, 4412, 4479, 4480, 4481, 4482, 4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4499, 4633, 4634, 4635, 4636, 4637, 5786, 5824, 5855, 5856, 6125, 6126, 6132, 6133, 6279, 6280, 6281, 6282, 6283, 6402, 6403, 6404, 6405, 6406, 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6414, 6415, 6416, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 6460, 6461, 6462, 6463, 6464, 6465, 6466, 6467, 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497 }, new String[] { "Goblins are mostly just annoying, but they can be vicious.", "Watch out for the spears they sometimes carry." }, 1, false, false),
- GORAKS(70, new int[] { 4418, 6218 }, new String[] { "Goraks can be tough monsters to fight. Be prepared." }, 1, false, false),
- GREATER_DEMONS(75, new int[] { 83, 4698, 4699, 4700, 4701, 6204 }, new String[] { "Greater Demons are magic creatures so they are weak to magical attacks.", "They're the strongest demon and very dangerous." }, 1, false, false),
- GREEN_DRAGONS(52, new int[] { 941, 4677, 4678, 4679, 4680, 5362, 742 }, new String[] { "Green dragons are very powerful, they have fierce", "fiery breath." }, 1, false, true),
- HARPIE_BUG_SWARMS(45, new int[] { 3153 }, new String[] { "Harpie Bug Swarms are insectoid Slayer monsters." }, 33, false, false),
- HELLHOUNDS(75, new int[] { 49, 3586, 6210, }, new String[] { "Hellhounds are mid to high level demons." }, 1, false, false),
- HILL_GIANTS(25, new int[] { 117, 4689, 4690, 3058, 4691, 4692, 4693 }, new String[] { "Hill giants can hit up to 19 damage, and they only attack with Melee." }, 1, false, false),
- HOBGOBLINS(20, new int[] { 122, 123, 2685, 2686, 3061, 6608, 6642, 6661, 6684, 6710, 6722, 6727, 2687, 2688, 3583, 4898, 6275 }, new String[] { "Mysterious goblin like creatures." }, 1, false, false),
- ICE_FIENDS(20, new int[] { 3406, 6217, 7714, 7715, 7716 }, new String[] { "An Icefiend is a monster found on top of Ice Mountain." }, 1, false, false),
- ICE_GIANTS(50, new int[] { 111, 3072, 4685, 4686, 4687 }, new String[] { "Ice Giants often wield large weapons, learn to recognise", "what kind of weapon it is, and act accordingly" }, 1, false, false),
- ICE_WARRIOR(45, new int[] { 125, 145, 3073 }, new String[] { "Ice warriors, are cold majestic creatures." }, 1, false, false),
- INFERNAL_MAGES(40, new int[] { 1643, 1644, 1645, 1646, 1647 }, new String[] { "Infernal Mages are dangerous spell users, beware of their magic", "spells an go properly prepared" }, 45, false, false),
- IRON_DRAGONS(80, new int[] { 1591 }, new String[] { "Iron dragons aren't as strong as other dragons but they're still", "very powerful, watch out for their fiery breath." }, 1, false, true, 40 | 59 << 16),
+ GORAKS(70, new int[] { 4418, 6218 }, new String[] { "Goraks are extremely aggressive creatures. They have", "been imprisoned on an alternative plane, which is", "only accessible by using the fairyrings. Be extremely", "careful, their touch drains health as well as skills!" }, 1, Quests.FAIRYTALE_I_GROWING_PAINS),
+ GREATER_DEMONS(75, new int[] { 83, 4698, 4699, 4700, 4701, 6204 }, new String[] { "Greater Demons are magic creatures so they are weak", "to magical attacks. Though not the strongest demon,", "they are still dangerous." }, 1, false, false),
+ GREEN_DRAGONS(52, new int[] { 941, 4677, 4678, 4679, 4680, 5362, 742 }, new String[] { "Green Dragons are the weakest dragon but still very", "powerful, watch out for their fiery breath." }, 1, false, true),
+ HARPIE_BUG_SWARMS(45, new int[] { 3153 }, new String[] { "Harpie Bug Swarms are pesky critters that are hard to", "hit. You need a lit bug lantern to distract them with", "its hypnotic light." }, 33, false, false),
+ HELLHOUNDS(75, new int[] { 49, 3586, 6210, }, new String[] { "Hellhounds are a cross between Dogs and Demons, they", "are dangerous with a fierce bite." }, 1, false, false),
+ HILL_GIANTS(25, new int[] { 117, 4689, 4690, 3058, 4691, 4692, 4693 }, new String[] { "Hill Giants often wield large weapons, learn to", "recognise what kind of weapon it is and", "act accordingly." }, 1, false, false),
+ HOBGOBLINS(20, new int[] { 122, 123, 2685, 2686, 3061, 6608, 6642, 6661, 6684, 6710, 6722, 6727, 2687, 2688, 3583, 4898, 6275 }, new String[] { "Hobgoblins are sneaky underhanded creatures, they", "often wield spears and some times carry javelins too." }, 1, false, false),
+ ICE_FIENDS(20, new int[] { 3406, 6217, 7714, 7715, 7716 }, new String[] { "Icefiends are beings of ice and freezing rock, they're", "quick and agile so you'll want to be careful when", "getting close to them." }, 1, false, false),
+ ICE_GIANTS(50, new int[] { 111, 3072, 4685, 4686, 4687 }, new String[] { "Like other giants, Ice Giants often wield large", "weapons, learn to recognise what kind of weapon it is", "and act accordingly." }, 1, false, false),
+ ICE_WARRIOR(45, new int[] { 125, 145, 3073 }, new String[] { "Ice Warriors are a kind of ice elemental, shatter them", "with blunt weapons or melt them with fire." }, 1, false, false),
+ INFERNAL_MAGES(40, new int[] { 1643, 1644, 1645, 1646, 1647 }, new String[] { "Infernal Mages are dangerous spell users, beware of", "their magic spells and go properly prepared" }, 45, false, false),
+ IRON_DRAGONS(80, new int[] { 1591 }, new String[] { "Iron Dragons are some of the weaker metallic dragons,", "their iron scales are far thicker than normal", "iron armour." }, 1, false, true),
JELLIES(57, new int[] { 1637, 1638, 1639, 1640, 1641, 1642 }, new String[] { "Jellies are nasty cube-like gelatinous creatures which", "absorb everything they come across into themselves." }, 52, false, false),
- JUNGLE_HORRORS(65, new int[] { 4348, 4349, 4350, 4351, 4352 }, new String[] { "Jungle Horrors can be found all over Mos Le'Harmless.", "They are strong and aggressive, so watch out!" }, 1, false, false),
- KALPHITES(15, new int[] { 1153, 1154, 1155, 1156, 1157, 1159, 1160, 1161 }, new String[] { "Kalaphite are large insects which live in great hives under the desert sands." }, 1, false, false),
- KURASKS(65, new int[] { 1608, 1609, 4229, 7805, 7797 }, new String[] { "A kurask is a very quick creature." }, 70, false, false),
- LESSER_DEMONS(60, new int[] { 82, 6203, 3064, 4694, 4695, 6206, 3064, 4696, 4697, 6101 }, new String[] { "Lesser Demons are magic creatures so they are weak to magical attacks." }, 1, false, false),
- MITHRIL_DRAGONS(60, new int[] { 5363 }, new String[] { "Mithril dragons aren't as strong as other dragons but they're still", "very powerful, watch out for their fiery breath." }, 1, false, true, 5 | 9 << 16),
+ JUNGLE_HORRORS(65, new int[] { 4348, 4349, 4350, 4351, 4352 }, new String[] { "Jungle Horrors can be found all over Mos Le'Harmless.", "They are strong and aggressive, so watch out!" }, 1, Quests.CABIN_FEVER),
+ KALPHITES(15, new int[] { 1153, 1154, 1155, 1156, 1157, 1159, 1160, 1161 }, new String[] { "Kalphites are large insects which live in great hives", "under the desert sands." }, 1, false, false),
+ // Waiting for the killer watt plane to be implemented before adding to assignments
+ KILLERWATTS(1, new int[] { 3201 }, new String[] { "Killerwatts store huge amounts of energy in their", "bodies, which is released if they are touched. You'll", "need to wear heavily insulated boots to counter this", "shocking effect." }, 37, Quests.ERNEST_THE_CHICKEN),
+ KURASKS(65, new int[] { 1608, 1609, 4229, 7805, 7797 }, new String[] { "Kurasks are large brutal creatures with very thick", "hides. You'll need a Leaf-Tipped Spear Sword or", "Battle-axe, Broad Arrows, or a Magic Dart to harm them." }, 70, false, false),
+ LESSER_DEMONS(60, new int[] { 82, 6203, 3064, 4694, 4695, 6206, 3064, 4696, 4697, 6101 }, new String[] { "Lesser Demons are magic creatures so they are weak to", "magical attacks. Though they're relatively weak they", "are still dangerous." }, 1, false, false),
MINOTAURS(7, new int[] { 4404, 4405, 4406 }, new String[] { "Minotaurs are large manlike creatures but you'll", "want to be careful of their horns." }, 1, false, false),
- MONKEYS(1, new int[] { 132, 1463, 1464, 2301, 4344, 4363, 6943, 7211, 7213, 7215, 7217, 7219, 7221, 7223, 7225, 7227, 1455, 1459, 1460, 1456, 1457, 1458 }, new String[] { "Small agile creatures, watch out they pinch!" }, 1, false, false),
- MOSS_GIANTS(40, new int[] { 112, 1587, 1588, 1681, 4534, 4688, 4706 }, new String[] { "They are known to carry large sticks." }, 1, false, false),
- NECHRYAELS(85, new int[] { 1613 }, new String[] { "Nechryael are demons of decay which summon small winged beings which", "help them fight their victims." }, 80, false, false),
- OGRES(40, new int[] { 115, 374, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057,2801, 3419, 7078, 7079, 7080, 7081, 7082 }, new String[] { "Ogres are brutal creatures, favouring large blunt maces and clubs", "they often attack without warning." }, 1, false, false),
- OTHERWORDLY_BEING(40, new int[] { 126 }, new String[] { "A creature filled with everlasting power." }, 1, false, false),
- PYREFIENDS(25, new int[] { 1633, 1634, 1635, 1636, 6216, 6631, 6641, 6660, 6668, 6683, 6709, 6721, }, new String[] { "A scorching hot creature, watch out!" }, 30, false, false),
- RATS(1, new int[] { 2682, 2980, 2981, 3007, 88, 224, 4928, 4929, 4936, 4937, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 4396, 4415, 7202, 7204, 7417, 7461, 87, 446, 950, 4395, 4922, 4923, 4924, 4925, 4926, 4927, 4942, 4943, 4944, 4945, 86, 87, 446, 950, 4395, 4922, 4923, 4924, 4925, 4926, 4927, 4942, 4943, 4944, 4945 }, new String[] { "Quick little rodents!" }, 1, false, false),
- ROCK_SLUGS(20, new int[] { 1631, 1632 }, new String[] { "A rock slug can leave behind a trail of his presence.." }, 20, false, false),
- SCORPIONS(7, new int[] { 107, 1477, 4402, 4403, 144 }, new String[] { "A scorpion makes a piercing sound, watch out for", "its long sharp tail." }, 1, false, false),
- SHADE(30, new int[] { 3617, 1250, 1241, 1246, 1248, 1250, 428, 1240 }, new String[] { "Shades are dark and mysterious", "they hide in the shadows so be wary of ambushes." }, 1, true, false),
- SKELETONS(15, new int[] { 90, 91, 92, 93, 94, 459, 1471, 1575, 1973, 2036, 2037, 2715, 2717, 3065, 3151, 3291, 3581, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3844, 3850, 3851, 4384, 4385, 4386, 5332, 5333, 5334, 5335, 5336, 5337, 5338, 5339, 5340, 5341, 5359, 5365, 5366, 5367, 5368, 5381, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5411, 5412, 5422, 6091, 6092, 6093, 6103, 6104, 6105, 6106, 6107, 6764, 6765, 6766, 6767, 6768, 2050, 2056, 2057, 1539, 7640 }, new String[] { "Skeletons are undead monsters found in various locations." }, 1, true, false),
- SPIDERS(1, new int[] { 61, 1004, 1221, 1473, 1474, 63, 4401, 2034, 977, 7207, 134, 1009, 59, 60, 4400, 58, 62, 1478, 2491, 2492, 6376, 6377, }, new String[] { "Level 24 spiders are aggressive and can hit up to 60 life points." }, 1, false, false),
- SPIRTUAL_MAGES(60, new int[] { 6221, 6231, 6257, 6278 }, new String[] { "They are dangerous, they hit with mage." }, 83, false, false),
- SPIRTUAL_RANGERS(60, new int[] { 6220, 6230, 6256, 6276 }, new String[] { "They are dangerous, they hit with range." }, 63, false, false),
- SPIRTUAL_WARRIORS(60, new int[] { 6219, 6229, 6255, 6277, }, new String[] { "They are dangerous, they hit with melee." }, 68, false, false),
- STEEL_DRAGONS( 85,new int[] { 1592, 3590 }, new String[] { "Steel dragons aren't as strong as other dragons but they're still", "very powerful, watch out for their fiery breath." }, 1, false, true, 10 | 20 << 16),
- TROLLS(60, new int[] { 72, 3584, 1098, 1096, 1097, 1095, 1101, 1105, 1102, 1103, 1104, 1130, 1131, 1132, 1133, 1134, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1138, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 3840, 3841, 3842, 3843, 3845, 1933, 1934, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 391, 392, 393, 394, 395, 396}, new String[] { "Trolls have a crushing attack, it's bets to wear a high crushing defence." }, 1, false, false),
- TUROTHS(60, new int[] { 1611, 1622, 1623, 1626, 1627, 1628, 1629, 1630, 7800}, new String[] { "Turoths are Slayer monsters that require a Slayer level of 55 to kill" }, 55, false, false),
- TZHAAR(45, new int[] { 2591, 2592, 2593, 2745, 2594, 2595, 2596, 2597, 2604, 2605, 2606, 2607, 2608, 2609, 7755, 7753, 2598, 2599, 2600, 2601, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2624, 2617, 2618, 2625, 2602, 2603, 7754, 7767, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2624, 2625, 2627, 2628, 2629, 2630, 2631, 2632, 7746, 7747, 7748, 7749, 7750, 7751, 7752, 7753, 7754, 7755, 7756, 7757, 7758, 7759, 7760, 7761, 7762, 7763, 7764, 7765, 7766, 7767, 7768, 7769, 7770, 7771, 7747, 7747, 7748, 7749, 7750, 7751, 7752, 7753, 7757, 7765, 7769, 7768 }, new String[] { "Young Tzhaar's of the century are furious with your kind." }, 1, false, false),
- SUQAHS (65, new int[] { 4527, 4528, 4529, 4530, 4531, 4532, 4533 }, new String[] { "Suquah are big, angry folk that inhabit Lunar Isle." }, 1, "Lunar Diplomacy"),
- VAMPIRES(35, new int[] { 1023, 1220, 1223, 1225, 6214 }, new String[] { "Vampires are equipped with large fangs,", "they can do serious damage." }, 1, false, false),
- WATERFIENDS(75, new int[] { 5361 }, new String[] { "A waterfiend takes no damage from fire!" }, 1, false, false),
- WEREWOLFS(60, new int[] { 1665, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6212, 6213, 6607, 6609, 6614, 6617, 6625, 6632, 6644, 6663, 6675, 6686, 6701, 6712, 6724, 6728, }, new String[] { "There temper is alot more nasty then a regular wolf!" }, 1, false, false),
- WOLVES(20, new int[] { 95, 96, 97, 141, 142, 143, 839, 1198, 1330, 1558, 1559, 1951, 1952, 1953, 1954, 1955, 1956, 4413, 4414, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6829, 6830, 7005 }, new String[] { "Wolves are more agressive then dog's." }, 1, false, false),
- ZOMBIES(10, new int[] { 73, 74, 75, 76, 2714, 2863, 2866, 2869, 2878, 3622, 4392, 4393, 4394, 5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5305, 5306, 5307, 5308, 5309, 5310, 5311, 5312, 5313, 5314, 5315, 5316, 5317, 5318, 5319, 5320, 5321, 5322, 5323, 5324, 5325, 5326, 5327, 5328, 5329, 5330, 5331, 5375, 5376, 5377, 5378, 5379, 5380, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5407, 5408, 5409, 5410, 6099, 6100, 6131, 8149, 8150, 8151, 8152, 8153, 8159, 8160, 8161, 8162, 8163, 8164, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 7641, 1465, 1466, 1467, 2837, 2838, 2839, 2840, 2841, 2842, 5629, 5630, 5631, 5632, 5633, 5634, 5635, 5636, 5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647, 5648, 5649, 5650, 5651, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 2843, 2844, 2845, 2846, 2847, 2848}, new String[] { "Zombies are creatures with no brain, they do hit farley", "high though." }, 1, true, false),
- JAD(90, new int[] { }, new String[] { "TzTok-Jad is the king of the Fight Caves." }, 1, false, false, 1 | 1 << 16),
- CHAOS_ELEMENTAL(90, new int[] { 3200 }, new String[] { "The Chaos Elemental is located in the deep Wilderness." }, 1, false, false, 5 | 25 << 16),
- GIANT_MOLE(75, new int[] { 3340 }, new String[] { "Fighting the Giant Mole will require a light source." }, 1, false, false, 5 | 25 << 16),
- KING_BLACK_DRAGON(75, new int[] { 50 }, new String[] { "The King Black Dragon is located in the deep wilderness." }, 1, false, true, 5 | 25 << 16),
- COMMANDER_ZILYANA(90, new int[] { 6247 }, new String[] { "Commander Zilyana is one of the four Godwars bosses." }, 1, false, false, 5 | 25 << 16),
- GENERAL_GRARDOOR(90, new int[] { 6260 }, new String[] { "General Grardoor is one of the four Godwars bosses." }, 1, false, false, 5 | 25 << 16),
- KRIL_TSUTSAROTH(90, new int[] { 6203 }, new String[] { "Kril Tsutsaroth is one of the four Godwars bosses." }, 1, false, false, 5 | 25 << 16),
- KREE_ARRA(90, new int[] { 6222 }, new String[] { "Kree'arra is one of the four Godwars bosses." }, 1, false, false, 5 | 25 << 16),
- SKELETAL_WYVERN(70, new int[] { 3068, 3069, 3070, 3071 }, new String[] { "A skeletal wyvern requires an elemental, mirror", "or dragonfire shield." }, 72, false, false, 24 | 39 << 16);
+ MITHRIL_DRAGONS(60, new int[] { 5363 }, new String[] { "Mithril dragons are more vulnerable to magic and to", "stab-based melee attacks than to anything else." }, 1, false, true),
+ MOGRES(1, new int[] { 114 }, new String[] { "Mogres are a type of aquatic Ogre that is", "often mistaken for a giant mudskipper. You have to force", "them out of the water with a fishing explosive." }, 32, false, false),
+ // Waiting for molanisks transform to be implemented before adding this to assignments
+ MOLANISKS(1, new int[] { 5751 }, new String[] { "Molanisks are subterranean creatures. You can find", "them in caves deep below the ground. I heard that the", "goblins have recently had trouble with some, but they", "use a bell of some sort to deal with them."}, 39, Quests.DEATH_TO_THE_DORGESHUUN),
+ MONKEYS(1, new int[] { 132, 1463, 1464, 2301, 4344, 4363, 6943, 7211, 7213, 7215, 7217, 7219, 7221, 7223, 7225, 7227, 1455, 1459, 1460, 1456, 1457, 1458 }, new String[] { "Monkeys are tricky creatures, they are agile and", "fairly fast. Learn to anticipate their movements." }, 1, false, false),
+ MOSS_GIANTS(40, new int[] { 112, 1587, 1588, 1681, 4534, 4688, 4706 }, new String[] { "Like other giants, Moss Giants often wield large", "weapons, learn to recognise what kind of weapon it is", "and act accordingly." }, 1, false, false),
+ // Waiting for zygomite transform to be implemented before adding this to assignments
+ MUTATED_ZYGOMITES(1, new int[] { 3346, 3347 }, new String[] { "Mutated Zygomites are hard to destroy. They regenerate", "quickly so you will need to finish them with fungicide." }, 57, Quests.LOST_CITY),
+ NECHRYAELS(85, new int[] { 1613 }, new String[] { "Nechryael are demons of decay which summon small", "winged beings to help them fight their victims." }, 80, false, false),
+ OGRES(40, new int[] { 115, 374, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2060, 2801, 3419, 7078, 7079, 7080, 7081, 7082 }, new String[] { "Ogres are brutal creatures, favouring large blunt", "maces and clubs they often attack without warning." }, 1, false, false),
+ OTHERWORDLY_BEING(40, new int[] { 126 }, new String[] { "Otherworldly Beings are ethereal beings making them", "weak to magical attack." }, 1, false, false),
+ PYREFIENDS(25, new int[] { 1633, 1634, 1635, 1636, 6216, 6631, 6641, 6660, 6668, 6683, 6709, 6721, }, new String[] { "Pyrefiends are beings of fire and molten rock,", "they're quick and agile so you'll want to be careful", "when getting close to them." }, 30, false, false),
+ RED_DRAGONS(1, new int[] { 53, 1589, 3588, 4667, 4668, 4669, 4670, 4671, 4672 }, new String[] { "Red Dragons are very powerful, stronger than most", "dragons, watch out for their fiery breath." }, 1, false, false),
+ ROCK_SLUGS(20, new int[] { 1631, 1632 }, new String[] { "Rockslugs are strange stoney slugs. You'll need to", "fight them to near death before finishing them off", "with Salt." }, 20, false, false),
+ // Seems to need Contact or the NPCs added to dungeons before adding this assignment as a task
+ SCABARITES(1, new int[] { 2001, 4500, 5251, 5252, 5255, 5256, 5250, 5254, 6777, 6778, 6774, 6780, 6781, 6773 }, new String[] {"Scabarites are insectoid creatures, found beyond the", "Kharidian deserts. They can be extremely dangerous."}, 1, Quests.CONTACT),
+ SCORPIONS(7, new int[] { 107, 1477, 4402, 4403, 144 }, new String[] { "Scorpions are almost always poisonous, their hard", "carapace makes them resistant to crushing and", "stabbing attacks." }, 1, false, false),
+ SEA_SNAKES(1, new int[] { 3939, 3940 }, new String[] { "Sea Snakes are long and slithery with a venomous bite.", "The larger ones are more poisonous, so keep an eye on", "your health." }, 1, Quests.ROYAL_TROUBLE),
+ SHADE(30, new int[] { 3617, 1250, 1241, 1246, 1248, 1250, 428, 1240 }, new String[] { "Shades are undead so magic is your best best against", "them, you can find Shades at Mort'ton." }, 1, true, false),
+ // Dungeon needs to be connected to the Legend's Guild before adding this assignment as a task
+ SHADOW_WARRIORS(1, new int[] { 158 }, new String[] { "Shadow Warriors are dark and mysterious, they hide in", "the shadows so be wary of ambushes." }, 1, Quests.LEGENDS_QUEST),
+ SKELETAL_WYVERN(70, new int[] { 3068, 3069, 3070, 3071 }, new String[] { "Skeletal Wyverns are extremely dangerous and they are", "hard to hit with arrows as they slip right through.", "To stand a good chance of surviving you'll need some", "elemental shielding from its icy breath." }, 72, false, false),
+ SKELETONS(15, new int[] { 90, 91, 92, 93, 94, 459, 1471, 1575, 1973, 2036, 2037, 2715, 2717, 3065, 3151, 3291, 3581, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3844, 3850, 3851, 4384, 4385, 4386, 5332, 5333, 5334, 5335, 5336, 5337, 5338, 5339, 5340, 5341, 5359, 5365, 5366, 5367, 5368, 5381, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5411, 5412, 5422, 6091, 6092, 6093, 6103, 6104, 6105, 6106, 6107, 6764, 6765, 6766, 6767, 6768, 2050, 2056, 2057, 1539, 7640 }, new String[] { "Skeletons are undead so magic is your best bet against", "them, there is even a spell specially for fighting the undead." }, 1, true, false),
+ SPIDERS(1, new int[] { 61, 1004, 1221, 1473, 1474, 63, 4401, 2034, 977, 7207, 134, 1009, 59, 60, 4400, 58, 62, 1478, 2491, 2492, 6376, 6377, }, new String[] { "Spiders are often poisonous, and many varieties are", "camouflaged too." }, 1, false, false),
+ SPIRTUAL_MAGES(60, new int[] { 6221, 6231, 6257, 6278 }, new String[] { "Spiritual mages can be found in the icy caverns near", "Trollheim, supporting the cause of their chosen god." }, 83, Quests.DEATH_PLATEAU),
+ SPIRTUAL_RANGERS(60, new int[] { 6220, 6230, 6256, 6276 }, new String[] { "Spiritual rangers can be found in the icy caverns near", "Trollheim, supporting the cause of their chosen god." }, 63, Quests.DEATH_PLATEAU),
+ SPIRTUAL_WARRIORS(60, new int[] { 6219, 6229, 6255, 6277, }, new String[] { "Spiritual warriors can be found in the icy caverns near", "Trollheim, supporting the cause of their chosen god." }, 68, Quests.DEATH_PLATEAU),
+ STEEL_DRAGONS( 85,new int[] { 1592, 3590 }, new String[] { "Steel dragons are dangerous and metallic, with steel", "scales that are far thicker than normal steel armour. As", "you are an accomplished slayer, I am sure you'll be", "able to deal with them easily."}, 1, false, true),
+ SUQAHS (65, new int[] { 4527, 4528, 4529, 4530, 4531, 4532, 4533 }, new String[] { "Suqahs can only be found on the mystical Lunar Isle.", "They are capable of melee and magic attacks and often", "drop hide, teeth and herbs!" }, 1, Quests.LUNAR_DIPLOMACY),
+ // No access to Lair of Tarn Razorlor but this should be added as a task when there is access
+ TERROR_DOGS(1, new int[] { 5417, 5418 }, new String[] { "Terror dogs are the personal pets of Tarn Razorlor.", "Wherever you find him, you will find them. They are", "bad-tempered and generally unfriendly." }, 40, Quests.HAUNTED_MINE),
+ TROLLS(60, new int[] { 72, 3584, 1098, 1096, 1097, 1095, 1101, 1105, 1102, 1103, 1104, 1130, 1131, 1132, 1133, 1134, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1138, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 3840, 3841, 3842, 3843, 3845, 1933, 1934, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 391, 392, 393, 394, 395, 396}, new String[] { "Trolls regenerate damage quickly but are still", "vulnerable to poisons, they usually use crushing", "weapons." }, 1, false, false),
+ TUROTHS(60, new int[] { 1622, 1611, 1623, 1626, 1627, 1628, 1629, 1630, 7800}, new String[] { "Turoth are large vicious creatures with thick hides.", "You'll need a Leaf-Tipped Spear Sword or Battle-axe,", "Broad Arrows, or a Magic Dart to harm them." }, 55, false, false),
+ VAMPIRES(35, new int[] { 1220, 1223, 1225, 6214 }, new String[] { "Vampires are extremely powerful beings. They feed on", "the blood of the living so watch out you don't", "get bitten." }, 1, false, false),
+ // Waiting for the wall beast movement bug to be fixed before adding this as a task
+ WALL_BEASTS(1, new int[] { 7823 }, new String[] { "Wall Beasts are really much larger creatures but", "you'll only see their arms. You'll want something", "sharp on your head to stop them grabbing you." }, 35, false, false ),
+ // No way to get to Poison Swamp Cave
+ // If a grapple is implemented from W Castle Wars to E Posion Swamps
+ // The dungeon connected and populated
+ // then these could be added as a task
+ WARPED_TERROR_BIRD(1, new int[] { 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6323, 6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 6332, 6608 }, new String[] { "Warped Creatures can supposedly be found within a", "mysterious dungeon on the eastern edge of the Poison", "Waste. Be aware that to defeat them, you'll need to", "purify them in some way." },56, Quests.THE_PATH_OF_GLOUPHRIE),
+ WARPED_TORTOISE(1, new int[] { 6296, 6297 }, new String[] { "Warped Creatures can supposedly be found within a", "mysterious dungeon on the eastern edge of the Poison", "Waste. Be aware that to defeat them, you'll need to", "purify them in some way." },56, Quests.THE_PATH_OF_GLOUPHRIE),
+ WATERFIENDS(75, new int[] { 5361 }, new String[] { "Waterfiends are creatures of water, which live under", "the Baxtorian Lake. Their watery form is well defended", "against slashing and piercing weapons, so use", "something blunt." }, 1, false, false),
+ WEREWOLVES(60, new int[] { 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6212, 6213, 6607, 6609, 6614, 6617, 6625, 6632, 6644, 6663, 6675, 6686, 6701, 6712, 6724, 6728, }, new String[] { "Werewolves are feral creatures, they are strong and", "tough with sharp claws and teeth." }, 1, false, false),
+ WOLVES(20, new int[] { 95, 96, 97, 141, 142, 143, 839, 1198, 1330, 1558, 1559, 1951, 1952, 1953, 1954, 1955, 1956, 4413, 4414, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6829, 6830, 7005 }, new String[] { "Wolves are pack animals, so you'll always find them", "in groups. Watch out for their bite, it can be nasty." }, 1, false, false),
+ ZOMBIES(10, new int[] { 73, 74, 75, 76, 2060, 2714, 2863, 2866, 2869, 2878, 3622, 4392, 4393, 4394, 5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5305, 5306, 5307, 5308, 5309, 5310, 5311, 5312, 5313, 5314, 5315, 5316, 5317, 5318, 5319, 5320, 5321, 5322, 5323, 5324, 5325, 5326, 5327, 5328, 5329, 5330, 5331, 5375, 5376, 5377, 5378, 5379, 5380, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5407, 5408, 5409, 5410, 6099, 6100, 6131, 8149, 8150, 8151, 8152, 8153, 8159, 8160, 8161, 8162, 8163, 8164, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 7641, 1465, 1466, 1467, 2837, 2838, 2839, 2840, 2841, 2842, 5629, 5630, 5631, 5632, 5633, 5634, 5635, 5636, 5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647, 5648, 5649, 5650, 5651, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 2843, 2844, 2845, 2846, 2847, 2848}, new String[] { "Zombies are undead so magic is your best bet against", "them, there is even a spell specially for", "fighting the undead." }, 1, true, false),
+ // Bosses need to be handled differently/have a source. They should probably be removed from here
+ JAD(90, new int[] { }, new String[] { "You must complete the entire fight cave, including", "TzTok-Jad. Beware, only those skilled in combat should", "attempt this and death will reset your task." }, 1, false, false),
+ CHAOS_ELEMENTAL(90, new int[] { 3200 }, new String[] { "The Chaos Elemental roams the deepest Wilderness. It", "can teleport you and make you unequip items randomly." }, 1, false, false),
+ GIANT_MOLE(75, new int[] { 3340 }, new String[] { "Dig on the mole-hills in Falador Park to enter the", "mole cave, and bring a lantern he can't extinguish." }, 1, false, false),
+ KING_BLACK_DRAGON(75, new int[] { 50 }, new String[] { "The King Black Dragon's cave is reached by pulling a", "lever in the Wilderness. An anti-fire shield is", "strongly recommended." }, 1, false, true),
+ COMMANDER_ZILYANA(90, new int[] { 6247 }, new String[] { "Commander Zilyana is in the God Wars Dungeon.", "She frequently uses magic attacks." }, 1, false, false),
+ GENERAL_GRARDOOR(90, new int[] { 6260 }, new String[] { "General Graardor is in the God Wars Dungeon.", "He uses melee and ranged attacks." }, 1, false, false),
+ KRIL_TSUTSAROTH(90, new int[] { 6203 }, new String[] { "K'ril Tsutsaroth is in the God Wars Dungeon.", "He's poisonous and he can hit through prayers." }, 1, false, false),
+ KREE_ARRA(90, new int[] { 6222 }, new String[] { "Kree'arra roosts in the God Wars Dungeon.", "Melee attacks don't work on flying creatures,", "and you'll need a grappling hook to get in." }, 1, false, false),
+ ;
static final HashMap taskMap = new HashMap<>();
static{
@@ -117,8 +145,7 @@ public enum Tasks {
public final int[] ids;
public boolean undead = false;
public boolean dragon = false;
- public int amtHash;
- public String questReq = "";
+ public Quests questReq = null;
Tasks(int combatCheck, int[] ids, String[] info, int levelReq, boolean undead, boolean dragon){
this.levelReq = levelReq;
this.ids = ids;
@@ -128,17 +155,7 @@ public enum Tasks {
this.combatCheck = combatCheck;
}
- Tasks(int combatCheck, int[] ids, String[] info, int levelReq, boolean undead, boolean dragon, int amtHash){
- this.levelReq = levelReq;
- this.ids = ids;
- this.info = info;
- this.undead = undead;
- this.dragon = dragon;
- this.amtHash = amtHash;
- this.combatCheck = combatCheck;
- }
-
- Tasks (int combatCheck, int[] ids, String[] info, int levelReq, String questReq) {
+ Tasks (int combatCheck, int[] ids, String[] info, int levelReq, Quests questReq) {
this.combatCheck = combatCheck;
this.ids = ids;
this.info = info;
@@ -155,7 +172,7 @@ public enum Tasks {
}
public boolean hasQuestRequirements (Player player) {
- return questReq.equals("") || hasRequirement(player, questReq, false);
+ return questReq == null || hasRequirement(player, questReq, false);
}
public static Tasks forId(int id){
diff --git a/Server/src/main/content/global/skill/slayer/dungeon/SmokeDungeon.java b/Server/src/main/content/global/skill/slayer/dungeon/SmokeDungeon.java
index edce0a909..3dec3dd92 100644
--- a/Server/src/main/content/global/skill/slayer/dungeon/SmokeDungeon.java
+++ b/Server/src/main/content/global/skill/slayer/dungeon/SmokeDungeon.java
@@ -132,7 +132,7 @@ public final class SmokeDungeon extends MapZone implements Plugin {
* @param player the player.
*/
private static void effect(Player player) {
- int hit = 2;
+ int hit = 10;
setDelay(player);
if (RandomFunction.random(2) == 1) {
player.sendChat(CHATS[RandomFunction.random(CHATS.length)]);
diff --git a/Server/src/main/content/global/skill/slayer/unused-tasks b/Server/src/main/content/global/skill/slayer/unused-tasks
deleted file mode 100644
index 03501f20e..000000000
--- a/Server/src/main/content/global/skill/slayer/unused-tasks
+++ /dev/null
@@ -1,92 +0,0 @@
- /*WALL_BEASTS(new Task(new int[] { 7823 }, new String[] { "A spiny helmet or equivalent is required to start fighting one " }, 35, new Master[] { Master.MAZCHNA }, false, Equipment.SPINY_HELMET) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),
- WARPED_TERRORBIRDS(new Task(new int[] { 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6322, 6323, 6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 6332, }, new String[] { "They require 56 Slayer and a Crystal chime to be killed. " }, 56, new Master[] { Master.DURADEL }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),
- WARPED_TORTOISES(new Task(new int[] { 6296, 6297 }, new String[] { "A warped tortoise is not as slow as they look." }, 56, new Master[] { Master.DURADEL }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
-/*CERBERUS(new Task(new int[] {8632, 8634}, new String[] {"Cerberus is about the best guard dog there is!"}, 91, new Master[] {Master.VANNAKA, Master.CHAELDAR, Master.NIEVE, Master.DURADEL}, false, 20 | 25 << 16) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- })*/
-/*ZYGOMITES(new Task(new int[] { 3346, 3347 }, new String[] { "Mutated zygomites are monsters that appear as Fungi until provoked." }, 57, new Master[] { Master.CHAELDAR }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
-/*SUQAHS(new Task(new int[] { 4527, 4528, 4529, 4530, 4531, 4532, 4533 }, new String[] {}, 1, new Master[] { Master.DURADEL }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),
- TERROR_DOG(new Task(new int[] { 5417, 5418 }, new String[] { "Terror Dogs are much like Wolves, they are pack creatures which will hunt in groups." }, 1, new Master[] { Master.VANNAKA, Master.DURADEL }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
-/*SHADOW_WARRIORS(new Task(new int[] { 158 }, new String[] { "Shadow warriors are dark and mysterious, they hide in the shadows so be wary of ambushes." }, 1, new Master[] { Master.VANNAKA, Master.CHAELDAR }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
-//MOGRES(new Task(new int[] { 114 }, new String[] { "Mogres are Slayer monsters and require level 32 Slayer to kill. " }, 32, new Master[] { Master.MAZCHNA, Master.VANNAKA }, false)),
- /*MOLANISKS(new Task(new int[] { 5751 }, new String[] { "Molanisks are found attached to cave walls and must be lured", "off with a Slayer bell" }, 39, new Master[] { Master.VANNAKA }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
-
- /*RED_DRAGONS(new Task(new int[] { 53, 4669, 4670, 4671, 4672, 1589, 3588, 4667, 4668, }, new String[] { "Red dragons aren't as strong as other dragons but they're still", "very powerful, watch out for their firey breath." }, 1, new Master[] { Master.DURADEL }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
- /*SCABARITES(new Task(new int[] { 2009 }, new String[] { "The Scabarites are fairly strong monsters, and can hit pretty hard." }, 1, new Master[] { Master.CHAELDAR }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
- /*SEA_SNAKES(new Task(new int[] { 3943, 3939, }, new String[] { "They are quick, make sure you don't let your", "eye off of them for 1 second." }, 1, new Master[] { Master.VANNAKA }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
-/*ELVES(new Task(new int[] { 1184, 1183, 1185 }, new String[] { "Elves are quick, agile and vicious fighters which", "often favour bows and polearms." }, 1, new Master[] { Master.VANNAKA, Master.CHAELDAR, Master.NIEVE }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),
- FEVER_SPIDERS(new Task(new int[] { 2850 }, new String[] { "Fever Spiders are giant spiders that carry the deadly Spider Fever.", "If you don't want to catch it I suggest you wear Slayer Gloves to fight them." }, 1, new Master[] { Master.CHAELDAR, Master.DURADEL }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
- /*KILLERWATTS(new Task(new int[] { 3201, 3202 }, new String[] { "Vexia halfassed this... (this was shadow knight text)" }, 37, new Master[] { Master.VANNAKA }, false) {
- @Override
- public boolean isDisabled() {
- return true;
- }
- }),*/
\ No newline at end of file
diff --git a/Server/src/main/content/global/skill/smithing/Bars.java b/Server/src/main/content/global/skill/smithing/Bars.java
index 7514693fe..0c8c36181 100644
--- a/Server/src/main/content/global/skill/smithing/Bars.java
+++ b/Server/src/main/content/global/skill/smithing/Bars.java
@@ -26,122 +26,122 @@ public enum Bars {
/**
* Bronze Mace
*/
- BRONZE_MACE(BarType.BRONZE, SmithingType.TYPE_MACE, 1422, 2),
+ BRONZE_MACE(BarType.BRONZE, SmithingType.TYPE_MACE, 1422, 1),
/**
* Bronze Medium helm
*/
- BRONZE_MED_HELM(BarType.BRONZE, SmithingType.TYPE_MEDIUM_HELM, 1139, 3),
+ BRONZE_MED_HELM(BarType.BRONZE, SmithingType.TYPE_MEDIUM_HELM, 1139, 1),
/**
* Bronze Crossbow Bolt
*/
- BRONZE_CROSSBOW_BOLT(BarType.BRONZE, SmithingType.TYPE_CROSSBOW_BOLT, 9375, 3),
+ BRONZE_CROSSBOW_BOLT(BarType.BRONZE, SmithingType.TYPE_CROSSBOW_BOLT, 9375, 1),
/**
* Bronze Sword
*/
- BRONZE_SWORD(BarType.BRONZE, SmithingType.TYPE_SWORD, 1277, 4),
+ BRONZE_SWORD(BarType.BRONZE, SmithingType.TYPE_SWORD, 1277, 1),
/**
* Bronze Dart Tips
*/
- BRONZE_DART_TIPS(BarType.BRONZE, SmithingType.TYPE_DART_TIP, 819, 4),
+ BRONZE_DART_TIPS(BarType.BRONZE, SmithingType.TYPE_DART_TIP, 819, 1),
/**
* Bronze Nails
*/
- BRONZE_NAILS(BarType.BRONZE, SmithingType.TYPE_NAIL, 4819, 4),
+ BRONZE_NAILS(BarType.BRONZE, SmithingType.TYPE_NAIL, 4819, 1),
/**
* Bronze Wire
*/
- BRONZE_WIRE(BarType.BRONZE, SmithingType.TYPE_WIRE, 1794, 4),
+ BRONZE_WIRE(BarType.BRONZE, SmithingType.TYPE_WIRE, 1794, 1),
/**
* Bronze Arrow Tips
*/
- BRONZE_ARROW_TIPS(BarType.BRONZE, SmithingType.TYPE_ARROW_TIP, 39, 5),
+ BRONZE_ARROW_TIPS(BarType.BRONZE, SmithingType.TYPE_ARROW_TIP, 39, 1),
/**
* Bronze Scimitar
*/
- BRONZE_SCIMITAR(BarType.BRONZE, SmithingType.TYPE_SCIMITAR, 1321, 5),
+ BRONZE_SCIMITAR(BarType.BRONZE, SmithingType.TYPE_SCIMITAR, 1321, 1),
/**
* Bronze Crossbow Limbs
*/
- BRONZE_CROSSBOW_LIMBS(BarType.BRONZE, SmithingType.TYPE_CROSSBOW_LIMB, 9420, 6),
+ BRONZE_CROSSBOW_LIMBS(BarType.BRONZE, SmithingType.TYPE_CROSSBOW_LIMB, 9420, 1),
/**
* Bronze longsword
*/
- BRONZE_LONGSWORD(BarType.BRONZE, SmithingType.TYPE_LONGSWORD, 1291, 6),
+ BRONZE_LONGSWORD(BarType.BRONZE, SmithingType.TYPE_LONGSWORD, 1291, 1),
/**
* Bronze ThrowingKnife
*/
- BRONZE_THROWINGKNFIE(BarType.BRONZE, SmithingType.TYPE_THROWING_KNIFE, 864, 7),
+ BRONZE_THROWINGKNFIE(BarType.BRONZE, SmithingType.TYPE_THROWING_KNIFE, 864, 1),
/**
* Bronze Full helmet
*/
- BRONZE_FULL_HELM(BarType.BRONZE, SmithingType.TYPE_FULL_HELM, 1155, 7),
+ BRONZE_FULL_HELM(BarType.BRONZE, SmithingType.TYPE_FULL_HELM, 1155, 1),
/**
* Bronze Square Shield
*/
- BRONZE_SQUARE_SHIELD(BarType.BRONZE, SmithingType.TYPE_SQUARE_SHIELD, 1173, 8),
+ BRONZE_SQUARE_SHIELD(BarType.BRONZE, SmithingType.TYPE_SQUARE_SHIELD, 1173, 1),
/**
* Bronze Warhammer
*/
- BRONZE_WAR_HAMMER(BarType.BRONZE, SmithingType.TYPE_WARHAMMER, 1337, 9),
+ BRONZE_WAR_HAMMER(BarType.BRONZE, SmithingType.TYPE_WARHAMMER, 1337, 1),
/**
* Bronze BattleAxe
*/
- BRONZE_BATTLEAXE(BarType.BRONZE, SmithingType.TYPE_BATTLE_AXE, 1375, 10),
+ BRONZE_BATTLEAXE(BarType.BRONZE, SmithingType.TYPE_BATTLE_AXE, 1375, 1),
/**
* Bronze ChainBody
*/
- BRONZE_CHAINBODY(BarType.BRONZE, SmithingType.TYPE_CHAINBODY, 1103, 11),
+ BRONZE_CHAINBODY(BarType.BRONZE, SmithingType.TYPE_CHAINBODY, 1103, 1),
/**
* Bronze KitShield
*/
- BRONZE_KITESHIELD(BarType.BRONZE, SmithingType.TYPE_KITE_SHIELD, 1189, 12),
+ BRONZE_KITESHIELD(BarType.BRONZE, SmithingType.TYPE_KITE_SHIELD, 1189, 1),
/**
* Bronze Claws
*/
- BRONZE_CLAWS(BarType.BRONZE, SmithingType.TYPE_CLAWS, 3095, 13),
+ BRONZE_CLAWS(BarType.BRONZE, SmithingType.TYPE_CLAWS, 3095, 1),
/**
* Bronze 2h
*/
- BRONZE_TWO_HANDED(BarType.BRONZE, SmithingType.TYPE_TWO_HAND_SWORD, 1307, 14),
+ BRONZE_TWO_HANDED(BarType.BRONZE, SmithingType.TYPE_TWO_HAND_SWORD, 1307, 1),
/**
* Bronze PlateSkirt
*/
- BRONZE_PLATE_SKIRT(BarType.BRONZE, SmithingType.TYPE_PLATE_SKIRT, 1087, 16),
+ BRONZE_PLATE_SKIRT(BarType.BRONZE, SmithingType.TYPE_PLATE_SKIRT, 1087, 1),
/**
* Bronze PlateLegs
*/
- BRONZE_PLATELEGS(BarType.BRONZE, SmithingType.TYPE_PLATELEG, 1075, 16),
+ BRONZE_PLATELEGS(BarType.BRONZE, SmithingType.TYPE_PLATELEG, 1075, 1),
/**
* Bronze PlateBody
*/
- BRONZE_PLATEBODY(BarType.BRONZE, SmithingType.TYPE_PLATEBODY, 1117, 18),
+ BRONZE_PLATEBODY(BarType.BRONZE, SmithingType.TYPE_PLATEBODY, 1117, 1),
/**
* Bronze Pickaxe
*/
- BRONZE_PICKAXE(BarType.BRONZE, SmithingType.TYPE_PICKAXE, 1265, 5),
+ BRONZE_PICKAXE(BarType.BRONZE, SmithingType.TYPE_PICKAXE, 1265, 1),
/**
* Iron Dagger
@@ -151,131 +151,131 @@ public enum Bars {
/**
* Iron Hatchet
*/
- IRON_AXE(BarType.IRON, SmithingType.TYPE_AXE, 1349, 16),
+ IRON_AXE(BarType.IRON, SmithingType.TYPE_AXE, 1349, 15),
/**
* Iron Mace
*/
- IRON_MACE(BarType.IRON, SmithingType.TYPE_MACE, 1420, 17),
+ IRON_MACE(BarType.IRON, SmithingType.TYPE_MACE, 1420, 15),
/**
* Iron Med Helm
*/
- IRON_MED_HELM(BarType.IRON, SmithingType.TYPE_MEDIUM_HELM, 1137, 18),
+ IRON_MED_HELM(BarType.IRON, SmithingType.TYPE_MEDIUM_HELM, 1137, 15),
/**
* Iron Bolt
*/
- IRON_BOLT(BarType.IRON, SmithingType.TYPE_CROSSBOW_BOLT, 9377, 18),
+ IRON_BOLT(BarType.IRON, SmithingType.TYPE_CROSSBOW_BOLT, 9377, 15),
/**
* Iron Sword
*/
- IRON_SWORD(BarType.IRON, SmithingType.TYPE_SWORD, 1279, 19),
+ IRON_SWORD(BarType.IRON, SmithingType.TYPE_SWORD, 1279, 15),
/**
* Iron Dart Tips
*/
- IRON_DART_TIPS(BarType.IRON, SmithingType.TYPE_DART_TIP, 820, 19),
+ IRON_DART_TIPS(BarType.IRON, SmithingType.TYPE_DART_TIP, 820, 15),
/**
* Iron Nails
*/
- IRON_NAILS(BarType.IRON, SmithingType.TYPE_NAIL, 4820, 19),
+ IRON_NAILS(BarType.IRON, SmithingType.TYPE_NAIL, 4820, 15),
/**
* Iron Split
*/
- IRON_SPIT(BarType.IRON, SmithingType.TYPE_SPIT_IRON, 7225, 16),
+ IRON_SPIT(BarType.IRON, SmithingType.TYPE_SPIT_IRON, 7225, 15),
/**
* Iron Arrow Tips
*/
- IRON_ARROW_TIPS(BarType.IRON, SmithingType.TYPE_ARROW_TIP, 40, 20),
+ IRON_ARROW_TIPS(BarType.IRON, SmithingType.TYPE_ARROW_TIP, 40, 15),
/**
* Iron Scimitar
*/
- IRON_SCIMITAR(BarType.IRON, SmithingType.TYPE_SCIMITAR, 1323, 20),
+ IRON_SCIMITAR(BarType.IRON, SmithingType.TYPE_SCIMITAR, 1323, 15),
/**
* Iron Crossbow Limbs
*/
- IRON_CROSSBOW_LimbS(BarType.IRON, SmithingType.TYPE_CROSSBOW_LIMB, 9423, 23),
+ IRON_CROSSBOW_LimbS(BarType.IRON, SmithingType.TYPE_CROSSBOW_LIMB, 9423, 15),
/**
* Iron LongSword
*/
- IRON_LONGSWORD(BarType.IRON, SmithingType.TYPE_LONGSWORD, 1293, 21),
+ IRON_LONGSWORD(BarType.IRON, SmithingType.TYPE_LONGSWORD, 1293, 15),
/**
* Iron Knife
*/
- IRON_KNIFE(BarType.IRON, SmithingType.TYPE_THROWING_KNIFE, 863, 22),
+ IRON_KNIFE(BarType.IRON, SmithingType.TYPE_THROWING_KNIFE, 863, 15),
/**
* Iron Full Helm
*/
- IRON_FULL_HELM(BarType.IRON, SmithingType.TYPE_FULL_HELM, 1153, 22),
+ IRON_FULL_HELM(BarType.IRON, SmithingType.TYPE_FULL_HELM, 1153, 15),
/**
* Iron Square Shield
*/
- IRON_SQUARE_SHIELD(BarType.IRON, SmithingType.TYPE_SQUARE_SHIELD, 1175, 23),
+ IRON_SQUARE_SHIELD(BarType.IRON, SmithingType.TYPE_SQUARE_SHIELD, 1175, 15),
/**
* Oil Lantern Frame
*/
- OIL_LANTERN_FRAME(BarType.IRON, SmithingType.TYPE_OIL_LANTERN, 4540, 26),
+ OIL_LANTERN_FRAME(BarType.IRON, SmithingType.TYPE_OIL_LANTERN, 4540, 15),
/**
* Iron WarHammer
*/
- IRON_WARHAMMER(BarType.IRON, SmithingType.TYPE_WARHAMMER, 1335, 24),
+ IRON_WARHAMMER(BarType.IRON, SmithingType.TYPE_WARHAMMER, 1335, 15),
/**
* Iron Battleaxe
*/
- IRON_BATTLEAXE(BarType.IRON, SmithingType.TYPE_BATTLE_AXE, 1363, 25),
+ IRON_BATTLEAXE(BarType.IRON, SmithingType.TYPE_BATTLE_AXE, 1363, 15),
/**
* Iron ChainBody
*/
- IRON_CHAINBODY(BarType.IRON, SmithingType.TYPE_CHAINBODY, 1101, 26),
+ IRON_CHAINBODY(BarType.IRON, SmithingType.TYPE_CHAINBODY, 1101, 15),
/**
* Iron Kite Shield
*/
- IRON_KITE_SHIELD(BarType.IRON, SmithingType.TYPE_KITE_SHIELD, 1191, 27),
+ IRON_KITE_SHIELD(BarType.IRON, SmithingType.TYPE_KITE_SHIELD, 1191, 15),
/**
* Iron Claws
*/
- IRON_CLAWS(BarType.IRON, SmithingType.TYPE_CLAWS, 3096, 28),
+ IRON_CLAWS(BarType.IRON, SmithingType.TYPE_CLAWS, 3096, 15),
/**
* Iron 2H
*/
- IRON_TWO_HANDED_SWORD(BarType.IRON, SmithingType.TYPE_TWO_HAND_SWORD, 1309, 29),
+ IRON_TWO_HANDED_SWORD(BarType.IRON, SmithingType.TYPE_TWO_HAND_SWORD, 1309, 15),
/**
* Iron PlateSkirt
*/
- IRON_PLATESKIRT(BarType.IRON, SmithingType.TYPE_PLATE_SKIRT, 1081, 31),
+ IRON_PLATESKIRT(BarType.IRON, SmithingType.TYPE_PLATE_SKIRT, 1081, 15),
/**
* Iron PlateLegs
*/
- IRON_PLATELEGS(BarType.IRON, SmithingType.TYPE_PLATELEG, 1067, 31),
+ IRON_PLATELEGS(BarType.IRON, SmithingType.TYPE_PLATELEG, 1067, 15),
/**
* Iron PlateBody
*/
- IRON_PLATEBODY(BarType.IRON, SmithingType.TYPE_PLATEBODY, 1115, 33),
+ IRON_PLATEBODY(BarType.IRON, SmithingType.TYPE_PLATEBODY, 1115, 15),
/**
* Iron PickAxe
*/
- IRON_PICKAXE(BarType.IRON, SmithingType.TYPE_PICKAXE, 1267, 20),
+ IRON_PICKAXE(BarType.IRON, SmithingType.TYPE_PICKAXE, 1267, 15),
/**
* Steel Dagger
@@ -285,132 +285,132 @@ public enum Bars {
/**
* Steel Axe
*/
- STEEL_AXE(BarType.STEEL, SmithingType.TYPE_AXE, 1353, 31),
+ STEEL_AXE(BarType.STEEL, SmithingType.TYPE_AXE, 1353, 30),
/**
* Steel Mace
*/
- STEEL_MACE(BarType.STEEL, SmithingType.TYPE_MACE, 1424, 32),
+ STEEL_MACE(BarType.STEEL, SmithingType.TYPE_MACE, 1424, 30),
/**
* Steel Medium Helm
*/
- STEEL_MED_HELM(BarType.STEEL, SmithingType.TYPE_MEDIUM_HELM, 1141, 33),
+ STEEL_MED_HELM(BarType.STEEL, SmithingType.TYPE_MEDIUM_HELM, 1141, 30),
/**
* Steel CrossBow bolts
*/
- STEEL_CROSSBOW_BOLT(BarType.STEEL, SmithingType.TYPE_CROSSBOW_BOLT, 9378, 33),
+ STEEL_CROSSBOW_BOLT(BarType.STEEL, SmithingType.TYPE_CROSSBOW_BOLT, 9378, 30),
/**
* Steel Sword
*/
- STEEL_SWORD(BarType.STEEL, SmithingType.TYPE_SWORD, 1281, 34),
+ STEEL_SWORD(BarType.STEEL, SmithingType.TYPE_SWORD, 1281, 30),
/**
* Steel Dart Tips
*/
- STEEL_DART_TIPS(BarType.STEEL, SmithingType.TYPE_DART_TIP, 821, 34),
+ STEEL_DART_TIPS(BarType.STEEL, SmithingType.TYPE_DART_TIP, 821, 30),
/**
* Steel Nails
*/
- STEEL_NAILS(BarType.STEEL, SmithingType.TYPE_NAIL, 1539, 34),
+ STEEL_NAILS(BarType.STEEL, SmithingType.TYPE_NAIL, 1539, 30),
/**
* Steel ArrowTips
*/
- STEEL_ARROW_TIPS(BarType.STEEL, SmithingType.TYPE_ARROW_TIP, 41, 35),
+ STEEL_ARROW_TIPS(BarType.STEEL, SmithingType.TYPE_ARROW_TIP, 41, 30),
/**
* Steel Scimitar
*/
- STEEL_SCIMITAR(BarType.STEEL, SmithingType.TYPE_SCIMITAR, 1325, 35),
+ STEEL_SCIMITAR(BarType.STEEL, SmithingType.TYPE_SCIMITAR, 1325, 30),
/**
* Steel Crossbow Limbs
*/
- STEEL_CROSSBOW_LIMBS(BarType.STEEL, SmithingType.TYPE_CROSSBOW_LIMB, 9425, 36),
+ STEEL_CROSSBOW_LIMBS(BarType.STEEL, SmithingType.TYPE_CROSSBOW_LIMB, 9425, 30),
/**
* Steel LongSword
*/
- STEEL_LONGSWORD(BarType.STEEL, SmithingType.TYPE_LONGSWORD, 1295, 36),
+ STEEL_LONGSWORD(BarType.STEEL, SmithingType.TYPE_LONGSWORD, 1295, 30),
/**
* Steel Knife
*/
- STEEL_THROWING_KNIFE(BarType.STEEL, SmithingType.TYPE_THROWING_KNIFE, 865, 37),
+ STEEL_THROWING_KNIFE(BarType.STEEL, SmithingType.TYPE_THROWING_KNIFE, 865, 30),
/**
* Steel Full Helm
*/
- STEEL_FULL_HELM(BarType.STEEL, SmithingType.TYPE_FULL_HELM, 1157, 37),
+ STEEL_FULL_HELM(BarType.STEEL, SmithingType.TYPE_FULL_HELM, 1157, 30),
/**
* Steel Studs
*/
- STEEL_STUDS(BarType.STEEL, SmithingType.TYPE_STUDS, 2370, 36),
+ STEEL_STUDS(BarType.STEEL, SmithingType.TYPE_STUDS, 2370, 30),
/**
* Steel Square Shield
*/
- STEEL_SQUARE_SHIELD(BarType.STEEL, SmithingType.TYPE_SQUARE_SHIELD, 1177, 38),
+ STEEL_SQUARE_SHIELD(BarType.STEEL, SmithingType.TYPE_SQUARE_SHIELD, 1177, 30),
/**
* Steel Lantern
*/
- STEEL_BULLSEYE(BarType.STEEL, SmithingType.TYPE_BULLSEYE, 4544, 49),
+ STEEL_BULLSEYE(BarType.STEEL, SmithingType.TYPE_BULLSEYE, 4544, 30),
/**
* Steel WarHammer
*/
- STEEL_WARHAMMER(BarType.STEEL, SmithingType.TYPE_WARHAMMER, 1339, 39),
+ STEEL_WARHAMMER(BarType.STEEL, SmithingType.TYPE_WARHAMMER, 1339, 30),
/**
* Steel battle axe
*/
- STEEL_BATTLE_AXE(BarType.STEEL, SmithingType.TYPE_BATTLE_AXE, 1365, 40),
+ STEEL_BATTLE_AXE(BarType.STEEL, SmithingType.TYPE_BATTLE_AXE, 1365, 30),
/**
* Steel ChainBody
*/
- STEEL_CHAINBODY(BarType.STEEL, SmithingType.TYPE_CHAINBODY, 1105, 41),
+ STEEL_CHAINBODY(BarType.STEEL, SmithingType.TYPE_CHAINBODY, 1105, 30),
/**
* Steel Kite Shield
*/
- STEEL_KITE_SHIELD(BarType.STEEL, SmithingType.TYPE_KITE_SHIELD, 1193, 42),
+ STEEL_KITE_SHIELD(BarType.STEEL, SmithingType.TYPE_KITE_SHIELD, 1193, 30),
/**
* Steel Claws
*/
- STEEL_CLAWS(BarType.STEEL, SmithingType.TYPE_CLAWS, 3097, 43),
+ STEEL_CLAWS(BarType.STEEL, SmithingType.TYPE_CLAWS, 3097, 30),
/**
* Steel 2h
*/
- STEEL_TWO_HANDED_SWORD(BarType.STEEL, SmithingType.TYPE_TWO_HAND_SWORD, 1311, 44),
+ STEEL_TWO_HANDED_SWORD(BarType.STEEL, SmithingType.TYPE_TWO_HAND_SWORD, 1311, 30),
/**
* Steel plate skirt
*/
- STEEL_PLATE_SKIRT(BarType.STEEL, SmithingType.TYPE_PLATE_SKIRT, 1083, 46),
+ STEEL_PLATE_SKIRT(BarType.STEEL, SmithingType.TYPE_PLATE_SKIRT, 1083, 30),
/**
* Steel platelegs
*/
- STEEL_PLATELEGS(BarType.STEEL, SmithingType.TYPE_PLATELEG, 1069, 46),
+ STEEL_PLATELEGS(BarType.STEEL, SmithingType.TYPE_PLATELEG, 1069, 30),
/**
* Steel platebody
*/
- STEEL_PLATEBODY(BarType.STEEL, SmithingType.TYPE_PLATEBODY, 1119, 48),
+ STEEL_PLATEBODY(BarType.STEEL, SmithingType.TYPE_PLATEBODY, 1119, 30),
/**
* Steel pickaxe
*/
- STEEL_PICKAXE(BarType.STEEL, SmithingType.TYPE_PICKAXE, 1269, 35),
+ STEEL_PICKAXE(BarType.STEEL, SmithingType.TYPE_PICKAXE, 1269, 30),
/**
* Mithril Dagger
@@ -420,377 +420,377 @@ public enum Bars {
/**
* Mithril Hatchet
*/
- MITHRIL_HATCHET(BarType.MITHRIL, SmithingType.TYPE_AXE, 1355, 51),
+ MITHRIL_HATCHET(BarType.MITHRIL, SmithingType.TYPE_AXE, 1355, 50),
/**
* Mithril Mace
*/
- MITHRIL_MACE(BarType.MITHRIL, SmithingType.TYPE_MACE, 1428, 52),
+ MITHRIL_MACE(BarType.MITHRIL, SmithingType.TYPE_MACE, 1428, 50),
/**
* Mithril Med Helm
*/
- MITHRIL_MED_HELM(BarType.MITHRIL, SmithingType.TYPE_MEDIUM_HELM, 1143, 53),
+ MITHRIL_MED_HELM(BarType.MITHRIL, SmithingType.TYPE_MEDIUM_HELM, 1143, 50),
/**
* Mithril Crossbow Bolt
*/
- MITHRIL_CROSSBOW_BOLT(BarType.MITHRIL, SmithingType.TYPE_CROSSBOW_BOLT, 9379, 53),
+ MITHRIL_CROSSBOW_BOLT(BarType.MITHRIL, SmithingType.TYPE_CROSSBOW_BOLT, 9379, 50),
/**
* Mithril Sword
*/
- MITHRIL_SWORD(BarType.MITHRIL, SmithingType.TYPE_SWORD, 1285, 54),
+ MITHRIL_SWORD(BarType.MITHRIL, SmithingType.TYPE_SWORD, 1285, 50),
/**
* Mithril Dart Tips
*/
- MITHRIL_DART_TIPS(BarType.MITHRIL, SmithingType.TYPE_DART_TIP, 822, 54),
+ MITHRIL_DART_TIPS(BarType.MITHRIL, SmithingType.TYPE_DART_TIP, 822, 50),
/**
* Mithril Nails
*/
- MITHRIL_NAILS(BarType.MITHRIL, SmithingType.TYPE_NAIL, 4822, 54),
+ MITHRIL_NAILS(BarType.MITHRIL, SmithingType.TYPE_NAIL, 4822, 50),
/**
* Mithril Arrow Tips
*/
- MITHRIL_ARROW_TIPS(BarType.MITHRIL, SmithingType.TYPE_ARROW_TIP, 42, 55),
+ MITHRIL_ARROW_TIPS(BarType.MITHRIL, SmithingType.TYPE_ARROW_TIP, 42, 50),
/**
* Mithril Scimitar
*/
- MITHRIL_SCIMITAR(BarType.MITHRIL, SmithingType.TYPE_SCIMITAR, 1329, 55),
+ MITHRIL_SCIMITAR(BarType.MITHRIL, SmithingType.TYPE_SCIMITAR, 1329, 50),
/**
* Mithril Crossbow Limbs
*/
- MITHRIL_CROSSBOW_LIMBS(BarType.MITHRIL, SmithingType.TYPE_CROSSBOW_LIMB, 9427, 56),
+ MITHRIL_CROSSBOW_LIMBS(BarType.MITHRIL, SmithingType.TYPE_CROSSBOW_LIMB, 9427, 50),
/**
* Mithril LongSword
*/
- MITHRIL_LONGSWORD(BarType.MITHRIL, SmithingType.TYPE_LONGSWORD, 1299, 56),
+ MITHRIL_LONGSWORD(BarType.MITHRIL, SmithingType.TYPE_LONGSWORD, 1299, 50),
/**
* Mithril Knife
*/
- MITHRIL_KNIFE(BarType.MITHRIL, SmithingType.TYPE_THROWING_KNIFE, 866, 57),
+ MITHRIL_KNIFE(BarType.MITHRIL, SmithingType.TYPE_THROWING_KNIFE, 866, 50),
/**
* Mithril Full Helm
*/
- MITHRIL_FULL_HELM(BarType.MITHRIL, SmithingType.TYPE_FULL_HELM, 1159, 57),
+ MITHRIL_FULL_HELM(BarType.MITHRIL, SmithingType.TYPE_FULL_HELM, 1159, 50),
/**
* Mithril SquareShield
*/
- MITHRIL_SQUARE_SHIELD(BarType.MITHRIL, SmithingType.TYPE_SQUARE_SHIELD, 1181, 58),
+ MITHRIL_SQUARE_SHIELD(BarType.MITHRIL, SmithingType.TYPE_SQUARE_SHIELD, 1181, 50),
/**
* Mithril Grapple Tips
*/
- MITHRIL_GRAPPLE_TIPS(BarType.MITHRIL, SmithingType.TYPE_GRAPPLE_TIP, 9416, 59),
+ MITHRIL_GRAPPLE_TIPS(BarType.MITHRIL, SmithingType.TYPE_GRAPPLE_TIP, 9416, 50),
/**
* Mithril Warhammer
*/
- MITHRIL_WARHAMMER(BarType.MITHRIL, SmithingType.TYPE_WARHAMMER, 1343, 59),
+ MITHRIL_WARHAMMER(BarType.MITHRIL, SmithingType.TYPE_WARHAMMER, 1343, 50),
/**
* Mithril BattleAxe
*/
- MITHRIL_BATTLEAXE(BarType.MITHRIL, SmithingType.TYPE_BATTLE_AXE, 1369, 60),
+ MITHRIL_BATTLEAXE(BarType.MITHRIL, SmithingType.TYPE_BATTLE_AXE, 1369, 50),
/**
* Mithril ChainBody
*/
- MITHRIL_CHAINBODY(BarType.MITHRIL, SmithingType.TYPE_CHAINBODY, 1109, 61),
+ MITHRIL_CHAINBODY(BarType.MITHRIL, SmithingType.TYPE_CHAINBODY, 1109, 50),
/**
* Mithril KiteShield
*/
- MITHRIL_KITE_SHIELD(BarType.MITHRIL, SmithingType.TYPE_KITE_SHIELD, 1197, 62),
+ MITHRIL_KITE_SHIELD(BarType.MITHRIL, SmithingType.TYPE_KITE_SHIELD, 1197, 50),
/**
* Mithril Claws
*/
- MITHRIL_CLAWS(BarType.MITHRIL, SmithingType.TYPE_CLAWS, 3099, 63),
+ MITHRIL_CLAWS(BarType.MITHRIL, SmithingType.TYPE_CLAWS, 3099, 50),
/**
* Mithril 2H
*/
- MITHRIL_TWO_HANDED_SWORD(BarType.MITHRIL, SmithingType.TYPE_TWO_HAND_SWORD, 1315, 64),
+ MITHRIL_TWO_HANDED_SWORD(BarType.MITHRIL, SmithingType.TYPE_TWO_HAND_SWORD, 1315, 50),
/**
* Mithril PlateSkirt
*/
- MITHRIL_PLATESKIRT(BarType.MITHRIL, SmithingType.TYPE_PLATE_SKIRT, 1085, 66),
+ MITHRIL_PLATESKIRT(BarType.MITHRIL, SmithingType.TYPE_PLATE_SKIRT, 1085, 50),
/**
* Mithril PlateLegs
*/
- MITHRIL_PLATELEGS(BarType.MITHRIL, SmithingType.TYPE_PLATELEG, 1071, 66),
+ MITHRIL_PLATELEGS(BarType.MITHRIL, SmithingType.TYPE_PLATELEG, 1071, 50),
/**
* Mithril PlateBody
*/
- MITHRIL_PLATEBODY(BarType.MITHRIL, SmithingType.TYPE_PLATEBODY, 1121, 68),
+ MITHRIL_PLATEBODY(BarType.MITHRIL, SmithingType.TYPE_PLATEBODY, 1121, 50),
/**
* Mithril PickAxe
*/
- MITHRIL_PICKAXE(BarType.MITHRIL, SmithingType.TYPE_PICKAXE, 1273, 55),
+ MITHRIL_PICKAXE(BarType.MITHRIL, SmithingType.TYPE_PICKAXE, 1273, 50),
/**
* Adamant Dagger
*/
- ADAMANT_DAGGER(BarType.ADAMANT, SmithingType.TYPE_DAGGER, 1211, 70),
+ ADAMANT_DAGGER(BarType.ADAMANT, SmithingType.TYPE_DAGGER, 1211, 60),
/**
* Adamant Hatchet
*/
- ADAMANT_AXE(BarType.ADAMANT, SmithingType.TYPE_AXE, 1357, 71),
+ ADAMANT_AXE(BarType.ADAMANT, SmithingType.TYPE_AXE, 1357, 60),
/**
* Adamant Mace
*/
- ADAMANT_MACE(BarType.ADAMANT, SmithingType.TYPE_MACE, 1430, 72),
+ ADAMANT_MACE(BarType.ADAMANT, SmithingType.TYPE_MACE, 1430, 60),
/**
* Adamant Med Helm
*/
- ADAMANT_MEDIUM_HELM(BarType.ADAMANT, SmithingType.TYPE_MEDIUM_HELM, 1145, 73),
+ ADAMANT_MEDIUM_HELM(BarType.ADAMANT, SmithingType.TYPE_MEDIUM_HELM, 1145, 60),
/**
* Adamant Crossbow Bolt
*/
- ADAMANT_BOLT(BarType.ADAMANT, SmithingType.TYPE_CROSSBOW_BOLT, 9380, 73),
+ ADAMANT_BOLT(BarType.ADAMANT, SmithingType.TYPE_CROSSBOW_BOLT, 9380, 60),
/**
* Adamant Sword
*/
- ADAMANT_SWORD(BarType.ADAMANT, SmithingType.TYPE_SWORD, 1287, 74),
+ ADAMANT_SWORD(BarType.ADAMANT, SmithingType.TYPE_SWORD, 1287, 60),
/**
* Adamant Dart Tips
*/
- ADAMANT_DART_TIPS(BarType.ADAMANT, SmithingType.TYPE_DART_TIP, 823, 74),
+ ADAMANT_DART_TIPS(BarType.ADAMANT, SmithingType.TYPE_DART_TIP, 823, 60),
/**
* Adamant Nails
*/
- ADAMANT_NAILS(BarType.ADAMANT, SmithingType.TYPE_NAIL, 4823, 74),
+ ADAMANT_NAILS(BarType.ADAMANT, SmithingType.TYPE_NAIL, 4823, 60),
/**
* Adamant Arrow Tips
*/
- ADAMANT_ARROW_TIPS(BarType.ADAMANT, SmithingType.TYPE_ARROW_TIP, 43, 75),
+ ADAMANT_ARROW_TIPS(BarType.ADAMANT, SmithingType.TYPE_ARROW_TIP, 43, 60),
/**
* Adamant Scmitar
*/
- ADAMANT_SCIMITAR(BarType.ADAMANT, SmithingType.TYPE_SCIMITAR, 1331, 75),
+ ADAMANT_SCIMITAR(BarType.ADAMANT, SmithingType.TYPE_SCIMITAR, 1331, 60),
/**
* Adamant Crossbow Limbs
*/
- ADAMANT_LIMBS(BarType.ADAMANT, SmithingType.TYPE_CROSSBOW_LIMB, 9429, 76),
+ ADAMANT_LIMBS(BarType.ADAMANT, SmithingType.TYPE_CROSSBOW_LIMB, 9429, 60),
/**
* Adamant LongSword
*/
- ADAMANT_LONGSWORD(BarType.ADAMANT, SmithingType.TYPE_LONGSWORD, 1301, 76),
+ ADAMANT_LONGSWORD(BarType.ADAMANT, SmithingType.TYPE_LONGSWORD, 1301, 60),
/**
* Adamant Knife
*/
- ADAMANT_KNIFE(BarType.ADAMANT, SmithingType.TYPE_THROWING_KNIFE, 867, 77),
+ ADAMANT_KNIFE(BarType.ADAMANT, SmithingType.TYPE_THROWING_KNIFE, 867, 60),
/**
* Adamant Full Helm
*/
- ADAMANT_FULL_HELM(BarType.ADAMANT, SmithingType.TYPE_FULL_HELM, 1161, 77),
+ ADAMANT_FULL_HELM(BarType.ADAMANT, SmithingType.TYPE_FULL_HELM, 1161, 60),
/**
* Adamant Square Shield
*/
- ADAMANT_SQUARE_SHIELD(BarType.ADAMANT, SmithingType.TYPE_SQUARE_SHIELD, 1183, 78),
+ ADAMANT_SQUARE_SHIELD(BarType.ADAMANT, SmithingType.TYPE_SQUARE_SHIELD, 1183, 60),
/**
* Adamant Warhammer
*/
- ADAMANT_WARHAMMER(BarType.ADAMANT, SmithingType.TYPE_WARHAMMER, 1345, 79),
+ ADAMANT_WARHAMMER(BarType.ADAMANT, SmithingType.TYPE_WARHAMMER, 1345, 60),
/**
* Adamant BattleAxe
*/
- ADAMANT_BATTLEAXE(BarType.ADAMANT, SmithingType.TYPE_BATTLE_AXE, 1371, 80),
+ ADAMANT_BATTLEAXE(BarType.ADAMANT, SmithingType.TYPE_BATTLE_AXE, 1371, 60),
/**
* Adamant ChainBody
*/
- ADAMANT_CHAINBODY(BarType.ADAMANT, SmithingType.TYPE_CHAINBODY, 1111, 81),
+ ADAMANT_CHAINBODY(BarType.ADAMANT, SmithingType.TYPE_CHAINBODY, 1111, 60),
/**
* Adamant KiteShield
*/
- ADAMANT_KITESHIELD(BarType.ADAMANT, SmithingType.TYPE_KITE_SHIELD, 1199, 82),
+ ADAMANT_KITESHIELD(BarType.ADAMANT, SmithingType.TYPE_KITE_SHIELD, 1199, 60),
/**
* Adamant Claws
*/
- ADAMANT_CLAWS(BarType.ADAMANT, SmithingType.TYPE_CLAWS, 3100, 83),
+ ADAMANT_CLAWS(BarType.ADAMANT, SmithingType.TYPE_CLAWS, 3100, 60),
/**
* Adamant 2H
*/
- ADAMANT_TWO_HANDED_SWORD(BarType.ADAMANT, SmithingType.TYPE_TWO_HAND_SWORD, 1317, 84),
+ ADAMANT_TWO_HANDED_SWORD(BarType.ADAMANT, SmithingType.TYPE_TWO_HAND_SWORD, 1317, 60),
/**
* Adamant PlateSkirt
*/
- ADAMANT_PLATE_SKIRT(BarType.ADAMANT, SmithingType.TYPE_PLATE_SKIRT, 1091, 86),
+ ADAMANT_PLATE_SKIRT(BarType.ADAMANT, SmithingType.TYPE_PLATE_SKIRT, 1091, 60),
/**
* Adamant PlateLegs
*/
- ADAMANT_PLATE_LEGS(BarType.ADAMANT, SmithingType.TYPE_PLATELEG, 1073, 86),
+ ADAMANT_PLATE_LEGS(BarType.ADAMANT, SmithingType.TYPE_PLATELEG, 1073, 60),
/**
* Adamant PlateBody
*/
- ADAMANT_PLATE_BODY(BarType.ADAMANT, SmithingType.TYPE_PLATEBODY, 1123, 88),
+ ADAMANT_PLATE_BODY(BarType.ADAMANT, SmithingType.TYPE_PLATEBODY, 1123, 60),
/**
* Adamant PickAxe
*/
- ADAMANT_PICKAXE(BarType.ADAMANT, SmithingType.TYPE_PICKAXE, 1271, 75),
+ ADAMANT_PICKAXE(BarType.ADAMANT, SmithingType.TYPE_PICKAXE, 1271, 60),
/**
* Rune Dagger
*/
- RUNE_DAGGER(BarType.RUNITE, SmithingType.TYPE_DAGGER, 1213, 85),
+ RUNE_DAGGER(BarType.RUNITE, SmithingType.TYPE_DAGGER, 1213, 70),
/**
* Rune Hatchet
*/
- RUNITE_AXE(BarType.RUNITE, SmithingType.TYPE_AXE, 1359, 86),
+ RUNITE_AXE(BarType.RUNITE, SmithingType.TYPE_AXE, 1359, 70),
/**
* Rune Mace
*/
- RUNITE_MACE(BarType.RUNITE, SmithingType.TYPE_MACE, 1432, 87),
+ RUNITE_MACE(BarType.RUNITE, SmithingType.TYPE_MACE, 1432, 70),
/**
* Rune Med Helm
*/
- RUNITE_MEDIUM_HELM(BarType.RUNITE, SmithingType.TYPE_MEDIUM_HELM, 1147, 88),
+ RUNITE_MEDIUM_HELM(BarType.RUNITE, SmithingType.TYPE_MEDIUM_HELM, 1147, 70),
/**
* Rune Crossbow Bolt
*/
- RUNITE_BOLT(BarType.RUNITE, SmithingType.TYPE_CROSSBOW_BOLT, 9381, 88),
+ RUNITE_BOLT(BarType.RUNITE, SmithingType.TYPE_CROSSBOW_BOLT, 9381, 70),
/**
* Rune Sword
*/
- RUNITE_SWORD(BarType.RUNITE, SmithingType.TYPE_SWORD, 1289, 89),
+ RUNITE_SWORD(BarType.RUNITE, SmithingType.TYPE_SWORD, 1289, 70),
/**
* Rune Dart Tips
*/
- RUNITE_DART_TIPS(BarType.RUNITE, SmithingType.TYPE_DART_TIP, 824, 89),
+ RUNITE_DART_TIPS(BarType.RUNITE, SmithingType.TYPE_DART_TIP, 824, 70),
/**
* Rune Nails
*/
- RUNITE_NAILS(BarType.RUNITE, SmithingType.TYPE_NAIL, 4824, 89),
+ RUNITE_NAILS(BarType.RUNITE, SmithingType.TYPE_NAIL, 4824, 70),
/**
* Rune Arrow Tips
*/
- RUNITE_ARROW_TIPS(BarType.RUNITE, SmithingType.TYPE_ARROW_TIP, 44, 90),
+ RUNITE_ARROW_TIPS(BarType.RUNITE, SmithingType.TYPE_ARROW_TIP, 44, 70),
/**
* Rune Scmitar
*/
- RUNITE_SCIMITAR(BarType.RUNITE, SmithingType.TYPE_SCIMITAR, 1333, 90),
+ RUNITE_SCIMITAR(BarType.RUNITE, SmithingType.TYPE_SCIMITAR, 1333, 70),
/**
* Rune Crossbow Limbs
*/
- RUNITE_LIMBS(BarType.RUNITE, SmithingType.TYPE_CROSSBOW_LIMB, 9431, 91),
+ RUNITE_LIMBS(BarType.RUNITE, SmithingType.TYPE_CROSSBOW_LIMB, 9431, 70),
/**
* Rune LongSword
*/
- RUNITE_LONGSWORD(BarType.RUNITE, SmithingType.TYPE_LONGSWORD, 1303, 91),
+ RUNITE_LONGSWORD(BarType.RUNITE, SmithingType.TYPE_LONGSWORD, 1303, 70),
/**
* Rune Knife
*/
- RUNITE_KNIFE(BarType.RUNITE, SmithingType.TYPE_THROWING_KNIFE, 868, 92),
+ RUNITE_KNIFE(BarType.RUNITE, SmithingType.TYPE_THROWING_KNIFE, 868, 70),
/**
* Rune Full Helm
*/
- RUNITE_FULL_HELM(BarType.RUNITE, SmithingType.TYPE_FULL_HELM, 1163, 92),
+ RUNITE_FULL_HELM(BarType.RUNITE, SmithingType.TYPE_FULL_HELM, 1163, 70),
/**
* Rune Square Shield
*/
- RUNITE_SQUARE_SHIELD(BarType.RUNITE, SmithingType.TYPE_SQUARE_SHIELD, 1185, 93),
+ RUNITE_SQUARE_SHIELD(BarType.RUNITE, SmithingType.TYPE_SQUARE_SHIELD, 1185, 70),
/**
* Rune Warhammer
*/
- RUNITE_WARHAMMER(BarType.RUNITE, SmithingType.TYPE_WARHAMMER, 1347, 94),
+ RUNITE_WARHAMMER(BarType.RUNITE, SmithingType.TYPE_WARHAMMER, 1347, 70),
/**
* Rune BattleAxe
*/
- RUNITE_BATTLEAXE(BarType.RUNITE, SmithingType.TYPE_BATTLE_AXE, 1373, 95),
+ RUNITE_BATTLEAXE(BarType.RUNITE, SmithingType.TYPE_BATTLE_AXE, 1373, 70),
/**
* Rune ChainBody
*/
- RUNITE_CHAINBODY(BarType.RUNITE, SmithingType.TYPE_CHAINBODY, 1113, 96),
+ RUNITE_CHAINBODY(BarType.RUNITE, SmithingType.TYPE_CHAINBODY, 1113, 70),
/**
* Rune KiteShield
*/
- RUNITE_KITESHIELD(BarType.RUNITE, SmithingType.TYPE_KITE_SHIELD, 1201, 97),
+ RUNITE_KITESHIELD(BarType.RUNITE, SmithingType.TYPE_KITE_SHIELD, 1201, 70),
/**
* Rune Claws
*/
- RUNITE_CLAWS(BarType.RUNITE, SmithingType.TYPE_CLAWS, 3101, 98),
+ RUNITE_CLAWS(BarType.RUNITE, SmithingType.TYPE_CLAWS, 3101, 70),
/**
* Rune 2H
*/
- RUNITE_TWO_HANDED_SWORD(BarType.RUNITE, SmithingType.TYPE_TWO_HAND_SWORD, 1319, 99),
+ RUNITE_TWO_HANDED_SWORD(BarType.RUNITE, SmithingType.TYPE_TWO_HAND_SWORD, 1319, 70),
/**
* Rune PlateSkirt
*/
- RUNITE_PLATE_SKIRT(BarType.RUNITE, SmithingType.TYPE_PLATE_SKIRT, 1093, 99),
+ RUNITE_PLATE_SKIRT(BarType.RUNITE, SmithingType.TYPE_PLATE_SKIRT, 1093, 70),
/**
* Rune PlateLegs
*/
- RUNITE_PLATE_LEGS(BarType.RUNITE, SmithingType.TYPE_PLATELEG, 1079, 99),
+ RUNITE_PLATE_LEGS(BarType.RUNITE, SmithingType.TYPE_PLATELEG, 1079, 70),
/**
* Rune PlateBody
*/
- RUNITE_PLATE_BODY(BarType.RUNITE, SmithingType.TYPE_PLATEBODY, 1127, 99),
+ RUNITE_PLATE_BODY(BarType.RUNITE, SmithingType.TYPE_PLATEBODY, 1127, 70),
/**
* Rune PickAxe
*/
- RUNITE_PICKAXE(BarType.RUNITE, SmithingType.TYPE_PICKAXE, 1275, 90),
+ RUNITE_PICKAXE(BarType.RUNITE, SmithingType.TYPE_PICKAXE, 1275, 70),
/**
* Blurite CrossBow bolts
@@ -800,7 +800,7 @@ public enum Bars {
/**
* Blurite Crossbow Limbs
*/
- BLURITE_CROSSBOW_LIMBS(BarType.BLURITE, SmithingType.TYPE_CROSSBOW_LIMB, 9422, 13);
+ BLURITE_CROSSBOW_LIMBS(BarType.BLURITE, SmithingType.TYPE_CROSSBOW_LIMB, 9422, 8);
/**
* A map of object ids to primary ingredients.
diff --git a/Server/src/main/content/global/skill/smithing/DragonShieldDialogue.java b/Server/src/main/content/global/skill/smithing/DragonShieldDialogue.java
index 84d4e7edf..64833097c 100644
--- a/Server/src/main/content/global/skill/smithing/DragonShieldDialogue.java
+++ b/Server/src/main/content/global/skill/smithing/DragonShieldDialogue.java
@@ -1,55 +1,23 @@
package content.global.skill.smithing;
+import content.global.skill.skillcapeperks.SkillcapePerks;
+import core.api.Container;
import core.game.dialogue.DialoguePlugin;
import core.game.node.entity.skill.Skills;
import core.game.node.entity.player.Player;
-import core.game.node.item.Item;
import core.plugin.Initializable;
-import core.game.world.update.flag.context.Animation;
+import org.rs09.consts.Items;
+
+import static core.api.ContentAPIKt.*;
/**
* Represents the dialogue plugin used for making a dragon shield.
* @author 'Vexia
- * @version 1.0
+ * @author Player Name
+ * @version 1.1
*/
@Initializable
public final class DragonShieldDialogue extends DialoguePlugin {
-
- /**
- * Represents the item shield parts.
- */
- private static final Item[] SHIELD_PARTS = new Item[] { new Item(2366), new Item(2368) };
-
- /**
- * Represents th edraconic visage item.
- */
- private static final Item DRACONIC_VISAGE = new Item(11286);
-
- /**
- * Represents the anti dragon fire shield.
- */
- private static final Item ANTI_DRAGONSHIELD = new Item(1540);
-
- /**
- * Represents the dragon fire shield item.
- */
- private static final Item DRAGON_FIRESHIELD = new Item(11284);
-
- /**
- * Represents the shield item.
- */
- private static final Item SQ_SHIELD = new Item(1187);
-
- /**
- * Represents the hammering animation.
- */
- private static Animation ANIMATION = new Animation(898);
-
- /**
- * Represents the shield type.
- */
- private int type;
-
/**
* Constructs a new {@code DragonShieldDialogue} {@code Object}.
*/
@@ -74,11 +42,26 @@ public final class DragonShieldDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
- type = (int) args[0];
+ if (!inInventory(player, Items.HAMMER_2347, 1) && !SkillcapePerks.isActive(SkillcapePerks.BAREFISTED_SMITHING, player)) {
+ interpreter.sendDialogue("You need a hammer to work the metal with.");
+ }
+ int type = (int) args[0];
if (type == 1) {
- interpreter.sendDialogue("You set to work trying to fix the ancient shield. It's seen some", "heavy reward and needs some serious work doing to it.");
+ if (!(inInventory(player, Items.SHIELD_RIGHT_HALF_2368, 1) && inInventory(player, Items.SHIELD_LEFT_HALF_2366, 1))) {
+ interpreter.sendDialogue("You need the other half of the shield."); //todo authentic message
+ return false;
+ }
+ interpreter.sendDialogue("You set to work trying to fix the ancient shield. It's seen some", "heavy action and needs some serious work doing to it.");
stage = 0;
} else {
+ if (!inInventory(player, Items.ANTI_DRAGON_SHIELD_1540, 1)) {
+ interpreter.sendDialogue("You need an anti-dragon shield to attach the visage to."); //todo authentic message
+ return false;
+ }
+ if (!inInventory(player, Items.DRACONIC_VISAGE_11286, 1)) {
+ interpreter.sendDialogue("You don't have anything you could attach to the shield."); //todo authentic message
+ return false;
+ }
interpreter.sendDialogue("You set to work, trying to attach the ancient draconic", "visage to your anti-dragonbreath shield. It's not easy to", "work with the ancient artifact and it takes all of your", "skills as a master smith.");
stage = 10;
}
@@ -89,26 +72,26 @@ public final class DragonShieldDialogue extends DialoguePlugin {
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
- player.lock(5);
- player.animate(ANIMATION);
- interpreter.sendDialogue("Even for an experienced armourer it is not an easy task, but", "eventually it is ready. You have restored the dragon square shield to", "its former glory.");
- if (player.getInventory().remove(SHIELD_PARTS)) {
- player.getInventory().add(SQ_SHIELD);
+ lock(player, 5);
+ animate(player, 898, false);
+ if (removeItem(player, Items.SHIELD_RIGHT_HALF_2368, Container.INVENTORY) && removeItem(player, Items.SHIELD_LEFT_HALF_2366, Container.INVENTORY)) {
+ interpreter.sendDialogue("Even for an experienced armourer it is not an easy task, but", "eventually it is ready. You have restored the dragon square shield to", "its former glory.");
+ addItem(player, Items.DRAGON_SQ_SHIELD_1187, 1, Container.INVENTORY);
+ rewardXP(player, Skills.SMITHING, 75);
}
- player.getSkills().addExperience(Skills.SMITHING, 75, true);
stage = 1;
break;
case 1:
end();
break;
case 10:
- player.lock(5);
- player.animate(ANIMATION);
- interpreter.sendDialogue("Even for an experienced armourer it is not an easy task, but", "eventually it is ready. You have crafted the", "draconic visage and anti-dragonbreath shield into a", "dragonfire shield.");
- if (player.getInventory().remove(DRACONIC_VISAGE, ANTI_DRAGONSHIELD)) {
- player.getInventory().add(DRAGON_FIRESHIELD);
+ lock(player, 5);
+ animate(player, 898, false);
+ if (removeItem(player, Items.ANTI_DRAGON_SHIELD_1540, Container.INVENTORY) && removeItem(player, Items.DRACONIC_VISAGE_11286, Container.INVENTORY)) {
+ interpreter.sendDialogue("Even for an experienced armourer it is not an easy task, but", "eventually it is ready. You have crafted the", "draconic visage and anti-dragonbreath shield into a", "dragonfire shield.");
+ addItem(player, Items.DRAGONFIRE_SHIELD_11284, 1, Container.INVENTORY);
+ rewardXP(player, Skills.SMITHING, 2000);
}
- player.getSkills().addExperience(Skills.SMITHING, 2000);
stage = 1;
break;
}
diff --git a/Server/src/main/content/global/skill/smithing/FurnaceOptionPlugin.java b/Server/src/main/content/global/skill/smithing/FurnaceOptionPlugin.java
index 1468549d2..e34e71cc7 100644
--- a/Server/src/main/content/global/skill/smithing/FurnaceOptionPlugin.java
+++ b/Server/src/main/content/global/skill/smithing/FurnaceOptionPlugin.java
@@ -19,6 +19,7 @@ import core.plugin.Plugin;
import java.util.ArrayList;
import java.util.List;
+import content.data.Quests;
/**
* Represents the plugin used for the furnace.
@@ -64,7 +65,7 @@ public final class FurnaceOptionPlugin extends OptionHandler {
private static void show(final Player player) {
player.getInterfaceManager().openChatbox(311);
player.getPacketDispatch().sendItemZoomOnInterface(2349, 150, 311, 4);
- if (player.getQuestRepository().isComplete("The Knight's Sword")) {
+ if (player.getQuestRepository().isComplete(Quests.THE_KNIGHTS_SWORD)) {
player.getPacketDispatch().sendString(" Blurite", 311, 20);
}
player.getPacketDispatch().sendItemZoomOnInterface(Bar.BLURITE.getProduct().getId(), 150, 311, 5);
diff --git a/Server/src/main/content/global/skill/smithing/SmithingPulse.java b/Server/src/main/content/global/skill/smithing/SmithingPulse.java
index f9b7eec98..97a844d51 100644
--- a/Server/src/main/content/global/skill/smithing/SmithingPulse.java
+++ b/Server/src/main/content/global/skill/smithing/SmithingPulse.java
@@ -14,6 +14,7 @@ import core.tools.StringUtils;
import static core.api.ContentAPIKt.hasRequirement;
import static core.api.ContentAPIKt.sendDialogue;
+import content.data.Quests;
/**
* Represents the pulse used to smith a bar.
@@ -67,11 +68,11 @@ public class SmithingPulse extends SkillPulse- {
player.getDialogueInterpreter().sendDialogue("You need a hammer to work the metal with.");
return false;
}
- if (!player.getQuestRepository().isComplete("The Tourist Trap") && bar.getSmithingType() == SmithingType.TYPE_DART_TIP) {
+ if (!player.getQuestRepository().isComplete(Quests.THE_TOURIST_TRAP) && bar.getSmithingType() == SmithingType.TYPE_DART_TIP) {
player.getDialogueInterpreter().sendDialogue("You need to complete Tourist Trap to smith dart tips.");
return false;
}
- if (!hasRequirement(player, "Death Plateau", false) && bar.getSmithingType() == SmithingType.TYPE_CLAWS) {
+ if (!hasRequirement(player, Quests.DEATH_PLATEAU, false) && bar.getSmithingType() == SmithingType.TYPE_CLAWS) {
sendDialogue(player, "You need to complete Death Plateau to smith claws.");
return false;
}
diff --git a/Server/src/main/content/global/skill/smithing/SmithingType.java b/Server/src/main/content/global/skill/smithing/SmithingType.java
index fd38a6209..e4a05e640 100644
--- a/Server/src/main/content/global/skill/smithing/SmithingType.java
+++ b/Server/src/main/content/global/skill/smithing/SmithingType.java
@@ -32,7 +32,7 @@ public enum SmithingType {
/**
* Crossbow bolt
*/
- TYPE_CROSSBOW_BOLT(1, 50, 51, new int[] { 56, 55, 54, 53 }, 10),
+ TYPE_CROSSBOW_BOLT(1, 50, 51, new int[] { 56, 55, 54, 53 }, 30),
/**
* Sword
@@ -42,7 +42,7 @@ public enum SmithingType {
/**
* Dart tips
*/
- TYPE_DART_TIP(1, 66, 67, new int[] { 72, 71, 70, 69 }, 10),
+ TYPE_DART_TIP(1, 66, 67, new int[] { 72, 71, 70, 69 }, 30),
/**
* Nails
@@ -66,7 +66,7 @@ public enum SmithingType {
/**
* Arrow Tips
*/
- TYPE_ARROW_TIP(1, 106, 107, new int[] { 112, 111, 110, 109 }, 15),
+ TYPE_ARROW_TIP(1, 106, 107, new int[] { 112, 111, 110, 109 }, 45),
/**
* Scimitar
@@ -86,7 +86,7 @@ public enum SmithingType {
/**
* Throwing Knife
*/
- TYPE_THROWING_KNIFE(1, 138, 139, new int[] { 144, 143, 142, 141 }, 5),
+ TYPE_THROWING_KNIFE(1, 138, 139, new int[] { 144, 143, 142, 141 }, 15),
/**
* Full helm
diff --git a/Server/src/main/content/global/skill/smithing/smelting/Bar.java b/Server/src/main/content/global/skill/smithing/smelting/Bar.java
index 04177c11a..88b4eea74 100644
--- a/Server/src/main/content/global/skill/smithing/smelting/Bar.java
+++ b/Server/src/main/content/global/skill/smithing/smelting/Bar.java
@@ -15,8 +15,8 @@ public enum Bar {
STEEL(30, 17.5, new Item(2353, 1), new Item(453, 2), new Item(440, 1)),
GOLD(40, 22.5, new Item(2357, 1), new Item(444, 1)),
MITHRIL(50, 30, new Item(2359, 1), new Item(447, 1), new Item(453, 4)),
- ADAMANT(70, 37.5, new Item(2361, 1), new Item(449, 1), new Item(453, 6)),
- RUNITE(85, 50, new Item(2363, 1), new Item(451, 1), new Item(453, 8));
+ ADAMANT(60, 37.5, new Item(2361, 1), new Item(449, 1), new Item(453, 6)),
+ RUNITE(70, 50, new Item(2363, 1), new Item(451, 1), new Item(453, 8));
/**
* The ore required.
diff --git a/Server/src/main/content/global/skill/smithing/smelting/SmeltingPulse.java b/Server/src/main/content/global/skill/smithing/smelting/SmeltingPulse.java
index 06c55f1e1..fc5e01696 100644
--- a/Server/src/main/content/global/skill/smithing/smelting/SmeltingPulse.java
+++ b/Server/src/main/content/global/skill/smithing/smelting/SmeltingPulse.java
@@ -1,9 +1,11 @@
package content.global.skill.smithing.smelting;
import static core.api.ContentAPIKt.*;
-import core.api.EquipmentSlot;
+
+import core.api.Container;
import core.game.event.ResourceProducedEvent;
import core.game.container.impl.EquipmentContainer;
+import core.tools.Log;
import org.rs09.consts.Items;
import core.game.world.map.Location;
import core.game.node.entity.skill.SkillPulse;
@@ -16,6 +18,7 @@ import core.game.world.update.flag.context.Graphics;
import core.tools.RandomFunction;
import core.tools.StringUtils;
import org.rs09.consts.Sounds;
+import content.data.Quests;
/**
* Represents the pulse used to smelt.
@@ -87,7 +90,7 @@ public class SmeltingPulse extends SkillPulse
- {
if (bar == null || player == null) {
return false;
}
- if (bar == Bar.BLURITE && !player.getQuestRepository().isComplete("The Knight's Sword")) {
+ if (bar == Bar.BLURITE && !player.getQuestRepository().isComplete(Quests.THE_KNIGHTS_SWORD)) {
return false;
}
if (player.getSkills().getLevel(Skills.SMITHING) < bar.getLevel()) {
@@ -96,9 +99,12 @@ public class SmeltingPulse extends SkillPulse
- {
return false;
}
for (Item item : bar.getOres()) {
+ //Snowscape modification: check gold satchel for coal as well, if carried
if (!player.getInventory().contains(item.getId(), item.getAmount())) {
- player.getPacketDispatch().sendMessage("You do not have the required ores to make this bar.");
- return false;
+ if (!(item.getId() == Items.COAL_453 && inEquipmentOrInventory(player, 10881, 1) && player.goldSatchel.contains(item.getId(), item.getAmount()))) {
+ player.getPacketDispatch().sendMessage("You do not have the required ores to make this bar.");
+ return false;
+ }
}
}
return true;
@@ -125,7 +131,7 @@ public class SmeltingPulse extends SkillPulse
- {
player.getPacketDispatch().sendMessage("You place the required ores and attempt to create a bar of " + StringUtils.formatDisplayName(bar.toString().toLowerCase()) + ".");
}
for (Item i : bar.getOres()) {
- if (!player.getInventory().remove(i)) {
+ if (!(player.getInventory().remove(i) || player.goldSatchel.remove(i))) {
return true;
}
}
@@ -144,7 +150,8 @@ public class SmeltingPulse extends SkillPulse
- {
player.sendMessage("The magic of the Varrock armour enables you to smelt 2 bars at the same time.");
}
}
- player.getInventory().add(new Item(bar.getProduct().getId(), amt));
+ //player.getInventory().add(new Item(bar.getProduct().getId(), amt));
+ addItemOrDrop(player, bar.getProduct().getId(), amt);
player.dispatch(new ResourceProducedEvent(bar.getProduct().getId(), 1, player, -1));
double xp = bar.getExperience() * amt;
// Goldsmith gauntlets
@@ -174,16 +181,6 @@ public class SmeltingPulse extends SkillPulse
- {
return amount < 1;
}
- /**
- * Checks if the player has a ring of forging.
- *
- * @param player the player.
- * @return {@code True} if so.
- */
- public boolean hasForgingRing(Player player) {
- return player.getEquipment().containsItem(RING_OF_FORGING);
- }
-
/**
* Checks if the forging is a succes.
*
@@ -192,19 +189,21 @@ public class SmeltingPulse extends SkillPulse
- {
*/
public boolean success(Player player) {
if (bar == Bar.IRON && !superHeat) {
- if (hasForgingRing(player)) {
- Item ring = getItemFromEquipment(player, EquipmentSlot.RING);
- if(ring != null){
- if(getCharge(ring) == 1000) setCharge(ring, 140);
- adjustCharge(ring, -1);
- if(getCharge(ring) == 0){
- player.getEquipment().remove(ring);
+ if (inEquipment(player, Items.RING_OF_FORGING_2568, 1)) {
+ int charges = getAttribute(player, "ringOfForgingCharges", 140) - 1;
+ if (charges <= 0) {
+ if (removeItem(player, Items.RING_OF_FORGING_2568, Container.EQUIPMENT)) {
+ charges = 140;
sendMessage(player, "Your ring of forging uses up its last charge and disintegrates.");
+ } else {
+ log(this.getClass(), Log.ERR, "Failed to delete empty ring of forging for player " + player.getName());
+ return false; //unfair but prevents exploit if the impossible happens
}
}
+ setAttribute(player, "/save:ringOfForgingCharges", charges);
return true;
} else {
- return RandomFunction.getRandom(100) <= (player.getSkills().getLevel(Skills.SMITHING) >= 45 ? 80 : 50);
+ return RandomFunction.nextBool();
}
}
return true;
diff --git a/Server/src/main/content/global/skill/summoning/SummoningPouch.java b/Server/src/main/content/global/skill/summoning/SummoningPouch.java
index b91634318..90a502e6d 100644
--- a/Server/src/main/content/global/skill/summoning/SummoningPouch.java
+++ b/Server/src/main/content/global/skill/summoning/SummoningPouch.java
@@ -14,27 +14,27 @@ public enum SummoningPouch {
/**
* Represents a spirit wolf pouch.
*/
- SPIRIT_WOLF_POUCH(0, 12047, 1, 4.8, 6829, 0.1, 1, false, new Item(12158), new Item(12155), new Item(2859), new Item(12183, 7)),
+ SPIRIT_WOLF_POUCH(0, 12047, 1, 4.8, 6829, 0.1, 1, false, new Item(12158), new Item(12155), new Item(2859), new Item(12183, 1)),
/**
* Represents a dreadfowl pouch.
*/
- DREADFOWL_POUCH(1, 12043, 4, 9.3, 6825, 0.1, 1, false, new Item(12158), new Item(12155), new Item(2138), new Item(12183, 8)),
+ DREADFOWL_POUCH(1, 12043, 4, 9.3, 6825, 0.1, 1, false, new Item(12158), new Item(12155), new Item(2138), new Item(12183, 1)),
/**
* Represents a spirit spider pouch.
*/
- SPIRIT_SPIDER_POUCH(2, 12059, 10, 12.6, 6841, 0.2, 2, false, new Item(12158), new Item(12155), new Item(6291), new Item(12183, 8)),
+ SPIRIT_SPIDER_POUCH(2, 12059, 10, 12.6, 6841, 0.2, 2, false, new Item(12158), new Item(12155), new Item(6291), new Item(12183, 1)),
/**
* Represents a thorny snail pouch.
*/
- THORNY_SNAIL_POUCH(3, 12019, 13, 12.6, 6806, 0.2, 2, false, new Item(12158), new Item(12155), new Item(3363), new Item(12183, 9)),
+ THORNY_SNAIL_POUCH(3, 12019, 13, 12.6, 6806, 0.2, 2, false, new Item(12158), new Item(12155), new Item(3363), new Item(12183, 1)),
/**
* Represents a granite crab pouch.
*/
- GRANITE_CRAB_POUCH(4, 12009, 16, 21.6, 6796, 0.2, 2, false, new Item(12158), new Item(12155), new Item(440), new Item(12183, 7)),
+ GRANITE_CRAB_POUCH(4, 12009, 16, 21.6, 6796, 0.2, 2, false, new Item(12158), new Item(12155), new Item(440), new Item(12183, 1)),
/**
* Represents a spirit mosquito pouch.
@@ -44,97 +44,97 @@ public enum SummoningPouch {
/**
* Represents a desrrt wyrm pouch.
*/
- DESERT_WYRM_POUCH(6, 12049, 18, 31.2, 6831, 0.4, 1, false, new Item(12159), new Item(12155), new Item(1783), new Item(12183, 45)),
+ DESERT_WYRM_POUCH(6, 12049, 18, 31.2, 6831, 0.4, 1, false, new Item(12159), new Item(12155), new Item(1783), new Item(12183, 1)),
/**
* Represents a spirit scorpion pouch.
*/
- SPIRIT_SCORPION_POUCH(7, 12055, 19, 83.2, 6837, 0.9, 2, false, new Item(12160), new Item(12155), new Item(3095), new Item(12183, 57)),
+ SPIRIT_SCORPION_POUCH(7, 12055, 19, 83.2, 6837, 0.9, 2, false, new Item(12160), new Item(12155), new Item(3095), new Item(12183, 1)),
/**
* Represents a spirit tz-kih pouch.
*/
- SPIRIT_TZ_KIH_POUCH(8, 12808, 22, 96.8, 7361, 1.1, 3, false, new Item(12160), new Item(12168), new Item(12155), new Item(12183, 64)),
+ SPIRIT_TZ_KIH_POUCH(8, 12808, 22, 96.8, 7361, 1.1, 3, false, new Item(12160), new Item(12168), new Item(12155), new Item(12183, 1)),
/**
* Represents an albino rat pouch.
*/
- ALBINO_RAT_POUCH(9, 12067, 23, 202.4, 6847, 2.3, 1, false, new Item(12163), new Item(12155), new Item(2134), new Item(12183, 75)),
+ ALBINO_RAT_POUCH(9, 12067, 23, 202.4, 6847, 2.3, 1, false, new Item(12163), new Item(12155), new Item(2134), new Item(12183, 1)),
/**
* Represents a spirit kalphite pouch.
*/
- SPIRIT_KALPHITE_POUCH(10, 12063, 25, 220, 6994, 2.5, 3,false, new Item(12163), new Item(12155), new Item(3138), new Item(12183, 51)),
+ SPIRIT_KALPHITE_POUCH(10, 12063, 25, 220, 6994, 2.5, 3,false, new Item(12163), new Item(12155), new Item(3138), new Item(12183, 1)),
/**
* Represents a compost mound pouch.
*/
- COMPOST_MOUND_POUCH(11, 12091, 28, 49.8, 6871, 0.6, 6, false, new Item(12159), new Item(12155), new Item(6032), new Item(12183, 47)),
+ COMPOST_MOUND_POUCH(11, 12091, 28, 49.8, 6871, 0.6, 6, false, new Item(12159), new Item(12155), new Item(6032), new Item(12183, 1)),
/**
* Represents a giant chinchompa pouch.
*/
- GIANT_CHINCHOMPA_POUCH(12, 12800, 29, 255.2, 7353, 2.9, 1, false, new Item(12163), new Item(12155), new Item(10033), new Item(12183, 84)),
+ GIANT_CHINCHOMPA_POUCH(12, 12800, 29, 255.2, 7353, 2.9, 1, false, new Item(12163), new Item(12155), new Item(10033), new Item(12183, 1)),
/**
* Represents a vampire bat pouch.
*/
- VAMPIRE_BAT_POUCH(13, 12053, 31, 136, 6835, 1.5, 4, false, new Item(12160), new Item(12155), new Item(3325), new Item(12183, 81)),
+ VAMPIRE_BAT_POUCH(13, 12053, 31, 136, 6835, 1.5, 4, false, new Item(12160), new Item(12155), new Item(3325), new Item(12183, 1)),
/**
* Represents a honey badger pouch.
*/
- HONEY_BADGER_POUCH(14, 12065, 32, 140.8, 6845, 1.6, 4, false, new Item(12160), new Item(12155), new Item(12156), new Item(12183, 84)),
+ HONEY_BADGER_POUCH(14, 12065, 32, 140.8, 6845, 1.6, 4, false, new Item(12160), new Item(12155), new Item(12156), new Item(12183, 1)),
/**
* Represents a beaver pouch.
*/
- BEAVER_POUCH(15, 12021, 33, 57.6, 6808, 0.7, 4, true, new Item(12159), new Item(12155), new Item(1519), new Item(12183, 72)),
+ BEAVER_POUCH(15, 12021, 33, 57.6, 6808, 0.7, 4, true, new Item(12159), new Item(12155), new Item(1519), new Item(12183, 1)),
/**
* Represents a void ravager pouch.
*/
- VOID_RAVAGER_POUCH(16, 12818, 34, 59.6, 7370, 0.7, 4, false, new Item(12159), new Item(12164), new Item(12155), new Item(12183, 74)),
+ VOID_RAVAGER_POUCH(16, 12818, 34, 59.6, 7370, 0.7, 4, false, new Item(12159), new Item(12164), new Item(12155), new Item(12183, 1)),
/**
* Represents a void spinner pouch.
*/
- VOID_SPINNER_POUCH(17, 12780, 34, 59.6, 7333, 0.7, 4, true, new Item(12163), new Item(12166), new Item(12155), new Item(12183, 74)),
+ VOID_SPINNER_POUCH(17, 12780, 34, 59.6, 7333, 0.7, 4, true, new Item(12163), new Item(12166), new Item(12155), new Item(12183, 1)),
/**
* Represents a void torcher pouch.
*/
- VOID_TORCHER_POUCH(18, 12798, 34, 59.6, 7351, 0.7, 4, false, new Item(12163), new Item(12167), new Item(12155), new Item(12183, 74)),
+ VOID_TORCHER_POUCH(18, 12798, 34, 59.6, 7351, 0.7, 4, false, new Item(12163), new Item(12167), new Item(12155), new Item(12183, 1)),
/**
* Represents a void shifter pouch.
*/
- VOID_SHIFTER_POUCH(19, 12814, 34, 59.6, 7367, 0.7, 4, false, new Item(12163), new Item(12165), new Item(12155), new Item(12183, 74)),
+ VOID_SHIFTER_POUCH(19, 12814, 34, 59.6, 7367, 0.7, 4, false, new Item(12163), new Item(12165), new Item(12155), new Item(12183, 1)),
/**
* Represents a bronze minotaur pouch.
*/
- BRONZE_MINOTAUR_POUCH(64, 12073, 36, 316.8, 6853, 3.6, 3, false, new Item(12163), new Item(12155), new Item(2349), new Item(12183, 102)),
+ BRONZE_MINOTAUR_POUCH(64, 12073, 36, 316.8, 6853, 3.6, 3, false, new Item(12163), new Item(12155), new Item(2349), new Item(12183, 1)),
/**
* Represents an iron minotaur pouch.
*/
- IRON_MINOTAUR_POUCH(65, 12075, 46, 404.8, 6855, 4.6, 9, false, new Item(12163), new Item(12155), new Item(2351), new Item(12183, 125)),
+ IRON_MINOTAUR_POUCH(65, 12075, 46, 404.8, 6855, 4.6, 9, false, new Item(12163), new Item(12155), new Item(2351), new Item(12183, 1)),
/**
* Represents a steel minotaur pouch.
*/
- STEEL_MINOTAUR_POUCH(66, 12077, 56, 492.8, 6857, 5.6, 9, false, new Item(12163), new Item(12155), new Item(2353), new Item(12183, 141)),
+ STEEL_MINOTAUR_POUCH(66, 12077, 56, 492.8, 6857, 5.6, 9, false, new Item(12163), new Item(12155), new Item(2353), new Item(12183, 1)),
/**
* Represents a mithril minotaur pouch.
*/
- MITHRIL_MINOTAUR_POUCH(67, 12079, 66, 580.8, 6859, 6.6, 9,false, new Item(12163), new Item(12155), new Item(2359), new Item(12183, 152)),
+ MITHRIL_MINOTAUR_POUCH(67, 12079, 66, 580.8, 6859, 6.6, 9,false, new Item(12163), new Item(12155), new Item(2359), new Item(12183, 1)),
/**
* Represents an adamant minotaur pouch.
*/
- ADAMANT_MINOTAUR_POUCH(68, 12081, 76, 668.8, 6861, 7.6, 9, false, new Item(12163), new Item(12155), new Item(2361), new Item(12183, 144)),
+ ADAMANT_MINOTAUR_POUCH(68, 12081, 76, 668.8, 6861, 7.6, 9, false, new Item(12163), new Item(12155), new Item(2361), new Item(12183, 1)),
/**
* Represents a rune minotaur pouch.
@@ -144,132 +144,132 @@ public enum SummoningPouch {
/**
* Represents a bull ant pouch.
*/
- BULL_ANT_POUCH(20, 12087, 40, 52.8, 6867, 0.6, 5, false, new Item(12158), new Item(12155), new Item(6010), new Item(12183, 11)),
+ BULL_ANT_POUCH(20, 12087, 40, 52.8, 6867, 0.6, 5, false, new Item(12158), new Item(12155), new Item(6010), new Item(12183, 1)),
/**
* Represents a macaw pouch.
*/
- MACAW_POUCH(21, 12071, 41, 72.4, 6851, 0.8, 5, true, new Item(12159), new Item(12155), new Item(249), new Item(12183, 78)),
+ MACAW_POUCH(21, 12071, 41, 72.4, 6851, 0.8, 5, true, new Item(12159), new Item(12155), new Item(249), new Item(12183, 1)),
/**
* Represents an evil turnip pouch.
*/
- EVIL_TURNIP_POUCH(22, 12051, 42, 184.8, 6833, 2.1, 5, false, new Item(12160), new Item(12155), new Item(12153), new Item(12183, 104)),
+ EVIL_TURNIP_POUCH(22, 12051, 42, 184.8, 6833, 2.1, 5, false, new Item(12160), new Item(12155), new Item(12153), new Item(12183, 1)),
/**
* Represents a spirit cockatrice pouch.
*/
- SPIRIT_COCKATRICE_POUCH(23, 12095, 43, 75.2, 6875, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12109), new Item(12183, 88)),
+ SPIRIT_COCKATRICE_POUCH(23, 12095, 43, 75.2, 6875, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12109), new Item(12183, 1)),
/**
* Represents a spirit guthatrice pouch.
*/
- SPIRIT_GUTHATRICE_POUCH(24, 12097, 43, 75.2, 6877, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12111), new Item(12183, 88)),
+ SPIRIT_GUTHATRICE_POUCH(24, 12097, 43, 75.2, 6877, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12111), new Item(12183, 1)),
/**
* Represents a spirit saratrice pouch.
*/
- SPIRIT_SARATRICE_POUCH(25, 12099, 43, 75.2, 6879, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12113), new Item(12183, 88)),
+ SPIRIT_SARATRICE_POUCH(25, 12099, 43, 75.2, 6879, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12113), new Item(12183, 1)),
/**
* Represents a spirit zamatrice pouch.
*/
- SPIRIT_ZAMATRICE_POUCH(26, 12101, 43, 75.2, 6881, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12115), new Item(12183, 88)),
+ SPIRIT_ZAMATRICE_POUCH(26, 12101, 43, 75.2, 6881, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12115), new Item(12183, 1)),
/**
* Represents a spirit pengatrice pouch.
*/
- SPIRIT_PENGATRICE_POUCH(27, 12103, 43, 75.2, 6883, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12117), new Item(12183, 88)),
+ SPIRIT_PENGATRICE_POUCH(27, 12103, 43, 75.2, 6883, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12117), new Item(12183, 1)),
/**
* Represents a coraxatrice pouch.
*/
- SPIRIT_CORAXATRICE_POUCH(28, 12105, 43, 75.2, 6885, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12119), new Item(12183, 88)),
+ SPIRIT_CORAXATRICE_POUCH(28, 12105, 43, 75.2, 6885, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12119), new Item(12183, 1)),
/**
* Represents a vulatrice pouch.
*/
- SPIRIT_VULATRICE(29, 12107, 43, 75.2, 6887, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12121), new Item(12183, 88)),
+ SPIRIT_VULATRICE(29, 12107, 43, 75.2, 6887, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12121), new Item(12183, 1)),
/**
* Represents a pyrelord pouch.
*/
- PYRELORD_POUCH(30, 12816, 46, 202.4, 7377, 2.3, 5, false, new Item(12160), new Item(12155), new Item(590), new Item(12183, 111)),
+ PYRELORD_POUCH(30, 12816, 46, 202.4, 7377, 2.3, 5, false, new Item(12160), new Item(12155), new Item(590), new Item(12183, 1)),
/**
* Represents a magpie pouch.
*/
- MAGPIE_POUCH(31, 12041, 47, 83.2, 6824, 0.9, 5, true, new Item(12159), new Item(12155), new Item(1635), new Item(12183, 88)),
+ MAGPIE_POUCH(31, 12041, 47, 83.2, 6824, 0.9, 5, true, new Item(12159), new Item(12155), new Item(1635), new Item(12183, 1)),
/**
* Represents a bloated leech pouch.
*/
- BLOATED_LEECH_POUCH(32, 12061, 49, 215.2, 6843, 2.4, 5, false, new Item(12160), new Item(12155), new Item(2132), new Item(12183, 117)),
+ BLOATED_LEECH_POUCH(32, 12061, 49, 215.2, 6843, 2.4, 5, false, new Item(12160), new Item(12155), new Item(2132), new Item(12183, 1)),
/**
* Represents a spirit terrorbird pouch.
*/
- SPIRIT_TERRORBIRD_POUCH(33, 12007, 52, 68.4, 6794, 0.8, 6, true, new Item(12158), new Item(12155), new Item(9978), new Item(12183, 12)),
+ SPIRIT_TERRORBIRD_POUCH(33, 12007, 52, 68.4, 6794, 0.8, 6, true, new Item(12158), new Item(12155), new Item(9978), new Item(12183, 1)),
/**
* Represents an abyssal parasite pouch.
*/
- ABYSSAL_PARASITE_POUCH(34, true,12035, 54, 94.8, 6818, 1.1, 6, false, new Item(12159), new Item(12155), new Item(12161), new Item(12183, 106)),
+ ABYSSAL_PARASITE_POUCH(34, true,12035, 54, 94.8, 6818, 1.1, 6, false, new Item(12159), new Item(12155), new Item(12161), new Item(12183, 1)),
/**
* Represents a spirit jelly pouch.
*/
- SPIRIT_JELLY_POUCH(35, 12027, 55, 484, 6992, 5.5, 6, false, new Item(12163), new Item(12155), new Item(1937), new Item(12183, 151)),
+ SPIRIT_JELLY_POUCH(35, 12027, 55, 484, 6992, 5.5, 6, false, new Item(12163), new Item(12155), new Item(1937), new Item(12183, 1)),
/**
* Represents an ibis pouch.
*/
- IBIS_POUCH(36, 12531, 56, 98.8, 6991, 1.1, 6, true, new Item(12159), new Item(12155), new Item(311), new Item(12183, 109)),
+ IBIS_POUCH(36, 12531, 56, 98.8, 6991, 1.1, 6, true, new Item(12159), new Item(12155), new Item(311), new Item(12183, 1)),
/**
* Represents a spirit kyatt pouch.
*/
- SPIRIT_KYATT_POUCH(37, 12812, 57, 501.6, 7365, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10103), new Item(12183, 153)),
+ SPIRIT_KYATT_POUCH(37, 12812, 57, 501.6, 7365, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10103), new Item(12183, 1)),
/**
* Represents a spirit larupia pouch.
*/
- SPIRIT_LARUPIA_POUCH(38, 12784, 57, 501.6, 7337, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10095), new Item(12183, 155)),
+ SPIRIT_LARUPIA_POUCH(38, 12784, 57, 501.6, 7337, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10095), new Item(12183, 1)),
/**
* Represents a spirit graahk pouch.
*/
- SPIRIT_GRAAHK_POUCH(39, 12810, 57, 501.6, 7363, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10099), new Item(12183, 154)),
+ SPIRIT_GRAAHK_POUCH(39, 12810, 57, 501.6, 7363, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10099), new Item(12183, 1)),
/**
* Represents a karamthulhu overlord pouch.
*/
- KARAMTHULHU_POUCH(40, 12023, 58, 510.4, 6809, 5.8, 6, false, new Item(12163), new Item(12155), new Item(6667), new Item(12183, 144)),
+ KARAMTHULHU_POUCH(40, 12023, 58, 510.4, 6809, 5.8, 6, false, new Item(12163), new Item(12155), new Item(6667), new Item(12183, 1)),
/**
* Represents a smoke devil pouch.
*/
- SMOKE_DEVIL_POUCH(41, 12085, 61, 268, 6865, 3, 7, false, new Item(12160), new Item(12155), new Item(9736), new Item(12183, 141)),
+ SMOKE_DEVIL_POUCH(41, 12085, 61, 268, 6865, 3, 7, false, new Item(12160), new Item(12155), new Item(9736), new Item(12183, 1)),
/**
* Represents an abyssal lurker pouch.
*/
- ABYSSAL_LUKRER(42, true,12037, 62, 109.6, 6820, 1.9, 9, false, new Item(12159), new Item(12155), new Item(12161), new Item(12183, 119)),
+ ABYSSAL_LUKRER(42, true,12037, 62, 109.6, 6820, 1.9, 9, false, new Item(12159), new Item(12155), new Item(12161), new Item(12183, 1)),
/**
* Represents a spirit cobra pouch.
*/
- SPIRIT_COBRA_POUCH(43, 12015, 63, 276.8, 6802, 3.1, 6, false, new Item(12160), new Item(12155), new Item(6287), new Item(12183, 116)),
+ SPIRIT_COBRA_POUCH(43, 12015, 63, 276.8, 6802, 3.1, 6, false, new Item(12160), new Item(12155), new Item(6287), new Item(12183, 1)),
/**
* Represents a stranger plant pouch.
*/
- STRANGER_PLANT_POUCH(44, 12045, 64, 281.6, 6827, 3.2, 6, false, new Item(12160), new Item(12155), new Item(8431), new Item(12183, 128)),
+ STRANGER_PLANT_POUCH(44, 12045, 64, 281.6, 6827, 3.2, 6, false, new Item(12160), new Item(12155), new Item(8431), new Item(12183, 1)),
/**
* Represents a barker toad pouch.
*/
- BARKER_TOAD_POUCH(45, 12123, 66, 87, 6889, 1, 7, false, new Item(12158), new Item(12155), new Item(2150), new Item(12183, 11)),
+ BARKER_TOAD_POUCH(45, 12123, 66, 87, 6889, 1, 7, false, new Item(12158), new Item(12155), new Item(2150), new Item(12183, 1)),
/**
* Represents a war tortoise pouch.
@@ -279,62 +279,62 @@ public enum SummoningPouch {
/**
* Represents a bunyip pouch.
*/
- BUNYIP_POUCH(47, 12029, 68, 119.2, 6813, 1.4, 7, true, new Item(12159), new Item(12155), new Item(383), new Item(12183, 110)),
+ BUNYIP_POUCH(47, 12029, 68, 119.2, 6813, 1.4, 7, true, new Item(12159), new Item(12155), new Item(383), new Item(12183, 1)),
/**
* Represents a fruit bat pouch.
*/
- FRUIT_BAT_POUCH(48, 12033, 69, 121.2, 6817, 1.4, 8, true, new Item(12159), new Item(12155), new Item(1963), new Item(12183, 130)),
+ FRUIT_BAT_POUCH(48, 12033, 69, 121.2, 6817, 1.4, 8, true, new Item(12159), new Item(12155), new Item(1963), new Item(12183, 1)),
/**
* Represents a ravenous locust pouch.
*/
- RAVENOUS_LOCUST_POUCH(49, 12820, 70, 132, 7372, 1.5, 4, false, new Item(12160), new Item(12155), new Item(1933), new Item(12183, 79)),
+ RAVENOUS_LOCUST_POUCH(49, 12820, 70, 132, 7372, 1.5, 4, false, new Item(12160), new Item(12155), new Item(1933), new Item(12183, 1)),
/**
* Represents an arctic bear pouch.
*/
- ARCTIC_BEAR_POUCH(50, 12057, 71, 93.2, 6839, 1.1, 8, false, new Item(12158), new Item(12155), new Item(10117), new Item(12183, 14)),
+ ARCTIC_BEAR_POUCH(50, 12057, 71, 93.2, 6839, 1.1, 8, false, new Item(12158), new Item(12155), new Item(10117), new Item(12183, 1)),
/**
* Represents a Phoenix
*/
- PHOENIX_POUCH(50, 14623, 72, 93.2, 8575, 1.1, 8, false, new Item(12160, 1), new Item(12183, 165), new Item(12155, 1), new Item(14616, 1)),
+ PHOENIX_POUCH(50, 14623, 72, 93.2, 8575, 1.1, 8, false, new Item(12160, 1), new Item(12183, 1), new Item(12155, 1), new Item(14616, 1)),
/**
* Represents an obsidian golem pouch.
*/
- OBSIDIAN_GOLEM_POUCH(51, 12792, 73, 642.4, 7345, 7.3, 8, false, new Item(12163), new Item(12155), new Item(12168), new Item(12183, 195)),
+ OBSIDIAN_GOLEM_POUCH(51, 12792, 73, 642.4, 7345, 7.3, 8, false, new Item(12163), new Item(12155), new Item(12168), new Item(12183, 1)),
/**
* Represents a granite lobster pouch.
*/
- GRANITE_LOBSTER_POUCH(52, 12069, 74, 325.6, 6849, 3.7, 8, false, new Item(12160), new Item(12155), new Item(6979), new Item(12183, 166)),
+ GRANITE_LOBSTER_POUCH(52, 12069, 74, 325.6, 6849, 3.7, 8, false, new Item(12160), new Item(12155), new Item(6979), new Item(12183, 1)),
/**
* Represents a praying mantis pouch.
*/
- PRAYING_MANTIS_POUCH(53, 12011, 75, 329.6, 6798, 3.6, 8, false, new Item(12160), new Item(12155), new Item(2460), new Item(12183, 168)),
+ PRAYING_MANTIS_POUCH(53, 12011, 75, 329.6, 6798, 3.6, 8, false, new Item(12160), new Item(12155), new Item(2460), new Item(12183, 1)),
/**
* Represents a forge regent pouch.
*/
- FORGE_REGENT_BEAST(54, 12782, 76, 134, 7335, 1.5, 9, false, new Item(12159), new Item(12155), new Item(10020), new Item(12183, 141)),
+ FORGE_REGENT_BEAST(54, 12782, 76, 134, 7335, 1.5, 9, false, new Item(12159), new Item(12155), new Item(10020), new Item(12183, 1)),
/**
* Represents a talon beast pouch.
*/
- TALON_BEAST_POUCH(55, 12794, 77, 1015.2, 7347, 3.8, 9, false, new Item(12160), new Item(12155), new Item(12162), new Item(12183, 174)),
+ TALON_BEAST_POUCH(55, 12794, 77, 1015.2, 7347, 3.8, 9, false, new Item(12160), new Item(12155), new Item(12162), new Item(12183, 1)),
/**
* Represents a giant ent pouch.
*/
- GIANT_ENT_POUCH(56, 12013, 78, 136.8, 6800, 1.6, 8, false, new Item(12159), new Item(5933), new Item(12155), new Item(12183, 124)),
+ GIANT_ENT_POUCH(56, 12013, 78, 136.8, 6800, 1.6, 8, false, new Item(12159), new Item(5933), new Item(12155), new Item(12183, 1)),
/**
* Represents a hydra pouch.
*/
- HYDRA_POUCH(60, 12025, 80, 140.8, 6811, 1.6, 9, false, new Item(12159), new Item(571), new Item(12155), new Item(12183, 128)),
+ HYDRA_POUCH(60, 12025, 80, 140.8, 6811, 1.6, 9, false, new Item(12159), new Item(571), new Item(12155), new Item(12183, 1)),
/**
* Represents a spirit dagannoth pouch.
@@ -344,62 +344,62 @@ public enum SummoningPouch {
/**
* Represents a unicorn stallion pouch.
*/
- UNICORN_STALLION_POUCH(70, 12039, 88, 154.4, 6822, 1.8, 9, true, new Item(12159), new Item(237), new Item(12155), new Item(12183, 140)),
+ UNICORN_STALLION_POUCH(70, 12039, 88, 154.4, 6822, 1.8, 9, true, new Item(12159), new Item(237), new Item(12155), new Item(12183, 1)),
/**
* Represents a wolpertinger pouch.
*/
- WOLPERTINGER_POUCH(72, 12089, 92, 404.8, 6869, 4.5, 10, false, new Item(12160), new Item(2859), new Item(3226), new Item(12155), new Item(12183, 203)),
+ WOLPERTINGER_POUCH(72, 12089, 92, 404.8, 6869, 4.5, 10, false, new Item(12160), new Item(2859), new Item(3226), new Item(12155), new Item(12183, 1)),
/**
* Represents a pack yak pouch.
*/
- PACK_YAK_POUCH(75, 12093, 96, 422.4, 6873, 4.8, 10, true, new Item(12160), new Item(10818), new Item(12155), new Item(12183, 211)),
+ PACK_YAK_POUCH(75, 12093, 96, 422.4, 6873, 4.8, 10, true, new Item(12160), new Item(10818), new Item(12155), new Item(12183, 1)),
/**
* Represents a fire titan pouch.
*/
- FIRE_TITAN_POUCH(57, 12802, 79, 695.2, 7355, 7.9, 9, false, new Item(12163), new Item(1442), new Item(12155), new Item(12183, 198)),
+ FIRE_TITAN_POUCH(57, 12802, 79, 695.2, 7355, 7.9, 9, false, new Item(12163), new Item(1442), new Item(12155), new Item(12183, 1)),
/**
* Represents a moss titan pouch.
*/
- MOSS_TITAN_POUCH(58, 12804, 79, 695.2, 7357, 7.9, 9, false, new Item(12163), new Item(1440), new Item(12155), new Item(12183, 198)),
+ MOSS_TITAN_POUCH(58, 12804, 79, 695.2, 7357, 7.9, 9, false, new Item(12163), new Item(1440), new Item(12155), new Item(12183, 1)),
/**
* Represents an ice titan pouch.
*/
- ICE_TITAN_POUCH(59, 12806, 79, 695.2, 7359, 7.9, 9, false, new Item(12163), new Item(1438), new Item(1444), new Item(12155), new Item(12183, 198)),
+ ICE_TITAN_POUCH(59, 12806, 79, 695.2, 7359, 7.9, 9, false, new Item(12163), new Item(1438), new Item(1444), new Item(12155), new Item(12183, 1)),
/**
* Represents a lava titan pouch.
*/
- LAVA_TITAN_POUCH(62, 12788, 83, 730.4, 7341, 8.3, 9, false, new Item(12163), new Item(12168), new Item(12155), new Item(12183, 219)),
+ LAVA_TITAN_POUCH(62, 12788, 83, 730.4, 7341, 8.3, 9, false, new Item(12163), new Item(12168), new Item(12155), new Item(12183, 1)),
/**
* Represents a swamp titan pouch.
*/
- SWAMP_TITAN_POUCH(63, 12776, 85, 373.6, 7329, 4.2, 9, false, new Item(12160), new Item(10149), new Item(12155), new Item(12183, 150)),
+ SWAMP_TITAN_POUCH(63, 12776, 85, 373.6, 7329, 4.2, 9, false, new Item(12160), new Item(10149), new Item(12155), new Item(12183, 1)),
/**
* Represents a geyser titan pouch.
*/
- GEYSER_TITAN_POUCH(71, 12786, 89, 783.2, 7339, 8.9, 9, false, new Item(12163), new Item(1444), new Item(12155), new Item(12183, 222)),
+ GEYSER_TITAN_POUCH(71, 12786, 89, 783.2, 7339, 8.9, 9, false, new Item(12163), new Item(1444), new Item(12155), new Item(12183, 1)),
/**
* Represents an abyssal titan pouch.
*/
- ABYSSAL_TITAN_POUCH(73, true,12796, 93, 163.2, 7349, 1.9, 10, false, new Item(12159), new Item(12161), new Item(12155), new Item(12183, 113)),
+ ABYSSAL_TITAN_POUCH(73, true,12796, 93, 163.2, 7349, 1.9, 10, false, new Item(12159), new Item(12161), new Item(12155), new Item(12183, 1)),
/**
* Represents an iron titan pouch.
*/
- IRON_TITAN_POUCH(74, 12822, 95, 417.6, 7375, 4.7, 10, false, new Item(12160), new Item(1115), new Item(12155), new Item(12183, 198)),
+ IRON_TITAN_POUCH(74, 12822, 95, 417.6, 7375, 4.7, 10, false, new Item(12160), new Item(1115), new Item(12155), new Item(12183, 1)),
/**
* Represents a steel titan pouch.
*/
- STEEL_TITAN_POUCH(76, 12790, 99, 435.2, 7343, 4.9, 10, false, new Item(12160), new Item(1119), new Item(12155), new Item(12183, 178)),
+ STEEL_TITAN_POUCH(76, 12790, 99, 435.2, 7343, 4.9, 10, false, new Item(12160), new Item(1119), new Item(12155), new Item(12183, 1)),
SACRED_CLAY_POUCH_1(-1, 14422, 1, 0, 8240, 0, 1, false, new Item(14182)),
SACRED_CLAY_POUCH_2(-1, 14424, 20, 0, 8242, 0, 3, false, new Item(14184)),
diff --git a/Server/src/main/content/global/skill/summoning/SummoningTabListener.kt b/Server/src/main/content/global/skill/summoning/SummoningTabListener.kt
index 2a8debf26..ee39b8470 100644
--- a/Server/src/main/content/global/skill/summoning/SummoningTabListener.kt
+++ b/Server/src/main/content/global/skill/summoning/SummoningTabListener.kt
@@ -4,6 +4,8 @@ import content.global.skill.summoning.pet.Pet
import core.api.sendMessage
import core.game.interaction.InterfaceListener
+import content.global.skill.summoning.familiar.SnowscapeFamiliarInterface
+
class SummoningTabListener : InterfaceListener {
override fun defineInterfaceListeners() {
on(662) { player, _, opcode, buttonID, _, _ ->
@@ -12,7 +14,8 @@ class SummoningTabListener : InterfaceListener {
if (player.familiarManager.hasFamiliar()) {
player.familiarManager.familiar.call()
} else {
- player.getPacketDispatch().sendMessage("You don't have a follower.")
+ SnowscapeFamiliarInterface.Companion.openInterface(player)
+ //player.getPacketDispatch().sendMessage("You don't have a follower.")
}
}
67 -> {
@@ -44,7 +47,7 @@ class SummoningTabListener : InterfaceListener {
// Dismiss now
if (player.getFamiliarManager().getFamiliar() is Pet) {
val pet = player.familiarManager.familiar as Pet
- player.familiarManager.removeDetails(pet.getItemIdHash())
+ player.familiarManager.removeDetails(pet.getItemId())
}
player.familiarManager.dismiss()
}
diff --git a/Server/src/main/content/global/skill/summoning/SummoningTrainingRoom.java b/Server/src/main/content/global/skill/summoning/SummoningTrainingRoom.java
index 68d038c0d..6296daef4 100644
--- a/Server/src/main/content/global/skill/summoning/SummoningTrainingRoom.java
+++ b/Server/src/main/content/global/skill/summoning/SummoningTrainingRoom.java
@@ -34,6 +34,7 @@ import core.plugin.Plugin;
import core.plugin.ClassScanner;
import static core.api.ContentAPIKt.*;
+import content.data.Quests;
/**
* Handles the summoning training room.
@@ -81,7 +82,7 @@ public final class SummoningTrainingRoom extends OptionHandler {
public boolean handle(final Player player, Node node, String option) {
Scenery object = (Scenery) node;
Location loc = null;
- Quest quest = player.getQuestRepository().getQuest("Wolf Whistle");
+ Quest quest = player.getQuestRepository().getQuest(Quests.WOLF_WHISTLE);
int questVal = quest.getStage(player) == 0 ? 0 : quest.getStage(player) > 0 && quest.getStage(player) < 100 ? 5 : 28893;
switch (option) {
case "close":
@@ -312,7 +313,7 @@ public final class SummoningTrainingRoom extends OptionHandler {
@Override
public boolean open(Object... args) {
cutscene = (CutscenePlugin) args[0];
- quest = player.getQuestRepository().getQuest("Wolf Whistle");
+ quest = player.getQuestRepository().getQuest(Quests.WOLF_WHISTLE);
fluffy = NPC.create(6990, cutscene.getBase().transform(41, 52, 1));
fluffy.init();
fluffy.faceTemporary(player, 1);
diff --git a/Server/src/main/content/global/skill/summoning/familiar/AbyssalLurkerNPC.java b/Server/src/main/content/global/skill/summoning/familiar/AbyssalLurkerNPC.java
index 9fb1effdc..b6184c4a8 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/AbyssalLurkerNPC.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/AbyssalLurkerNPC.java
@@ -28,7 +28,7 @@ public class AbyssalLurkerNPC extends BurdenBeast {
* @param id The id.
*/
public AbyssalLurkerNPC(Player owner, int id) {
- super(owner, id, 4100, 12037, 3, 7, WeaponInterface.STYLE_CAST);
+ super(owner, id, 4100, 12037, 3, 24, WeaponInterface.STYLE_CAST);
}
@Override
diff --git a/Server/src/main/content/global/skill/summoning/familiar/AbyssalParasiteNPC.java b/Server/src/main/content/global/skill/summoning/familiar/AbyssalParasiteNPC.java
index 795484722..551e2db9a 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/AbyssalParasiteNPC.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/AbyssalParasiteNPC.java
@@ -36,7 +36,7 @@ public class AbyssalParasiteNPC extends BurdenBeast {
* @param id The id.
*/
public AbyssalParasiteNPC(Player owner, int id) {
- super(owner, id, 3000, 12035, 1, 7);
+ super(owner, id, 3000, 12035, 1, 18);
}
@Override
diff --git a/Server/src/main/content/global/skill/summoning/familiar/AbyssalTitanNPC.kt b/Server/src/main/content/global/skill/summoning/familiar/AbyssalTitanNPC.kt
index a7ed47a6d..eaeb73b45 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/AbyssalTitanNPC.kt
+++ b/Server/src/main/content/global/skill/summoning/familiar/AbyssalTitanNPC.kt
@@ -21,7 +21,7 @@ import org.rs09.consts.NPCs
@Initializable
class AbyssalTitanNPC
constructor(owner: Player? = null, id: Int = NPCs.ABYSSAL_TITAN_7349) :
- BurdenBeast(owner, id, 3200, Items.ABYSSAL_TITAN_POUCH_12796, 6, 7, WeaponInterface.STYLE_ACCURATE) {
+ BurdenBeast(owner, id, 3200, Items.ABYSSAL_TITAN_POUCH_12796, 6, 30, WeaponInterface.STYLE_ACCURATE) {
override fun construct(owner: Player, id: Int): Familiar {
return AbyssalTitanNPC(owner, id)
}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/BabyChinchompaNPC.java b/Server/src/main/content/global/skill/summoning/familiar/BabyChinchompaNPC.java
deleted file mode 100644
index 66c03042b..000000000
--- a/Server/src/main/content/global/skill/summoning/familiar/BabyChinchompaNPC.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package content.global.skill.summoning.familiar;
-
-import core.game.dialogue.DialoguePlugin;
-import core.game.dialogue.FacialExpression;
-import core.game.node.entity.npc.Metamorphosis;
-import core.game.node.entity.npc.NPC;
-import core.game.node.entity.player.Player;
-import core.plugin.Initializable;
-import core.tools.RandomFunction;
-
-/**
- * Handles the baby chinchompa pet.
- * @author Empathy
- *
- */
-@Initializable
-public class BabyChinchompaNPC extends Metamorphosis {
-
- /**
- * The chinchompa ids.
- */
- private static final int[] CHINCHOMPA_IDS = new int[] { 8643, 8644, 8657, 8658 };
-
- /**
- * Constructs a new {@code BabyChinchompaNPC} object.
- */
- public BabyChinchompaNPC() {
- super(CHINCHOMPA_IDS);
- }
-
- @Override
- public DialoguePlugin getDialoguePlugin() {
- return new BabyChinchompaDialogue();
- }
-
- @Override
- public int getRandomNpcId() {
- int i = RandomFunction.getRandom(getIds().length - 1);
- if (getIds()[i] == 8658) {
- int x = RandomFunction.getRandom(30);
- if (x == 1) {
- return getIds()[i];
- } else {
- return getIds()[i-1];
- }
- }
- return getIds()[i];
- }
-
- /**
- * Handles the BabyChinchompa Dialogue.
- * @author Empathy
- *
- */
- public final class BabyChinchompaDialogue extends DialoguePlugin {
-
- /**
- * Constructs a new {@code BabyChinchompaDialogue} {@code Object}.
- */
- public BabyChinchompaDialogue() {
- /**
- * empty.
- */
- }
-
- /**
- * Constructs a new {@code BabyChinchompaDialogue} {@code Object}.
- *
- * @param player the player.
- */
- public BabyChinchompaDialogue(Player player) {
- super(player);
- }
-
- @Override
- public DialoguePlugin newInstance(Player player) {
- return new BabyChinchompaDialogue(player);
- }
-
- @Override
- public boolean open(Object... args) {
- npc = (NPC) args[0];
- interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, npc.getId() != 8658 ? "Squeak! Squeak!" : "Squeaka! Squeaka!");
- stage = 0;
- return true;
- }
-
- @Override
- public boolean handle(int interfaceId, int buttonId) {
- switch (stage) {
- case 0:
- end();
- break;
- }
- return true;
- }
-
- @Override
- public int[] getIds() {
- return new int[] { 8643, 8644, 8657, 8658 };
- }
- }
-}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/BurdenBeast.java b/Server/src/main/content/global/skill/summoning/familiar/BurdenBeast.java
index d6a3100d0..628ff5077 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/BurdenBeast.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/BurdenBeast.java
@@ -83,6 +83,7 @@ public abstract class BurdenBeast extends Familiar {
* @return {@code True} if so.
*/
public boolean isAllowed(Player owner, Item item) {
+ /*
if (item.getValue() > 50000) {
owner.getPacketDispatch().sendMessage("This item is too valuable to trust to this familiar.");
return false;
@@ -95,6 +96,7 @@ public abstract class BurdenBeast extends Familiar {
owner.getPacketDispatch().sendMessage("You can't store " + item.getName().toLowerCase() + " in this familiar.");
return false;
}
+ */
if(SummoningPouch.get(this.getPouchId()).abyssal){
if(!item.getName().toLowerCase().contains("essence")) {
owner.getPacketDispatch().sendMessage("You can only give unnoted essence to this familiar.");
diff --git a/Server/src/main/content/global/skill/summoning/familiar/BurdenInterfacePlugin.java b/Server/src/main/content/global/skill/summoning/familiar/BurdenInterfacePlugin.java
index f9a8fd1a2..84de00f93 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/BurdenInterfacePlugin.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/BurdenInterfacePlugin.java
@@ -11,6 +11,8 @@ import core.plugin.Initializable;
import core.plugin.Plugin;
import kotlin.Unit;
+import content.global.handlers.item.SnowscapeSatchelListener;
+
/**
* Handles the beast of burden interface.
* @author Emperor
@@ -27,6 +29,14 @@ public final class BurdenInterfacePlugin extends ComponentPlugin {
@Override
public boolean handle(Player player, Component component, int opcode, int button, int slot, int itemId) {
+ if (getAttribute(player, "openSatchel", null) != null) {
+ SnowscapeSatchelListener.Companion.satchelInterfaceAction(player, component, opcode, button, slot, itemId);
+ return true;
+ }
+ if (getAttribute(player, "openSummonStorage", false)) {
+ SnowscapeFamiliarInterface.Companion.interfaceAction(player, component, opcode, button, slot, itemId);
+ return true;
+ }
if (!player.getFamiliarManager().hasFamiliar() || !player.getFamiliarManager().getFamiliar().isBurdenBeast()) {
return false;
}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/CockatriceFamiliarNPC.java b/Server/src/main/content/global/skill/summoning/familiar/CockatriceFamiliarNPC.java
index d1716b3d5..02564d7e1 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/CockatriceFamiliarNPC.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/CockatriceFamiliarNPC.java
@@ -34,6 +34,7 @@ public final class CockatriceFamiliarNPC implements Plugin
{
ClassScanner.definePlugin(new SpiritPengatrice());
ClassScanner.definePlugin(new SpiritCoraxatrice());
ClassScanner.definePlugin(new SpiritVulatrice());
+ ClassScanner.definePlugin(new SpiritSaratrice());
return this;
}
@@ -58,7 +59,11 @@ public final class CockatriceFamiliarNPC implements Plugin {
GameWorld.getPulser().submit(new Pulse(1, familiar.getOwner(), familiar, target) {
@Override
public boolean pulse() {
- target.getSkills().updateLevel(skill, -3, 0);
+ if(skill == 5) {
+ target.skills.decrementPrayerPoints(3);
+ }else {
+ target.getSkills().updateLevel(skill, -3, 0);
+ }
Projectile.magic(familiar, target, 1468, 40, 36, 71, 10).send();
familiar.sendFamiliarHit(target, 10, Graphics.create(1469));
return true;
@@ -297,4 +302,43 @@ public final class CockatriceFamiliarNPC implements Plugin {
}
}
+
+ /**
+ * Represents the Spirit Saratrice familiar.
+ * @author Aero - DeadlyGenga
+ */
+ public class SpiritSaratrice extends Forager {
+
+ /**
+ * Constructs a new {@code SpiritSaratriceNPC} {@code Object}.
+ */
+ public SpiritSaratrice() {
+ this(null, 6879);
+ }
+
+ /**
+ * Constructs a new {@code SpiritSaratriceNPC} {@code Object}.
+ * @param owner The owner.
+ * @param id The id.
+ */
+ public SpiritSaratrice(Player owner, int id) {
+ super(owner, id, 3600, 12099, 3, WeaponInterface.STYLE_CAST, COCKATRICE_EGG);
+ }
+
+ @Override
+ public Familiar construct(Player owner, int id) {
+ return new SpiritSaratrice(owner, id);
+ }
+
+ @Override
+ protected boolean specialMove(FamiliarSpecial special) {
+ return petrifyingGaze(this, special, Skills.PRAYER);
+ }
+
+ @Override
+ public int[] getIds() {
+ return new int[] { 6879, 6880 };
+ }
+
+ }
}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/DismissDialoguePlugin.java b/Server/src/main/content/global/skill/summoning/familiar/DismissDialoguePlugin.java
index ff053a5da..b369bf4d6 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/DismissDialoguePlugin.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/DismissDialoguePlugin.java
@@ -55,7 +55,7 @@ public final class DismissDialoguePlugin extends DialoguePlugin {
if (player.getFamiliarManager().getFamiliar() instanceof Pet) {
interpreter.sendDialogues(player, null, "Run along; I'm setting you free.");
Pet pet = (Pet) player.getFamiliarManager().getFamiliar();
- player.getFamiliarManager().removeDetails(pet.getItemIdHash());
+ player.getFamiliarManager().removeDetails(pet.getItemId());
} else {
end();
}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/Familiar.java b/Server/src/main/content/global/skill/summoning/familiar/Familiar.java
index b74f15e6b..636787050 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/Familiar.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/Familiar.java
@@ -27,7 +27,6 @@ import core.tools.Log;
import core.tools.RandomFunction;
import core.game.node.entity.combat.CombatPulse;
import core.game.node.entity.combat.CombatSwingHandler;
-import core.tools.SystemLogger;
import core.game.world.GameWorld;
import content.global.skill.summoning.SummoningPouch;
import org.rs09.consts.Sounds;
@@ -37,6 +36,8 @@ import java.util.List;
import static core.api.ContentAPIKt.*;
+import core.game.component.Component;
+
/**
* Represents a familiar.
* @author Emperor
@@ -81,7 +82,7 @@ public abstract class Familiar extends NPC implements Plugin {
/**
* The amount of special points left.
*/
- protected int specialPoints = 60;
+ protected int specialPoints = 0;
/**
* The pouch id.
@@ -120,7 +121,30 @@ public abstract class Familiar extends NPC implements Plugin {
*/
private final int attackStyle;
- private boolean firstCall = true;
+ /**
+ * The amount of points to drain every tick.
+ * This is a constant depending on the familiar's level req and time remaining (GL #1903).
+ * https://runescape.wiki/w/Summoning_points?oldid=2171795: "Over the life of the familiar, the number of summoning
+ * points drained will be equal to the level required to summon the familiar (unless you run out of summoning
+ * points). This means that if a player summons a bunyip with 75 Summoning points remaining, 7 points will be
+ * drained immediately, and 61 more will be drained over the life the bunyip, for a total of 68 points (the level of
+ * the bunyip)."
+ */
+ private final double pointsPerTick;
+
+ /**
+ * Keeps track of the fractional pointsPerTick that have been drained already. If >1.0, drain a point and subtract
+ * 1.0. Note that this means that we will never drain a point on the final tick (unless pointsPerTick turned out to
+ * be integer, but this case is handled by the 'ticks > 0' check in handleTickActions()). This is intentional; it
+ * allows us to, correctly, artificially extend the interval by one so that the drain events are evenly spaced
+ * throughout the lifetime of the summon (refer to the dreadfowl example below).
+ */
+ private double fracDrain = 0.0;
+
+ /**
+ * Whether this is the first call (i.e. not a renew summon).
+ */
+ private boolean firstCall = true;
/**
* Constructs a new {@code Familiar} {@code Object}.
@@ -141,6 +165,25 @@ public abstract class Familiar extends NPC implements Plugin {
this.specialCost = specialCost;
this.combatFamiliar = NPCDefinition.forId(getOriginalId() + 1).getName().equals(getName());
this.attackStyle = attackStyle;
+ /* The initial points are drained on summon. Then, the remaining points are drained over an interval.
+ * To prevent the last point from being drained only very late, we artificially extend the interval by one.
+ * Example: a dreadfowl drains 1 point on summon, and then needs to drain 3 points over 400 ticks. Naively
+ * draining a point on ticks 133, 266, and 399 allows players to save a point at the expense of just one tick.
+ * Instead, we drain on ticks 100, 200, and 300.
+ * Example 2: a spirit tz-kih drains 3 points on summon, then needs to drain 19 more points over 1800 ticks.
+ * This means it needs to drain a point every 90 ticks, since the 0th tick remaining will not drain.
+ * Example 3: a vampire bat needs to drain 27 points over 3300 ticks. It hence drains a point every ~118 ticks.
+ * Example 4: an abyssal titan drains 10 points on summon, then needs to drain 83 more points over 3200 ticks.
+ * This means it needs to drain a point every ~34 ticks.
+ */
+ if (pouchId == -1) {
+ this.pointsPerTick = 0.0;
+ } else {
+ //int drain = pouch.getLevelRequired() - pouch.getSummonCost() + 1;
+ // Snowscape: removing the initial drain and making it drain over the life of the familiar. Removing the +1 makes the final drain happen on the last tick of the familiar's life. That works for our new system.
+ int drain = pouch.getLevelRequired();
+ this.pointsPerTick = (double) drain / maximumTicks;
+ }
}
/**
@@ -176,17 +219,28 @@ public abstract class Familiar extends NPC implements Plugin {
transform();
}
}
-
- @Override
+
+ @Override
public void init() {
init(getSpawnLocation(), true);
}
@Override
public void handleTickActions() {
- if (ticks-- % 50 == 0) {
- updateSpecialPoints(-15);
+ //Snowscape: ticks are calculated from the summoning points (including fractional drain), so the familiar will despawn when points reach zero, but the timer goes up if points are restored
+ //ticks--;
+ ticks = Double.valueOf(maximumTicks*(owner.getSkills().getLevel(Skills.SUMMONING)-fracDrain)/pouch.getLevelRequired()).intValue();
+ if (getWorldTicks() % 100 == 0) {
+ owner.getSkills().addExperience(Skills.SUMMONING, pouch.getLevelRequired()+10, true);
+ }
+
+ fracDrain += pointsPerTick;
+ if (fracDrain > 1.0) {
+ fracDrain -= 1.0;
owner.getSkills().updateLevel(Skills.SUMMONING, -1, 0);
+ }
+ if (getWorldTicks() % 3 == 0) {
+ updateSpecialPoints(-1);
if (!getText().isEmpty()) {
super.sendChat(getText());
}
@@ -205,6 +259,7 @@ public abstract class Familiar extends NPC implements Plugin {
} else {
owner.getPacketDispatch().sendMessage(" Your familiar has vanished.");
}
+ playAudio(owner, Sounds.PRAYER_DRAIN_2672);
dismiss();
return;
}
@@ -231,7 +286,7 @@ public abstract class Familiar extends NPC implements Plugin {
@Override
public boolean isAttackable(Entity entity, CombatStyle style, boolean message) {
if (entity == owner) {
- if(message) {
+ if (message) {
owner.getPacketDispatch().sendMessage("You can't just betray your own familiar like that!");
}
return false;
@@ -243,13 +298,13 @@ public abstract class Familiar extends NPC implements Plugin {
}
if (!getProperties().isMultiZone()) {
if (entity instanceof Player && !((Player) entity).getProperties().isMultiZone()) {
- if(message) {
+ if (message) {
((Player) entity).getPacketDispatch().sendMessage("You have to be in multicombat to attack a player's familiar.");
}
return false;
}
if (entity instanceof Player) {
- if(message) {
+ if (message) {
((Player) entity).getPacketDispatch().sendMessage("This familiar is not in the a multicombat zone.");
}
}
@@ -257,13 +312,13 @@ public abstract class Familiar extends NPC implements Plugin {
}
if (entity instanceof Player) {
if (!((Player) entity).getSkullManager().isWilderness()) {
- if(message) {
+ if (message) {
((Player) entity).getPacketDispatch().sendMessage("You have to be in the wilderness to attack a player's familiar.");
}
return false;
}
if (!owner.getSkullManager().isWilderness()) {
- if(message) {
+ if (message) {
((Player) entity).getPacketDispatch().sendMessage("This familiar's owner is not in the wilderness.");
}
return false;
@@ -340,8 +395,8 @@ public abstract class Familiar extends NPC implements Plugin {
private void sendTimeRemaining() {
int minutes = ticks / 100;
int centiminutes = ticks % 100;
- setVarbit(owner, 4534, minutes);
- setVarbit(owner, 4290, centiminutes > 49 ? 1 : 0);
+ setVarbit(owner, 4534, minutes);
+ setVarbit(owner, 4290, centiminutes > 49 ? 1 : 0);
}
/**
@@ -542,9 +597,9 @@ public abstract class Familiar extends NPC implements Plugin {
* Sends the familiar packets.
*/
public void sendConfiguration() {
- setVarp(owner, 448, getPouchId());
- setVarp(owner, 1174, getOriginalId());
- setVarp(owner, 1175, specialCost << 23);
+ setVarp(owner, 448, getPouchId());
+ setVarp(owner, 1174, getOriginalId());
+ setVarp(owner, 1175, specialCost << 23);
sendTimeRemaining();
updateSpecialPoints(0);
}
@@ -565,13 +620,13 @@ public abstract class Familiar extends NPC implements Plugin {
if (isInvisible()) return true;
getProperties().setTeleportLocation(destination);
if (!(this instanceof Pet)) {
- if(firstCall) {
+ if (firstCall) {
// TODO: Each familiar has its own initial summon sound that needs to be implemented at some point
- playAudio(owner, Sounds.SUMMON_NPC_188);
- firstCall = false;
- } else {
- playAudio(owner, Sounds.SUMMON_NPC_188);
- }
+ playAudio(owner, Sounds.SUMMON_NPC_188);
+ firstCall = false;
+ } else {
+ playAudio(owner, Sounds.SUMMON_NPC_188);
+ }
if (size() > 1) {
graphics(LARGE_SUMMON_GRAPHIC);
} else {
@@ -607,12 +662,13 @@ public abstract class Familiar extends NPC implements Plugin {
getPulseManager().clear();
owner.getInterfaceManager().removeTabs(7);
owner.getFamiliarManager().setFamiliar(null);
- setVarp(owner, 448, -1);
- setVarp(owner, 1176, 0);
- setVarp(owner, 1175, 182986);
- setVarp(owner, 1174, -1);
+ setVarp(owner, 448, -1);
+ setVarp(owner, 1176, 0);
+ setVarp(owner, 1175, 182986);
+ setVarp(owner, 1174, -1);
owner.getAppearance().sync();
- owner.getInterfaceManager().setViewedTab(3);
+ owner.getInterfaceManager().openTab(new Component(662));
+ owner.getInterfaceManager().setViewedTab(7);
}
/**
@@ -624,14 +680,14 @@ public abstract class Familiar extends NPC implements Plugin {
if (specialPoints > 60) {
specialPoints = 60;
}
- setVarp(owner, 1177, specialPoints);
+ setVarp(owner, 1177, specialPoints);
}
@Override
public Plugin newInstance(Object arg) throws Throwable {
for (int id : getIds()) {
if (FamiliarManager.getFamiliars().containsKey(id)) {
- log(this.getClass(), Log.ERR, "Familiar " + id + " was already registered!");
+ log(this.getClass(), Log.ERR, "Familiar " + id + " was already registered!");
return null;
}
FamiliarManager.getFamiliars().put(id, this);
diff --git a/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java b/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java
index f6a4b8f90..6b5064acb 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java
@@ -4,7 +4,6 @@ import content.global.skill.summoning.pet.Pet;
import content.global.skill.summoning.pet.Pets;
import core.cache.def.impl.ItemDefinition;
import core.game.component.Component;
-import core.game.container.Container;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import core.game.node.entity.skill.Skills;
@@ -20,7 +19,6 @@ import core.game.world.update.flag.context.Animation;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import static core.api.ContentAPIKt.*;
@@ -38,9 +36,9 @@ public final class FamiliarManager {
private static final Map FAMILIARS = new HashMap<>();
/**
- * The pet details mapping, sorted by item id.
+ * The pet details mapping.
*/
- private final Map petDetails = new HashMap();
+ private final Map> petDetails = new HashMap<>();
/**
* The player.
@@ -70,50 +68,74 @@ public final class FamiliarManager {
this.player = player;
}
- public final void parse(JSONObject familiarData) {
+ public void parse(JSONObject familiarData) {
int currentPet = -1;
if (familiarData.containsKey("currentPet")) {
currentPet = Integer.parseInt(familiarData.get("currentPet").toString());
}
- JSONArray petDetails = (JSONArray) familiarData.get("petDetails");
- for (int i = 0; i < petDetails.size(); i++) {
- JSONObject detail = (JSONObject) petDetails.get(i);
- PetDetails details = new PetDetails(0);
- details.updateHunger(Double.parseDouble(detail.get("hunger").toString()));
- details.updateGrowth(Double.parseDouble(detail.get("growth").toString()));
- int itemIdHash = Integer.parseInt(detail.get("petId").toString());
- // The below is for migrating legacy saves, which stored baby item IDs + growth stages
- if (detail.containsKey("stage")) {
- // The "itemIdHash" is actually the baby item ID. The "stage" gives the actual pet stage we want.
- int babyItemId = itemIdHash;
- int itemId = babyItemId;
- int stage = Integer.parseInt(detail.get("stage").toString());
- if (stage > 0) {
- Pets pets = Pets.forId(babyItemId);
- itemId = pets.getNextStageItemId(itemId);
- if (stage > 1) {
- itemId = pets.getNextStageItemId(itemId);
+ if (player.version < 2) { //migrate the v1 format
+ for (Pets pet : Pets.values()) {
+ for (int id : new int[]{pet.getBabyItemId(), pet.getGrownItemId(), pet.getOvergrownItemId()}) {
+ if (id != -1) {
+ petDetails.put(id, new ArrayList());
}
}
- Item item = new Item(itemId);
- item.setCharge(1000); //this is the default value that will correspond to the player's item
- itemIdHash = item.getIdHash();
- if (currentPet != -1 && currentPet == babyItemId) {
- currentPet = itemIdHash;
+ }
+
+ JSONArray petDetails = (JSONArray) familiarData.get("petDetails");
+ for (Object petDetail : petDetails) {
+ JSONObject detail = (JSONObject) petDetail;
+ PetDetails details = new PetDetails(0);
+ details.updateHunger(Double.parseDouble(detail.get("hunger").toString()));
+ details.updateGrowth(Double.parseDouble(detail.get("growth").toString()));
+ int itemId;
+ int itemIdHash = Integer.parseInt(detail.get("petId").toString());
+ // The below is for migrating the v0 format, which stored baby item IDs + growth stages
+ if (detail.containsKey("stage")) {
+ // The itemIdHash is actually the baby item ID. The "stage" gives the actual pet stage we want.
+ int babyItemId = itemIdHash;
+ itemId = babyItemId;
+ int stage = Integer.parseInt(detail.get("stage").toString());
+ if (stage > 0) {
+ Pets pets = Pets.forId(babyItemId);
+ itemId = pets.getNextStageItemId(itemId);
+ if (stage > 1) {
+ itemId = pets.getNextStageItemId(itemId);
+ }
+ }
+ } else {
+ itemId = itemIdHash >> 16 & 0xFFFF; //in the legacy v1 format, was hash rather than item id
+ }
+ this.petDetails.get(itemId).add(details);
+ }
+ if (currentPet > 65536) {
+ currentPet = currentPet >> 16 & 0xFFFF; //in the legacy v1 format, was hash rather than item id
+ }
+ } else {
+ JSONObject petDetails = (JSONObject) familiarData.get("petDetails");
+ for (Object key : petDetails.keySet()) {
+ int itemId = Integer.parseInt(key.toString());
+ this.petDetails.put(itemId, new ArrayList<>());
+ JSONArray values = (JSONArray) petDetails.get(key.toString());
+ for (Object petDetail : values) {
+ JSONObject detail = (JSONObject) petDetail;
+ PetDetails details = new PetDetails(0);
+ details.updateHunger(Double.parseDouble(detail.get("hunger").toString()));
+ details.updateGrowth(Double.parseDouble(detail.get("growth").toString()));
+ this.petDetails.get(itemId).add(details);
}
}
- this.petDetails.put(itemIdHash, details);
}
-
if (currentPet != -1) {
- PetDetails details = this.petDetails.get(currentPet);
- int itemId = currentPet >> 16 & 0xFFFF;
- Pets pets = Pets.forId(itemId);
- if (details == null) {
- details = new PetDetails(pets.getGrowthRate() == 0.0 ? 100.0 : 0.0);
- this.petDetails.put(currentPet, details);
+ int last = this.petDetails.get(currentPet).size() - 1;
+ PetDetails details;
+ if (last < 0) { //missing data in save due to historical bug (see GL !2077)
+ details = new PetDetails(0);
+ } else {
+ details = this.petDetails.get(currentPet).get(last);
}
- familiar = new Pet(player, details, itemId, pets.getNpcId(itemId));
+ Pets pets = Pets.forId(currentPet);
+ familiar = new Pet(player, details, currentPet, pets.getNpcId(currentPet));
} else if (familiarData.containsKey("familiar")) {
JSONObject currentFamiliar = (JSONObject) familiarData.get("familiar");
int familiarId = Integer.parseInt( currentFamiliar.get("originalId").toString());
@@ -125,7 +147,13 @@ public final class FamiliarManager {
((BurdenBeast) familiar).container.parse(famInv);
}
familiar.setAttribute("hp",Integer.parseInt( currentFamiliar.get("lifepoints").toString()));
- }
+ } else {
+ //Snowscape: Copied from Familiar.dismiss(), this clears the fields on the summoning tab if no familiar is loaded
+ setVarp(player, 448, -1);
+ setVarp(player, 1176, 0);
+ setVarp(player, 1175, 182986);
+ setVarp(player, 1174, -1);
+ }
}
/**
@@ -147,12 +175,12 @@ public final class FamiliarManager {
public void summon(Item item, boolean pet, boolean deleteItem) {
boolean renew = false;
if (hasFamiliar()) {
- if(familiar.getPouchId() == item.getId()) {
- renew = true;
- } else {
+ //if (familiar.getPouchId() == item.getId()) {
+ // renew = true;
+ //} else {
player.getPacketDispatch().sendMessage("You already have a follower.");
return;
- }
+ //}
}
if (player.getZoneMonitor().isRestricted(ZoneRestriction.FOLLOWERS) && !player.getLocks().isLocked("enable_summoning")) {
player.getPacketDispatch().sendMessage("This is a Summoning-free area.");
@@ -170,17 +198,23 @@ public final class FamiliarManager {
player.getPacketDispatch().sendMessage("You need a Summoning level of " + pouch.getLevelRequired() + " to summon this familiar.");
return;
}
+ /* Snowscape: removing the drain on summon. This drain will instead be added to the gradual drain over the familiar's life.
if (player.getSkills().getLevel(Skills.SUMMONING) < pouch.getSummonCost()) {
player.getPacketDispatch().sendMessage("You need at least " + pouch.getSummonCost() + " Summoning points to summon this familiar.");
return;
}
+ */
+ if (player.getSkills().getLevel(Skills.SUMMONING) < 1) {
+ player.getPacketDispatch().sendMessage("You need at least one Summoning point to summon this familiar.");
+ return;
+ }
final int npcId = pouch.getNpcId();
Familiar fam = !renew ? FAMILIARS.get(npcId) : familiar;
if (fam == null) {
player.getPacketDispatch().sendMessage("Invalid familiar " + npcId + " - report on 2009Scape GitLab");
return;
}
- if(!renew) {
+ if (!renew) {
fam = fam.construct(player, npcId);
if (fam.getSpawnLocation() == null) {
player.getPacketDispatch().sendMessage("The spirit in this pouch is too big to summon here. You will need to move to a larger");
@@ -188,12 +222,12 @@ public final class FamiliarManager {
return;
}
}
- if (!player.getInventory().remove(item)) {
- return;
- }
- player.getSkills().updateLevel(Skills.SUMMONING, -pouch.getSummonCost(), 0);
- player.getSkills().addExperience(Skills.SUMMONING, pouch.getSummonExperience());
- if(!renew) {
+ //if (!player.getInventory().remove(item)) {
+ // return;
+ //}
+ //player.getSkills().updateLevel(Skills.SUMMONING, -pouch.getSummonCost(), 0);
+ //player.getSkills().addExperience(Skills.SUMMONING, pouch.getSummonExperience());
+ if (!renew) {
familiar = fam;
spawnFamiliar();
} else {
@@ -217,11 +251,10 @@ public final class FamiliarManager {
* @param deleteItem the item.
* @param location the location.
*/
- public void morphPet(final Item item, boolean deleteItem, Location location) {
- if (hasFamiliar()) {
- familiar.dismiss();
- }
- summonPet(item, deleteItem, true, location);
+ public void morphPet(final Item item, boolean deleteItem, Location location, double hunger, double growth) {
+ int hasWarned = ((Pet) familiar).getHasWarned();
+ familiar.dismiss();
+ summonPet(item, deleteItem, true, location, hasWarned, hunger, growth);
}
/**
@@ -230,7 +263,7 @@ public final class FamiliarManager {
* @param deleteItem the item.
*/
private boolean summonPet(final Item item, boolean deleteItem) {
- return summonPet(item, deleteItem, false, null);
+ return summonPet(item, deleteItem, false, null, 0, -1, -1);
}
/**
@@ -238,9 +271,8 @@ public final class FamiliarManager {
* @param item the item.
* @param morph the pet.
*/
- private boolean summonPet(final Item item, boolean deleteItem, boolean morph, Location location) {
+ private boolean summonPet(final Item item, boolean deleteItem, boolean morph, Location location, int hasWarned, double hunger, double growth) {
final int itemId = item.getId();
- int itemIdHash = item.getIdHash();
if (itemId > 8850 && itemId < 8900) {
return false;
}
@@ -252,52 +284,27 @@ public final class FamiliarManager {
player.getDialogueInterpreter().sendDialogue("You need a summoning level of " + pets.getSummoningLevel() + " to summon this.");
return false;
}
-
- // If this pet does not have an individual ID yet, we need to find it an available one.
- // If it does, we need to verify that this ID is not already used for a different pet. This is needed to correct a historical bug that allowed multiple pets to be assigned the same individual ID (the historical code only checked the *current* stage item ID, failing to realize that we also need to account for *future* stage item IDs, in case the current pet grows up, resulting in a clash when it did). Saves affected by that bug will have multiple copies of the same item pointing to the same pet, which we have an opportunity to rectify now.
- ArrayList taken = new ArrayList();
- Container[] searchSpace = {player.getInventory(), player.getBankPrimary(), player.getBankSecondary()};
- for (int checkId = pets.getBabyItemId(); checkId != -1; checkId = pets.getNextStageItemId(checkId)) {
- Item check = new Item(checkId, 1);
- for (Container container : searchSpace) {
- for (Item i : container.getAll(check)) {
- taken.add(i.getCharge());
- }
- }
+ if (!this.petDetails.containsKey(itemId)) {
+ petDetails.put(itemId, new ArrayList());
}
- PetDetails details = petDetails.get(itemIdHash);
- int individual = item.getCharge();
- if (details != null) { //we have this pet on file, but we need to check that it wasn't affected by the historical bug mentioned above
- details.setIndividual(individual);
- int count = 0;
- for (int i : taken) {
- if (i == individual) {
- count++;
- }
- }
- if (count > 1) { //this pet is sadly conjoined with another individual of its kind; untangle it by initializing it anew (which is what should have happened in the first place, save the minor detail of hunger propagation from the previous stage, which we no longer have any record of)
- details = null;
- }
- }
- if (details == null) { //init new pet
- details = new PetDetails(pets.getGrowthRate() == 0.0 ? 100.0 : 0.0);
- for (individual = 0; taken.contains(individual) && individual < 0xFFFF; individual++) {}
- details.setIndividual(individual);
- // Make a copy of the item to extract what the item's idHash will be when including the individual ID as a "charge" value.
- // The copy is necessary since the player's inventory still contains the default-charged item, which we will be removing only later.
- Item newItem = item.copy();
- newItem.setCharge(individual);
- petDetails.put(newItem.getIdHash(), details);
+ int last = this.petDetails.get(itemId).size() - 1;
+ if (last < 0) { //new pet
+ last = 0;
+ PetDetails details = new PetDetails(pets.getGrowthRate() == 0.0 ? 100.0 : 0.0);
+ this.petDetails.get(itemId).add(details);
}
+ PetDetails details = this.petDetails.get(itemId).get(last);
int npcId = pets.getNpcId(itemId);
if (npcId > 0) {
familiar = new Pet(player, details, itemId, npcId);
+ ((Pet) familiar).setHasWarned(hasWarned);
+ if (hunger != -1) ((Pet) familiar).getDetails().setHunger(hunger);
+ if (growth != -1) ((Pet) familiar).getDetails().setGrowth(growth);
if (deleteItem) {
player.animate(new Animation(827));
- // We cannot use player().getInventory().remove(item), because that will remove the first pet item it sees, rather than the specific one (with the specific charge value) the player clicked.
- // Instead, find the specific item the player dropped by slot, and remove that specific one.
- int slot = player.getInventory().getSlotHash(item);
- player.getInventory().remove(item, slot, true);
+ if (!player.getInventory().remove(item, true)) {
+ return false;
+ }
}
if (morph) {
morphFamiliar(location);
@@ -364,11 +371,7 @@ public final class FamiliarManager {
return;
}
Pet pet = ((Pet) familiar);
- PetDetails details = pet.getDetails();
- Item petItem = new Item(pet.getItemId());
- petItem.setCharge(details.getIndividual());
- if (player.getInventory().add(petItem)) {
- petDetails.put(pet.getItemIdHash(),details);
+ if (player.getInventory().add(new Item(pet.getItemId()))) {
player.animate(Animation.create(827));
player.getFamiliarManager().dismiss();
}
@@ -423,11 +426,26 @@ public final class FamiliarManager {
}
/**
- * Removes the details for this pet.
- * @param itemIdHash The item id hash of the pet.
+ * Adds pet details for a new pet to that pet's stack.
+ * @param itemId The item id of the pet.
+ * @param details The new pet details.
*/
- public void removeDetails(int itemIdHash) {
- petDetails.remove(itemIdHash);
+ public void addDetails(int itemId, PetDetails details) {
+ if (petDetails.get(itemId) == null) {
+ petDetails.put(itemId, new ArrayList<>());
+ }
+ petDetails.get(itemId).add(details);
+ }
+
+ /**
+ * Removes the details for this pet.
+ * @param itemId The item id of the pet.
+ */
+ public void removeDetails(int itemId) {
+ int last = petDetails.get(itemId).size() - 1;
+ if (last >= 0) {
+ petDetails.get(itemId).remove(last);
+ }
}
/**
@@ -521,7 +539,7 @@ public final class FamiliarManager {
}
- public Map getPetDetails() {
+ public Map> getPetDetails() {
return petDetails;
}
}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/HydraNPC.java b/Server/src/main/content/global/skill/summoning/familiar/HydraNPC.java
index 1cc985a30..04ba4c6bc 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/HydraNPC.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/HydraNPC.java
@@ -43,7 +43,7 @@ public class HydraNPC extends Familiar {
Scenery scenery = (Scenery)node;
FarmingPatch farmingPatch = FarmingPatch.forObject(scenery);
if(farmingPatch != null) {
- Patch patch = farmingPatch.getPatchFor(owner);
+ Patch patch = farmingPatch.getPatchFor(owner, true);
patch.regrowIfTreeStump();
return true;
}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/IbisNPC.java b/Server/src/main/content/global/skill/summoning/familiar/IbisNPC.java
index 43fc3702a..7e0c82d73 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/IbisNPC.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/IbisNPC.java
@@ -40,7 +40,7 @@ public class IbisNPC extends Forager {
* @param id The id.
*/
public IbisNPC(Player owner, int id) {
- super(owner, id, 3800, 12531, 12, new Item(361), new Item(373));
+ super(owner, id, 3800, 12531, 12, new Item(359), new Item(371));
boosts.add(new SkillBonus(Skills.FISHING, 3));
}
@@ -54,7 +54,7 @@ public class IbisNPC extends Forager {
@Override
public boolean produceItem(Item item) {
if (super.produceItem(item)) {
- if (item.getId() == 373) {
+ if (item.getId() == 371) {
owner.getSkills().addExperience(Skills.FISHING, 10);
}
return true;
diff --git a/Server/src/main/content/global/skill/summoning/familiar/KalphiteNPC.java b/Server/src/main/content/global/skill/summoning/familiar/KalphiteNPC.java
deleted file mode 100644
index 62b5020a0..000000000
--- a/Server/src/main/content/global/skill/summoning/familiar/KalphiteNPC.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package content.global.skill.summoning.familiar;
-
-import core.plugin.Initializable;
-import core.game.dialogue.DialoguePlugin;
-import core.game.dialogue.FacialExpression;
-import core.game.node.entity.npc.Metamorphosis;
-import core.game.node.entity.npc.NPC;
-import core.game.node.entity.player.Player;
-
-/**
- * Handles the kalphite princess pet.
- * @author Empathy
- *
- */
-@Initializable
-public class KalphiteNPC extends Metamorphosis {
-
- /**
- * The kalphite ids.
- */
- private static final int[] KALPHITE_IDS = new int[] { 8602, 8603 };
-
- /**
- * Constructs a new {@code KalphiteNPC} object.
- */
- public KalphiteNPC() {
- super(KALPHITE_IDS);
- }
-
-
- @Override
- public DialoguePlugin getDialoguePlugin() {
- return new KalphitePrincessDialogue();
- }
-
- /**
- * Handles the KalphitePrincess dialogue.
- * @author Empathy
- *
- */
- public final class KalphitePrincessDialogue extends DialoguePlugin {
-
- /**
- * Constructs a new {@code KalphitePrincessDialogue} {@code Object}.
- */
- public KalphitePrincessDialogue() {
- /**
- * empty.
- */
- }
-
- /**
- * Constructs a new {@code KalphitePrincessDialogue} {@code Object}.
- *
- * @param player the player.
- */
- public KalphitePrincessDialogue(Player player) {
- super(player);
- }
-
- @Override
- public DialoguePlugin newInstance(Player player) {
- return new KalphitePrincessDialogue(player);
- }
-
- @Override
- public boolean open(Object... args) {
- npc = (NPC) args[0];
- interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "What is it with your kind and potato cactus?");
- stage = 0;
- return true;
- }
-
- @Override
- public boolean handle(int interfaceId, int buttonId) {
- switch (stage) {
- case 0:
- interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "Truthfully?");
- stage = 1;
- break;
- case 1:
- interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Yeah, please.");
- stage = 2;
- break;
- case 2:
- interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "Soup. We make a fine soup with it.");
- stage = 3;
- break;
- case 3:
- interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Kalphites can cook?");
- stage = 4;
- break;
- case 4:
- interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "Nah, we just collect it and put it there because we", "know fools like yourself will come down looking for it", "then inevitably be killed by my mother.");
- stage = 5;
- break;
- case 5:
- interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Evidently not, that's how I got you!");
- stage = 6;
- break;
- case 6:
- interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "Touch�.");
- stage = 7;
- break;
- case 7:
- end();
- break;
- }
- return true;
- }
-
- @Override
- public int[] getIds() {
- return new int[] { 8602, 8603 };
- }
- }
-}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/PyreLordNPC.java b/Server/src/main/content/global/skill/summoning/familiar/PyreLordNPC.java
index c4672b643..1e96d0229 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/PyreLordNPC.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/PyreLordNPC.java
@@ -23,6 +23,8 @@ import core.game.world.update.flag.context.Animation;
import core.game.world.update.flag.context.Graphics;
import core.plugin.Plugin;
import core.plugin.ClassScanner;
+import org.rs09.consts.Items;
+import static core.api.ContentAPIKt.inInventory;
/**
* Represents the Pyrelord familiar.
@@ -117,30 +119,41 @@ public class PyreLordNPC extends Familiar {
player.getPacketDispatch().sendMessage("You can't light a fire here.");
return false;
}
- familiar.lock(ticks);
- familiar.animate(FIREMAKE_ANIMATION);
- if (player.getInventory().remove(event.getUsedItem())) {
- final GroundItem ground = GroundItemManager.create(event.getUsedItem(), familiar.getLocation(), player);
+ if (player.getSkills().getLevel(Skills.FIREMAKING) < log.getLevel()) {
+ player.getPacketDispatch().sendMessage("You need a firemaking level of " + log.getLevel() + " to light this log.");
+ return false;
+ }
+ familiar.lock(ticks);
+ familiar.animate(FIREMAKE_ANIMATION);
+ // Snowscape: reworked this pulse to repeat
GameWorld.getPulser().submit(new Pulse(ticks, player, familiar) {
@Override
public boolean pulse() {
- if (!ground.isActive()) {
- return true;
- }
- final Scenery object = new Scenery(log.getFireId(), familiar.getLocation());
- familiar.moveStep();
- GroundItemManager.destroy(ground);
- player.getSkills().addExperience(Skills.FIREMAKING, log.getXp() + 10);
- familiar.faceLocation(object.getFaceLocation(familiar.getLocation()));
- SceneryBuilder.add(object, log.getLife(), FireMakingPulse.getAsh(player, log, object));
- if (player.getViewport().getRegion().getId() == 10806) {
- player.getAchievementDiaryManager().finishTask(player, DiaryType.SEERS_VILLAGE, 1, 9);
- }
- return true;
+ if (player.getInventory().remove(event.getUsedItem())) {
+ //familiar.lock(ticks-1);
+ familiar.animate(FIREMAKE_ANIMATION);
+ //final GroundItem ground = GroundItemManager.create(event.getUsedItem(), familiar.getLocation(), player);
+ //if (!ground.isActive()) {
+ // return false;
+ //}
+ final Scenery object = new Scenery(log.getFireId(), familiar.getLocation());
+ //familiar.moveStep();
+ //GroundItemManager.destroy(ground);
+ player.getSkills().addExperience(Skills.FIREMAKING, log.getXp() + 10);
+ familiar.faceLocation(object.getFaceLocation(familiar.getLocation()));
+ SceneryBuilder.add(object, log.getLife(), FireMakingPulse.getAsh(player, log, object));
+ if (player.getViewport().getRegion().getId() == 10806) {
+ player.getAchievementDiaryManager().finishTask(player, DiaryType.SEERS_VILLAGE, 1, 9);
+ }
+ if (inInventory(player, Items.TINDERBOX_590, 1)) {
+ return false;
+ }
+ }
+ return true;
}
});
- }
return true;
+
}
}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/SnakelingNPC.java b/Server/src/main/content/global/skill/summoning/familiar/SnakelingNPC.java
deleted file mode 100644
index cd6372f62..000000000
--- a/Server/src/main/content/global/skill/summoning/familiar/SnakelingNPC.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package content.global.skill.summoning.familiar;
-
-import core.plugin.Initializable;
-import core.game.dialogue.DialoguePlugin;
-import core.game.dialogue.FacialExpression;
-import core.game.node.entity.npc.Metamorphosis;
-import core.game.node.entity.npc.NPC;
-import core.game.node.entity.player.Player;
-
-/**
- * Handles the metamorphosis of the zulrah pet.
- * @author Empathy
- *
- */
-@Initializable
-public class SnakelingNPC extends Metamorphosis {
-
- /**
- * The snakeling ids.
- */
- public static final int[] SNAKELING_IDS = new int[] { 8626, 8627, 8628 };
-
- /**
- *
- * Constructs a new {@code SnakelingNPC} object.
- */
- public SnakelingNPC() {
- super(SNAKELING_IDS);
- }
-
- @Override
- public DialoguePlugin getDialoguePlugin() {
- return new PetSnakelingDialogue();
- }
-
- /**
- * Handles the pet snakeling dialogue.
- * @author Empathy
- *
- */
- public final class PetSnakelingDialogue extends DialoguePlugin {
-
- /**
- * Constructs a new {@code PetSnakelingDialogue} {@code Object}.
- */
- public PetSnakelingDialogue() {
- /**
- * empty.
- */
- }
-
- /**
- * Constructs a new {@code PetSnakelingDialogue} {@code Object}.
- *
- * @param player the player.
- */
- public PetSnakelingDialogue(Player player) {
- super(player);
- }
-
- @Override
- public DialoguePlugin newInstance(Player player) {
- return new PetSnakelingDialogue(player);
- }
-
- @Override
- public boolean open(Object... args) {
- npc = (NPC) args[0];
- player("Hey little snake!");
- stage = 0;
- return true;
- }
-
- @Override
- public boolean handle(int interfaceId, int buttonId) {
- switch (stage) {
- case 0:
- npc(FacialExpression.OLD_NORMAL, "Soon, Zulrah shall establish dominion over this plane.");
- stage = 1;
- break;
- case 1:
- player("Wanna play fetch?");
- stage = 2;
- break;
- case 2:
- npc(FacialExpression.OLD_NORMAL, "Submit to the almighty Zulrah.");
- stage = 3;
- break;
- case 3:
- player("Walkies? Or slidies...?");
- stage = 4;
- break;
- case 4:
- npc(FacialExpression.OLD_NORMAL, "Zulrah's wilderness as a God will soon be demonstrated.");
- stage = 5;
- break;
- case 5:
- player("I give up...");
- stage = 6;
- break;
- case 6:
- end();
- break;
- }
- return true;
- }
-
- @Override
- public int[] getIds() {
- return SNAKELING_IDS;
- }
- }
-
-}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/SnowscapeFamiliarInterface.kt b/Server/src/main/content/global/skill/summoning/familiar/SnowscapeFamiliarInterface.kt
new file mode 100644
index 000000000..388b746a0
--- /dev/null
+++ b/Server/src/main/content/global/skill/summoning/familiar/SnowscapeFamiliarInterface.kt
@@ -0,0 +1,96 @@
+package content.global.skill.summoning.familiar
+
+import core.api.*
+import core.game.container.Container
+import content.global.skill.summoning.familiar.BurdenContainerListener
+//import core.game.node.Node
+import core.game.node.entity.player.Player
+import core.game.node.item.Item
+//import core.game.interaction.InteractionListener
+//import core.game.interaction.IntType
+//import org.json.simple.JSONArray
+//import org.json.simple.JSONObject
+//import org.json.simple.parser.JSONParser
+import org.rs09.consts.Items
+
+import core.game.component.Component
+import core.game.component.CloseEvent
+import core.game.container.access.InterfaceContainer
+
+/* Custom Snowscape class. Allows storing summoning pouches in a special storage that can be accessed by using the "call familiar" button when no familiars are summoned.
+* Familiars can be summoned from this storage.
+* Designed around the snowscape summoning rework, where pouches are not consumed when summoning
+*/
+
+class SnowscapeFamiliarInterface {
+ companion object {
+
+
+ //Function to handle constructing the interface
+ public fun openInterface(player: Player) {
+ val storage = player.summoningPouches
+ if (storage.getListeners().count() < 1) storage.register(BurdenContainerListener(player))
+
+ player.getInterfaceManager().open(Component(671)).setCloseEvent(CloseEvent { player, component ->
+ player.getInterfaceManager().closeSingleTab()
+ removeAttribute(player, "openSummonStorage")
+ //Summoning tab cannot be interacted with until it's closed and re-opened for some reason
+ player.getInterfaceManager().removeTabs(7)
+ player.getInterfaceManager().openTab(Component(662))
+ player.getInterfaceManager().setViewedTab(7)
+ return@CloseEvent true
+ }
+ )
+ setAttribute(player, "openSummonStorage", true)
+ storage.shift()
+ player.getInterfaceManager().openSingleTab(Component(665))
+ InterfaceContainer.generateItems(player, player.getInventory().toArray(), arrayOf("Add"),665,0,7,4,93)
+ InterfaceContainer.generateItems(player, storage.toArray(), arrayOf("Remove","Summon"),671,27,5,6,30)
+ }
+
+
+ fun interfaceAction(player: Player, component: Component, opcode: Int, button: Int, slot: Int, itemId: Int) {
+ val inventory = component.getId() == 665
+ val container = if (inventory) player.getInventory() else player.summoningPouches
+ val item = if (slot >= 0 && slot < container.capacity()) container.get(slot) else null
+ if (item == null && button != 29) return
+
+ if (opcode == 9) player.sendMessage(item!!.getDefinition().getExamine())
+
+ if (inventory) {
+ when (opcode) {
+ 155 -> addPouch(player, item!!)
+ }
+ } else {
+ when (opcode) {
+ 155 -> if (button != 29) summonPouch(player, item!!)
+ 196 -> removePouch(player, item!!)
+ }
+ }
+ }
+
+ private fun addPouch(player: Player, item: Item) {
+ if (!hasOption(item, "Summon")){
+ sendMessage(player, "You can only add summoning pouches.")
+ return
+ } else if (player.summoningPouches.containsItem(item)) {
+ sendMessage(player, "You have already added this familiar's pouch.")
+ return
+ } else if (player.summoningPouches.add(item)) {
+ player.getInventory().remove(item)
+ }
+ }
+
+ private fun removePouch(player: Player, item: Item) {
+ if (player.getInventory().add(item)) {
+ player.summoningPouches.remove(item)
+ }
+ }
+
+ private fun summonPouch(player: Player, item: Item) {
+ player.getInterfaceManager().close()
+ SummonFamiliarPlugin().handle(player, item, "summon")
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/global/skill/summoning/familiar/SpiritCobraNPC.java b/Server/src/main/content/global/skill/summoning/familiar/SpiritCobraNPC.java
index 83f1d21ae..18d4946b2 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/SpiritCobraNPC.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/SpiritCobraNPC.java
@@ -56,7 +56,7 @@ public class SpiritCobraNPC extends Familiar {
* @author Vexia
*/
public enum Egg {
- COCKATRICE(new Item(1944), new Item(12109)), SARATRICE(new Item(10533), new Item(12113)), ZAMATRICE(new Item(10532), new Item(12115)), GUTHATRICE(new Item(10531), new Item(12111)), CORACATRICE(new Item(11964), new Item(12119)), PENGATRICE(new Item(12483), new Item(12117)), VULATRICE(new Item(11695), new Item(12121));
+ COCKATRICE(new Item(1944), new Item(12109)), SARATRICE(new Item(5077), new Item(12113)), ZAMATRICE(new Item(5076), new Item(12115)), GUTHATRICE(new Item(5078), new Item(12111)), CORACATRICE(new Item(11964), new Item(12119)), PENGATRICE(new Item(12483), new Item(12117)), VULATRICE(new Item(11965), new Item(12121));
/**
* The egg item.
diff --git a/Server/src/main/content/global/skill/summoning/familiar/SpiritKalphiteNPC.java b/Server/src/main/content/global/skill/summoning/familiar/SpiritKalphiteNPC.java
index 3768df594..09a83505c 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/SpiritKalphiteNPC.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/SpiritKalphiteNPC.java
@@ -44,30 +44,31 @@ public class SpiritKalphiteNPC extends BurdenBeast {
@Override
protected boolean specialMove(FamiliarSpecial special) {
- if (!isOwnerAttackable()) {
- return false;
- }
- final List entitys = RegionManager.getLocalEntitys(owner, 6);
- visualize(Animation.create(8517), Graphics.create(1350));
- GameWorld.getPulser().submit(new Pulse(1, owner) {
- @Override
- public boolean pulse() {
- int count = 0;
- for (Entity entity : entitys) {
- if (count > 5) {
- return true;
- }
- if (!canCombatSpecial(entity)) {
- continue;
- }
- Projectile.magic(SpiritKalphiteNPC.this, entity, 1349, 40, 36, 50, 5).send();
- sendFamiliarHit(entity, 20);
- count++;
- }
- return true;
- }
- });
- return false;
+ return false; ///bodge this for now, until someone fixes this abomination.
+// if (!isOwnerAttackable()) {
+// return false;
+// }
+// final List entitys = RegionManager.getLocalEntitys(owner, 6);
+// visualize(Animation.create(8517), Graphics.create(1350));
+// GameWorld.getPulser().submit(new Pulse(1, owner) {
+// @Override
+// public boolean pulse() {
+// int count = 0;
+// for (Entity entity : entitys) {
+// if (count > 5) {
+// return true;
+// }
+// if (!canCombatSpecial(entity)) {
+// continue;
+// }
+// Projectile.magic(SpiritKalphiteNPC.this, entity, 1349, 40, 36, 50, 5).send();
+// sendFamiliarHit(entity, 20);
+// count++;
+// }
+// return true;
+// }
+// });
+// return false;
}
@Override
diff --git a/Server/src/main/content/global/skill/summoning/familiar/SummonFamiliarPlugin.java b/Server/src/main/content/global/skill/summoning/familiar/SummonFamiliarPlugin.java
index 8f6a407d8..ee216033e 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/SummonFamiliarPlugin.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/SummonFamiliarPlugin.java
@@ -9,6 +9,7 @@ import core.game.node.item.Item;
import core.game.world.map.zone.ZoneBorders;
import core.plugin.Initializable;
import core.plugin.Plugin;
+import content.data.Quests;
/**
* Handles summoning a familiar.
@@ -26,7 +27,7 @@ public final class SummonFamiliarPlugin extends OptionHandler {
@Override
public boolean handle(Player player, Node node, String option) {
Item item = (Item) node;
- if (!player.getQuestRepository().isComplete("Wolf Whistle") && player.getAttribute("in-cutscene", null) == null) {
+ if (!player.getQuestRepository().isComplete(Quests.WOLF_WHISTLE) && player.getAttribute("in-cutscene", null) == null) {
player.getPacketDispatch().sendMessage("You have to complete Wolf Whistle before you can summon a familiar.");
return true;
}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/VetionNPC.java b/Server/src/main/content/global/skill/summoning/familiar/VetionNPC.java
deleted file mode 100644
index f939260f2..000000000
--- a/Server/src/main/content/global/skill/summoning/familiar/VetionNPC.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package content.global.skill.summoning.familiar;
-
-import core.plugin.Initializable;
-import core.game.dialogue.DialoguePlugin;
-import core.game.node.entity.npc.Metamorphosis;
-
-/**
- * Handles the metamorphosis of Vet'ion Jr.
- * @author Empathy
- *
- */
-@Initializable
-public class VetionNPC extends Metamorphosis {
-
- /**
- * The Vet'ion Ids.
- */
- public static final int[] VETION_IDS = new int[] { 8600, 8654 };
-
- /**
- *
- * Constructs a new{@code VetionNPC} object.
- */
- public VetionNPC() {
- super(VETION_IDS);
- }
-
- @Override
- public DialoguePlugin getDialoguePlugin() {
- return null;
- }
-
-}
diff --git a/Server/src/main/content/global/skill/summoning/familiar/VoidFamiliarNPC.java b/Server/src/main/content/global/skill/summoning/familiar/VoidFamiliarNPC.java
index 4f8d3fab5..817b0501c 100644
--- a/Server/src/main/content/global/skill/summoning/familiar/VoidFamiliarNPC.java
+++ b/Server/src/main/content/global/skill/summoning/familiar/VoidFamiliarNPC.java
@@ -195,8 +195,9 @@ public final class VoidFamiliarNPC implements Plugin {
public void handleFamiliarTick() {
super.handleFamiliarTick();
if (healDelay < GameWorld.getTicks()) {
- getSkills().heal(1);
+ owner.getSkills().heal(1);
healDelay = GameWorld.getTicks() + 25;
+ owner.graphics(Graphics.create(1507), 1);
}
}
diff --git a/Server/src/main/content/global/skill/summoning/pet/IncubatorHandler.kt b/Server/src/main/content/global/skill/summoning/pet/IncubatorHandler.kt
index 79ef7c12d..edb11ca18 100644
--- a/Server/src/main/content/global/skill/summoning/pet/IncubatorHandler.kt
+++ b/Server/src/main/content/global/skill/summoning/pet/IncubatorHandler.kt
@@ -1,11 +1,8 @@
package content.global.skill.summoning.pet
import core.api.*
-import core.cache.def.impl.SceneryDefinition
import core.game.node.Node
import core.game.node.entity.player.Player
-import core.game.node.entity.skill.Skills
-import core.game.node.item.GroundItemManager
import core.game.interaction.*
import core.tools.StringUtils
diff --git a/Server/src/main/content/global/skill/summoning/pet/IncubatorTimer.kt b/Server/src/main/content/global/skill/summoning/pet/IncubatorTimer.kt
index 6395a79eb..899deee2a 100644
--- a/Server/src/main/content/global/skill/summoning/pet/IncubatorTimer.kt
+++ b/Server/src/main/content/global/skill/summoning/pet/IncubatorTimer.kt
@@ -42,6 +42,13 @@ class IncubatorTimer : PersistTimer (500, "incubation") {
root["eggs"] = arr
}
+ override fun onRegister(entity: Entity) {
+ if (entity !is Player) return
+ for ((region, _) in incubatingEggs) {
+ setVarbit(entity.asPlayer(), varbitForRegion(region), 1, true)
+ }
+ }
+
override fun run (entity: Entity) : Boolean {
if (entity !is Player) return false
for ((_, egg) in incubatingEggs) {
@@ -60,14 +67,14 @@ class IncubatorTimer : PersistTimer (500, "incubation") {
}
companion object {
- val TAVERLY_REGION = 11573
- val TAVERLY_VARBIT = 4277
+ val TAVERLEY_REGION = 11573
+ val TAVERLEY_VARBIT = 4277
val YANILLE_REGION = 10288
val YANILLE_VARBIT = 4221
fun varbitForRegion (region: Int) : Int {
return when (region) {
- TAVERLY_REGION -> TAVERLY_VARBIT
+ TAVERLEY_REGION -> TAVERLEY_VARBIT
YANILLE_REGION -> YANILLE_VARBIT
else -> -1
}
diff --git a/Server/src/main/content/global/skill/summoning/pet/KittenInteractDialogue.java b/Server/src/main/content/global/skill/summoning/pet/KittenInteractDialogue.java
index ebeb5b477..8925c4c42 100644
--- a/Server/src/main/content/global/skill/summoning/pet/KittenInteractDialogue.java
+++ b/Server/src/main/content/global/skill/summoning/pet/KittenInteractDialogue.java
@@ -117,8 +117,8 @@ public final class KittenInteractDialogue extends DialoguePlugin {
player.sendChat("Shoo cat!");
Pet currentPet = (Pet) player.getFamiliarManager().getFamiliar();
player.getFamiliarManager().getFamiliar().sendChat("Miaow!");
- player.getFamiliarManager().removeDetails(currentPet.getItemIdHash());
player.getFamiliarManager().getFamiliar().dismiss();
+ player.getFamiliarManager().removeDetails(currentPet.getItemId());
player.getPacketDispatch().sendMessage("The cat has run away.");
}
end();
diff --git a/Server/src/main/content/global/skill/summoning/pet/Pet.java b/Server/src/main/content/global/skill/summoning/pet/Pet.java
index e4812dac1..99048c140 100644
--- a/Server/src/main/content/global/skill/summoning/pet/Pet.java
+++ b/Server/src/main/content/global/skill/summoning/pet/Pet.java
@@ -30,7 +30,7 @@ public final class Pet extends Familiar {
/**
* The growth rate of the pet.
*/
- private double growthRate;
+ private final double growthRate;
/**
* The pets type.
@@ -86,8 +86,8 @@ public final class Pet extends Familiar {
hasWarned = 2;
}
if (hunger >= 100.0 && growthRate != 0 && pet.getFood().length != 0) {
- owner.getFamiliarManager().removeDetails(this.getItemIdHash());
owner.getFamiliarManager().dismiss();
+ owner.getFamiliarManager().removeDetails(getItemId());
owner.getFamiliarManager().setFamiliar(null);
setVarp(owner, 1175, 0);
owner.sendMessage(" Your pet has run away.");
@@ -126,16 +126,13 @@ public final class Pet extends Familiar {
// then this pet is already overgrown
return;
}
- owner.getFamiliarManager().removeDetails(this.getItemIdHash());
- owner.getFamiliarManager().dismiss();
+ if (pet.isKitten(itemId)) {
+ owner.incrementAttribute("/save:stats_manager:cats_raised");
+ }
+ owner.getFamiliarManager().addDetails(newItemId, details);
+ owner.getFamiliarManager().removeDetails(getItemId());
+ owner.getFamiliarManager().morphPet(new Item(newItemId), false, location, details.getHunger(), 0);
owner.getPacketDispatch().sendMessage(" Your pet has grown larger.");
- int npcId = pet.getNpcId(newItemId);
- details.updateGrowth(-100.0);
- Pet newPet = new Pet(owner, details, newItemId, npcId);
- newPet.growthRate = growthRate;
- newPet.hasWarned = hasWarned;
- owner.getFamiliarManager().setFamiliar(newPet);
- owner.getFamiliarManager().spawnFamiliar();
}
@Override
@@ -161,16 +158,6 @@ public final class Pet extends Familiar {
return itemId;
}
- /**
- * Gets the itemId with the individual hashed in.
- * @return The itemIdHash.
- */
- public int getItemIdHash() {
- Item item = new Item(itemId);
- item.setCharge(details.getIndividual());
- return item.getIdHash();
- }
-
/**
* Gets the details.
* @return The details.
@@ -187,9 +174,36 @@ public final class Pet extends Familiar {
return pet;
}
+ /**
+ * Gets the hunger level.
+ */
+ public double getHunger() {
+ return details.getHunger();
+ }
+
+ /**
+ * Gets the growth level.
+ */
+ public double getGrowth() {
+ return details.getGrowth();
+ }
+
+ /**
+ * Gets the hunger warning level.
+ */
+ public int getHasWarned() {
+ return hasWarned;
+ }
+
+ /**
+ * Sets the hunger warning level.
+ */
+ public void setHasWarned(int value) {
+ this.hasWarned = value;
+ }
+
@Override
public int[] getIds() {
return new int[] { 761, 762, 763, 764, 765, 766, 3505, 3598, 6969, 7259, 7260, 6964, 7249, 7251, 6960, 7241, 7243, 6962, 7245, 7247, 6966, 7253, 7255, 6958, 7237, 7239, 6915, 7277, 7278, 7279, 7280, 7018, 7019, 7020, 6908, 7313, 7316, 6947, 7293, 7295, 7297, 7299, 6911, 7261, 7263, 7265, 7267, 7269, 6919, 7301, 7303, 7305, 7307, 6949, 6952, 6955, 6913, 7271, 7273, 6945, 7319, 7321, 7323, 7325, 7327, 6922, 6942, 7210, 7212, 7214, 7216, 7218, 7220, 7222, 7224, 7226, 6900, 6902, 6904, 6906, 768, 769, 770, 771, 772, 773, 3504, 6968, 7257, 7258, 6965, 7250, 7252, 6961, 7242, 7244, 6963, 7246, 7248, 6967, 7254, 7256, 6859, 7238, 7240, 6916, 7281, 7282, 7283, 7284, 7015, 7016, 7017, 6909, 7314, 7317, 6948, 7294, 7296, 7298, 7300, 6912, 7262, 7264, 7266, 7268, 7270, 6920, 7302, 7304, 7306, 7308, 6950, 6953, 6956, 6914, 7272, 7274, 6946, 7320, 7322, 7324, 7326, 7328, 6923, 6943, 7211, 7213, 7215, 7217, 7219, 7221, 7223, 7225, 7227, 6901, 6903, 6905, 6907, 774, 775, 776, 777, 778, 779, 3503, 6951, 6954, 6957 };
}
-
}
diff --git a/Server/src/main/content/global/skill/summoning/pet/PetDetails.java b/Server/src/main/content/global/skill/summoning/pet/PetDetails.java
index b3e01c869..b3b0b8f05 100644
--- a/Server/src/main/content/global/skill/summoning/pet/PetDetails.java
+++ b/Server/src/main/content/global/skill/summoning/pet/PetDetails.java
@@ -19,11 +19,6 @@ public final class PetDetails {
*/
private double growth = 0.0;
- /**
- * The individual, an in principle arbitrary integer read off of the item's charge slot.
- */
- private int individual;
-
/**
* Constructs a new {@code PetDetails} {@code Object}.
* @param growth The growth value.
@@ -64,6 +59,13 @@ public final class PetDetails {
return hunger;
}
+ /**
+ * Sets the hunger. (You probably want to use updateHunger() instead.)
+ */
+ public void setHunger(double value) {
+ this.hunger = value;
+ }
+
/**
* Gets the growth.
* @return The growth.
@@ -73,18 +75,9 @@ public final class PetDetails {
}
/**
- * Sets the individual.
- * @param individual The individual to set.
+ * Sets the growth. (You probably want to use updateGrowth() instead.)
*/
- public void setIndividual(int individual) {
- this.individual = individual;
- }
-
- /**
- * Gets the individual.
- * @return The individual.
- */
- public int getIndividual() {
- return individual;
+ public void setGrowth(double value) {
+ this.growth = value;
}
}
diff --git a/Server/src/main/content/global/skill/summoning/pet/Pets.java b/Server/src/main/content/global/skill/summoning/pet/Pets.java
index 843075d28..263d04aef 100644
--- a/Server/src/main/content/global/skill/summoning/pet/Pets.java
+++ b/Server/src/main/content/global/skill/summoning/pet/Pets.java
@@ -18,7 +18,7 @@ public enum Pets {
/**
* A cat/kitten pet.
*/
- CAT(1555, 1561, 1567, 761, 768, 774, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_1(1556, 1562, 1568, 762, 769, 775, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_2(1557, 1563, 1569, 763, 770, 776, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_3(1558, 1564, 1570, 764, 771, 777, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_4(1559, 1565, 1571, 765, 772, 778, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_5(1560, 1566, 1572, 766, 773, 779, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), HELLCAT(7583, 7582, 7581, 3505, 3504, 3503, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_7(14089, 14090, 15092, 8217, 8214, 8216, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927),
+ CAT(1555, 1561, 1567, 761, 768, 774, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_1(1556, 1562, 1568, 762, 769, 775, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_2(1557, 1563, 1569, 763, 770, 776, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_3(1558, 1564, 1570, 764, 771, 777, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_4(1559, 1565, 1571, 765, 772, 778, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_5(1560, 1566, 1572, 766, 773, 779, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), HELLCAT(7583, 7582, 7581, 3505, 3504, 3503, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927), CAT_6(14089, 14090, 15092, 8217, 8214, 8216, 0.0154320987654321, 0, 321, 319, 363, 365, 341, 339, 15264, 345, 347, 377, 379, 353, 355, 389, 391, 7944, 7946, 349, 351, 331, 329, 327, 325, 395, 397, 383, 385, 317, 315, 371, 373, 335, 333, 359, 361, 15264, 15270, 1927),
/**
* A clockwork cat.
@@ -180,61 +180,6 @@ public enum Pets {
*/
BABY_DRAGON(12469, 12470, -1, 6900, 6901, -1, 0.0052, 99, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 321, 363, 341, 15264, 345, 377, 353, 389, 7944, 349, 331, 327, 395, 383, 317, 371, 335, 359, 15264, 15270), BABY_DRAGON_1(12471, 12472, -1, 6902, 6903, -1, 0.0052, 99, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 321, 363, 341, 15264, 345, 377, 353, 389, 7944, 349, 331, 327, 395, 383, 317, 371, 335, 359, 15264, 15270), BABY_DRAGON_2(12473, 12474, -1, 6904, 6905, -1, 0.0052, 99, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 321, 363, 341, 15264, 345, 377, 353, 389, 7944, 349, 331, 327, 395, 383, 317, 371, 335, 359, 15264, 15270), BABY_DRAGON_3(12475, 12476, -1, 6906, 6907, -1, 0.0052, 99, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 321, 363, 341, 15264, 345, 377, 353, 389, 7944, 349, 331, 327, 395, 383, 317, 371, 335, 359, 15264, 15270);
-
-// /**
-// * Emperor's pets (that's right, MY pet"S").
-// */
-// GIANT_WOLPERTINGER(8888, -1, -1, 6990, -1, -1, 0.0, 99), DRAKAN(8889, -1, -1, 4794, -1, -1, 0.0, 99), DILL(8890, -1, -1, 7770, -1, -1, 0.0, 99),
-
-// /**
-// * Vexias pet.
-// */
-// IMP(9952, -1, -1, 1531, -1, -1, 0.0, 99), BIG_GUY(9951, -1, -1, 3101, -1, -1, 0.0, 99), LITTLE_GUY(8887, -1, -1, 5805, -1, -1, 0.0, 99),
-//
-// /**
-// * Godwars boss pets.
-// */
-// KRIL_JR(14648, -1, -1, 8591, -1, -1, 0.0, 1), KREE_JR(14645, -1, -1, 8592, -1, -1, 0.0, 1), ZILYANA_JR(14647, -1, -1, 8593, -1, -1, 0.0, 1), GRAARDOOR_JR(14646, -1, -1, 8594, -1, -1, 0.0, 1),
-//
-// /**
-// * Classic boss pets.
-// */
-// CHAOS_ELE_JR(14638, -1, -1, 8595, -1, -1, 0.0, 1), PRINCE_BLACK_DRAGON(14649, -1, -1, 8596, -1, -1, 0.0, 1), BABY_MOLE(14642, -1, -1, 8601, -1, -1, 0.0, 1), KQ_FORM_1(14643, -1, -1, 8602, -1, -1, 0.0, 1), KQ_FORM_2(14650, -1, -1, 8603, -1, -1, 0.0, 1), DARK_CORE(14653, -1, -1, 8630, -1, -1, 0.0, 1),
-//
-// /**
-// * The boss pets for the Dagannoths
-// */
-// DAGANNOTH_SUPREME(14639, -1, -1, 8605, -1, -1, 0.0, 1), DAGANNOTH_PRIME(14640, -1, -1, 8606, -1, -1, 0.0, 1), DAGANNOTH_REX(14641, -1, -1, 8607, -1, -1, 0.0, 1),
-// /**
-// * The new OSRS bosses.
-// */
-// CALLISTO_CUB(14658, -1, -1, 8597, -1, -1, 0.0, 1),
-// SCORPIA_JR(14661, -1, -1, 8598, -1, -1, 0.0, 1),
-// VENENATIS_JR(14657, -1, -1, 8654, -1, -1, 0.0, 1),
-// VETION_JR(14659, -1, -1, 8600, -1, -1, 0.0, 1),
-// VETION_JR_2(14660, -1, -1, 8654, -1, -1, 0.0, 1),
-// RELEASE_THE_KRAKEN(14651, -1, -1, 8608, -1, -1, 0.0, 1),
-// SMOKE_DEVIL(14644, -1, -1, 8609, -1, -1, 0.0, 1),
-// SNAKELING_YELLOW(14654, -1, -1, 8626, -1, -1, 0.0, 1),
-// SNAKELING_ORANGE(14655, -1, -1, 8627, -1, -1, 0.0, 1),
-// SNAKELING_PURPLE(14656, -1, -1, 8628, -1, -1, 0.0, 1),
-// /**
-// * The boss pet representing the likeness of the Penance Queen
-// */
-// DRAMA_QUEEN(14652, -1, -1, 8604, -1, -1, 0.0, 1),
-// /**
-// * The skilling pets
-// */
-// BEAVER(14821, -1, -1, 8635, -1, -1, 0.0, 1),
-// ROCK_GOLEM(14822, -1, -1, 8637, -1, -1, 0.0, 1),
-// BABY_RED_CHINCHOMPA(14823, -1, -1, 8643, -1, -1, 0.0, 1),
-// BABY_GREY_CHINCHOMPA(14824, -1, -1, 8644, -1, -1, 0.0, 1),
-// BABY_BLACK_CHINCHOMPA(14825, -1, -1, 8657, -1, -1, 0.0, 1),
-// BABY_GOLD_CHINCHOMPA(14826, -1, -1, 8658, -1, -1, 0.0, 1),
-// HERON(14827, -1, -1, 8647, -1, -1, 0.0, 1),
-// TZREK_JAD(14828, -1, -1, 8650, -1, -1, 0.0, 1);
-
-
/**
* The baby pets mapping.
*/
@@ -481,4 +426,24 @@ public enum Pets {
}
return -1;
}
-}
\ No newline at end of file
+
+ /**
+ * Checks if this pet is a kitten
+ * @return a boolean, true if the pet is a kitten
+ */
+ public boolean isKitten(int id) {
+ switch (this) {
+ case CAT:
+ case CAT_1:
+ case CAT_2:
+ case CAT_3:
+ case CAT_4:
+ case CAT_5:
+ case CAT_6:
+ case HELLCAT:
+ return id == babyItemId;
+ default:
+ return false;
+ }
+ }
+}
diff --git a/Server/src/main/content/global/skill/thieving/Pickpockets.kt b/Server/src/main/content/global/skill/thieving/Pickpockets.kt
index 4580f2518..e4c1eda77 100644
--- a/Server/src/main/content/global/skill/thieving/Pickpockets.kt
+++ b/Server/src/main/content/global/skill/thieving/Pickpockets.kt
@@ -122,6 +122,7 @@ enum class Pickpockets(val ids: IntArray, val requiredLevel: Int, val low: Doubl
WeightedItem(Items.TARROMIN_SEED_5293,1,1,50.0),
WeightedItem(Items.HARRALANDER_SEED_5294,1,1,25.0),
WeightedItem(Items.RANARR_SEED_5295,1,1,8.0),
+ WeightedItem(Items.SPIRIT_WEED_SEED_12176,1,1,8.0),
WeightedItem(Items.TOADFLAX_SEED_5296,1,1,8.0),
WeightedItem(Items.IRIT_SEED_5297,1,1,8.0),
WeightedItem(Items.AVANTOE_SEED_5298,1,1,8.0),
diff --git a/Server/src/main/content/global/skill/thieving/StallThiefPulse.java b/Server/src/main/content/global/skill/thieving/StallThiefPulse.java
index 280f2cdcb..b08185335 100644
--- a/Server/src/main/content/global/skill/thieving/StallThiefPulse.java
+++ b/Server/src/main/content/global/skill/thieving/StallThiefPulse.java
@@ -10,14 +10,13 @@ import core.game.node.item.Item;
import core.game.node.scenery.Scenery;
import core.game.node.scenery.SceneryBuilder;
import core.game.world.GameWorld;
-import core.game.world.map.Direction;
-import core.game.world.map.Location;
import core.game.world.map.RegionManager;
import core.game.world.update.flag.context.Animation;
import core.tools.RandomFunction;
import core.tools.StringUtils;
import static core.api.ContentAPIKt.*;
+import content.data.Quests;
/**
* Represents the pulse used to thieve a stall.
@@ -74,12 +73,12 @@ public final class StallThiefPulse extends SkillPulse {
player.getPacketDispatch().sendMessage("You don't have enough inventory space.");
return false;
}
- if (player.getLocation().isInRegion(10553) && !isQuestComplete(player, "Fremennik Trials") && stall.full_ids.contains(4278)) {
+ if (player.getLocation().isInRegion(10553) && !isQuestComplete(player, Quests.THE_FREMENNIK_TRIALS) && stall.full_ids.contains(4278)) {
sendDialogue(player, "The fur trader is staring at you suspiciously. You cannot steal from his stall while he distrusts you.");
return false;
}
- if (player.getLocation().isInRegion(10553) && !isQuestComplete(player, "Fremennik Trials") && stall.full_ids.contains(4277)) {
+ if (player.getLocation().isInRegion(10553) && !isQuestComplete(player, Quests.THE_FREMENNIK_TRIALS) && stall.full_ids.contains(4277)) {
sendDialogue(player, "The fishmonger is staring at you suspiciously. You cannot steal from his stall while he distrusts you.");
return false;
}
diff --git a/Server/src/main/content/global/skill/thieving/ThievingListeners.kt b/Server/src/main/content/global/skill/thieving/ThievingListeners.kt
index d6123fcda..c01ef2e6c 100644
--- a/Server/src/main/content/global/skill/thieving/ThievingListeners.kt
+++ b/Server/src/main/content/global/skill/thieving/ThievingListeners.kt
@@ -15,6 +15,9 @@ import core.game.node.entity.player.Player
import core.game.node.item.Item
import org.rs09.consts.Sounds
+import core.game.interaction.InteractionListeners
+import core.game.world.GameWorld
+
class ThievingListeners : InteractionListener {
companion object {
@@ -64,6 +67,9 @@ class ThievingListeners : InteractionListener {
player.sendMessage("You don't have enough inventory space to do that.")
return@on true
}
+
+ //Custom portion. Repeat pickpocket, only proceed if it has been long enough since the last pickpocket action
+ if (getAttribute(player, "pickpockettick", 0) <= GameWorld.ticks) {
player.animator.animate(PICKPOCKET_ANIM)
val lootTable = pickpocketRoll(player, pickpocketData.low, pickpocketData.high, pickpocketData.table)
@@ -73,18 +79,28 @@ class ThievingListeners : InteractionListener {
playHurtAudio(player, 20)
- stun(player, pickpocketData.stunTime)
+ //stun(player, pickpocketData.stunTime)
+ stun(player, 0)
+ setAttribute(player, "pickpockettick", GameWorld.ticks + pickpocketData.stunTime)
player.impactHandler.manualHit(node.asNpc(),RandomFunction.random(pickpocketData.stunDamageMin,pickpocketData.stunDamageMax),ImpactHandler.HitsplatType.NORMAL)
node.asNpc().face(null)
} else {
playAudio(player, Sounds.PICK_2581)
- player.lock(2)
+ //player.lock(2)
+ setAttribute(player, "pickpockettick", GameWorld.ticks + 2)
lootTable.forEach { player.inventory.add(it) }
player.skills.addExperience(Skills.THIEVING,pickpocketData.experience)
}
-
+ }
+ //pickpocket again.
+ if (player.skills.lifepoints > pickpocketData.stunDamageMax) {
+ InteractionListeners.run(node.id, IntType.NPC,"Pickpocket",player,node)
+ } else {
+ player.sendMessage("It's probably not a good idea to continue with your injuries.")
+ }
+
return@on true
}
}
diff --git a/Server/src/main/content/global/travel/glider/CaptainDalburDialogue.java b/Server/src/main/content/global/travel/glider/CaptainDalburDialogue.java
index 3af68e890..67f0cbaa0 100644
--- a/Server/src/main/content/global/travel/glider/CaptainDalburDialogue.java
+++ b/Server/src/main/content/global/travel/glider/CaptainDalburDialogue.java
@@ -1,6 +1,6 @@
package content.global.travel.glider;
-import content.region.kandarin.quest.grandtree.TheGrandTree;
+import content.data.Quests;
import core.game.component.Component;
import core.game.dialogue.DialoguePlugin;
import core.game.dialogue.FacialExpression;
@@ -58,7 +58,7 @@ public final class CaptainDalburDialogue extends DialoguePlugin {
stage = 1;
break;
case 1:
- if(!isQuestComplete(player, TheGrandTree.questName)){
+ if(!isQuestComplete(player, Quests.THE_GRAND_TREE)){
interpreter.sendDialogues(npc, FacialExpression.ANNOYED, "I only fly friends of the gnomes!");
stage = END_DIALOGUE;
}
diff --git a/Server/src/main/content/global/travel/glider/GliderPlugin.java b/Server/src/main/content/global/travel/glider/GliderPlugin.java
index c62e404d9..b3cbe634c 100644
--- a/Server/src/main/content/global/travel/glider/GliderPlugin.java
+++ b/Server/src/main/content/global/travel/glider/GliderPlugin.java
@@ -1,6 +1,6 @@
package content.global.travel.glider;
-import content.region.kandarin.quest.grandtree.TheGrandTree;
+import content.data.Quests;
import core.api.ContentAPIKt;
import core.cache.def.impl.NPCDefinition;
import core.game.component.Component;
@@ -31,7 +31,7 @@ public final class GliderPlugin extends OptionHandler {
@Override
public boolean handle(Player player, Node node, String option) {
- if(isQuestComplete(player, TheGrandTree.questName)){
+ if(isQuestComplete(player, Quests.THE_GRAND_TREE)){
player.getInterfaceManager().open(new Component(138));
Gliders.sendConfig(node.asNpc(), player);
} else {
diff --git a/Server/src/main/content/global/travel/ship/SeamanDialoguePlugin.java b/Server/src/main/content/global/travel/ship/SeamanDialoguePlugin.java
index f7782c200..41b226d36 100644
--- a/Server/src/main/content/global/travel/ship/SeamanDialoguePlugin.java
+++ b/Server/src/main/content/global/travel/ship/SeamanDialoguePlugin.java
@@ -11,6 +11,7 @@ import core.game.node.entity.player.link.diary.DiaryType;
import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
+import content.data.Quests;
/**
* Represents the dialogue used to handle the sailing from and to karamja.
@@ -46,7 +47,7 @@ public class SeamanDialoguePlugin extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
- if (args.length > 1 && player.getQuestRepository().isComplete("Pirate's Treasure")) {
+ if (args.length > 1 && player.getQuestRepository().isComplete(Quests.PIRATES_TREASURE)) {
if (player.getEquipment().get(EquipmentContainer.SLOT_RING) != null && player.getEquipment().get(EquipmentContainer.SLOT_RING).getId() == Items.RING_OF_CHAROSA_6465) {
travel();
} else if (player.getAchievementDiaryManager().getDiary(DiaryType.KARAMJA).isComplete(0)) {
diff --git a/Server/src/main/content/global/travel/ship/ShipCharter.java b/Server/src/main/content/global/travel/ship/ShipCharter.java
index 99121e375..9e04a8878 100644
--- a/Server/src/main/content/global/travel/ship/ShipCharter.java
+++ b/Server/src/main/content/global/travel/ship/ShipCharter.java
@@ -17,6 +17,7 @@ import java.util.ArrayList;
import java.util.List;
import static core.api.ContentAPIKt.*;
+import content.data.Quests;
/**
* Represents a class used to charter ships.
@@ -84,7 +85,10 @@ public final class ShipCharter {
*/
public static int getCost(final Player player, Destination destination) {
int cost = destination.getCost(player, destination);
- if (player.getEquipment().containsItem(RING_OF_CHAROS)) {// TODO: cabin fever quest
+ if (player.getQuestRepository().isComplete(Quests.CABIN_FEVER)) {
+ cost -= Math.round((cost / 2.));
+ }
+ if (player.getEquipment().containsItem(RING_OF_CHAROS)) {
cost -= Math.round((cost / 2.));
}
return cost;
@@ -96,12 +100,10 @@ public final class ShipCharter {
* @return the hidden childs.
*/
public static int[] getHiddenComponents(final Player player, Destination base) {
- final Destination[] restrictions = new Destination[] { /**
- *
- * Destination.MOS_LE_HARMLESS,
- */
- Destination.OO_GLOG, Destination.SHIPYARD, /* Destination.PORT_TYRAS, */
- Destination.CRANDOR };
+ final Destination[] restrictions = new Destination[] { /* Destination.MOS_LE_HARMLESS, */
+ Destination.OO_GLOG, Destination.SHIPYARD, /* Destination.PORT_TYRAS, */
+ Destination.CRANDOR
+ };
List childs = new ArrayList<>(20);
for (Destination destination : restrictions) {
childs.add(destination.getXChild());
@@ -141,10 +143,15 @@ public final class ShipCharter {
PORT_PHASMATYS(Location.create(3705, 3503, 1), 24, new int[] { 3650, 3250, 1850, 0, 0, 0, 2050, 1850, 3200, 1100 }, Location.create(3702, 3502, 0), 2, 13) {
@Override
public boolean checkTravel(Player player) {
- return requireQuest(player, "Priest in Peril", "to go there");
+ return requireQuest(player, Quests.PRIEST_IN_PERIL, "to go there.");
+ }
+ },
+ CRANDOR(Location.create(2792, 3417, 1), 32, new int[] { 0, 480, 480, 925, 400, 3650, 1600, 400, 3200, 3800 }, null, 10, 21) {
+ @Override
+ public boolean checkTravel(Player player) {
+ return requireQuest(player, Quests.DRAGON_SLAYER, "to go there.");
}
},
- CRANDOR(new Location(2792, 3417, 1), 32, new int[] { 0, 480, 480, 925, 400, 3650, 1600, 400, 3200, 3800 }, null, 10, 21),
BRIMHAVEN(Location.create(2763, 3238, 1), 28, new int[] { 0, 480, 480, 925, 400, 3650, 1600, 400, 3200, 3800 }, Location.create(2760, 3238, 0), 6, 17){
@Override
public int getCost(Player player, Destination destination) {
@@ -161,7 +168,13 @@ public final class ShipCharter {
return super.getCost(player, destination);
}
},
- PORT_TYRAS(Location.create(2142, 3122, 0), 23, new int[] { 3200, 3200, 3200, 1600, 3200, 3200, 3200, 3200, 0, 3200 }, Location.create(2143, 3122, 0), 1, 12),
+ PORT_TYRAS(Location.create(2142, 3122, 0), 23, new int[] { 3200, 3200, 3200, 1600, 3200, 3200, 3200, 3200, 0, 3200 }, Location.create(2143, 3122, 0), 1, 12) {
+ @Override
+ public boolean checkTravel(Player player) {
+ return hasRequirement(player, Quests.REGICIDE);
+ }
+
+ },
KARAMJA(Location.create(2957, 3158, 1), 27, new int[] { 200, 480, 0, 225, 400, 1850, 0, 200, 3200, 2000 }, Location.create(2954, 3156, 0), 5, 16) {
@Override
public int getCost(Player player, Destination destination) {
@@ -178,9 +191,19 @@ public final class ShipCharter {
return super.getCost(player, destination);
}
},
- SHIPYARD(Location.create(3001, 3032, 0), 26, new int[] { 400, 1600, 200, 225, 720, 1850, 400, 0, 3200, 900 }, Location.create(3001, 3032, 0), 4, 15),
+ SHIPYARD(Location.create(3001, 3032, 0), 26, new int[] { 400, 1600, 200, 225, 720, 1850, 400, 0, 3200, 900 }, Location.create(3001, 3032, 0), 4, 15) {
+ @Override
+ public boolean checkTravel(Player player) {
+ return requireQuest(player, Quests.THE_GRAND_TREE, "to go there.");
+ }
+ },
OO_GLOG(Location.create(2623, 2857, 0), 33, new int[] { 300, 3400, 2000, 550, 5000, 2800, 1400, 900, 3200, 0}, Location.create(2622, 2857, 0), 11, 22),
- MOS_LE_HARMLESS(Location.create(3671, 2931, 0), 31, new int[] { 725, 625, 1025, 0, 1025, 0, 325, 275, 1600, 500 }, Location.create(3671, 2933, 0), 9, 20);
+ MOS_LE_HARMLESS(Location.create(3671, 2931, 0), 31, new int[] { 725, 625, 1025, 0, 1025, 0, 325, 275, 1600, 500 }, Location.create(3671, 2933, 0), 9, 20) {
+ @Override
+ public boolean checkTravel(Player player) {
+ return hasRequirement(player, Quests.CABIN_FEVER);
+ }
+ };
/**
* Constructs a new {@code ShipCharter} {@code Object}.
diff --git a/Server/src/main/content/global/travel/trees/GnomeSpiritTreeListener.kt b/Server/src/main/content/global/travel/trees/GnomeSpiritTreeListener.kt
index 494a79e12..838473c20 100644
--- a/Server/src/main/content/global/travel/trees/GnomeSpiritTreeListener.kt
+++ b/Server/src/main/content/global/travel/trees/GnomeSpiritTreeListener.kt
@@ -12,12 +12,12 @@ import core.game.world.map.Location
import core.game.world.update.flag.context.Animation
import core.game.world.update.flag.context.Graphics
import org.rs09.consts.NPCs
-import content.region.kandarin.quest.tree.TreeGnomeVillage
import core.game.dialogue.DialogueFile
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
import core.game.world.GameWorld.Pulser
import core.tools.END_DIALOGUE
+import content.data.Quests
class GnomeSpiritTreeListener: InteractionListener {
val spiritTrees = intArrayOf(1317,1293,1294)
@@ -46,7 +46,7 @@ class GnomeSpiritTreeTeleportDialogue: DialogueFile() {
private val GRAPHICS = arrayOf(Graphics(1228), Graphics(1229))
fun hasQuestCompleted(player: Player): Boolean {
- if (!isQuestComplete(player, TreeGnomeVillage.questName)) {
+ if (!isQuestComplete(player, Quests.TREE_GNOME_VILLAGE)) {
sendDialogue(player, "The tree doesn't feel like talking.")
stage = END_DIALOGUE
return false
diff --git a/Server/src/main/content/minigame/allfiredup/AFUBeaconHandler.kt b/Server/src/main/content/minigame/allfiredup/AFUBeaconHandler.kt
index 08d059bcf..cd50cb9bf 100644
--- a/Server/src/main/content/minigame/allfiredup/AFUBeaconHandler.kt
+++ b/Server/src/main/content/minigame/allfiredup/AFUBeaconHandler.kt
@@ -10,6 +10,7 @@ import org.rs09.consts.Items
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
import core.game.world.GameWorld
+import content.data.Quests
private val VALID_LOGS = intArrayOf(Items.LOGS_1511, Items.OAK_LOGS_1521,Items.WILLOW_LOGS_1519,Items.MAPLE_LOGS_1517,Items.YEW_LOGS_1515,Items.MAGIC_LOGS_1513)
private val FILL_ANIM = Animation(9136)
@@ -24,8 +25,8 @@ class AFUBeaconListeners : InteractionListener {
override fun defineListeners() {
on(IntType.SCENERY,"add-logs","light"){ player, node ->
val beacon = AFUBeacon.forLocation(node.location)
- val questComplete = player.questRepository.isComplete("All Fired Up")
- val questStage = player.questRepository.getStage("All Fired Up")
+ val questComplete = player.questRepository.isComplete(Quests.ALL_FIRED_UP)
+ val questStage = player.questRepository.getStage(Quests.ALL_FIRED_UP)
if ((beacon != AFUBeacon.RIVER_SALVE && beacon != AFUBeacon.RAG_AND_BONE && !questComplete)
|| (beacon == AFUBeacon.RIVER_SALVE && questStage < 20 && !questComplete)
@@ -68,7 +69,7 @@ class AFUBeaconListeners : InteractionListener {
}
AFUBeacon.GOBLIN_VILLAGE -> {
- if(!player.questRepository.isComplete("Lost Tribe")){
+ if(!player.questRepository.isComplete(Quests.THE_LOST_TRIBE)){
player.dialogueInterpreter.sendDialogues(NPC(beacon.keeper).getShownNPC(player), core.game.dialogue.FacialExpression.THINKING,"We no trust you outsider. You no light our beacon.","(Complete Lost Tribe to use this beacon.)")
return
}
@@ -151,7 +152,7 @@ class AFUBeaconListeners : InteractionListener {
experience += session?.getBonusExperience() ?: 0.0
player.skills.addExperience(Skills.FIREMAKING,experience)
} else {
- player.questRepository.getQuest("All Fired Up").setStage(player, player.questRepository.getStage("All Fired Up") + 10)
+ player.questRepository.getQuest(Quests.ALL_FIRED_UP).setStage(player, player.questRepository.getStage(Quests.ALL_FIRED_UP) + 10)
}
}
2 -> player.unlock().also { return true }
@@ -183,7 +184,7 @@ class AFUBeaconListeners : InteractionListener {
if(questComplete){
session?.refreshTimer(beacon,logs.id)
} else {
- player.questRepository.getQuest("All Fired Up").setStage(player, 80)
+ player.questRepository.getQuest(Quests.ALL_FIRED_UP).setStage(player, 80)
}
}
2 -> player.unlock().also { return true }
diff --git a/Server/src/main/content/minigame/allfiredup/AFURepairClimbHandler.kt b/Server/src/main/content/minigame/allfiredup/AFURepairClimbHandler.kt
index ac6017994..f95dfb1d9 100644
--- a/Server/src/main/content/minigame/allfiredup/AFURepairClimbHandler.kt
+++ b/Server/src/main/content/minigame/allfiredup/AFURepairClimbHandler.kt
@@ -1,5 +1,6 @@
package content.minigame.allfiredup
+import content.data.Quests
import core.game.node.entity.impl.ForceMovement
import core.game.node.entity.player.Player
import core.game.node.entity.skill.Skills
@@ -26,27 +27,74 @@ class AFURepairClimbHandler : InteractionListener {
override fun defineListeners() {
on(repairIDs, IntType.SCENERY, "repair"){ player, _ ->
- var rco: RepairClimbObject = RepairClimbObject.GWD
- for(ent in RepairClimbObject.values()) if(ent.destinationDown?.withinDistance(player.location,2) == true || ent.destinationUp?.withinDistance(player.location,2) == true) rco = ent
- repair(player,rco)
- return@on true
+ if (hasRequirement(player, Quests.ALL_FIRED_UP)){
+ val rco: RepairClimbObject? = getClimbingObject(player)
+ repair(player,rco!!)
+ return@on true
+ }
+ return@on false
}
on(climbIDs, IntType.SCENERY, "climb"){ player, node ->
- var rco: RepairClimbObject = RepairClimbObject.GWD
- for(ent in RepairClimbObject.values()) if(ent.destinationDown?.withinDistance(player.location,2) == true || ent.destinationUp?.withinDistance(player.location,2) == true) rco = ent
- climb(player,rco,node.location)
+ val rco: RepairClimbObject? = getClimbingObject(player)
+ climb(player,rco!!,node.location)
return@on true
}
}
+ private fun getClimbingObject(player: Player): RepairClimbObject?{
+ for(ent in RepairClimbObject.values())
+ if(ent.destinationDown?.withinDistance(player.location,2) == true ||
+ ent.destinationUp?.withinDistance(player.location,2) == true){
+ return ent
+ }
+ return null
+ }
+
private fun repair(player: Player,rco: RepairClimbObject){
+ if (rco == RepairClimbObject.TEMPLE){
+ // You can do this 2 different ways
+ val hasSmithingLevel = getDynLevel(player, Skills.SMITHING) >= 70
+ val hasConstructionLevel = getDynLevel(player, Skills.CONSTRUCTION) >= 59
+
+ if (!hasConstructionLevel && !hasSmithingLevel){
+ sendDialogue(player, "You need level 70 smithing or 59 construction for this.")
+ return
+ }
+
+ val hasHammer = inInventory(player, Items.HAMMER_2347)
+ val hasSmithingItems = hasHammer && inInventory(player, Items.IRON_BAR_2351, 2)
+ val hasConstructionItems = hasHammer && inInventory(player, Items.PLANK_960, 2)
+
+ if (hasSmithingLevel && hasSmithingItems){
+ if (removeItem(player,Item(Items.IRON_BAR_2351, 2))) {
+ setVarbit(player, rco.varbit, 1, true)
+ return
+ }
+ }
+ // Only check this if the smithing repair didn't work
+ if (hasConstructionLevel && hasConstructionItems){
+ val nails = NailType.get(player, 4)
+ if (nails != null){
+ if (removeItem(player, Item(Items.PLANK_960, 2)) && removeItem(player, Item(nails.itemId, 4))) {
+ setVarbit(player, rco.varbit, 1, true)
+ return
+ }
+ }
+ }
+
+ var msg = "You need "
+ msg += if (hasSmithingLevel) "a hammer and 2 iron bars" else ""
+ msg += if (hasSmithingLevel && hasConstructionLevel) " or " else ""
+ msg += if (hasConstructionLevel) "a hammer, 2 planks and 4 nails for this." else " for this."
+ sendDialogue(player, msg)
+ return
+ }
val skill = rco.levelRequirement?.first ?: 0
val level = rco.levelRequirement?.second ?: 0
if(player.skills.getLevel(skill) < level){
player.dialogueInterpreter.sendDialogue("You need level $level ${Skills.SKILL_NAME[skill]} for this.")
- return
}
var requiresNeedle = false
@@ -64,10 +112,7 @@ class AFURepairClimbHandler : InteractionListener {
requiresNeedle = true
arrayOf(Item(Items.JUTE_FIBRE_5931,3))
}
-
- RepairClimbObject.TEMPLE -> {
- arrayOf(Item(Items.IRON_BAR_2351,2))
- }
+ else -> return
}
if(requiresNeedle){
@@ -75,7 +120,7 @@ class AFURepairClimbHandler : InteractionListener {
player.inventory.remove(*requiredItems)
if (Random().nextBoolean()) player.inventory.remove(Item(Items.NEEDLE_1733))
} else {
- player.dialogueInterpreter.sendDialogue("You need a needle and ${requiredItems.map { "${it.amount} ${it.name.toLowerCase()}s" }.toString().replace("[","").replace("]","")} for this.")
+ player.dialogueInterpreter.sendDialogue("You need a needle and ${requiredItems.map { "${it.amount} ${it.name.lowercase()}s" }.toString().replace("[","").replace("]","")} for this.")
return
}
} else {
@@ -89,11 +134,10 @@ class AFURepairClimbHandler : InteractionListener {
}
player.inventory.remove(*requiredItems)
} else {
- player.dialogueInterpreter.sendDialogue("You need a hammer and ${requiredItems.map { "${it.amount} ${it.name.toLowerCase()}s" }.toString().replace("[","").replace("]","")} for this.")
+ player.dialogueInterpreter.sendDialogue("You need a hammer and ${requiredItems.map { "${it.amount} ${it.name.lowercase()}s" }.toString().replace("[","").replace("]","")} for this.")
return
}
}
-
setVarbit(player, rco.varbit, 1, true)
}
@@ -105,7 +149,7 @@ class AFURepairClimbHandler : InteractionListener {
DEATH_PLATEAU(5161,Location.create(2949, 3623, 0),Location.create(2954, 3623, 0), Pair(Skills.CONSTRUCTION,42)),
BURTHORPE(5160,Location.create(2941, 3563, 0),Location.create(2934, 3563, 0),Pair(Skills.SMITHING,56)),
GWD(5163,null,null,Pair(Skills.CRAFTING,60)),
- TEMPLE(5164,Location.create(2949, 3835, 0),Location.create(2956, 3835, 0),Pair(Skills.SMITHING,64));
+ TEMPLE(5164,Location.create(2949, 3835, 0),Location.create(2956, 3835, 0),Pair(0,0)); // This needs to be handled specially so don't have levels here
fun getOtherLocation(player: Player): Location?{
if(player.location == destinationDown) return destinationUp
diff --git a/Server/src/main/content/minigame/blastfurnace/BlastFurnace.kt b/Server/src/main/content/minigame/blastfurnace/BlastFurnace.kt
index 5bbdedef1..7c8386596 100644
--- a/Server/src/main/content/minigame/blastfurnace/BlastFurnace.kt
+++ b/Server/src/main/content/minigame/blastfurnace/BlastFurnace.kt
@@ -166,8 +166,32 @@ class BlastFurnace : MapArea, PersistPlayer, TickListener {
maxAmt = maxAmt.coerceAtMost(amount).coerceAtLeast(0)
if (maxAmt == 0) continue
- if (removeItem(p, Item(oreId, maxAmt)))
+ if (removeItem(p, Item(oreId, maxAmt))) {
+ sendMessage(p, "You place ${maxAmt} ${Item(oreId).getName()} on the conveyor belt.")
+ addCoalSecondary(p, oreId, maxAmt) //The belt renders the most recent ore, so add the coal first
addOreToBelt(p, oreId, maxAmt)
+ }
+ }
+ }
+
+ //Snowscape feature: coal stored in the gold satchel is automatically added to the belt with ores that require coal.
+ fun addCoalSecondary (p: Player, oreId: Int, amount: Int) {
+ if (!inEquipmentOrInventory(p, Items.GOLD_SATCHEL_10881)) return
+
+ var coalAmount = 0
+ when(oreId) {
+ Items.IRON_ORE_440 -> coalAmount = amount
+ Items.MITHRIL_ORE_447 -> coalAmount = amount * 2
+ Items.ADAMANTITE_ORE_449 -> coalAmount = amount * 3
+ Items.RUNITE_ORE_451 -> coalAmount = amount * 4
+ else -> return
+ }
+
+ coalAmount = coalAmount.coerceAtMost(getOreContainer(p).getAvailableSpace(Items.COAL_453) - getAmountOnBelt(p, Items.COAL_453))
+
+ if (coalAmount > 0 && p.goldSatchel.remove(Item(Items.COAL_453, coalAmount))){
+ addOreToBelt(p, Items.COAL_453, coalAmount)
+ sendMessage(p, "You take ${coalAmount} Coal from your gold satchel and place it on the belt.")
}
}
diff --git a/Server/src/main/content/minigame/blastfurnace/BlastFurnaceListeners.kt b/Server/src/main/content/minigame/blastfurnace/BlastFurnaceListeners.kt
index deaaae199..627f57d77 100644
--- a/Server/src/main/content/minigame/blastfurnace/BlastFurnaceListeners.kt
+++ b/Server/src/main/content/minigame/blastfurnace/BlastFurnaceListeners.kt
@@ -6,6 +6,7 @@ import core.game.dialogue.DialogueFile
import core.game.dialogue.Topic
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
+import core.game.interaction.InteractionListeners
import core.game.node.entity.skill.Skills
import core.game.system.task.Pulse
import core.game.world.map.Location
@@ -128,6 +129,10 @@ class BlastFurnaceListeners : InteractionListener {
lockInteractions(player,1)
animate(player, 2441)
}
+ queueScript(player, 0) {
+ val node = getScenery(1948,4963,0)
+ InteractionListeners.run(node!!.getId(), SCENERY, "refuel", player, node)
+ }
} else {
sendMessage(player, "You need a spade to do this!")
}
@@ -163,6 +168,10 @@ class BlastFurnaceListeners : InteractionListener {
}
}
})
+ queueScript(player, 0) {
+ val node = getScenery(1950,4964,0)
+ InteractionListeners.run(node!!.getId(), SCENERY, "collect", player, node)
+ }
} else {
sendMessage(player,"You need some coke to do that!")
}
diff --git a/Server/src/main/content/minigame/bountyhunter/UnimplementedCraterArea.kt b/Server/src/main/content/minigame/bountyhunter/UnimplementedCraterArea.kt
new file mode 100644
index 000000000..60050f9c7
--- /dev/null
+++ b/Server/src/main/content/minigame/bountyhunter/UnimplementedCraterArea.kt
@@ -0,0 +1,75 @@
+package content.minigame.bountyhunter.handlers
+
+import core.api.*
+import core.game.node.entity.Entity
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.game.system.task.Pulse
+import core.game.world.map.Location
+import core.game.world.map.zone.ZoneBorders
+import org.rs09.consts.NPCs
+import core.game.dialogue.DialogueFile
+import core.game.world.GameWorld
+
+class UnimplementedCraterArea : MapArea {
+ override fun defineAreaBorders(): Array {
+ return arrayOf(
+ ZoneBorders(3200, 5632, 3391, 5823)
+ )
+ }
+
+ override fun areaEnter(entity: Entity) {
+ if (entity is Player && (
+ defineAreaBorders()[0].insideBorder(entity)
+ )) {
+ kickThemOut(entity)
+ }
+ }
+
+ private fun kickThemOut(entity: Player) {
+ val watchdog = NPC(NPCs.BANKER_6538)
+ watchdog.isNeverWalks = true
+ watchdog.isWalks = false
+ watchdog.location = entity.location
+ watchdog.init()
+ entity.lock()
+
+ runTask(watchdog, 1) {
+ watchdog.moveStep()
+ watchdog.face(entity)
+ openDialogue(entity, UnimplementedCraterDialogue(), watchdog)
+ GameWorld.Pulser.submit(object : Pulse() {
+ override fun pulse(): Boolean {
+ if (getAttribute(entity, "teleporting-away", false))
+ return true
+ if (!entity.isActive)
+ poofClear(watchdog)
+ if (entity.dialogueInterpreter.dialogue == null || entity.dialogueInterpreter.dialogue.file == null)
+ openDialogue(entity, UnimplementedCraterDialogue(), watchdog)
+ return !watchdog.isActive || !entity.isActive
+ }
+ })
+ }
+ }
+
+ class UnimplementedCraterDialogue : DialogueFile() {
+ override fun handle(componentID: Int, buttonID: Int) {
+ when(stage) {
+ 0 -> npcl(core.game.dialogue.FacialExpression.WORRIED, "This is unimplemented content, and you are now stuck. Don't worry, I'll get you out of here!").also { stage++ }
+ 1 -> {
+ end()
+ visualize(npc!!, 1818, 343)
+ sendGraphics(342, player!!.location)
+ setAttribute(player!!, "teleporting-away", true)
+ runTask(player!!, 3) {
+ poofClear(npc!!)
+ teleport(player!!, Location.create(3179, 3685, 0))
+ unlock(player!!)
+ removeAttribute(player!!, "teleporting-away")
+ }
+ }
+ }
+ }
+ }
+}
+
diff --git a/Server/src/main/content/minigame/castlewars/CastleWarsListeners.kt b/Server/src/main/content/minigame/castlewars/CastleWarsListeners.kt
index eed986625..24fdb55cc 100644
--- a/Server/src/main/content/minigame/castlewars/CastleWarsListeners.kt
+++ b/Server/src/main/content/minigame/castlewars/CastleWarsListeners.kt
@@ -18,7 +18,6 @@ import core.game.world.update.flag.context.Animation
import org.rs09.consts.Items
import org.rs09.consts.Sounds
import rs09.game.content.activity.castlewars.areas.CastleWarsWaitingArea
-import java.util.*
@Suppress("unused")
class CastleWarsListeners : InteractionListener {
diff --git a/Server/src/main/content/minigame/castlewars/areas/CastleWarsArea.kt b/Server/src/main/content/minigame/castlewars/areas/CastleWarsArea.kt
index ab1089bdc..c6b336c55 100644
--- a/Server/src/main/content/minigame/castlewars/areas/CastleWarsArea.kt
+++ b/Server/src/main/content/minigame/castlewars/areas/CastleWarsArea.kt
@@ -65,7 +65,6 @@ abstract class CastleWarsArea : MapArea, LogoutListener, InteractionListener {
defineAreaBorders().forEach { border ->
if (border.insideBorder(player)) {
sendMessage(player, "You can't remove your team's colours")
- // TODO: Equipping a cape or helmet causes issues
return@onUnequip false
}
}
diff --git a/Server/src/main/content/minigame/duel/DuelSession.java b/Server/src/main/content/minigame/duel/DuelSession.java
index e28c9bfab..51b4a6d9b 100644
--- a/Server/src/main/content/minigame/duel/DuelSession.java
+++ b/Server/src/main/content/minigame/duel/DuelSession.java
@@ -263,7 +263,7 @@ public final class DuelSession extends ComponentPlugin {
Player o = getOpposite(p);
o.getImpactHandler().setDisabledTicks(6);
o.teleport(RandomFunction.getRandomElement(DuelArea.RESPAWN_LOCATIONS));
- boolean victory = type == 0 || type == 2 || type == 1 && p.getImpactHandler().getImpactLog().containsKey(o);
+ boolean victory = type == 0 || type == 2 || type == 1 && p.getImpactHandler().getPlayerImpactLog().containsKey(o.getDetails().getUid());
fightState = 2;
p.removeExtension(DuelSession.class);
end();
diff --git a/Server/src/main/content/minigame/fishingtrawler/TrawlerLoot.kt b/Server/src/main/content/minigame/fishingtrawler/TrawlerLoot.kt
index 8511a1810..87ed06dbe 100644
--- a/Server/src/main/content/minigame/fishingtrawler/TrawlerLoot.kt
+++ b/Server/src/main/content/minigame/fishingtrawler/TrawlerLoot.kt
@@ -1,8 +1,12 @@
package content.minigame.fishingtrawler
import content.global.skill.fishing.Fish
+import core.api.Container
+import core.api.addItem
+import core.api.addItemOrDrop
import core.api.splitLines
import core.game.node.entity.player.Player
+import core.game.node.entity.player.link.IronmanMode
import core.game.node.item.GroundItemManager
import core.game.node.item.Item
import core.game.node.item.WeightedChanceItem
@@ -57,25 +61,34 @@ object TrawlerLoot {
@JvmStatic
fun addLootAndMessage(player: Player, fishLevel: Int, rolls: Int, skipJunk: Boolean) {
if (rolls < 1) return
- val frequencyList = listOf>(HashMap(), HashMap(), HashMap())
+ val frequencyList = listOf>(HashMap(), HashMap(), HashMap())
getLoot(fishLevel, rolls, skipJunk).forEach {
- if (!player.bank.add(it)) GroundItemManager.create(it, player)
when (it.id) {
- in trawlerFishIds -> frequencyList[0].merge(it.name, 1, Int::plus)
- in trawlerMisc -> frequencyList[1].merge(it.name, 1, Int::plus)
- in junkItems -> frequencyList[2].merge(it.name, 1, Int::plus)
+ in trawlerFishIds -> frequencyList[0].merge(it.id, 1, Int::plus)
+ in trawlerMisc -> frequencyList[1].merge(it.id, 1, Int::plus)
+ in junkItems -> frequencyList[2].merge(it.id, 1, Int::plus)
}
}
- player.sendMessage(colorize("%RYour reward has been sent to your bank:"))
- // Extract and join each frequency maps entries as string. Split based on length, then send each line as message.
+ // Extract and join each frequency map's entries as items
frequencyList.forEachIndexed { idx, fMap ->
if (fMap.isNotEmpty()) {
+ // Give reward
+ fMap.forEach {
+ if (player.ironmanManager.mode == IronmanMode.ULTIMATE || !addItem(player, it.key, it.value, Container.BANK)) {
+ val notedIdIfFish = if (idx == 0) it.key + 1 else it.key
+ addItemOrDrop(player, notedIdIfFish, it.value)
+ }
+ }
+ // Split based on length, then send each line as message
splitLines(
- fMap.entries.joinToString(prefix = if (idx == 0) "Fish: " else if (idx == 1) "Misc: " else "Junk: ", postfix = ".") { "${it.key}: ${it.value}" },
+ fMap.entries.joinToString(prefix = if (idx == 0) "Fish: " else if (idx == 1) "Misc: " else "Junk: ", postfix = ".") { "${Item(it.key).name}: ${it.value}" },
85
).forEach { player.sendMessage(it) }
}
}
+ if (player.ironmanManager.mode != IronmanMode.ULTIMATE) {
+ player.sendMessage(colorize("%RYour reward has been sent to your bank:"))
+ }
}
private val lootTable = arrayOf(
diff --git a/Server/src/main/content/minigame/mta/EnchantSpell.kt b/Server/src/main/content/minigame/mta/EnchantSpell.kt
index d6df04fe8..07cebf2a6 100644
--- a/Server/src/main/content/minigame/mta/EnchantSpell.kt
+++ b/Server/src/main/content/minigame/mta/EnchantSpell.kt
@@ -14,6 +14,7 @@ import core.game.world.update.flag.context.Animation
import core.game.world.update.flag.context.Graphics
import core.plugin.Plugin
import org.rs09.consts.Items
+import core.api.*
/**
* Represents the enchant spells.
@@ -46,11 +47,12 @@ class EnchantSpell : MagicSpell {
if (target !is Item || entity !is Player) {
return false
}
- entity.interfaceManager.setViewedTab(6)
+ //entity.interfaceManager.setViewedTab(6)
val enchanted = jewellery?.getOrDefault(target.id,null)
if (enchanted == null) {
entity.packetDispatch.sendMessage("You can't use this spell on this item.")
+ entity.interfaceManager.setViewedTab(6)
return false
}
if (!meetsRequirements(entity, true, true)) {
@@ -89,6 +91,13 @@ class EnchantSpell : MagicSpell {
content.minigame.mta.impl.EnchantingZone.ZONE.incrementPoints(entity, MTAType.ENCHANTERS.ordinal, pizazz)
}
}
+
+ // Snowscape: if there are more items to enchant, run the spell again
+ if (entity.inventory.containsAtLeastOneItem(target)) {
+ runTask(entity, 2){
+ castSpell(entity as Player, super.book, super.spellId, target)
+ }
+ }
return true
}
@@ -113,6 +122,7 @@ class EnchantSpell : MagicSpell {
Items.SAPPHIRE_NECKLACE_1656 to Item(Items.GAMES_NECKLACE8_3853),
Items.SAPPHIRE_AMULET_1694 to Item(Items.AMULET_OF_MAGIC_1727),
Items.SAPPHIRE_BRACELET_11072 to Item(Items.BRACELET_OF_CLAY_11074),
+ Items.BLUE_DRAGONHIDE_1751 to Item(Items.PLAIN_SATCHEL_10877),
//Begin MTA-specific enchantments
Items.CUBE_6899 to Item(Items.ORB_6902),
Items.CYLINDER_6898 to Item(Items.ORB_6902),
@@ -132,6 +142,7 @@ class EnchantSpell : MagicSpell {
Items.EMERALD_NECKLACE_1658 to Item(Items.BINDING_NECKLACE_5521),
Items.EMERALD_AMULET_1696 to Item(Items.AMULET_OF_DEFENCE_1729),
Items.EMERALD_BRACELET_11076 to Item(Items.CASTLEWAR_BRACE3_11079),
+ Items.GREEN_DRAGONHIDE_1753 to Item(Items.GREEN_SATCHEL_10878),
//Begin MTA-Specific Enchantments
Items.CUBE_6899 to Item(Items.ORB_6902),
Items.CYLINDER_6898 to Item(Items.ORB_6902),
@@ -151,6 +162,7 @@ class EnchantSpell : MagicSpell {
Items.RUBY_NECKLACE_1660 to Item(Items.DIGSITE_PENDANT_5_11194),
Items.RUBY_AMULET_1698 to Item(Items.AMULET_OF_STRENGTH_1725),
Items.RUBY_BRACELET_11085 to Item(Items.INOCULATION_BRACE_11088),
+ Items.RED_DRAGONHIDE_1749 to Item(Items.RED_SATCHEL_10879),
//Begin MTA-Specific Enchantments
Items.CUBE_6899 to Item(Items.ORB_6902),
Items.CYLINDER_6898 to Item(Items.ORB_6902),
@@ -169,6 +181,7 @@ class EnchantSpell : MagicSpell {
Items.DIAMOND_NECKLACE_1662 to Item(Items.PHOENIX_NECKLACE_11090),
Items.DIAMOND_AMULET_1700 to Item(Items.AMULET_OF_POWER_1731),
Items.DIAMOND_BRACELET_11092 to Item(Items.FORINTHRY_BRACE5_11095),
+ Items.DAGANNOTH_HIDE_6155 to Item(Items.GOLD_SATCHEL_10881),
//Begin MTA-Specific Enchantments
Items.CUBE_6899 to Item(Items.ORB_6902),
Items.CYLINDER_6898 to Item(Items.ORB_6902),
@@ -188,6 +201,7 @@ class EnchantSpell : MagicSpell {
Items.DRAGON_NECKLACE_1664 to Item(Items.SKILLS_NECKLACE4_11105),
Items.DRAGONSTONE_AMMY_1702 to Item(Items.AMULET_OF_GLORY4_1712),
Items.DRAGON_BRACELET_11115 to Item(Items.COMBAT_BRACELET4_11118),
+ Items.SUQAH_HIDE_9080 to Item(Items.RUNE_SATCHEL_10882),
//Begin MTA-Specific Enchantments
Items.CUBE_6899 to Item(Items.ORB_6902),
Items.CYLINDER_6898 to Item(Items.ORB_6902),
@@ -207,6 +221,7 @@ class EnchantSpell : MagicSpell {
Items.ONYX_NECKLACE_6577 to Item(Items.BERSERKER_NECKLACE_11128),
Items.ONYX_AMULET_6581 to Item(Items.AMULET_OF_FURY_6585),
Items.ONYX_BRACELET_11130 to Item(Items.REGEN_BRACELET_11133),
+ Items.BLACK_DRAGONHIDE_1747 to Item(Items.BLACK_SATCHEL_10880),
//Begin MTA-Specific Enchantments
Items.CUBE_6899 to Item(Items.ORB_6902),
Items.CYLINDER_6898 to Item(Items.ORB_6902),
diff --git a/Server/src/main/content/minigame/mta/MTAShop.java b/Server/src/main/content/minigame/mta/MTAShop.java
index beb64a1b2..d8db649a8 100644
--- a/Server/src/main/content/minigame/mta/MTAShop.java
+++ b/Server/src/main/content/minigame/mta/MTAShop.java
@@ -32,8 +32,8 @@ public class MTAShop {
/**
* The prices.
*/
- private static final int[][] PRICES = new int[][] { { 30, 30, 300, 30 }, { 60, 60, 600, 60 }, { 150, 200, 1500, 150 }, { 240, 240, 2400, 240 }, { 400, 450, 4000, 400 }, { 350, 400, 3000, 350 }, { 120, 120, 1200, 120 }, { 175, 225, 1500, 175 }, { 450, 500, 5000, 450 }, { 500, 550, 6000, 500 }, { 200, 300, 2000, 200 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 0, 0, 5, 0 }, { 0, 1, 5, 1 }, { 0, 1, 0, 1 }, { 2, 1, 20, 1 }, { 2, 0, 0, 0 }, { 2, 2, 25, 2 }, { 2, 2, 25, 2 } };
-
+ private static final int[][] PRICES = new int[][] { { 6, 6, 60, 6 }, { 12, 12, 120, 12 }, { 30, 40, 300, 30 }, { 48, 48, 480, 48 }, { 80, 90, 800, 80 }, { 70, 80, 600, 70 }, { 24, 24, 240, 24 }, { 35, 45, 300, 35 }, { 90, 100, 1000, 90 }, { 100, 110, 1200, 100 }, { 40, 60, 400, 40 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 0, 0, 5, 0 }, { 0, 1, 5, 1 }, { 0, 1, 0, 1 }, { 2, 1, 20, 1 }, { 2, 0, 0, 0 }, { 2, 2, 25, 2 }, { 2, 2, 25, 2 } };
+
/**
* The container.
*/
diff --git a/Server/src/main/content/minigame/mta/TelekineticGrabSpell.java b/Server/src/main/content/minigame/mta/TelekineticGrabSpell.java
index e2d496492..9c3174d1f 100644
--- a/Server/src/main/content/minigame/mta/TelekineticGrabSpell.java
+++ b/Server/src/main/content/minigame/mta/TelekineticGrabSpell.java
@@ -4,6 +4,7 @@ import content.minigame.mta.impl.TelekineticZone;
import core.game.interaction.SpecialGroundItems;
import core.game.node.Node;
import core.game.node.entity.Entity;
+import core.game.node.entity.combat.CombatSwingHandler;
import core.game.node.entity.combat.spell.SpellType;
import core.game.node.entity.combat.spell.SpellBlocks;
import core.game.node.entity.impl.Projectile;
@@ -24,7 +25,10 @@ import core.game.global.action.PickupHandler;
import core.game.world.GameWorld;
import org.rs09.consts.Sounds;
-import static core.api.ContentAPIKt.playAudio;
+import core.game.world.map.Location;
+import core.game.interaction.MovementPulse;
+
+import static core.api.ContentAPIKt.*;
/**
* Represents the telekenitic grab spell.
@@ -105,9 +109,22 @@ public final class TelekineticGrabSpell extends MagicSpell {
if (!canCast(entity, ground)) {
return false;
}
+
+ //Snowscape: pick up all items of the target type within a square centered on the target
+ int radius = 10;
+ for (int x = target.getLocation().getX() - radius; x <= target.getLocation().getX() + radius; x++) {
+ for (int y = target.getLocation().getY() - radius; y <= target.getLocation().getY() + radius; y++) {
+ GroundItem targetItem = GroundItemManager.get(target.getId(), new Location(x,y), (Player) entity);
+ if (targetItem != null) {
+ GameWorld.getPulser().submit(getGrabPulse(entity, targetItem));
+ visualize(entity, targetItem);
+ }
+ }
+ }
+
entity.lock(2);
- visualize(entity, target);
- GameWorld.getPulser().submit(getGrabPulse(entity, ground));
+ //visualize(entity, target);
+ //GameWorld.getPulser().submit(getGrabPulse(entity, ground));
return true;
}
@@ -148,11 +165,15 @@ public final class TelekineticGrabSpell extends MagicSpell {
}
playAudio(player, Sounds.VULNERABILITY_IMPACT_3008);
if (!teleZone) {
- player.getInventory().add(new Item(g.getId(), g.getAmount(), g.getCharge()));
+ if (hasSpaceFor(player, g)) {
+ player.getInventory().add(new Item(g.getId(), g.getAmount(), g.getCharge()));
+ } else {
+ return true;
+ }
} else {
TelekineticZone zone = TelekineticZone.getZone(player);
zone.moveStatue();
- player.lock(getDelay());
+ //player.lock(getDelay());
}
player.getPacketDispatch().sendPositionedGraphics(END_GRAPHIC, ground.getLocation());
}
@@ -176,8 +197,32 @@ public final class TelekineticGrabSpell extends MagicSpell {
}
if (entity instanceof Player) {
final Player player = (Player) entity;
- if (!player.getInventory().hasSpaceFor(((Item) item))) {
- player.getPacketDispatch().sendMessage("You don't have enough inventory space.");
+ if (!CombatSwingHandler.isProjectileClipped(player, item, false)) {
+ //Move to the target, stopping and recasting when within line of sight.
+ player.getPulseManager().run(new MovementPulse(player, item) {
+ @Override
+ public boolean pulse() {
+ castSpell(player, SpellBook.MODERN, SPELL_ID, item);
+ return true;
+ }
+
+ @Override
+ public boolean update() {
+ if (CombatSwingHandler.isProjectileClipped(player, item, false)) {
+ player.getWalkingQueue().reset();
+ pulse();
+ stop();
+ return true;
+ }
+ return super.update();
+ }
+ });
+
+ //sendMessage(player, "I can't reach that."); //TODO authentic message?
+ return false;
+ }
+ if (!hasSpaceFor(player, item)) {
+ sendMessage(player, "You don't have enough inventory space.");
return false;
}
if (!PickupHandler.canTake(player, item, 1)) {
diff --git a/Server/src/main/content/minigame/pestcontrol/PCLanderZone.java b/Server/src/main/content/minigame/pestcontrol/PCLanderZone.java
index 21cc7fce5..5ace493bb 100644
--- a/Server/src/main/content/minigame/pestcontrol/PCLanderZone.java
+++ b/Server/src/main/content/minigame/pestcontrol/PCLanderZone.java
@@ -80,7 +80,7 @@ public final class PCLanderZone extends MapZone {
for (PestControlActivityPlugin a : activities) {
if (a.getWaitingPlayers().remove(e)) {
if (logout) {
- e.getProperties().setTeleportLocation(a.getLeaveLocation());
+ e.setLocation(a.getLeaveLocation());
}
break;
}
diff --git a/Server/src/main/content/minigame/pestcontrol/PestControlActivityPlugin.java b/Server/src/main/content/minigame/pestcontrol/PestControlActivityPlugin.java
index f1fb680a0..396d22355 100644
--- a/Server/src/main/content/minigame/pestcontrol/PestControlActivityPlugin.java
+++ b/Server/src/main/content/minigame/pestcontrol/PestControlActivityPlugin.java
@@ -133,14 +133,14 @@ public final class PestControlActivityPlugin extends ActivityPlugin {
// type,
// default
} else if (success && p.getAttribute("pc_zeal", 0) >= 50) {
- int amount = type.ordinal() + 2;
+ int amount = type.ordinal() == 0 ? 10 : type.ordinal() == 1 ? 15 : 25;
p.getSavedData().getActivityData().increasePestPoints(amount);
Item coins = new Item(995, p.getProperties().getCurrentCombatLevel() * 10);
if (!p.getInventory().add(coins)) {
GroundItemManager.create(coins, p);
}
// default, type, name
- p.getDialogueInterpreter().open(3781, true, 1, type.ordinal() == 0 ? "two" : type.ordinal() == 1 ? "three" : "four");
+ p.getDialogueInterpreter().open(3781, true, 1, type.ordinal() == 0 ? "ten" : type.ordinal() == 1 ? "fifteen" : "twenty-five");
} else {
// default type, default
p.getDialogueInterpreter().open(3781, true, 2, true);
diff --git a/Server/src/main/content/minigame/pestcontrol/reward/PCRewardInterface.java b/Server/src/main/content/minigame/pestcontrol/reward/PCRewardInterface.java
index 9dc6aab16..b2896ea5b 100644
--- a/Server/src/main/content/minigame/pestcontrol/reward/PCRewardInterface.java
+++ b/Server/src/main/content/minigame/pestcontrol/reward/PCRewardInterface.java
@@ -15,6 +15,8 @@ import core.game.node.item.Item;
import core.plugin.Plugin;
import core.tools.RandomFunction;
+import static core.api.ContentAPIKt.getStatLevel;
+
/**
* Represents the pest control reward interface.
* @author 'Vexia
@@ -185,20 +187,36 @@ public final class PCRewardInterface extends ComponentPlugin {
}
/**
- * Method used to calculate the experience the player can recieve in this
- * skill.
+ * Method used to calculate the experience the player can receive in this skill.
* @param player the player.
* @return the experience as an integer.
*/
- public static double calculateExperience(final Player player, final int skillId) {
- int level = player.getSkills().getStaticLevel(skillId);
- double divideBy = 30;//17.5-33 ideal range
- if (skillId == Skills.PRAYER) {
- divideBy = 67;// 34-75 ideal range
- } else if (skillId == Skills.MAGIC || skillId == Skills.RANGE) {
- divideBy = 29;//19.1-31 ideal range
+ public static int calculateExperience(final Player player, final int skillId, final int points) {
+ int level = getStatLevel(player, skillId);
+ int N = 0;
+ switch (skillId) {
+ case Skills.PRAYER:
+ N = 18;
+ break;
+ case Skills.MAGIC:
+ case Skills.RANGE:
+ N = 32;
+ break;
+ case Skills.ATTACK:
+ case Skills.STRENGTH:
+ case Skills.DEFENCE:
+ case Skills.HITPOINTS:
+ N = 35;
+ break;
}
- return (int) ((level * level) / divideBy) * (player.getSkills().experienceMultiplier / 2);
+ int xpPerPoint = (int) ((double) (level * level) / 600) * N;
+ double bonus = 1.0;
+ if (points >= 100) {
+ bonus = 1.1;
+ } else if (points >= 10) {
+ bonus = 1.01;
+ }
+ return (int) (points * xpPerPoint * bonus) / 5;
}
/**
@@ -207,7 +225,7 @@ public final class PCRewardInterface extends ComponentPlugin {
* @param skillId the skillId.
* @return the string to send.
*/
- public static final String getSkillCondition(final Player player, final int skillId) {
+ public static String getSkillCondition(final Player player, final int skillId) {
if (player.getSkills().getStaticLevel(skillId) < 25) {
return RED + "Must reach level 25 first.";
}
@@ -221,7 +239,7 @@ public final class PCRewardInterface extends ComponentPlugin {
* @return the string.
*/
public static String getSkillXp(final Player player, int skillId) {
- return Skills.SKILL_NAME[skillId] + " - " + (int) calculateExperience(player, skillId) + " xp";
+ return Skills.SKILL_NAME[skillId] + " - " + calculateExperience(player, skillId, 1) + " xp";
}
/**
@@ -229,7 +247,7 @@ public final class PCRewardInterface extends ComponentPlugin {
* @param skill the skill index.
* @return the skill child id.
*/
- public static final int getSkillChild(final int skill) {
+ public static int getSkillChild(final int skill) {
return SKILL_HEADER[skill];
}
@@ -264,7 +282,7 @@ public final class PCRewardInterface extends ComponentPlugin {
* Method used to confirm the reward.
* @param player the player.
*/
- public final void confirm(final Player player) {
+ public void confirm(final Player player) {
if (!hasReward(player)) {
player.getPacketDispatch().sendMessage("Please choose a reward.");
return;
@@ -281,9 +299,9 @@ public final class PCRewardInterface extends ComponentPlugin {
if (player.getSavedData().getActivityData().getPestPoints() >= points) {
player.getSavedData().getActivityData().decreasePestPoints(points);
if (reward.isSkillReward()) {
- final double experience = ((int) calculateExperience(player, reward.getSkill()) * points);
+ int experience = calculateExperience(player, reward.getSkill(), points);
player.getSkills().addExperience(reward.getSkill(), experience);
- message = "The Void Knight has granted you " + (int) (experience * player.getSkills().experienceMultiplier) + " " + reward.getName() + ".";
+ message = "The Void Knight has granted you " + experience + " " + reward.getName() + ".";
} else {
if (!reward.checkItemRequirement(player, option)) {
return;
diff --git a/Server/src/main/content/minigame/pyramidplunder/PharaohSceptre.kt b/Server/src/main/content/minigame/pyramidplunder/PharaohSceptre.kt
index b54f8dd36..a295a8795 100644
--- a/Server/src/main/content/minigame/pyramidplunder/PharaohSceptre.kt
+++ b/Server/src/main/content/minigame/pyramidplunder/PharaohSceptre.kt
@@ -13,6 +13,7 @@ import org.rs09.consts.Items
import core.game.dialogue.DialogueFile
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
+import content.data.Quests
/**
* Adds functionality to the pharoah's scepter
@@ -23,7 +24,7 @@ class PharaohSceptre : InteractionListener {
val SCEPTRES = intArrayOf(Items.PHARAOHS_SCEPTRE_9044, Items.PHARAOHS_SCEPTRE_9046, Items.PHARAOHS_SCEPTRE_9048, Items.PHARAOHS_SCEPTRE_9050)
on(SCEPTRES, IntType.ITEM, "teleport", "operate"){ player, node ->
- if (!hasRequirement(player, "Icthlarin's Little Helper"))
+ if (!hasRequirement(player, Quests.ICTHLARINS_LITTLE_HELPER))
return@on true
val sceptre = node.asItem()
diff --git a/Server/src/main/content/minigame/sorceress/GardenObjectsPlugin.kt b/Server/src/main/content/minigame/sorceress/GardenObjectsPlugin.kt
index 4739bf5c2..53eb47fa9 100644
--- a/Server/src/main/content/minigame/sorceress/GardenObjectsPlugin.kt
+++ b/Server/src/main/content/minigame/sorceress/GardenObjectsPlugin.kt
@@ -23,6 +23,7 @@ import core.game.interaction.InteractionListener
import core.game.interaction.IntType
import core.game.world.GameWorld
import core.plugin.ClassScanner
+import content.data.Quests
class GardenObjectsPlugin : InteractionListener {
@@ -503,7 +504,7 @@ class GardenObjectsPlugin : InteractionListener {
override fun open(vararg args: Any): Boolean {
npc = args[0] as NPC
- quest = player.questRepository.getQuest("Prince Ali Rescue")
+ quest = player.questRepository.getQuest(Quests.PRINCE_ALI_RESCUE)
when (quest!!.getStage(player)) {
100 -> {
interpreter.sendDialogues(player, null, "I'd like to talk about sq'irks.")
diff --git a/Server/src/main/content/minigame/sorceress/SorceressApprenticeDialogue.java b/Server/src/main/content/minigame/sorceress/SorceressApprenticeDialogue.java
index 4e6be91c4..bc3aa169b 100644
--- a/Server/src/main/content/minigame/sorceress/SorceressApprenticeDialogue.java
+++ b/Server/src/main/content/minigame/sorceress/SorceressApprenticeDialogue.java
@@ -11,6 +11,7 @@ import core.game.world.map.Location;
import core.game.world.update.flag.context.Graphics;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
/**
* Dialogue for Sorceress Apprentice
@@ -238,7 +239,7 @@ public class SorceressApprenticeDialogue extends DialoguePlugin {
}
public static void teleport(final NPC npc, final Player player) {
- if (!hasRequirement(player, "Prince Ali Rescue"))
+ if (!hasRequirement(player, Quests.PRINCE_ALI_RESCUE))
return;
npc.faceTemporary(player, 4);
npc.graphics(new Graphics(108));
diff --git a/Server/src/main/content/minigame/vinesweeper/Vinesweeper.kt b/Server/src/main/content/minigame/vinesweeper/Vinesweeper.kt
index 031d86d02..9fe119605 100644
--- a/Server/src/main/content/minigame/vinesweeper/Vinesweeper.kt
+++ b/Server/src/main/content/minigame/vinesweeper/Vinesweeper.kt
@@ -3,8 +3,21 @@ package content.minigame.vinesweeper
import BlinkinDialogue
import FarmerDialogue.Companion.FARMER_FLAG_LINES
import WinkinDialogue
+import content.minigame.vinesweeper.Vinesweeper.Companion.FARMERS
+import content.minigame.vinesweeper.Vinesweeper.Companion.FARMER_CLEAR_RADIUS
+import content.minigame.vinesweeper.Vinesweeper.Companion.HOLES
+import content.minigame.vinesweeper.Vinesweeper.Companion.NUMBERS
+import content.minigame.vinesweeper.Vinesweeper.Companion.RABBITS
+import content.minigame.vinesweeper.Vinesweeper.Companion.SEED_LOCS
+import content.minigame.vinesweeper.Vinesweeper.Companion.populateSeeds
+import content.minigame.vinesweeper.Vinesweeper.Companion.scheduleNPCs
+import content.minigame.vinesweeper.Vinesweeper.Companion.sendPoints
import core.api.*
+import core.cache.def.impl.ItemDefinition
import core.game.component.Component
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.interaction.InterfaceListener
import core.game.interaction.MovementPulse
import core.game.node.entity.Entity
import core.game.node.entity.combat.DeathTask
@@ -18,6 +31,8 @@ import core.game.node.item.Item
import core.game.node.scenery.Scenery
import core.game.node.scenery.SceneryBuilder
import core.game.system.task.Pulse
+import core.game.world.GameWorld
+import core.game.world.GameWorld.ticks
import core.game.world.map.Location
import core.game.world.map.RegionManager
import core.game.world.map.zone.ZoneBorders
@@ -25,21 +40,8 @@ import core.game.world.update.flag.context.Animation
import core.game.world.update.flag.context.Graphics
import core.plugin.Initializable
import core.tools.RandomFunction
-import content.minigame.vinesweeper.Vinesweeper.Companion.FARMERS
-import content.minigame.vinesweeper.Vinesweeper.Companion.FARMER_CLEAR_RADIUS
-import content.minigame.vinesweeper.Vinesweeper.Companion.HOLES
-import content.minigame.vinesweeper.Vinesweeper.Companion.NUMBERS
-import content.minigame.vinesweeper.Vinesweeper.Companion.RABBITS
-import content.minigame.vinesweeper.Vinesweeper.Companion.SEED_LOCS
-import content.minigame.vinesweeper.Vinesweeper.Companion.populateSeeds
-import content.minigame.vinesweeper.Vinesweeper.Companion.scheduleNPCs
-import content.minigame.vinesweeper.Vinesweeper.Companion.sendPoints
-import core.game.interaction.InteractionListener
-import core.game.interaction.IntType
-import core.game.interaction.InterfaceListener
-import core.game.world.GameWorld
-import core.game.world.GameWorld.ticks
import org.rs09.consts.*
+import kotlin.math.max
import kotlin.math.min
import org.rs09.consts.Graphics as Gfx
import org.rs09.consts.Scenery as Sceneries
@@ -83,7 +85,12 @@ class Vinesweeper : InteractionListener, InterfaceListener, MapArea {
on(Sceneries.PORTAL_29534, IntType.SCENERY, "enter") { player, _ ->
val x = player.getAttribute("vinesweeper:return-tele:x", 3052)
val y = player.getAttribute("vinesweeper:return-tele:y", 3304)
- teleport(player, Location(x, y))
+ val loc = Location(x, y)
+ if (ZoneBorders.forRegion(11060).insideBorder(loc) && !ItemDefinition.canEnterEntrana(player)) {
+ sendMessage(player, "The power of Saradomin prevents you from taking armour or weaponry to Entrana.");
+ return@on true
+ }
+ teleport(player, loc)
return@on true
}
on(SIGNS, IntType.SCENERY, "read") { player, node ->
@@ -211,7 +218,7 @@ class Vinesweeper : InteractionListener, InterfaceListener, MapArea {
player.packetDispatch.sendInterfaceConfig(686, 60, true)
val level = player.skills.getStaticLevel(Skills.FARMING)
// TODO: more precise formula
- val points_per_xp = if (level < 40) { 2.0*(40.0 - level.toDouble())/10.0 } else { 1.0 }
+ val points_per_xp = if (level < 40) { max(1.0, 2.0*(40.0 - level.toDouble())/10.0) } else { 1.0 }
val points = player.getAttribute("vinesweeper:points", 0)
val xp = points / points_per_xp
player.skills.addExperience(Skills.FARMING, xp)
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/AchiettiesDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/AchiettiesDialogue.kt
deleted file mode 100644
index a4585b87e..000000000
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/AchiettiesDialogue.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-import core.api.openDialogue
-import core.game.dialogue.DialogueBuilder
-import core.game.dialogue.DialogueBuilderFile
-import core.game.dialogue.DialoguePlugin
-import core.game.dialogue.FacialExpression
-import core.game.node.entity.player.Player
-import core.plugin.Initializable
-import org.rs09.consts.NPCs
-
-/**
- * @author qmqz
- * @author Trident101
- */
-
-@Initializable
-class AchiettiesDialogue(player: Player? = null) : DialoguePlugin(player){
-
- override fun handle(interfaceId: Int, buttonId: Int): Boolean {
- openDialogue(player, AchiettiesDialogueFile(), npc)
- return true
- }
-
- override fun newInstance(player: Player?): DialoguePlugin {
- return AchiettiesDialogue(player)
- }
-
- override fun getIds(): IntArray {
- return intArrayOf(NPCs.ACHIETTIES_796)
- }
-}
-
-class AchiettiesDialogueFile : DialogueBuilderFile() {
-
- override fun create(b: DialogueBuilder) {
- b.defaultDialogue().npcl(FacialExpression.FRIENDLY,
- "Greetings. Welcome to the Heroes' Guild."
- )
- }
-}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/BernaldDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/BernaldDialogue.kt
index 7984ceed8..2e1ca6b44 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/BernaldDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/BernaldDialogue.kt
@@ -20,8 +20,8 @@ class BernaldDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
// // Garden of Tranquility has not been implemented.
-// if(hasRequirement(player!!, "Garden of Tranquility")) {
-// if (isQuestComplete(player!!, DeathPlateau.questName)) {
+// if(hasRequirement(player!!, Quests.GARDEN_OF_TRANQUILITY)) {
+// if (isQuestComplete(player!!, Quests.DEATH_PLATEAU)) {
// when (stage) {
// 0 -> playerl(FacialExpression.FRIENDLY, "How are your grapes coming along?").also { stage++ }
// 1 -> npc(FacialExpression.FRIENDLY, "Marvellous, thanks to your help, " + player.username + "!").also { stage = END_DIALOGUE }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/BreocaDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/BreocaDialogue.kt
index ca982ff6c..8a885cd94 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/BreocaDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/BreocaDialogue.kt
@@ -9,6 +9,7 @@ import core.plugin.Initializable
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
import org.rs09.consts.NPCs
+import content.data.Quests
/**
* Breoca Dialogue
@@ -18,7 +19,7 @@ import org.rs09.consts.NPCs
@Initializable
class BreocaDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int) : Boolean {
- if(isQuestComplete(player!!, "Death Plateau")) {
+ if(isQuestComplete(player!!, Quests.DEATH_PLATEAU)) {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hi!").also { stage = (1..3).toIntArray().random() }
1 -> npcl(FacialExpression.HAPPY, "I heard about what you did, thank you!").also { stage = END_DIALOGUE }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/CeolburgDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/CeolburgDialogue.kt
index 6eae6fa18..006641ebd 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/CeolburgDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/CeolburgDialogue.kt
@@ -9,6 +9,7 @@ import core.plugin.Initializable
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
import org.rs09.consts.NPCs
+import content.data.Quests
/**
* Ceolburg Dialogue
@@ -18,7 +19,7 @@ import org.rs09.consts.NPCs
@Initializable
class CeolburgDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int) : Boolean {
- if(isQuestComplete(player!!, "Death Plateau")) {
+ if(isQuestComplete(player!!, Quests.DEATH_PLATEAU)) {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hi!").also { stage = (1..3).toIntArray().random() }
1 -> npcl(FacialExpression.HAPPY, "I heard about what you did, thank you!").also { stage = END_DIALOGUE }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/DenulthDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/DenulthDialogue.kt
index 430da5566..2724f9c19 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/DenulthDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/DenulthDialogue.kt
@@ -1,8 +1,7 @@
package content.region.asgarnia.burthorpe.dialogue
-import content.region.asgarnia.burthorpe.quest.deathplateau.DeathPlateau
+import content.data.Quests
import content.region.asgarnia.burthorpe.quest.deathplateau.DenulthDialogueFile
-import content.region.asgarnia.burthorpe.quest.trollstronghold.TrollStronghold
import core.api.isQuestComplete
import core.api.isQuestInProgress
import core.api.openDialogue
@@ -25,7 +24,7 @@ class DenulthDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
// When Troll Stronghold is complete
- if (isQuestComplete(player!!, TrollStronghold.questName)) {
+ if (isQuestComplete(player!!, Quests.TROLL_STRONGHOLD)) {
when(stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hello!").also { stage++ }
1 -> npcl(FacialExpression.HAPPY, "Welcome back friend!").also { stage++ }
@@ -49,13 +48,13 @@ class DenulthDialogue(player: Player? = null) : DialoguePlugin(player) {
}
// Troll Stronghold in progress
- if (isQuestInProgress(player!!, TrollStronghold.questName, 1, 99)) {
+ if (isQuestInProgress(player!!, Quests.TROLL_STRONGHOLD, 1, 99)) {
openDialogue(player!!, content.region.asgarnia.burthorpe.quest.trollstronghold.DenulthDialogueFile(), npc)
return true
}
// When Death Plateau is completed, start Troll Stronghold
- if (isQuestComplete(player!!, DeathPlateau.questName)) {
+ if (isQuestComplete(player!!, Quests.DEATH_PLATEAU)) {
when(stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hello!").also { stage++ }
1 -> npcl(FacialExpression.HAPPY, "Welcome back friend!").also { stage++ }
@@ -78,7 +77,7 @@ class DenulthDialogue(player: Player? = null) : DialoguePlugin(player) {
)
16 -> npcl(FacialExpression.HAPPY, "God speed friend! I would send some of my men with you, but none of them are brave enough to follow.").also {
stage = END_DIALOGUE
- setQuestStage(player!!, TrollStronghold.questName, 1)
+ setQuestStage(player!!, Quests.TROLL_STRONGHOLD, 1)
}
20 -> npcl(FacialExpression.ANGRY, "You are right citizen. The White Knights have taken advantage of the old and weak king, they control most of Asgarnia, including Falador. However they do not control Burthorpe!").also { stage++ }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/DunstanDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/DunstanDialogue.kt
index 6346fc9f6..73759083a 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/DunstanDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/DunstanDialogue.kt
@@ -1,15 +1,16 @@
package content.region.asgarnia.burthorpe.dialogue
-import content.region.asgarnia.burthorpe.quest.deathplateau.DeathPlateau
-import content.region.asgarnia.burthorpe.quest.trollstronghold.TrollStronghold
+import content.data.Quests
import core.api.*
import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
import core.game.dialogue.Topic
import core.game.node.entity.player.Player
+import core.game.node.item.Item
import core.plugin.Initializable
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
+import org.rs09.consts.Items
import org.rs09.consts.NPCs
/**
@@ -24,11 +25,12 @@ class DunstanDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
// When Troll Stronghold is complete
- if (isQuestComplete(player!!, TrollStronghold.questName)) {
+ if (isQuestComplete(player!!, Quests.TROLL_STRONGHOLD)) {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hi!").also { stage++ }
1 -> npcl(FacialExpression.FRIENDLY, "Hi! What can I do for you?").also { stage++ }
2 -> showTopics(
+ Topic(FacialExpression.THINKING, "Can you put some spikes on my Climbing boots?", 30),
Topic(FacialExpression.THINKING, "Is it OK if I use your anvil?", 10),
Topic(FacialExpression.FRIENDLY, "Nothing, thanks.", END_DIALOGUE),
Topic(FacialExpression.FRIENDLY, "How is your son getting on?", 15),
@@ -42,22 +44,54 @@ class DunstanDialogue(player: Player? = null) : DialoguePlugin(player) {
15 -> npcl(FacialExpression.FRIENDLY, "He is getting on fine! He has just been promoted to Sergeant! I'm really proud of him!").also { stage++ }
16 -> playerl(FacialExpression.FRIENDLY, "I'm happy for you!").also { stage++ }
17 -> npcl(FacialExpression.FRIENDLY, "Anything else before I get on with my work?").also { stage = 2 }
+ 30 -> playerl(FacialExpression.FRIENDLY, "Can you put some spikes on my Climbing boots?").also { stage++ }
+ 31 -> npcl(FacialExpression.NEUTRAL,"For you, no problem.").also { stage++ }
+ 32 -> npc(FacialExpression.THINKING, "Do you realise that you can only use the Climbing", "boots right now? The Spiked boots can only be used in", "the Icelands but no ones been able to get there for", "years!").also { stage++ }
+ 33 -> showTopics(
+ Topic(FacialExpression.NEUTRAL, "Yes, but I still want them.", 40, true),
+ Topic(FacialExpression.NEUTRAL, "Oh OK, I'll leave them thanks.", 43),
+ )
+ 40 -> {
+ if (inInventory(player!!, Items.CLIMBING_BOOTS_3105) && inInventory(player!!, Items.IRON_BAR_2351)) {
+ sendDoubleItemDialogue(player!!, Items.IRON_BAR_2351, Items.CLIMBING_BOOTS_3105, "You give Dunstan an Iron bar and the climbing boots.")
+ sendMessage(player!!, "You give Dunstan an Iron bar and the climbing boots.")
+ if (removeItem(player!!, Item(Items.CLIMBING_BOOTS_3105)) && removeItem(player!!, Item(Items.IRON_BAR_2351))) {
+ addItemOrDrop(player!!, Items.SPIKED_BOOTS_3107)
+ stage++
+ } else {
+ stage = END_DIALOGUE
+ }
+ } else if (inInventory(player!!, Items.CLIMBING_BOOTS_3105)){
+ npcl(FacialExpression.NEUTRAL,"Sorry, I'll need an iron bar to make the spikes.")
+ stage = 2
+ } else {
+ playerl(FacialExpression.NEUTRAL,"I don't have them on me.")
+ stage = 2
+ }
+ }
+ 41 -> sendItemDialogue(player!!, Items.SPIKED_BOOTS_3107, "Dunstan has given you the spiked boots.").also { stage++
+ sendMessage(player!!, "Dunstan has given you the spiked boots.")
+ }
+ 43 -> npcl(FacialExpression.FRIENDLY, "Anything else before I get on with my work?").also {
+ stage = 2
+ }
}
return true
}
// Troll Stronghold in progress
- if (isQuestInProgress(player!!, TrollStronghold.questName, 1, 99)) {
+ if (isQuestInProgress(player!!, Quests.TROLL_STRONGHOLD, 1, 99)) {
openDialogue(player!!, content.region.asgarnia.burthorpe.quest.trollstronghold.DunstanDialogueFile(), npc)
return true
}
// When Death Plateau is complete
- if (isQuestComplete(player!!, DeathPlateau.questName)) {
+ if (isQuestComplete(player!!, Quests.DEATH_PLATEAU)) {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hi!").also { stage++ }
1 -> npcl(FacialExpression.FRIENDLY, "Hi! What can I do for you?").also { stage++ }
2 -> showTopics(
+ Topic(FacialExpression.THINKING, "Can you put some spikes on my Climbing boots?", 30),
Topic(FacialExpression.THINKING, "Is it OK if I use your anvil?", 10),
Topic(FacialExpression.FRIENDLY, "Nothing, thanks.", END_DIALOGUE),
Topic(FacialExpression.FRIENDLY, "How is your son getting on?", 15),
@@ -70,12 +104,43 @@ class DunstanDialogue(player: Player? = null) : DialoguePlugin(player) {
15 -> npcl(FacialExpression.SAD, "He was captured by those cursed trolls! I don't know what to do. Even the imperial guard are too afraid to go rescue him.").also { stage++ }
16 -> playerl(FacialExpression.ASKING, "What happened?").also { stage++ }
17 -> npcl(FacialExpression.SAD, "Talk to Denulth, he can tell you all about it. Anything else before I get on with my work?").also { stage = 2 }
+ 30 -> npcl(FacialExpression.NEUTRAL,"For you, no problem.").also { stage++ }
+ 31 -> npc(FacialExpression.THINKING, "Do you realise that you can only use the Climbing", "boots right now? The Spiked boots can only be used in", "the Icelands but no ones been able to get there for", "years!").also { stage++ }
+ 32 -> showTopics(
+ Topic(FacialExpression.NEUTRAL, "Yes, but I still want them.", 40, true),
+ Topic(FacialExpression.NEUTRAL, "Oh OK, I'll leave them thanks.", 43),
+ )
+ 40 -> {
+ if (inInventory(player!!, Items.CLIMBING_BOOTS_3105) && inInventory(player!!, Items.IRON_BAR_2351)) {
+ sendDoubleItemDialogue(player!!, Items.IRON_BAR_2351, Items.CLIMBING_BOOTS_3105, "You give Dunstan an Iron bar and the climbing boots.")
+ sendMessage(player!!, "You give Dunstan an Iron bar and the climbing boots.")
+ if (removeItem(player!!, Item(Items.CLIMBING_BOOTS_3105)) && removeItem(player!!, Item(Items.IRON_BAR_2351))) {
+ addItemOrDrop(player!!, Items.SPIKED_BOOTS_3107)
+ stage++
+ } else {
+ stage = END_DIALOGUE
+ }
+ } else if (inInventory(player!!, Items.CLIMBING_BOOTS_3105)){
+ npcl(FacialExpression.NEUTRAL,"Sorry, I'll need an iron bar to make the spikes.")
+ stage = 2
+ } else {
+ playerl(FacialExpression.NEUTRAL,"I don't have them on me.")
+ stage = 2
+ }
+ }
+ 41 -> sendItemDialogue(player!!, Items.SPIKED_BOOTS_3107, "Dunstan has given you the spiked boots.").also {
+ stage = 43
+ sendMessage(player!!, "Dunstan has given you the spiked boots.")
+ }
+ 43 -> npcl(FacialExpression.FRIENDLY, "Anything else before I get on with my work?").also {
+ stage = 2
+ }
}
return true
}
// Death Plateau in progress
- if (isQuestInProgress(player!!, DeathPlateau.questName, 21, 24)) {
+ if (isQuestInProgress(player!!, Quests.DEATH_PLATEAU, 21, 24)) {
// Call the dialogue file for Dunstan from the deathplateau quest folder.
openDialogue(player!!, content.region.asgarnia.burthorpe.quest.deathplateau.DunstanDialogueFile(), npc)
return true
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/EohricDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/EohricDialogue.kt
index e9ccfc492..4fb041be6 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/EohricDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/EohricDialogue.kt
@@ -1,6 +1,6 @@
package content.region.asgarnia.burthorpe.dialogue
-import content.region.asgarnia.burthorpe.quest.deathplateau.DeathPlateau
+import content.data.Quests
import content.region.asgarnia.burthorpe.quest.deathplateau.EohricDialogueFile
import core.api.getQuestStage
import core.api.openDialogue
@@ -19,7 +19,7 @@ import org.rs09.consts.NPCs
@Initializable
class EohricDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
- if (getQuestStage(player!!, DeathPlateau.questName) >= 5) {
+ if (getQuestStage(player!!, Quests.DEATH_PLATEAU) >= 5) {
// Call the dialogue file for Eohric from the deathplateau quest folder.
openDialogue(player!!, EohricDialogueFile(), npc)
return true
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HaroldDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HaroldDialogue.kt
index b98a66184..62d510ac1 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HaroldDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HaroldDialogue.kt
@@ -1,14 +1,12 @@
package content.region.asgarnia.burthorpe.dialogue
-import content.region.asgarnia.burthorpe.quest.deathplateau.DeathPlateau
+import content.data.Quests
import content.region.asgarnia.burthorpe.quest.deathplateau.HaroldDialogueFile
import core.api.*
import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
-import core.game.node.entity.npc.NPC
import core.game.node.entity.player.Player
import core.game.world.update.flag.context.Animation
-import core.game.world.update.flag.context.Graphics
import core.plugin.Initializable
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
@@ -23,7 +21,7 @@ import org.rs09.consts.NPCs
@Initializable
class HaroldDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
- if (isQuestInProgress(player!!, DeathPlateau.questName, 10, 29)) {
+ if (isQuestInProgress(player!!, Quests.DEATH_PLATEAU, 10, 29)) {
// Call the dialogue file for Harold from the deathplateau quest folder.
openDialogue(player!!, HaroldDialogueFile(), npc)
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HelemosDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HelemosDialogue.kt
new file mode 100644
index 000000000..aede4cd5f
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HelemosDialogue.kt
@@ -0,0 +1,47 @@
+package content.region.asgarnia.burthorpe.dialogue
+
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.NPCs
+
+@Initializable
+class HelemosDialogue(player: Player? = null) : DialoguePlugin(player){
+
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, HelemosDialogueFile(), npc)
+ return true
+ }
+
+ override fun newInstance(player: Player?): DialoguePlugin {
+ return HelemosDialogue(player)
+ }
+
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.HELEMOS_797)
+ }
+}
+class HelemosDialogueFile : DialogueBuilderFile() {
+
+ override fun create(b: DialogueBuilder) {
+
+ b.onPredicate { _ -> true }
+ .npc("Welcome to the Heroes' Guild!")
+ .options()
+ .let { optionBuilder ->
+ optionBuilder.option("So do you sell anything here?")
+ .playerl("So do you sell anything good here?")
+ .npcl("Why yes! We DO run an exclusive shop for our members!")
+ .endWith { _, player ->
+ openNpcShop(player, NPCs.HELEMOS_797)
+ end()
+ }
+ optionBuilder.option_playerl("So what can I do here?")
+ .npcl("Look around... there are all sorts of things to keep our guild members entertained!")
+ .end()
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HildDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HildDialogue.kt
index b8361c40a..6b0116cd3 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HildDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HildDialogue.kt
@@ -9,6 +9,7 @@ import core.plugin.Initializable
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
import org.rs09.consts.NPCs
+import content.data.Quests
/**
* Hild Dialogue
@@ -18,7 +19,7 @@ import org.rs09.consts.NPCs
@Initializable
class HildDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int) : Boolean {
- if(isQuestComplete(player!!, "Death Plateau")) {
+ if(isQuestComplete(player!!, Quests.DEATH_PLATEAU)) {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hi!").also { stage = (1..3).toIntArray().random() }
1 -> npcl(FacialExpression.HAPPY, "I heard about what you did, thank you!").also { stage = END_DIALOGUE }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HygdDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HygdDialogue.kt
index 2a7f3f280..3e3b73b90 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HygdDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/HygdDialogue.kt
@@ -9,6 +9,7 @@ import core.plugin.Initializable
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
import org.rs09.consts.NPCs
+import content.data.Quests
/**
* Hygd Dialogue
@@ -18,7 +19,7 @@ import org.rs09.consts.NPCs
@Initializable
class HygdDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int) : Boolean {
- if(isQuestComplete(player!!, "Death Plateau")) {
+ if(isQuestComplete(player!!, Quests.DEATH_PLATEAU)) {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hi!").also { stage = (1..3).toIntArray().random() }
1 -> npcl(FacialExpression.HAPPY, "I heard about what you did, thank you!").also { stage = END_DIALOGUE }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/OcgaDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/OcgaDialogue.kt
index 514035edc..0606c4542 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/OcgaDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/OcgaDialogue.kt
@@ -9,6 +9,7 @@ import core.plugin.Initializable
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
import org.rs09.consts.NPCs
+import content.data.Quests
/**
@@ -19,7 +20,7 @@ import org.rs09.consts.NPCs
@Initializable
class OcgaDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int) : Boolean {
- if(isQuestComplete(player!!, "Death Plateau")) {
+ if(isQuestComplete(player!!, Quests.DEATH_PLATEAU)) {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hi!").also { stage = (1..3).toIntArray().random() }
1 -> npcl(FacialExpression.HAPPY, "I heard about what you did, thank you!").also { stage = END_DIALOGUE }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/PendaDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/PendaDialogue.kt
index 4cd42579c..0570a0d24 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/PendaDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/PendaDialogue.kt
@@ -9,6 +9,7 @@ import core.plugin.Initializable
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
import org.rs09.consts.NPCs
+import content.data.Quests
/**
* Penda Dialogue
@@ -18,7 +19,7 @@ import org.rs09.consts.NPCs
@Initializable
class PendaDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int) : Boolean {
- if(isQuestComplete(player!!, "Death Plateau")) {
+ if(isQuestComplete(player!!, Quests.DEATH_PLATEAU)) {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hi!").also { stage = (1..5).toIntArray().random() }
1 -> npcl(FacialExpression.HAPPY, "I heard about what you did, thank you!").also { stage = END_DIALOGUE }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/UnferthDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/UnferthDialogue.kt
index 84b26124e..5c0a23214 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/dialogue/UnferthDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/dialogue/UnferthDialogue.kt
@@ -8,9 +8,8 @@ import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
import core.game.node.entity.player.Player
import core.plugin.Initializable
-import core.tools.END_DIALOGUE
-import core.tools.START_DIALOGUE
import org.rs09.consts.NPCs
+import content.data.Quests
/**
* Unferth Dialogue
@@ -37,7 +36,7 @@ class UnferthDialogue(player: Player? = null) : DialoguePlugin(player) {
class UnferthDialogueFile : DialogueBuilderFile() {
override fun create(b: DialogueBuilder) {
- b.onPredicate { player -> isQuestComplete(player, "A Tail of Two Cats") }.playerl(
+ b.onPredicate { player -> isQuestComplete(player, Quests.A_TAIL_OF_TWO_CATS) }.playerl(
FacialExpression.FRIENDLY, "Hi Unferth. How are you doing?"
).npcl(
FacialExpression.GUILTY, "It's just not the same without Bob around."
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/handlers/HeroGuildPlugin.java b/Server/src/main/content/region/asgarnia/burthorpe/handlers/HeroGuildPlugin.java
index 5c3900341..cc4e8fb62 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/handlers/HeroGuildPlugin.java
+++ b/Server/src/main/content/region/asgarnia/burthorpe/handlers/HeroGuildPlugin.java
@@ -18,6 +18,7 @@ import core.plugin.Initializable;
import core.plugin.ClassScanner;
import static core.api.ContentAPIKt.hasRequirement;
+import content.data.Quests;
/**
* Represents the hero guild.
@@ -42,7 +43,7 @@ public final class HeroGuildPlugin extends OptionHandler {
switch (id) {
case 2624:
case 2625:
- if (!hasRequirement(player, "Heroes' Quest"))
+ if (!hasRequirement(player, Quests.HEROES_QUEST))
return true;
DoorActionHandler.handleAutowalkDoor(player, (Scenery) node);
break;
@@ -82,15 +83,15 @@ public final class HeroGuildPlugin extends OptionHandler {
@Override
public boolean handle(NodeUsageEvent event) {
final Player player = event.getPlayer();
- if (!hasRequirement(player, "Heroes' Quest"))
+ if (!hasRequirement(player, Quests.HEROES_QUEST))
return true;
final EnchantedJewellery jewellery;
assert event.getUsedItem() != null;
jewellery = EnchantedJewellery.Companion.getIdMap().get(event.getUsedItem().getId());
- if (!hasRequirement(player, "Heroes' Quest"))
+ if (!hasRequirement(player, Quests.HEROES_QUEST))
return true;
if (jewellery == EnchantedJewellery.COMBAT_BRACELET || jewellery == EnchantedJewellery.SKILLS_NECKLACE)
- if (!hasRequirement(player, "Legend's Quest"))
+ if (!hasRequirement(player, Quests.LEGENDS_QUEST))
return true;
if (jewellery == null && event.getUsedItem().getId() != 2572) {
return true;
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateau.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateau.kt
index b6b31939f..24e3f6cbc 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateau.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateau.kt
@@ -5,9 +5,9 @@ import core.api.getAttribute
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.quest.Quest
import core.game.node.entity.skill.Skills
-import core.game.world.map.Location
import core.plugin.Initializable
import org.rs09.consts.Items
+import content.data.Quests
/**
* Death Plateau Quest
@@ -15,16 +15,13 @@ import org.rs09.consts.Items
* @author ovenbread
*/
@Initializable
-class DeathPlateau : Quest("Death Plateau",44, 43, 1, 314, 0, 1, 80) {
- companion object {
- const val questName = "Death Plateau"
- }
+class DeathPlateau : Quest(Quests.DEATH_PLATEAU,44, 43, 1, 314, 0, 1, 80) {
override fun drawJournal(player: Player?, stage: Int) {
super.drawJournal(player, stage)
var line = 12
var stage = getStage(player)
- var started = player?.questRepository?.getStage(questName)!! > 0
+ var started = player?.questRepository?.getStage(Quests.DEATH_PLATEAU)!! > 0
if(!started){
line(player, "I can start this quest by speaking to !!Denulth?? who is in his", line++)
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateauDoorDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateauDoorDialogueFile.kt
index e0db1a73d..64c29cec7 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateauDoorDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateauDoorDialogueFile.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.burthorpe.quest.deathplateau
+import content.data.Quests
import core.api.getQuestStage
import core.api.getScenery
import core.api.sendDialogue
@@ -26,7 +27,7 @@ class DeathPlateauDoorDialogueFile(val door: Int) : DialogueFile() {
if(door == 2) {
npc = NPC(NPCs.TENZING_1071)
- when (getQuestStage(player!!, DeathPlateau.questName)) {
+ when (getQuestStage(player!!, Quests.DEATH_PLATEAU)) {
in 0 .. 19 -> {
when (stage) {
0 -> sendDialogue(player!!, "You knock on the door.").also { stage++ }
@@ -53,7 +54,7 @@ class DeathPlateauDoorDialogueFile(val door: Int) : DialogueFile() {
}
if(door == 3) {
npc = NPC(NPCs.TENZING_1071)
- when (getQuestStage(player!!, DeathPlateau.questName)) {
+ when (getQuestStage(player!!, Quests.DEATH_PLATEAU)) {
in 0..24 -> {
when (stage) {
0 -> npcl(FacialExpression.FRIENDLY, "Where do you think you're going? This is private property!").also { stage = END_DIALOGUE }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateauInteractionListener.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateauInteractionListener.kt
index ed6850780..01a253ad4 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateauInteractionListener.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DeathPlateauInteractionListener.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.burthorpe.quest.deathplateau
+import content.data.Quests
import core.api.*
import core.game.global.action.DoorActionHandler
import core.game.interaction.IntType
@@ -24,22 +25,19 @@ class DeathPlateauInteractionListener : InteractionListener {
)
}
override fun defineListeners() {
- on(Scenery.DOOR_3747, SCENERY, "open") { player, _ ->
- // Harold's Door
- if (player.location == location(2906, 3543, 1)) {
- openDialogue(player, DeathPlateauDoorDialogueFile(1))
- } else {
- DoorActionHandler.handleAutowalkDoor(player, getScenery(2906, 3543, 1))
+ on(Scenery.DOOR_3747, SCENERY, "open") { player, node ->
+ // Harold's door
+ when (player.location) {
+ location(2906, 3543, 1), location(2905, 3543, 1), location(2907, 3543, 1) -> openDialogue(player, DeathPlateauDoorDialogueFile(1))
+ else -> DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
}
return@on true
}
on(Scenery.DOOR_3745, SCENERY, "open") { player, node ->
- if (node.location == location(2823, 3555, 0)) {
- // 1st Door to Tenzing
- openDialogue(player, DeathPlateauDoorDialogueFile(2))
- } else if (node.location == location(2820, 3558, 0)) {
- // 2nd Door to chicken pen
- openDialogue(player, DeathPlateauDoorDialogueFile(3))
+ when (node.location) {
+ location(2823, 3555, 0) -> openDialogue(player, DeathPlateauDoorDialogueFile(2)) //1st door to Tenzing
+ location(2820, 3558, 0) -> openDialogue(player, DeathPlateauDoorDialogueFile(3)) //2nd door to chicken pen
+ else -> DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
}
return@on true
}
@@ -77,16 +75,16 @@ class DeathPlateauInteractionListener : InteractionListener {
GroundItemManager.get(Items.STONE_BALL_3111, location(2895, 3562, 0), player) != null &&
GroundItemManager.get(Items.STONE_BALL_3112, location(2895, 3563, 0), player) != null &&
GroundItemManager.get(Items.STONE_BALL_3113, location(2895, 3564, 0), player) != null) {
- if (getQuestStage(player, DeathPlateau.questName) == 16) {
+ if (getQuestStage(player, Quests.DEATH_PLATEAU) == 16) {
sendMessage(player, "The equipment room door has unlocked.")
- setQuestStage(player, DeathPlateau.questName, 19)
+ setQuestStage(player, Quests.DEATH_PLATEAU, 19)
}
}
return@onUseWith true
}
on(Scenery.LARGE_DOOR_3743, SCENERY, "open") { player, node ->
- if (getQuestStage(player, DeathPlateau.questName) > 16) {
+ if (getQuestStage(player, Quests.DEATH_PLATEAU) > 16) {
DoorActionHandler.handleAutowalkDoor(player, node as core.game.node.scenery.Scenery)
} else {
sendMessage(player, "The door is locked.")
@@ -94,4 +92,4 @@ class DeathPlateauInteractionListener : InteractionListener {
return@on true
}
}
-}
\ No newline at end of file
+}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DenulthDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DenulthDialogueFile.kt
index 7838a6c5c..2046cf51a 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DenulthDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DenulthDialogueFile.kt
@@ -1,14 +1,13 @@
package content.region.asgarnia.burthorpe.quest.deathplateau
+import content.data.Quests
import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
import core.game.dialogue.Topic
-import core.game.node.entity.npc.NPC
import core.game.node.item.Item
import core.tools.END_DIALOGUE
import org.rs09.consts.Items
-import org.rs09.consts.NPCs
/**
@@ -20,7 +19,7 @@ import org.rs09.consts.NPCs
class DenulthDialogueFile : DialogueFile() {
override fun handle(componentID: Int, buttonID: Int) {
- when (getQuestStage(player!!, DeathPlateau.questName)) {
+ when (getQuestStage(player!!, Quests.DEATH_PLATEAU)) {
in 0..4 -> {
when (stage) {
0 -> playerl(FacialExpression.FRIENDLY, "Hello!").also { stage++ }
@@ -54,7 +53,7 @@ class DenulthDialogueFile : DialogueFile() {
309 -> playerl(FacialExpression.FRIENDLY, "A stone what...?!").also { stage++ }
310 -> npcl(FacialExpression.FRIENDLY, "Well citizen, the Prince is fond of puzzles. Why we couldn't just have a key is beyond me!").also { stage++ }
311 -> playerl(FacialExpression.SUSPICIOUS, "I'll get on it right away!").also {
- setQuestStage(player!!, DeathPlateau.questName, 5)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 5)
stage = END_DIALOGUE
}
}
@@ -104,7 +103,7 @@ class DenulthDialogueFile : DialogueFile() {
}
11 -> npcl(FacialExpression.FRIENDLY, "This certificate proves that we have accepted Dunstan's son for training in the Imperial Guard!").also { stage++ }
12 -> playerl(FacialExpression.FRIENDLY, "Thank you Denulth, I shall be back shortly!").also {
- setQuestStage(player!!, DeathPlateau.questName, 23)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 23)
stage = END_DIALOGUE
}
}
@@ -155,7 +154,7 @@ class DenulthDialogueFile : DialogueFile() {
stage = 8
}
}
- 7 -> playerl(FacialExpression.FRIENDLY, "I have opened the door but I don't have the combination on me.").also { stage++ }
+ 7 -> playerl(FacialExpression.FRIENDLY, "I have opened the door but I don't have the combination on me.").also { stage = END_DIALOGUE }
8 -> playerl(FacialExpression.FRIENDLY, "Yes! The door is open and here is the combination.").also { stage++ }
9 -> sendItemDialogue(player!!, Items.COMBINATION_3102, "You give Denulth the combination to the equipment room.").also {
if (removeItem(player!!, Item(Items.COMBINATION_3102))) {
@@ -169,7 +168,7 @@ class DenulthDialogueFile : DialogueFile() {
12 -> npcl(FacialExpression.FRIENDLY, "You are now an honourary member of the Imperial Guard!").also { stage++ }
13 -> {
stage = END_DIALOGUE
- finishQuest(player!!, DeathPlateau.questName)
+ finishQuest(player!!, Quests.DEATH_PLATEAU)
}
}
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DunstanDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DunstanDialogueFile.kt
index 2567c54c8..6cf2eabf4 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DunstanDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/DunstanDialogueFile.kt
@@ -3,17 +3,16 @@ package content.region.asgarnia.burthorpe.quest.deathplateau
import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
-import core.game.node.entity.npc.NPC
import core.game.node.item.Item
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
import org.rs09.consts.Items
-import org.rs09.consts.NPCs
+import content.data.Quests
class DunstanDialogueFile : DialogueFile() {
override fun handle(componentID: Int, buttonID: Int) {
- when (getQuestStage(player!!, DeathPlateau.questName)) {
+ when (getQuestStage(player!!, Quests.DEATH_PLATEAU)) {
21 -> {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hi!").also { stage++ }
@@ -29,7 +28,7 @@ class DunstanDialogueFile : DialogueFile() {
10 -> npcl(FacialExpression.FRIENDLY, "My son has just turned 16 and I'd very much like him to join the Imperial Guard. The Prince's elite forces are invite only so it's very unlikely he'll get in. If you can arrange that you have a deal!").also { stage++ }
11 -> playerl(FacialExpression.FRIENDLY, "That won't be a problem as I'm helping out the Imperial Guard!").also { stage++ }
12 -> npcl(FacialExpression.FRIENDLY, "Excellent! You'll need to bring an Iron bar for the spikes!").also {
- setQuestStage(player!!, "Death Plateau", 22)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 22)
stage = END_DIALOGUE
}
}
@@ -60,7 +59,7 @@ class DunstanDialogueFile : DialogueFile() {
5 -> npcl(FacialExpression.FRIENDLY, "Thank you!").also {
// Jumps to the next stage immediately in one continuous dialogue (questStage 24, stage 2).
- setQuestStage(player!!, "Death Plateau", 24)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 24)
stage = 2
}
}
@@ -84,15 +83,17 @@ class DunstanDialogueFile : DialogueFile() {
4 -> playerl(FacialExpression.FRIENDLY, "I don't have the climbing boots.").also { stage = END_DIALOGUE }
5 -> playerl(FacialExpression.FRIENDLY, "I don't have the iron bar or the climbing boots.").also { stage = END_DIALOGUE }
- 7 -> sendDoubleItemDialogue(player!!, Items.IRON_BAR_2351, Items.CLIMBING_BOOTS_3105, "You give Dunstan an iron bar and the climbing boots.").also {
+ 7 -> sendDoubleItemDialogue(player!!, Items.IRON_BAR_2351, Items.CLIMBING_BOOTS_3105, "You give Dunstan an Iron bar and the climbing boots.").also {
+ sendMessage(player!!, "You give Dunstan an Iron bar and the climbing boots.")
if (removeItem(player!!, Item(Items.CLIMBING_BOOTS_3105)) && removeItem(player!!, Item(Items.IRON_BAR_2351))) {
+ addItemOrDrop(player!!, Items.SPIKED_BOOTS_3107)
stage++
} else {
stage = END_DIALOGUE
}
}
8 -> sendItemDialogue(player!!, Items.SPIKED_BOOTS_3107, "Dunstan has given you the spiked boots.").also { stage++
- addItemOrDrop(player!!, Items.SPIKED_BOOTS_3107)
+ sendMessage(player!!, "Dunstan has given you the spiked boots.")
}
9 -> playerl(FacialExpression.FRIENDLY, "Thank you!").also { stage++ }
10 -> npcl(FacialExpression.FRIENDLY, "No problem.").also {
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/EohricDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/EohricDialogueFile.kt
index 426f4846a..8e0d5f0a6 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/EohricDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/EohricDialogueFile.kt
@@ -4,10 +4,9 @@ import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
import core.game.dialogue.Topic
-import core.game.node.entity.npc.NPC
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
-import org.rs09.consts.NPCs
+import content.data.Quests
/**
* Eohric sub dialogue file for death plateau.
@@ -17,7 +16,7 @@ import org.rs09.consts.NPCs
*/
class EohricDialogueFile : DialogueFile() {
override fun handle(componentID: Int, buttonID: Int) {
- when (getQuestStage(player!!, DeathPlateau.questName)) {
+ when (getQuestStage(player!!, Quests.DEATH_PLATEAU)) {
in 5..9 -> {
when (stage) {
START_DIALOGUE -> player(FacialExpression.FRIENDLY, "Hi!").also { stage++ }
@@ -31,7 +30,7 @@ class EohricDialogueFile : DialogueFile() {
11 -> player(FacialExpression.FRIENDLY, "Do you know where he is staying?").also { stage++ }
12 -> npc(FacialExpression.FRIENDLY, "Harold is staying at the Toad and Chicken.").also { stage++ }
13 -> player(FacialExpression.FRIENDLY, "Thanks!").also {
- setQuestStage(player!!, "Death Plateau", 10)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 10)
HaroldDialogueFile.resetNpc(player!!)
stage = END_DIALOGUE
}
@@ -58,7 +57,7 @@ class EohricDialogueFile : DialogueFile() {
2 -> playerl(FacialExpression.HALF_GUILTY, "I found Harold but he won't talk to me!.").also { stage++ }
3 -> npcl(FacialExpression.THINKING, "Hmm. Harold has got in trouble a few over his drinking and gambling. Perhaps he'd open up after a drink?").also { stage++ }
4 -> playerl(FacialExpression.FRIENDLY, "Thanks, I'll try that!").also {
- setQuestStage(player!!, "Death Plateau", 12)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 12)
stage = END_DIALOGUE
}
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/HaroldDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/HaroldDialogueFile.kt
index 810b427b1..e4242212b 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/HaroldDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/HaroldDialogueFile.kt
@@ -11,6 +11,7 @@ import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
import org.rs09.consts.Animations
import org.rs09.consts.Items
+import content.data.Quests
/**
* Harold sub dialogue file for death plateau.
@@ -38,7 +39,7 @@ class HaroldDialogueFile : DialogueFile() {
setAttribute(player!!, ATTRIBUTE_JUMPSTAGE, 0)
}
println(getAttribute(player!!, ATTRIBUTE_HAROLD_MONEY, -1))
- when (getQuestStage(player!!, DeathPlateau.questName)) {
+ when (getQuestStage(player!!, Quests.DEATH_PLATEAU)) {
10 -> { // First time meeting.
when (stage) {
START_DIALOGUE -> player(FacialExpression.FRIENDLY, "Hello there.").also { stage++ }
@@ -47,7 +48,7 @@ class HaroldDialogueFile : DialogueFile() {
3 -> npcl(FacialExpression.FRIENDLY, "Yeah.").also { stage++ }
4 -> playerl(FacialExpression.HAPPY, "Denulth said that you lost the combination to the equipment room ?").also { stage++ }
5 -> npcl(FacialExpression.FRIENDLY, "I don't want to talk about it!").also {
- setQuestStage(player!!, "Death Plateau", 11)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 11)
stage = END_DIALOGUE
}
}
@@ -71,7 +72,7 @@ class HaroldDialogueFile : DialogueFile() {
4 -> {
if (inInventory(player!!, Items.ASGARNIAN_ALE_1905, 1)) {
removeItem(player!!, Items.ASGARNIAN_ALE_1905)
- setQuestStage(player!!, "Death Plateau", 12)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 12)
sendMessage(player!!, "You give Harold an Asgarnian Ale.")
setAttribute(player!!, ATTRIBUTE_HAROLD_MONEY, 200)
sendItemDialogue(player!!, Items.ASGARNIAN_ALE_1905, "You give Harold an Asgarnian Ale.").also { stage++ }
@@ -81,7 +82,7 @@ class HaroldDialogueFile : DialogueFile() {
}
5 -> {
end()
- setQuestStage(player!!, "Death Plateau", 13)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 13)
animate(npc!!, Animations.HUMAN_EATTING_829)
runTask(npc!!, 5) {
npcl(FacialExpression.FRIENDLY, "Arrh. That hit the spot!").also { stage = END_DIALOGUE }
@@ -108,19 +109,16 @@ class HaroldDialogueFile : DialogueFile() {
21 -> playerl(FacialExpression.ASKING, "What?").also { stage++ }
22 -> npcl(FacialExpression.FRIENDLY, "I really fancy one of those Blurberry Specials. I never get over to the Gnome Stronghold so I haven't had one for ages!").also { stage++ }
23 -> {
- if (removeItem(player!!, Items.BLURBERRY_SPECIAL_2064)) {
+ if (removeItem(player!!, Items.BLURBERRY_SPECIAL_2064) || removeItem(player!!, Items.PREMADE_BLURB_SP_2028)) {
sendMessage(player!!, "You give Harold a Blurberry Special.")
sendItemDialogue(player!!, Items.BLURBERRY_SPECIAL_2064, "You give Harold a Blurberry Special.").also { stage++ }
- } else if (removeItem(player!!, Items.PREMADE_BLURB_SP_2028)) {
- sendMessage(player!!, "You give Harold a Blurberry Special.")
- sendItemDialogue(player!!, Items.PREMADE_BLURB_SP_2028, "You give Harold a Blurberry Special.").also { stage++ }
} else {
player(FacialExpression.FRIENDLY, "I'll go and get you one.").also { stage = END_DIALOGUE }
}
}
24 -> {
end()
- setQuestStage(player!!, DeathPlateau.questName, 14)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 14)
npc!!.isWalks = false
animate(npc!!, Animations.HUMAN_EATTING_829)
runTask(npc!!, 4) {
@@ -204,7 +202,7 @@ class HaroldDialogueFile : DialogueFile() {
37 -> npcl(FacialExpression.FRIENDLY, "I'll write you out an IOU for the rest.").also { stage++ }
38 -> {
addItemOrDrop(player!!, Items.IOU_3103)
- setQuestStage(player!!, DeathPlateau.questName, 15)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 15)
sendMessage(player!!, "Harold has given you an IOU scribbled on some paper.")
sendItemDialogue(player!!, Items.IOU_3103, "Harold has given you an IOU scribbled on some paper.").also {stage = END_DIALOGUE}
}
@@ -292,7 +290,7 @@ class HaroldDialogueFile : DialogueFile() {
34 -> npcl(FacialExpression.DRUNK, "I owe you the resht!").also { stage++ }
35 -> {
addItemOrDrop(player!!, Items.IOU_3103)
- setQuestStage(player!!, DeathPlateau.questName, 15)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 15)
sendMessage(player!!, "Harold has given you an IOU scribbled on some paper.")
sendItemDialogue(player!!, Items.IOU_3103, "Harold has given you an IOU scribbled on some paper.").also {stage = END_DIALOGUE}
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/IOUNoteDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/IOUNoteDialogueFile.kt
index 0d44bc767..4a4531422 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/IOUNoteDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/IOUNoteDialogueFile.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.burthorpe.quest.deathplateau
+import content.data.Quests
import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
@@ -9,7 +10,7 @@ import org.rs09.consts.Items
class IOUNoteDialogueFile : DialogueFile() {
var a = 0
override fun handle(componentID: Int, buttonID: Int) {
- when (getQuestStage(player!!, DeathPlateau.questName)) {
+ when (getQuestStage(player!!, Quests.DEATH_PLATEAU)) {
in 15..16 -> {
when (stage) {
0 -> player(FacialExpression.NEUTRAL, "The IOU says that Harold owes me some money.").also { stage++ }
@@ -18,7 +19,7 @@ class IOUNoteDialogueFile : DialogueFile() {
3 -> {
if (removeItem(player!!, Items.IOU_3103)) {
addItemOrDrop(player!!, Items.COMBINATION_3102)
- setQuestStage(player!!, DeathPlateau.questName, 16)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 16)
sendItemDialogue(player!!, Items.COMBINATION_3102, "You have found the combination!").also { stage++ }
}
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/SabaDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/SabaDialogueFile.kt
index 3c1c90632..820fdf26e 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/SabaDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/SabaDialogueFile.kt
@@ -5,11 +5,12 @@ import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
import core.game.dialogue.Topic
import core.tools.END_DIALOGUE
+import content.data.Quests
class SabaDialogueFile : DialogueFile() {
override fun handle(componentID: Int, buttonID: Int) {
- when (getQuestStage(player!!, DeathPlateau.questName)) {
+ when (getQuestStage(player!!, Quests.DEATH_PLATEAU)) {
19 -> {
when (stage) {
0 -> player(FacialExpression.FRIENDLY, "Hello!").also { stage++ }
@@ -34,7 +35,7 @@ class SabaDialogueFile : DialogueFile() {
29 -> npcl(FacialExpression.HALF_GUILTY,"Before the trolls came there used to be a nettlesome Sherpa that took humans exploring or something equally stupid. Perhaps he'd know another way.").also { stage++ }
30 -> playerl(FacialExpression.FRIENDLY, "Where does this Sherpa live?").also { stage++ }
31 -> npcl(FacialExpression.ANNOYED,"I don't know but it can't be far as he used to be around all the time!").also {
- setQuestStage(player!!, "Death Plateau", 20)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 20)
stage = END_DIALOGUE }
}
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/SecretWayLocation.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/SecretWayLocation.kt
index 3a078a77d..96d821a9f 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/SecretWayLocation.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/SecretWayLocation.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.burthorpe.quest.deathplateau
+import content.data.Quests
import core.api.*
import core.game.node.entity.Entity
import core.game.node.entity.player.Player
@@ -11,9 +12,9 @@ class SecretWayLocation : MapArea {
}
override fun areaEnter(entity: Entity) {
- if (entity is Player && getQuestStage(entity, DeathPlateau.questName) == 25) {
+ if (entity is Player && getQuestStage(entity, Quests.DEATH_PLATEAU) == 25) {
sendPlayerDialogue(entity, "I think this is far enough, I can see Death Plateau and it looks like the trolls haven't found the path. I'd better go and tell Denulth.")
- setQuestStage(entity, DeathPlateau.questName, 26)
+ setQuestStage(entity, Quests.DEATH_PLATEAU, 26)
}
}
}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/TenzingDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/TenzingDialogueFile.kt
index aacba1673..c69cb4a94 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/TenzingDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/deathplateau/TenzingDialogueFile.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.burthorpe.quest.deathplateau
+import content.data.Quests
import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
@@ -12,7 +13,7 @@ import org.rs09.consts.Items
class TenzingDialogueFile : DialogueFile() {
override fun handle(componentID: Int, buttonID: Int) {
- when (getQuestStage(player!!, DeathPlateau.questName)) {
+ when (getQuestStage(player!!, Quests.DEATH_PLATEAU)) {
20 -> {
when (stage) {
START_DIALOGUE -> playerl(FacialExpression.FRIENDLY, "Hello!").also { stage++ }
@@ -34,7 +35,7 @@ class TenzingDialogueFile : DialogueFile() {
20 -> npcl(FacialExpression.FRIENDLY, "Thank you traveller!").also { stage++ }
21 -> sendItemDialogue(player!!, Items.CLIMBING_BOOTS_3105, "Tenzing has given you his Climbing boots.").also {
addItemOrDrop(player!!, Items.CLIMBING_BOOTS_3105, 1)
- setQuestStage(player!!, DeathPlateau.questName, 21)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 21)
stage = END_DIALOGUE
}
30 -> npcl(FacialExpression.ANNOYED, "Hmph.").also { stage = END_DIALOGUE }
@@ -104,7 +105,7 @@ class TenzingDialogueFile : DialogueFile() {
9 -> npcl(FacialExpression.FRIENDLY, "I don't think the Trolls have found the secret way yet, if they had I would've been attacked by now.").also { stage++ }
10 -> playerl(FacialExpression.FRIENDLY, "OK thanks but I think I'd better check the path. I don't want to send the Imperial Guards to their death!").also { stage++ }
11 -> npcl(FacialExpression.FRIENDLY, "You are wise for one so young.").also {
- setQuestStage(player!!, DeathPlateau.questName, 25)
+ setQuestStage(player!!, Quests.DEATH_PLATEAU, 25)
stage = END_DIALOGUE
}
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/AchiettiesDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/AchiettiesDialogue.kt
new file mode 100644
index 000000000..be02fd712
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/AchiettiesDialogue.kt
@@ -0,0 +1,180 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+
+@Initializable
+class AchiettiesDialogue(player: Player? = null) : DialoguePlugin(player){
+
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, AchiettiesDialogueFile(), npc)
+ return true
+ }
+
+ override fun newInstance(player: Player?): DialoguePlugin {
+ return AchiettiesDialogue(player)
+ }
+
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.ACHIETTIES_796)
+ }
+}
+
+class AchiettiesDialogueFile : DialogueBuilderFile() {
+
+ override fun create(b: DialogueBuilder) {
+
+ b.onQuestStages(Quests.HEROES_QUEST, 0,1)
+ .branch { player ->
+ return@branch getQuestStage(player, Quests.HEROES_QUEST)
+ }.let{ branch ->
+ branch.onValue(0)
+ .npcl(FacialExpression.FRIENDLY, "Greetings. Welcome to the Heroes' Guild.")
+ .npcl("Only the greatest heroes of this land may gain entrance to this guild.")
+ // - If the player's skill levels are lower than the quest requirements. (I think this is after 2009)
+ // linel("Before starting this quest, be aware that one or more of your skill levels are lower than what is required to fully complete it.")
+ .options()
+ .let { optionBuilder ->
+ optionBuilder.option("I'm a hero, may I apply to join?")
+ .playerl("I'm a hero. May I apply to join?")
+ .branch { player ->
+ return@branch if (HeroesQuest.hasRequirements(player)) {
+ 1
+ } else {
+ 0
+ }
+ }.let { branch ->
+ branch.onValue(0)
+ .npcl("You're a hero? I've never heard of YOU. You are required to possess at least 55 quest points to file an application.")
+ .npcl("Additionally you must have completed the Shield of Arrav, Lost City, Merlin's Crystal and Dragon Slayer quests.")
+ .end()
+ return@let branch
+ }.onValue(1)
+ .betweenStage { df, player, _, _ ->
+ if(getQuestStage(player, Quests.HEROES_QUEST) == 0) {
+ setQuestStage(player, Quests.HEROES_QUEST, 1)
+ }
+ }
+ .npcl("Well you seem to meet our initial requirements, so you may now begin the tasks to earn membership in the Heroes' Guild.")
+ .npcl("The three items required for entrance are: An Entranan Firebird feather, a Master Thieves' armband, and a cooked Lava Eel.")
+ .options()
+ .let { optionBuilder2 ->
+ optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
+ .npcl("I'm sure you have the relevant contacts to find out about that.")
+ .end()
+ optionBuilder2.option_playerl("Any hints on getting the feather?")
+ .npcl("Not really - other than Entranan firebirds tend to live on Entrana.")
+ .end()
+ optionBuilder2.option_playerl("Any hints on getting the eel?")
+ .npcl("Maybe go and find someone who knows a lot about fishing?")
+ .end()
+ optionBuilder2.option_playerl("I'll start looking for all those things then.")
+ .npcl("Good luck with that.")
+ .end()
+ }
+
+ optionBuilder.option_playerl("Good for the foremost heroes of the land.")
+ .npcl("Yes. Yes it is.")
+ .end()
+ }
+ branch.onValue(1)
+ .npcl("Greetings. Welcome to the Heroes' Guild.")
+ .npcl("How goes thy quest adventurer?")
+ .playerl("It's tough. I've not done it yet.")
+ .npcl("Remember, the items you need to enter are:")
+ .npcl("An Entranan Firebirds' feather, A Master Thieves armband, and a cooked Lava Eel.")
+ .options()
+ .let { optionBuilder2 ->
+ optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
+ .npcl("I'm sure you have the relevant contacts to find out about that.")
+ .end()
+ optionBuilder2.option_playerl("Any hints on getting the feather?")
+ .npcl("Not really - other than Entranan firebirds tend to live on Entrana.")
+ .end()
+ optionBuilder2.option_playerl("Any hints on getting the eel?")
+ .npcl("Maybe go and find someone who knows a lot about fishing?")
+ .end()
+ optionBuilder2.option_playerl("I'll start looking for all those things then.")
+ .npcl("Good luck with that.")
+ .end()
+ }
+ }
+
+ b.onQuestStages(Quests.HEROES_QUEST, 2, 3, 4)
+ .npcl("Greetings. Welcome to the Heroes' Guild.")
+ .npcl("How goes thy quest adventurer?")
+ .playerl("It's tough. I've not done it yet.")
+ .npcl("Remember, the items you need to enter are:")
+ .npcl("An Entranan Firebirds' feather, A Master Thieves armband, and a cooked Lava Eel.")
+ .options()
+ .let { optionBuilder2 ->
+ optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
+ .npcl("I'm sure you have the relevant contacts to find out about that.")
+ .end()
+ optionBuilder2.option_playerl("Any hints on getting the feather?")
+ .npcl("Not really - other than Entranan firebirds tend to live on Entrana.")
+ .end()
+ optionBuilder2.option_playerl("Any hints on getting the eel?")
+ .npcl("Maybe go and find someone who knows a lot about fishing?")
+ .end()
+ optionBuilder2.option_playerl("I'll start looking for all those things then.")
+ .npcl("Good luck with that.")
+ .end()
+ }
+
+ b.onQuestStages(Quests.HEROES_QUEST, 6)
+ .npcl("Greetings. Welcome to the Heroes' Guild.")
+ .npcl("How goes thy quest adventurer?")
+ .branch { player ->
+ return@branch if (HeroesQuest.allItemsInInventory(player)) { 1 } else { 0 }
+ }.let { branch ->
+ branch.onValue(0)
+ .playerl("It's tough. I've not done it yet.")
+ .npcl("Remember, the items you need to enter are:")
+ .npcl("An Entranan Firebirds' feather, A Master Thieves armband, and a cooked Lava Eel.")
+ .options()
+ .let { optionBuilder2 ->
+ optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
+ .npcl("I'm sure you have the relevant contacts to find out about that.")
+ .end()
+ optionBuilder2.option_playerl("Any hints on getting the feather?")
+ .npcl("Not really - other than Entranan firebirds tend to live on Entrana.")
+ .end()
+ optionBuilder2.option_playerl("Any hints on getting the eel?")
+ .npcl("Maybe go and find someone who knows a lot about fishing?")
+ .end()
+ optionBuilder2.option_playerl("I'll start looking for all those things then.")
+ .npcl("Good luck with that.")
+ .end()
+ }
+
+ branch.onValue(1)
+ .playerl("I have all the required items.")
+ .npcl("I see that you have. Well done. Now, to complete the quest, and gain entry to the Heroes' Guild in your final task all that you have to do is...")
+ .playerl("W-what? What do you mean? There's MORE?")
+ .npcl("I'm sorry, I was just having a little fun with you. Just a little Heroes' Guild humour there. What I really meant was")
+ .npcl("Congratulations! You have completed the Heroes' Guild entry requirements! You will find the door now open for you! Enter, Hero! And take this reward!")
+ .endWith { _, player ->
+ if (HeroesQuest.allItemsInInventory(player)) {
+ removeItem(player, Items.FIRE_FEATHER_1583)
+ removeItem(player, Items.LAVA_EEL_2149)
+ removeItem(player, Items.THIEVES_ARMBAND_1579)
+ if (getQuestStage(player, Quests.HEROES_QUEST) == 6) {
+ finishQuest(player, Quests.HEROES_QUEST)
+ }
+ }
+ }
+ }
+
+ b.onQuestStages(Quests.HEROES_QUEST, 100)
+ .npcl("Greetings. Welcome to the Heroes' Guild.")
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/AlfonseTheWaiterDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/AlfonseTheWaiterDialogue.kt
new file mode 100644
index 000000000..efb262b09
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/AlfonseTheWaiterDialogue.kt
@@ -0,0 +1,62 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.getQuestStage
+import core.api.openDialogue
+import core.api.openNpcShop
+import core.api.setQuestStage
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.NPCs
+
+@Initializable
+class AlfonseTheWaiterDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun newInstance(player: Player): DialoguePlugin {
+ return AlfonseTheWaiterDialogue(player)
+ }
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, AlfonseTheWaiterDialogueFile(), npc)
+ return false
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.ALFONSE_THE_WAITER_793)
+ }
+}
+class AlfonseTheWaiterDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+
+ b.onPredicate { _ -> true }
+ .npc("Welcome to the Shrimp and Parrot.", "Would you like to order, sir?")
+ .options()
+ .let { optionBuilder ->
+ optionBuilder.option_playerl("Yes please.")
+ .endWith { _, player ->
+ openNpcShop(player, npc!!.id)
+ }
+
+ optionBuilder.option_playerl("No thank you.")
+ .end()
+
+ optionBuilder.optionIf("Do you sell Gherkins?"){ player -> return@optionIf getQuestStage(
+ player,
+ Quests.HEROES_QUEST
+ ) >= 2 && HeroesQuest.isPhoenix(player) }
+ .playerl("Do you sell Gherkins?")
+ .npc("Hmmmm Gherkins eh? Ask Charlie the cook, round the", "back. He may have some 'gherkins' for you!")
+ .linel("Alfonse winks at you.")
+ .endWith { _, player ->
+ if(getQuestStage(player, Quests.HEROES_QUEST) == 2) {
+ setQuestStage(player, Quests.HEROES_QUEST, 3)
+ }
+ }
+
+ optionBuilder.option("Where do you get your Karambwan from?")
+ .npc("We buy directly off Lubufu, a local fisherman. He", "seems to have a monopoly over Karambwan sales.")
+ .end()
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/CharlieTheCookDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/CharlieTheCookDialogue.kt
new file mode 100644
index 000000000..2bd65f817
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/CharlieTheCookDialogue.kt
@@ -0,0 +1,84 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.getQuestStage
+import core.api.openDialogue
+import core.api.setQuestStage
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.NPCs
+
+@Initializable
+class CharlieTheCookDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun newInstance(player: Player): DialoguePlugin {
+ return CharlieTheCookDialogue(player)
+ }
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, CharlieTheCookDialogueFile(), npc)
+ return false
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.CHARLIE_THE_COOK_794)
+ }
+}
+class CharlieTheCookDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { _ -> true }
+ .npc(FacialExpression.ANGRY, "Hey! What are you doing back here?")
+ .options()
+ .let { optionBuilder ->
+ val continuePath = b.placeholder()
+
+ optionBuilder.optionIf("I'm looking for a gherkin...") { player -> return@optionIf getQuestStage(player, Quests.HEROES_QUEST) >= 3 && HeroesQuest.isPhoenix(player) }
+ .playerl("I'm looking for a gherkin...")
+ .goto(continuePath)
+
+ optionBuilder.optionIf("I'm a fellow member of the Phoenix Gang.") { player -> return@optionIf getQuestStage(player, Quests.HEROES_QUEST) >= 3 && HeroesQuest.isPhoenix(player) }
+ .playerl("I'm a fellow member of the Phoenix Gang.")
+ .goto(continuePath)
+
+ optionBuilder.option_playerl("Just exploring.")
+ .npcl(FacialExpression.ANGRY, "Well, get out! This kitchen isn't for exploring. It's a private establishment! It's out of bounds to customers!")
+ .end()
+
+ return@let continuePath.builder()
+ }
+ .npcl("Ah, a fellow Phoenix! So, tell me compadre... What brings you to sunny Brimhaven?")
+ .options()
+ .let { optionBuilder ->
+ optionBuilder.option_playerl("Sun, sand, and the fresh sea air!")
+ .playerl("Sun, sand, and the fresh sea air!")
+ .npcl("Well, can't say I blame you, compadre. I used to be a city boy myself, but have to admit it's a lot nicer living here nowadays. Brimhaven's certainly good for it.")
+ .playerl("I also want to steal Scarface Pete's candlesticks.")
+ .npcl("Ah yes, of course. The candlesticks. Well, I have to be honest with you, compadre, we haven't made much progress in that task ourselves so far.")
+ .npcl("We can however offer a little assistance. Setting up this restaurant was the start of things; we have a secret door out the back of here that leads through the back of Cap'n Arnav's garden.")
+ .npcl("Now, at the other side of Cap'n Arnav's garden, is an old side entrance to Scarface Pete's mansion. It seems to have been blocked off from the rest of the mansion some years ago and we can't seem to find a way through.")
+ .npcl("We're positive this is the key to entering the house undetected, however, and I promise to let you know if we find anything there.")
+ .playerl("Mind if I check it out for myself?")
+ .npcl("Not at all! The more minds we have working on the problem, the quicker we get that loot!")
+ .endWith { _, player ->
+ if (getQuestStage(player, Quests.HEROES_QUEST) == 3) {
+ setQuestStage(player, Quests.HEROES_QUEST, 4)
+ }
+ }
+
+ optionBuilder.option_playerl("I want to steal Scarface Pete's candlesticks.")
+ .npcl("Ah yes, of course. The candlesticks. Well, I have to be honest with you, compadre, we haven't made much progress in that task ourselves so far.")
+ .npcl("We can however offer a little assistance. Setting up this restaurant was the start of things; we have a secret door out the back of here that leads through the back of Cap'n Arnav's garden.")
+ .npcl("Now, at the other side of Cap'n Arnav's garden, is an old side entrance to Scarface Pete's mansion. It seems to have been blocked off from the rest of the mansion some years ago and we can't seem to find a way through.")
+ .npcl("We're positive this is the key to entering the house undetected, however, and I promise to let you know if we find anything there.")
+ .playerl("Mind if I check it out for myself?")
+ .npcl("Not at all! The more minds we have working on the problem, the quicker we get that loot!")
+ .endWith { _, player ->
+ if (getQuestStage(player, Quests.HEROES_QUEST) == 3) {
+ setQuestStage(player, Quests.HEROES_QUEST, 4)
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GarvDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GarvDialogue.kt
new file mode 100644
index 000000000..dc9433443
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GarvDialogue.kt
@@ -0,0 +1,72 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.*
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+
+@Initializable
+class GarvDialogue(player: Player? = null) : DialoguePlugin(player){
+
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, GarvDialogueFile(), npc)
+ return true
+ }
+
+ override fun newInstance(player: Player?): DialoguePlugin {
+ return GarvDialogue(player)
+ }
+
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.GARV_788)
+ }
+}
+
+class GarvDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ // Technically this won't happen since you have to get past Grubor.
+ b.onQuestStages(Quests.HEROES_QUEST, 0, 1, 2)
+ .npcl("Hello. What do you want?")
+ .options()
+ .let { optionBuilder ->
+ optionBuilder.option_playerl("Can I go in there?")
+ .npcl("No. In there is private.")
+ .end()
+ optionBuilder.option_playerl("I want for nothing!")
+ .npcl("You're one of a very lucky few then.")
+ .end()
+ }
+
+ b.onQuestStages(Quests.HEROES_QUEST, 3, 4, 5, 6, 100)
+ // .npcl("Oi! Where do you think you're going pal?") - When you click on the door instead of Garv.
+ .npcl("Hello. What do you want?")
+ .playerl("Hi. I'm Hartigen. I've come to work here.")
+ .branch { player ->
+ return@branch if (inEquipment(player, Items.BLACK_FULL_HELM_1165) && inEquipment(player, Items.BLACK_PLATEBODY_1125) && inEquipment(player, Items.BLACK_PLATELEGS_1077)) { 1 } else { 0 }
+ }.let { branch ->
+ branch.onValue(1)
+ .npcl("I assume you have your I.D. papers then?")
+ .branch { player ->
+ return@branch if (inInventory(player, Items.ID_PAPERS_1584)) { 1 } else { 0 }
+ }.let { branch2 ->
+ branch2.onValue(1)
+ .npcl("You'd better come in then, Grip will want to talk to you.")
+ .endWith { _, player ->
+ if(getQuestStage(player, Quests.HEROES_QUEST) == 3) {
+ setQuestStage(player, Quests.HEROES_QUEST, 4)
+ }
+ }
+ branch2.onValue(0)
+ .playerl("Uh... Yeah. About that...I must have left them in my other suit of armour.")
+ .end()
+ }
+ branch.onValue(0)
+ .npcl("Hartigen the Black Knight? I don't think so. He doesn't dress like that.")
+ .end()
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GerrantDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GerrantDialogue.kt
new file mode 100644
index 000000000..c106acdec
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GerrantDialogue.kt
@@ -0,0 +1,66 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+
+@Initializable
+class GerrantDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun newInstance(player: Player): DialoguePlugin {
+ return GerrantDialogue(player)
+ }
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, GerrantDialogueFile(), npc)
+ return false
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.GERRANT_558)
+ }
+}
+class GerrantDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+
+ b.onPredicate { _ -> true }
+ .npc(FacialExpression.HAPPY, "Welcome! You can buy fishing equipment at my store.", "We'll also buy anything you catch off you.")
+ .options()
+ .let { optionBuilder ->
+ optionBuilder.option_playerl("Let's see what you've got then.")
+ .endWith { _, player ->
+ openNpcShop(player, npc!!.id)
+ }
+
+ optionBuilder.option_playerl("Sorry, I'm not interested.")
+ .end()
+
+ optionBuilder.optionIf("I want to find out how to catch a lava eel.") { player -> return@optionIf getQuestStage(player, Quests.HEROES_QUEST) >= 1 }
+ .playerl("I want to find out how to catch a lava eel.")
+ .npcl("Lava eels, eh? That's a tricky one, that is. You'll need a lava-proof fishing rod. The method for making this would be to take an ordinary fishing rod, and then cover it with fire-proof blamish oil.")
+ .branch { player ->
+ return@branch if (inInventory(player, Items.BLAMISH_SNAIL_SLIME_1581)) { 1 } else { 0 }
+ }.let { branch ->
+ branch.onValue(1)
+ .npcl("Of course, you knew that already.")
+ .playerl("So where can I fish lava eels?")
+ .npcl("Taverley dungeon or the lava maze in the Wilderness.")
+ .end()
+
+ branch.onValue(0)
+ .npcl("You know... thinking about it... I may have a jar of blamish slime around here somewhere. Now where did I put it?")
+ .linel("Gerrant searches around a bit.")
+ .betweenStage { df, player, _, _ ->
+ addItemOrDrop(player, Items.BLAMISH_SNAIL_SLIME_1581)
+ }
+ .npcl("Aha! Here it is! Take this slime, mix it with some Harralander and water and you'll have the blamish oil you need to treat your fishing rod.")
+ .end()
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GripBehavior.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GripBehavior.kt
new file mode 100644
index 000000000..62d72dc0d
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GripBehavior.kt
@@ -0,0 +1,59 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.DialogueFile
+import core.game.node.entity.Entity
+import core.game.node.entity.combat.CombatStyle
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.npc.NPCBehavior
+import core.game.node.entity.player.Player
+import core.game.node.item.GroundItem
+import core.game.node.item.GroundItemManager
+import core.game.node.item.Item
+import core.tools.END_DIALOGUE
+import core.tools.START_DIALOGUE
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+
+class GripBehavior : NPCBehavior(NPCs.GRIP_792) {
+ // Attacking Grip
+ override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean {
+ // You cannot attack if you are a black arm gang member.
+ if (attacker is Player && HeroesQuest.isBlackArm(attacker)) {
+ openDialogue(attacker, object : DialogueFile() {
+ override fun handle(componentID: Int, buttonID: Int) {
+ when (stage) {
+ //"I can't attack the head guard here! There are too", "many witnesses around to see me do it! I'd have the", "whole of Brimhaven after me! Besides, if he dies I want", "the promotion!"
+ START_DIALOGUE -> sendPlayerDialogue(attacker, "I can't attack the head guard here! There are too many witnesses around to see me do it! I'd have the whole of Brimhaven after me! Besides, if he dies I want the promotion!") .also { stage++ }
+ 1 -> sendDialogueLines(attacker, "Perhaps you need another player's help...?").also {
+ stage = END_DIALOGUE
+ }
+ }
+ }
+ })
+ return false
+ }
+ return true
+ }
+
+ override fun onDeathFinished(self: NPC, killer: Entity) {
+ if (killer is Player) {
+ if (getQuestStage(killer, Quests.HEROES_QUEST) == 4) {
+ setQuestStage(killer, Quests.HEROES_QUEST, 5)
+ }
+
+ val gi = GroundItem(
+ Item(Items.GRIPS_KEY_RING_1588),
+ self.location,
+ 5000,
+ null,
+ )
+ gi.forceVisible = true
+ gi.isRemainPrivate = false
+
+ val gim = GroundItemManager.create(gi)
+ gim.isRemainPrivate = false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GripDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GripDialogue.kt
new file mode 100644
index 000000000..4146b03e6
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GripDialogue.kt
@@ -0,0 +1,118 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+
+@Initializable
+class GripDialogue(player: Player? = null) : DialoguePlugin(player){
+
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, GripDialogueFile(), npc)
+ return true
+ }
+
+ override fun newInstance(player: Player?): DialoguePlugin {
+ return GripDialogue(player)
+ }
+
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.GRIP_792)
+ }
+}
+
+class GripDialogueFile : DialogueBuilderFile() {
+
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { _ -> true }
+ .branch { player ->
+ return@branch if (getAttribute(player, HeroesQuest.attributeGripTookPapers, false)) { 1 } else { 0 }
+ }.let { branch ->
+ val continuePath = b.placeholder()
+ branch.onValue(1)
+ .goto(continuePath)
+ branch.onValue(0)
+ .playerl("Hi there. I am Hartigen, reporting for duty as your new deputy sir!")
+ .npcl("Ah good, at last. You took your time getting here! Now let me see...")
+ .npcl("I'll get your hours and duty roster sorted out in a while. Oh, and do you have your I.D. papers with you? Internal security is almost as important as external security for a guard.")
+ .branch { player ->
+ return@branch if (inInventory(player, Items.ID_PAPERS_1584)) { 1 } else { 0 }
+ }.let { branch ->
+ val continuePath2 = b.placeholder()
+ branch.onValue(1)
+ .playerl("Right here sir!")
+ .linel("You hand the ID papers over to Grip.")
+ .betweenStage { df, player, _, _ ->
+ if (removeItem(player, Items.ID_PAPERS_1584)) {
+ setAttribute(player, HeroesQuest.attributeGripTookPapers, true)
+ }
+ }
+ .goto(continuePath2)
+ branch.onValue(0)
+ .playerl("Oh, dear. I don't have that with me any more.")
+ .npcl("Well, that's no good! Go get them immediately, then report back for duty.")
+ .end()
+ return@let continuePath2.builder()
+ }
+ .goto(continuePath)
+ return@let continuePath.builder()
+ }
+ .options()
+ .let { optionBuilder ->
+ val returnJoin = b.placeholder()
+
+ optionBuilder.option_playerl("So can I please guard the treasure room please?")
+ .npcl("Well, I might post you outside it sometimes. I prefer to be the only one allowed inside however.")
+ .npcl("There's some pretty valuable artefacts in there! Those keys stay ONLY with the head guard and Scarface Pete.")
+ .goto(returnJoin)
+
+ optionBuilder.optionIf("So what do my duties involve?") { player ->
+ return@optionIf !getAttribute(player, HeroesQuest.attributeGripSaidDuties, false)
+ }
+ .betweenStage { _, player, _, _ ->
+ setAttribute(player, HeroesQuest.attributeGripSaidDuties, true)
+ }
+ .playerl("So what do my duties involve?")
+ .npcl("You'll have various guard related duties on various shifts. I'll assign specific duties as they are required as and when they become necessary. Just so you know, if anything happens to me")
+ .npcl("you'll need to take over as head guard here. You'll find important keys to the treasure room and Pete's quarters inside my jacket - although I doubt anything bad's going to happen to")
+ .npcl("me anytime soon!")
+ .linel("Grip laughs to himself at the thought.")
+ .goto(returnJoin)
+
+ optionBuilder.option_playerl("Well, I'd better sort my new room out.")
+ .npcl("Yeah, I'll give you time to settle in. Better get a good night's sleep, I expect you to report for duty at oh five hundred hours tomorrow on the dot!")
+ .end()
+
+
+ optionBuilder.optionIf("Anything I can do now?") { player ->
+ return@optionIf getAttribute(player, HeroesQuest.attributeGripSaidDuties, false)
+ }
+ .playerl("Anything I can do now?")
+ .branch { player ->
+ return@branch if (inInventory(player, Items.MISCELLANEOUS_KEY_1586)) {
+ 1
+ } else {
+ 0
+ }
+ }.let { branch ->
+ branch.onValue(1)
+ .npcl("Can't think of anything right now.")
+ .end()
+
+ branch.onValue(0)
+ .npcl("Hmm. Well, you could find out what this key opens for me. Apparently it's for something in this building, but for the life of me I can't find what.")
+ .linel("Grip hands you a key.")
+ .endWith { _, player ->
+ addItemOrDrop(player, Items.MISCELLANEOUS_KEY_1586)
+ }
+ }
+
+ returnJoin.builder()
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GruborDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GruborDialogue.kt
new file mode 100644
index 000000000..958d893b5
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/GruborDialogue.kt
@@ -0,0 +1,87 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.NPCs
+
+@Initializable
+class GruborDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun newInstance(player: Player): DialoguePlugin {
+ return GruborDialogue(player)
+ }
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, GruborDialogueFile(), npc)
+ return false
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.GRUBOR_789)
+ }
+}
+
+class GruborDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+
+ b.onPredicate { player ->
+ getQuestStage(player, Quests.HEROES_QUEST) >= 2 &&
+ getAttribute(player, HeroesQuest.attributeGruborLetsYouIn, false) &&
+ HeroesQuest.isBlackArm(player)
+ }
+ .playerl("Hi.")
+ .npcl("Hi, I'm a little busy right now.")
+ .end()
+
+ b.onPredicate { player ->
+ getQuestStage(player, Quests.HEROES_QUEST) >= 2 &&
+ !getAttribute(player, HeroesQuest.attributeGruborLetsYouIn, false) &&
+ HeroesQuest.isBlackArm(player)
+ }
+ .npcl(FacialExpression.THINKING, "Yes? What do you want?")
+ .options()
+ .let { optionBuilder ->
+
+ optionBuilder.option_playerl("Rabbit's foot.")
+ .npcl("Eh? What are you on about? Go away!")
+ .end()
+
+ optionBuilder.option_playerl("Four leaved clover.")
+ .npcl("Oh you're one of the gang are you? Ok, hold up a second, I'll just let you in through here.")
+ .linel("You hear the door being unbarred from inside.")
+ .endWith { _, player ->
+ setAttribute(player, HeroesQuest.attributeGruborLetsYouIn, true)
+ }
+
+ optionBuilder.option_playerl("Lucky horseshoe.")
+ .npcl("Eh? What are you on about? Go away!")
+ .end()
+
+ optionBuilder.option_playerl("Black cat.")
+ .npcl("Eh? What are you on about? Go away!")
+ .end()
+ }
+
+
+ b.onPredicate { _ -> true }
+ .npcl(FacialExpression.THINKING, "Yes? What do you want?")
+ .options()
+ .let { optionBuilder ->
+
+ optionBuilder.option_playerl("Would you like your hedges trimming?")
+ .npcl("Eh? Don't be daft! We don't even HAVE any hedges!")
+ .end()
+
+ optionBuilder.option_playerl("I want to come in.")
+ .npcl("No, go away.")
+ .end()
+
+ optionBuilder.option_playerl("Do you want to trade?")
+ .npcl("No, I'm busy.")
+ .end()
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/HeroesQuest.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/HeroesQuest.kt
new file mode 100644
index 000000000..7eadbf5e5
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/HeroesQuest.kt
@@ -0,0 +1,262 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import content.region.misthalin.varrock.quest.shieldofarrav.ShieldofArrav
+import core.api.*
+import core.game.node.entity.player.Player
+import core.game.node.entity.player.link.quest.Quest
+import core.game.node.entity.skill.Skills
+import core.plugin.Initializable
+import org.rs09.consts.Items
+
+/**
+ * Heroes' Quest
+ */
+@Initializable
+class HeroesQuest : Quest(Quests.HEROES_QUEST,75, 74, 1, 188, 0, 1, 15) {
+ /**
+ * Do note: "other players can help you even if they have already finished Heroes' Quest"
+ * 1 - Talked to Achietties to start the quest
+ *
+ * PHOENIX
+ * 2 - Talked to Katrine
+ * 3 - Talked to Alfonse
+ * 4 - Talked to Charlie
+ * 5 - HIDDEN Killed Grip (You need key from Black Arm Friend)
+ * 6 - Talked to Katrine with Candlestick
+ * BLACK ARM
+ * 2 - Talked to Straven
+ * 3 - Talked to Trobert
+ * 4 - Talked to Garv
+ * 5 - HIDDEN Unlocked Chest (You need Grip killed from Phoenix Friend)
+ * 6 - Talked to Katrine with Candlestick
+ *
+ * 100 - Achiettes with all the items
+ */
+
+ companion object {
+ const val attributeGruborLetsYouIn = "/save:quest:heroesquest-gruborletsyouin"
+ const val attributeGripTookPapers = "/save:quest:heroesquest-griptookpapers"
+ const val attributeGripSaidDuties = "/save:quest:heroesquest-gripsaidduties"
+ const val attributeHasOpenedBackdoor = "/save:quest:heroesquest-hasopenedbackdoor"
+ const val attributeHasOpenedChestDoor = "/save:quest:heroesquest-hasopenedchestdoor"
+
+ fun checkQuestsAreComplete(player: Player): Boolean {
+ return isQuestComplete(player, Quests.SHIELD_OF_ARRAV) &&
+ isQuestComplete(player, Quests.LOST_CITY) &&
+ isQuestComplete(player, Quests.MERLINS_CRYSTAL) &&
+ isQuestComplete(player, Quests.DRAGON_SLAYER) &&
+ getQuestPoints(player) >= 55
+ }
+
+ /** Abstraction of Shield of Arrav isPhoenix function */
+ fun isPhoenix(player: Player): Boolean {
+ return ShieldofArrav.isPhoenix(player)
+ }
+
+ /** Abstraction of Shield of Arrav isBlackArm function */
+ fun isBlackArm(player: Player): Boolean {
+ return ShieldofArrav.isBlackArm(player)
+ }
+
+ fun hasRequirements(player: Player): Boolean {
+ return arrayOf(
+ hasLevelStat(player, Skills.HERBLORE, 25),
+ hasLevelStat(player, Skills.MINING, 50),
+ hasLevelStat(player, Skills.FISHING, 53),
+ hasLevelStat(player, Skills.COOKING, 53),
+ isQuestComplete(player, Quests.SHIELD_OF_ARRAV),
+ isQuestComplete(player, Quests.LOST_CITY),
+ isQuestComplete(player, Quests.MERLINS_CRYSTAL),
+ isQuestComplete(player, Quests.DRAGON_SLAYER),
+ getQuestPoints(player) >= 55,
+ ).all { it }
+ }
+
+ fun allItemsInInventory(player: Player): Boolean {
+ return inInventory(player, Items.FIRE_FEATHER_1583) &&
+ inInventory(player, Items.LAVA_EEL_2149) &&
+ inInventory(player, Items.THIEVES_ARMBAND_1579)
+ }
+ }
+
+ override fun drawJournal(player: Player?, stage: Int) {
+ super.drawJournal(player, stage)
+ var line = 12
+ var stage = getStage(player)
+
+ var started = getQuestStage(player!!, Quests.HEROES_QUEST) > 0
+
+ if(!started){
+ if (checkQuestsAreComplete(player)) {
+ line(player, "I can start this quest by speaking to !!Achietties?? at the", line++)
+ line(player, "!!Heroes' Guild?? located !!North?? of !!Taverly??", line++)
+ line(player, "as all required quests are complete, and I have enough QP.", line++)
+ } else {
+ line(player, "I can start this quest by speaking to !!Achietties?? at the", line++)
+ line(player, "!!Heroes' Guild?? located !!North?? of !!Taverly?? after completing", line++)
+ line(player, "!!The Shield of Arrav??", line++, isQuestComplete(player, Quests.SHIELD_OF_ARRAV))
+ line(player, "!!The Lost City??", line++, isQuestComplete(player, Quests.LOST_CITY))
+ line(player, "!!Merlin's Crystal??", line++, isQuestComplete(player, Quests.MERLINS_CRYSTAL))
+ line(player, "!!The Dragon Slayer??", line++, isQuestComplete(player, Quests.DRAGON_SLAYER))
+ line(player, "!!and gaining 55 Quest Points??", line++, getQuestPoints(player) >= 55)
+ }
+ line(player, "To complete this quest I need:", line++, false)
+ line(player, "!!Level 25 Herblore??", line++, hasLevelStat(player, Skills.HERBLORE, 25))
+ line(player, "!!Level 50 Mining??", line++, hasLevelStat(player, Skills.MINING, 50))
+ line(player, "!!Level 53 Fishing??", line++, hasLevelStat(player, Skills.FISHING, 53))
+ line(player, "!!Level 53 Cooking??", line++, hasLevelStat(player, Skills.COOKING, 53))
+ } else if (stage < 100) {
+ line(player, "!!Achietties?? will let me into the !!Heroes' Guild?? if I can get:", line++)
+
+ // This is completely dependent on what you have in your inventory.
+ if (inInventory(player, Items.FIRE_FEATHER_1583)) {
+ line(player, "An Entranan Firebird Feather - I now have one on me!", line++, true)
+ } else {
+ line(player, "An !!Entranan Firebird Feather?? - I should check on !!Entrana??", line++)
+ }
+
+ // This is completely dependent on what you have in your inventory.
+ if (inInventory(player, Items.LAVA_EEL_2149)) {
+ line(player, "A cooked lava eel - I now have one on me!", line++, true)
+ } else {
+ line(player, "A !!cooked lava eel?? - I should speak to a !!Fishing Expert??", line++)
+ }
+
+ if (isPhoenix(player)) {
+ if (inInventory(player, Items.THIEVES_ARMBAND_1579)) {
+ line(player, "A Master Thieves Armband - I now have one on me!", line++, true)
+ } else {
+ line(player, "A !!Master Thieves Armband?? - the !!Phoenix Gang can help me??", line++)
+ }
+
+ if (!inInventory(player, Items.THIEVES_ARMBAND_1579)) {
+ if (stage >= 2) {
+ line(player, "I spoke to Straven about the Master Thieves Armband.", line++, true)
+ }
+
+ if (stage >= 3) {
+ line(player, "Then I told Alfonse the password 'Gherkin'.", line++, true)
+ } else if (stage >= 2) {
+ line(player, "He told me I can get one by stealing !!Pete's Candlestick??", line++)
+ line(player, "I should use the password he gave me at !!Brimhaven??", line++)
+ }
+
+ if (stage >= 4) {
+ line(player, "Charlie told me about a secret door into Scarface Pete's", line++, true)
+ line(player, "hideout, but he couldn't find a way of getting through it.", line++, true)
+ } else if (stage >= 3) {
+ line(player, "He said, secretly speak to !!Charlie?? round the back.", line++)
+ }
+
+ if (stage >= 6) {
+ line(player, "A rival gang member collected a candlestick for me after I", line++, true)
+ line(player, "killed Grip and got the Treasure Room key for them.", line++, true)
+ line(player, "I gave Straven Scarface Pete's candlestick, and in reward", line++, true)
+ line(player, "he gave me a Master Thieves Armband to prove my skills.", line++, true)
+ } else if (stage >= 4) {
+ line(player, "Maybe !!another player?? can help to get through this !!door???.", line++)
+ }
+ }
+ }
+ if (isBlackArm(player)) {
+ if (inInventory(player, Items.THIEVES_ARMBAND_1579)) {
+ line(player, "A Master Thieves Armband - I now have one on me!", line++, true)
+ } else {
+ line(player, "A !!Master Thieves Armband?? - the !!Black Arms can help me??", line++)
+ }
+
+ if (!inInventory(player, Items.THIEVES_ARMBAND_1579)) {
+ if (stage >= 2) {
+ line(player, "I spoke to Katrine about the Master Thieves Armband.", line++, true)
+ }
+
+ if (stage >= 3) {
+ line(player, "I used the Black Arm password to enter the Brimhaven HQ.", line++, true)
+ } else if (stage >= 2) {
+ line(player, "She told me I can get one by stealing !!Pete's Candlestick??", line++)
+ line(player, "I should use the password she gave me at !!Brimhaven??", line++)
+ }
+
+ if (stage >= 4) {
+ line(player, "I managed to pass myself off as Hartigen and enter the", line++, true)
+ line(player, "HQ.", line++, true)
+ } else if (stage >= 3) {
+ line(player, "I need to disguise myself as !!Hartigen the Black Knight?? in", line++)
+ line(player, "order to get inside !!Scarface Pete's hideout??", line++)
+ }
+
+ if (stage >= 6) {
+ line(player, "I collected the candlesticks with the Treasure Room key", line++, true)
+ line(player, "after a rival gang member killed Grip.", line++, true)
+ line(player, "I gave Katrine Scarface Pete's candlestick, and in reward", line++, true)
+ line(player, "she gave me a Master Thieves Armband to prove my skills.", line++, true)
+ } else if (stage >= 4) {
+ line(player, "I can move around the hideout, but now I need Grips keys", line++)
+ line(player, "to get into the treasure room and get the candlesticks.", line++)
+ line(player, "I need !!another player's help?? with this, as it's so risky.", line++)
+ }
+ }
+ }
+
+ if (allItemsInInventory(player)) {
+ line(player, "Now that I have !!all the required items??, I should go and speak to", line++)
+ line(player, "!!Achietties?? and give them to her", line++)
+ }
+ } else {
+ // Everything above is replaced by this.
+ line(player, "I gave Achietties an Entranan Firebird Feather, A cooked", line++, true)
+ line(player, "lava eel from a dangerous fishing spot and after some", line++, true)
+ line(player, "difficulty, a Master Thief Armband.", line++, true)
+ line(player, "Once I had handed these over to Achietties I had proved", line++, true)
+ line(player, "myself worthy of entrance to the Heroes' Guild.", line++, true)
+ line++
+ line++
+ line(player," QUEST COMPLETE!", line)
+ }
+ }
+
+ override fun reset(player: Player) {
+ if (getQuestStage(player, Quests.HEROES_QUEST) == 0) {
+ removeAttribute(player, attributeGruborLetsYouIn)
+ removeAttribute(player, attributeGripTookPapers)
+ removeAttribute(player, attributeGripSaidDuties)
+ removeAttribute(player, attributeHasOpenedBackdoor)
+ removeAttribute(player, attributeHasOpenedChestDoor)
+
+ // For testing: if you set quest stage to 0, it will switch your gang (blackarm <-> phoenix)
+ // Remember to set stage to 0 twice to keep your gang.
+ println("Swapping gang for Heroes Quest.")
+ ShieldofArrav.swapGang(player)
+ }
+ }
+
+ override fun finish(player: Player) {
+ var ln = 10
+ super.finish(player)
+ player.packetDispatch.sendString("You have completed the Heroes Quest!", 277, 4)
+ player.packetDispatch.sendItemZoomOnInterface(Items.DRAGON_BATTLEAXE_1377, 240, 277, 5)
+
+ drawReward(player,"1 Quest Point", ln++)
+ drawReward(player,"Access to the Heroes' Guild", ln++)
+ drawReward(player,"A total of 29,232 XP spread", ln++)
+ drawReward(player,"over twelve skills", ln++)
+
+ rewardXP(player, Skills.ATTACK, 3075.0)
+ rewardXP(player, Skills.DEFENCE, 3075.0)
+ rewardXP(player, Skills.STRENGTH, 3075.0)
+ rewardXP(player, Skills.HITPOINTS, 3075.0)
+ rewardXP(player, Skills.RANGE, 2075.0)
+ rewardXP(player, Skills.FISHING, 2725.0)
+ rewardXP(player, Skills.COOKING, 2825.0)
+ rewardXP(player, Skills.WOODCUTTING, 1575.0)
+ rewardXP(player, Skills.FIREMAKING, 1575.0)
+ rewardXP(player, Skills.SMITHING, 2725.0)
+ rewardXP(player, Skills.MINING, 2575.0)
+ rewardXP(player, Skills.HERBLORE, 1325.0)
+ }
+
+ override fun newInstance(`object`: Any?): Quest {
+ return this
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/HeroesQuestListener.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/HeroesQuestListener.kt
new file mode 100644
index 000000000..8764e7ba2
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/HeroesQuestListener.kt
@@ -0,0 +1,155 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.DialogueFile
+import core.game.dialogue.FacialExpression
+import core.game.dialogue.Topic
+import core.game.global.action.DoorActionHandler
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.node.entity.combat.ImpactHandler
+import core.game.node.entity.npc.NPC
+import core.game.node.item.GroundItem
+import core.game.world.map.Location
+import core.tools.END_DIALOGUE
+import core.tools.START_DIALOGUE
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+import org.rs09.consts.Scenery
+
+class HeroesQuestListener: InteractionListener {
+
+ override fun defineListeners() {
+ // Black arm gang office door.
+ on(Scenery.DOOR_2626, IntType.SCENERY, "open") { player, node ->
+ if (getQuestStage(player, Quests.HEROES_QUEST) >= 2 &&
+ getAttribute(player, HeroesQuest.attributeGruborLetsYouIn, false) &&
+ HeroesQuest.isBlackArm(player)) {
+ DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
+ } else {
+ openDialogue(player, GruborDialogueFile(), NPC(NPCs.GRUBOR_789))
+ }
+ return@on true
+ }
+
+ // Kitchen entrance
+ on(Scenery.DOOR_2628, IntType.SCENERY, "open") { player, node ->
+ if (getQuestStage(player, Quests.HEROES_QUEST) >= 3 && HeroesQuest.isPhoenix(player)) {
+ DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
+ } else {
+ sendDialogue(player, "This door is locked.")
+ }
+ return@on true
+ }
+
+ // Kitchen wall
+ on(Scenery.WALL_2629, IntType.SCENERY, "push") { player, node ->
+ if (getQuestStage(player, Quests.HEROES_QUEST) >= 4 && HeroesQuest.isPhoenix(player)) {
+ DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
+ } else {
+ openDialogue(player, CharlieTheCookDialogueFile(), NPC(NPCs.CHARLIE_THE_COOK_794))
+ }
+ return@on true
+ }
+
+ // Mansion frontdoor
+ on(Scenery.DOOR_2627, IntType.SCENERY, "open") { player, node ->
+ if (getQuestStage(player, Quests.HEROES_QUEST) >= 4 && HeroesQuest.isBlackArm(player)) {
+ DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
+ } else {
+ openDialogue(player, GarvDialogueFile(), NPC(NPCs.GARV_788))
+ }
+ return@on true
+ }
+
+ // Cupboard
+
+ on(Scenery.CUPBOARD_2636, IntType.SCENERY, "search") { player, node ->
+ openDialogue(player, object : DialogueFile() {
+ override fun handle(componentID: Int, buttonID: Int) {
+ when (stage) {
+ START_DIALOGUE -> sendNPCDialogue(player, NPCs.PIRATE_GUARD_799, "I don't think Mr Grip will like you opening that. That's his private drinks cabinet.") .also { stage++ }
+ 1 -> showTopics(
+ Topic(FacialExpression.NEUTRAL, "He won't notice me having a quick look.", 2),
+ Topic(FacialExpression.NEUTRAL, "Ok, I'll leave it.", END_DIALOGUE)
+ )
+ 2 -> end().also {
+ val gripNpc = findNPC(NPCs.GRIP_792)
+ sendChat(gripNpc!!, "Stay out of my drinks cabinet!")
+ forceWalk(gripNpc, Location(2777, 3198, 0), "smart")
+ }
+ }
+ }
+ })
+ return@on true
+ }
+
+ // Mansion backdoor
+ on(Scenery.DOOR_2622, IntType.SCENERY, "open") { player, node ->
+ if (getAttribute(player, HeroesQuest.attributeHasOpenedBackdoor, false)) {
+ DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
+ } else {
+ sendDialogue(player, "This door is locked.")
+ }
+ return@on true
+ }
+ onUseWith(IntType.SCENERY, Items.MISCELLANEOUS_KEY_1586, Scenery.DOOR_2622) { player, used, with ->
+ setAttribute(player, HeroesQuest.attributeHasOpenedBackdoor, true)
+ DoorActionHandler.handleAutowalkDoor(player, with.asScenery())
+ return@onUseWith true
+ }
+
+ // Chest door
+ on(Scenery.DOOR_2621, IntType.SCENERY, "open") { player, node ->
+ if (getAttribute(player, HeroesQuest.attributeHasOpenedChestDoor, false)) {
+ DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
+ } else {
+ sendDialogue(player, "This door is locked.")
+ }
+ return@on true
+ }
+ onUseWith(IntType.SCENERY, Items.GRIPS_KEY_RING_1588, Scenery.DOOR_2621) { player, used, with ->
+ setAttribute(player, HeroesQuest.attributeHasOpenedChestDoor, true)
+ DoorActionHandler.handleAutowalkDoor(player, with.asScenery())
+ return@onUseWith true
+ }
+
+ // Chest
+ on(Scenery.CHEST_2632, IntType.SCENERY, "open"){ player, node ->
+ replaceScenery(node as core.game.node.scenery.Scenery, Scenery.CHEST_2633, -1)
+ return@on true
+ }
+ on(Scenery.CHEST_2633, IntType.SCENERY, "close"){ player, node ->
+ replaceScenery(node as core.game.node.scenery.Scenery, Scenery.CHEST_2632, -1)
+ return@on true
+ }
+ on(Scenery.CHEST_2633, IntType.SCENERY, "search"){ player, node ->
+ if (inInventory(player, Items.PETES_CANDLESTICK_1577)) {
+ sendMessage(player, "You search the chest but find nothing.")
+ } else {
+ if (getQuestStage(player, Quests.HEROES_QUEST) == 4) {
+ setQuestStage(player, Quests.HEROES_QUEST, 5)
+ }
+ sendDialogue(player, "You find two candlesticks in the chest. So that will be one for you, and one for the person who killed Grip for you.")
+ addItemOrDrop(player, Items.PETES_CANDLESTICK_1577, 2)
+ }
+ return@on true
+ }
+
+ //
+ on(Items.FIRE_FEATHER_1583, IntType.GROUNDITEM, "take") { player, groundItem ->
+ if (inEquipment(player, Items.ICE_GLOVES_1580)) {
+ addItem(player, Items.FIRE_FEATHER_1583)
+ removeGroundItem(groundItem as GroundItem)
+ } else {
+ sendChat(player, "Ouch!")
+ player.impactHandler.manualHit(player, 9, ImpactHandler.HitsplatType.NORMAL)
+ sendMessage(player, "It is too hot to take. You need something cold to pick it up with.")
+ }
+ return@on true
+ }
+
+ // OilFishingRodListener.kt + DrinkBlamishOilListener.kt + FinishedPotion.java
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/KatrineDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/KatrineDialogueFile.kt
new file mode 100644
index 000000000..f5c3f1d56
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/KatrineDialogueFile.kt
@@ -0,0 +1,127 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.*
+import org.rs09.consts.Items
+
+class KatrineDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ // 0 is handled by default in the old KatrineDialogue.
+ b.onQuestStages(Quests.HEROES_QUEST, 1)
+ .playerl("Hey.")
+ .npcl("Hey.")
+ .options()
+ .let { optionBuilder ->
+
+ optionBuilder.option_playerl("Who are all those people in there?")
+ .npcl("They're just various rogues and thieves.")
+ .playerl("They don't say a lot...")
+ .npcl("Nope.")
+ .end()
+
+ optionBuilder.option_playerl("Is there any way I can get the rank of master thief?")
+ .npcl("Master thief? Ain't we the ambitious one!")
+ .npcl("Well, you're gonna have to do something pretty amazing.")
+ .playerl("Anything you can suggest?")
+ .npcl("Well, some of the MOST coveted prizes in thiefdom right now are in the pirate town of Brimhaven on Karamja.")
+ .npcl("The pirate leader Scarface Pete has a pair of extremely valuable candlesticks.")
+ .npcl("His security is VERY good.")
+ .npcl("We, of course, have gang members in a town like Brimhaven who may be able to help you.")
+ .npcl("Visit our hideout in the alleyway on palm street.")
+ .npcl("To get in you will need to tell them the secret password 'four leaved clover'.")
+ .endWith { _, player ->
+ if(getQuestStage(player, Quests.HEROES_QUEST) == 1) {
+ setQuestStage(player, Quests.HEROES_QUEST, 2)
+ }
+ }
+
+ }
+
+ // This is not authentic, she falls back to a boring default conversation, but I guess people might need help during the quest
+ b.onQuestStages(Quests.HEROES_QUEST, 2, 3, 4)
+ .playerl("What am I supposed to be doing again?")
+ .npcl("You told me you wanted to get the rank of master thief! Now pay attention.")
+ .npcl("Some of the MOST coveted prizes in thiefdom right now are in the pirate town of Brimhaven on Karamja.")
+ .npcl("The pirate leader Scarface Pete has a pair of extremely valuable candlesticks.")
+ .npcl("His security is VERY good.")
+ .npcl("We, of course, have gang members in a town like Brimhaven who may be able to help you.")
+ .npcl("Visit our hideout in the alleyway on palm street.")
+ .npcl("To get in you will need to tell them the secret password 'four leaved clover'.")
+ .end()
+
+ // As FYI, the fallback for 2,3,4 is
+ /**
+ * .options()
+ * .let { optionBuilder ->
+ * optionBuilder.option_playerl("Who are all those people in there?")
+ * .npcl("They're just various rogues and thieves.")
+ * .playerl("They don't say a lot...")
+ * .npcl("Nope.")
+ * .end()
+ * optionBuilder.option("Teach me to be a top class criminal!")
+ * .playerl("Teach me to be a top class criminal.")
+ * .npcl("Teach yourself.")
+ * .end()
+ *
+ *
+ *
+ * Player:
+ * I have a candlestick now!
+ * Katrine:
+ * Good for you. I'll give a master thief's armband to the one who retrieved that. I know it wasn't you.
+ */
+
+
+ b.onQuestStages(Quests.HEROES_QUEST, 5)
+ .branch { player ->
+ return@branch if (inInventory(player, Items.PETES_CANDLESTICK_1577)) { 1 } else { 0 }
+ }.let { branch ->
+ branch.onValue(1)
+ .options()
+ .let { optionBuilder ->
+ optionBuilder.option_playerl("Who are all those people in there?")
+ .npcl("They're just various rogues and thieves.")
+ .playerl("They don't say a lot...")
+ .npcl("Nope.")
+ .end()
+ optionBuilder.option("I have a candlestick now.")
+ .playerl("I have a candlestick now!")
+ .npcl("Wow... is... it REALLY it?")
+ .npcl("This really is a FINE bit of thievery.")
+ .npcl("Us thieves have been trying to get hold of this one for a while!")
+ .npc("You wanted to be ranked as a master thief didn't you?", "Well, I guess this just about ranks as good enough!")
+ .linel("Katrine gives you a master thief armband.")
+ .endWith { _, player ->
+ if (removeItem(player, Items.PETES_CANDLESTICK_1577)) {
+ addItemOrDrop(player, Items.THIEVES_ARMBAND_1579)
+ if (getQuestStage(player, Quests.HEROES_QUEST) == 5) {
+ setQuestStage(player, Quests.HEROES_QUEST, 6)
+ }
+ }
+ }
+
+ branch.onValue(0)
+ .playerl("What am I supposed to be doing again?")
+ .npcl("You told me you wanted to get the rank of master thief! Now pay attention.")
+ .npcl("Some of the MOST coveted prizes in thiefdom right now are in the pirate town of Brimhaven on Karamja.")
+ .npcl("The pirate leader Scarface Pete keeps an extremely valuable candlesticks.")
+ .npcl("His security is VERY good.")
+ .npcl("We, of course, have gang members in a town like Brimhaven who may be able to help you.")
+ .npcl("Visit our hideout in the alleyway on palm street.")
+ .npcl("To get in you will need to tell them the secret password 'four leaved clover'.")
+ .end()
+ }
+ }
+
+ // I lost the armband and some stupid default shit.
+ b.onQuestStages(Quests.HEROES_QUEST, 6)
+ .playerl("I have lost my master thief's armband...")
+ .npcl("Lucky I 'ave a spare ain't it? Don't lose it again.")
+ .endWith { _, player ->
+ addItemOrDrop(player, Items.THIEVES_ARMBAND_1579)
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/StravenDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/StravenDialogueFile.kt
new file mode 100644
index 000000000..68d236905
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/StravenDialogueFile.kt
@@ -0,0 +1,73 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.*
+import org.rs09.consts.Items
+
+class StravenDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ // 0 is handled by default in the old StravenDialogue.
+ b.onQuestStages(Quests.HEROES_QUEST, 1)
+ .playerl("How would I go about getting a Master Thief armband?")
+ .npcl("Ooh... tricky stuff. Took me YEARS to get that rank.")
+ .npcl("Well, what some of the more aspiring thieves in our gang are working on right now is to steal some very valuable candlesticks from Scarface Pete - the pirate leader on Karamja.")
+ .npcl("His security is excellent, and the target very valuable so that might be enough to get you the rank.")
+ .npcl("Go talk to our man Alfonse, the waiter in the Shrimp and Parrot.")
+ .npcl("Use the secret word 'gherkin' to show you're one of us.")
+ .endWith { _, player ->
+ if(getQuestStage(player, Quests.HEROES_QUEST) == 1) {
+ setQuestStage(player, Quests.HEROES_QUEST, 2)
+ }
+ }
+
+ b.onQuestStages(Quests.HEROES_QUEST, 2, 3, 4)
+ .playerl("What am I supposed to be doing again?")
+ .npcl("You told me you wanted to get a Master thief's armband! Now pay attention.")
+ .npcl("Some of the more aspiring thieves in our gang are working on right now is to steal some very valuable candlesticks from Scarface Pete - the pirate leader on Karamja.")
+ .npcl("His security is excellent, and the target very valuable so that might be enough to get you the rank.")
+ .npcl("Go talk to our man Alfonse, the waiter in the Shrimp and Parrot.")
+ .npcl("Use the secret word 'gherkin' to show you're one of us.")
+ .end()
+
+
+ b.onQuestStages(Quests.HEROES_QUEST, 5)
+ .branch { player ->
+ return@branch if (inInventory(player, Items.PETES_CANDLESTICK_1577)) { 1 } else { 0 }
+ }.let { branch ->
+ branch.onValue(1)
+ .playerl("I have retrieved a candlestick!")
+ .npcl("Hmmm. Not bad, not bad. Let's see it, make sure it's genuine.")
+ .linel("You hand Straven the candlestick.")
+ .playerl("So is this enough to get me a Master Thief armband?")
+ .npcl("Hmm... I dunno... Aww, go on then. I suppose I'm in a generous mood today.")
+ .linel("Straven hands you a Master Thief armband.")
+ .endWith { _, player ->
+ if (removeItem(player, Items.PETES_CANDLESTICK_1577)) {
+ addItemOrDrop(player, Items.THIEVES_ARMBAND_1579)
+ if (getQuestStage(player, Quests.HEROES_QUEST) == 5) {
+ setQuestStage(player, Quests.HEROES_QUEST, 6)
+ }
+ }
+ }
+
+ branch.onValue(0)
+ .playerl("What am I supposed to be doing again?")
+ .npcl("You told me you wanted to get a Master thief's armband! Now pay attention.")
+ .npcl("Some of the more aspiring thieves in our gang are working on right now is to steal some very valuable candlesticks from Scarface Pete - the pirate leader on Karamja.")
+ .npcl("His security is excellent, and the target very valuable so that might be enough to get you the rank.")
+ .npcl("Go talk to our man Alfonse, the waiter in the Shrimp and Parrot.")
+ .npcl("Use the secret word 'gherkin' to show you're one of us.")
+ .end()
+ }
+
+ // I lost the armband and some stupid default shit.
+ b.onQuestStages(Quests.HEROES_QUEST, 6)
+ .playerl("I'm afraid I've lost my master thief's armband.")
+ .npcl("Lucky for you I have a spare. Don't lose it again!")
+ .endWith { _, player ->
+ addItemOrDrop(player, Items.THIEVES_ARMBAND_1579)
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/TrobertDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/TrobertDialogue.kt
new file mode 100644
index 000000000..12561ad44
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/heroesquest/TrobertDialogue.kt
@@ -0,0 +1,92 @@
+package content.region.asgarnia.burthorpe.quest.heroesquest
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.*
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+
+@Initializable
+class TrobertDialogue(player: Player? = null) : DialoguePlugin(player){
+
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, TrobertDialogueFile(), npc)
+ return true
+ }
+
+ override fun newInstance(player: Player?): DialoguePlugin {
+ return TrobertDialogue(player)
+ }
+
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.TROBERT_1884)
+ }
+}
+
+class TrobertDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ // Technically this won't happen since you have to get past Grubor.
+ b.onQuestStages(Quests.HEROES_QUEST, 0, 1)
+ .npcl("Welcome to our Brimhaven headquarters. I'm Trobert and I'm in charge here.")
+ .playerl("Pleased to meet you.")
+ .npcl("Likewise.")
+ .end()
+
+ b.onQuestStages(Quests.HEROES_QUEST, 2)
+ .npcl("Welcome to our Brimhaven headquarters. I'm Trobert and I'm in charge here.")
+ .options()
+ .let { optionBuilder ->
+ val continuePath = b.placeholder()
+ optionBuilder.option("So can you help me get Scarface Pete's candlesticks?")
+ .goto(continuePath)
+ optionBuilder.option_playerl("Pleased to meet you.")
+ .npcl("Likewise.")
+ .goto(continuePath)
+ return@let continuePath.builder()
+ }
+ .playerl("So can you help me get Scarface Pete's candlesticks?")
+ .npcl("Well, we have made some progress there. We know that one of the only keys to Pete's treasure room is carried by Grip, the head guard, so we thought it might be good to get close to him somehow.")
+ .npcl("Grip was taking on a new deputy called Hartigen, an Asgarnian Black Knight who was deserting the Black Knight Fortress and seeking new employment here on Brimhaven.")
+ .npcl("We managed to waylay him on the journey here, and steal his I.D. papers. Now all we need is to find somebody willing to impersonate him and take the deputy role to get that key for us.")
+ .options()
+ .let { optionBuilder ->
+
+ optionBuilder.option_playerl("I volunteer to undertake that mission!")
+ .npcl("Good good. Well, here's the ID papers, take them and introduce yourself to the guards at Scarface Pete's mansion, we'll have that treasure in no time.")
+ .endWith { _, player ->
+ addItemOrDrop(player, Items.ID_PAPERS_1584)
+ if(getQuestStage(player, Quests.HEROES_QUEST) == 2) {
+ setQuestStage(player, Quests.HEROES_QUEST, 3)
+ }
+ }
+
+ optionBuilder.option_playerl("Well, good luck then.")
+ .npcl("Someone will show up eventually.")
+ .end()
+ }
+
+ b.onQuestStages(Quests.HEROES_QUEST, 3, 4, 5)
+ .branch { player ->
+ return@branch if (inInventory(player, Items.ID_PAPERS_1584)) { 1 } else { 0 }
+ }.let { branch ->
+ branch.onValue(1)
+ .npcl("How's it going?")
+ .playerl("Fine, thanks.")
+ .end()
+ branch.onValue(0)
+ .playerl("I have lost Hartigen's ID papers.")
+ .npcl("Well, that was careless of you, wasn't it? Fortunately for you, he had a spare. Take this one, but please try to be more careful with this one.")
+ .endWith { _, player ->
+ addItemOrDrop(player, Items.ID_PAPERS_1584)
+ }
+ }
+
+ b.onQuestStages(Quests.HEROES_QUEST, 6, 100)
+ .npcl("How's it going?")
+ .playerl("Fine, thanks.")
+ .end()
+
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/BerryNpc.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/BerryNpc.kt
index 116a95063..0b04d9ba1 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/BerryNpc.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/BerryNpc.kt
@@ -1,8 +1,8 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
+import content.data.Quests
import core.api.isQuestInProgress
import core.api.produceGroundItem
-import core.api.transformNpc
import core.game.node.entity.Entity
import core.game.node.entity.combat.CombatStyle
import core.game.node.entity.npc.AbstractNPC
@@ -44,7 +44,7 @@ class BerryNpc(id: Int = 0, location: Location? = null) : AbstractNPC(id, locati
}
override fun finalizeDeath(killer: Entity?) {
- if (isQuestInProgress(killer as Player, TrollStronghold.questName, 8, 10)) {
+ if (isQuestInProgress(killer as Player, Quests.TROLL_STRONGHOLD, 8, 10)) {
produceGroundItem(killer, Items.CELL_KEY_2_3137, 1, this.location)
}
super.finalizeDeath(killer)
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadDialogue.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadDialogue.kt
index 2a2b2df0a..a1d76a63e 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadDialogue.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
+import content.data.Quests
import core.api.*
import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
@@ -13,7 +14,7 @@ import org.rs09.consts.NPCs
@Initializable
class DadDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
- when (getQuestStage(player!!, TrollStronghold.questName)) {
+ when (getQuestStage(player!!, Quests.TROLL_STRONGHOLD)) {
in 3..4 -> {
when (stage) {
START_DIALOGUE -> npcl(FacialExpression.OLD_HAPPY, "What tiny human do in troll arena? Dad challenge human to fight!").also { stage++ }
@@ -27,7 +28,7 @@ class DadDialogue(player: Player? = null) : DialoguePlugin(player) {
3 -> npcl(FacialExpression.OLD_HAPPY, "Tiny human brave. Dad squish!").also { stage++ }
4 -> npc!!.attack(player).also {
npc!!.skills.lifepoints = npc!!.skills.maximumLifepoints // Reset dad to max hitpoints.
- setQuestStage(player!!, TrollStronghold.questName, 4)
+ setQuestStage(player!!, Quests.TROLL_STRONGHOLD, 4)
stage = END_DIALOGUE
}
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadDialogueFile.kt
index 69b9d5334..4428bf902 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadDialogueFile.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
+import content.data.Quests
import core.api.setQuestStage
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
@@ -13,14 +14,14 @@ class DadDialogueFile(private val dialogueNum: Int = 0) : DialogueFile() {
1 -> when (stage) {
START_DIALOGUE -> npcl(FacialExpression.OLD_HAPPY, "No human pass through arena without defeating Dad!").also {
stage = END_DIALOGUE
- setQuestStage(player!!, TrollStronghold.questName, 3)
+ setQuestStage(player!!, Quests.TROLL_STRONGHOLD, 3)
}
}
2 -> when (stage) {
START_DIALOGUE -> npcl(FacialExpression.OLD_NORMAL, "Tiny human brave. Dad squish!").also { stage++ }
1 -> npc!!.attack(player).also {
npc!!.skills.lifepoints = npc!!.skills.maximumLifepoints // Reset dad to max hitpoints.
- setQuestStage(player!!, TrollStronghold.questName, 4)
+ setQuestStage(player!!, Quests.TROLL_STRONGHOLD, 4)
stage = END_DIALOGUE
}
}
@@ -31,7 +32,7 @@ class DadDialogueFile(private val dialogueNum: Int = 0) : DialogueFile() {
Topic(FacialExpression.ANGRY_WITH_SMILE, "I'm not done yet! Prepare to die!", 2)
)
2 -> player!!.attack(npc).also {
- setQuestStage(player!!, TrollStronghold.questName, 5)
+ setQuestStage(player!!, Quests.TROLL_STRONGHOLD, 5)
stage = END_DIALOGUE
}
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadNpc.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadNpc.kt
index d7c5e58cd..f489aa1ed 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadNpc.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DadNpc.kt
@@ -1,7 +1,7 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
+import content.data.Quests
import core.api.*
-import core.game.node.Node
import core.game.node.entity.Entity
import core.game.node.entity.combat.BattleState
import core.game.node.entity.combat.CombatStyle
@@ -27,7 +27,7 @@ class DadNpc(id: Int = 0, location: Location? = null) : AbstractNPC(id, location
val player = entity.asPlayer()
// Attack Dad. If quest is done, you cannot attack Dad.
- when (getQuestStage(player, TrollStronghold.questName)) {
+ when (getQuestStage(player, Quests.TROLL_STRONGHOLD)) {
3 -> openDialogue(player, DadDialogueFile(2), this.asNpc()).also { return false }
4 -> { return attackable }
in 5 .. 100 -> sendMessage(player, "You don't need to fight him again.").also { return false }
@@ -44,8 +44,8 @@ class DadNpc(id: Int = 0, location: Location? = null) : AbstractNPC(id, location
if (opponent.skills.lifepoints < 30) {
player.properties.combatPulse.stop()
opponent.properties.combatPulse.stop()
- if (getQuestStage(player!!.asPlayer(), TrollStronghold.questName) == 4){
- setQuestStage(player!!.asPlayer(), TrollStronghold.questName, 5)
+ if (getQuestStage(player!!.asPlayer(), Quests.TROLL_STRONGHOLD) == 4){
+ setQuestStage(player!!.asPlayer(), Quests.TROLL_STRONGHOLD, 5)
}
submitWorldPulse(object : Pulse(){
var counter = 0
@@ -64,8 +64,8 @@ class DadNpc(id: Int = 0, location: Location? = null) : AbstractNPC(id, location
override fun finalizeDeath(killer: Entity?) {
// In case Dad gets one shotted to death.
super.finalizeDeath(killer)
- if (getQuestStage(killer!!.asPlayer(), TrollStronghold.questName) == 4){
- setQuestStage(killer!!.asPlayer(), TrollStronghold.questName, 5)
+ if (getQuestStage(killer!!.asPlayer(), Quests.TROLL_STRONGHOLD) == 4){
+ setQuestStage(killer!!.asPlayer(), Quests.TROLL_STRONGHOLD, 5)
}
}
override fun handleTickActions() {
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DenulthDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DenulthDialogueFile.kt
index 45318ea53..2575fc4b6 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DenulthDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DenulthDialogueFile.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
+import content.data.Quests
import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
@@ -14,7 +15,7 @@ import org.rs09.consts.Items
*/
class DenulthDialogueFile : DialogueFile() {
override fun handle(componentID: Int, buttonID: Int) {
- when (getQuestStage(player!!, TrollStronghold.questName)) {
+ when (getQuestStage(player!!, Quests.TROLL_STRONGHOLD)) {
in 1..7 -> {
when (stage) {
START_DIALOGUE -> npcl(FacialExpression.FRIENDLY, "How are you getting on with rescuing Godric?").also { stage++ }
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DunstanDialogueFile.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DunstanDialogueFile.kt
index aa9615ea7..4cd3a3f1a 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DunstanDialogueFile.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/DunstanDialogueFile.kt
@@ -1,30 +1,65 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
-import core.api.finishQuest
-import core.api.getQuestStage
+import content.data.Quests
+import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
import core.game.dialogue.Topic
+import core.game.node.item.Item
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
+import org.rs09.consts.Items
class DunstanDialogueFile : DialogueFile() {
override fun handle(componentID: Int, buttonID: Int) {
- when (getQuestStage(player!!, TrollStronghold.questName)) {
+ when (getQuestStage(player!!, Quests.TROLL_STRONGHOLD)) {
in 1..10 -> {
when (stage) {
START_DIALOGUE -> npcl(FacialExpression.FRIENDLY, "Have you managed to rescue Godric yet?").also { stage++ }
1 -> playerl(FacialExpression.FRIENDLY, "Not yet.").also { stage++ }
2 -> npcl(FacialExpression.FRIENDLY, "Please hurry! Who knows what they will do to him? Is there anything I can do in the meantime?").also { stage++ }
3 -> showTopics(
+ Topic(FacialExpression.THINKING, "Can you put some spikes on my Climbing boots?", 30),
Topic(FacialExpression.THINKING, "Is it OK if I use your anvil?", 10),
- Topic(FacialExpression.FRIENDLY, "Nothing, thanks.", END_DIALOGUE),
+ Topic(FacialExpression.NEUTRAL, "Nothing, thanks.", 20),
)
10 -> npcl(FacialExpression.FRIENDLY, "So you're a smithy are you?").also { stage++ }
11 -> playerl(FacialExpression.FRIENDLY, "I dabble.").also { stage++ }
12 -> npcl(FacialExpression.FRIENDLY, "A fellow smith is welcome to use my anvil!").also { stage++ }
13 -> playerl(FacialExpression.FRIENDLY, "Thanks!").also { stage++ }
14 -> npcl(FacialExpression.FRIENDLY, "Anything else before I get on with my work?").also { stage = 3 }
+ 20 -> npcl(FacialExpression.NEUTRAL, "All right. Speak to you later then.").also { stage = END_DIALOGUE }
+ 30 -> playerl("Can you put some spikes on my Climbing boots?").also { stage++ }
+ 31 -> npcl("For you, no problem.").also { stage++ }
+ 32 -> npc("Do you realise that you can only use the Climbing", "boots right now? The Spiked boots can only be used in", "the Icelands but no ones been able to get there for", "years!").also { stage++ }
+ 33 -> showTopics(
+ Topic(FacialExpression.NEUTRAL, "Yes, but I still want them.", 40, true),
+ Topic(FacialExpression.NEUTRAL, "Oh OK, I'll leave them thanks.", 43),
+ )
+ 40 -> {
+ if (inInventory(player!!, Items.CLIMBING_BOOTS_3105) && inInventory(player!!, Items.IRON_BAR_2351)) {
+ sendDoubleItemDialogue(player!!, Items.IRON_BAR_2351, Items.CLIMBING_BOOTS_3105, "You give Dunstan an Iron bar and the climbing boots.")
+ sendMessage(player!!, "You give Dunstan an Iron bar and the climbing boots.")
+ if (removeItem(player!!, Item(Items.CLIMBING_BOOTS_3105)) && removeItem(player!!, Item(Items.IRON_BAR_2351))) {
+ addItemOrDrop(player!!, Items.SPIKED_BOOTS_3107)
+ stage++
+ } else {
+ stage = END_DIALOGUE
+ }
+ } else if (inInventory(player!!, Items.CLIMBING_BOOTS_3105)){
+ npcl("Sorry, I'll need an iron bar to make the spikes.")
+ stage = 3
+ } else {
+ playerl("I don't have them on me.")
+ stage = 3
+ }
+ }
+ 41 -> sendItemDialogue(player!!, Items.SPIKED_BOOTS_3107, "Dunstan has given you the spiked boots.").also { stage++
+ sendMessage(player!!, "Dunstan has given you the spiked boots.")
+ }
+ 43 -> npcl(FacialExpression.FRIENDLY, "Anything else before I get on with my work?").also {
+ stage = 3
+ }
}
}
11 -> {
@@ -35,7 +70,7 @@ class DunstanDialogueFile : DialogueFile() {
3 -> npcl(FacialExpression.FRIENDLY, "I have very little to offer you by way of thanks, but perhaps you will accept these family heirlooms. They were found by my great-great-grandfather, but we still don't have any idea what they do.").also { stage++ }
4 -> {
stage = END_DIALOGUE
- finishQuest(player!!, TrollStronghold.questName)
+ finishQuest(player!!, Quests.TROLL_STRONGHOLD)
}
}
}
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollGeneralsNpc.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollGeneralsNpc.kt
index 1a0488e69..cee11ddfc 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollGeneralsNpc.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollGeneralsNpc.kt
@@ -1,10 +1,7 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
-import content.region.kandarin.quest.grandtree.ForemanDialogue
-import content.region.kandarin.quest.grandtree.TheGrandTree
+import content.data.Quests
import core.api.*
-import core.game.interaction.IntType
-import core.game.interaction.InteractionListener
import core.game.node.entity.Entity
import core.game.node.entity.npc.AbstractNPC
import core.game.node.entity.player.Player
@@ -25,7 +22,7 @@ class TrollGeneralsNpc(id: Int = 0, location: Location? = null) : AbstractNPC(id
}
override fun finalizeDeath(killer: Entity?) {
- if(isQuestInProgress(killer as Player, TrollStronghold.questName, 1, 7)) {
+ if(isQuestInProgress(killer as Player, Quests.TROLL_STRONGHOLD, 1, 7)) {
produceGroundItem(killer, Items.PRISON_KEY_3135, 1, this.location)
}
super.finalizeDeath(killer)
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollStronghold.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollStronghold.kt
index 971e7f392..6630bfa14 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollStronghold.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollStronghold.kt
@@ -1,51 +1,37 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
-import content.region.asgarnia.burthorpe.quest.deathplateau.DeathPlateau
import core.api.*
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.quest.Quest
import core.game.node.entity.skill.Skills
import core.plugin.Initializable
import org.rs09.consts.Items
+import content.data.Quests
/**
* Troll Stronghold Quest
* @author ovenbread
*/
@Initializable
-class TrollStronghold : Quest("Troll Stronghold",128, 127, 1, 317, 0, 1, 50) {
+class TrollStronghold : Quest(Quests.TROLL_STRONGHOLD,128, 127, 1, 317, 0, 1, 50) {
- /**
- * 1 - Talked to Denulth to start the quest
- * 3 - Enter the Arena with Dad
- * 4 - Start fighting Dad
- * 5 - Dad surrenders or gets killed, allowed to exit the Arena
- * 8 - Unlocks Prison Gate
- * 9 - Unlocked Mad Eadgar's cell
- * 10 - Unlocked Godric's cell
- * 11 - Unlocked both Mad Eadgar's and Godric's cell
- * 100 - Finish at Dunstan
- */
- companion object {
- const val questName = "Troll Stronghold"
- }
override fun drawJournal(player: Player?, stage: Int) {
super.drawJournal(player, stage)
var line = 12
var stage = getStage(player)
- var started = getQuestStage(player!!, questName) > 0
+ var started = getQuestStage(player!!, Quests.TROLL_STRONGHOLD) > 0
if(!started){
line(player, "I can start this quest by speaking to !!Denulth?? in his tent at", line++)
line(player, "the !!Imperial Guard camp?? in !!Burthorpe?? after completing the", line++)
- line(player, "!!Death Plateau Quest??", line++, isQuestComplete(player, DeathPlateau.questName))
+ line(player, "!!Death Plateau Quest??", line++, isQuestComplete(player, Quests.DEATH_PLATEAU))
line++
line(player, "To complete this quest I need:", line++)
line(player, "Level 15 Agility.", line++, hasLevelStat(player, Skills.AGILITY, 15))
line(player, "I also need to be able to defeat a !!level 113 Troll??.", line++)
line(player, "Level 30 Thieving might be useful.", line++, hasLevelStat(player, Skills.THIEVING, 30))
- if (isQuestComplete(player, DeathPlateau.questName) && hasLevelStat(player, Skills.AGILITY, 15) && hasLevelStat(player, Skills.THIEVING, 30)) {
+ if (isQuestComplete(player, Quests.DEATH_PLATEAU) && hasLevelStat(player, Skills.AGILITY, 15) && hasLevelStat(player, Skills.THIEVING, 30)) {
line(player, "I have all the requirements to start this quest.", line++)
}
} else {
@@ -61,10 +47,12 @@ class TrollStronghold : Quest("Troll Stronghold",128, 127, 1, 317, 0, 1, 50) {
if (stage >= 5) {
line(player, "I have defeated the !!Troll Champion??", line++, true)
} else if (stage >= 3) {
- line(player, "I have to defeat the !!Troll Champion??", line++)
+ line(player, "I have accepted the !!Troll Champion's?? challenge.", line++)
}
- if (stage in 5..7) {
- line++
+ line++
+ if (stage >= 7) {
+ line(player, "I found my way into the Troll Stronghold", line++, true)
+ } else if (stage >= 5) {
line(player, "I have to find a way to get into the !!Troll Stronghold??", line++)
}
line++
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollStrongholdListener.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollStrongholdListener.kt
index 9e03991ab..f276b3944 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollStrongholdListener.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TrollStrongholdListener.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
+import content.data.Quests
import core.api.*
import core.game.global.action.DoorActionHandler
import core.game.interaction.IntType
@@ -22,12 +23,12 @@ class TrollStrongholdListener: InteractionListener {
// Entrance to arena with Dad in it.
on(intArrayOf(Scenery.ARENA_ENTRANCE_3782, Scenery.ARENA_ENTRANCE_3783), IntType.SCENERY, "open"){ player, node ->
// Only get the dialogue once.
- if (getQuestStage(player, TrollStronghold.questName) == 1) {
+ if (getQuestStage(player, Quests.TROLL_STRONGHOLD) == 1) {
openDialogue(player, DadDialogueFile(1), findNPC(NPCs.DAD_1125)!!)
}
// Only allow players through when they start Troll Stronghold.
// No one is allowed to go to GWD unless they start the Troll Stronghold quest.
- if (getQuestStage(player, TrollStronghold.questName) > 0) {
+ if (getQuestStage(player, Quests.TROLL_STRONGHOLD) > 0) {
DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
} else {
sendMessage(player, "You need to start the Troll Stronghold quest.")
@@ -37,7 +38,7 @@ class TrollStrongholdListener: InteractionListener {
// Not allowed to exit arena into the troll stronghold until Dad is defeated.
on(intArrayOf(Scenery.ARENA_EXIT_3785, Scenery.ARENA_EXIT_3786), IntType.SCENERY, "open"){ player, node ->
- if (getQuestStage(player, TrollStronghold.questName) < 5){
+ if (getQuestStage(player, Quests.TROLL_STRONGHOLD) < 5){
openDialogue(player, DadDialogueFile(1), findNPC(NPCs.DAD_1125)!!)
} else {
DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
@@ -47,12 +48,12 @@ class TrollStrongholdListener: InteractionListener {
// Key to unlock the prison door
on(Scenery.PRISON_DOOR_3780, IntType.SCENERY, "unlock"){ player, node ->
- if (getQuestStage(player, TrollStronghold.questName) >= 8){
+ if (getQuestStage(player, Quests.TROLL_STRONGHOLD) >= 8){
DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
} else {
if (inInventory(player, Items.PRISON_KEY_3135)) {
- if (getQuestStage(player, TrollStronghold.questName) == 5) {
- setQuestStage(player, TrollStronghold.questName, 8)
+ if (getQuestStage(player, Quests.TROLL_STRONGHOLD) == 5) {
+ setQuestStage(player, Quests.TROLL_STRONGHOLD, 8)
}
if (removeItem(player, Items.PRISON_KEY_3135)) {
DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
@@ -84,7 +85,7 @@ class TrollStrongholdListener: InteractionListener {
3 -> {
val success: Boolean = success(player, Skills.THIEVING)
if(success){
- if(isQuestInProgress(player, TrollStronghold.questName, 8, 10)) {
+ if(isQuestInProgress(player, Quests.TROLL_STRONGHOLD, 8, 10)) {
addItem(player, Items.CELL_KEY_1_3136)
sendMessage(player, "You find a small key on Twig.")
} else {
@@ -124,7 +125,7 @@ class TrollStrongholdListener: InteractionListener {
3 -> {
val success: Boolean = success(player, Skills.THIEVING)
if(success){
- if(isQuestInProgress(player, TrollStronghold.questName, 8, 10)) {
+ if(isQuestInProgress(player, Quests.TROLL_STRONGHOLD, 8, 10)) {
addItem(player, Items.CELL_KEY_2_3137)
sendMessage(player, "You find a small key on Berry.")
} else {
@@ -149,10 +150,10 @@ class TrollStrongholdListener: InteractionListener {
fun unlockMadEadgarCellDoor(player: Player, node: Node) {
if (inInventory(player, Items.CELL_KEY_1_3136)){
sendMessage(player, "You unlock the cell door.")
- if (getQuestStage(player, TrollStronghold.questName) == 8) {
- setQuestStage(player, TrollStronghold.questName, 9)
- } else if (getQuestStage(player, TrollStronghold.questName) == 10) {
- setQuestStage(player, TrollStronghold.questName, 11)
+ if (getQuestStage(player, Quests.TROLL_STRONGHOLD) == 8) {
+ setQuestStage(player, Quests.TROLL_STRONGHOLD, 9)
+ } else if (getQuestStage(player, Quests.TROLL_STRONGHOLD) == 10) {
+ setQuestStage(player, Quests.TROLL_STRONGHOLD, 11)
}
// Animate Mad Eadgar leaving cell.
val npc = findNPC(NPCs.EADGAR_1113)!!
@@ -219,10 +220,10 @@ class TrollStrongholdListener: InteractionListener {
fun unlockGodricCellDoor(player: Player, node: Node) {
if (inInventory(player, Items.CELL_KEY_2_3137)){
sendMessage(player, "You unlock the cell door.")
- if (getQuestStage(player, TrollStronghold.questName) == 8) {
- setQuestStage(player, TrollStronghold.questName, 10)
- } else if (getQuestStage(player, TrollStronghold.questName) == 9) {
- setQuestStage(player, TrollStronghold.questName, 11)
+ if (getQuestStage(player, Quests.TROLL_STRONGHOLD) == 8) {
+ setQuestStage(player, Quests.TROLL_STRONGHOLD, 10)
+ } else if (getQuestStage(player, Quests.TROLL_STRONGHOLD) == 9) {
+ setQuestStage(player, Quests.TROLL_STRONGHOLD, 11)
}
// Animate Godric leaving cell.
val npc = findNPC(NPCs.GODRIC_1114)!!
@@ -292,7 +293,7 @@ class TrollStrongholdListener: InteractionListener {
// Reentry Secret Door
on(Scenery.SECRET_DOOR_3762, IntType.SCENERY, "open"){ player, _ ->
- if (getQuestStage(player, TrollStronghold.questName) >= 8) {
+ if (getQuestStage(player, Quests.TROLL_STRONGHOLD) >= 8) {
player.properties.teleportLocation = Location.create(2824, 10050, 0)
} else {
sendMessage(player, "The door is locked.")
diff --git a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TwigNpc.kt b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TwigNpc.kt
index 97e253d71..deb316aeb 100644
--- a/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TwigNpc.kt
+++ b/Server/src/main/content/region/asgarnia/burthorpe/quest/trollstronghold/TwigNpc.kt
@@ -1,16 +1,14 @@
package content.region.asgarnia.burthorpe.quest.trollstronghold
-import core.api.getQuestStage
+import content.data.Quests
import core.api.isQuestInProgress
import core.api.produceGroundItem
-import core.api.transformNpc
import core.game.node.entity.Entity
import core.game.node.entity.combat.CombatStyle
import core.game.node.entity.npc.AbstractNPC
import core.game.node.entity.player.Player
import core.game.world.map.Location
import core.plugin.Initializable
-import core.tools.RandomFunction
import org.rs09.consts.Items
import org.rs09.consts.NPCs
@@ -46,7 +44,7 @@ class TwigNpc(id: Int = 0, location: Location? = null) : AbstractNPC(id, locatio
}
override fun finalizeDeath(killer: Entity?) {
- if (isQuestInProgress(killer as Player, TrollStronghold.questName, 8, 10)) {
+ if (isQuestInProgress(killer as Player, Quests.TROLL_STRONGHOLD, 8, 10)) {
produceGroundItem(killer, Items.CELL_KEY_1_3136, 1, this.location)
}
super.finalizeDeath(killer)
diff --git a/Server/src/main/content/region/asgarnia/dialogue/OracleDialogue.java b/Server/src/main/content/region/asgarnia/dialogue/OracleDialogue.java
index a4a58570c..b811dbc74 100644
--- a/Server/src/main/content/region/asgarnia/dialogue/OracleDialogue.java
+++ b/Server/src/main/content/region/asgarnia/dialogue/OracleDialogue.java
@@ -5,6 +5,7 @@ import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.plugin.Initializable;
import core.game.node.entity.player.link.quest.Quest;
+import content.data.Quests;
/**
* Represents the oracle dialogue plugin related to dragon slayer.
@@ -43,7 +44,7 @@ public final class OracleDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
- quest = player.getQuestRepository().getQuest("Dragon Slayer");
+ quest = player.getQuestRepository().getQuest(Quests.DRAGON_SLAYER);
switch (quest.getStage(player)) {
case 20:
player("I seek a piece of the map to the island of Crandor.");
diff --git a/Server/src/main/content/region/asgarnia/dialogue/ThuroDialogue.java b/Server/src/main/content/region/asgarnia/dialogue/ThuroDialogue.java
index 761c0977c..af9e253f3 100644
--- a/Server/src/main/content/region/asgarnia/dialogue/ThuroDialogue.java
+++ b/Server/src/main/content/region/asgarnia/dialogue/ThuroDialogue.java
@@ -8,6 +8,7 @@ import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.quest.Quest;
import core.plugin.Initializable;
import core.game.node.item.Item;
+import content.data.Quests;
/**
* Represents the dialogue plugin used for thurgo.
@@ -77,7 +78,7 @@ public final class ThuroDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
- quest = player.getQuestRepository().getQuest("The Knight's Sword");
+ quest = player.getQuestRepository().getQuest(Quests.THE_KNIGHTS_SWORD);
player.removeAttribute("thurgo:1");
switch (quest.getStage(player)) {
default:
diff --git a/Server/src/main/content/region/asgarnia/falador/dialogue/DoricDialogue.kt b/Server/src/main/content/region/asgarnia/falador/dialogue/DoricDialogue.kt
index a829c840b..0d8e029eb 100644
--- a/Server/src/main/content/region/asgarnia/falador/dialogue/DoricDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/falador/dialogue/DoricDialogue.kt
@@ -16,12 +16,13 @@ import core.game.world.map.Location
import core.plugin.Initializable
import core.tools.END_DIALOGUE
import org.rs09.consts.NPCs
+import content.data.Quests
@Initializable
class DoricDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun open(vararg args: Any?): Boolean {
npc = args[0] as NPC
- val qStage = getQuestStage(player, "Doric's Quest")
+ val qStage = getQuestStage(player, Quests.DORICS_QUEST)
if(qStage == 0) {
npcl(FacialExpression.OLD_NORMAL, "Hello traveller, what brings you to my humble smithy?").also { stage = 0 }
} else if(qStage in 1..99) {
diff --git a/Server/src/main/content/region/asgarnia/falador/dialogue/FaladorSquireDialogue.java b/Server/src/main/content/region/asgarnia/falador/dialogue/FaladorSquireDialogue.java
index 5d026893d..8fe25153e 100644
--- a/Server/src/main/content/region/asgarnia/falador/dialogue/FaladorSquireDialogue.java
+++ b/Server/src/main/content/region/asgarnia/falador/dialogue/FaladorSquireDialogue.java
@@ -10,6 +10,7 @@ import core.game.node.entity.player.link.quest.Quest;
import core.game.node.item.Item;
import core.plugin.Initializable;
import core.game.world.GameWorld;
+import content.data.Quests;
/**
* Represents the falador squire dialogue plugin.
@@ -59,7 +60,7 @@ public final class FaladorSquireDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
- quest = player.getQuestRepository().getQuest("The Knight's Sword");
+ quest = player.getQuestRepository().getQuest(Quests.THE_KNIGHTS_SWORD);
interpreter.sendOptions("What do you want to do?", "Chat", "Talk about the Falador Achievement Diary");
stage = -1;
replacementReward = AchievementDiary.canReplaceReward(player, DiaryType.FALADOR, level);
diff --git a/Server/src/main/content/region/asgarnia/falador/dialogue/SirTiffyCashienDialogue.java b/Server/src/main/content/region/asgarnia/falador/dialogue/SirTiffyCashienDialogue.java
deleted file mode 100644
index 0332c725b..000000000
--- a/Server/src/main/content/region/asgarnia/falador/dialogue/SirTiffyCashienDialogue.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package content.region.asgarnia.falador.dialogue;
-
-import core.game.dialogue.DialoguePlugin;
-import core.game.dialogue.FacialExpression;
-import core.game.node.entity.npc.NPC;
-import core.plugin.Initializable;
-import core.game.node.entity.player.Player;
-
-/**
- * Represents the dialogue used for sir tiffy.
- * @author 'Vexia
- * @version 1.0
- */
-@Initializable
-public final class SirTiffyCashienDialogue extends DialoguePlugin {
-
- /**
- * Constructs a new {@code SirTiffyCashienDialogue} {@code Object}.
- */
- public SirTiffyCashienDialogue() {
- /**
- * empty.
- */
- }
-
- /**
- * Constructs a new {@code SirTiffyCashienDialogue} {@code Object}.
- * @param player the player.
- */
- public SirTiffyCashienDialogue(Player player) {
- super(player);
- }
-
- @Override
- public DialoguePlugin newInstance(Player player) {
- return new SirTiffyCashienDialogue(player);
- }
-
- @Override
- public boolean open(Object... args) {
- npc = (NPC) args[0];
- interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Hello.");
- stage = 0;
- return true;
- }
-
- @Override
- public boolean handle(int interfaceId, int buttonId) {
- switch (stage) {
- case 0:
- interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "What ho, sirrag.", "Spiffing day for a walk in the park, what?");
- stage = 1;
- break;
- case 1:
- interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Spiffing?");
- stage = 2;
- break;
- case 2:
- interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Absolutely, top-hole!", "Well, can't stay and chat all day, dontchaknow!", "Ta-ta for now!");
- stage = 10;
- break;
- case 3:
- interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Erm...goodbye.");
- stage = 4;
- break;
- case 4:
- end();
- break;
- case 10:
- npc("Would you like to look at my wares?");
- stage++;
- break;
- case 11:
- player("Yes, please.");
- stage++;
- break;
- case 12:
- npc.openShop(player);
- end();
- break;
- }
- return true;
- }
-
- @Override
- public int[] getIds() {
- return new int[] { 2290 };
- }
-}
diff --git a/Server/src/main/content/region/asgarnia/falador/dialogue/SirTiffyCashienDialogue.kt b/Server/src/main/content/region/asgarnia/falador/dialogue/SirTiffyCashienDialogue.kt
new file mode 100644
index 000000000..70abbe778
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/dialogue/SirTiffyCashienDialogue.kt
@@ -0,0 +1,120 @@
+package content.region.asgarnia.falador.dialogue
+
+import content.data.Quests
+import content.region.asgarnia.falador.quest.recruitmentdrive.SirTiffyCashienDialogueFile
+import core.ServerConstants
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.node.entity.player.Player
+import core.game.world.map.Location
+import core.plugin.Initializable
+import core.tools.END_DIALOGUE
+import core.tools.START_DIALOGUE
+import org.rs09.consts.NPCs
+
+@Initializable
+class SirTiffyCashienDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+
+ // Completed Recruitment Drive & Start Wanted!! Quest
+ if (isQuestComplete(player!!, Quests.RECRUITMENT_DRIVE)) {
+ openDialogue(player, SirTiffyCashienAfterRecruitmentDriveQuestDialogueFile(), npc)
+ return true
+ }
+
+ // Recruitment Drive Quest
+ if (isQuestInProgress(player!!, Quests.RECRUITMENT_DRIVE, 1, 99)) {
+ openDialogue(player, SirTiffyCashienDialogueFile(), npc)
+ return true
+ }
+
+ // Fallback to default.
+ when (stage) {
+ START_DIALOGUE -> player("Hello.").also { stage++ }
+ 1 -> npc(FacialExpression.FRIENDLY, "What ho, ${if (player.isMale) "sirrah" else "milady"}.", "Spiffing day for a walk in the park, what?").also { stage++ }
+ 2 -> player(FacialExpression.THINKING, "Spiffing?").also { stage++ }
+ 3 -> npc(FacialExpression.FRIENDLY, "Absolutely, top-hole!", "Well, can't stay and chat all day, dontchaknow!", "Ta-ta for now!").also { stage++ }
+ 4 -> player(FacialExpression.THINKING, "Erm...goodbye.").also { stage = END_DIALOGUE }
+ }
+
+ return true
+ }
+ override fun newInstance(player: Player): DialoguePlugin {
+ return SirTiffyCashienDialogue(player)
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.SIR_TIFFY_CASHIEN_2290)
+ }
+}
+
+// Move this to Wanted!! Quest.
+class SirTiffyCashienAfterRecruitmentDriveQuestDialogueFile : DialogueBuilderFile() {
+ private fun dialogueChangeSpawnPoint(builder: DialogueBuilder, place: String, location: Location, tiffyLine1: String, tiffyLine2: String): DialogueBuilder {
+ return builder.npcl("${tiffyLine1} Are you sure?")
+ .options().let { optionBuilder ->
+ optionBuilder.option("Yes, I want to respawn in $place.")
+ .playerl("Yes, I want to respawn in $place.")
+ .npcl(tiffyLine2)
+ .endWith { _, player ->
+ setAttribute(player, "/save:spawnLocation", location)
+ player.properties.spawnLocation = location
+ }
+ optionBuilder.option("Actually, no thanks. I like my respawn point.")
+ .playerl("Actually, no thanks. I like my respawn point.")
+ .npcl("As you wish, what? Ta-ta for now.")
+ }
+ }
+
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { _ -> true }
+ .npc(FacialExpression.HAPPY, "What ho, @g[sirrah,milady].", "Jolly good show on the old training grounds thingy,", "what?")
+ .options().let { optionBuilder ->
+ optionBuilder.option_playerl("Do you have any jobs for me yet?")
+ .npcl("Sorry dear @g[boy,gal] but we are still in the process of organising.")
+ .npcl("I'm sure that we will have something for you soon, so please feel free to check back later.")
+ // Started of Wanted! quest
+ .end()
+ optionBuilder.option("Can you explain the Gaze of Saradomin to me?")
+ .playerl("I don't really understand this 'Gaze of Saradomin' thing... Do you think you could explain what it does for me?")
+ .npcl("Certainly @g[sirrah,milady]! As you know, we Temple Knights are personally favoured by Saradomin himself.")
+ .npcl("And when I say personally favoured, I don't mean that sometime off in the future he's going to buy us all a drink!")
+ .npcl("He watches over each of us, and when we die he catches us as we fall, and ensures we arrive back at Falador castle safe and sound.")
+ .npcl("We usually lose some equipment when he does so, but it's a small price to pay to be hale and hearty again, what?")
+ .npcl("Some lucky fellows have a similar system going already, but when they die they spawn in that squalid little swamp village Lumbridge.")
+ .playerl("Yeah, what kind of person would want to spawn there... Certainly not me, and I never have! Honest!")
+ .npcl("Well, you should be glad that we offer you a step up then! Falador is clearly a far superior town to spend your time in!")
+ .npcl("Was there something else you wanted to ask good old Tiffy, @g[sirrah,milady]?")
+ .end()
+ optionBuilder.option("Can I buy some armour?")
+ .playerl("Can I buy some armour?")
+ // Recruitment Drive -> Initiate level, Slug Menace -> Proselyte level
+ .npcl("Of course dear @g[boy,gal]. I can sell you up to Initiate level items only I'm afraid.")
+ .endWith { _, player ->
+ openNpcShop(player, npc!!.id)
+ }
+ optionBuilder.option("Can I switch respawns please?")
+ .branch { player -> if (player.properties.spawnLocation == ServerConstants.HOME_LOCATION) { 1 } else { 0 } }
+ .let { branch ->
+ dialogueChangeSpawnPoint(
+ branch.onValue(1),
+ "Falador", Location(2971, 3340, 0), //https://www.youtube.com/watch?v=Mm15dHuIaVg
+ "Ah, so you'd like to respawn in Falador, the good old homestead!",
+ "Top-hole, what? Good old Fally is definitely the hot-spot nowadays!"
+ )
+ dialogueChangeSpawnPoint(
+ branch.onValue(0),
+ "Lumbridge", ServerConstants.HOME_LOCATION ?: Location(3222, 3218, 0),
+ "What? You're saying you want to respawn in Lumbridge?",
+ "Why anyone would want to visit that smelly little swamp village of oiks is quite beyond me, I'm afraid, but the deed is done now."
+ )
+ }
+ optionBuilder.option("Goodbye.")
+ .playerl("Well, see you around Tiffy.")
+ .npcl(FacialExpression.HAPPY,"Ta-ta for now, old bean!")
+ .end()
+ }
+ }
+}
diff --git a/Server/src/main/content/region/asgarnia/falador/dialogue/WysonTheGardenerDialogue.kt b/Server/src/main/content/region/asgarnia/falador/dialogue/WysonTheGardenerDialogue.kt
index 4d42d5d9f..1d2592ad8 100644
--- a/Server/src/main/content/region/asgarnia/falador/dialogue/WysonTheGardenerDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/falador/dialogue/WysonTheGardenerDialogue.kt
@@ -121,7 +121,7 @@ class WysonTheGardenerDialogue : core.game.dialogue.DialoguePlugin {
}
133 -> end()
140 -> {
- npc("Thanks for being generous", "here's an extra woad leave.")
+ npc("Thanks for being generous", "here's an extra woad leaf.")
stage = 141
}
141 -> if (player.inventory.contains(995, 20)) {
diff --git a/Server/src/main/content/region/asgarnia/falador/diary/FaladorAchievementDiary.kt b/Server/src/main/content/region/asgarnia/falador/diary/FaladorAchievementDiary.kt
index 7d9d2f483..4831afd9c 100644
--- a/Server/src/main/content/region/asgarnia/falador/diary/FaladorAchievementDiary.kt
+++ b/Server/src/main/content/region/asgarnia/falador/diary/FaladorAchievementDiary.kt
@@ -212,6 +212,9 @@ class FaladorAchievementDiary : DiaryEventHookBase(DiaryType.FALADOR) {
)
}
}
+ if (event.npc.id == NPCs.MOGRE_114){
+ finishTask(player, DiaryLevel.HARD, HardTasks.MUDSKIPPER_POINT_KILL_MOGRE)
+ }
}
override fun onItemPurchasedFromShop(player: Player, event: ItemShopPurchaseEvent) {
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/TheKnightsSword.java b/Server/src/main/content/region/asgarnia/falador/quest/TheKnightsSword.java
index 535885464..70ca79515 100644
--- a/Server/src/main/content/region/asgarnia/falador/quest/TheKnightsSword.java
+++ b/Server/src/main/content/region/asgarnia/falador/quest/TheKnightsSword.java
@@ -5,6 +5,7 @@ import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.quest.Quest;
import core.plugin.Initializable;
import core.game.node.item.Item;
+import content.data.Quests;
/**
* Represents The KnightSword quest.
@@ -23,7 +24,7 @@ public class TheKnightsSword extends Quest {
* Constructs a new {@code TheKnightsSword} {@code Object}.
*/
public TheKnightsSword() {
- super("The Knight's Sword", 22, 21, 1, 122, 0, 1, 7);
+ super(Quests.THE_KNIGHTS_SWORD, 22, 21, 1, 122, 0, 1, 7);
}
@Override
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BKCabbagePlugin.java b/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BKCabbagePlugin.java
index 36684ff28..1fdcd3565 100644
--- a/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BKCabbagePlugin.java
+++ b/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BKCabbagePlugin.java
@@ -5,6 +5,7 @@ import core.game.interaction.UseWithHandler;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.quest.Quest;
import core.plugin.Plugin;
+import content.data.Quests;
/**
* Represents the plugin used to send the cabbage down the hole.
@@ -29,7 +30,7 @@ public class BKCabbagePlugin extends UseWithHandler {
@Override
public boolean handle(NodeUsageEvent event) {
final Player player = event.getPlayer();
- final Quest quest = player.getQuestRepository().getQuest("Black Knights' Fortress");
+ final Quest quest = player.getQuestRepository().getQuest(Quests.BLACK_KNIGHTS_FORTRESS);
if (quest.getStage(player) == 20) {
if (event.getUsedItem().getId() == 1967) {
player.getDialogueInterpreter().sendDialogue("This is the wrong sort of cabbage!");
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BKListenDialogue.java b/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BKListenDialogue.java
index df55f800b..b8d4dd509 100644
--- a/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BKListenDialogue.java
+++ b/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BKListenDialogue.java
@@ -6,6 +6,7 @@ import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.plugin.Initializable;
import core.game.world.update.flag.context.Animation;
+import content.data.Quests;
/**
* Represents the dialogue of listening throug a grill during the black knights'
@@ -117,7 +118,7 @@ public final class BKListenDialogue extends DialoguePlugin {
stage = 8;
break;
case 8:
- player.getQuestRepository().getQuest("Black Knights' Fortress").setStage(player, 20);
+ player.getQuestRepository().getQuest(Quests.BLACK_KNIGHTS_FORTRESS).setStage(player, 20);
end();
break;
case 10:
@@ -142,7 +143,7 @@ public final class BKListenDialogue extends DialoguePlugin {
break;
case 15:
if (player.getInventory().remove(CABBAGE)) {
- player.getQuestRepository().getQuest("Black Knights' Fortress").setStage(player, 30);
+ player.getQuestRepository().getQuest(Quests.BLACK_KNIGHTS_FORTRESS).setStage(player, 30);
interpreter.sendDialogues(player, FacialExpression.HAPPY, "Looks like my work here is done. Seems like that's", "successfully sabotaged their little secret weapon plan.");
stage = 16;
}
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BlackKnightsFortress.java b/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BlackKnightsFortress.java
index 6e5da0e7d..a3a1bf405 100644
--- a/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BlackKnightsFortress.java
+++ b/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/BlackKnightsFortress.java
@@ -5,6 +5,7 @@ import core.game.node.entity.player.link.quest.Quest;
import core.game.node.item.Item;
import core.plugin.Initializable;
import core.plugin.ClassScanner;
+import content.data.Quests;
/**
* Represents the black knights fortress quest.
@@ -23,7 +24,7 @@ public final class BlackKnightsFortress extends Quest {
* Constructs a new {@Code BlackKnightsFortress} {@Code Object}
*/
public BlackKnightsFortress() {
- super("Black Knights' Fortress", 14, 13, 3, 130, 0, 1, 4);
+ super(Quests.BLACK_KNIGHTS_FORTRESS, 14, 13, 3, 130, 0, 1, 4);
}
@Override
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/SirAmikVarzeDialogue.java b/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/SirAmikVarzeDialogue.java
index 33f2a41c5..93901c19e 100644
--- a/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/SirAmikVarzeDialogue.java
+++ b/Server/src/main/content/region/asgarnia/falador/quest/blackknightsfortress/SirAmikVarzeDialogue.java
@@ -1,5 +1,6 @@
package content.region.asgarnia.falador.quest.blackknightsfortress;
+import content.region.asgarnia.falador.quest.recruitmentdrive.SirAmikVarzeDialogueFile;
import core.game.dialogue.DialoguePlugin;
import core.game.dialogue.FacialExpression;
import core.game.node.entity.npc.NPC;
@@ -8,6 +9,9 @@ import core.game.node.entity.player.link.quest.Quest;
import core.game.node.item.GroundItemManager;
import core.game.node.item.Item;
+import static core.api.ContentAPIKt.openDialogue;
+import content.data.Quests;
+
/**
* Represents the sir amik varze dialogue.
* @author Vexia
@@ -45,7 +49,7 @@ public class SirAmikVarzeDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
- quest = player.getQuestRepository().getQuest("Black Knights' Fortress");
+ quest = player.getQuestRepository().getQuest(Quests.BLACK_KNIGHTS_FORTRESS);
switch (quest.getStage(player)) {
case 30:
interpreter.sendDialogues(player, FacialExpression.HAPPY, "I have ruined the Black Knights' invincibility potion.");
@@ -72,35 +76,7 @@ public class SirAmikVarzeDialogue extends DialoguePlugin {
public boolean handle(int interfaceId, int buttonId) {
switch (quest.getStage(player)) {
case 100:
- switch (stage) {
- case 0:
- interpreter.sendDialogues(npc, FacialExpression.FRIENDLY, "Hello, friend!");
- stage = 1;
- break;
- case 1:
- interpreter.sendDialogues(player, FacialExpression.HALF_ASKING, "Do you have any other quests for me to do?");
- stage = 2;
- break;
- case 2:
- interpreter.sendDialogues(npc, FacialExpression.HALF_THINKING, "Quests, eh?", "Well, I don't have anything on the go at the moment,", "but there is an organisation that is always looking for", "capable adventurers to assist them.");
- stage = 3;
- break;
- case 3:
- interpreter.sendDialogues(npc, FacialExpression.HAPPY, "Your excellent work sorting out those Black Knights", "means I will happily write you a letter of", "recommendation.");
- stage = 4;
- break;
- case 4:
- interpreter.sendDialogues(npc, FacialExpression.HALF_ASKING, "Would you like me to put your name forwards to", "them?");
- stage = 5;
- break;
- case 5:
- interpreter.sendDialogues(player, FacialExpression.NEUTRAL, "No thanks.");
- stage = 6;
- break;
- case 6:
- end();
- break;
- }
+ openDialogue(player, new SirAmikVarzeDialogueFile(), npc);
break;
case 30:
switch (stage) {
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/doricsquest/DoricDoricsQuestDialogue.kt b/Server/src/main/content/region/asgarnia/falador/quest/doricsquest/DoricDoricsQuestDialogue.kt
index 9857961b6..3c34fca1f 100644
--- a/Server/src/main/content/region/asgarnia/falador/quest/doricsquest/DoricDoricsQuestDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/falador/quest/doricsquest/DoricDoricsQuestDialogue.kt
@@ -4,12 +4,11 @@ import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
import core.game.dialogue.Topic
-import core.game.node.entity.npc.NPC
import core.game.node.entity.player.Player
import core.game.node.item.Item
import core.tools.END_DIALOGUE
import org.rs09.consts.Items
-import org.rs09.consts.NPCs
+import content.data.Quests
class DoricDoricsQuestDialogue(private val dStage: Int) : DialogueFile() {
override fun handle(componentID: Int, buttonID: Int) {
@@ -40,7 +39,7 @@ class DoricDoricsQuestDialogue(private val dStage: Int) : DialogueFile() {
40 -> npc(FacialExpression.OLD_NORMAL, "Clay is what I use more than anything, to make casts.", "Could you get me 6 clay, 4 copper ore, and 2 iron ore,", "please? I could pay a little, and let you use my anvils.", "Take this pickaxe with you just in case you need it.").also { stage++ }
41 -> {
playerl(FacialExpression.FRIENDLY, "Certainly, I'll be right back!")
- startQuest(player, "Doric's Quest")
+ startQuest(player, Quests.DORICS_QUEST)
if(!inInventory(player, Items.BRONZE_PICKAXE_1265)) addItemOrDrop(player, Items.BRONZE_PICKAXE_1265)
stage = END_DIALOGUE
}
@@ -65,7 +64,7 @@ class DoricDoricsQuestDialogue(private val dStage: Int) : DialogueFile() {
3 -> {
if(removeItem(player, Item(Items.CLAY_434, 6)) && removeItem(player, Item(Items.COPPER_ORE_436, 4)) && removeItem(player, Item(Items.IRON_ORE_440, 2))) {
sendItemDialogue(player, Items.COPPER_ORE_436, "You hand the clay, copper, and iron to Doric.")
- finishQuest(player, "Doric's Quest")
+ finishQuest(player, Quests.DORICS_QUEST)
stage = END_DIALOGUE
}
}
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/doricsquest/DoricsQuest.kt b/Server/src/main/content/region/asgarnia/falador/quest/doricsquest/DoricsQuest.kt
index 5c04c3983..0bc49f173 100644
--- a/Server/src/main/content/region/asgarnia/falador/quest/doricsquest/DoricsQuest.kt
+++ b/Server/src/main/content/region/asgarnia/falador/quest/doricsquest/DoricsQuest.kt
@@ -7,26 +7,32 @@ import core.game.node.entity.skill.Skills
import core.plugin.Initializable
import org.rs09.consts.Components
import org.rs09.consts.Items
+import content.data.Quests
@Initializable
-class DoricsQuest : Quest("Doric's Quest", 17, 16, 1, 31, 0, 1, 100) {
+class DoricsQuest : Quest(Quests.DORICS_QUEST, 17, 16, 1, 31, 0, 1, 100) {
override fun newInstance(`object`: Any?): Quest { return this }
override fun drawJournal(player: Player?, stage: Int) {
super.drawJournal(player, stage)
player ?: return
- var line = 11
+ var line = 12
if(stage == 0) {
line(player, "I can start this quest by speaking to !!Doric?? who is !!North of??", line++)
line(player, "!!Falador??.", line++)
+ line++
line(player, "There aren't any requirements but !!Level 15 Mining?? will help.", line++)
} else {
if(stage in 1..99) {
- line(player, "I have spoken to !!Doric??.", line++)
- line(player, "I need to collect some items and bring them to !!Doric??:", line++)
- line(player, "6 Clay", line++, inInventory(player, Items.CLAY_434, 6))
- line(player, "4 Copper Ore", line++, inInventory(player, Items.COPPER_ORE_436, 4))
- line(player, "2 Iron Ore", line++, inInventory(player, Items.IRON_ORE_440, 2))
+ // https://www.youtube.com/watch?v=vm4BEXtMoO0
+ line(player, "I have spoken to Doric. He agreed to let me use his anvils", line++, true)
+ line(player, "if I bring him some materials.", line++, true)
+ line++
+ line(player, "I need to collect the following materials and bring them all", line++)
+ line(player, "to !!Doric??:", line++)
+ line(player, "!!6 Clay.??", line++, inInventory(player, Items.CLAY_434, 6))
+ line(player, "!!4 Copper Ore.??", line++, inInventory(player, Items.COPPER_ORE_436, 4))
+ line(player, "!!2 Iron Ore.??", line++, inInventory(player, Items.IRON_ORE_440, 2))
}
if(stage == 100) {
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/AlchemicalNotes.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/AlchemicalNotes.kt
new file mode 100644
index 000000000..56eaa77d1
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/AlchemicalNotes.kt
@@ -0,0 +1,248 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import content.global.handlers.iface.BookInterface
+import content.global.handlers.iface.BookLine
+import content.global.handlers.iface.Page
+import content.global.handlers.iface.PageSet
+import core.api.setAttribute
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.Items
+
+// https://www.youtube.com/watch?v=o-bAoxIYT-A 7:27
+@Initializable
+class AlchemicalNotes : InteractionListener {
+ companion object {
+ private val TITLE = "Alchemical Reactions Study"
+ private val CONTENTS = arrayOf(
+ PageSet(
+ Page(
+ BookLine("Acetic acid and Cupric", 55),
+ BookLine("Sulphate:", 56),
+ BookLine("Endothermic.", 57),
+ BookLine("The Cupric is in ", 58),
+ BookLine("insufficient quantities to", 59),
+ BookLine("cause any noticeable", 60),
+ BookLine("reaction.", 61),
+ ),
+ Page(
+ BookLine("Acetic acid and Gypsum:", 66),
+ BookLine("Endothermic.", 67),
+ BookLine("Made a particularly bad", 68),
+ BookLine("smell, but little else that", 69),
+ BookLine("was productive.", 70),
+ )
+ ),
+ PageSet(
+ Page(
+ BookLine("Acetic acid and Sodium", 55),
+ BookLine("Chloride:", 56),
+ BookLine("Endothermic.", 57),
+ BookLine("Very tasty when", 58),
+ BookLine("combined with fried", 59),
+ BookLine("potatoes at room", 60),
+ BookLine("temperature.", 61),
+ ),
+ Page(
+ BookLine("Acetic acid and", 66),
+ BookLine("Dihydrogen Monoxide:", 67),
+ BookLine("Endothermic.", 68),
+ BookLine("The Dihydrogen", 69),
+ BookLine("Monoxide served only to", 70),
+ BookLine("dilute the Acetic acid at", 71),
+ BookLine("room temperature.", 72),
+ )
+ ),
+ PageSet(
+ Page(
+ BookLine("Acetic acid and Cupric", 55),
+ BookLine("Ore Powder:", 56),
+ BookLine("Endothermic.", 57),
+ BookLine("The powdered form of", 58),
+ BookLine("Cupric Ore allowed a", 59),
+ BookLine("lower than usual melting", 60),
+ BookLine("temperature, but the end", 61),
+ BookLine("product was non-usable.", 62),
+ ),
+ Page(
+ BookLine("Acetic acid and Tin Ore", 66),
+ BookLine("powder:", 67),
+ BookLine("Endothermic.", 68),
+ BookLine("Similar results to those", 69),
+ BookLine("made using Cupric Ore.", 70),
+ )
+ ),
+ PageSet(
+ Page(
+ BookLine("Cupric Sulphate and", 55),
+ BookLine("Dihyrdogen Monoxide:", 56),
+ BookLine("Exothermic.", 57),
+ BookLine("A blue compound was", 58),
+ BookLine("produced, along with heat.", 59),
+ ),
+ Page(
+ BookLine("Cupric Sulphate and", 66),
+ BookLine("Gypsum:", 67),
+ BookLine("Endothermic.", 68),
+ BookLine("At room temperature, no", 69),
+ BookLine("useful product was", 70),
+ BookLine("created.", 71),
+ )
+ ),
+ PageSet(
+ Page(
+ BookLine("Cupric Sulphate and", 55),
+ BookLine("Sodium Chloride:", 56),
+ BookLine("Endothermic.", 57),
+ BookLine("A pungent odour was", 58),
+ BookLine("released when combined.", 59),
+ ),
+ Page(
+ BookLine("Cupric Sulphate and", 66),
+ BookLine("Cupric Ore powder:", 67),
+ BookLine("Endothermic.", 68),
+ BookLine("The Cupric did not react", 69),
+ BookLine("with each other at room", 70),
+ BookLine("temperature.", 71),
+ )
+ ),
+ PageSet(
+ Page(
+ BookLine("Cupric Sulphate and Tin", 55),
+ BookLine("Ore powder:", 56),
+ BookLine("Endothermic.", 57),
+ BookLine("Similar results to those", 58),
+ BookLine("shown with Cupric Ore,", 59),
+ BookLine("despite the increased", 60),
+ BookLine("solubility involved with", 61),
+ BookLine("the powdered form.", 62),
+ ),
+ Page(
+ BookLine("Gypsum and Dihydrogen", 66),
+ BookLine("Monoxide:", 67),
+ BookLine("Exothermic.", 68),
+ BookLine("A white liquid compound", 69),
+ BookLine("was formed, that quickly", 70),
+ BookLine("cooled at room", 71),
+ BookLine("temperature to a white", 72),
+ BookLine("heat resistant solid very", 73),
+ BookLine("similar to plaster.", 74),
+ BookLine("Heat was also produced,", 75),
+ BookLine("although not in the same", 76),
+ )
+ ),
+ PageSet(
+ Page(
+ BookLine("quantity as Cupric", 55),
+ BookLine("Sulphate with Dihydrogen", 56),
+ BookLine("Monoxide", 57),
+ ),
+ Page(
+ BookLine("Gypsum and Sodium", 66),
+ BookLine("Chloride:", 67),
+ BookLine("Endothermic.", 68),
+ BookLine("The two did not seem to", 69),
+ BookLine("noticably mix together at", 70),
+ BookLine("room temperature.", 71),
+ )
+ ),
+ PageSet(
+ Page(
+ BookLine("Gypsum and Culpric Ore:", 55),
+ BookLine("Endothermic.", 56),
+ BookLine("The gypsum seems quite", 57),
+ BookLine("resistant to most", 58),
+ BookLine("compounds at normal", 59),
+ BookLine("room temperature.", 60),
+ ),
+ Page(
+ BookLine("Gypsum and Tin Ore:", 66),
+ BookLine("Endothermic.", 67),
+ BookLine("Again, very similar results", 68),
+ BookLine("as those shown with", 69),
+ BookLine("Cupric Ore.", 70),
+ )
+ ),
+
+ PageSet(
+ Page(
+ BookLine("Sodium Chloride and", 55),
+ BookLine("Dihydrogen Monoxide:", 56),
+ BookLine("Endothermic.", 57),
+ BookLine("At room temperature, the", 58),
+ BookLine("Sodium Chloride dissolves", 59),
+ BookLine("quite easily. Dissolution is", 60),
+ BookLine("faster at higher", 61),
+ BookLine("temperatures.", 62),
+ ),
+ Page(
+ BookLine("Sodium Chloride and", 66),
+ BookLine("Cupric Ore:", 67),
+ BookLine("Endothermic.", 68),
+ BookLine("No visible combination at", 69),
+ BookLine("room temperature.", 70),
+ )
+ ),
+ PageSet(
+ Page(
+ BookLine("Sodium Chloride and Tin", 55),
+ BookLine("Ore:", 56),
+ BookLine("Endothermic.", 57),
+ BookLine("Another very similar ", 58),
+ BookLine("result as with Cupric Ore.", 59),
+ ),
+ Page(
+ BookLine("Cupric Ore Powder and", 66),
+ BookLine("Tin Ore Powder:", 67),
+ BookLine("Endothermic.", 68),
+ BookLine("When both ores are in", 69),
+ BookLine("particulate form, a much", 70),
+ BookLine("lower than usual bonding", 71),
+ BookLine("temperature can be", 72),
+ BookLine("obtained.", 73),
+ BookLine("When combined at a", 74),
+ BookLine("moderate heat, (my", 75),
+ BookLine("laboratory heating", 76),
+ )
+ ),
+ PageSet(
+ Page(
+ BookLine("apparatus) I was able to", 55),
+ BookLine("form liquid Bronze quite", 56),
+ BookLine("easily, which cooled to", 57),
+ BookLine("form a standard Bronze", 58),
+ BookLine("Bar at a temperature far", 60),
+ BookLine("lower than that required", 61),
+ BookLine("to produce in mass at a", 62),
+ BookLine("furnace.", 63),
+ ),
+ Page(
+ BookLine("Nitrous Monoxide:", 66),
+ BookLine("Was not able to perform", 67),
+ BookLine("an experimentation using", 68),
+ BookLine("this substance, as the", 69),
+ BookLine("gaseous form would", 70),
+ BookLine("always escape when the", 71),
+ BookLine("vial was opened.", 72),
+ )
+ )
+ )
+ }
+
+ private fun display(player:Player, pageNum: Int, buttonID: Int) : Boolean {
+ BookInterface.pageSetup(player, BookInterface.FANCY_BOOK_3_49, TITLE, CONTENTS)
+ return true
+ }
+
+
+ override fun defineListeners() {
+ on(Items.ALCHEMICAL_NOTES_5588, IntType.ITEM, "read") { player, _ ->
+ setAttribute(player, "bookInterfaceCallback", ::display)
+ setAttribute(player, "bookInterfaceCurrentPage", 0)
+ display(player, 0, 0)
+ return@on true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/LadyTableDialogue.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/LadyTableDialogue.kt
new file mode 100644
index 000000000..b1386266f
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/LadyTableDialogue.kt
@@ -0,0 +1,114 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.game.system.task.Pulse
+import org.rs09.consts.Components
+import org.rs09.consts.NPCs
+
+class LadyTableDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, LadyTableDialogueFile(), npc)
+ return true
+ }
+ override fun newInstance(player: Player): DialoguePlugin {
+ return LadyTableDialogue(player)
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.LADY_TABLE_2283)
+ }
+}
+
+class LadyTableDialogueFile(private val dialogueNum: Int = 0) : DialogueBuilderFile(), InteractionListener {
+ companion object {
+ const val statueVarbit = 658
+ const val attributeStatueStateNumber = "quest:recruitmentdrive-statuestatenumber"
+ val statueArray = intArrayOf(0, 7308, 7307, 7306, 7305, 7304, 7303, 7312, 7313, 7314, 7311, 7310, 7309)
+ }
+
+ override fun defineListeners() {
+
+ on(statueArray, IntType.SCENERY, "touch") { player, node ->
+ if( node.id == statueArray[getAttribute(player, attributeStatueStateNumber, 0)]) {
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 0) {
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, 1)
+ sendNPCDialogueLines(player, NPCs.LADY_TABLE_2283, FacialExpression.NEUTRAL, false, "Excellent work, @name.", "Please step through the portal to meet your next", "challenge.")
+ return@on true
+ }
+ } else {
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 0) {
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, -1)
+ openDialogue(player, LadyTableDialogueFile(2), NPC(NPCs.LADY_TABLE_2283))
+ return@on true
+ }
+ }
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 1) {
+ sendNPCDialogueLines(player, NPCs.LADY_TABLE_2283, FacialExpression.NEUTRAL, false, "Please step through the portal to meet your next", "challenge.")
+ }
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == -1) {
+ openDialogue(player, LadyTableDialogueFile(2), NPC(NPCs.LADY_TABLE_2283))
+ }
+ return@on true
+ }
+
+ }
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { player -> dialogueNum == 1 }
+ .endWith { _, player ->
+ submitWorldPulse(object : Pulse() {
+ var counter = 0
+ override fun pulse(): Boolean {
+ when (counter++) {
+ 0 -> {
+ lock(player, 15)
+ setAttribute(player, attributeStatueStateNumber, (1..12).random())
+ setVarbit(player, statueVarbit, getAttribute(player, attributeStatueStateNumber, 0))
+ sendNPCDialogueLines(player, NPCs.LADY_TABLE_2283, FacialExpression.NEUTRAL, true,"Welcome, @name.", "This room will test your observation skills.")
+ }
+ 5 -> {
+ sendNPCDialogueLines(player, NPCs.LADY_TABLE_2283, FacialExpression.NEUTRAL, true, "Study the statues closely.", "There is one missing statue in this room.")
+ }
+ 10 -> {
+ sendNPCDialogueLines(player, NPCs.LADY_TABLE_2283, FacialExpression.NEUTRAL, true, "We will also mix the order up a little, to make things", "interesting for you!")
+ }
+ 15 -> {
+ sendNPCDialogueLines(player, NPCs.LADY_TABLE_2283, FacialExpression.NEUTRAL, true,"You have 10 seconds to memorise the statues... starting", "NOW!")
+ }
+ 20 -> {
+ closeDialogue(player)
+ }
+ 31 -> { // From 15 -> 16 * 600ms = 10 seconds
+ openOverlay(player,Components.FADE_TO_BLACK_120)
+ sendNPCDialogueLines(player, NPCs.LADY_TABLE_2283, FacialExpression.NEUTRAL, true,"We will now dim the lights and bring the missing statue", "back in.")
+ }
+ 34 -> { // From 15 -> 16 * 600ms = 10 seconds
+ setVarbit(player, statueVarbit, 0)
+ openOverlay(player,Components.FADE_FROM_BLACK_170)
+ sendNPCDialogueLines(player, NPCs.LADY_TABLE_2283, FacialExpression.NEUTRAL, true,"Please touch the statue you think has been added.")
+ return true
+ }
+ }
+ return false
+ }
+ })
+ }
+
+ b.onPredicate { player -> dialogueNum == 2 || (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == -1) }
+ .betweenStage { _, player, _, _ ->
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, -1)
+ }
+ .npc(FacialExpression.SAD, "No... I am very sorry.", "Apparently you are not up to the challenge.", "I will return you where you came from, better luck in the", "future.")
+ .endWith { _, player ->
+ removeAttribute(player, attributeStatueStateNumber)
+ removeAttribute(player, RecruitmentDrive.attributeStagePassFailState)
+ RecruitmentDriveListeners.FailTestCutscene(player).start()
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/MissCheeversDialogue.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/MissCheeversDialogue.kt
new file mode 100644
index 000000000..21fed50ba
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/MissCheeversDialogue.kt
@@ -0,0 +1,512 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.global.action.DoorActionHandler
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.interaction.QueueStrength
+import core.game.node.entity.player.Player
+import core.game.world.map.Location
+import core.plugin.Initializable
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+import org.rs09.consts.Scenery
+
+@Initializable
+class MissCheeversDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, MissCheeversDialogueFile(), npc)
+ return true
+ }
+ override fun newInstance(player: Player): DialoguePlugin {
+ return MissCheeversDialogue(player)
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.MISS_CHEEVERS_2288)
+ }
+}
+
+class MissCheeversDialogueFile(private val dialogueNum: Int = 0) : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { _ -> dialogueNum == 0 }
+ .playerl(FacialExpression.FRIENDLY,"Can you give me any help?")
+ .npcl(FacialExpression.FRIENDLY,"No, I am sorry, but that is forbidden by our rules.")
+ .npcl(FacialExpression.FRIENDLY,"If you are having a particularly tough time of it, I suggest you leave and come back later when you are in a more receptive frame of mind.")
+ .npcl(FacialExpression.FRIENDLY,"Sometimes a break from concentration will yield fresh insight. Our aim is to test you, but not to the point of frustration!")
+ .playerl(FacialExpression.FRIENDLY,"Okay, thanks!")
+ .end()
+
+
+ b.onPredicate { _ -> dialogueNum == 1 }
+ .betweenStage { _, player, _, _ ->
+ setVarbit(player, MissCheeversRoomListeners.doorVarbit, 0)
+ removeAttribute(player, MissCheeversRoomListeners.attributebook)
+ removeAttribute(player, MissCheeversRoomListeners.attributemagnet)
+ removeAttribute(player, MissCheeversRoomListeners.attributeKnife)
+ removeAttribute(player, MissCheeversRoomListeners.attributeShears)
+ removeAttribute(player, MissCheeversRoomListeners.attributeTin)
+ removeAttribute(player, MissCheeversRoomListeners.attributeChisel)
+ removeAttribute(player, MissCheeversRoomListeners.attributeWire)
+
+ removeAttribute(player, MissCheeversRoomListeners.attribute3VialsOfLiquid)
+
+ MissCheeversRoomListeners.Companion.Vials.vialMap.map {
+ removeAttribute(player, it.value.attribute)
+ }
+
+ MissCheeversRoomListeners.Companion.DoorVials.doorVialsRequiredMap.map {
+ removeAttribute(player, it.value.attribute)
+ }
+ }
+ .npcl(FacialExpression.FRIENDLY,"Greetings, @name. Welcome to my challenge.")
+ .npcl(FacialExpression.FRIENDLY,"All you need to do is leave from the opposite door to where you came in by.")
+ .npcl(FacialExpression.FRIENDLY,"I will warn you that this is more complicated than it may at first appear.")
+ .npcl(FacialExpression.FRIENDLY,"I should also warn you that there are limited supplies of the items in this room, so think carefully before using them, you may find yourself stuck and have to leave to start again!")
+ .npcl(FacialExpression.FRIENDLY,"Best of luck!")
+ .end()
+ }
+}
+
+class MissCheeversRoomListeners : InteractionListener {
+ companion object {
+
+ const val doorVarbit = 686
+
+ const val attributebook = "quest:recruitmentdrive-book"
+ const val attributemagnet = "quest:recruitmentdrive-magnet"
+ const val attributeKnife = "quest:recruitmentdrive-knife"
+ const val attributeShears = "quest:recruitmentdrive-shears"
+ const val attributeTin = "quest:recruitmentdrive-tin"
+ const val attributeChisel = "quest:recruitmentdrive-chisel"
+ const val attributeWire = "quest:recruitmentdrive-wire"
+
+ const val attribute3VialsOfLiquid = "quest:recruitmentdrive-3vialsofliquid"
+
+ /** Enums to map canoes to related properties. */
+ enum class Vials(val itemId: Int, val attribute: String) {
+ CUPRIC_SULPHATE_5577(Items.CUPRIC_SULPHATE_5577, "quest:recruitmentdrive-cupricsulphate"),
+ ACETIC_ACID_5578(Items.ACETIC_ACID_5578, "quest:recruitmentdrive-aceticacid"),
+ GYPSUM_5579(Items.GYPSUM_5579, "quest:recruitmentdrive-gypsum"),
+ SODIUM_CHLORIDE_5580(Items.SODIUM_CHLORIDE_5580, "quest:recruitmentdrive-sodiumchloride"),
+ NITROUS_OXIDE_5581(Items.NITROUS_OXIDE_5581, "quest:recruitmentdrive-nitrousoxide"),
+ VIAL_OF_LIQUID_5582(Items.VIAL_OF_LIQUID_5582, "quest:recruitmentdrive-vialofliquid"),
+ TIN_ORE_POWDER_5583(Items.TIN_ORE_POWDER_5583, "quest:recruitmentdrive-tinorepowder"),
+ CUPRIC_ORE_POWDER_5584(Items.CUPRIC_ORE_POWDER_5584, "quest:recruitmentdrive-cupricorepowder");
+
+ companion object {
+ @JvmField
+ val vialMap = Vials.values().associateBy { it.itemId }
+ }
+ }
+
+
+ /** Enums to map canoes to related properties. */
+ enum class DoorVials(val itemId: Int, val attribute: String) {
+ CUPRIC_SULPHATE_5577(Items.CUPRIC_SULPHATE_5577, "quest:recruitmentdrive-doorcupricsulphate"),
+ ACETIC_ACID_5578(Items.ACETIC_ACID_5578, ""),
+ SODIUM_CHLORIDE_5580(Items.SODIUM_CHLORIDE_5580, ""),
+ VIAL_OF_LIQUID_5582(Items.VIAL_OF_LIQUID_5582, "quest:recruitmentdrive-doorvialofliquid");
+
+ companion object {
+ @JvmField
+ val doorVialsArray = DoorVials.values().map { it.itemId }.toIntArray()
+ val doorVialsMap = DoorVials.values().associateBy { it.itemId }
+ val doorVialsRequiredMap = DoorVials.values().associateBy { it.itemId }.filter { it.value.attribute != "" }
+ }
+ }
+
+
+ fun searchingHelper(player: Player, attributeCheck: String, item: Int, searchingDescription: String, objectDescription: String) {
+ queueScript(player, 0, QueueStrength.WEAK) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ sendMessage(player, searchingDescription)
+ return@queueScript delayScript(player, 2)
+ }
+ 1 -> {
+ if (attributeCheck != "" && !getAttribute(player, attributeCheck, false)) {
+ setAttribute(player, attributeCheck, true)
+ addItem(player, item)
+ sendMessage(player, objectDescription)
+ } else {
+ sendMessage(player, "You don't find anything interesting.")
+ }
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+ }
+ }
+
+ override fun defineListeners() {
+
+ /** Obtainable Items */
+
+ on(Scenery.OLD_BOOKSHELF_7327, IntType.SCENERY, "search") { player, _ ->
+ searchingHelper(player, attributemagnet, Items.MAGNET_5604, "You search the bookshelves...", "Hidden amongst the books you find a magnet.")
+ return@on true
+ }
+
+ on(Scenery.OLD_BOOKSHELF_7328, IntType.SCENERY, "search") { player, _ ->
+ searchingHelper(player, attributebook, Items.ALCHEMICAL_NOTES_5588, "You search the bookshelves...", "You find a book that looks like it might be helpful.")
+ return@on true
+ }
+
+ on(Scenery.OLD_BOOKSHELF_7329, IntType.SCENERY, "search") { player, _ ->
+ searchingHelper(player, attributeKnife, Items.KNIFE_5605, "You search the bookshelves...", "Hidden amongst the books you find a knife.")
+ return@on true
+ }
+
+ on(Scenery.OLD_BOOKSHELF_7330, IntType.SCENERY, "search") { player, _ ->
+ searchingHelper(player, "", 0, "You search the bookshelves...", "")
+ return@on true
+ }
+
+ on(Scenery.SHELVES_7333, IntType.SCENERY, "search") { player, _ ->
+ val vialList = ArrayList()
+ if (!getAttribute(player, Vials.vialMap[Items.ACETIC_ACID_5578]!!.attribute, false)) { vialList.add(Items.ACETIC_ACID_5578) }
+ if (!getAttribute(player, Vials.vialMap[Items.VIAL_OF_LIQUID_5582]!!.attribute, false)) { vialList.add(Items.VIAL_OF_LIQUID_5582) }
+ openDialogue(player, VialShelfDialogueFile(vialList.toIntArray()))
+ return@on true
+ }
+
+ on(Scenery.SHELVES_7334, IntType.SCENERY, "search") { player, _ ->
+ val vialList = ArrayList()
+ if (!getAttribute(player, Vials.vialMap[Items.CUPRIC_SULPHATE_5577]!!.attribute, false)) { vialList.add(Items.CUPRIC_SULPHATE_5577) }
+ openDialogue(player, VialShelfDialogueFile(vialList.toIntArray()))
+ return@on true
+ }
+
+ on(Scenery.SHELVES_7335, IntType.SCENERY, "search") { player, _ ->
+ val vialList = ArrayList()
+ if (!getAttribute(player, Vials.vialMap[Items.GYPSUM_5579]!!.attribute, false)) { vialList.add(Items.GYPSUM_5579) }
+ openDialogue(player, VialShelfDialogueFile(vialList.toIntArray()))
+ return@on true
+ }
+
+ on(Scenery.SHELVES_7336, IntType.SCENERY, "search") { player, _ ->
+ val vialList = ArrayList()
+ if (!getAttribute(player, Vials.vialMap[Items.SODIUM_CHLORIDE_5580]!!.attribute, false)) { vialList.add(Items.SODIUM_CHLORIDE_5580) }
+ openDialogue(player, VialShelfDialogueFile(vialList.toIntArray()))
+ return@on true
+ }
+
+ on(Scenery.SHELVES_7337, IntType.SCENERY, "search") { player, _ ->
+ val vialList = ArrayList()
+ if (!getAttribute(player, Vials.vialMap[Items.NITROUS_OXIDE_5581]!!.attribute, false)) { vialList.add(Items.NITROUS_OXIDE_5581) }
+ openDialogue(player, VialShelfDialogueFile(vialList.toIntArray()))
+ return@on true
+ }
+
+ on(Scenery.SHELVES_7338, IntType.SCENERY, "search") { player, _ ->
+ val vialList = ArrayList()
+ if (!getAttribute(player, Vials.vialMap[Items.TIN_ORE_POWDER_5583]!!.attribute, false)) { vialList.add(Items.TIN_ORE_POWDER_5583) }
+ openDialogue(player, VialShelfDialogueFile(vialList.toIntArray()))
+ return@on true
+ }
+
+ on(Scenery.SHELVES_7339, IntType.SCENERY, "search") { player, _ ->
+ val vialList = ArrayList()
+ if (!getAttribute(player, Vials.vialMap[Items.CUPRIC_ORE_POWDER_5584]!!.attribute, false)) { vialList.add(Items.CUPRIC_ORE_POWDER_5584) }
+ openDialogue(player, VialShelfDialogueFile(vialList.toIntArray()))
+ return@on true
+ }
+
+ on(Scenery.SHELVES_7340, IntType.SCENERY, "search") { player, _ ->
+ val vialList = ArrayList()
+ val total = getAttribute(player, attribute3VialsOfLiquid, 3)
+ for (i in 1..total) { vialList.add(Items.VIAL_OF_LIQUID_5582) }
+ openDialogue(player, VialShelfDialogueFile(vialList.toIntArray(), attribute3VialsOfLiquid))
+ return@on true
+ }
+
+ on(Scenery.CRATE_7347, IntType.SCENERY, "search") { player, node ->
+ if (node.location == Location(2476, 4943)) {
+ searchingHelper(player, attributeTin, Items.TIN_5600, "You search the crate...", "Inside the crate you find a tin.")
+ } else {
+ searchingHelper(player, "", 0, "You search the crate...", "")
+ }
+ return@on true
+ }
+
+ on(Scenery.CRATE_7348, IntType.SCENERY, "search") { player, node ->
+ if (node.location == Location(2476, 4937)) {
+ searchingHelper(player, attributeChisel, Items.CHISEL_5601, "You search the crate...", "Inside the crate you find a chisel.")
+ } else {
+ searchingHelper(player, "", 0, "You search the crate...", "")
+ }
+ return@on true
+ }
+
+ on(Scenery.CRATE_7349, IntType.SCENERY, "search") { player, node ->
+ if (node.location == Location(2475, 4943)) {
+ searchingHelper(player, attributeWire, Items.BRONZE_WIRE_5602, "You search the crate...", "Inside the crate you find some wire.")
+ } else {
+ searchingHelper(player, "", 0, "You search the crate...", "")
+ }
+ return@on true
+ }
+
+ on(Scenery.CLOSED_CHEST_7350, IntType.SCENERY, "open") { player, node ->
+ replaceScenery(node as core.game.node.scenery.Scenery, Scenery.OPEN_CHEST_7351, 100)
+ return@on true
+ }
+
+ on(Scenery.OPEN_CHEST_7351, IntType.SCENERY, "search") { player, _ ->
+ searchingHelper(player, attributeShears, Items.SHEARS_5603, "You search the chest...", "Inside the chest you find some shears.")
+ return@on true
+ }
+
+ on(Scenery.OPEN_CHEST_7351, IntType.SCENERY, "close") { player, node ->
+ replaceScenery(node as core.game.node.scenery.Scenery, Scenery.CLOSED_CHEST_7350, -1)
+ return@on true
+ }
+
+ /** Combining Items the correct way */
+
+ onUseWith(ITEM, Items.TIN_5600, Items.GYPSUM_5579) { player, used, with ->
+ if(removeItem(player, used.id) && removeItem(player, with.id)) {
+ sendMessage(player, "You empty the vial into the tin.")
+ addItemOrDrop(player, Items.TIN_5592)
+ addItemOrDrop(player, Items.VIAL_229)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(ITEM, Items.TIN_5592, Items.VIAL_OF_LIQUID_5582) { player, used, with ->
+ if(removeItem(player, used.id) && removeItem(player, with.id)) {
+ sendMessage(player, "You empty the vial into the tin.")
+ sendMessage(player, "You notice the tin gets quite warm as you do this.")
+ sendMessage(player, "A lumpy white mixture is made, that seems to be hardening.")
+ addItemOrDrop(player, Items.TIN_5593)
+ addItemOrDrop(player, Items.VIAL_229)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(SCENERY, Items.TIN_5593, Scenery.KEY_7346) { player, used, _ ->
+ if(removeItem(player, used.id)) {
+ sendMessage(player, "You make an impression of the key as the white mixture hardens.")
+ addItemOrDrop(player, Items.TIN_5594)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(ITEM, Items.TIN_5594, Items.TIN_ORE_POWDER_5583) { player, used, with ->
+ if(removeItem(player, used.id) && removeItem(player, with.id)) {
+ sendMessage(player, "You pour the vial into the impression of the key.")
+ addItemOrDrop(player, Items.TIN_5595)
+ addItemOrDrop(player, Items.VIAL_229)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(ITEM, Items.TIN_5595, Items.CUPRIC_ORE_POWDER_5584) { player, used, with ->
+ if(removeItem(player, used.id) && removeItem(player, with.id)) {
+ sendMessage(player, "You pour the vial into the impression of the key.")
+ addItemOrDrop(player, Items.TIN_5597)
+ addItemOrDrop(player, Items.VIAL_229)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(ITEM, Items.TIN_5594, Items.CUPRIC_ORE_POWDER_5584) { player, used, with ->
+ if(removeItem(player, used.id) && removeItem(player, with.id)) {
+ sendMessage(player, "You pour the vial into the impression of the key.")
+ addItemOrDrop(player, Items.TIN_5596)
+ addItemOrDrop(player, Items.VIAL_229)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(ITEM, Items.TIN_5596, Items.TIN_ORE_POWDER_5583) { player, used, with ->
+ if(removeItem(player, used.id) && removeItem(player, with.id)) {
+ sendMessage(player, "You pour the vial into the impression of the key.")
+ addItemOrDrop(player, Items.TIN_5597)
+ addItemOrDrop(player, Items.VIAL_229)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(SCENERY, Items.TIN_5597, Scenery.BUNSEN_BURNER_7332) { player, used, _ ->
+ if(removeItem(player, used.id)) {
+ sendMessage(player, "You heat the two powdered ores together in the tin.")
+ sendMessage(player, "You make a duplicate of the key in bronze.")
+ addItemOrDrop(player, Items.TIN_5598)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(ITEM, Items.TIN_5598, Items.BRONZE_WIRE_5602, Items.CHISEL_5601, Items.KNIFE_5605) { player, used, with ->
+ if(removeItem(player, used.id)) {
+ sendMessage(player, "You prise the duplicate key out of the tin.")
+ addItemOrDrop(player, Items.TIN_5594)
+ addItemOrDrop(player, Items.BRONZE_KEY_5585)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(SCENERY, Items.METAL_SPADE_5586, Scenery.BUNSEN_BURNER_7332) { player, used, _ ->
+ if(removeItem(player, used.id)) {
+ sendMessage(player, "You burn the wooden handle away from the spade...")
+ sendMessage(player, "...and are left with a metal spade with no handle.")
+ addItemOrDrop(player, Items.ASHES_592)
+ addItemOrDrop(player, Items.METAL_SPADE_5587)
+ }
+ return@onUseWith true
+ }
+
+
+ on(Scenery.STONE_DOOR_7343, SCENERY, "study") { player, node ->
+ sendDialogueLines(player, "There is a stone slab here obstructing the door.", "There is a small hole in the slab that looks like it might be for a handle.")
+ sendMessage(player, "It's nearly a perfect fit!")
+ return@on true
+ }
+
+ onUseWith(SCENERY, Items.METAL_SPADE_5587, Scenery.STONE_DOOR_7343) { player, used, _ ->
+ if(removeItem(player, used.id)) {
+ sendMessage(player, "You slide the spade into the hole in the stone...")
+ sendMessage(player, "It's nearly a perfect fit!")
+ setVarbit(player, doorVarbit, 1)
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(SCENERY, DoorVials.doorVialsArray, Scenery.STONE_DOOR_7344) { player, used, _ ->
+ if(removeItem(player, used.id)) {
+ setAttribute(player, DoorVials.doorVialsMap[used.id]!!.attribute, true)
+ sendMessage(player, "You pour the vial onto the flat part of the spade.")
+ }
+ if (DoorVials.doorVialsRequiredMap.all { getAttribute(player, it.value.attribute, false) }) {
+ sendMessage(player, "Something caused a reaction when mixed!")
+ sendMessage(player, "The spade gets hotter, and expands slightly.")
+ setVarbit(player, doorVarbit, 2)
+ }
+ return@onUseWith true
+ }
+
+ on(Scenery.STONE_DOOR_7344, SCENERY, "pull-spade") { player, node ->
+ if (DoorVials.doorVialsRequiredMap.all { getAttribute(player, it.value.attribute, false) }) {
+ sendMessage(player, "You pull on the spade...")
+ sendMessage(player, "It works as a handle, and you swing the stone door open.")
+ setVarbit(player, doorVarbit, 3)
+ } else {
+ sendMessage(player, "You pull on the spade...")
+ sendMessage(player, "It comes loose, and slides out of the hole in the stone.")
+ addItemOrDrop(player, Items.METAL_SPADE_5587)
+ setVarbit(player, doorVarbit, 0)
+ }
+ return@on true
+ }
+
+ on(Scenery.OPEN_DOOR_7345, SCENERY, "walk-through") { player, node ->
+ if(player.location.x <= 2477) {
+ player.walkingQueue.addPath(2477, 4940)
+ player.walkingQueue.addPath(2478, 4940)
+ } else {
+ player.walkingQueue.addPath(2477, 4940)
+ }
+ return@on true
+ }
+
+
+ }
+
+}
+
+private class VialShelfDialogueFile(private val flaskIdsArray: IntArray, private val specialAttribute: String? = null) : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { _ -> true }.branch { _ -> flaskIdsArray.size }.let { branch ->
+
+ branch.onValue(3)
+ // This is the only shelf with 3 vials of water.
+ .line("There are three vials on this shelf.")
+ .options("Take the vials?").let { optionBuilder ->
+ optionBuilder.option("Take one vial.")
+ .endWith { _, player ->
+ addItemOrDrop(player, flaskIdsArray[0])
+ if (specialAttribute != null) {
+ setAttribute(player, specialAttribute, getAttribute(player, specialAttribute, 3) - 1)
+ print(getAttribute(player, specialAttribute, 3))
+ }
+ }
+ optionBuilder.option("Take two vials.")
+ .endWith { _, player ->
+ addItemOrDrop(player, flaskIdsArray[0])
+ addItemOrDrop(player, flaskIdsArray[1])
+ if (specialAttribute != null) {
+ setAttribute(player, specialAttribute, getAttribute(player, specialAttribute, 3) - 2)
+ }
+ }
+ optionBuilder.option("Take all three vials.")
+ .endWith { _, player ->
+ addItemOrDrop(player, flaskIdsArray[0])
+ addItemOrDrop(player, flaskIdsArray[1])
+ addItemOrDrop(player, flaskIdsArray[2])
+ if (specialAttribute != null) {
+ setAttribute(player, specialAttribute, getAttribute(player, specialAttribute, 3) - 3)
+ }
+ }
+ optionBuilder.option("Don't take a vial.")
+ .end()
+ }
+ branch.onValue(2)
+ .line("There are two vials on this shelf.")
+ .options("Take the vials?").let { optionBuilder ->
+ optionBuilder.option("Take the first vial.")
+ .endWith { _, player ->
+ addItemOrDrop(player, flaskIdsArray[0])
+ if (specialAttribute != null) {
+ setAttribute(player, specialAttribute, getAttribute(player, specialAttribute, 2) - 1)
+ } else {
+ setAttribute(player, MissCheeversRoomListeners.Companion.Vials.vialMap[flaskIdsArray[0]]!!.attribute, true)
+ }
+ }
+ optionBuilder.option("Take the second vial.")
+ .endWith { _, player ->
+ addItemOrDrop(player, flaskIdsArray[1])
+ if (specialAttribute != null) {
+ setAttribute(player, specialAttribute, getAttribute(player, specialAttribute, 2) - 1)
+ } else {
+ setAttribute(player, MissCheeversRoomListeners.Companion.Vials.vialMap[flaskIdsArray[1]]!!.attribute, true)
+ }
+ }
+ optionBuilder.option("Take both vials.")
+ .endWith { _, player ->
+ addItemOrDrop(player, flaskIdsArray[0])
+ addItemOrDrop(player, flaskIdsArray[1])
+ if (specialAttribute != null) {
+ setAttribute(player, specialAttribute, getAttribute(player, specialAttribute, 2) - 2)
+ } else {
+ setAttribute(player, MissCheeversRoomListeners.Companion.Vials.vialMap[flaskIdsArray[0]]!!.attribute, true)
+ setAttribute(player, MissCheeversRoomListeners.Companion.Vials.vialMap[flaskIdsArray[1]]!!.attribute, true)
+ }
+ }
+ }
+
+ branch.onValue(1)
+ .line("There is a vial on this shelf.")
+ .options("Take the vial?").let { optionBuilder ->
+ optionBuilder.option("YES")
+ .endWith { _, player ->
+ addItemOrDrop(player, flaskIdsArray[0])
+ if (specialAttribute != null) {
+ setAttribute(player, specialAttribute, getAttribute(player, specialAttribute, 1) - 1)
+ } else {
+ setAttribute(player, MissCheeversRoomListeners.Companion.Vials.vialMap[flaskIdsArray[0]]!!.attribute, true)
+ }
+ }
+ optionBuilder.option("NO")
+ .end()
+ }
+
+ branch.onValue(0)
+ .line("There is nothing of interest on these shelves.")
+ }
+ }
+}
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/MsHynnTerprettDialogue.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/MsHynnTerprettDialogue.kt
new file mode 100644
index 000000000..91be2f7a7
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/MsHynnTerprettDialogue.kt
@@ -0,0 +1,154 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import org.rs09.consts.NPCs
+
+@Initializable
+class MsHynnTerprettDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, MsHynnTerprettDialogueFile(), npc)
+ return true
+ }
+ override fun newInstance(player: Player): DialoguePlugin {
+ return MsHynnTerprettDialogue(player)
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.MS_HYNN_TERPRETT_2289)
+ }
+}
+
+class MsHynnTerprettDialogueFile(private val dialogueNum: Int = 0) : DialogueBuilderFile() {
+ companion object {
+ const val attributeRandomRiddle = "quest:recruitmentdrive-randomriddle"
+ const val attributeRecentlyCorrect = "quest:recruitmentdrive-recentlycorrect"
+ }
+
+ override fun create(b: DialogueBuilder) {
+
+ b.onPredicate { player -> true }.branch { player ->
+ if (getAttribute(player, attributeRecentlyCorrect, false)) {
+ return@branch 3
+ } else if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == -1) {
+ return@branch 2
+ } else if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 1) {
+ return@branch 1
+ } else {
+ return@branch 0
+ }
+ }.let { branch ->
+ /** Failed Branch */
+ val failedStage = b.placeholder()
+ failedStage.builder()
+ .npc(FacialExpression.SAD, "No... I am very sorry.", "Apparently you are not up to the challenge.", "I will return you where you came from, better luck in the", "future.")
+ .endWith { _, player ->
+ removeAttribute(player, attributeRandomRiddle)
+ removeAttribute(player, attributeRecentlyCorrect)
+ removeAttribute(player, RecruitmentDrive.attributeStagePassFailState)
+ RecruitmentDriveListeners.FailTestCutscene(player).start()
+ }
+ /** Passed Branch */
+ val passedStage = b.placeholder()
+ passedStage.builder()
+ .betweenStage { _, player, _, _ ->
+ removeAttribute(player, attributeRandomRiddle)
+ removeAttribute(player, attributeRecentlyCorrect)
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 0) {
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, 1)
+ }
+ }
+ .npc("Excellent work, @name.", "Please step through the portal to meet your next", "challenge.")
+ .end()
+
+ branch.onValue(3) // Passed stage
+ .goto(passedStage)
+ branch.onValue(2) // Failed stage
+ .goto(failedStage)
+ branch.onValue(1) // Already passed stage
+ .npc("You certainly have the wits to be a Temple Knight.", "Pass on through the portal to find your next challenge.")
+ .end()
+ branch.onValue(0)
+ .betweenStage { _, player, _, _ ->
+ if (getAttribute(player, attributeRandomRiddle, -1) !in 0..4) {
+ setAttribute(player, attributeRandomRiddle, (0..4).random())
+ }
+ }
+ .npc("Greetings, @name.", "I am here to test your wits with a simple riddle.")
+ .branch { player -> getAttribute(player, attributeRandomRiddle, 0) }
+ .let { branch ->
+ branch.onValue(0)
+ .npc(FacialExpression.THINKING, "Here is my riddle:", "I estimate there to be one million inhabitants in the world", "of @servername, creatures and people both.")
+ .npc(FacialExpression.THINKING, "What number would you get if you multiply", "the number of fingers on everything's left hand, to the", "nearest million?")
+ .manualStage { _, player, _, _ ->
+ sendInputDialogue(player, false, "Enter the amount:") { value: Any ->
+ if(value == "0") {
+ setAttribute(player, attributeRecentlyCorrect, true)
+ } else {
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, -1)
+ }
+ openDialogue(player, MsHynnTerprettDialogueFile(), NPC(NPCs.MS_HYNN_TERPRETT_2289))
+ return@sendInputDialogue
+ }
+ }
+ .end()
+
+ branch.onValue(1)
+ .npc(FacialExpression.THINKING, "Here is my riddle:", "Which of the following statements is true?")
+ .options().let { optionBuilder ->
+ optionBuilder.option("The number of false statements here is one.").goto(failedStage)
+ optionBuilder.option("The number of false statements here is two.").goto(failedStage)
+ optionBuilder.option("The number of false statements here is three.").goto(passedStage)
+ optionBuilder.option("The number of false statements here is four.").goto(failedStage)
+ }
+
+ branch.onValue(2)
+ .npc(FacialExpression.THINKING, "Here is my riddle:", "I have both a husband and daughter.")
+ .npc(FacialExpression.THINKING, "My husband is four times older than my daughter. ", "In twenty years time, he will be twice as old as my", "daughter.")
+ .npc(FacialExpression.THINKING, "How old is my daughter now?")
+ .manualStage { _, player, _, _ ->
+ sendInputDialogue(player, true, "Enter the amount:") { value: Any ->
+ if(value == 10) {
+ setAttribute(player, attributeRecentlyCorrect, true)
+ } else {
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, -1)
+ }
+ openDialogue(player, MsHynnTerprettDialogueFile(), NPC(NPCs.MS_HYNN_TERPRETT_2289))
+ return@sendInputDialogue
+ }
+ }
+ .end()
+
+ branch.onValue(3)
+ .npc(FacialExpression.THINKING, "Here is my riddle:", "Imagine that you have been captured by an enemy.", "You are to be killed, but in a moment of mercy, the", "enemy has allowed you to pick your own demise.")
+ .npc(FacialExpression.THINKING, "Your first choice is to be drowned in a lake of acid.")
+ .npc(FacialExpression.THINKING, "Your second choice is to be burned on a fire.")
+ .npc(FacialExpression.THINKING, "Your third choice is to be thrown to a pack of wolves", "that have not been fed in over a month.")
+ .npc(FacialExpression.THINKING, "Your final choice of fate is to be thrown from the walls", "of a castle, many hundreds of feet high.")
+ .npc(FacialExpression.THINKING, "Which fate would you be wise to choose?")
+ .options().let { optionBuilder ->
+ optionBuilder.option("The lake of acid.").goto(failedStage)
+ optionBuilder.option("The large fire.").goto(failedStage)
+ optionBuilder.option("The wolves.").goto(passedStage)
+ optionBuilder.option("The castle walls.").goto(failedStage)
+ }
+
+ branch.onValue(4)
+ .npc(FacialExpression.THINKING, "Here is my riddle:", "I dropped four identical stones, into four identical", "buckets, each containing an identical amount of water.")
+ .npc(FacialExpression.THINKING, "The first bucket's water was at 32 degrees Fahrenheit,", "the second was at 33 degrees, the third at 34 and the", "fourth was at 35 degrees.")
+ .npc(FacialExpression.THINKING, "Which bucket's stone dropped to the bottom of the bucket", "last?")
+ .options().let { optionBuilder ->
+ optionBuilder.option("Bucket A (32 degrees)").goto(passedStage)
+ optionBuilder.option("Bucket B (33 degrees)").goto(failedStage)
+ optionBuilder.option("Bucket C (34 degrees)").goto(failedStage)
+ optionBuilder.option("Bucket D (35 degrees)").goto(failedStage)
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/RecruitmentDrive.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/RecruitmentDrive.kt
new file mode 100644
index 000000000..709256772
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/RecruitmentDrive.kt
@@ -0,0 +1,135 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.node.entity.player.Player
+import core.game.node.entity.player.link.quest.Quest
+import core.game.node.entity.skill.Skills
+import core.plugin.Initializable
+import org.rs09.consts.Items
+import content.data.Quests
+
+/**
+ * Recruitment Drive Quest
+ *
+ * https://www.youtube.com/watch?v=0yvFREeXNn0 - Quest start log only.
+ * https://www.youtube.com/watch?v=lNlSiUvPL1o - Very good
+ * https://www.youtube.com/watch?v=OGWpX1WqpKM 10:12 - Final congrats page.
+ * https://www.youtube.com/watch?v=nu4OAswRcGg - Speaking to Tiffy after the quest (IMPORTANT!)
+ * https://www.youtube.com/watch?v=srFMJa4nuX0 1:47 blur ass quest log again
+ * https://www.youtube.com/watch?v=L7NdDTWa-1Q HAZEEL's CULT
+ * 1 - Speak to Sir Amik Varze.
+ * 2 - Sent to secret training ground.
+ * 3 - Finish all stages.
+ * 100 - Finish by talking to Tiffy.
+ */
+@Initializable
+class RecruitmentDrive : Quest(Quests.RECRUITMENT_DRIVE, 103, 102, 1, 496, 0, 1, 2) {
+ companion object {
+ const val attributeOriginalGender = "/save:quest:recruitmentdrive-originalgender"
+
+ // Stage state: (0: reset), (1: passed), (-1: failed)
+ const val attributeStagePassFailState = "/save:quest:recruitmentdrive-stagestate"
+ const val attributeCurrentStage = "/save:quest:recruitmentdrive-currentstage"
+ const val attributeStage1 = "/save:quest:recruitmentdrive-stage1"
+ const val attributeStage2 = "/save:quest:recruitmentdrive-stage2"
+ const val attributeStage3 = "/save:quest:recruitmentdrive-stage3"
+ const val attributeStage4 = "/save:quest:recruitmentdrive-stage4"
+ const val attributeStage5 = "/save:quest:recruitmentdrive-stage5"
+ val attributeStageArray = arrayOf(attributeStage1, attributeStage2, attributeStage3, attributeStage4, attributeStage5)
+ }
+
+ override fun drawJournal(player: Player, stage: Int) {
+ super.drawJournal(player, stage)
+ var line = 12
+ var stage = getStage(player)
+
+ var started = getQuestStage(player, Quests.RECRUITMENT_DRIVE) > 0
+
+ if(!started){
+ line(player, "I can start this quest by speaking to !!Sir Amik Varze??,", line++)
+ line(player, "upstairs in !!Falador Castle,??", line++)
+ if (isQuestComplete(player, Quests.DRUIDIC_RITUAL)) {
+ line(player, "with the Druidic Ritual Quest completed,", line++, true)
+ } else {
+ line(player, "with the !!Druidic Ritual Quest?? completed,", line++)
+ }
+ if (isQuestComplete(player, Quests.BLACK_KNIGHTS_FORTRESS)) {
+ line(player, "and since I have completed the Black Knights' Fortress", line++, true)
+ line(player, "Quest.", line++, true)
+ } else {
+ line(player, "and after I have completed the !!Black Knights' Fortress??", line++)
+ line(player, "Quest.", line++)
+ }
+ } else {
+ line(player, "Sir Amik Varze told me that he had put my name forward as", line++, true)
+ line(player, "a potential member of some mysterious organisation.", line++, true)
+
+ if (stage >= 2) {
+ } else if (stage >= 1) {
+ line(player, "I should head to !!Falador Park?? to meet my !!Contact?? so that I", line++, false)
+ line(player, "can begin my !!testing for the job??", line++, false)
+ }
+
+ if (stage >= 3) {
+ line(player, "I went to Falador Park, and met a strange old man named", line++, true)
+ line(player, "Tiffy.", line++, true)
+ line(player, "He sent me to a secret training ground, where my wits", line++, true)
+ line(player, "were thoroughly tested.", line++, true)
+ line(player, "Luckily, I was too smart to fall for any of their little tricks,", line++, true)
+ line(player, "and passed the test with flying colours.", line++, true)
+ } else if (stage >= 2) {
+ // http://youtu.be/Otc7ATq3tik 4:17 - I guess this is why no one opens their quest log
+ line(player, "A man named !!Tiffy?? brought me !!here, to the secret training??", line++, false)
+ line(player, "!!grounds?? so that I could be tested for the job.", line++, false)
+ line++
+ line(player, "I should !!work out?? what I am supposed to do to complete", line++, false)
+ line(player, "these rooms...", line++, false)
+ }
+
+ if (stage >= 4) {
+ line(player, "I am now an official member of the Temple Knights,", line++, true)
+ line(player, "although I have to wait for the paperwork to go through", line++, true)
+ line(player, "before I can commence working for them.", line++, true)
+ } else if (stage >= 3) {
+ line(player, "I should talk to !!Tiffy?? to become a Temple Knight.", line++, false)
+ }
+ if (stage >= 100) {
+ line++
+ line(player," QUEST COMPLETE!", line)
+ }
+ }
+ }
+
+ override fun reset(player: Player) {
+ removeAttribute(player, attributeOriginalGender)
+ removeAttribute(player, attributeStagePassFailState)
+ removeAttribute(player, attributeCurrentStage)
+ removeAttribute(player, attributeStage1)
+ removeAttribute(player, attributeStage2)
+ removeAttribute(player, attributeStage3)
+ removeAttribute(player, attributeStage4)
+ removeAttribute(player, attributeStage5)
+ }
+
+ override fun finish(player: Player) {
+ var ln = 10
+ super.finish(player)
+ player.packetDispatch.sendString("You have passed the Recruitment Drive!", 277, 4)
+ player.packetDispatch.sendItemZoomOnInterface(Items.INITIATE_SALLET_5574, 230, 277, 5)
+
+ drawReward(player, "1 Quest Point", ln++)
+ drawReward(player, "1000 Prayer, Herblore and", ln++)
+ drawReward(player, "Agility XP", ln++)
+ drawReward(player, "Gaze of Saradomin", ln++)
+ drawReward(player, "Temple Knight's Initiate Helm", ln)
+
+ rewardXP(player, Skills.PRAYER, 1000.0)
+ rewardXP(player, Skills.HERBLORE, 1000.0)
+ rewardXP(player, Skills.AGILITY, 1000.0)
+ addItem(player, Items.INITIATE_SALLET_5574)
+ }
+
+ override fun newInstance(`object`: Any?): Quest {
+ return this
+ }
+}
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/RecruitmentDriveListeners.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/RecruitmentDriveListeners.kt
new file mode 100644
index 000000000..39afdf1f4
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/RecruitmentDriveListeners.kt
@@ -0,0 +1,316 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import content.data.Quests
+import core.api.*
+import core.game.activity.Cutscene
+import core.game.dialogue.FacialExpression
+import core.game.global.action.DoorActionHandler
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.interaction.QueueStrength
+import core.game.node.entity.Entity
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.game.world.map.Location
+import core.game.world.map.zone.ZoneBorders
+import core.game.world.map.zone.ZoneRestriction
+import core.net.packet.PacketRepository
+import core.net.packet.context.MinimapStateContext
+import core.net.packet.out.MinimapState
+import org.rs09.consts.*
+
+class RecruitmentDriveListeners : InteractionListener {
+ companion object {
+
+ enum class Stages(val npc: Int, val startLocation: Location, val startWalkLocation: Location, val quitPortal: Int, val successDoor: Int) {
+ SIR_SPISHYUS(NPCs.SIR_SPISHYUS_2282, Location(2490, 4972), Location(2489, 4972), Scenery.PORTAL_7272, Scenery.DOOR_7274),
+ LADY_TABLE(NPCs.LADY_TABLE_2283, Location(2460, 4979), Location(2459, 4979), Scenery.PORTAL_7288, Scenery.DOOR_7302),
+ SIR_KUAM_FERENTSE(NPCs.SIR_KUAM_FERENTSE_2284, Location(2455, 4964), Location(2456, 4964), Scenery.PORTAL_7315, Scenery.DOOR_7317),
+ SIR_TINLEY(NPCs.SIR_TINLEY_2286, Location(2471, 4956), Location(2472, 4956), Scenery.PORTAL_7318, Scenery.DOOR_7320),
+ SIR_REN_ITCHOOD(NPCs.SIR_REN_ITCHOOD_2287, Location(2439, 4956), Location(2440, 4956), Scenery.PORTAL_7321, Scenery.DOOR_7323),
+ MISS_CHEEVERS(NPCs.MISS_CHEEVERS_2288, Location(2467, 4940), Location(2468, 4940), Scenery.PORTAL_7324, Scenery.DOOR_7326),
+ MS_HYNN_TERPRETT(NPCs.MS_HYNN_TERPRETT_2289, Location(2451, 4935), Location(2451, 4936), Scenery.PORTAL_7352, Scenery.DOOR_7354);
+
+ companion object {
+ @JvmField
+ val indexMap = Stages.values().associateBy { it.ordinal }
+ val indexArray = Stages.indexMap.keys.map { it }
+ val quitPortalArray = Stages.indexMap.values.map { it.quitPortal }.toIntArray()
+ val successDoorArray = Stages.indexMap.values.map { it.successDoor }.toIntArray()
+ }
+ }
+
+ fun shuffleStages(player: Player) {
+ // Obtain an array to shuffle. Must be at least [5] long.
+ val stagesArrayToShuffle = intArrayOf(0,1,2,3,4,5,6) // Stages.indexArray.toIntArray()
+ stagesArrayToShuffle.shuffle()
+ setAttribute(player, RecruitmentDrive.attributeStage1, stagesArrayToShuffle[0])
+ setAttribute(player, RecruitmentDrive.attributeStage2, stagesArrayToShuffle[1])
+ setAttribute(player, RecruitmentDrive.attributeStage3, stagesArrayToShuffle[2])
+ setAttribute(player, RecruitmentDrive.attributeStage4, stagesArrayToShuffle[3])
+ setAttribute(player, RecruitmentDrive.attributeStage5, stagesArrayToShuffle[4])
+ setAttribute(player, RecruitmentDrive.attributeCurrentStage, 0)
+ removeAttribute(player, RecruitmentDrive.attributeStagePassFailState)
+ }
+
+ fun callStartingDialogues (player: Player, npc: Int) {
+ when (npc) {
+ NPCs.SIR_SPISHYUS_2282 -> openDialogue(player, SirSpishyusDialogueFile(1), NPC(npc))
+ NPCs.LADY_TABLE_2283 -> openDialogue(player, LadyTableDialogueFile(1), NPC(npc))
+ NPCs.SIR_KUAM_FERENTSE_2284 -> openDialogue(player, SirKuamFerentseDialogueFile(1), NPC(npc))
+ NPCs.SIR_TINLEY_2286 -> openDialogue(player, SirTinleyDialogueFile(1), NPC(npc))
+ NPCs.SIR_REN_ITCHOOD_2287 -> openDialogue(player, SirRenItchwoodDialogueFile(1), NPC(npc))
+ NPCs.MISS_CHEEVERS_2288 -> openDialogue(player, MissCheeversDialogueFile(1), NPC(npc))
+ NPCs.MS_HYNN_TERPRETT_2289 -> openDialogue(player, MsHynnTerprettDialogueFile(1), NPC(npc))
+ }
+ }
+ }
+
+ override fun defineListeners() {
+
+ on(Stages.quitPortalArray, IntType.SCENERY, "use") { player, node ->
+ FailTestCutscene(player).start()
+ return@on true
+ }
+
+ on(Stages.successDoorArray, IntType.SCENERY, "open") { player, node ->
+ // This is specially for Miss Cheevers
+ if (inInventory(player, Items.BRONZE_KEY_5585)) {
+ sendMessage(player, "You use the duplicate key you made to unlock the door.")
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, 1)
+ }
+ // Success Door
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 1) {
+ removeAttribute(player, RecruitmentDrive.attributeStagePassFailState)
+ setAttribute(player, RecruitmentDrive.attributeCurrentStage, getAttribute(player, RecruitmentDrive.attributeCurrentStage, 0) + 1)
+ DoorActionHandler.handleAutowalkDoor(player, node as core.game.node.scenery.Scenery)
+ val currentLevel = getAttribute(player, RecruitmentDrive.attributeCurrentStage, 0)
+ if (currentLevel >= 5) {
+ CompleteTestCutscene(player).start()
+ return@on true
+ }
+ val currentStage = getAttribute(player, RecruitmentDrive.attributeStageArray[currentLevel], 0)
+ val currentStageEnum = Stages.indexMap[currentStage]!!
+ closeDialogue(player)
+
+ // This is specifically for Sir Spishyus to reset the fox, chicken, grain
+ SirSpishyusRoomListeners.resetStage(player)
+
+ queueScript(player, 0, QueueStrength.SOFT) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ player.inventory.clear()
+ player.equipment.clear()
+ openOverlay(player, Components.FADE_TO_BLACK_120)
+ return@queueScript delayScript(player, 6)
+ }
+ 1 -> {
+ teleport(player, currentStageEnum.startLocation)
+ return@queueScript delayScript(player, 2)
+ }
+ 2 -> {
+ openOverlay(player, Components.FADE_FROM_BLACK_170)
+ return@queueScript delayScript(player, 2)
+ }
+ 3 -> {
+ forceWalk(player, currentStageEnum.startWalkLocation, "dumb")
+ return@queueScript delayScript(player, 2)
+ }
+ 4 -> {
+ callStartingDialogues(player, currentStageEnum.npc)
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+ } else {
+ if(node.id == Scenery.DOOR_7323) {
+ // This is specifically for SirRenItchwood
+ openInterface(player, Components.RD_COMBOLOCK_285)
+ } else {
+ sendMessage(player, "You have not completed this room's puzzle yet.")
+ }
+ }
+ return@on true
+ }
+ }
+
+ /** Starting Recruitment Drive test cutscene */
+ class StartTestCutscene(player: Player) : Cutscene(player) {
+ override fun setup() {
+ loadRegion(9805)
+ val currentStage = getAttribute(player, RecruitmentDrive.attributeStageArray[0], 0)
+ setExit(Stages.indexMap[currentStage]!!.startLocation)
+ }
+
+ override fun runStage(stage: Int) {
+ when (stage) {
+ 0 -> {
+ fadeToBlack()
+ PacketRepository.send(MinimapState::class.java, MinimapStateContext(player, 2))
+ timedUpdate(6)
+ }
+ 1 -> {
+ dialogueLinesUpdate(NPCs.SIR_TIFFY_CASHIEN_2290, FacialExpression.HAPPY, "Here we go!", "Mind your head!")
+ timedUpdate(3)
+ }
+ 2 -> {
+ dialogueLinesUpdate(NPCs.SIR_TIFFY_CASHIEN_2290, FacialExpression.HAPPY, "Oops. Ignore the smell!", "Nearly there!")
+ timedUpdate(3)
+ }
+ 3 -> {
+ dialogueLinesUpdate(NPCs.SIR_TIFFY_CASHIEN_2290, FacialExpression.HAPPY, "And...", "Here we are!", "Best of luck!")
+ timedUpdate(3)
+ }
+ 4 -> {
+ player.inventory.clear()
+ player.equipment.clear()
+ PacketRepository.send(MinimapState::class.java, MinimapStateContext(player, 0))
+ dialogueClose()
+ endWithoutFade {
+ val currentStage = getAttribute(player, RecruitmentDrive.attributeStageArray[0], 0)
+ val firstStage = Stages.indexMap[currentStage]!!
+
+ // This is specifically for Sir Spishyus to reset the fox, chicken, grain
+ SirSpishyusRoomListeners.resetStage(player)
+
+ queueScript(player, 0, QueueStrength.SOFT) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ fadeFromBlack()
+ return@queueScript delayScript(player, 2)
+ }
+ 1 -> {
+ forceWalk(player, firstStage.startWalkLocation, "dumb")
+ return@queueScript delayScript(player, 2)
+ }
+ 2 -> {
+ callStartingDialogues(player, firstStage.npc)
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+
+ }
+ }
+ }
+ }
+ }
+
+ /** Failed Recruitment Drive test cutscene */
+ class FailTestCutscene(player: Player) : Cutscene(player) {
+ override fun setup() {
+ loadRegion(9805)
+ setExit(Location(2997, 3374))
+ }
+
+ override fun runStage(stage: Int) {
+ when (stage) {
+ 0 -> {
+ closeDialogue(player)
+ fadeToBlack()
+ PacketRepository.send(MinimapState::class.java, MinimapStateContext(player, 2))
+ timedUpdate(6)
+ }
+ 1 -> {
+ var clearBoss = getAttribute(player, SirKuamFerentseDialogueFile.attributeGeneratedSirLeye, NPC(0))
+ if (clearBoss.id != 0) {
+ clearBoss.clear()
+ }
+ player.inventory.clear()
+ player.equipment.clear()
+ queueScript(player, 0, QueueStrength.SOFT) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ fadeFromBlack()
+ return@queueScript delayScript(player, 2)
+ }
+ 1 -> {
+ PacketRepository.send(MinimapState::class.java, MinimapStateContext(player, 0))
+ openDialogue(player, SirTiffyCashienFailedDialogueFile(), NPC(NPCs.SIR_TIFFY_CASHIEN_2290))
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+ endWithoutFade {
+ face(player, Location(2997, 3373))
+ fadeFromBlack()
+ }
+ }
+ }
+ }
+ }
+
+ /** Complete Recruitment Drive test cutscene */
+ class CompleteTestCutscene(player: Player) : Cutscene(player) {
+ override fun setup() {
+ loadRegion(9805)
+ setExit(Location(2996, 3375))
+ }
+
+ override fun runStage(stage: Int) {
+ when (stage) {
+ 0 -> {
+ if (getQuestStage(player, Quests.RECRUITMENT_DRIVE) == 2) {
+ setQuestStage(player, Quests.RECRUITMENT_DRIVE, 3)
+ }
+ closeDialogue(player)
+ fadeToBlack()
+ PacketRepository.send(MinimapState::class.java, MinimapStateContext(player, 2))
+ timedUpdate(6)
+ }
+ 1 -> {
+ player.inventory.clear()
+ player.equipment.clear()
+ PacketRepository.send(MinimapState::class.java, MinimapStateContext(player, 0))
+ queueScript(player, 0, QueueStrength.SOFT) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ fadeFromBlack()
+ return@queueScript delayScript(player, 2)
+ }
+ 1 -> {
+ openDialogue(player, SirTiffyCashienDialogueFile(), NPC(NPCs.SIR_TIFFY_CASHIEN_2290))
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+ endWithoutFade {
+ face(player, Location(2997, 3373))
+ fadeFromBlack()
+ }
+ }
+ }
+ }
+ }
+
+ class LogoutRecruitmentDrive : MapArea {
+ override fun defineAreaBorders(): Array {
+ return arrayOf(getRegionBorders(9805))
+ }
+
+ override fun getRestrictions(): Array {
+ return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.CANNON, ZoneRestriction.FOLLOWERS)
+ }
+
+ override fun areaLeave(entity: Entity, logout: Boolean) {
+ if (entity is Player) {
+ // This is specifically for Sir Spishyus to reset the fox, chicken, grain
+ SirSpishyusRoomListeners.resetStage(entity)
+ // Clear inventory whenever you leave the recruitment drive area
+ entity.inventory.clear()
+ entity.equipment.clear()
+ // Restore player normal tabs on leave
+ entity.interfaceManager.openDefaultTabs()
+ // Teleport you out if you log out. You should do this in one sitting.
+ if (logout) {
+ PacketRepository.send(MinimapState::class.java, MinimapStateContext(entity, 0))
+ teleport(entity, Location(2996, 3375))
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirAmikVarzeDialogueFile.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirAmikVarzeDialogueFile.kt
new file mode 100644
index 000000000..a9aacdc6b
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirAmikVarzeDialogueFile.kt
@@ -0,0 +1,75 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.dialogue.*
+import content.data.Quests
+
+class SirAmikVarzeDialogueFile : DialogueBuilderFile() {
+
+ override fun create(b: DialogueBuilder) {
+ b.onQuestStages(Quests.RECRUITMENT_DRIVE, 0)
+ .npcl(FacialExpression.FRIENDLY,"Hello, friend!")
+ .playerl(FacialExpression.THINKING, "Do you have any other quests for me to do?")
+ .branch { player -> if(isQuestComplete(player, Quests.BLACK_KNIGHTS_FORTRESS) && isQuestComplete(player, Quests.DRUIDIC_RITUAL)) { 1 } else { 0 } }
+ .let{ branch ->
+ // Failure branch
+ branch.onValue(0)
+ .npcl(FacialExpression.THINKING, "A quest? Alas I do not have any quests I can offer you at this time.")
+ .end()
+ return@let branch // Return DialogueBranchBuilder instead of DialogueBuilder to forward the success branch.
+ }.onValue(1) // Success branch
+ .npc("Quests, eh?", "Well, I don't have anything on the go at the moment,", "but there is an organisation that is always looking for", "capable adventurers to assist them.")
+ .npc(FacialExpression.FRIENDLY,"Your excellent work sorting out those Black Knights", "means I will happily write you a letter of", "recommendation.")
+ .npc("Would you like me to put your name forwards to", "them?")
+ .options().let { optionBuilder ->
+ optionBuilder.option ("Yes please")
+ .playerl("Sure thing Sir Amik, sign me up!")
+ .npc(FacialExpression.SUSPICIOUS,"Erm, well, this is a little embarrassing, I already HAVE", "put you forward as a potential member.")
+ .npc("They are the Temple Knights, and you are to", "meet Sir Tiffy Cashien in Falador park for testing", "immediately.")
+ .playerl("Okey dokey, I'll go do that then.")
+ .endWith { _, player ->
+ if(getQuestStage(player, Quests.RECRUITMENT_DRIVE) == 0) {
+ setAttribute(player, RecruitmentDrive.attributeOriginalGender, player.isMale)
+ setQuestStage(player, Quests.RECRUITMENT_DRIVE, 1)
+ }
+ }
+ optionBuilder.option_playerl("No thanks")
+ .end()
+ optionBuilder.option("Tell me about this organization...")
+ .npc(FacialExpression.SUSPICIOUS,"I cannot tell you much...", "They are called the Temple Knights, and are an", "organisation that was founded by Saradomin personally", "many centuries ago.")
+ .npc("There are many rumours and fables about their works and", "actions, but official records of their presence are non-", "existent.")
+ .npc("It is a secret organisation of extraordinary power and", "resourcefulness...")
+ .npc("Let me put it this way:", "Should you decide to take them up on their generous", "offer to join, you will find yourself in an advantageous", "position that many in this world would envy, and that few")
+ .npc("are called to occupy.")
+ .playerl("Well, that wasn't quite as helpful as I thought it would be...but thanks anyway, I guess.")
+ .end()
+ }
+
+ b.onQuestStages(Quests.RECRUITMENT_DRIVE, 1, 2, 3, 4)
+ .npcl(FacialExpression.FRIENDLY,"Hello, friend!")
+ .playerl(FacialExpression.THINKING, "Can I just skip the test to become a Temple Knight?")
+ .npcl("No, I'm afraid not. I suggest you go meet Sir Tiffy in Falador Park, he will be expecting you.")
+ .end()
+
+ // This should be after the Wanted Quest, but is the placeholder until that quest is implemented.
+ b.onQuestStages(Quests.RECRUITMENT_DRIVE, 100)
+ .npcl(FacialExpression.FRIENDLY,"Hello, friend!")
+ .npcl(FacialExpression.FRIENDLY,"Well @name, now that you are a White Knight, I expect you should be out there hunting Black Knights for us!")
+ .options().let { optionBuilder ->
+ optionBuilder.option_playerl("Can you explain the White Knight honour system again?")
+ .npcl("Sadly we are not as rich as we once were, and there are many White Knights who foolishly lose their combat equipment.")
+ .npcl("We do not think it fair to make a profit from our brethren, so we will sell you equipment at cost, and rebuy it at the same cost, but we will only sell equipment to those we consider responsible enough to")
+ .npcl("wield it correctly.")
+ .npcl("By killing Black Knights, you will increase your reputation with us, by killing White Knights we will obviously think less of you.")
+ .npcl("You can check your White Knight reputation level by looking at your quest journal for the Wanted! Quest, or Sir Vyvin will let you know what level you are at when you go to purchase equipment.")
+ .npcl("Sir Vyvin can be found in Falador Castle, and he will sell you any equipment appropriate to your reputation level.")
+ .npcl("Have fun, and go kill some Black Knights for me!")
+ .playerl("Okay Amik, thanks for explaining!")
+ .end()
+
+ optionBuilder.option("Okay, bye!")
+ .playerl("Okay, 'bye then Amik!")
+ .end()
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirKuamFerentseDialogue.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirKuamFerentseDialogue.kt
new file mode 100644
index 000000000..055845ca2
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirKuamFerentseDialogue.kt
@@ -0,0 +1,58 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.game.world.map.Location
+import core.plugin.Initializable
+import org.rs09.consts.NPCs
+
+@Initializable
+class SirKuamFerentseDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, SirKuamFerentseDialogueFile(), npc)
+ return true
+ }
+ override fun newInstance(player: Player): DialoguePlugin {
+ return SirKuamFerentseDialogue(player)
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.SIR_KUAM_FERENTSE_2284)
+ }
+}
+
+class SirKuamFerentseDialogueFile(private val dialogueNum: Int = 0) : DialogueBuilderFile() {
+ companion object {
+ const val attributeGeneratedSirLeye = "quest:recruitmentdrive-generatedsirleye"
+ }
+
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { player -> getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 1 }
+ .npc(FacialExpression.FRIENDLY, "Excellent work, @name.", "Please step through the portal to meet your next", "challenge.")
+ .end()
+
+ // You can't fail unless you quit the room.
+ b.onPredicate { _ -> true }
+ .npc("Ah, @name, you're finally here.", "Your task for this room is to defeat Sir Leye.", "He has been blessed by Saradomin to be undefeatable", "by any man, so it should be quite the challenge for you.")
+ .npc("If you are having problems, remember", "A true warrior uses his wits as much as his brawn.", "Fight smarter, not harder.")
+ .endWith { _, player ->
+ var boss = getAttribute(player, attributeGeneratedSirLeye, NPC(0))
+ if (boss.id != 0) {
+ boss.clear()
+ }
+ boss = NPC(NPCs.SIR_LEYE_2285, player.location)
+ setAttribute(player, attributeGeneratedSirLeye, boss)
+ boss.isRespawn = false
+ boss.isAggressive = false
+ boss.isWalks = true
+ boss.location = Location(2460, 4963)
+ boss.init()
+ registerHintIcon(player, boss)
+ sendChat(boss, "No man may defeat me!")
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirLeyeBehavior.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirLeyeBehavior.kt
new file mode 100644
index 000000000..3f91752f7
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirLeyeBehavior.kt
@@ -0,0 +1,49 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.node.entity.Entity
+import core.game.node.entity.combat.BattleState
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.npc.NPCBehavior
+import core.game.node.entity.player.Player
+import core.game.node.entity.skill.Skills
+import org.rs09.consts.NPCs
+
+class SirLeyeBehavior : NPCBehavior(NPCs.SIR_LEYE_2285) {
+ var clearTime = 0
+
+ override fun tick(self: NPC): Boolean {
+ // You have 400 ticks to kill Sir Leye
+ if (clearTime++ > 400) {
+ clearTime = 0
+ poofClear(self)
+ }
+ return true
+ }
+
+ override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) {
+ val lifepoints = self.skills.lifepoints
+ if (attacker is Player) {
+ // If you are male, Sir Leye will recover to full health.
+ if (attacker.isMale) {
+ if (state.estimatedHit + Integer.max(state.secondaryHit, 0) > lifepoints - 1) {
+ self.skills.lifepoints = self.getSkills().getStaticLevel(Skills.HITPOINTS)
+ }
+ }
+ }
+ }
+
+ override fun onDeathFinished(self: NPC, killer: Entity) {
+ if (killer is Player) {
+ clearHintIcon(killer)
+ setAttribute(killer, RecruitmentDrive.attributeStagePassFailState, 1)
+ removeAttribute(killer, SirKuamFerentseDialogueFile.attributeGeneratedSirLeye)
+ }
+ }
+
+ // No xp from attacking this dude.
+ override fun getXpMultiplier(self: NPC, attacker: Entity): Double {
+ return 0.0
+ }
+
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirRenItchwoodDialogue.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirRenItchwoodDialogue.kt
new file mode 100644
index 000000000..d5ddd45a0
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirRenItchwoodDialogue.kt
@@ -0,0 +1,199 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.interaction.InterfaceListener
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.game.world.map.Location
+import core.plugin.Initializable
+import org.rs09.consts.Components
+import org.rs09.consts.NPCs
+
+@Initializable
+class SirRenItchwoodDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, SirRenItchwoodDialogueFile(), npc)
+ return true
+ }
+ override fun newInstance(player: Player): DialoguePlugin {
+ return SirRenItchwoodDialogue(player)
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.SIR_REN_ITCHOOD_2287)
+ }
+}
+
+class SirRenItchwoodDialogueFile(private val dialogueNum: Int = 0) : DialogueBuilderFile() {
+ companion object {
+ const val attributeClueNumber = "quest:recruitmentdrive-cluenumber"
+ }
+
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { player -> dialogueNum in 0..1 && getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) != -1 }
+ .betweenStage { _, player, _, _ ->
+ if (getAttribute(player, attributeClueNumber, -1) !in 0..5) {
+ setAttribute(player, attributeClueNumber, (0..5).random())
+ }
+ }
+ .npc("Greetings friend, and welcome here,", "you'll find my puzzle not so clear.", "Hidden amongst my words, it's true,", "the password for the door as a clue.")
+ .options().let { optionBuilder ->
+ optionBuilder.option_playerl ("Can I have the clue for the door?")
+ .branch { player -> getAttribute(player, attributeClueNumber, 0) }
+ .let{ branch ->
+ // Note: all the "I" in here are written in small case "i" (sic)
+ branch.onValue(0)
+ .npc("Better than me, you'll not find", "In rhyming and in puzzles.", "This clue so clear will tax your mind", "Entirely as it confuzzles!")
+ .end()
+ branch.onValue(1)
+ .npc("Feel the aching of your mind", "In puzzlement, confused.", "See the clue hidden behind", "His words, as you perused.")
+ .end()
+ branch.onValue(2)
+ .npc("Look closely at the words i speak;", "And study closely every part.", "See for yourself the word you seek", "Trapped for you if you're smart.")
+ .end()
+ branch.onValue(3)
+ .npc("More than words, i have not for you", "Except the things i say today.", "Aware are you, this is a clue?", "Take note of what i say!")
+ .end()
+ branch.onValue(4)
+ .npc("Rare it is that you will see", "A puzzle such as this!", "In many ways it tickles me", "Now, watching you hit and miss!")
+ .end()
+ branch.onValue(5)
+ .npc("This riddle of mine may confuse,", "I am quite sure of that.", "Mayhap you should closely peruse", "Every word i have spat?")
+ .end()
+ }
+ return@let optionBuilder.option("Can I have a different clue?")
+ .player("I don't get that riddle...", "Can I have a different one?")
+ .branch { player -> getAttribute(player, attributeClueNumber, 0) }
+ .let{ branch ->
+ branch.onValue(0)
+ .npc("Before you hurry through that door", "Inspect the words i spoke.", "There is a simple hidden flaw", "Ere you think my rhyme a joke.")
+ .end()
+ branch.onValue(1)
+ .npc("First my clue you did not see,", "I really wish you had.", "Such puzzling wordplay devilry", "Has left you kind of mad!")
+ .end()
+ branch.onValue(2)
+ .npc("Last time my puzzle did not help", "Apparently, so you've bidden.", "Study my speech carefully, whelp", "To find the answer, hidden.")
+ .end()
+ branch.onValue(3)
+ .npc("Many types have passed through here", "Even such as you amongst their sort.", "And in the end, the puzzles clear;", "The hidden word you saught.")
+ .end()
+ branch.onValue(4)
+ .npc("Repetition, once again", "Against good sense it goes.", "In my words, the answers plain", "Now that you see rhyme flows.")
+ .end()
+ branch.onValue(5)
+ .npc("Twice it is now, i have stated", "In a rhyme, what is the pass.", "Maybe my words obfuscated", "Entirely beyond your class.")
+ .end()
+ }
+ /*
+ // I'm too goddamned lazy to implement the final clue dialogue
+ return@let optionBuilder.option("Can I have the final clue?")
+ .branch { player -> getAttribute(player, attributeClueNumber, 0) }
+ .let{ branch ->
+ branch.onValue(0)
+ .npc("Betrayed by words the answer is", "In that what i say is the key", "There is no more help after this", "Especially no more from me.")
+ .end()
+ branch.onValue(1)
+ .npc("For the last time i will state", "In simple words, the clue.", "Such tricky words make you irate", "Having no idea what to do...")
+ .end()
+ branch.onValue(2)
+ .npc("Lo! my final speech is now", "Attended to by you.", "Study my words, and find out how", "To understand my clue!")
+ .end()
+ branch.onValue(3)
+ .npc("Many types have passed through here", "Even such as you amongst their sort.", "And in the end, the puzzles clear;", "The hidden word you saught.")
+ .end()
+ branch.onValue(4)
+ .npc("Repetition, once again", "Against good sense it goes.", "In my words, the answers plain", "Now that you see rhyme flows.")
+ .end()
+ branch.onValue(5)
+ .npc("Twice it is now, i have stated", "In a rhyme, what is the pass.", "Maybe my words obfuscated", "Entirely beyond your class.")
+ .end()
+ }
+ */
+
+ }
+ b.onPredicate { player -> dialogueNum == 2 || getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == -1 }
+ .betweenStage { _, player, _, _ ->
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, -1)
+ }
+ .npc(FacialExpression.SAD, "It's sad to say,", "this test beat you.", "I'll send you to Tiffy,", "what to do?")
+ .endWith { _, player ->
+ removeAttribute(player, attributeClueNumber)
+ removeAttribute(player, RecruitmentDrive.attributeStagePassFailState)
+ RecruitmentDriveListeners.FailTestCutscene(player).start()
+ }
+
+ }
+}
+
+class DoorLockPuzzleInterfaceListener : InterfaceListener {
+
+ companion object {
+ const val temp = Components.RD_COMBOLOCK_285
+ const val attributeLock1 = "quest:recruitmentdrive-lock1"
+ const val attributeLock2 = "quest:recruitmentdrive-lock2"
+ const val attributeLock3 = "quest:recruitmentdrive-lock3"
+ const val attributeLock4 = "quest:recruitmentdrive-lock4"
+ val lockArray = arrayOf(attributeLock1, attributeLock2, attributeLock3, attributeLock4)
+ val answers = arrayOf("BITE", "FISH", "LAST", "MEAT", "RAIN", "TIME")
+ }
+
+ override fun defineInterfaceListeners() {
+
+ onOpen(Components.RD_COMBOLOCK_285) { player, _ ->
+ setAttribute(player, attributeLock1, 65)
+ setAttribute(player, attributeLock2, 65)
+ setAttribute(player, attributeLock3, 65)
+ setAttribute(player, attributeLock4, 65)
+ return@onOpen true
+ }
+
+ onClose(Components.RD_COMBOLOCK_285) { player, _ ->
+ removeAttribute(player, attributeLock1)
+ removeAttribute(player, attributeLock2)
+ removeAttribute(player, attributeLock3)
+ removeAttribute(player, attributeLock4)
+ return@onClose true
+ }
+
+ on(Components.RD_COMBOLOCK_285) { player, component, opcode, buttonID, slot, itemID ->
+ // Child IDs for respective locks:
+ // 6 7 8 9
+ // 10 < Lock1 > 11 12 < Lock2 > 13 14 < Lock3 > 15 16 < Lock4 > 17
+ if (buttonID in 10..17) {
+ val position = (buttonID - 10) / 2
+ val backForth = (buttonID - 10) % 2
+ var newValue = getAttribute(player, lockArray[position], 65) + (if (backForth == 0) { -1 } else { 1 })
+ if (newValue < 65) { newValue = 90 } // If char number is under A(65), loop back to Z(90)
+ if (newValue > 90) { newValue = 65 } // If char number is over Z(90), loop back to A(65)
+ setAttribute(player, lockArray[position], newValue)
+ setInterfaceText(player, newValue.toChar().toString(), Components.RD_COMBOLOCK_285, position + 6)
+ }
+ // Enter Button
+ if (buttonID == 18) {
+ val lock1 = getAttribute(player, attributeLock1, 65).toChar()
+ val lock2 = getAttribute(player, attributeLock2, 65).toChar()
+ val lock3 = getAttribute(player, attributeLock3, 65).toChar()
+ val lock4 = getAttribute(player, attributeLock4, 65).toChar()
+ val answer = arrayOf(lock1, lock2, lock3, lock4).joinToString("")
+ closeInterface(player)
+ if (answers[getAttribute(player, SirRenItchwoodDialogueFile.attributeClueNumber, 0)] == answer){
+ removeAttribute(player, SirRenItchwoodDialogueFile.attributeClueNumber)
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) != -1) {
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, 1)
+ }
+ sendNPCDialogue(player, NPCs.SIR_REN_ITCHOOD_2287, "Your wit is sharp, your brains quite clear; You solved my puzzle with no fear. At puzzles I rank you quite the best, now enter the portal for your next test.")
+ } else {
+ removeAttribute(player, SirRenItchwoodDialogueFile.attributeClueNumber)
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 0) {
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, -1)
+ openDialogue(player, SirRenItchwoodDialogueFile(2), NPC(NPCs.SIR_REN_ITCHOOD_2287))
+ }
+ }
+ }
+ return@on true
+ }
+ }
+}
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirSpishyusDialogue.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirSpishyusDialogue.kt
new file mode 100644
index 000000000..8f6df7708
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirSpishyusDialogue.kt
@@ -0,0 +1,221 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.container.impl.EquipmentContainer
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.interaction.InteractionListener
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.game.node.item.Item
+import core.game.world.map.zone.ZoneBorders
+import core.plugin.Initializable
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+import org.rs09.consts.Scenery
+
+@Initializable
+class SirSpishyusDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, SirSpishyusDialogueFile(), npc)
+ return true
+ }
+ override fun newInstance(player: Player): DialoguePlugin {
+ return SirSpishyusDialogue(player)
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.SIR_SPISHYUS_2282)
+ }
+}
+
+class SirSpishyusDialogueFile(private val dialogueNum: Int = 0) : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { player -> getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 1 }
+ .npc(FacialExpression.FRIENDLY, "Excellent work, @name.", "Please step through the portal to meet your next", "challenge.")
+ .end()
+
+ b.onPredicate { player -> dialogueNum == 2 || getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == -1 }
+ .betweenStage { _, player, _, _ ->
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, -1)
+ }
+ .npc(FacialExpression.SAD, "No... I am very sorry.", "Apparently you are not up to the challenge.", "I will return you where you came from, better luck in the", "future.")
+ .endWith { _, player ->
+ removeAttribute(player, SirTinleyDialogueFile.attributeDoNotMove)
+ removeAttribute(player, RecruitmentDrive.attributeStagePassFailState)
+ RecruitmentDriveListeners.FailTestCutscene(player).start()
+ }
+ b.onPredicate { _ -> true }
+ .npcl(FacialExpression.FRIENDLY, "Ah, welcome @name.")
+ .playerl(FacialExpression.FRIENDLY, "Hello there." + " What am I supposed to be doing in this room?")
+ .npcl(FacialExpression.FRIENDLY, "Well, your task is to take this fox, this chicken and this bag of grain across that bridge there to the other side of the room.")
+ .npcl(FacialExpression.FRIENDLY, "When you have done that, your task is complete.")
+ .playerl(FacialExpression.FRIENDLY, "Is that it?")
+ .npcl(FacialExpression.FRIENDLY, "Well, it is not quite as simple as that may sound.")
+ .npcl(FacialExpression.FRIENDLY, "Firstly, you may only carry one of the objects across the room at a time, for the bridge is old and fragile.")
+ .npcl(FacialExpression.FRIENDLY, "Secondly, the fox wants to eat the chicken, and the chicken wants to eat the grain. Should you ever leave the fox unattended with the chicken, or the grain unattended with the chicken, then")
+ .npcl(FacialExpression.FRIENDLY, "one of them will be eaten, and you will be unable to complete the test.")
+ .playerl(FacialExpression.FRIENDLY, "Okay, I'll see what I can do.")
+ .end()
+ }
+}
+class SirSpishyusRoomListeners : InteractionListener {
+ companion object {
+ const val foxFromVarbit = 680
+ const val foxToVarbit = 681
+ const val chickenFromVarbit = 682
+ const val chickenToVarbit = 683
+ const val grainFromVarbit = 684
+ const val grainToVarbit = 685
+
+ val fromZoneBorder = ZoneBorders(2479, 4967, 2490, 4977)
+ val toZoneBorder = ZoneBorders(2471, 4967, 2478, 4977)
+
+ fun countEquipmentItems(player: Player): Int {
+ var count = 0
+ if(inEquipment(player, Items.GRAIN_5607)) { count++ }
+ if(inEquipment(player, Items.FOX_5608)) { count++ }
+ if(inEquipment(player, Items.CHICKEN_5609)) { count++ }
+ return count
+ }
+
+ fun checkFinished(player: Player) {
+ if (getVarbit(player, foxToVarbit) == 1 && getVarbit(player, chickenToVarbit) == 1 && getVarbit(player, grainToVarbit) == 1) {
+ sendMessage(player, "Congratulations! You have solved this room's puzzle!")
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, 1)
+ }
+ }
+
+ fun checkFail(player: Player): Boolean {
+ return ((getVarbit(player, foxFromVarbit) == 0 && getVarbit(player, chickenFromVarbit) == 0 && getVarbit(player, grainFromVarbit) == 1) ||
+ (getVarbit(player, foxFromVarbit) == 1 && getVarbit(player, chickenFromVarbit) == 0 && getVarbit(player, grainFromVarbit) == 0) ||
+ (getVarbit(player, foxToVarbit) == 1 && getVarbit(player, chickenToVarbit) == 1 && getVarbit(player, grainToVarbit) == 0) ||
+ (getVarbit(player, foxToVarbit) == 0 && getVarbit(player, chickenToVarbit) == 1 && getVarbit(player, grainToVarbit) == 1))
+ }
+
+ fun resetStage(player: Player) {
+ setVarbit(player, foxFromVarbit, 0)
+ setVarbit(player, chickenFromVarbit, 0)
+ setVarbit(player, grainFromVarbit, 0)
+ setVarbit(player, foxToVarbit, 0)
+ setVarbit(player, chickenToVarbit, 0)
+ setVarbit(player, grainToVarbit, 0)
+ removeItem(player, Items.GRAIN_5607, Container.EQUIPMENT)
+ removeItem(player, Items.FOX_5608, Container.EQUIPMENT)
+ removeItem(player, Items.CHICKEN_5609, Container.EQUIPMENT)
+ }
+ }
+
+ override fun defineListeners() {
+ on(Scenery.PRECARIOUS_BRIDGE_7286, SCENERY, "cross") { player, node ->
+ if (countEquipmentItems(player) > 1) {
+ sendDialogue(player, "I really don't think I should be carrying more than 5Kg across that rickety bridge...")
+ } else if (checkFail(player)) {
+ openDialogue(player, SirTinleyDialogueFile(2), NPC(NPCs.SIR_SPISHYUS_2282)) // Fail
+ } else {
+ lock(player, 5)
+ sendMessage(player, "You carefully walk across the rickety bridge...")
+ player.walkingQueue.reset()
+ player.walkingQueue.addPath(2476, 4972)
+ }
+ return@on true
+ }
+
+ on(Scenery.PRECARIOUS_BRIDGE_7287, SCENERY, "cross") { player, node ->
+ if (countEquipmentItems(player) > 1) {
+ sendDialogue(player, "I really don't think I should be carrying more than 5Kg across that rickety bridge...")
+ } else if (checkFail(player)) {
+ openDialogue(player, SirTinleyDialogueFile(2), NPC(NPCs.SIR_SPISHYUS_2282)) // Fail
+ } else {
+ lock(player, 5)
+ sendMessage(player, "You carefully walk across the rickety bridge...")
+ player.walkingQueue.reset()
+ player.walkingQueue.addPath(2484, 4972)
+ }
+ return@on true
+ }
+
+ on(Scenery.GRAIN_7284, SCENERY, "pick-up") { player, _ ->
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 0) {
+ if (fromZoneBorder.insideBorder(player)) {
+ replaceSlot(player, EquipmentSlot.CAPE.ordinal, Item(Items.GRAIN_5607), null, Container.EQUIPMENT)
+ setVarbit(player, grainFromVarbit, 1)
+ }
+ if (toZoneBorder.insideBorder(player)) {
+ replaceSlot(player, EquipmentSlot.CAPE.ordinal, Item(Items.GRAIN_5607), null, Container.EQUIPMENT)
+ setVarbit(player, grainToVarbit, 0)
+ }
+ }
+ return@on true
+ }
+ onUnequip(Items.GRAIN_5607) { player, _ ->
+ if (fromZoneBorder.insideBorder(player)) {
+ removeItem(player, Items.GRAIN_5607, Container.EQUIPMENT)
+ setVarbit(player, grainFromVarbit, 0)
+ }
+ if (toZoneBorder.insideBorder(player)) {
+ removeItem(player, Items.GRAIN_5607, Container.EQUIPMENT)
+ setVarbit(player, grainToVarbit, 1)
+ checkFinished(player)
+ }
+ return@onUnequip true
+ }
+
+
+ on(Scenery.FOX_7277, SCENERY, "pick-up") { player, _ ->
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 0) {
+ if (fromZoneBorder.insideBorder(player)) {
+ replaceSlot(player, EquipmentSlot.WEAPON.ordinal, Item(Items.FOX_5608), null, Container.EQUIPMENT)
+ setVarbit(player, foxFromVarbit, 1)
+ }
+ if (toZoneBorder.insideBorder(player)) {
+ replaceSlot(player, EquipmentSlot.WEAPON.ordinal, Item(Items.FOX_5608), null, Container.EQUIPMENT)
+ setVarbit(player, foxToVarbit, 0)
+ }
+ }
+ return@on true
+ }
+ onUnequip(Items.FOX_5608) { player, _ ->
+ if (fromZoneBorder.insideBorder(player)) {
+ removeItem(player, Items.FOX_5608, Container.EQUIPMENT)
+ setVarbit(player, foxFromVarbit, 0)
+ }
+ if (toZoneBorder.insideBorder(player)) {
+ removeItem(player, Items.FOX_5608, Container.EQUIPMENT)
+ setVarbit(player, foxToVarbit, 1)
+ checkFinished(player)
+ }
+ return@onUnequip true
+ }
+
+
+ on(Scenery.CHICKEN_7281, SCENERY, "pick-up") { player, _ ->
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 0) {
+ if (fromZoneBorder.insideBorder(player)) {
+ replaceSlot(player, EquipmentSlot.SHIELD.ordinal, Item(Items.CHICKEN_5609), null, Container.EQUIPMENT)
+ setVarbit(player, chickenFromVarbit, 1)
+ }
+ if (toZoneBorder.insideBorder(player)) {
+ replaceSlot(player, EquipmentSlot.SHIELD.ordinal, Item(Items.CHICKEN_5609), null, Container.EQUIPMENT)
+ setVarbit(player, chickenToVarbit, 0)
+ }
+ }
+ return@on true
+ }
+ onUnequip(Items.CHICKEN_5609) { player, _ ->
+ if (fromZoneBorder.insideBorder(player)) {
+ removeItem(player, Items.CHICKEN_5609, Container.EQUIPMENT)
+ setVarbit(player, chickenFromVarbit, 0)
+ }
+ if (toZoneBorder.insideBorder(player)) {
+ removeItem(player, Items.CHICKEN_5609, Container.EQUIPMENT)
+ setVarbit(player, chickenToVarbit, 1)
+ checkFinished(player)
+ }
+ return@onUnequip true
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirTiffyCashienDialogueFile.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirTiffyCashienDialogueFile.kt
new file mode 100644
index 000000000..9bd2ecf93
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirTiffyCashienDialogueFile.kt
@@ -0,0 +1,140 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.FacialExpression
+import org.rs09.consts.Items
+
+class SirTiffyCashienDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ b.onQuestStages(Quests.RECRUITMENT_DRIVE, 1)
+ .player(FacialExpression.FRIENDLY, "Sir Amik Varze sent me to meet you here for some", "sort of testing...")
+ .npc(FacialExpression.FRIENDLY, "Ah, @name!", "Amik told me all about you, dontchaknow!", "Spliffing job you you did with the old Black Knights there,", "absolutely first class.")
+ .playerl(FacialExpression.GUILTY, "...Thanks I think.")
+ // .npcl(FacialExpression.FRIENDLY, "Well, not in those exact words, but you get my point, what?")
+ .npc(FacialExpression.FRIENDLY, "Well, a top-notch filly like yourself is just the right sort", "we've been looking for for our organisation.")
+ .npcl(FacialExpression.FRIENDLY, "So, are you ready to begin testing?")
+ .let { path ->
+ val originalPath = b.placeholder()
+ path.goto(originalPath)
+ return@let originalPath.builder().options().let { optionBuilder ->
+ val continuePath = b.placeholder()
+ optionBuilder.option("Testing..?")
+ .playerl(FacialExpression.FRIENDLY, "Testing? What exactly do you mean by testing?")
+ .npcl(FacialExpression.FRIENDLY, "Jolly bad show! Varze was supposed to have informed you about all this before sending you here!")
+ .npcl(FacialExpression.FRIENDLY, "Well, not your fault I suppose, what? Anywho, our organisation is looking for a certain specific type of person to join.")
+ .playerl(FacialExpression.FRIENDLY, "So... You want me to go kill some monster or something for you?")
+ .npcl(FacialExpression.FRIENDLY, "Not at all, old bean. There's plenty of warriors around should we require dumb muscle.")
+ .npcl(FacialExpression.FRIENDLY, "That's really not the kind of thing our organisation is after, what?")
+ .playerl(FacialExpression.FRIENDLY, "So you want me to go and fetch you some kind of common item, and then take it for delivery somewhere on the other side of the country?")
+ .playerl(FacialExpression.FRIENDLY, "Because I really hate doing that!")
+ .npcl(FacialExpression.FRIENDLY, "Haw, haw, haw! What a dull thing to ask of someone, what?")
+ .npcl(FacialExpression.FRIENDLY, "I know what you mean, though. I did my fair share of running errands when I was a young adventurer, myself!")
+ .playerl(FacialExpression.FRIENDLY, "So what exactly will this test consist of?")
+ .npcl(FacialExpression.FRIENDLY, "Can't let just any old riff-raff in, what? The mindless thugs and bully boys are best left in the White Knights or the city guard. We look for the top-shelf brains to join us.")
+ .playerl(FacialExpression.FRIENDLY, "So you want to test my brains? Will it hurt?")
+ .npcl(FacialExpression.FRIENDLY, "Haw, haw, haw! That's a good one!")
+ .npcl(FacialExpression.FRIENDLY, "Not in the slightest.. Well, maybe a bit, but we all have to make sacrifices occasionally, what?")
+ .playerl(FacialExpression.FRIENDLY, "What do you want me to do then?")
+ .npcl(FacialExpression.FRIENDLY, "It's a test of wits, what? I'll take you to our secret training grounds, and you will have to pass through a series of five separate intelligence test to prove you're our sort of adventurer.")
+ .npcl(FacialExpression.FRIENDLY, "Standard puzzle room rules will apply.")
+ .playerl(FacialExpression.THINKING, "Erm... What are standard puzzle room rules exactly?")
+ .npcl(FacialExpression.HAPPY, "Never done this sort of thing before, what?")
+ .npc("The simple rules are:", "No items or equipment to be brought with you.", "Each room is a self-contained puzzle.", "You may quit at any time.")
+ .npcl(FacialExpression.HAPPY, "Of course, if you quit a room, then all your progress up to that point will be cleared, and you'll have to start again from scratch.")
+ .npc(FacialExpression.HAPPY, "Our organisation manages to filter all the top-notch", "adventurers this way.", "So, are you ready to go?")
+ .goto(originalPath)
+ optionBuilder.option("Organisation?")
+ .playerl(FacialExpression.THINKING, "This organisation you keep mentioning.. Perhaps you could tell me a little about it?")
+ .npcl(FacialExpression.FRIENDLY, "Oh, that Amik! Jolly bad form. Did he not tell you anything that he was supposed to?")
+ .playerl(FacialExpression.FRIENDLY, "No. He didn't really tell me anything except to come here and meet you.")
+ .npcl(FacialExpression.FRIENDLY, "Well, now, old sport, let me give you the heads up and the low down, what?")
+ .npcl(FacialExpression.FRIENDLY, "I represent the Temple Knights. We are the premier order of Knights in Asgarnia, if not the world. Saradomin himself personally founded our order centuries ago, and we answer only to him.")
+ .npcl(FacialExpression.FRIENDLY, "Only the very best of the best are permitted to join, and the powers we command are formidable indeed.")
+ .npcl(FacialExpression.FRIENDLY, "You might say that we are the front line of defence for the entire kingdom!")
+ .playerl(FacialExpression.THINKING, "So what's the difference between you and the White Knights?")
+ .npcl(FacialExpression.FRIENDLY, "Well, in simple terms, we're better! Any fool with a sword can manage to get into the White Knights, which is mostly the reason they are so very, very incompetent, what?")
+ .npcl(FacialExpression.FRIENDLY, "The Temple Knights, on the other hand, have to be smarter, stronger and better than all others. We are the elite. No man controls us, for our orders come directly from Saradomin himself!")
+ .npcl(FacialExpression.FRIENDLY, "According to Sir Vey Lance, our head of operations, that is. He claims that everything he tells us to do is done with Saradomin's implicit permission.")
+ .npcl(FacialExpression.FRIENDLY, "It's not every job where you have more authority than the king, though, is it?")
+ .playerl(FacialExpression.THINKING, "Wait... You can order the King around?")
+ .npcl(FacialExpression.FRIENDLY, "Well, not me personally. I'm only in the recruitment side of things, dontchaknow, but the higher ranking members of the organisation have almost absolute power over the kingdom.")
+ .npcl(FacialExpression.FRIENDLY, "Plus a few others, so I hear...")
+ .npcl(FacialExpression.FRIENDLY, "Anyway, this is why we keep our organisation shrouded in secrecy, and why we demand such rigorous testing for all potential recruits. Speaking of which, are you ready to begin your testing?")
+ .goto(originalPath)
+ optionBuilder.option("Yes, let's go!")
+ .player(FacialExpression.FRIENDLY, "Yeah. this sounds right up my street.", "Let's go!")
+ .branch { player -> if(player.inventory.isEmpty && player.equipment.isEmpty && !player.familiarManager.hasFamiliar()) { 1 } else { 0 } }
+ .let { branch ->
+ branch.onValue(0)
+ .npcl(FacialExpression.NEUTRAL, "Well, bad luck, old @g[guy,gal]. You'll need to have a completely empty inventory and you can't be wearing any equipment before we can accurately test you.")
+ .npcl(FacialExpression.HAPPY, "Don't want people cheating by smuggling stuff in, what? That includes things carried by familiars, too! Come and see me again after you've been to the old bank to drop your stuff off, what?")
+ .end()
+ return@let branch
+ }
+ .onValue(1)
+ .npc(FacialExpression.HAPPY, "Jolly good show!", "Now the training grounds location is a secret, so...")
+ .goto(continuePath)
+ optionBuilder.option("No, I've changed my mind.")
+ .player("No, I've changed my mind.")
+ .end()
+
+ return@let continuePath.builder()
+ }
+
+ }.endWith { _, player ->
+ if (getQuestStage(player, Quests.RECRUITMENT_DRIVE) == 1) {
+ setQuestStage(player, Quests.RECRUITMENT_DRIVE, 2)
+ }
+ RecruitmentDriveListeners.shuffleStages(player)
+ RecruitmentDriveListeners.StartTestCutscene(player).start()
+ }
+ b.onQuestStages(Quests.RECRUITMENT_DRIVE, 2)
+ .npc(FacialExpression.FRIENDLY, "Ah, what ho!", "Back for another go at the old testing, what?")
+ .options().let { optionBuilder ->
+ val continuePath = b.placeholder()
+ optionBuilder.option("Yes, let's go!")
+ .player(FacialExpression.FRIENDLY, "Yeah. this sounds right up my street.", "Let's go!")
+ .branch { player -> if(player.inventory.isEmpty && player.equipment.isEmpty && !player.familiarManager.hasFamiliar()) { 1 } else { 0 } }
+ .let { branch ->
+ branch.onValue(0)
+ .npcl(FacialExpression.NEUTRAL, "Well, bad luck, old @g[guy,gal]. You'll need to have a completely empty inventory and you can't be wearing any equipment before we can accurately test you.")
+ .npcl(FacialExpression.HAPPY, "Don't want people cheating by smuggling stuff in, what? That includes things carried by familiars, too! Come and see me again after you've been to the old bank to drop your stuff off, what?")
+ .end()
+ return@let branch
+ }
+ .onValue(1)
+ .npc(FacialExpression.FRIENDLY, "Jolly good show!", "Now the training grounds location is a secret, so...")
+ .endWith { _, player ->
+ RecruitmentDriveListeners.shuffleStages(player)
+ RecruitmentDriveListeners.StartTestCutscene(player).start()
+ }
+ optionBuilder.option("No, I've changed my mind.")
+ .player("No, I've changed my mind.")
+ .end()
+ return@let continuePath.builder()
+ }
+ b.onQuestStages(Quests.RECRUITMENT_DRIVE, 3)
+ .npc(FacialExpression.HAPPY, "Oh, jolly well done!", "Your performance will need to be evaluated by Sir Vey", "personally, but I don't think it's going too far ahead of", "myself to welcome you to the team!")
+ .endWith { _, player ->
+ // Get a voucher and $3000 to change gender if you did do it during the quest.
+ if (getAttribute(player, RecruitmentDrive.attributeOriginalGender, true) != player.isMale) {
+ addItemOrDrop(player, Items.MAKEOVER_VOUCHER_5606)
+ addItemOrDrop(player, Items.COINS_995, 3000)
+ }
+ removeAttribute(player, RecruitmentDrive.attributeOriginalGender)
+ finishQuest(player, Quests.RECRUITMENT_DRIVE)
+ }
+ }
+}
+
+class SirTiffyCashienFailedDialogueFile : DialogueBuilderFile() {
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate { _ -> true }
+ .npc(FacialExpression.SAD, "Oh, jolly bad luck, what?", "Not quite the brainbox you thought you were, eh?")
+ .npc(FacialExpression.HAPPY, "Well, never mind!", "You have an open invitation to join our organization, so", "when you're feeling a little smarter, come back and talk", "to me again.")
+
+ }
+}
diff --git a/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirTinleyDialogue.kt b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirTinleyDialogue.kt
new file mode 100644
index 000000000..d00cae73a
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/falador/quest/recruitmentdrive/SirTinleyDialogue.kt
@@ -0,0 +1,100 @@
+package content.region.asgarnia.falador.quest.recruitmentdrive
+
+import core.api.*
+import core.game.dialogue.DialogueBuilder
+import core.game.dialogue.DialogueBuilderFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.interaction.QueueStrength
+import core.game.node.entity.Entity
+import core.game.node.entity.impl.Projectile
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.game.system.task.Pulse
+import core.game.world.map.Location
+import core.game.world.map.zone.ZoneBorders
+import core.game.world.update.flag.context.Graphics
+import core.plugin.Initializable
+import org.rs09.consts.NPCs
+import org.rs09.consts.Sounds
+
+@Initializable
+class SirTinleyDialogue (player: Player? = null) : DialoguePlugin(player) {
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, SirTinleyDialogueFile(), npc)
+ return true
+ }
+ override fun newInstance(player: Player): DialoguePlugin {
+ return SirTinleyDialogue(player)
+ }
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.SIR_TINLEY_2286)
+ }
+}
+
+class SirTinleyDialogueFile(private val dialogueNum: Int = 0) : DialogueBuilderFile(), MapArea {
+ companion object {
+ const val attributeDoNotMove = "quest:recruitmentdrive-donotmove"
+ }
+
+ override fun create(b: DialogueBuilder) {
+ b.onPredicate {player -> dialogueNum == 0 && !getAttribute(player, attributeDoNotMove, false) && getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 0 }
+ .npc("Ah, welcome @name.", "I have but one clue for you to pass this room's puzzle:", "'Patience'.")
+ .endWith { _, player ->
+ setAttribute(player, attributeDoNotMove, true)
+ queueScript(player, 0, QueueStrength.NORMAL) { stage: Int ->
+ when (stage) {
+ 0 -> {
+ return@queueScript delayScript(player, 15)
+ }
+ 1 -> {
+ if (getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) != -1) {
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, 1)
+ setAttribute(player, attributeDoNotMove, false)
+ npc(FacialExpression.FRIENDLY, "Excellent work, @name.", "Please step through the portal to meet your next", "challenge.")
+ }
+ return@queueScript stopExecuting(player)
+ }
+ else -> return@queueScript stopExecuting(player)
+ }
+ }
+ }
+
+ b.onPredicate {player -> dialogueNum == 0 && !getAttribute(player, attributeDoNotMove, false) && getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == 1 }
+ .npc(FacialExpression.FRIENDLY, "Excellent work, @name.", "Please step through the portal to meet your next", "challenge.")
+ .end()
+
+ // If you talk to him before time is up, you fail.
+ b.onPredicate { player -> dialogueNum == 0 && getAttribute(player, attributeDoNotMove, false) || dialogueNum == 2 || getAttribute(player, RecruitmentDrive.attributeStagePassFailState, 0) == -1 }
+ .betweenStage { _, player, _, _ ->
+ setAttribute(player, RecruitmentDrive.attributeStagePassFailState, -1)
+ }
+ .npc(FacialExpression.SAD, "No... I am very sorry.", "Apparently you are not up to the challenge.", "I will return you where you came from, better luck in the", "future.")
+ .endWith { _, player ->
+ removeAttribute(player, attributeDoNotMove)
+ removeAttribute(player, RecruitmentDrive.attributeStagePassFailState)
+ RecruitmentDriveListeners.FailTestCutscene(player).start()
+ }
+
+ b.onPredicate { _ -> dialogueNum == 1 }
+ .npc("Ah, @name, you have arrived.", "Speak to me to begin your task.")
+ .endWith { _, player ->
+ setAttribute(player, attributeDoNotMove, false)
+ }
+ }
+
+
+ override fun defineAreaBorders(): Array {
+ return arrayOf(ZoneBorders(2474, 4959, 2478, 4957))
+ }
+
+ override fun entityStep(entity: Entity, location: Location, lastLocation: Location) {
+ if (entity is Player) {
+ if(getAttribute(entity, attributeDoNotMove, false)) {
+ setAttribute(entity, attributeDoNotMove, false)
+ setAttribute(entity, RecruitmentDrive.attributeStagePassFailState, -1)
+ openDialogue(entity, SirTinleyDialogueFile(2), NPC(NPCs.SIR_TINLEY_2286))
+ }
+ }
+ }
+}
diff --git a/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GDiplomacyCutscene.java b/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GDiplomacyCutscene.java
index 487467ae2..3743a5c2c 100644
--- a/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GDiplomacyCutscene.java
+++ b/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GDiplomacyCutscene.java
@@ -1,5 +1,6 @@
package content.region.asgarnia.goblinvillage.quest.goblindiplomacy;
+import content.data.Quests;
import core.game.component.Component;
import core.game.node.entity.player.link.emote.Emotes;
import core.game.activity.ActivityManager;
@@ -54,7 +55,7 @@ public final class GDiplomacyCutscene extends CutscenePlugin {
@Override
public boolean start(final Player player, final boolean login, Object... args) {
- Quest quest = player.getQuestRepository().getQuest(GoblinDiplomacy.NAME);
+ Quest quest = player.getQuestRepository().getQuest(Quests.GOBLIN_DIPLOMACY);
final NPC grubfoot = NPC.create(quest.getStage(player) == 10 ? 4495 : quest.getStage(player) == 20 ? 4497 : quest.getStage(player) == 30 ? 4498 : 4496, getBase().transform(10, 55, 0));
grubfoot.setWalks(false);
npcs.add(grubfoot);
@@ -182,8 +183,8 @@ public final class GDiplomacyCutscene extends CutscenePlugin {
type = GrubFoot.forConfig(player);
dialIndex = RandomFunction.random(DIALOGUES.length);
other = Repository.findNPC(npc.getId() == 4494 ? 4493 : 4494);
- quest = player.getQuestRepository().getQuest(GoblinDiplomacy.NAME);
- if(player.getQuestRepository().getQuest("Lost Tribe").getStage(player) == 43){
+ quest = player.getQuestRepository().getQuest(Quests.GOBLIN_DIPLOMACY);
+ if(player.getQuestRepository().getQuest(Quests.THE_LOST_TRIBE).getStage(player) == 43){
player("Have you heard of the Dorgeshuun?");
stage = 5000;
return true;
@@ -367,8 +368,8 @@ public final class GDiplomacyCutscene extends CutscenePlugin {
player.setAttribute("/save:tlt-goblin-emotes",true);
player.getEmoteManager().unlock(Emotes.GOBLIN_BOW);
player.getEmoteManager().unlock(Emotes.GOBLIN_SALUTE);
- setVarbit(player, 532, 7, true);
- player.getQuestRepository().getQuest("Lost Tribe").setStage(player,44);
+ setVarbit(player, 532, 7, true);
+ player.getQuestRepository().getQuest(Quests.THE_LOST_TRIBE).setStage(player,44);
stage++;
break;
case 5055:
diff --git a/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GoblinDiplomacy.java b/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GoblinDiplomacy.java
index a3e744b86..a85d815cb 100644
--- a/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GoblinDiplomacy.java
+++ b/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GoblinDiplomacy.java
@@ -7,6 +7,7 @@ import core.game.node.entity.player.link.quest.Quest;
import core.game.node.item.GroundItemManager;
import core.game.node.item.Item;
import core.plugin.ClassScanner;
+import content.data.Quests;
/**
* Represents the demon slayer quest.
@@ -15,12 +16,6 @@ import core.plugin.ClassScanner;
*/
@Initializable
public class GoblinDiplomacy extends Quest {
-
- /**
- * The name of the quest.
- */
- public static final String NAME = "Goblin Diplomacy";
-
/**
* Represents the orange goblin mail.
*/
@@ -45,7 +40,7 @@ public class GoblinDiplomacy extends Quest {
* Constructs a new {@Code GoblinDiplomacy} {@Code Object}
*/
public GoblinDiplomacy() {
- super("Goblin Diplomacy", 20, 19, 5);
+ super(Quests.GOBLIN_DIPLOMACY, 20, 19, 5);
}
@Override
diff --git a/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GrubfootDialogue.java b/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GrubfootDialogue.java
index 0eaed3038..ca562e9c6 100644
--- a/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GrubfootDialogue.java
+++ b/Server/src/main/content/region/asgarnia/goblinvillage/quest/goblindiplomacy/GrubfootDialogue.java
@@ -1,5 +1,6 @@
package content.region.asgarnia.goblinvillage.quest.goblindiplomacy;
+import content.data.Quests;
import core.game.dialogue.DialoguePlugin;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
@@ -42,7 +43,7 @@ public final class GrubfootDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
- quest = player.getQuestRepository().getQuest(GoblinDiplomacy.NAME);
+ quest = player.getQuestRepository().getQuest(Quests.GOBLIN_DIPLOMACY);
switch (quest.getStage(player)) {
case 100:
npc("Me lonely.");
diff --git a/Server/src/main/content/region/asgarnia/mudskipperpoint/MudSkipperPointListeners.kt b/Server/src/main/content/region/asgarnia/mudskipperpoint/MudSkipperPointListeners.kt
new file mode 100644
index 000000000..eed56b4bf
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/mudskipperpoint/MudSkipperPointListeners.kt
@@ -0,0 +1,151 @@
+package content.region.asgarnia.mudskipperpoint
+
+import content.global.skill.slayer.MogreNPC
+import content.region.asgarnia.mudskipperpoint.dialogue.SkippyBootDialogue
+import content.region.asgarnia.mudskipperpoint.dialogue.SkippyBucketDialogue
+import core.api.*
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.node.entity.impl.Projectile
+import core.game.node.entity.player.Player
+import core.game.node.item.Item
+import core.game.world.map.Location
+import core.game.world.update.flag.context.Animation
+import core.game.world.update.flag.context.Graphics
+import core.plugin.Initializable
+import core.tools.RandomFunction
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+import org.rs09.consts.Scenery
+import org.rs09.consts.Vars
+
+@Initializable
+class MudSkipperPointListeners : InteractionListener {
+
+ companion object {
+ private val MESSAGES = arrayOf(
+ "Da boom-boom kill all da fishies!",
+ "I smack you good!",
+ "Smash stupid human!",
+ "Tasty human!",
+ "Human hit me on the head!",
+ "I get you!",
+ "Human scare all da fishies!"
+ )
+
+ private val FISHING_SPOTS = intArrayOf(
+ Scenery.OMINOUS_FISHING_SPOT_10087,
+ Scenery.OMINOUS_FISHING_SPOT_10088,
+ Scenery.OMINOUS_FISHING_SPOT_10089
+ )
+ }
+
+ private fun handleExplosives(player: Player, explosives: Item, target: Location): Boolean{
+ // Check if the player has unlocked the ability to summon Mogres
+ if (getVarbit(player, Vars.VARBIT_MINI_QUEST_MOGRE) != SkippyBucketDialogue.DONE_QUEST){
+ sendDialogueLines(player, "Sinister as that fishing spot is, why would I want to", "explode it?")
+ return false
+ }
+ val distance = player.location.getDistance(target)
+ if (distance < 5){
+ //too close
+ sendPlayerDialogue(player, "If this thing explodes, I think I should stand a liiiiitle further away.")
+ return false
+ }
+ if (distance > 14){
+ // too far
+ sendPlayerDialogue(player, "I can't throw that far.")
+ return false
+ }
+ removeItem(player, explosives.id)
+ animate(player, Animation(385)) // Throw the vial
+ sendMessage(player, "You hurl the shuddering vial into the water...")
+ val projectile = Projectile.create(player, null, 49, 30, 20, 30, Projectile.getSpeed(player, target.location))
+ projectile.endLocation = target.location
+ projectile.send()
+
+ val delay = (2+ distance * 0.5).toInt()
+ queueScript(player, delay){
+ val mogre = MogreNPC()
+ val xOffset = (player.location.x - target.location.x) % 2
+ val yOffset = (player.location.y - target.location.y) % 2
+ mogre.location = Location.create(target.location.x + xOffset, target.location.y + yOffset)
+ mogre.init()
+ mogre.moveStep()
+ mogre.isRespawn = false
+ mogre.attack(player)
+ registerHintIcon(player, mogre)
+ mogre.sendChat(MESSAGES[RandomFunction.random(MESSAGES.size)])
+ if (explosives.id == Items.SUPER_FISHING_EXPLOSIVE_12633){
+ impact(mogre, 15)
+ }
+ mogre.graphics(Graphics(68))
+ sendMessage(player, "...and a Mogre appears!")
+ return@queueScript stopExecuting(player)
+ }
+ return true
+ }
+
+ private fun soberSkippy(player: Player): Boolean {
+ if (getVarbit(player, Vars.VARBIT_MINI_QUEST_MOGRE) > SkippyBucketDialogue.DRUNK){
+ sendDialogue(player, "I think he's sober enough. And I don't want to use another bucket of water.")
+ return false
+ }
+ else{
+ if (hasAnItem(player, Items.BUCKET_OF_WATER_1929).exists()) {
+ openDialogue(player, SkippyBucketDialogue())
+ return true
+ }
+ else{
+ sendDialogue(player, "You know, I could shock him out of it if I could find some cold water...")
+ return false
+ }
+ }
+ }
+
+ override fun defineListeners() {
+
+ onUseWith(IntType.SCENERY, Items.FISHING_EXPLOSIVE_6664, *FISHING_SPOTS) { player, used, with ->
+ handleExplosives(player, used.asItem(), with.location)
+ }
+
+ onUseWith(IntType.SCENERY, Items.SUPER_FISHING_EXPLOSIVE_12633, *FISHING_SPOTS) { player, used, with ->
+ handleExplosives(player, used.asItem(), with.location)
+ }
+
+ on(FISHING_SPOTS, IntType.SCENERY, "Lure", "Bait") { player, _ ->
+ sendMessage(player, "Something seems to have scared all the fishes away...")
+ return@on true
+ }
+
+ on(Scenery.SIGNPOST_10090, IntType.SCENERY, "read") { player, _ ->
+ setInterfaceText(player, "Mudskipper Point.", 220, 2)
+ setInterfaceText(player, "WARNING! BEWARE OF THE MUDSKIPPERS!", 220, 4)
+ openInterface(player, 220)
+ return@on true
+ }
+
+ // For some reason the 2795 wrapper does not work for sober-up
+ on(intArrayOf(NPCs.SKIPPY_2796, NPCs.SKIPPY_2797, NPCs.SKIPPY_2798, NPCs.SKIPPY_2799),
+ IntType.NPC, "sober-up") { player, _ ->
+ return@on soberSkippy(player)
+ }
+
+ onUseWith(IntType.NPC, Items.BUCKET_OF_WATER_1929, NPCs.SKIPPY_2795) { player, _, _ ->
+ return@onUseWith soberSkippy(player)
+ }
+
+ onUseWith(IntType.NPC, Items.FORLORN_BOOT_6663, NPCs.SKIPPY_2795){ player, _, _ ->
+ openDialogue(player, SkippyBootDialogue())
+ return@onUseWith true
+ }
+ }
+
+ override fun defineDestinationOverrides() {
+
+ // Don't run towards the fishing spots when trying to lure or bait or throw explosives
+ setDest(IntType.SCENERY, FISHING_SPOTS, "Lure", "Bait", "use"){ entity, _ ->
+ return@setDest entity.location
+ }
+ }
+}
diff --git a/Server/src/main/content/region/asgarnia/mudskipperpoint/dialogue/SkippyDialogue.kt b/Server/src/main/content/region/asgarnia/mudskipperpoint/dialogue/SkippyDialogue.kt
new file mode 100644
index 000000000..2106d6856
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/mudskipperpoint/dialogue/SkippyDialogue.kt
@@ -0,0 +1,267 @@
+package content.region.asgarnia.mudskipperpoint.dialogue
+
+import content.data.Quests
+import core.api.*
+import core.game.dialogue.DialogueFile
+import core.game.dialogue.DialoguePlugin
+import core.game.dialogue.FacialExpression
+import core.game.dialogue.Topic
+import core.game.node.entity.npc.NPC
+import core.game.node.entity.player.Player
+import core.plugin.Initializable
+import core.tools.END_DIALOGUE
+import core.tools.RandomFunction
+import org.rs09.consts.Items
+import org.rs09.consts.NPCs
+import org.rs09.consts.Vars
+
+
+@Initializable
+class SkippyDialogue(player: Player? = null) : DialoguePlugin(player) {
+
+ override fun handle(interfaceId: Int, buttonId: Int): Boolean {
+ openDialogue(player, SkippyBucketDialogue(0, getVarbit(player, Vars.VARBIT_MINI_QUEST_MOGRE)))
+ return true
+ }
+
+
+ override fun getIds(): IntArray {
+ return intArrayOf(NPCs.SKIPPY_2795)
+ }
+
+}
+
+
+class SkippyBucketDialogue(override var stage: Int = 0, val questStage: Int = 0) : DialogueFile() {
+
+ companion object{
+ // Skippy will progress through these stages as you help him
+ const val DRUNK = 0
+ const val TENDER = 1
+ const val HUNGOVER = 2
+ const val DONE_QUEST = 3
+
+ // Dialogue branches
+ const val THROW_WATER = 10
+ const val DRUNK_RAMBLING = 30
+ const val CRAZY_PEOPLE = 40
+ const val WHO_ARE_THEY = 50
+ // Tea state
+ const val LEARN_RECIPE = 170
+ const val PLAGUE_CITY_RECIPE = 180
+ const val NO_TEA = 190
+ // Hangover cure state
+ const val CURE = 220
+ const val NO_CURE = 250
+ const val RECIPE = 260
+ const val NAME_ORIGIN = 270
+
+ const val ALL_DONE = 300
+ }
+
+ override fun handle(componentID: Int, buttonID: Int) {
+ npc = NPC(NPCs.SKIPPY_2796)
+ when (questStage){
+ DRUNK -> when (stage) {
+ 0 -> if(hasAnItem(player!!, Items.BUCKET_OF_WATER_1929).exists()){
+ playerl(FacialExpression.THINKING, "Well, I could dump this bucket of water over him. That would sober him up a little.").also { stage = THROW_WATER }
+ }
+ else {
+ playerl(FacialExpression.ASKING, "Are you all right? You seem a little...incoherent.").also { stage = DRUNK_RAMBLING }
+ }
+ THROW_WATER -> showTopics(
+ Topic("Throw the water!", THROW_WATER+ 1, true),
+ Topic("I think I'll leave it for now.", END_DIALOGUE)
+ )
+ THROW_WATER + 1 -> playerl(FacialExpression.NEUTRAL, "Hey, Skippy!").also { stage++ }
+ THROW_WATER + 2 -> npcl(FacialExpression.DRUNK, "What?").also {
+ stage = END_DIALOGUE
+ queueScript(player!!, 1){ animationStage : Int ->
+ when(animationStage){
+ 1 -> {
+ // todo get the right animation
+ animate(player!!, 2283)
+ removeItem(player!!, Items.BUCKET_OF_WATER_1929)
+ addItem(player!!, Items.BUCKET_1925)
+ setVarbit(player!!, Vars.VARBIT_MINI_QUEST_MOGRE, TENDER, true)
+ return@queueScript delayScript(player!!, 1)
+ }
+ 2 -> {
+ openDialogue(player!!, SkippyBucketDialogue(THROW_WATER + 4))
+ return@queueScript delayScript(player!!, 1)
+ }
+ 3 -> return@queueScript stopExecuting(player!!)
+ else -> return@queueScript delayScript(player!!, 1)
+ }
+ } }
+ THROW_WATER + 4 -> npcl(FacialExpression.ANGRY, "Ahhhhhhhhhhgh! That's cold! Are you trying to kill me?").also { stage++ }
+ THROW_WATER + 5 -> playerl(FacialExpression.NEUTRAL, "Nope. Just sober you up. Memory coming back yet?").also { stage++ }
+ THROW_WATER + 6 -> npcl(FacialExpression.ANGRY, "No. But I could do with a bowl of tea to warm myself up a bit. Go grab me one and we'll talk.").also { stage++ }
+ THROW_WATER + 7 -> playerl(FacialExpression.ASKING, "Any particular type of tea?").also { stage++ }
+ THROW_WATER + 8 -> npcl(FacialExpression.ANGRY, "Nettle for preference. Just make sure it's hot.").also { stage++ }
+ THROW_WATER + 9 -> npcl(FacialExpression.ANGRY, "And don't throw it at me!").also { stage++ }
+ THROW_WATER + 10 -> playerl(FacialExpression.HALF_GUILTY, "What's your problem? You're all clean now.").also { stage = END_DIALOGUE }
+
+
+ DRUNK_RAMBLING -> npcl(FacialExpression.DRUNK, "Inc'hearnt? Inc'herant! You...you...with yer fancy book- lernin' words. You'd be more than inc'herant if youd seen...").also { stage++ }
+ DRUNK_RAMBLING + 1 -> npcl(FacialExpression.DRUNK, "(Dramatic pause)").also { stage++ }
+ DRUNK_RAMBLING + 2 -> npcl(FacialExpression.DRUNK, "THEM!").also { stage++ }
+ DRUNK_RAMBLING + 3 -> showTopics(
+ Topic("I'm sure I would as well.", CRAZY_PEOPLE),
+ Topic("Who are (Dramatic pause) THEY?", WHO_ARE_THEY, true)
+ )
+
+ CRAZY_PEOPLE -> playerl(FacialExpression.NEUTRAL, "I'm going over here to talk to non-crazy people now.").also { stage++ }
+ CRAZY_PEOPLE + 1 -> npcl(FacialExpression.DRUNK, "Yeah? Yeah? Well when THEY come floppin' into your house and eat your furniture you'll be sorry!").also { stage = END_DIALOGUE }
+
+ WHO_ARE_THEY -> playerl(FacialExpression.NEUTRAL, "Who are").also { stage++ }
+ WHO_ARE_THEY + 1 -> playerl(FacialExpression.NEUTRAL, "(Dramatic pause)").also { stage++ }
+ WHO_ARE_THEY + 2 -> playerl(FacialExpression.NEUTRAL, "THEY?").also { stage++ }
+ WHO_ARE_THEY + 3 -> npcl(FacialExpression.DRUNK, "They! Those bloodthirsty, flesh-tearing devils! They are the reason I'm out here every day hurlin' bottles into the sea!").also { stage++ }
+ WHO_ARE_THEY + 4 -> npcl(FacialExpression.DRUNK, "They are the reason I've lost everything, except the horrifying memory of what THEY look like...").also { stage++ }
+ WHO_ARE_THEY + 5 -> playerl(FacialExpression.ASKING, "And what do THEY look like?").also { stage++ }
+ WHO_ARE_THEY + 6 -> npcl(FacialExpression.DRUNK, "Mudskippers!").also { stage++ }
+ WHO_ARE_THEY + 7 -> playerl(FacialExpression.ASKING, "Mudskippers?").also { stage++ }
+ WHO_ARE_THEY + 8 -> npcl(FacialExpression.DRUNK, "Aye, Mudskippers! Those ferocious, ravening, evil, beady-eyed terrors of the deep!").also { stage++ }
+ WHO_ARE_THEY + 9 -> playerl(FacialExpression.SUSPICIOUS, "I...see...").also{ stage++ }
+ WHO_ARE_THEY + 10 -> npcl(FacialExpression.DRUNK, " I was ambushed by them way back, see. They got the drop on me...I can't remember where, somewhere around here though.").also { stage++ }
+ WHO_ARE_THEY + 11 -> playerl(FacialExpression.ASKING, "These would be the mudskippers, right?").also{ stage++ }
+ WHO_ARE_THEY + 12 -> npcl(FacialExpression.DRUNK, "Aye! The mudskippers! Huge they were! Ten feet of glistening, muddy flesh floppin' towards me with white foam flying from their gnashing fangs!").also { stage++ }
+ WHO_ARE_THEY + 13 -> npcl(FacialExpression.DRUNK, "I fought them up and down the beach, with the tide rising and more of them leaping towards me with cutlasses drawn!").also { stage++ }
+ WHO_ARE_THEY + 14 -> playerl(FacialExpression.HALF_GUILTY, "This is fascinating, but I have to be...").also{ stage++ }
+ WHO_ARE_THEY + 15 -> npcl(FacialExpression.DRUNK, "Shut yer' word-hole and listen! I can't remember all the details, as I'm sure they must have hit me quite hard, but the last thing I remember before it all went black...").also { stage++ }
+ WHO_ARE_THEY + 16 -> npcl(FacialExpression.DRUNK, "...was one of those devils rearing over me, its eyes glowin' red with the fires of hell!").also { stage++ }
+ WHO_ARE_THEY + 17 -> playerl(FacialExpression.ROLLING_EYES, "Fires of hell...right. I believe you.").also { stage++ }
+ WHO_ARE_THEY + 18 -> npcl(FacialExpression.DRUNK, "No you don't! You think I'm crazy, like all the rest! Well, if I'm crazy, how did I get these?").also { stage++ }
+ WHO_ARE_THEY + 19 -> playerl(FacialExpression.ASKING, "Get what?").also { stage++ }
+ WHO_ARE_THEY + 20 -> sendDialogue(player!!, "Skippy shows you what appears to be massive bite scars on his legs. You're no expert, but they look like... giant mudskipper bites!").also { stage++ }
+ WHO_ARE_THEY + 21 -> playerl(FacialExpression.ASKING, "Giant mudskipper bites! Where did you get those?").also { stage++ }
+ WHO_ARE_THEY + 22 -> npcl(FacialExpression.DRUNK, "I can't remember... I've been drinking to forget the horror, and all I seem to have forgotten is where it all happened...").also { stage++ }
+ WHO_ARE_THEY + 23 -> playerl(FacialExpression.THINKING, "Hmmm...I suppose if I sober you up you may well start to recall.").also{ stage++ }
+ WHO_ARE_THEY + 24 -> npcl(FacialExpression.DRUNK, "You'll have a job. I've been drinking this for a week.").also { stage++ }
+ WHO_ARE_THEY + 25 -> playerl(FacialExpression.ASKING, "'Captain Braindeath's Extra Strength Rum/Drain Cleaner. Now 50% more debilitating'?").also { stage++ }
+ WHO_ARE_THEY + 26 -> npcl(FacialExpression.DRUNK, "It's the extra sheep tranquilizers that gives it that added kick!").also { stage++ }
+ WHO_ARE_THEY + 27 -> playerl(FacialExpression.NEUTRAL, "Stay here and I'll be right back. Try not to move. Or go near any open flames.").also { stage = END_DIALOGUE }
+ }
+
+ TENDER -> when(stage){
+ 0 -> playerl(FacialExpression.HAPPY, "Hey, Skippy!").also { stage++ }
+ 1 -> npcl(FacialExpression.PANICKED, "Gaah! Don't drench me again!").also { stage++ }
+ 2 -> playerl(FacialExpression.HALF_GUILTY, "Hey! I only did that once! Try not to be such a big baby!").also { stage++ }
+ 3 -> npcl(FacialExpression.HALF_THINKING, "So what are you here for then?").also { stage = if (hasAnItem(player!!, Items.NETTLE_TEA_4239).exists()) 4 else NO_TEA }
+ 4 -> playerl(FacialExpression.HAPPY, "I've come to give you your tea.").also { stage++ }
+ 5 -> npcl(FacialExpression.HAPPY, "Excellent! I was thinking I was going to freeze out here!").also { stage++ }
+ 6 -> sendItemDialogue(player!!, Items.NETTLE_TEA_4239, "Skippy drinks the tea and clutches his forehead in pain.").also {
+ stage++
+ removeItem(player!!, Items.NETTLE_TEA_4239)
+ setVarbit(player!!, Vars.VARBIT_MINI_QUEST_MOGRE, HUNGOVER, true)
+ }
+ 7 -> npcl(FacialExpression.ANNOYED, "Ohhhhh...").also { stage++ }
+ 8 -> playerl(FacialExpression.ASKING, "What? What's wrong?").also { stage++ }
+ 9 -> npcl(FacialExpression.ANNOYED, "Not so loud...I think I have a hangover...").also { stage++ }
+ 10 -> playerl(FacialExpression.HALF_WORRIED, "Great...Well, I doubt you can remember anything through a hangover. What a waste of nettle tea...").also { stage++ }
+ 11 -> npcl(FacialExpression.FURIOUS, "Hey! A little sympathy here?").also { stage++ }
+ 12 -> npcl(FacialExpression.ANNOYED, "Owwowwoww... must remember not to shout...").also { stage++ }
+ 13 -> npcl(FacialExpression.ASKING, "Look, I do know a hangover cure. If you can get me a bucket of the stuff I think I'll be okay.").also { stage = if(getQuestStage(player!!, Quests.PLAGUE_CITY) >= 14 ) PLAGUE_CITY_RECIPE else LEARN_RECIPE }
+
+ PLAGUE_CITY_RECIPE -> playerl(FacialExpression.HALF_THINKING, "Wait... is this cure a bucket of chocolate milk and snape grass?").also { stage++ }
+ PLAGUE_CITY_RECIPE + 1 -> npcl(FacialExpression.HAPPY, "Yes! That's the stuff!").also { stage++ }
+ PLAGUE_CITY_RECIPE + 2 -> playerl(FacialExpression.HALF_THINKING, "Ahhh. Yes, I've made some of that stuff before. I should be able to get you some, no problem.").also { stage = END_DIALOGUE }
+
+ LEARN_RECIPE -> playerl(FacialExpression.ASKING, "So what is it you need?").also { stage++ }
+ LEARN_RECIPE + 1 -> npcl(FacialExpression.NEUTRAL, "A bucket of milk with chocolate ground into it, with a handful of snape grass thrown in on top.").also { stage++ }
+ LEARN_RECIPE + 2 -> playerl(FacialExpression.ASKING, "What? Run that past me again?").also { stage ++ }
+ LEARN_RECIPE + 3 -> npcl(FacialExpression.NEUTRAL, "Take a bucket of milk, a bar of chocolate and some snape grass.").also { stage++ }
+ LEARN_RECIPE + 4 -> npcl(FacialExpression.NEUTRAL, "Grind the chocolate with a mortar and pestle.").also { stage++ }
+ LEARN_RECIPE + 5 -> npcl(FacialExpression.NEUTRAL, "Add the chocolate powder to the milk, then add the snape grass.").also { stage++ }
+ LEARN_RECIPE + 6 -> npcl(FacialExpression.NEUTRAL, "Then bring it here and I will drink it.").also { stage++ }
+ LEARN_RECIPE + 7 -> npcl(FacialExpression.NEUTRAL, "The end, and we all live happily ever after. Got it?").also { stage = END_DIALOGUE }
+
+ NO_TEA -> playerl(FacialExpression.HALF_GUILTY, "No real reason. I just thought I would check up on you is all.").also { stage++ }
+ NO_TEA + 1 -> npcl(FacialExpression.ANGRY, "Well, I'm still wet, still cold and still waiting on that nettle tea.").also { stage = END_DIALOGUE }
+ }
+ HUNGOVER -> when(stage){
+ 0 -> playerl(FacialExpression.HAPPY, "Hey, Skippy!").also{ stage++ }
+ 1 -> npcl(FacialExpression.ANNOYED, "Egad! Don't you know not to shout around a guy with a hangover?").also { stage++ }
+ 2 -> npcl(FacialExpression.HALF_GUILTY, "Ahhhhhg...No more shouting for me...").also { stage++ }
+ 3 -> npcl(FacialExpression.ASKING, "What is it anyway?").also { stage = if (hasAnItem(player!!, Items.HANGOVER_CURE_1504).exists()) CURE else NO_CURE }
+
+ CURE -> playerl(FacialExpression.HAPPY, "Well Skippy, you will no doubt be glad to hear that I got you your hangover cure!").also { stage++ }
+ CURE + 1 ->npcl(FacialExpression.HAPPY, "Gimme!").also { stage++ }
+ CURE + 2 -> sendDialogue(player!!, "Skippy chugs the hangover cure... very impressive.").also {
+ removeItem(player!!, Items.HANGOVER_CURE_1504)
+ stage++
+ setVarbit(player!!, 1344, DONE_QUEST, true)
+ }
+ CURE + 3 -> npcl(FacialExpression.HAPPY, "Ahhhhhhhhhhhhhhh...").also { stage ++ }
+ CURE + 4 -> npcl(FacialExpression.HAPPY, "Much better...").also { stage ++ }
+ CURE + 5 -> playerl(FacialExpression.ASKING, "Feeling better?").also { stage ++ }
+ CURE + 6 -> npcl(FacialExpression.HAPPY, "Considerably.").also { stage ++ }
+ CURE + 7 -> playerl(FacialExpression.ASKING, "Then tell me where the mudskippers are!").also { stage++ }
+ CURE + 8 -> npcl(FacialExpression.NEUTRAL, "I wish you wouldn't go looking for them. Those vicious killers will tear you apart.").also { stage ++ }
+ CURE + 9 -> npcl(FacialExpression.HALF_THINKING, "It's all becoming clear to me now...").also { stage ++ }
+ CURE + 10 -> npcl(FacialExpression.HAPPY, "I was fishing using a Fishing Explosive...").also { stage ++ }
+ CURE + 11 -> playerl(FacialExpression.ASKING, "A Fishing Explosive?").also { stage++ }
+ CURE + 12 -> npcl(FacialExpression.NEUTRAL, "Well, Slayer Masters sell these highly volatile potions for killing underwater creatures.").also { stage ++ }
+ CURE + 13 -> npcl(FacialExpression.NEUTRAL, "If you don't feel like lobbing a net about all day you can use them to fish with...").also { stage ++ }
+ CURE + 14 -> npcl(FacialExpression.NEUTRAL, "But this time I was startled by what I thought was a giant mudskipper.").also { stage ++ }
+ CURE + 15 -> npcl(FacialExpression.NEUTRAL, "What it was, in fact, was a...").also { stage ++ }
+ CURE + 16 -> npcl(FacialExpression.NEUTRAL, "Dramatic Pause...").also { stage ++ }
+ CURE + 17 -> npcl(FacialExpression.PANICKED, "A Mogre!").also { stage ++ }
+ CURE + 18 -> playerl(FacialExpression.ASKING, "What exactly is a Mogre?").also { stage++ }
+ CURE + 19 -> npcl(FacialExpression.NEUTRAL, "A Mogre is a type of Ogre that spends most of its time underwater.").also { stage ++ }
+ CURE + 20 -> npcl(FacialExpression.NEUTRAL, "They hunt giant mudskippers by wearing their skins and swimming close until they can attack them.").also { stage ++ }
+ CURE + 21 -> npcl(FacialExpression.NEUTRAL, "When I used the Fishing Explosive I scared off all the fish, and so the Mogre got out of the water to express its extreme displeasure.").also { stage ++ }
+ CURE + 22 -> npcl(FacialExpression.NEUTRAL, "With an iron mace.").also { stage ++ }
+ CURE + 23 -> playerl(FacialExpression.ASKING, "I take it the head injury is responsible for the staggering and yelling?").also { stage++ }
+ CURE + 24 -> npcl(FacialExpression.NEUTRAL, "No, no.").also { stage ++ }
+ CURE + 25 -> npcl(FacialExpression.NEUTRAL, "My addiction to almost-lethal alcohol did that.").also { stage ++ }
+ CURE + 26 -> npcl(FacialExpression.NEUTRAL, "But if you are set on finding these Mogres just head south from here until you find Mudskipper Point.").also { stage ++ }
+ CURE + 27 -> playerl(FacialExpression.ASKING, "The mudskipper-eating monsters are to be found at Mudskipper point?").also { stage++ }
+ CURE + 28 -> playerl(FacialExpression.ROLLING_EYES, "Shock!").also { stage++ }
+ CURE + 29 -> playerl(FacialExpression.NEUTRAL, "Thanks. I'll be careful.").also { stage = END_DIALOGUE }
+
+ NO_CURE -> playerl(FacialExpression.HALF_GUILTY, "I just came back to ask you something.").also { stage++ }
+ NO_CURE + 1 -> npcl(FacialExpression.ANNOYED, "What?").also { stage++ }
+ NO_CURE + 2 -> showTopics(
+ Topic("How do I make that hangover cure again?", RECIPE),
+ Topic("Why do they call you 'Skippy'?", NAME_ORIGIN)
+ )
+
+ RECIPE -> npcl(FacialExpression.ANGRY, "Give me strength...Here's what you do. Pay attention!").also { stage++ }
+ RECIPE + 1 -> npcl(FacialExpression.ANGRY, "You take a bucket of milk, a bar of chocolate and some snape grass.").also { stage++ }
+ RECIPE + 2 -> npcl(FacialExpression.ANGRY, "Grind the chocolate with a pestle and mortar.").also { stage++ }
+ RECIPE + 3 -> npcl(FacialExpression.ANGRY, "Add the chocolate powder to the milk, then add the snape grass.").also { stage++ }
+ RECIPE + 4 -> npcl(FacialExpression.ANGRY, "Then bring it here and I will drink it.").also { stage++ }
+ RECIPE + 5 -> npcl(FacialExpression.ANGRY, "Are you likely to remember that or should I go get some crayons and draw you a picture?").also { stage++ }
+ RECIPE + 6 -> playerl(FacialExpression.ANGRY, "Hey! I remember it now, ok! See you in a bit.").also { stage = END_DIALOGUE }
+
+ NAME_ORIGIN -> npcl(FacialExpression.THINKING, "I think it may have something to do with my near- constant raving about mudskippers.").also { stage++ }
+ NAME_ORIGIN + 1 -> npcl(FacialExpression.THINKING, "That or it's something to do with that time with the dress and the field full of daisies...").also { stage = END_DIALOGUE }
+ }
+ DONE_QUEST -> when(stage){
+ 0 -> playerl(FacialExpression.NEUTRAL, "Hey, Skippy.").also { stage++ }
+ 1 -> npcl(FacialExpression.HAPPY, "Hey you!").also { stage++ }
+ 2 -> playerl(FacialExpression.ASKING, "How do I annoy the Mogres again?").also { stage++ }
+ 3 -> npcl(FacialExpression.HAPPY, "Go south to Mudskipper Point and lob a Fishing Explosive into the sea. You can grab them from the Slayer masters.").also { stage++ }
+ 4 -> playerl(FacialExpression.ASKING, "Thanks! So, what are you going to do now?").also { stage++ }
+ 5 -> npcl(FacialExpression.HAPPY, "Well, I was planning on continuing my hobby of wandering up and down this bit of coastline, bellowing random threats and throwing bottles.").also { stage++ }
+ 6 -> npcl(FacialExpression.ASKING, "And you?").also { stage++ }
+ 7 -> playerl(FacialExpression.NEUTRAL, "I was planning on wandering up and down the landscape, bugging people to see if they had mindblowingly dangerous quests for me to undertake.").also { stage++ }
+ 8 -> npcl(FacialExpression.HAPPY, "Well, good luck with that!").also { stage++ }
+ 9 -> playerl(FacialExpression.HAPPY, "You too!").also { stage++ }
+ 10 -> npcl(FacialExpression.ROLLING_EYES, "Weirdo...").also { stage++ }
+ 11 -> playerl(FacialExpression.ROLLING_EYES, "Loony..").also { stage = END_DIALOGUE }
+ }
+ }
+ }
+}
+
+class SkippyBootDialogue: DialogueFile(){
+ override fun handle(componentID: Int, buttonID: Int) {
+ npc = NPC(NPCs.SKIPPY_2796)
+ val expression = if (getVarbit(player!!, Vars.VARBIT_MINI_QUEST_MOGRE) > SkippyBucketDialogue.DRUNK) FacialExpression.ROLLING_EYES else FacialExpression.DRUNK
+ npcl(expression, "Thanks! Now I have two right boots!").also { stage = END_DIALOGUE }
+ }
+
+}
diff --git a/Server/src/main/content/region/asgarnia/portsarim/dialogue/AhabDialogue.java b/Server/src/main/content/region/asgarnia/portsarim/dialogue/AhabDialogue.java
index 493bc1973..5f5446083 100644
--- a/Server/src/main/content/region/asgarnia/portsarim/dialogue/AhabDialogue.java
+++ b/Server/src/main/content/region/asgarnia/portsarim/dialogue/AhabDialogue.java
@@ -5,6 +5,7 @@ import core.game.dialogue.FacialExpression;
import core.game.node.entity.npc.NPC;
import core.plugin.Initializable;
import core.game.node.entity.player.Player;
+import content.data.Quests;
/**
* Represents the dialogue plugin used for the npc Ahav.
@@ -117,7 +118,7 @@ public final class AhabDialogue extends DialoguePlugin {
stage = 28;
break;
case 28:
- if (player.getQuestRepository().isComplete("Dragon Slayer")) {
+ if (player.getQuestRepository().isComplete(Quests.DRAGON_SLAYER)) {
player("Well, I do have a ship that I'm not using.", "It's the Lady Lumbridge.");
stage = 29;
} else {
diff --git a/Server/src/main/content/region/asgarnia/portsarim/dialogue/GerrantDialogue.java b/Server/src/main/content/region/asgarnia/portsarim/dialogue/GerrantDialogue.java
deleted file mode 100644
index 1d00b97d0..000000000
--- a/Server/src/main/content/region/asgarnia/portsarim/dialogue/GerrantDialogue.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package content.region.asgarnia.portsarim.dialogue;
-
-import core.game.dialogue.DialoguePlugin;
-import core.game.dialogue.FacialExpression;
-import core.game.node.entity.npc.NPC;
-import core.plugin.Initializable;
-import core.game.node.entity.player.Player;
-
-/**
- * Represents the dialogue plugin used for the gerrant npc.
- * @author 'Vexia
- * @version 1.0
- */
-@Initializable
-public final class GerrantDialogue extends DialoguePlugin {
-
- /**
- * Constructs a new {@code GerrantDialogue} {@code Object}.
- */
- public GerrantDialogue() {
- /**
- * empty.
- */
- }
-
- /**
- * Constructs a new {@code GerrantDialogue} {@code Object}.
- * @param player the player.
- */
- public GerrantDialogue(Player player) {
- super(player);
- }
-
- @Override
- public DialoguePlugin newInstance(Player player) {
- return new GerrantDialogue(player);
- }
-
- @Override
- public boolean open(Object... args) {
- npc = (NPC) args[0];
- interpreter.sendDialogues(npc, FacialExpression.HAPPY, "Welcome! You can buy fishing equipment at my store.", "We'll also buy anything you catch off you.");
- stage = 0;
- return true;
- }
-
- @Override
- public boolean handle(int interfaceId, int buttonId) {
- switch (stage) {
- case 0:
- interpreter.sendOptions("Choose an option:", "Let's see what you've got then.", "Sorry, I'm not interested.");
- stage = 1;
- break;
- case 1:
- switch (buttonId) {
- case 1:
- interpreter.sendDialogues(player, FacialExpression.HAPPY, "Let's see what you've got then.");
- stage = 10;
- break;
- case 2:
- interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Sorry, I'm not interested.");
- stage = 20;
- break;
-
- }
- break;
- case 10:
- end();
- npc.openShop(player);
- break;
- case 20:
- end();
- break;
- }
- return true;
- }
-
- @Override
- public int[] getIds() {
- return new int[] { 558 };
- }
-}
diff --git a/Server/src/main/content/region/asgarnia/portsarim/dialogue/KlarenseDialogue.java b/Server/src/main/content/region/asgarnia/portsarim/dialogue/KlarenseDialogue.java
index e09ea0149..6c5e14b1e 100644
--- a/Server/src/main/content/region/asgarnia/portsarim/dialogue/KlarenseDialogue.java
+++ b/Server/src/main/content/region/asgarnia/portsarim/dialogue/KlarenseDialogue.java
@@ -7,6 +7,7 @@ import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.quest.Quest;
import core.plugin.Initializable;
import core.game.node.item.Item;
+import content.data.Quests;
/**
* Represents the dialogue used for the klarense npc.
@@ -51,7 +52,7 @@ public final class KlarenseDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
- quest = player.getQuestRepository().getQuest("Dragon Slayer");
+ quest = player.getQuestRepository().getQuest(Quests.DRAGON_SLAYER);
if (args.length > 1) {
interpreter.sendDialogues(npc, FacialExpression.ANGRY, "Hey, stay off my ship! That's private property!");
stage = 0;
diff --git a/Server/src/main/content/region/asgarnia/portsarim/dialogue/MonkOfEntranaDialogue.java b/Server/src/main/content/region/asgarnia/portsarim/dialogue/MonkOfEntranaDialogue.java
index 884ce1c00..e8c921159 100644
--- a/Server/src/main/content/region/asgarnia/portsarim/dialogue/MonkOfEntranaDialogue.java
+++ b/Server/src/main/content/region/asgarnia/portsarim/dialogue/MonkOfEntranaDialogue.java
@@ -41,6 +41,11 @@ public final class MonkOfEntranaDialogue extends DialoguePlugin {
return new MonkOfEntranaDialogue(player);
}
+ public void sail(Player player, Ships ship) {
+ ship.sail(player);
+ playJingle(player, 172);
+ }
+
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
@@ -98,7 +103,7 @@ public final class MonkOfEntranaDialogue extends DialoguePlugin {
stage = 25;
break;
case 23:
- interpreter.sendDialogues(npc, null, "Do not try and decieve us again. Come back when you", "have liad down your Zamorakian instruments of death.");
+ interpreter.sendDialogues(npc, null, "Do not try to deceive us again. Come back when you", "have laid down your Zamorakian instruments of death.");
stage = 24;
break;
case 24:
@@ -106,8 +111,7 @@ public final class MonkOfEntranaDialogue extends DialoguePlugin {
break;
case 25:
end();
- Ships.PORT_SARIM_TO_ENTRANA.sail(player);
- playJingle(player, 172);
+ sail(player, Ships.PORT_SARIM_TO_ENTRANA);
if (!player.getAchievementDiaryManager().getDiary(DiaryType.FALADOR).isComplete(0, 14)) {
player.getAchievementDiaryManager().getDiary(DiaryType.FALADOR).updateTask(player, 0, 14, true);
}
@@ -133,9 +137,7 @@ public final class MonkOfEntranaDialogue extends DialoguePlugin {
stage = 511;
break;
case 511:
- end();
- Ships.ENTRANA_TO_PORT_SARIM.sail(player);
- playJingle(player, 172);
+ sail(player, Ships.ENTRANA_TO_PORT_SARIM);
break;
case 520:
end();
diff --git a/Server/src/main/content/region/asgarnia/portsarim/dialogue/RedbeardFrankDialogue.java b/Server/src/main/content/region/asgarnia/portsarim/dialogue/RedbeardFrankDialogue.java
index 214b5f9f4..e3a46166c 100644
--- a/Server/src/main/content/region/asgarnia/portsarim/dialogue/RedbeardFrankDialogue.java
+++ b/Server/src/main/content/region/asgarnia/portsarim/dialogue/RedbeardFrankDialogue.java
@@ -12,6 +12,7 @@ import core.plugin.Initializable;
import core.game.node.item.Item;
import static core.tools.DialogueConstKt.END_DIALOGUE;
+import content.data.Quests;
/**
* Represents the dialogue to handle Rebeard Frank.
@@ -59,7 +60,7 @@ public class RedbeardFrankDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
- quest = player.getQuestRepository().getQuest("Pirate's Treasure");
+ quest = player.getQuestRepository().getQuest(Quests.PIRATES_TREASURE);
npc("Arr, Matey!");
stage = 0;
replacementReward = AchievementDiary.canReplaceReward(player, DiaryType.FALADOR, level);
diff --git a/Server/src/main/content/region/asgarnia/portsarim/handlers/PortSarimPlugin.java b/Server/src/main/content/region/asgarnia/portsarim/handlers/PortSarimPlugin.java
index 47df99e03..8746b7e93 100644
--- a/Server/src/main/content/region/asgarnia/portsarim/handlers/PortSarimPlugin.java
+++ b/Server/src/main/content/region/asgarnia/portsarim/handlers/PortSarimPlugin.java
@@ -15,6 +15,7 @@ import core.game.world.update.flag.context.Animation;
import core.plugin.Plugin;
import core.plugin.Initializable;
import core.tools.RandomFunction;
+import content.data.Quests;
/**
* Represents the port sarim plugin.
@@ -72,7 +73,7 @@ public final class PortSarimPlugin extends OptionHandler {
player.getDialogueInterpreter().open(238284);
break;
case "attack":
- if (player.getQuestRepository().getQuest("Dragon Slayer").getStage(player) != 20) {
+ if (player.getQuestRepository().getQuest(Quests.DRAGON_SLAYER).getStage(player) != 20) {
player.getPacketDispatch().sendMessage("The goblin is already in prison. You have no reason to attack him.");
} else {
player.getProperties().getCombatPulse().attack(node);
diff --git a/Server/src/main/content/region/asgarnia/portsarim/handlers/PortsObjectPlugin.java b/Server/src/main/content/region/asgarnia/portsarim/handlers/PortsObjectPlugin.java
index 206b3860c..7f45a94f4 100644
--- a/Server/src/main/content/region/asgarnia/portsarim/handlers/PortsObjectPlugin.java
+++ b/Server/src/main/content/region/asgarnia/portsarim/handlers/PortsObjectPlugin.java
@@ -11,6 +11,7 @@ import core.game.world.repository.Repository;
import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable;
import core.plugin.Plugin;
+import content.data.Quests;
/**
* Represents the option handler for port sarim.
@@ -206,7 +207,7 @@ public class PortsObjectPlugin extends OptionHandler {
player.getPacketDispatch().sendMessage("You disembark the ship.");
break;
case 2593:
- if (player.getQuestRepository().getQuest("Dragon Slayer").getStage(player) == 100) {
+ if (player.getQuestRepository().getQuest(Quests.DRAGON_SLAYER).getStage(player) == 100) {
player.getDialogueInterpreter().open(744, Repository.findNPC(744), true);// lady
// lumbridge.
return true;
diff --git a/Server/src/main/content/region/asgarnia/portsarim/quest/piratestreasure/PiratesTreasure.java b/Server/src/main/content/region/asgarnia/portsarim/quest/piratestreasure/PiratesTreasure.java
index ae22be400..65ab84c0e 100644
--- a/Server/src/main/content/region/asgarnia/portsarim/quest/piratestreasure/PiratesTreasure.java
+++ b/Server/src/main/content/region/asgarnia/portsarim/quest/piratestreasure/PiratesTreasure.java
@@ -7,6 +7,7 @@ import core.game.node.item.GroundItemManager;
import core.game.node.item.Item;
import core.plugin.Initializable;
import core.plugin.ClassScanner;
+import content.data.Quests;
/**
* Represents the pirates treasure quest.
@@ -50,7 +51,7 @@ public final class PiratesTreasure extends Quest {
* Constructs a new {@Code PiratesTreasure} {@Code Object}
*/
public PiratesTreasure() {
- super("Pirate's Treasure", 23, 22, 2, 71, 0, 1, 4);
+ super(Quests.PIRATES_TREASURE, 23, 22, 2, 71, 0, 1, 4);
}
@Override
diff --git a/Server/src/main/content/region/asgarnia/portsarim/quest/piratestreasure/PiratesTreasurePlugin.java b/Server/src/main/content/region/asgarnia/portsarim/quest/piratestreasure/PiratesTreasurePlugin.java
index a4f64a4dc..ce41de603 100644
--- a/Server/src/main/content/region/asgarnia/portsarim/quest/piratestreasure/PiratesTreasurePlugin.java
+++ b/Server/src/main/content/region/asgarnia/portsarim/quest/piratestreasure/PiratesTreasurePlugin.java
@@ -15,6 +15,7 @@ import core.game.node.item.Item;
import core.game.node.scenery.Scenery;
import core.game.world.map.Location;
import core.plugin.Plugin;
+import content.data.Quests;
/**
* Represents the pirates treasure plugin.
@@ -92,7 +93,7 @@ public final class PiratesTreasurePlugin extends OptionHandler {
@Override
public void run(Player player) {
- final Quest quest = player.getQuestRepository().getQuest("Pirate's Treasure");
+ final Quest quest = player.getQuestRepository().getQuest(Quests.PIRATES_TREASURE);
player.lock(2);
if (quest.getStage(player) == 20) {
if (player.getSavedData().getQuestData().isGardenerAttack()) {
diff --git a/Server/src/main/content/region/asgarnia/rimmington/dialogue/HettyDialogue.kt b/Server/src/main/content/region/asgarnia/rimmington/dialogue/HettyDialogue.kt
index 5f9d41e3f..39a15588a 100644
--- a/Server/src/main/content/region/asgarnia/rimmington/dialogue/HettyDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/rimmington/dialogue/HettyDialogue.kt
@@ -1,7 +1,7 @@
package content.region.asgarnia.rimmington.dialogue
+import content.data.Quests
import content.region.asgarnia.rimmington.quest.witchpotion.HettyWitchsPotionDialogue
-import content.region.asgarnia.rimmington.quest.witchpotion.WitchsPotion
import core.api.*
import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
@@ -20,7 +20,7 @@ class HettyDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun open(vararg args: Any?): Boolean {
npc = args[0] as NPC
- val questStage = getQuestStage(player, WitchsPotion.QUEST_NAME)
+ val questStage = getQuestStage(player, Quests.WITCHS_POTION)
when(questStage) {
0 -> npcl(FacialExpression.NEUTRAL, "What could you want with an old woman like me?").also { stage = 0 }
diff --git a/Server/src/main/content/region/asgarnia/rimmington/handler/RimmingtonListeners.kt b/Server/src/main/content/region/asgarnia/rimmington/handler/RimmingtonListeners.kt
new file mode 100644
index 000000000..5dc727594
--- /dev/null
+++ b/Server/src/main/content/region/asgarnia/rimmington/handler/RimmingtonListeners.kt
@@ -0,0 +1,29 @@
+package content.region.asgarnia.rimmington.handler
+
+import core.api.*
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.node.item.Item
+import core.game.node.scenery.Scenery
+import org.rs09.consts.Items
+import org.rs09.consts.Sounds
+
+/**
+ * @author Player Name
+ */
+
+class RimmingtonListeners : InteractionListener {
+ override fun defineListeners() {
+ on(9662, IntType.SCENERY, "take") { player, node ->
+ if (!hasSpaceFor(player, Item(Items.SPADE_952))) {
+ sendMessage(player, "You don't have enough inventory space to hold that item.")
+ return@on true
+ }
+ animate(player, 535)
+ playAudio(player, Sounds.PICK2_2582)
+ addItem(player, Items.SPADE_952)
+ replaceScenery(node as Scenery, 0, 50)
+ return@on true
+ }
+ }
+}
diff --git a/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/HettyWitchsPotionDialogue.kt b/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/HettyWitchsPotionDialogue.kt
index 2cc4ca2fd..50169689b 100644
--- a/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/HettyWitchsPotionDialogue.kt
+++ b/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/HettyWitchsPotionDialogue.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.rimmington.quest.witchpotion
+import content.data.Quests
import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
@@ -30,8 +31,8 @@ class HettyWitchsPotionDialogue(private val dStage: Int) : DialogueFile() {
3 -> npcl(FacialExpression.NEUTRAL, "You need an eye of newt, a rat's tail, an onion... Oh and a piece of burnt meat.").also { stage++ }
4 -> {
playerl(FacialExpression.HAPPY, "Great, I'll go and get them.")
- startQuest(player, WitchsPotion.QUEST_NAME)
- setQuestStage(player, WitchsPotion.QUEST_NAME, 20)
+ startQuest(player, Quests.WITCHS_POTION)
+ setQuestStage(player, Quests.WITCHS_POTION, 20)
stage = END_DIALOGUE
}
}
@@ -67,7 +68,7 @@ class HettyWitchsPotionDialogue(private val dStage: Int) : DialogueFile() {
removeItem(player, Item(Items.BURNT_MEAT_2146, 1)) &&
removeItem(player, Item(Items.EYE_OF_NEWT_221, 1))) {
npcl(FacialExpression.HAPPY, "Ok, now drink from the cauldron.")
- setQuestStage(player, WitchsPotion.QUEST_NAME, 40)
+ setQuestStage(player, Quests.WITCHS_POTION, 40)
stage = END_DIALOGUE
}
}
diff --git a/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/WitchsPotion.kt b/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/WitchsPotion.kt
index 3f002ff85..0ada42b79 100644
--- a/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/WitchsPotion.kt
+++ b/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/WitchsPotion.kt
@@ -7,15 +7,13 @@ import core.game.node.entity.skill.Skills
import core.plugin.Initializable
import org.rs09.consts.Components
import org.rs09.consts.Items
+import content.data.Quests
/**
* Represents the Witch's Potion Quest
*/
@Initializable
-class WitchsPotion : Quest(QUEST_NAME, 31, 30, 1, 67, 0, 1, 3) {
- companion object {
- const val QUEST_NAME = "Witch's Potion"
- }
+class WitchsPotion : Quest(Quests.WITCHS_POTION, 31, 30, 1, 67, 0, 1, 3) {
override fun drawJournal(player: Player?, stage: Int) {
super.drawJournal(player, stage)
diff --git a/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/WitchsPotionListeners.kt b/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/WitchsPotionListeners.kt
index 1c6ccc15a..0d00cee47 100644
--- a/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/WitchsPotionListeners.kt
+++ b/Server/src/main/content/region/asgarnia/rimmington/quest/witchpotion/WitchsPotionListeners.kt
@@ -1,5 +1,6 @@
package content.region.asgarnia.rimmington.quest.witchpotion
+import content.data.Quests
import core.api.*
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
@@ -13,9 +14,9 @@ class WitchsPotionListener : InteractionListener {
override fun defineListeners() {
on(Scenery.CAULDRON_2024, IntType.SCENERY, "drink from") { player, node ->
- if (getQuestStage(player, WitchsPotion.QUEST_NAME) == 40) {
+ if (getQuestStage(player, Quests.WITCHS_POTION) == 40) {
sendDialogue(player, "You drink from the cauldron, it tastes horrible! You feel yourself imbued with power.")
- finishQuest(player, WitchsPotion.QUEST_NAME)
+ finishQuest(player, Quests.WITCHS_POTION)
} else {
sendDialogue(player, "As nice as that looks I think I'll give it a miss for now.")
}
diff --git a/Server/src/main/content/region/asgarnia/taverley/dialogue/KaqemeexDialogue.java b/Server/src/main/content/region/asgarnia/taverley/dialogue/KaqemeexDialogue.java
index e5ab79fd7..487939a33 100644
--- a/Server/src/main/content/region/asgarnia/taverley/dialogue/KaqemeexDialogue.java
+++ b/Server/src/main/content/region/asgarnia/taverley/dialogue/KaqemeexDialogue.java
@@ -7,6 +7,7 @@ import core.plugin.Initializable;
import core.game.node.entity.skill.Skills;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
+import content.data.Quests;
/**
* Represents the kaqemeex dialogue plugin.
@@ -55,17 +56,17 @@ public final class KaqemeexDialogue extends DialoguePlugin {
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
- if (player.getQuestRepository().isComplete("Druidic Ritual")) {
+ if (player.getQuestRepository().isComplete(Quests.DRUIDIC_RITUAL)) {
interpreter.sendDialogues(npc, null, "Hello again. How is the Herblore going?");
stage = 600;
break;
}
- if (player.getQuestRepository().getQuest("Druidic Ritual").getStage(player) == 10) {
+ if (player.getQuestRepository().getQuest(Quests.DRUIDIC_RITUAL).getStage(player) == 10) {
interpreter.sendDialogues(npc, FacialExpression.FRIENDLY, "Hello again.");
stage = 40;
break;
}
- if (player.getQuestRepository().getQuest("Druidic Ritual").getStage(player) == 99) {
+ if (player.getQuestRepository().getQuest(Quests.DRUIDIC_RITUAL).getStage(player) == 99) {
interpreter.sendDialogues(npc, FacialExpression.FRIENDLY, "I have word from Sanfew that you have been very", "helpful in assisting him with his preparations for the", "purification ritual. As promised I will now teach you the", "ancient arts of Herblore.");
stage = 200;
break;
@@ -74,7 +75,7 @@ public final class KaqemeexDialogue extends DialoguePlugin {
stage = 1;
break;
case 1:
- if (player.getQuestRepository().getQuest("Druidic Ritual").isStarted(player)) {
+ if (player.getQuestRepository().getQuest(Quests.DRUIDIC_RITUAL).isStarted(player)) {
if (Skillcape.isMaster(player, Skills.HERBLORE)) {
interpreter.sendOptions("Select an Option", "Can I buy a Skillcape of Herblore?", "Who are you?", "Did you build this?");
stage = 800;
@@ -164,7 +165,7 @@ public final class KaqemeexDialogue extends DialoguePlugin {
stage = 13;
break;
case 26:
- player.getQuestRepository().getQuest("Druidic Ritual").start(player);
+ player.getQuestRepository().getQuest(Quests.DRUIDIC_RITUAL).start(player);
interpreter.sendDialogues(npc, FacialExpression.HAPPY, "Excellent. Go to the village south of this place and speak", "to my fellow Sanfew who is working on the purification", "ritual. He knows better than I what is required to", "complete it.");
stage = 27;
break;
@@ -184,7 +185,7 @@ public final class KaqemeexDialogue extends DialoguePlugin {
break;
case 200:
end();
- player.getQuestRepository().getQuest("Druidic Ritual").finish(player);
+ player.getQuestRepository().getQuest(Quests.DRUIDIC_RITUAL).finish(player);
break;
case 500:
switch (buttonId) {
diff --git a/Server/src/main/content/region/asgarnia/taverley/dialogue/PikkupstixDialogue.java b/Server/src/main/content/region/asgarnia/taverley/dialogue/PikkupstixDialogue.java
index 3162dbdf1..f953d2783 100644
--- a/Server/src/main/content/region/asgarnia/taverley/dialogue/PikkupstixDialogue.java
+++ b/Server/src/main/content/region/asgarnia/taverley/dialogue/PikkupstixDialogue.java
@@ -11,6 +11,7 @@ import core.plugin.Initializable;
import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
+import content.data.Quests;
/**
* Handles the PikkupstixDialogue dialogue.
@@ -85,7 +86,7 @@ public final class PikkupstixDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
- quest = player.getQuestRepository().getQuest("Wolf Whistle");
+ quest = player.getQuestRepository().getQuest(Quests.WOLF_WHISTLE);
switch (quest.getStage(player)) {
case 0:
npc("You there! What are you doing here, as if I didn't have", "enough troubles?");
diff --git a/Server/src/main/content/region/asgarnia/taverley/dialogue/SanfewDialogue.java b/Server/src/main/content/region/asgarnia/taverley/dialogue/SanfewDialogue.java
index acf1f9f8b..0c5d09444 100644
--- a/Server/src/main/content/region/asgarnia/taverley/dialogue/SanfewDialogue.java
+++ b/Server/src/main/content/region/asgarnia/taverley/dialogue/SanfewDialogue.java
@@ -6,6 +6,7 @@ import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.plugin.Initializable;
import core.game.node.item.Item;
+import content.data.Quests;
/**
* Handles the SanfewDialogue dialogue.
@@ -40,12 +41,12 @@ public class SanfewDialogue extends DialoguePlugin {
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
- if (player.getQuestRepository().getQuest("Druidic Ritual").getStage(player) == 20) {
+ if (player.getQuestRepository().getQuest(Quests.DRUIDIC_RITUAL).getStage(player) == 20) {
interpreter.sendDialogues(npc, FacialExpression.HALF_ASKING, "Did you bring me the required ingredients for the", "potion?");
stage = 100;
break;
}
- if (player.getQuestRepository().getQuest("Druidic Ritual").getStage(player) == 10) {
+ if (player.getQuestRepository().getQuest(Quests.DRUIDIC_RITUAL).getStage(player) == 10) {
interpreter.sendOptions("Select an Option", "I've been sent to help purify the Varrock stone circle.", "Actually, I don't need to speak to you.");
stage = 2;
break;
@@ -89,7 +90,7 @@ public class SanfewDialogue extends DialoguePlugin {
break;
case 8:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "It is located somewhere in the mysterious underground", "halls which are located somewhere in the woods just", "South of here. They are too dangerous for me to go", "myself however.");
- player.getQuestRepository().getQuest("Druidic Ritual").setStage(player, 20);
+ player.getQuestRepository().getQuest(Quests.DRUIDIC_RITUAL).setStage(player, 20);
stage = 9;
break;
case 9:
@@ -129,7 +130,7 @@ public class SanfewDialogue extends DialoguePlugin {
break;
case 202:
player.getInventory().remove(new Item(522, 1), new Item(523, 1), new Item(524, 1), new Item(525, 1));
- player.getQuestRepository().getQuest("Druidic Ritual").setStage(player, 99);
+ player.getQuestRepository().getQuest(Quests.DRUIDIC_RITUAL).setStage(player, 99);
player.getQuestRepository().syncronizeTab(player);
interpreter.sendDialogues(npc, null, "Now go and talk to Kaqemeex and he will introduce", "you to the wonderful world of herblore and potion", "making!");
stage = 203;
diff --git a/Server/src/main/content/region/asgarnia/taverley/quest/DruidicRitual.kt b/Server/src/main/content/region/asgarnia/taverley/quest/DruidicRitual.kt
index af35cb386..15440a4bd 100644
--- a/Server/src/main/content/region/asgarnia/taverley/quest/DruidicRitual.kt
+++ b/Server/src/main/content/region/asgarnia/taverley/quest/DruidicRitual.kt
@@ -1,6 +1,5 @@
package content.region.asgarnia.taverley.quest
-import content.region.asgarnia.taverley.dialogue.KaqemeexDialogue
import core.api.*
import core.game.component.Component
import core.game.interaction.QueueStrength
@@ -10,23 +9,20 @@ import core.game.node.entity.player.link.quest.Quest
import core.game.node.entity.skill.Skills
import core.plugin.Initializable
import org.rs09.consts.Items
-import org.rs09.consts.NPCs
+import content.data.Quests
/**
* Druidic Ritual Quest
*/
@Initializable
-class DruidicRitual : Quest("Druidic Ritual", 48, 47, 4, 80, 0, 3, 4) {
+class DruidicRitual : Quest(Quests.DRUIDIC_RITUAL, 48, 47, 4, 80, 0, 3, 4) {
- companion object {
- const val questName = "Druidic Ritual"
- }
override fun drawJournal(player: Player, stage: Int) {
super.drawJournal(player, stage)
var line = 12
var stage = getStage(player)
- var started = getQuestStage(player, questName) > 0
+ var started = getQuestStage(player, Quests.DRUIDIC_RITUAL) > 0
if (!started) {
line(player, "I can start this quest by speaking to !!Kaqemeex?? who is at", line++)
diff --git a/Server/src/main/content/region/asgarnia/taverley/quest/WolfWhistle.java b/Server/src/main/content/region/asgarnia/taverley/quest/WolfWhistle.java
index a9aeecf48..ec4661ccf 100644
--- a/Server/src/main/content/region/asgarnia/taverley/quest/WolfWhistle.java
+++ b/Server/src/main/content/region/asgarnia/taverley/quest/WolfWhistle.java
@@ -5,8 +5,10 @@ import core.game.node.entity.skill.Skills;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.quest.Quest;
import core.game.node.item.Item;
+import org.rs09.consts.Items;
import static core.api.ContentAPIKt.*;
+import content.data.Quests;
/**
@@ -25,38 +27,128 @@ public class WolfWhistle extends Quest {
* Constructs a new {@code WolfWhistle} {@code Object}.
*/
public WolfWhistle() {
- super("Wolf Whistle", 146, 145, 1);
+ super(Quests.WOLF_WHISTLE, 146, 145, 1);
}
@Override
public void drawJournal(Player player, int stage) {
super.drawJournal(player, stage);
- switch (stage) {
- case 0:
- line(player, BLUE + "I can begin this quest by talking to " + RED + "Pikkupstix" + BLUE + ", who lives in", 4+ 7);
- line(player, RED + "Taverley.", 5+ 7);
- break;
- case 10:
- line(player, "Having spoken to Pikkupstix, it seems that all I have to dois get rid of the little rabbit upstairs in his house.", 4+ 7);
- break;
- case 20:
- line(player, "Having spoken to Pikkupstix, it seems that all I have to dois get rid of the little rabbit upstairs in his house.It appears that I have underestimated the rabbit in thiscase; it is some huge rabbit-wolf-monster-bird-thing. Ithink I should speak to Pikkupstix to find out what is goingon.", 4+ 7);
- break;
- case 30:
- line(player, "Having spoken to Pikkupstix, it seems that all I have to dois get rid of the little rabbit upstairs in his house.It appears that I have underestimated the rabbit in thiscase; it is some huge rabbit-wolf-monster-bird-thing. Ithink I should speak to Pikkupstix to find out what is goingon.I have spoken to Pikkupstix, who has promised to teach methe secrets of Summoning if I can help dismiss the giantwolpertinger. To do this, I need to bring him 2 lots of wolfbones. " + (player.getInventory().containsItem(WOLF_BONES) ? "" : "") + "I need to get 2 lots of wolf bones.", 4+ 7);
- break;
- case 40:
- line(player, "Having spoken to Pikkupstix, it seems that all I have to dois get rid of the little rabbit upstairs in his house.It appears that I have underestimated the rabbit in thiscase; it is some huge rabbit-wolf-monster-bird-thing. Ithink I should speak to Pikkupstix to find out what is goingon.I have spoken to Pikkupstix, who has promised to teach methe secrets of Summoning if I can help dismiss the giantwolpertinger. To do this, I need to bring him 2 lots of wolfbones.I have given Pikkupstix all of the items he requested.Pikkupstix has given me some gold charms, spirit shardsand pouches, with which to make a spirit wolf pouch andsome Howl scrolls. I will then be able to use them to dismissthe giant wolpertinger.I need to open the trapdoor with the trapdoor key that Ihave been given. ", 4+ 7);
- break;
- case 50:
- line(player, "Having spoken to Pikkupstix, it seems that all I have to dois get rid of the little rabbit upstairs in his house.It appears that I have underestimated the rabbit in thiscase; it is some huge rabbit-wolf-monster-bird-thing. Ithink I should speak to Pikkupstix to find out what is goingon.I have spoken to Pikkupstix, who has promised to teach methe secrets of Summoning if I can help dismiss the giantwolpertinger. To do this, I need to bring him 2 lots of wolfbones.Pikkupstix has given me some gold charms, spirit shardsand pouches, with which to make a spirit wolf pouch andsome Howl scrolls. I will then be able to use them to dismissthe giant wolpertinger.I have infused the 2 spirit wolf pouches, but I need totransform one of them into scrolls at the obelisk.", 4+ 7);
- break;
- case 60:
- line(player, "Having spoken to Pikkupstix, it seems that all I have to dois get rid of the little rabbit upstairs in his house.It appears that I have underestimated the rabbit in thiscase; it is some huge rabbit-wolf-monster-bird-thing. Ithink I should speak to Pikkupstix to find out what is goingon.I have spoken to Pikkupstix, who has promised to teach methe secrets of Summoning if I can help dismiss the giantwolpertinger. To do this, I need to bring him 2 lots of wolfbones.Pikkupstix has given me some gold charms