Fixed Estate agent dialogue + Varrock achievement unlocks for it
Minor spelling mistake corrected in DiaryType relating to Varrock achievements Removed Arios's shit within distance method and replaced it with Ceikrys most superior withinDistanceProper (now withinDistance)
This commit is contained in:
@@ -97,7 +97,7 @@ public enum DiaryType {
|
||||
"Give a stray dog a bone",
|
||||
"Spin a bowl on the pottery wheel and fire it in the oven in<br><br>Barbarian Village",
|
||||
"Enter Edgeville Dungeon using the entrance to the south of<br><br>Edgeville",
|
||||
"Move our player-owned house portal to a different location<br><br>using the Varrock estate agent",
|
||||
"Move your player-owned house portal to a different location<br><br>using the Varrock estate agent",
|
||||
"Speak to Haig Halen after obtaining at least 50 kudos", //TODO need to implement kudos
|
||||
"Enter the Earth Altar using an earth tiara or talisman",
|
||||
"Have Elsie tell you a story",
|
||||
@@ -137,7 +137,7 @@ public enum DiaryType {
|
||||
"Speak to Orlando Smith when you have achieved 153 kudos", // TODO need to implement kudos
|
||||
"Talk to Romily Weaklax and give him a wild pie",
|
||||
"Craft an air battlestaff",
|
||||
"Give your player-owned house a fancy stone or tropical wood<br><br>finish at the Varrock estate agent's",
|
||||
"Give your player-owned house a tropical wood or fancy stone<br><br>finish at the Varrock estate agent's",
|
||||
"Make a Varrock teleport tablet on a mahogany lectern",
|
||||
"Obtain a new set of Family Crest gauntlets from Dimintheis", // TODO need family crest
|
||||
"Make a Waka Canoe near Edgeville",
|
||||
|
||||
-442
@@ -1,442 +0,0 @@
|
||||
package core.game.node.entity.skill.construction;
|
||||
|
||||
import core.game.node.entity.player.link.diary.DiaryType;
|
||||
import core.game.content.dialogue.DialoguePlugin;
|
||||
import core.game.content.dialogue.FacialExpression;
|
||||
import core.game.content.global.Skillcape;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
import core.game.node.entity.npc.NPC;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.world.GameWorld;
|
||||
import core.game.world.map.Location;
|
||||
import core.plugin.Initializable;
|
||||
|
||||
/**
|
||||
* Represents the estate agent dialogue.
|
||||
*
|
||||
* @author 'Vexia
|
||||
* @version 1.0
|
||||
*/
|
||||
@Initializable
|
||||
public final class EstateAgentDialogue extends DialoguePlugin {
|
||||
|
||||
/**
|
||||
* Represents the book item.
|
||||
*/
|
||||
private static final Item BOOK = new Item(8463, 1);
|
||||
private static HouseLocation moveLoc;
|
||||
|
||||
/**
|
||||
* Constructs a new {@code EstateAgentDialogue} {@code Object}.
|
||||
*/
|
||||
public EstateAgentDialogue() {
|
||||
/**
|
||||
* empty.
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new {@code EstateAgentDialogue} {@code Object}.
|
||||
*
|
||||
* @param player the player.
|
||||
*/
|
||||
public EstateAgentDialogue(Player player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DialoguePlugin newInstance(Player player) {
|
||||
return new EstateAgentDialogue(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean open(Object... args) {
|
||||
npc = (NPC) args[0];
|
||||
npc("Hello. Welcome to the " + GameWorld.getSettings().getName() + " Housing Agency! What", "can I do for you?");
|
||||
stage = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handle(int interfaceId, int buttonId) {
|
||||
switch (stage) {
|
||||
case 0:
|
||||
if (player.getHouseManager().hasHouse()) {
|
||||
options("Can you move my house please?", "Can you redecorate my house please?", "Could I have a Construction guidebook?", "Tell me about houses.", "Tell me about that skillcape you're wearing.");
|
||||
stage = 1;
|
||||
} else {
|
||||
options("How can I get a house?", "Tell me about houses.");
|
||||
stage = 2;
|
||||
}
|
||||
break;
|
||||
|
||||
//Options for when a player has a house
|
||||
case 1:
|
||||
switch (buttonId) {
|
||||
case 1:
|
||||
player("Can you move my house please?");
|
||||
stage = 10;
|
||||
break;
|
||||
case 2:
|
||||
player("Can you redecorate my house please?");
|
||||
stage = 30;
|
||||
break;
|
||||
case 3:
|
||||
player("Could I have a Construction guidebook?");
|
||||
stage = 50;
|
||||
break;
|
||||
case 4:
|
||||
player("Tell me about houses!");
|
||||
stage = 90;
|
||||
break;
|
||||
case 5:
|
||||
player("Tell me about that skillcape you're wearing!");
|
||||
stage = Skillcape.isMaster(player, Skills.CONSTRUCTION) ? 102 : 100;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
//Option for when a player does not have a house
|
||||
case 2:
|
||||
switch (buttonId) {
|
||||
case 1:
|
||||
player("How can I get a house?");
|
||||
stage = 3;
|
||||
break;
|
||||
case 2:
|
||||
player("Tell me about houses.");
|
||||
stage = 90;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
//Real Estate Agent offering a house
|
||||
case 3:
|
||||
npc("I can sell you a starting house in Rimmington for", "1000 coins. As you increase your construction skill you", "will be able to have your house moved to other areas", "and redecorated in other styles.");
|
||||
stage++;
|
||||
break;
|
||||
case 4:
|
||||
npc("Do you want to buy a starter house?");
|
||||
stage++;
|
||||
break;
|
||||
case 5:
|
||||
options("Yes please!", "No thanks.");
|
||||
stage++;
|
||||
break;
|
||||
case 6:
|
||||
switch (buttonId) {
|
||||
case 1:
|
||||
player("Yes please!");
|
||||
stage = 7;
|
||||
break;
|
||||
case 2:
|
||||
player("No thanks.");
|
||||
stage = 150;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
//Estate Agent Dialogue after house purchase
|
||||
case 7:
|
||||
if (player.getInventory().contains(995, 1000)) {
|
||||
player.getInventory().remove(new Item(995, 1000));
|
||||
player.getHouseManager().create(HouseLocation.RIMMINGTON);
|
||||
npc("Thank you. Go through the Rimmington house portal", "and you will find your house ready for you to start", "building in it.");
|
||||
stage = 150;
|
||||
} else {
|
||||
npc("You don't have enough money to buy a house,", "come back when you can afford one.");
|
||||
stage = 150;
|
||||
}
|
||||
break;
|
||||
|
||||
//Move House Dialogue
|
||||
case 10:
|
||||
npc("Certainly. Where would you like it moved to?");
|
||||
stage++;
|
||||
break;
|
||||
case 11:
|
||||
options("Rimmington (5,000)", "Taverley (5,000)", "Pollnivneach (7,500)", "Rellekka (10,000)", "More...");
|
||||
stage++;
|
||||
break;
|
||||
case 12:
|
||||
switch (buttonId) {
|
||||
case 1:
|
||||
player("To Rimmington please!");
|
||||
stage = 15;
|
||||
break;
|
||||
case 2:
|
||||
player("To Taverly please!");
|
||||
stage = 16;
|
||||
break;
|
||||
case 3:
|
||||
player("To Pollnivneach please!");
|
||||
stage = 17;
|
||||
break;
|
||||
case 4:
|
||||
player("To Rellekka please!");
|
||||
stage = 18;
|
||||
break;
|
||||
case 5:
|
||||
options("Brimhaven (15,000)", "Yanille (25,000)", "...Previous");
|
||||
stage = 13;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
switch (buttonId) {
|
||||
case 1:
|
||||
player("To Brimhaven please!");
|
||||
stage = 19;
|
||||
break;
|
||||
case 2:
|
||||
player("To Yanille please!");
|
||||
stage = 20;
|
||||
break;
|
||||
case 3:
|
||||
options("Rimmington (5,000)", "Taverley (5,000)", "Pollnivneach (7,500)", "Rellekka (10,000)", "More...");
|
||||
stage = 12;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
configureMove(HouseLocation.RIMMINGTON);
|
||||
break;
|
||||
case 16:
|
||||
configureMove(HouseLocation.TAVERLY);
|
||||
break;
|
||||
case 17:
|
||||
configureMove(HouseLocation.POLLNIVNEACH);
|
||||
break;
|
||||
case 18:
|
||||
configureMove(HouseLocation.RELLEKKA);
|
||||
break;
|
||||
case 19:
|
||||
configureMove(HouseLocation.BRIMHAVEN);
|
||||
break;
|
||||
case 20:
|
||||
configureMove(HouseLocation.YANILLE);
|
||||
break;
|
||||
|
||||
|
||||
//Redecorate House
|
||||
case 30:
|
||||
npc("Certainly. My magic can rebuild the house in a", "completely new style! What style would you like?");
|
||||
stage++;
|
||||
break;
|
||||
case 31:
|
||||
options("Basic wood (5,000)", "Basic stone (5,000)", "Whitewashed stone (7,500)", "Fremennik-style wood (10,000)", "More...");
|
||||
stage++;
|
||||
break;
|
||||
case 32:
|
||||
switch (buttonId) {
|
||||
case 1:
|
||||
player("Basic wood please!");
|
||||
stage = 35;
|
||||
break;
|
||||
case 2:
|
||||
player("Basic stone please!");
|
||||
stage = 36;
|
||||
break;
|
||||
case 3:
|
||||
player("Whitewashed stone please!");
|
||||
stage = 37;
|
||||
break;
|
||||
case 4:
|
||||
player("Fremennik-style wood please!");
|
||||
stage = 38;
|
||||
break;
|
||||
case 5:
|
||||
options("Tropical wood (15,000)", "Fancy stone (25,000)", "Previous...");
|
||||
stage = 33;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 33:
|
||||
switch (buttonId) {
|
||||
case 1:
|
||||
player("Tropical wood please!");
|
||||
stage = 39;
|
||||
break;
|
||||
case 2:
|
||||
player("Fancy stone please!");
|
||||
stage = 40;
|
||||
break;
|
||||
case 3:
|
||||
options("Basic wood (5,000)", "Basic stone (5,000)", "Whitewashed stone (7,500)", "Fremennik-style wood (10,000)", "More...");
|
||||
stage = 32;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 35:
|
||||
redecorate(HousingStyle.BASIC_WOOD);
|
||||
break;
|
||||
case 36:
|
||||
redecorate(HousingStyle.BASIC_STONE);
|
||||
break;
|
||||
case 37:
|
||||
redecorate(HousingStyle.WHITEWASHED_STONE);
|
||||
break;
|
||||
case 38:
|
||||
redecorate(HousingStyle.FREMENNIK_STYLE_WOOD);
|
||||
break;
|
||||
case 39:
|
||||
redecorate(HousingStyle.TROPICAL_WOOD);
|
||||
// Give your player-owned house a fancy stone or tropical wood<br><br>finish at the Varrock estate agent's
|
||||
if (player.getLocation().withinDistance(Location.create(3239, 3474, 0))) {
|
||||
player.getAchievementDiaryManager().finishTask(player, DiaryType.VARROCK, 2, 7);
|
||||
}
|
||||
break;
|
||||
case 40:
|
||||
redecorate(HousingStyle.FANCY_STONE);
|
||||
// Give your player-owned house a fancy stone or tropical wood<br><br>finish at the Varrock estate agent's
|
||||
if (player.getLocation().withinDistance(Location.create(3239, 3474, 0))) {
|
||||
player.getAchievementDiaryManager().finishTask(player, DiaryType.VARROCK, 2, 7);
|
||||
}
|
||||
break;
|
||||
|
||||
//Asking for a Construction Book
|
||||
case 50:
|
||||
if (!player.hasItem(BOOK)) {
|
||||
npc("Certainly.");
|
||||
player.getInventory().add(BOOK);
|
||||
stage = 150;
|
||||
break;
|
||||
} else {
|
||||
npc("You've already got one!");
|
||||
stage = 150;
|
||||
break;
|
||||
}
|
||||
|
||||
//More Information on houses
|
||||
case 60:
|
||||
npc("It all came out of the wizards' experiments. They found", "a way to fold space, so that they could pack many", "acres of land into an area only a foot across.");
|
||||
stage++;
|
||||
break;
|
||||
case 61:
|
||||
npc("They created several folded-space regions across", "" + GameWorld.getSettings().getName() + ". Each one contains hundreds of small plots", "where people can build houses.");
|
||||
stage++;
|
||||
break;
|
||||
case 62:
|
||||
player("Ah, so that's how everyone can have a house without", "them cluttering up the world!");
|
||||
stage++;
|
||||
break;
|
||||
case 63:
|
||||
npc("Quite. The wizards didn't want to get bogged down", "in the business side of things so they ", "hired me to sell the houses.");
|
||||
stage++;
|
||||
break;
|
||||
case 64:
|
||||
npc("There are various other people across " + GameWorld.getSettings().getName() + " who can", "help you furnish your house. You should start buying", "planks from the sawmill operator in Varrock.");
|
||||
stage = 150;
|
||||
break;
|
||||
|
||||
//Skillcape Dialogue for players without Level 99 Construction
|
||||
case 100:
|
||||
npc("As you may know, skillcapes are only available to masters", "in a skill. I have spent my entire life building houses and", "now I spend my time selling them! As a sign of my abilites", "I wear this Skillcape of Construction. If you ever have");
|
||||
stage = 101;
|
||||
break;
|
||||
case 101:
|
||||
npc("enough skill to build a demonic throne, come and talk to", "me and I'll sell you a skillcape like mine.");
|
||||
stage = 150;
|
||||
break;
|
||||
|
||||
//Skillcape Dialogue for players with Level 99 Construction
|
||||
case 102:
|
||||
interpreter.sendDialogues(npc, FacialExpression.JOLLY, "I see you have recently achieved 99 construction.", "Would you like to buy a cape for 99,0000 gp?");
|
||||
stage++;
|
||||
break;
|
||||
case 103:
|
||||
options("Yes, I'll pay the 99k", "No thanks, maybe later.");
|
||||
stage++;
|
||||
break;
|
||||
case 104:
|
||||
switch (buttonId) {
|
||||
case 1:
|
||||
if (Skillcape.purchase(player, Skills.CONSTRUCTION)) {
|
||||
npc("Here you go lad, enjoy!");
|
||||
}
|
||||
stage = 150;
|
||||
break;
|
||||
case 2:
|
||||
player("No thanks, maybe later.");
|
||||
stage = 150;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
//End
|
||||
case 150:
|
||||
end();
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the move.
|
||||
*
|
||||
* @param location The house location.
|
||||
*/
|
||||
private void configureMove(HouseLocation location) {
|
||||
if (location == player.getHouseManager().getLocation()) {
|
||||
npc("Your house is already there!");
|
||||
stage = 11;
|
||||
return;
|
||||
}
|
||||
if (location.getLevelRequirement() > player.getSkills().getStaticLevel(Skills.CONSTRUCTION)) {
|
||||
npc("I'm afraid you don't have a high enough construction", "level to move there. You need to have level " + location.getLevelRequirement() + ".");
|
||||
stage = 11;
|
||||
return;
|
||||
}
|
||||
if (!player.getInventory().contains(995, location.getCost())) {
|
||||
npc("Hmph. Come back when you have " + location.getCost() + " coins.");
|
||||
stage = 150;
|
||||
return;
|
||||
}
|
||||
player.getInventory().remove(new Item(995, location.getCost()));
|
||||
player.getHouseManager().setLocation(location);
|
||||
npc("Your house has been moved to " + location.getName() + ".");
|
||||
stage = 150;
|
||||
if (player.getLocation().withinDistance(Location.create(3239, 3474, 0))) {
|
||||
player.getAchievementDiaryManager().finishTask(player, DiaryType.VARROCK, 0, 11);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Redecorates the player's house.
|
||||
*
|
||||
* @param style The house style.
|
||||
*/
|
||||
private void redecorate(HousingStyle style) {
|
||||
boolean diary = false;//player.getAchievementDiaryManager().getDiary(DiaryType.FALADOR).isComplete(0);
|
||||
if (style == player.getHouseManager().getStyle()) {
|
||||
npc("Your house is already in that style!");
|
||||
stage = 31;
|
||||
return;
|
||||
}
|
||||
if (style.getLevel() > player.getSkills().getStaticLevel(Skills.CONSTRUCTION)) {
|
||||
npc("You need a Construction level of " + style.getLevel() + " to buy this style.");
|
||||
stage = 31;
|
||||
return;
|
||||
}
|
||||
if (!player.getInventory().contains(995, style.getCost()) && !diary) {
|
||||
npc("Hmph. Come back when you have " + style.getCost() + " coins.");
|
||||
stage = 150;
|
||||
return;
|
||||
}
|
||||
if (!diary) {
|
||||
player.getInventory().remove(new Item(995, style.getCost()));
|
||||
}
|
||||
player.getHouseManager().redecorate(style);
|
||||
npc("Your house has been redecorated.");
|
||||
if (player.getLocation().withinDistance(new Location(2982, 3370))) {
|
||||
//player.getAchievementDiaryManager().getDiary(DiaryType.FALADOR).updateTask(player, 1, 5, true);
|
||||
}
|
||||
stage = 150;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getIds() {
|
||||
return new int[]{4247};
|
||||
}
|
||||
}
|
||||
+469
@@ -0,0 +1,469 @@
|
||||
package core.game.node.entity.skill.construction
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.content.global.Skillcape
|
||||
import core.game.node.entity.npc.NPC
|
||||
import core.game.node.entity.player.Player
|
||||
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.world.GameWorld.settings
|
||||
import core.plugin.Initializable
|
||||
import core.tools.END_DIALOGUE
|
||||
import core.tools.Items
|
||||
import core.tools.START_DIALOGUE
|
||||
|
||||
/**
|
||||
* Represents the estate agent dialogue.
|
||||
*
|
||||
* @author Woah
|
||||
*/
|
||||
@Initializable
|
||||
class EstateAgentDialogue : DialoguePlugin {
|
||||
|
||||
/**
|
||||
* Constructs a new `EstateAgentDialogue` `Object`.
|
||||
*/
|
||||
constructor() {
|
||||
/**
|
||||
* empty.
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new `EstateAgentDialogue` `Object`.
|
||||
*
|
||||
* @param player the player.
|
||||
*/
|
||||
constructor(player: Player?) : super(player)
|
||||
|
||||
override fun newInstance(player: Player): DialoguePlugin {
|
||||
return EstateAgentDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any): Boolean {
|
||||
npc = args[0] as NPC
|
||||
npc("Hello. Welcome to the " + settings!!.name + " Housing Agency! What", "can I do for you?")
|
||||
stage = START_DIALOGUE
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
when (stage) {
|
||||
|
||||
START_DIALOGUE -> {
|
||||
if (player.houseManager.hasHouse()) {
|
||||
options(
|
||||
"Can you move my house please?",
|
||||
"Can you redecorate my house please?",
|
||||
"Could I have a Construction guidebook?",
|
||||
"Tell me about houses.",
|
||||
"Tell me about that skillcape you're wearing.")
|
||||
stage = 1
|
||||
} else {
|
||||
options("How can I get a house?", "Tell me about houses.")
|
||||
stage = 2
|
||||
}
|
||||
}
|
||||
|
||||
1 -> when (buttonId) {
|
||||
1 -> {
|
||||
player("Can you move my house please?")
|
||||
stage = 10
|
||||
}
|
||||
2 -> {
|
||||
player("Can you redecorate my house please?")
|
||||
stage = 30
|
||||
}
|
||||
3 -> {
|
||||
player("Could I have a Construction guidebook?")
|
||||
stage = 50
|
||||
}
|
||||
4 -> {
|
||||
player("Tell me about houses!")
|
||||
stage = 60
|
||||
}
|
||||
5 -> {
|
||||
player("Tell me about that skillcape you're wearing!")
|
||||
stage = if (Skillcape.isMaster(player, Skills.CONSTRUCTION)) 102 else 100
|
||||
}
|
||||
}
|
||||
|
||||
2 -> when (buttonId) {
|
||||
1 -> {
|
||||
player("How can I get a house?")
|
||||
stage = 3
|
||||
}
|
||||
2 -> {
|
||||
player("Tell me about houses.")
|
||||
stage = 60
|
||||
}
|
||||
}
|
||||
|
||||
3 -> {
|
||||
npc(
|
||||
"I can sell you a starting house in Rimmington for",
|
||||
"1000 coins. As you increase your construction skill you",
|
||||
"will be able to have your house moved to other areas",
|
||||
"and redecorated in other styles."
|
||||
)
|
||||
stage++
|
||||
}
|
||||
|
||||
4 -> {
|
||||
npc("Do you want to buy a starter house?")
|
||||
stage++
|
||||
}
|
||||
|
||||
5 -> {
|
||||
options("Yes please!", "No thanks.")
|
||||
stage++
|
||||
}
|
||||
|
||||
6 -> when (buttonId) {
|
||||
1 -> {
|
||||
player("Yes please!")
|
||||
stage = 7
|
||||
}
|
||||
2 -> {
|
||||
player("No thanks.")
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
}
|
||||
|
||||
7 -> {
|
||||
if (player.inventory.contains(995, 1000)) {
|
||||
player.inventory.remove(Item(995, 1000))
|
||||
player.houseManager.create(HouseLocation.RIMMINGTON)
|
||||
npc(
|
||||
"Thank you. Go through the Rimmington house portal",
|
||||
"and you will find your house ready for you to start",
|
||||
"building in it."
|
||||
)
|
||||
} else {
|
||||
npc("You don't have enough money to buy a house,", "come back when you can afford one.")
|
||||
}
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
|
||||
10 -> {
|
||||
npc("Certainly. Where would you like it moved to?")
|
||||
stage++
|
||||
}
|
||||
|
||||
11 -> {
|
||||
options(
|
||||
"Rimmington (5,000)",
|
||||
"Taverley (5,000)",
|
||||
"Pollnivneach (7,500)",
|
||||
"Rellekka (10,000)",
|
||||
"More..." )
|
||||
stage++
|
||||
}
|
||||
|
||||
12 -> when (buttonId) {
|
||||
1 -> {
|
||||
player("To Rimmington please!")
|
||||
stage = 15
|
||||
}
|
||||
2 -> {
|
||||
player("To Taverly please!")
|
||||
stage = 16
|
||||
}
|
||||
3 -> {
|
||||
player("To Pollnivneach please!")
|
||||
stage = 17
|
||||
}
|
||||
4 -> {
|
||||
player("To Rellekka please!")
|
||||
stage = 18
|
||||
}
|
||||
5 -> {
|
||||
options("Brimhaven (15,000)", "Yanille (25,000)", "...Previous", "Back")
|
||||
stage = 13
|
||||
}
|
||||
}
|
||||
|
||||
13 -> when (buttonId) {
|
||||
1 -> {
|
||||
player("To Brimhaven please!")
|
||||
stage = 19
|
||||
}
|
||||
2 -> {
|
||||
player("To Yanille please!")
|
||||
stage = 20
|
||||
}
|
||||
3 -> {
|
||||
options(
|
||||
"Rimmington (5,000)",
|
||||
"Taverley (5,000)",
|
||||
"Pollnivneach (7,500)",
|
||||
"Rellekka (10,000)",
|
||||
"More..."
|
||||
)
|
||||
stage = 12
|
||||
}
|
||||
}
|
||||
|
||||
15 -> configureMove(HouseLocation.RIMMINGTON)
|
||||
16 -> configureMove(HouseLocation.TAVERLY)
|
||||
17 -> configureMove(HouseLocation.POLLNIVNEACH)
|
||||
18 -> configureMove(HouseLocation.RELLEKKA)
|
||||
19 -> configureMove(HouseLocation.BRIMHAVEN)
|
||||
20 -> configureMove(HouseLocation.YANILLE)
|
||||
30 -> {
|
||||
npc(
|
||||
"Certainly. My magic can rebuild the house in a",
|
||||
"completely new style! What style would you like?" )
|
||||
stage++
|
||||
}
|
||||
31 -> {
|
||||
options(
|
||||
"Basic wood (5,000)",
|
||||
"Basic stone (5,000)",
|
||||
"Whitewashed stone (7,500)",
|
||||
"Fremennik-style wood (10,000)",
|
||||
"More..."
|
||||
)
|
||||
stage++
|
||||
}
|
||||
32 -> when (buttonId) {
|
||||
1 -> {
|
||||
player("Basic wood please!")
|
||||
stage = 35
|
||||
}
|
||||
2 -> {
|
||||
player("Basic stone please!")
|
||||
stage = 36
|
||||
}
|
||||
3 -> {
|
||||
player("Whitewashed stone please!")
|
||||
stage = 37
|
||||
}
|
||||
4 -> {
|
||||
player("Fremennik-style wood please!")
|
||||
stage = 38
|
||||
}
|
||||
5 -> {
|
||||
options("Tropical wood (15,000)", "Fancy stone (25,000)", "Previous...", "Back")
|
||||
stage = 33
|
||||
}
|
||||
}
|
||||
33 -> when (buttonId) {
|
||||
1 -> {
|
||||
player("Tropical wood please!")
|
||||
stage = 39
|
||||
}
|
||||
2 -> {
|
||||
player("Fancy stone please!")
|
||||
stage = 40
|
||||
}
|
||||
3 -> {
|
||||
options(
|
||||
"Basic wood (5,000)",
|
||||
"Basic stone (5,000)",
|
||||
"Whitewashed stone (7,500)",
|
||||
"Fremennik-style wood (10,000)",
|
||||
"More..."
|
||||
)
|
||||
stage = 32
|
||||
}
|
||||
}
|
||||
|
||||
35 -> redecorate(HousingStyle.BASIC_WOOD)
|
||||
36 -> redecorate(HousingStyle.BASIC_STONE)
|
||||
37 -> redecorate(HousingStyle.WHITEWASHED_STONE)
|
||||
38 -> redecorate(HousingStyle.FREMENNIK_STYLE_WOOD)
|
||||
39 -> redecorate(HousingStyle.TROPICAL_WOOD)
|
||||
40 -> redecorate(HousingStyle.FANCY_STONE)
|
||||
|
||||
50 -> {
|
||||
if (player.hasItem(CONSTRUCTION_GUIDE_8463)) {
|
||||
npc("You've already got one!")
|
||||
} else {
|
||||
npc("Certainly.")
|
||||
player.inventory.add(CONSTRUCTION_GUIDE_8463)
|
||||
}
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
60 -> {
|
||||
npc(
|
||||
"It all came out of the wizards' experiments. They found",
|
||||
"a way to fold space, so that they could pack many",
|
||||
"acres of land into an area only a foot across."
|
||||
)
|
||||
stage++
|
||||
}
|
||||
61 -> {
|
||||
npc(
|
||||
"They created several folded-space regions across",
|
||||
"" + settings!!.name + ". Each one contains hundreds of small plots",
|
||||
"where people can build houses."
|
||||
)
|
||||
stage++
|
||||
}
|
||||
62 -> {
|
||||
player("Ah, so that's how everyone can have a house without", "them cluttering up the world!")
|
||||
stage++
|
||||
}
|
||||
63 -> {
|
||||
npc(
|
||||
"Quite. The wizards didn't want to get bogged down",
|
||||
"in the business side of things so they ",
|
||||
"hired me to sell the houses."
|
||||
)
|
||||
stage++
|
||||
}
|
||||
64 -> {
|
||||
npc(
|
||||
"There are various other people across " + settings!!.name + " who can",
|
||||
"help you furnish your house. You should start buying",
|
||||
"planks from the sawmill operator in Varrock."
|
||||
)
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
100 -> {
|
||||
npc(
|
||||
"As you may know, skillcapes are only available to masters",
|
||||
"in a skill. I have spent my entire life building houses and",
|
||||
"now I spend my time selling them! As a sign of my abilites",
|
||||
"I wear this Skillcape of Construction. If you ever have"
|
||||
)
|
||||
stage = 101
|
||||
}
|
||||
101 -> {
|
||||
npc(
|
||||
"enough skill to build a demonic throne, come and talk to",
|
||||
"me and I'll sell you a skillcape like mine."
|
||||
)
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
102 -> {
|
||||
interpreter.sendDialogues(
|
||||
npc,
|
||||
FacialExpression.JOLLY,
|
||||
"I see you have recently achieved 99 construction.",
|
||||
"Would you like to buy a cape for 99,0000 gp?"
|
||||
)
|
||||
stage++
|
||||
}
|
||||
103 -> {
|
||||
options("Yes, I'll pay the 99k", "No thanks, maybe later.")
|
||||
stage++
|
||||
}
|
||||
104 -> when (buttonId) {
|
||||
1 -> {
|
||||
if (Skillcape.purchase(player, Skills.CONSTRUCTION)) {
|
||||
npc("Here you go lad, enjoy!")
|
||||
}
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
2 -> {
|
||||
player("No thanks, maybe later.")
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
}
|
||||
END_DIALOGUE -> end()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the move.
|
||||
*
|
||||
* @param location The house location.
|
||||
*/
|
||||
private fun configureMove(location: HouseLocation) {
|
||||
//Achievement completion checks
|
||||
val completedVarrockHouseMove = player.achievementDiaryManager.hasCompletedTask(DiaryType.VARROCK,0,11)
|
||||
when {
|
||||
//Player does not have required construction level
|
||||
!location.hasLevel(player) -> {
|
||||
npc(
|
||||
"I'm afraid you don't have a high enough construction",
|
||||
"level to move there. You need to have level " + location.levelRequirement + "." )
|
||||
stage = 11
|
||||
return
|
||||
}
|
||||
//Player's house location is already where they selected
|
||||
location == player.houseManager.location -> {
|
||||
npc("Your house is already there!")
|
||||
stage = 11
|
||||
return
|
||||
}
|
||||
//Player does not have enough coins to buy a house move
|
||||
!player.inventory.contains(Items.COINS_995, location.cost) -> {
|
||||
npc("Hmph. Come back when you have " + location.cost + " coins.")
|
||||
stage = END_DIALOGUE
|
||||
return
|
||||
}
|
||||
//Player meets all above requirements + check for achievement unlocks
|
||||
else -> {
|
||||
player.inventory.remove(Item(Items.COINS_995, location.cost))
|
||||
player.houseManager.location = location
|
||||
npc("Your house has been moved to " + location.getName() + ".")
|
||||
|
||||
if (player.location.isInRegion(REGION_VARROCK_NE) && !completedVarrockHouseMove) {
|
||||
|
||||
player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 0, 11)
|
||||
}
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Redecorates the player's house.
|
||||
*
|
||||
* @param style The house style.
|
||||
*/
|
||||
private fun redecorate(style: HousingStyle) {
|
||||
//Achievement completion checks
|
||||
val completedVarrockHouseRedecorate = player.achievementDiaryManager.hasCompletedTask(DiaryType.VARROCK,2,7)
|
||||
when {
|
||||
//Player does not have required construction level
|
||||
!style.hasLevel(player) -> {
|
||||
npc("You need a Construction level of " + style.level + " to buy this style.")
|
||||
stage = 31
|
||||
return
|
||||
}
|
||||
//Player's house location is already where they selected
|
||||
style == player.houseManager.style -> {
|
||||
npc("Your house is already in that style!")
|
||||
stage = 31
|
||||
return
|
||||
}
|
||||
|
||||
//Player does not have enough coins to buy a house move
|
||||
!player.inventory.contains(Items.COINS_995, style.cost) -> {
|
||||
npc("Hmph. Come back when you have " + style.cost + " coins.")
|
||||
stage = END_DIALOGUE
|
||||
return
|
||||
}
|
||||
|
||||
//Player meets all above requirements + check for achievement unlocks
|
||||
else -> {
|
||||
player.inventory.remove(Item(Items.COINS_995, style.cost))
|
||||
player.houseManager.redecorate(style)
|
||||
npc("Your house has been redecorated.")
|
||||
|
||||
// Give your player-owned house a fancy stone or tropical wood<br><br>finish at the Varrock estate agent's
|
||||
if (player.location.isInRegion(REGION_VARROCK_NE) && !completedVarrockHouseRedecorate) {
|
||||
player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 2, 7)
|
||||
}
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(4247)
|
||||
}
|
||||
|
||||
//Items
|
||||
private val CONSTRUCTION_GUIDE_8463 = Item(Items.CONSTRUCTION_GUIDE_8463, 1)
|
||||
|
||||
//Region to check
|
||||
private val REGION_VARROCK_NE = 12854
|
||||
}
|
||||
+16
-3
@@ -1,5 +1,8 @@
|
||||
package core.game.node.entity.skill.construction;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
||||
/**
|
||||
* The styles of houses.
|
||||
* @author Emperor
|
||||
@@ -17,7 +20,7 @@ public enum HousingStyle {
|
||||
/**
|
||||
* The level required.
|
||||
*/
|
||||
private final int level;
|
||||
private final int levelRequirement;
|
||||
|
||||
/**
|
||||
* The cost.
|
||||
@@ -54,6 +57,16 @@ public enum HousingStyle {
|
||||
*/
|
||||
private final Decoration window;
|
||||
|
||||
/**
|
||||
* Checks if the player has the level.
|
||||
*
|
||||
* @param player the player.
|
||||
* @return {@code True} if so.
|
||||
*/
|
||||
public boolean hasLevel(Player player) {
|
||||
return player.getSkills().getStaticLevel(Skills.CONSTRUCTION) >= levelRequirement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new {@code HousingStyle} {@code Object}
|
||||
* @param level The level required.
|
||||
@@ -63,7 +76,7 @@ public enum HousingStyle {
|
||||
* @param doorId The door object id used in this style.
|
||||
*/
|
||||
private HousingStyle(int level, int cost, int regionId, int plane, int doorId, int secondDoorId, int wallId, Decoration window) {
|
||||
this.level = level;
|
||||
this.levelRequirement = level;
|
||||
this.cost = cost;
|
||||
this.regionId = regionId;
|
||||
this.plane = plane;
|
||||
@@ -78,7 +91,7 @@ public enum HousingStyle {
|
||||
* @return the level
|
||||
*/
|
||||
public int getLevel() {
|
||||
return level;
|
||||
return levelRequirement;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -92,7 +92,7 @@ abstract class HunterTracking : OptionHandler(){
|
||||
val possibleTrails = ArrayList<TrailDefinition>()
|
||||
for(trail in linkingTrails){
|
||||
val invTrail = getTrailInverse(trail,false)
|
||||
if(invTrail.type == TrailType.TUNNEL && previousTrail.endLocation.withinDistanceProper(invTrail.startLocation,5) && !previousTrail.endLocation.equals(invTrail.startLocation) && previousTrail.offset != trail.offset){
|
||||
if(invTrail.type == TrailType.TUNNEL && previousTrail.endLocation.withinDistance(invTrail.startLocation,5) && !previousTrail.endLocation.equals(invTrail.startLocation) && previousTrail.offset != trail.offset){
|
||||
possibleTrails.add(trail)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,6 @@ import core.game.world.map.path.Path;
|
||||
import core.game.world.map.path.Pathfinder;
|
||||
import core.tools.RandomFunction;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/**
|
||||
* Represents a location on the world map.
|
||||
* @author Emperor
|
||||
@@ -132,24 +130,6 @@ public final class Location extends Node {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the location to a buffer.
|
||||
* @param buffer the buffer.
|
||||
* @return the buffer.
|
||||
*/
|
||||
public ByteBuffer save(ByteBuffer buffer) {
|
||||
return buffer.putShort((short) getX()).putShort((short) getY()).put((byte) getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a location from the buffer.
|
||||
* @param buffer the buffer.
|
||||
* @return the location.
|
||||
*/
|
||||
public static Location parse(ByteBuffer buffer) {
|
||||
return Location.create(buffer.getShort(), buffer.getShort(), buffer.get());
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this location is right next to the node (assuming the node is
|
||||
* size 1x1).
|
||||
@@ -176,6 +156,14 @@ public final class Location extends Node {
|
||||
return (x >> 6) << 8 | (y >> 6);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares the users region with the one given
|
||||
* @return True if user is in given region
|
||||
*/
|
||||
public boolean isInRegion(int region) {
|
||||
return getRegionId() == region;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the location incremented by the given coordinates.
|
||||
* @param dir The direction to transform this location.
|
||||
@@ -231,14 +219,6 @@ public final class Location extends Node {
|
||||
* @return If you're within the other distance.
|
||||
*/
|
||||
public boolean withinDistance(Location other, int dist){
|
||||
if (other.z != z) {
|
||||
return false;
|
||||
}
|
||||
int deltaX = other.x - x, deltaY = other.y - y;
|
||||
return deltaX <= dist && deltaX >= -dist && deltaY <= dist && deltaY >= -dist;
|
||||
}
|
||||
|
||||
public boolean withinDistanceProper(Location other, int dist){
|
||||
int a = (other.x - x);
|
||||
int b = (other.y - y);
|
||||
double product = Math.sqrt((a*a) + (b*b));
|
||||
|
||||
Reference in New Issue
Block a user