Construction can now be used to fix the ladder to the wilderness beacon

This commit is contained in:
GregF 2024-11-14 12:14:31 +00:00 committed by Ryan
parent e216a6366f
commit 7d79c9a82a
2 changed files with 61 additions and 17 deletions

View file

@ -26,27 +26,74 @@ class AFURepairClimbHandler : InteractionListener {
override fun defineListeners() { override fun defineListeners() {
on(repairIDs, IntType.SCENERY, "repair"){ player, _ -> on(repairIDs, IntType.SCENERY, "repair"){ player, _ ->
var rco: RepairClimbObject = RepairClimbObject.GWD if (hasRequirement(player, "All Fired Up")){
for(ent in RepairClimbObject.values()) if(ent.destinationDown?.withinDistance(player.location,2) == true || ent.destinationUp?.withinDistance(player.location,2) == true) rco = ent val rco: RepairClimbObject? = getClimbingObject(player)
repair(player,rco) repair(player,rco!!)
return@on true return@on true
}
return@on false
} }
on(climbIDs, IntType.SCENERY, "climb"){ player, node -> on(climbIDs, IntType.SCENERY, "climb"){ player, node ->
var rco: RepairClimbObject = RepairClimbObject.GWD val rco: RepairClimbObject? = getClimbingObject(player)
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)
climb(player,rco,node.location)
return@on true 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){ 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 skill = rco.levelRequirement?.first ?: 0
val level = rco.levelRequirement?.second ?: 0 val level = rco.levelRequirement?.second ?: 0
if(player.skills.getLevel(skill) < level){ if(player.skills.getLevel(skill) < level){
player.dialogueInterpreter.sendDialogue("You need level $level ${Skills.SKILL_NAME[skill]} for this.") player.dialogueInterpreter.sendDialogue("You need level $level ${Skills.SKILL_NAME[skill]} for this.")
return
} }
var requiresNeedle = false var requiresNeedle = false
@ -64,10 +111,7 @@ class AFURepairClimbHandler : InteractionListener {
requiresNeedle = true requiresNeedle = true
arrayOf(Item(Items.JUTE_FIBRE_5931,3)) arrayOf(Item(Items.JUTE_FIBRE_5931,3))
} }
else -> return
RepairClimbObject.TEMPLE -> {
arrayOf(Item(Items.IRON_BAR_2351,2))
}
} }
if(requiresNeedle){ if(requiresNeedle){
@ -75,7 +119,7 @@ class AFURepairClimbHandler : InteractionListener {
player.inventory.remove(*requiredItems) player.inventory.remove(*requiredItems)
if (Random().nextBoolean()) player.inventory.remove(Item(Items.NEEDLE_1733)) if (Random().nextBoolean()) player.inventory.remove(Item(Items.NEEDLE_1733))
} else { } 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 return
} }
} else { } else {
@ -89,11 +133,10 @@ class AFURepairClimbHandler : InteractionListener {
} }
player.inventory.remove(*requiredItems) player.inventory.remove(*requiredItems)
} else { } 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 return
} }
} }
setVarbit(player, rco.varbit, 1, true) setVarbit(player, rco.varbit, 1, true)
} }
@ -105,7 +148,7 @@ class AFURepairClimbHandler : InteractionListener {
DEATH_PLATEAU(5161,Location.create(2949, 3623, 0),Location.create(2954, 3623, 0), Pair(Skills.CONSTRUCTION,42)), 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)), BURTHORPE(5160,Location.create(2941, 3563, 0),Location.create(2934, 3563, 0),Pair(Skills.SMITHING,56)),
GWD(5163,null,null,Pair(Skills.CRAFTING,60)), 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?{ fun getOtherLocation(player: Player): Location?{
if(player.location == destinationDown) return destinationUp if(player.location == destinationDown) return destinationUp

View file

@ -195,5 +195,6 @@ enum class QuestRequirements (val questName: String, vararg val requirements: Re
SUMMERS_END ("Summer's End", QuestReq(SPIRIT_OF_SUMMER), SkillReq(Skills.FIREMAKING, 47), SkillReq(Skills.HUNTER, 35), SkillReq(Skills.MINING, 45), SkillReq(Skills.PRAYER, 55), SkillReq(Skills.SUMMONING, 23), SkillReq(Skills.WOODCUTTING, 37)), SUMMERS_END ("Summer's End", QuestReq(SPIRIT_OF_SUMMER), SkillReq(Skills.FIREMAKING, 47), SkillReq(Skills.HUNTER, 35), SkillReq(Skills.MINING, 45), SkillReq(Skills.PRAYER, 55), SkillReq(Skills.SUMMONING, 23), SkillReq(Skills.WOODCUTTING, 37)),
SEERGAZE ("Legacy of Seergaze", QuestReq(HALLOWVALE), SkillReq(Skills.AGILITY, 29), SkillReq(Skills.CONSTRUCTION, 20), SkillReq(Skills.CRAFTING, 47), SkillReq(Skills.FIREMAKING, 40), SkillReq(Skills.MAGIC, 49), SkillReq(Skills.MINING, 35), SkillReq(Skills.SLAYER, 31)), SEERGAZE ("Legacy of Seergaze", QuestReq(HALLOWVALE), SkillReq(Skills.AGILITY, 29), SkillReq(Skills.CONSTRUCTION, 20), SkillReq(Skills.CRAFTING, 47), SkillReq(Skills.FIREMAKING, 40), SkillReq(Skills.MAGIC, 49), SkillReq(Skills.MINING, 35), SkillReq(Skills.SLAYER, 31)),
SMOKING_KILLS ("Smoking Kills", QuestReq(RESTLESS_GHOST), QuestReq(ICTHLARIN), SkillReq(Skills.CRAFTING, 25), SkillReq(Skills.SLAYER, 35)), SMOKING_KILLS ("Smoking Kills", QuestReq(RESTLESS_GHOST), QuestReq(ICTHLARIN), SkillReq(Skills.CRAFTING, 25), SkillReq(Skills.SLAYER, 35)),
WHILE_GUTHIX_SLEEPS ("While Guthix Sleeps", SkillReq(Skills.SUMMONING, 23), SkillReq(Skills.HUNTER, 55), SkillReq(Skills.THIEVING, 60), SkillReq(Skills.DEFENCE, 65), SkillReq(Skills.FARMING, 65), SkillReq(Skills.HERBLORE, 65), SkillReq(Skills.MAGIC, 75), QuestReq(DEFENDER_VARROCK), QuestReq(DREAM_MENTOR), QuestReq(SAND), QuestReq(KINGS_RANSOM), QuestReq(LEGEND), QuestReq(MEP_2), QuestReq(PATH_GLOUPHRIE), QuestReq(RFD), QuestReq(SUMMERS_END), QuestReq(SWAN), QuestReq(TEARS_OF_GUTHIX), QuestReq(ZOGRE)) WHILE_GUTHIX_SLEEPS ("While Guthix Sleeps", SkillReq(Skills.SUMMONING, 23), SkillReq(Skills.HUNTER, 55), SkillReq(Skills.THIEVING, 60), SkillReq(Skills.DEFENCE, 65), SkillReq(Skills.FARMING, 65), SkillReq(Skills.HERBLORE, 65), SkillReq(Skills.MAGIC, 75), QuestReq(DEFENDER_VARROCK), QuestReq(DREAM_MENTOR), QuestReq(SAND), QuestReq(KINGS_RANSOM), QuestReq(LEGEND), QuestReq(MEP_2), QuestReq(PATH_GLOUPHRIE), QuestReq(RFD), QuestReq(SUMMERS_END), QuestReq(SWAN), QuestReq(TEARS_OF_GUTHIX), QuestReq(ZOGRE)),
ALL_FIRED_UP ("All Fired Up", QuestReq(PRIEST), SkillReq(Skills.FIREMAKING, 43))
} }