mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-09 16:45:44 -07:00
The Fremennik Trials Bugfixes
Fixed various issues with using items on objects Quest log now pluralises votes Draugen no longer spawns multiple times Added pet rock interactions
This commit is contained in:
parent
2d871e5000
commit
c32f5dfa93
8 changed files with 118 additions and 65 deletions
|
|
@ -1,11 +1,12 @@
|
||||||
package rs09.game.content.quest.members.thefremenniktrials
|
package rs09.game.content.quest.members.thefremenniktrials
|
||||||
|
|
||||||
|
import api.*
|
||||||
import core.game.node.entity.Entity
|
import core.game.node.entity.Entity
|
||||||
import core.game.node.entity.npc.NPC
|
import core.game.node.entity.npc.NPC
|
||||||
import core.game.node.entity.player.Player
|
import core.game.node.entity.player.Player
|
||||||
import core.game.node.item.Item
|
import core.game.node.item.Item
|
||||||
|
|
||||||
class Draugen(val player: Player?) : NPC(1279,player?.location?.transform(1,0,0)){
|
class Draugen(val player: Player) : NPC(1279,player.location?.transform(1,0,0)){
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
super.init()
|
super.init()
|
||||||
|
|
@ -17,13 +18,17 @@ class Draugen(val player: Player?) : NPC(1279,player?.location?.transform(1,0,0)
|
||||||
if(!properties.combatPulse.isAttacking){
|
if(!properties.combatPulse.isAttacking){
|
||||||
properties.combatPulse.attack(player)
|
properties.combatPulse.attack(player)
|
||||||
}
|
}
|
||||||
|
if (!player.isActive) {
|
||||||
|
removeAttribute(player, "fremtrials:draugen-spawned")
|
||||||
|
this.clear()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun finalizeDeath(killer: Entity?) {
|
override fun finalizeDeath(killer: Entity?) {
|
||||||
super.finalizeDeath(killer)
|
super.finalizeDeath(killer)
|
||||||
player?.setAttribute("/save:fremtrials:draugen-killed",true)
|
setAttribute(player, "/save:fremtrials:draugen-killed",true)
|
||||||
player?.removeAttribute("fremtrials:draugen-loc")
|
removeAttribute(player, "fremtrials:draugen-loc")
|
||||||
player?.inventory?.remove(Item(3696))
|
removeItem(player, Item(3696), Container.INVENTORY)
|
||||||
player?.inventory?.add(Item(3697))
|
addItem(player, 3697, 1, Container.INVENTORY)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -45,7 +45,12 @@ class FremennikTrials : Quest("Fremennik Trials",64,63,3,347,0,1,10){
|
||||||
line(player,"Thorvald the Warrior",line++,player.getAttribute("fremtrials:thorvald-vote",false))
|
line(player,"Thorvald the Warrior",line++,player.getAttribute("fremtrials:thorvald-vote",false))
|
||||||
line(player,"Sigmund the Merchant",line++,player.getAttribute("fremtrials:sigmund-vote",false))
|
line(player,"Sigmund the Merchant",line++,player.getAttribute("fremtrials:sigmund-vote",false))
|
||||||
line(player,"Peer the Seer",line++,player.getAttribute("fremtrials:peer-vote",false))
|
line(player,"Peer the Seer",line++,player.getAttribute("fremtrials:peer-vote",false))
|
||||||
line(player,"So far I have gotten ${player.getAttribute("fremtrials:votes",0)} votes.",line++)
|
val voteCount = player.getAttribute("fremtrials:votes",0);
|
||||||
|
var voteText = "${voteCount} votes";
|
||||||
|
if (voteCount === 1) {
|
||||||
|
voteText = "1 vote"
|
||||||
|
}
|
||||||
|
line(player,"So far I have gotten ${voteText}.",line++)
|
||||||
}
|
}
|
||||||
else if(stage == 100){
|
else if(stage == 100){
|
||||||
line(player,"I made my way to the far north of !!Kandarin?? and found",line++)
|
line(player,"I made my way to the far north of !!Kandarin?? and found",line++)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package rs09.game.content.quest.members.thefremenniktrials
|
package rs09.game.content.quest.members.thefremenniktrials
|
||||||
|
|
||||||
|
import api.*
|
||||||
import core.game.node.entity.Entity
|
import core.game.node.entity.Entity
|
||||||
import core.game.node.entity.player.Player
|
import core.game.node.entity.player.Player
|
||||||
import core.game.system.task.Pulse
|
import core.game.system.task.Pulse
|
||||||
|
|
@ -17,32 +18,37 @@ class HunterTalismanListener : InteractionListener {
|
||||||
override fun defineListeners() {
|
override fun defineListeners() {
|
||||||
|
|
||||||
on(TALISMAN,ITEM,"locate"){player,_ ->
|
on(TALISMAN,ITEM,"locate"){player,_ ->
|
||||||
var locationString = player.getAttribute("fremtrials:draugen-loc","none")
|
var locationString = getAttribute(player,"fremtrials:draugen-loc","none")
|
||||||
if(locationString == "none"){
|
if(locationString == "none"){
|
||||||
val newLoc = possibleLocations.random()
|
val newLoc = possibleLocations.random()
|
||||||
player.setAttribute("/save:fremtrials:draugen-loc","${newLoc.x},${newLoc.y}")
|
setAttribute(player, "/save:fremtrials:draugen-loc","${newLoc.x},${newLoc.y}")
|
||||||
locationString = "${newLoc.x},${newLoc.y}"
|
locationString = "${newLoc.x},${newLoc.y}"
|
||||||
}
|
}
|
||||||
val locationComponents = locationString?.split(",")
|
val locationComponents = locationString?.split(",")
|
||||||
val draugenLoc = Location(Integer.parseInt(locationComponents?.get(0)),Integer.parseInt(locationComponents?.get(1)))
|
val draugenLoc = Location(Integer.parseInt(locationComponents?.get(0)),Integer.parseInt(locationComponents?.get(1)))
|
||||||
|
|
||||||
if(player.location?.withinDistance(draugenLoc,5)!!){
|
if(player.location?.withinDistance(draugenLoc,5)!!){
|
||||||
player.dialogueInterpreter.sendDialogue("The Draugen is nearby, be careful!")
|
sendDialogue(player, "The Draugen is nearby, be careful!")
|
||||||
Pulser.submit(DraugenPulse(player))
|
Pulser.submit(DraugenPulse(player))
|
||||||
} else {
|
} else {
|
||||||
val neededDirection = draugenLoc.getDirection(player as Entity)
|
val neededDirection = draugenLoc.getDirection(player as Entity)
|
||||||
player.sendMessage("The talisman pulls you to the $neededDirection")
|
sendMessage(player, "The talisman pulls you to the $neededDirection")
|
||||||
}
|
}
|
||||||
return@on true
|
return@on true
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class DraugenPulse(val player: Player?) : Pulse(){
|
class DraugenPulse(val player: Player) : Pulse(){
|
||||||
var count = 0
|
var count = 0
|
||||||
override fun pulse(): Boolean {
|
override fun pulse(): Boolean {
|
||||||
when(count++){
|
when(count++){
|
||||||
3 -> Draugen(player).init().also { return true }
|
3 -> {
|
||||||
|
if(getAttribute(player, "fremtrials:draugen-spawned", false)) return true
|
||||||
|
Draugen(player).init()
|
||||||
|
setAttribute(player, "fremtrials:draugen-spawned", true)
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package rs09.game.content.quest.members.thefremenniktrials
|
package rs09.game.content.quest.members.thefremenniktrials
|
||||||
|
|
||||||
import api.addItem
|
import api.*
|
||||||
import api.removeItem
|
|
||||||
import core.game.content.dialogue.DialoguePlugin
|
import core.game.content.dialogue.DialoguePlugin
|
||||||
import core.game.content.dialogue.FacialExpression
|
import core.game.content.dialogue.FacialExpression
|
||||||
import core.game.node.entity.player.Player
|
import core.game.node.entity.player.Player
|
||||||
|
|
@ -103,8 +102,8 @@ class OlafTheBard(player: Player? = null) : DialoguePlugin(player){
|
||||||
40 -> npcl(FacialExpression.HAPPY,"You have a truly poetic soul! Anyone who can compose such a beautiful epic, and then perform it so flawlessly can only bring good to our clan!").also { stage++ }
|
40 -> npcl(FacialExpression.HAPPY,"You have a truly poetic soul! Anyone who can compose such a beautiful epic, and then perform it so flawlessly can only bring good to our clan!").also { stage++ }
|
||||||
41 -> playerl(FacialExpression.THINKING,"Erm... so that's a yes, then?").also { stage++ }
|
41 -> playerl(FacialExpression.THINKING,"Erm... so that's a yes, then?").also { stage++ }
|
||||||
42 -> npcl(FacialExpression.HAPPY,"Absolutely! We must collaborate together on a duet sometime, don't you think?").also {
|
42 -> npcl(FacialExpression.HAPPY,"Absolutely! We must collaborate together on a duet sometime, don't you think?").also {
|
||||||
player?.setAttribute("/save:fremtrials:olaf-vote",true)
|
setAttribute(player, "/save:fremtrials:olaf-vote",true)
|
||||||
player?.setAttribute("/save:fremtrials:votes",player.getAttribute("fremtrials:votes",0) + 1)
|
setAttribute(player, "/save:fremtrials:votes",getAttribute(player, "fremtrials:votes",0) + 1)
|
||||||
stage = 1000
|
stage = 1000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -309,7 +309,7 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@on true
|
return@on true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,TAP,*BUCKETS) { player, _, bucket ->
|
onUseWith(SCENERY, BUCKETS, TAP) { player, bucket, _ ->
|
||||||
when(bucket.id){
|
when(bucket.id){
|
||||||
3727 ->{
|
3727 ->{
|
||||||
removeItem(player,EMPTYBUCKET)
|
removeItem(player,EMPTYBUCKET)
|
||||||
|
|
@ -345,8 +345,8 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,TAP,*JUGS) { player, used, with ->
|
onUseWith(SCENERY, JUGS, TAP) { player, used, with ->
|
||||||
when(with.id){
|
when(used.id){
|
||||||
EMPTYJUG ->{
|
EMPTYJUG ->{
|
||||||
removeItem(player,EMPTYJUG)
|
removeItem(player,EMPTYJUG)
|
||||||
addItem(player,FULLJUG)
|
addItem(player,FULLJUG)
|
||||||
|
|
@ -369,8 +369,8 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,DRAIN,*BUCKETS) { player, used, with ->
|
onUseWith(SCENERY, BUCKETS, DRAIN) { player, used, with ->
|
||||||
when(with.id){
|
when(used.id){
|
||||||
EMPTYBUCKET ->{
|
EMPTYBUCKET ->{
|
||||||
sendMessage(player,"The bucket is already empty!")
|
sendMessage(player,"The bucket is already empty!")
|
||||||
}
|
}
|
||||||
|
|
@ -403,8 +403,8 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,DRAIN,*JUGS) { player, used, with ->
|
onUseWith(SCENERY, JUGS, DRAIN) { player, used, with ->
|
||||||
when(with.id){
|
when(used.id){
|
||||||
EMPTYJUG ->{
|
EMPTYJUG ->{
|
||||||
sendMessage(player,"The jug is already empty!")
|
sendMessage(player,"The jug is already empty!")
|
||||||
}
|
}
|
||||||
|
|
@ -434,7 +434,7 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,BALANCECHEST, FOURFIFTHBUCKET) { player, used, with ->
|
onUseWith(SCENERY, FOURFIFTHBUCKET, BALANCECHEST) { player, used, with ->
|
||||||
removeItem(player,FOURFIFTHBUCKET)
|
removeItem(player,FOURFIFTHBUCKET)
|
||||||
addItem(player,VASE)
|
addItem(player,VASE)
|
||||||
sendMessage(player,"You place the bucket on the scale.")
|
sendMessage(player,"You place the bucket on the scale.")
|
||||||
|
|
@ -443,8 +443,8 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,MURAL,*DISKS) { player, used, with ->
|
onUseWith(SCENERY, DISKS, MURAL) { player, used, with ->
|
||||||
when(with.id){
|
when(used.id){
|
||||||
REDDISK ->{
|
REDDISK ->{
|
||||||
if(player.getAttribute("olddiskplaced",false)){
|
if(player.getAttribute("olddiskplaced",false)){
|
||||||
removeItem(player,REDDISK)
|
removeItem(player,REDDISK)
|
||||||
|
|
@ -481,8 +481,8 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,BALANCECHEST,*BUCKETS) { player, used, with ->
|
onUseWith(SCENERY, BUCKETS, BALANCECHEST) { player, used, with ->
|
||||||
when(with.id){
|
when(used.id){
|
||||||
EMPTYBUCKET ->{
|
EMPTYBUCKET ->{
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
sendMessage(player,"You place the bucket on the scale")
|
sendMessage(player,"You place the bucket on the scale")
|
||||||
|
|
@ -519,8 +519,8 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,BALANCECHEST,*JUGS) { player, used, with ->
|
onUseWith(SCENERY, JUGS, BALANCECHEST) { player, used, with ->
|
||||||
when(with.id){
|
when(used.id){
|
||||||
EMPTYJUG ->{
|
EMPTYJUG ->{
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
sendMessage(player,"You place the jug on the scale")
|
sendMessage(player,"You place the jug on the scale")
|
||||||
|
|
@ -545,8 +545,8 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,FROZENTABLE,*BUCKETS) { player, used, with ->
|
onUseWith(SCENERY, BUCKETS, FROZENTABLE) { player, used, with ->
|
||||||
when(with.id){
|
when(used.id){
|
||||||
EMPTYBUCKET -> sendMessage(player,"Your empty bucket gets very cold on the icy table.")
|
EMPTYBUCKET -> sendMessage(player,"Your empty bucket gets very cold on the icy table.")
|
||||||
FULLBUCKET -> {
|
FULLBUCKET -> {
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
|
|
@ -558,8 +558,8 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,FROZENTABLE, *JUGS) { player, used, with ->
|
onUseWith(SCENERY, JUGS, FROZENTABLE) { player, used, with ->
|
||||||
when(with.id){
|
when(used.id){
|
||||||
EMPTYJUG -> sendMessage(player,"Your empty jug gets very cold on the icy table.")
|
EMPTYJUG -> sendMessage(player,"Your empty jug gets very cold on the icy table.")
|
||||||
FULLJUG -> {
|
FULLJUG -> {
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
|
|
@ -849,7 +849,7 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,TAP,VASE) { player, used, with ->
|
onUseWith(SCENERY, VASE, TAP) { player, used, with ->
|
||||||
removeItem(player,VASE)
|
removeItem(player,VASE)
|
||||||
addItem(player,FULLVASE)
|
addItem(player,FULLVASE)
|
||||||
sendMessage(player,"You fill the strange looking vase with water.")
|
sendMessage(player,"You fill the strange looking vase with water.")
|
||||||
|
|
@ -902,7 +902,7 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@on true
|
return@on true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,FROZENTABLE, FULLVASE) { player, used, with ->
|
onUseWith(SCENERY, FULLVASE, FROZENTABLE) { player, used, with ->
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
removeItem(player,VASE)
|
removeItem(player,VASE)
|
||||||
addItem(player,FROZENVASE)
|
addItem(player,FROZENVASE)
|
||||||
|
|
@ -910,7 +910,7 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,FROZENTABLE, SEALEDFULLVASE) { player, used, with ->
|
onUseWith(SCENERY, SEALEDFULLVASE, FROZENTABLE) { player, used, with ->
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
removeItem(player,SEALEDFULLVASE)
|
removeItem(player,SEALEDFULLVASE)
|
||||||
addItem(player,FROZENKEY)
|
addItem(player,FROZENKEY)
|
||||||
|
|
@ -919,7 +919,7 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,COOKINGRANGE, FROZENBUCKET) { player, used, with ->
|
onUseWith(SCENERY, FROZENBUCKET, COOKINGRANGE) { player, used, with ->
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
player.audioManager.send(Audio(2577, 1, 1))
|
player.audioManager.send(Audio(2577, 1, 1))
|
||||||
removeItem(player,FROZENBUCKET)
|
removeItem(player,FROZENBUCKET)
|
||||||
|
|
@ -928,7 +928,7 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,COOKINGRANGE, FROZENJUG) { player, used, with ->
|
onUseWith(SCENERY, FROZENJUG, COOKINGRANGE) { player, used, with ->
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
player.audioManager.send(Audio(2577, 1, 1))
|
player.audioManager.send(Audio(2577, 1, 1))
|
||||||
removeItem(player,FROZENJUG)
|
removeItem(player,FROZENJUG)
|
||||||
|
|
@ -937,7 +937,7 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,COOKINGRANGE, FROZENVASE) { player, used, with ->
|
onUseWith(SCENERY, FROZENVASE, COOKINGRANGE) { player, used, with ->
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
player.audioManager.send(Audio(2577, 1, 1))
|
player.audioManager.send(Audio(2577, 1, 1))
|
||||||
removeItem(player,FROZENVASE)
|
removeItem(player,FROZENVASE)
|
||||||
|
|
@ -946,7 +946,7 @@ class SeersHouseListeners : InteractionListener {
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,COOKINGRANGE, FROZENKEY) { player, used, with ->
|
onUseWith(SCENERY, FROZENKEY, COOKINGRANGE) { player, used, with ->
|
||||||
player.animate(Animation(883,Animator.Priority.HIGH))
|
player.animate(Animation(883,Animator.Priority.HIGH))
|
||||||
player.audioManager.send(Audio(2577, 1, 1))
|
player.audioManager.send(Audio(2577, 1, 1))
|
||||||
removeItem(player,FROZENKEY)
|
removeItem(player,FROZENKEY)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ import core.game.node.entity.player.Player
|
||||||
import core.game.node.entity.player.link.diary.DiaryType
|
import core.game.node.entity.player.link.diary.DiaryType
|
||||||
import core.game.node.entity.player.link.music.MusicEntry
|
import core.game.node.entity.player.link.music.MusicEntry
|
||||||
import core.game.node.entity.skill.Skills
|
import core.game.node.entity.skill.Skills
|
||||||
import core.game.node.entity.skill.gather.SkillingTool
|
|
||||||
import core.game.node.entity.skill.gather.woodcutting.WoodcuttingSkillPulse
|
import core.game.node.entity.skill.gather.woodcutting.WoodcuttingSkillPulse
|
||||||
import core.game.node.scenery.Scenery
|
import core.game.node.scenery.Scenery
|
||||||
import core.game.system.task.Pulse
|
import core.game.system.task.Pulse
|
||||||
|
|
@ -53,7 +52,6 @@ class TFTInteractionListeners : InteractionListener{
|
||||||
private val SHOPNPCS = intArrayOf(NPCs.YRSA_1301,NPCs.SKULGRIMEN_1303,NPCs.THORA_THE_BARKEEP_1300,NPCs.SIGMUND_THE_MERCHANT_1282,NPCs.FISH_MONGER_1315)
|
private val SHOPNPCS = intArrayOf(NPCs.YRSA_1301,NPCs.SKULGRIMEN_1303,NPCs.THORA_THE_BARKEEP_1300,NPCs.SIGMUND_THE_MERCHANT_1282,NPCs.FISH_MONGER_1315)
|
||||||
private val SPINNING_WHEEL_IDS = intArrayOf(2644,4309,8748,20365,21304,25824,26143,34497,36970,37476)
|
private val SPINNING_WHEEL_IDS = intArrayOf(2644,4309,8748,20365,21304,25824,26143,34497,36970,37476)
|
||||||
private val STEW_INGREDIENT_IDS = intArrayOf(Items.POTATO_1942,Items.ONION_1957,Items.CABBAGE_1965,Items.PET_ROCK_3695)
|
private val STEW_INGREDIENT_IDS = intArrayOf(Items.POTATO_1942,Items.ONION_1957,Items.CABBAGE_1965,Items.PET_ROCK_3695)
|
||||||
//private val FREMENNIK_HELMS = intArrayOf(Items.ARCHER_HELM_3749, Items.BERSERKER_HELM_3751, Items.WARRIOR_HELM_3753, Items.FARSEER_HELM_3755/*, Items.HELM_OF_NEITIZNOT_10828 Should this be included?*/)
|
|
||||||
|
|
||||||
override fun defineListeners() {
|
override fun defineListeners() {
|
||||||
onUseWith(NPC,BEER,WORKER){ player, beer, _ ->
|
onUseWith(NPC,BEER,WORKER){ player, beer, _ ->
|
||||||
|
|
@ -61,7 +59,7 @@ class TFTInteractionListeners : InteractionListener{
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,FISH_ALTAR,*FISH){ player, _, fish ->
|
onUseWith(SCENERY, FISH, FISH_ALTAR){ player,fish,_ ->
|
||||||
if(inInventory(player,Items.LYRE_3689) || inInventory(player,Items.ENCHANTED_LYRE_3690)) {
|
if(inInventory(player,Items.LYRE_3689) || inInventory(player,Items.ENCHANTED_LYRE_3690)) {
|
||||||
Pulser.submit(SpiritPulse(player, fish.id))
|
Pulser.submit(SpiritPulse(player, fish.id))
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -105,7 +103,7 @@ class TFTInteractionListeners : InteractionListener{
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,LALLIS_STEW,*STEW_INGREDIENT_IDS){player,_,stewIngredient ->
|
onUseWith(SCENERY, STEW_INGREDIENT_IDS, LALLIS_STEW){player,stewIngredient,_ ->
|
||||||
when(stewIngredient.id){
|
when(stewIngredient.id){
|
||||||
Items.ONION_1957 -> {
|
Items.ONION_1957 -> {
|
||||||
sendDialogue(player,"You added an onion to the stew")
|
sendDialogue(player,"You added an onion to the stew")
|
||||||
|
|
@ -131,7 +129,7 @@ class TFTInteractionListeners : InteractionListener{
|
||||||
return@onUseWith true
|
return@onUseWith true
|
||||||
}
|
}
|
||||||
|
|
||||||
onUseWith(SCENERY,SPINNING_WHEEL_IDS,GOLDEN_FLEECE){ player, _, _ ->
|
onUseWith(SCENERY,GOLDEN_FLEECE,*SPINNING_WHEEL_IDS){ player, _, _ ->
|
||||||
if(removeItem(player,GOLDEN_FLEECE)){
|
if(removeItem(player,GOLDEN_FLEECE)){
|
||||||
addItem(player,GOLDEN_WOOL)
|
addItem(player,GOLDEN_WOOL)
|
||||||
animate(player,896)
|
animate(player,896)
|
||||||
|
|
@ -306,7 +304,7 @@ class TFTInteractionListeners : InteractionListener{
|
||||||
if (i == null) {
|
if (i == null) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if (i.name.toLowerCase().contains(" rune")) {
|
if (i.name.lowercase().contains(" rune")) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
var slot: Int = i.definition.getConfiguration(ItemConfigParser.EQUIP_SLOT, -1)
|
var slot: Int = i.definition.getConfiguration(ItemConfigParser.EQUIP_SLOT, -1)
|
||||||
|
|
@ -350,21 +348,6 @@ class TFTInteractionListeners : InteractionListener{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ChoppingPulse(val player: Player) : Pulse() {
|
|
||||||
var counter = 0
|
|
||||||
override fun pulse(): Boolean {
|
|
||||||
when(counter++){
|
|
||||||
0 -> player.animator.animate(SkillingTool.getHatchet(player).animation)
|
|
||||||
4 -> {
|
|
||||||
player.animator.reset()
|
|
||||||
addItem(player,Items.BRANCH_3692)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class LyreConcertPulse(val player: Player, val Lyre: Int) : Pulse(){
|
class LyreConcertPulse(val player: Player, val Lyre: Int) : Pulse(){
|
||||||
val GENERIC_LYRICS = arrayOf(
|
val GENERIC_LYRICS = arrayOf(
|
||||||
"${player.name?.capitalize()} is my name,",
|
"${player.name?.capitalize()} is my name,",
|
||||||
|
|
@ -390,7 +373,6 @@ class TFTInteractionListeners : InteractionListener{
|
||||||
"I will simply tell you this:",
|
"I will simply tell you this:",
|
||||||
"I've joined the Legends' Guild!"
|
"I've joined the Legends' Guild!"
|
||||||
)
|
)
|
||||||
val SKILLS = mutableListOf(Skills.SKILL_NAME)
|
|
||||||
var counter = 0
|
var counter = 0
|
||||||
val questPoints = getQP(player)
|
val questPoints = getQP(player)
|
||||||
val champGuild = player.achievementDiaryManager?.hasCompletedTask(DiaryType.VARROCK, 1, 1)?: false
|
val champGuild = player.achievementDiaryManager?.hasCompletedTask(DiaryType.VARROCK, 1, 1)?: false
|
||||||
|
|
@ -444,7 +426,7 @@ class TFTInteractionListeners : InteractionListener{
|
||||||
player.musicPlayer.play(MusicEntry.forId(164))
|
player.musicPlayer.play(MusicEntry.forId(164))
|
||||||
sendChat(player,LYRICS[3])
|
sendChat(player,LYRICS[3])
|
||||||
}
|
}
|
||||||
12 ->{
|
14 ->{
|
||||||
setAttribute(player,"/save:lyreConcertPlayed",true)
|
setAttribute(player,"/save:lyreConcertPlayed",true)
|
||||||
player.removeAttribute("LyreEnchanted")
|
player.removeAttribute("LyreEnchanted")
|
||||||
if(removeItem(player,Lyre))
|
if(removeItem(player,Lyre))
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ class YrsaDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
else if(player?.getAttribute("sigmundreturning",false) == true){
|
else if(player?.getAttribute("sigmundreturning",false) == true){
|
||||||
playerl(FacialExpression.ASKING,"I have this trade item but I can't remember who it's for")
|
playerl(FacialExpression.ASKING,"I have this trade item but I can't remember who it's for.")
|
||||||
stage = 25
|
stage = 25
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
56
Server/src/main/kotlin/rs09/game/interaction/item/PetRock.kt
Normal file
56
Server/src/main/kotlin/rs09/game/interaction/item/PetRock.kt
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
package rs09.game.interaction.item
|
||||||
|
|
||||||
|
import api.openDialogue
|
||||||
|
import core.game.content.dialogue.FacialExpression
|
||||||
|
import org.rs09.consts.Items
|
||||||
|
import rs09.game.content.dialogue.DialogueFile
|
||||||
|
import rs09.game.interaction.InteractionListener
|
||||||
|
import rs09.tools.END_DIALOGUE
|
||||||
|
|
||||||
|
class PetRockPlugin : InteractionListener {
|
||||||
|
override fun defineListeners() {
|
||||||
|
on(Items.PET_ROCK_3695, ITEM, "interact"){ player, _ ->
|
||||||
|
openDialogue(player, PetRockDialogue())
|
||||||
|
return@on true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PetRockDialogue() : DialogueFile() {
|
||||||
|
override fun handle(componentID: Int, buttonID: Int) {
|
||||||
|
when(stage) {
|
||||||
|
0 -> options("Talk", "Stroke", "Feed", "Fetch", "Stay").also { stage++ }
|
||||||
|
1 -> {
|
||||||
|
when(buttonID) {
|
||||||
|
1 -> {
|
||||||
|
playerl(FacialExpression.FRIENDLY, "Who's a good rock then? Yes you are... You're such a good rock... ooga booga googa.")
|
||||||
|
player!!.sendMessage("Your rock seems a little happier.")
|
||||||
|
stage = END_DIALOGUE
|
||||||
|
}
|
||||||
|
2 -> {
|
||||||
|
player!!.sendMessage("You stroke your pet rock.")
|
||||||
|
// Missing animation
|
||||||
|
player!!.sendMessage("Your rock seems much happier.")
|
||||||
|
end()
|
||||||
|
}
|
||||||
|
3 -> {
|
||||||
|
player!!.sendMessage("You try and feed the rock.")
|
||||||
|
player!!.sendMessage("Your rock doesn't seem hungry.")
|
||||||
|
end()
|
||||||
|
}
|
||||||
|
4 -> {
|
||||||
|
playerl(FacialExpression.FRIENDLY, "Want to fetch the stick, rock? Of course you do...")
|
||||||
|
// Missing animation
|
||||||
|
stage = END_DIALOGUE
|
||||||
|
}
|
||||||
|
5 -> {
|
||||||
|
playerl(FacialExpression.FRIENDLY, "Be a good rock...")
|
||||||
|
player!!.sendMessage("You wait a few seconds and pick your rock back up and pet it.")
|
||||||
|
// Missing animation
|
||||||
|
stage = END_DIALOGUE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue