Files
2009scape/Server/src/main/content/global/skill/farming/FarmerPayOptionDialogue.kt
T
2026-04-02 01:33:41 +11:00

153 lines
9.7 KiB
Kotlin

package content.global.skill.farming
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 FarmerPayOptionDialogue(val patch: Patch, val quickPay: Boolean = false): DialogueFile() {
var item: Item? = null
var itemSecondary: Item? = null
var itemTertiary: Item? = null
fun hasAllItems(): Boolean {
return (inInventory(player!!, item!!.id, item!!.amount) || inInventory(player!!, note(item!!).id, note(item!!).amount))
&& (inInventory(player!!, itemSecondary!!.id, itemSecondary!!.amount) || inInventory(player!!, note(itemSecondary!!).id, note(itemSecondary!!).amount))
&& (inInventory(player!!, itemTertiary!!.id, itemTertiary!!.amount) || inInventory(player!!, note(itemTertiary!!).id, note(itemTertiary!!).amount))
}
override fun handle(componentID: Int, buttonID: Int) {
when (stage) {
START_DIALOGUE -> {
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 = patch.plantable?.protectionItem
itemSecondary = patch.plantable?.protectionItemSecondary
itemTertiary = patch.plantable?.protectionItemTertiary
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 (patch.patch.type == PatchType.SPIRIT_TREE_PATCH && quickPay
&& !hasAllItems()) {
val amount = if (item?.amount == 1) "one" else item?.amount
npc(FacialExpression.HAPPY, "I want $amount $protectionText, one monkey bar,", "and one ground tooth for that.")
stage = 200
} else if (patch.patch.type == PatchType.CALQUAT_TREE_PATCH && getQuestStage(player!!, Quests.JUNGLE_POTION) < 100) {
npc("Sorry, I won't protect that.").also { stage = END_DIALOGUE } // Cannot confirm authenticity of this line just that there should be a rejection here
} 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 (patch.patch.type == PatchType.SPIRIT_TREE_PATCH && quickPay) {
showTopics(
//Found a 2011 source for quick-pay, but no earlier dialogue sources (https://www.youtube.com/watch?v=RdIcNH50v7I)
Topic("Yes", 20, true),
Topic("No", END_DIALOGUE, true),
title = "Pay the gnome?"
)
} 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 if (patch.patch.type == PatchType.SPIRIT_TREE_PATCH) {
val amount = if (item?.amount == 1) "one" else item?.amount
npc("If you like, but I want $amount $protectionText,", "one monkey bar, and one ground tooth for that.")
stage++
} else {
val amount = if (item?.amount == 1) "one" else item?.amount
npc("If you like, but I want $amount $protectionText for that.")
stage++
}
}
}
1 -> {
if (patch.patch.type == PatchType.SPIRIT_TREE_PATCH && !hasAllItems()) {
player("I'm afraid I don't have any of those at the moment.").also { stage = 10 }
} else 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 {
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 -> {
if (patch.patch.type == PatchType.SPIRIT_TREE_PATCH
&& (removeItem(player!!, item) || removeItem(player!!, note(item!!)))
&& (removeItem(player!!, itemSecondary) || removeItem(player!!, note(itemSecondary!!)))
&& (removeItem(player!!, itemTertiary) || removeItem(player!!, note(itemTertiary!!)))) {
patch.protectionPaid = true
npc("That'll do nicely, ${if (player!!.isMale) "sir" else "madam"}. Leave it with me - I'll make sure", "that tree grows up good and strong.").also { stage = END_DIALOGUE }
} else if (patch.patch.type != PatchType.SPIRIT_TREE_PATCH
&& 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
}
}
}
}
}