Files
2009scape/Server/src/main/content/global/skill/construction/EstateAgentDialogue.kt
T
Ceikry a100affda2 Repository reorganisation
Unified kotlin and java into just src/main
Unified the rs09 and core packages
Took all content out of the core package, and placed it into the new content package
Reorganised all source code relating to content to be easier to find and explore
2023-01-26 13:59:28 +00:00

466 lines
16 KiB
Kotlin

package content.global.skill.construction
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.plugin.Initializable
import org.rs09.consts.Items
import core.game.world.GameWorld.settings
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
/**
* Represents the estate agent dialogue.
*
* @author Woah
*/
@Initializable
class EstateAgentDialogue : core.game.dialogue.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): core.game.dialogue.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 (core.game.global.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.createNewHouseAt(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,
core.game.dialogue.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 (core.game.global.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
}