mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2026-08-01 14:39:13 -06:00
Constlib
This commit is contained in:
parent
9adb43b5ca
commit
59159111cf
2 changed files with 33 additions and 29 deletions
|
|
@ -7,11 +7,12 @@ import core.api.*
|
|||
import core.game.interaction.InteractionListener
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.entity.skill.Skills
|
||||
import org.rs09.consts.Animations
|
||||
import org.rs09.consts.Items
|
||||
import org.rs09.consts.Scenery
|
||||
|
||||
/**
|
||||
* Listens for use of the easel furniture pieces in a POH, with which players may make heraldic items.
|
||||
* Handles easel type furniture in a POH, with which players may make heraldic items.
|
||||
* @author Bishop
|
||||
*/
|
||||
|
||||
|
|
@ -22,27 +23,19 @@ class EaselListener : InteractionListener {
|
|||
Scenery.PAINTING_STAND_13717,
|
||||
Scenery.BANNER_MAKING_STAND_13718
|
||||
)
|
||||
private val buttonsToProducts = mapOf(
|
||||
2 to HeraldicProduct.STEEL_HELM,
|
||||
3 to HeraldicProduct.RUNE_HELM,
|
||||
4 to HeraldicProduct.STEEL_SHIELD,
|
||||
5 to HeraldicProduct.RUNE_SHIELD,
|
||||
6 to HeraldicProduct.BANNER
|
||||
)
|
||||
private val heraldryAnimation = 3654
|
||||
|
||||
private fun checkRequirements(player: Player, product: HeraldicProduct) : Boolean {
|
||||
when {
|
||||
(!getAttribute(player, SirReniteeDialogueFile.attributeCrest, false) || player.houseManager.crest == CrestType.NULL) -> {
|
||||
(!getAttribute(player, SirReniteeDialogueFile.ATTRIBUTE_CREST, false) || player.houseManager.crest == CrestType.NULL) -> {
|
||||
sendDialogue(player, "You need a crest to make heraldic items.") // Placeholder
|
||||
return false
|
||||
}
|
||||
(!inInventory(player, product.primaryMaterialId)) -> {
|
||||
sendDialogue(player, "You need a ${product.primaryMaterialId.asItem().name.toLowerCase()} to make this.")
|
||||
sendDialogue(player, "You need a ${product.primaryMaterialId.asItem().name.lowercase()} to make this.")
|
||||
return false
|
||||
}
|
||||
(product.secondaryMaterialId != null && !inInventory(player, product.secondaryMaterialId)) -> {
|
||||
sendDialogue(player, "You need a ${product.secondaryMaterialId.asItem().name.toLowerCase()} to make this.")
|
||||
sendDialogue(player, "You need a ${product.secondaryMaterialId.asItem().name.lowercase()} to make this.")
|
||||
return false
|
||||
}
|
||||
(!hasLevelDyn(player, Skills.CONSTRUCTION, product.constructionReq)) -> {
|
||||
|
|
@ -65,7 +58,7 @@ class EaselListener : InteractionListener {
|
|||
if (product.secondaryMaterialId == null || removeItem(player, product.secondaryMaterialId)) {
|
||||
addItemOrDrop(player, product.productForCrest(crest))
|
||||
rewardXP(player, Skills.CRAFTING, product.craftingXp)
|
||||
animate(player, heraldryAnimation)
|
||||
animate(player, Animations.HUMAN_CRAFT_POH_CREST_3654)
|
||||
when (product) {
|
||||
HeraldicProduct.STEEL_HELM, HeraldicProduct.RUNE_HELM ->
|
||||
sendMessage(player, "You make a helmet in your colours.")
|
||||
|
|
@ -90,6 +83,13 @@ class EaselListener : InteractionListener {
|
|||
else ->
|
||||
return@on false
|
||||
}
|
||||
val buttonsToProducts = mapOf(
|
||||
2 to HeraldicProduct.STEEL_HELM,
|
||||
3 to HeraldicProduct.RUNE_HELM,
|
||||
4 to HeraldicProduct.STEEL_SHIELD,
|
||||
5 to HeraldicProduct.RUNE_SHIELD,
|
||||
6 to HeraldicProduct.BANNER
|
||||
)
|
||||
sendDialogueOptions(player, "What do you want to make?", *options)
|
||||
addDialogueAction(player) { player, button ->
|
||||
if (checkRequirements(player, buttonsToProducts[button] ?: return@addDialogueAction)) {
|
||||
|
|
@ -99,6 +99,7 @@ class EaselListener : InteractionListener {
|
|||
}
|
||||
return@on true
|
||||
}
|
||||
|
||||
onUseWith(SCENERY, Items.BOLT_OF_CLOTH_8790, Scenery.BANNER_MAKING_STAND_13718) { player, _, _ ->
|
||||
if (checkRequirements(player, HeraldicProduct.BANNER)) {
|
||||
giveProduct(player, HeraldicProduct.BANNER)
|
||||
|
|
@ -106,4 +107,5 @@ class EaselListener : InteractionListener {
|
|||
return@onUseWith true
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -37,15 +37,15 @@ class SirReniteeDialogue : InteractionListener {
|
|||
class SirReniteeDialogueFile : DialogueLabeller() {
|
||||
|
||||
companion object {
|
||||
const val attributeCrest = "/save:sir-renitee-assigned-crest"
|
||||
const val attributeTempCrest = "sir-renitee-temp-crest"
|
||||
const val attributeTempPainting = "sir-renitee-temp-painting"
|
||||
const val ATTRIBUTE_CREST = "/save:sir-renitee-assigned-crest"
|
||||
private const val ATTRIBUTE_CREST_TEMP = "sir-renitee-temp-crest"
|
||||
private const val ATTRIBUTE_PAINTING_TEMP = "sir-renitee-temp-painting"
|
||||
}
|
||||
|
||||
private fun selectCrest(crestType: CrestType, labelName: String) {
|
||||
label(labelName)
|
||||
exec { player, _ ->
|
||||
setAttribute(player, attributeTempCrest, crestType)
|
||||
setAttribute(player, ATTRIBUTE_CREST_TEMP, crestType)
|
||||
loadLabel(player, "crest_buy")
|
||||
}
|
||||
}
|
||||
|
|
@ -53,7 +53,7 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
private fun selectPainting(painting: PaintingType, labelName: String) {
|
||||
label(labelName)
|
||||
exec { player, _ ->
|
||||
setAttribute(player, attributeTempPainting, painting)
|
||||
setAttribute(player, ATTRIBUTE_PAINTING_TEMP, painting)
|
||||
loadLabel(player, "painting_buy")
|
||||
}
|
||||
}
|
||||
|
|
@ -107,12 +107,12 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
|
||||
label("has_construction_level")
|
||||
exec { player, _ ->
|
||||
if (getAttribute(player, attributeCrest, false)) {
|
||||
if (getAttribute(player, ATTRIBUTE_CREST, false)) {
|
||||
loadLabel(player, "show_existing_crest")
|
||||
} else {
|
||||
val crests = arrayOf(CrestType.VARROCK, CrestType.ASGARNIA, CrestType.KANDARIN, CrestType.MISTHALIN)
|
||||
player.houseManager.crest = crests[RandomFunction.random(4)]
|
||||
setAttribute(player, attributeCrest, true)
|
||||
setAttribute(player, ATTRIBUTE_CREST, true)
|
||||
loadLabel(player, "show_new_crest")
|
||||
}
|
||||
if (!player.achievementDiaryManager.getDiary(DiaryType.FALADOR).isComplete(0, 4)) {
|
||||
|
|
@ -214,7 +214,7 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
|
||||
label("crest_buy")
|
||||
exec { player, _ ->
|
||||
val crest = getAttribute(player, attributeTempCrest, CrestType.ASGARNIA)
|
||||
val crest = getAttribute(player, ATTRIBUTE_CREST_TEMP, CrestType.ASGARNIA)
|
||||
if (crest.eligible(player) && removeItem(player, Item(Items.COINS_995, crest.cost))) {
|
||||
player.houseManager.crest = crest
|
||||
if (crest == CrestType.SARADOMIN && !player.achievementDiaryManager.getDiary(DiaryType.FALADOR).isComplete(2, 1)) {
|
||||
|
|
@ -228,7 +228,7 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
|
||||
label("crest_buy_ok")
|
||||
manual { player, _ ->
|
||||
val crest = getAttribute(player, attributeTempCrest, CrestType.ASGARNIA)
|
||||
val crest = getAttribute(player, ATTRIBUTE_CREST_TEMP, CrestType.ASGARNIA)
|
||||
val expression = if (crest == CrestType.SKULL) {
|
||||
ChatAnim.AFRAID
|
||||
} else {
|
||||
|
|
@ -283,7 +283,7 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
|
||||
label("crest_buy_fail")
|
||||
manual { player, _ ->
|
||||
val crest = getAttribute(player, attributeTempCrest, CrestType.ASGARNIA)
|
||||
val crest = getAttribute(player, ATTRIBUTE_CREST_TEMP, CrestType.ASGARNIA)
|
||||
val messages = when (crest) {
|
||||
CrestType.ARRAV ->
|
||||
arrayOf("But that legendary shield is still lost! I don't think",
|
||||
|
|
@ -412,7 +412,7 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
|
||||
label("painting_buy")
|
||||
exec { player, _ ->
|
||||
val painting = getAttribute(player, attributeTempPainting, PaintingType.MAP_SMALL)
|
||||
val painting = getAttribute(player, ATTRIBUTE_PAINTING_TEMP, PaintingType.MAP_SMALL)
|
||||
if (painting.eligible(player)) {
|
||||
loadLabel(player, "painting_show_cost")
|
||||
} else {
|
||||
|
|
@ -422,11 +422,11 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
|
||||
label("painting_show_cost")
|
||||
manual { player, _ ->
|
||||
val painting = getAttribute(player, attributeTempPainting, PaintingType.MAP_SMALL)
|
||||
val painting = getAttribute(player, ATTRIBUTE_PAINTING_TEMP, PaintingType.MAP_SMALL)
|
||||
interpreter!!.sendDialogues(npc, ChatAnim.NEUTRAL, "That will be, mmm, ${painting.cost} coins please.")
|
||||
}
|
||||
exec { player, _ ->
|
||||
val painting = getAttribute(player, attributeTempPainting, PaintingType.MAP_SMALL)
|
||||
val painting = getAttribute(player, ATTRIBUTE_PAINTING_TEMP, PaintingType.MAP_SMALL)
|
||||
if (inInventory(player, Items.COINS_995, painting.cost)) {
|
||||
loadLabel(player, "painting_buy_confirm")
|
||||
} else {
|
||||
|
|
@ -442,7 +442,7 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
|
||||
label("painting_buy_fail")
|
||||
manual { player, _ ->
|
||||
val painting = getAttribute(player, attributeTempPainting, PaintingType.MAP_SMALL)
|
||||
val painting = getAttribute(player, ATTRIBUTE_PAINTING_TEMP, PaintingType.MAP_SMALL)
|
||||
val messages = when (painting) {
|
||||
PaintingType.ARTHUR ->
|
||||
arrayOf("Do you have, mmm, a connection with King Arthur? He",
|
||||
|
|
@ -480,7 +480,7 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
interpreter!!.sendDialogues(npc, ChatAnim.NEUTRAL, *messages)
|
||||
}
|
||||
manual { player, _ ->
|
||||
val painting = getAttribute(player, attributeTempPainting, PaintingType.MAP_SMALL)
|
||||
val painting = getAttribute(player, ATTRIBUTE_PAINTING_TEMP, PaintingType.MAP_SMALL)
|
||||
val messages = when (painting) {
|
||||
PaintingType.ARTHUR ->
|
||||
arrayOf("To buy the portrait of King Arthur you must have",
|
||||
|
|
@ -524,7 +524,7 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
|
||||
label("painting_accept")
|
||||
exec { player, _ ->
|
||||
val painting = getAttribute(player, attributeTempPainting, PaintingType.MAP_SMALL)
|
||||
val painting = getAttribute(player, ATTRIBUTE_PAINTING_TEMP, PaintingType.MAP_SMALL)
|
||||
if (removeItem(player, Item(Items.COINS_995, painting.cost))) {
|
||||
addItemOrDrop(player, painting.paintingId)
|
||||
}
|
||||
|
|
@ -544,5 +544,7 @@ class SirReniteeDialogueFile : DialogueLabeller() {
|
|||
DialogueOption("map", "Yes - a map", "A map please.", expression = ChatAnim.NEUTRAL),
|
||||
DialogueOption("nothing", "No, thanks.", expression = ChatAnim.NEUTRAL),
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue