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