Various bugfixes

This commit is contained in:
Ceikry
2021-03-16 21:53:58 -05:00
parent 96f38e4a0c
commit 85f4c973f5
9 changed files with 106 additions and 87 deletions
@@ -1,46 +1,23 @@
package rs09.game.content.ame.events
import core.game.component.Component
import core.game.content.quest.PluginInteraction
import core.game.content.quest.PluginInteractionManager
import core.game.interaction.DestinationFlag
import core.game.interaction.MovementPulse
import core.game.interaction.Option
import core.game.node.entity.npc.NPC
import core.game.node.entity.player.Player
import rs09.game.world.GameWorld
import core.plugin.Initializable
import core.plugin.Plugin
import org.rs09.consts.NPCs
import rs09.game.interaction.InteractionListener
@Initializable
class SandwichLadyHandler : PluginInteraction(3117){
override fun handle(player: Player?, npc: NPC?, option: Option?): Boolean {
class MoveTo : MovementPulse(player,DestinationFlag.ENTITY.getDestination(player,npc)){
override fun pulse(): Boolean {
if(player?.antiMacroHandler?.hasEvent()!! && player.antiMacroHandler.event.name == "Sandwich Lady") {
player.interfaceManager?.open(Component(297))
npc?.clear()
} else {
player.sendMessage("She isn't interested in you.")
}
return true
class SandwichLadyHandler : InteractionListener(){
val SANDWICH_LADY = NPCs.SANDWICH_LADY_3117
override fun defineListeners() {
on(NPC,SANDWICH_LADY,"talk-to"){player, node ->
if(player.antiMacroHandler?.hasEvent()!! && player.antiMacroHandler.event.name == "Sandwich Lady") {
player.interfaceManager?.open(Component(297))
node.asNpc().clear()
} else {
player.sendMessage("She isn't interested in you.")
}
return@on true
}
if(option?.name?.toLowerCase() == "talk-to"){
GameWorld.submit(MoveTo())
return true
}
return false
}
override fun fireEvent(identifier: String?, vararg args: Any?): Any {
return Unit
}
override fun newInstance(arg: Any?): Plugin<Any> {
PluginInteractionManager.register(this,PluginInteractionManager.InteractionType.NPC)
return this
}
}
@@ -1,17 +1,13 @@
package rs09.game.content.ame.events
import core.game.component.Component
import core.game.component.ComponentDefinition
import core.game.component.ComponentPlugin
import core.game.node.entity.player.Player
import core.game.node.item.GroundItemManager
import core.game.node.item.Item
import core.plugin.Initializable
import core.plugin.Plugin
import org.rs09.consts.Items
import rs09.game.interaction.InterfaceListener
@Initializable
class SandwichLadyInterface : ComponentPlugin(){
class SandwichLadyInterface : InterfaceListener(){
val SANDWICH_INTERFACE = 297
val baguette = Items.BAGUETTE_6961
val triangle_sandwich = Items.TRIANGLE_SANDWICH_6962
val sandwich = Items.SQUARE_SANDWICH_6965
@@ -20,29 +16,27 @@ class SandwichLadyInterface : ComponentPlugin(){
val kebab = Items.KEBAB_1971
val chocobar = Items.CHOCOLATE_BAR_1973
override fun handle(player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int): Boolean {
var item = Item(0)
when(button) {
7 -> {item = Item(baguette)}
8 -> {item = Item(triangle_sandwich)}
9 -> {item = Item(sandwich)}
10 -> {item = Item(roll)}
11 -> {item = Item(pie)}
12 -> {item = Item(kebab)}
13 -> {item = Item(chocobar)}
}
if(item.id != 0){
player?.let { if(it.inventory.add(item)) else GroundItemManager.create(item,it) }
player?.interfaceManager?.close()
player?.antiMacroHandler?.event?.terminate()
return true
}
return false
}
override fun defineListeners() {
on(SANDWICH_INTERFACE){player, _, _, buttonID, _, _ ->
val item =
when(buttonID) {
7 -> {Item(baguette)}
8 -> {Item(triangle_sandwich)}
9 -> {Item(sandwich)}
10 -> {Item(roll)}
11 -> {Item(pie)}
12 -> {Item(kebab)}
13 -> {Item(chocobar)}
else -> {Item(baguette)}
}
override fun newInstance(arg: Any?): Plugin<Any> {
ComponentDefinition.put(297,this)
return this
}
if(!player.inventory.add(item)){
GroundItemManager.create(item,player)
}
player.interfaceManager.close()
player.antiMacroHandler.event.terminate()
return@on true
}
}
}
@@ -0,0 +1,41 @@
package rs09.game.content.global
import core.game.node.entity.player.Player
import core.game.node.item.Item
import core.tools.RandomFunction
import org.rs09.consts.Items
private val CHARMS = intArrayOf(Items.CRIMSON_CHARM_12160,Items.BLUE_CHARM_12163,Items.GREEN_CHARM_12159,Items.GOLD_CHARM_12158)
class NPCDropTable : WeightBasedTable() {
val charmDrops = WeightBasedTable()
override fun add(element: WeightedItem): Boolean {
return if(CHARMS.contains(element.id)) charmDrops.add(element)
else super.add(element)
}
override fun roll(player: Player): ArrayList<Item> {
val items= ArrayList<Item>(3)
var tempWeight = RandomFunction.randomDouble(totalWeight)
items.addAll(guaranteedItems.map { it.getItem() }.toList())
if(RandomFunction.random(1,15) == 5){
items.addAll(charmDrops.roll(player))
}
if(size == 1){
items.add(get(0).getItem())
return items
}
if(isNotEmpty()) {
for (item in shuffled()) {
tempWeight -= item.weight
if (tempWeight <= 0) {
items.add(item.getItem())
break
}
}
}
return items
}
}
@@ -2,8 +2,9 @@ package rs09.game.content.global
import core.game.node.entity.player.Player
import core.game.node.item.Item
import core.tools.RandomFunction
class WeightBasedTable : ArrayList<WeightedItem>() {
open class WeightBasedTable : ArrayList<WeightedItem>() {
var totalWeight = 0.0
val guaranteedItems = ArrayList<WeightedItem>(5)
@@ -13,9 +14,9 @@ class WeightBasedTable : ArrayList<WeightedItem>() {
else super.add(element)
}
fun roll(player: Player): ArrayList<Item>{
open fun roll(player: Player): ArrayList<Item>{
val items= ArrayList<Item>(3)
var tempWeight = totalWeight
var tempWeight = RandomFunction.randomDouble(totalWeight)
items.addAll(guaranteedItems.map { it.getItem() }.toList())
if(player.inventory.isFull){
@@ -34,7 +35,7 @@ class WeightBasedTable : ArrayList<WeightedItem>() {
return items
}
fun canRoll(player: Player): Boolean{
open fun canRoll(player: Player): Boolean{
val guaranteed = guaranteedItems.map { it.getItem() }.toTypedArray()
return (player.inventory.hasSpaceFor(*guaranteed) && guaranteed.isNotEmpty()) || !player.inventory.isFull
}
@@ -113,7 +113,7 @@ class DukeHoracioTLTDialogue(val questStage: Int) : DialogueFile() {
}
}
else if(stage == 44){
else if(questStage == 44){
when(stage){
START_DIALOGUE -> player(
"I spoke to the goblin generals in the goblin village. They",
@@ -35,7 +35,7 @@ class FletchingListeners : InteractionListener() {
val UNFINISHED_ARROWS = Fletching.ArrowHeads.values().map(Fletching.ArrowHeads::unfinished).toIntArray()
val FEATHERS = intArrayOf(FEATHER_314,STRIPY_FEATHER_10087,RED_FEATHER_10088,BLUE_FEATHER_10089,YELLOW_FEATHER_10090,ORANGE_FEATHER_10091)
val UNSTRUNG_BOWS = Fletching.String.values().map(Fletching.String::unfinished).toIntArray()
val STRINGS = intArrayOf(Items.BOW_STRING_1777,Items.SINEW_9436)
val STRINGS = intArrayOf(Items.BOW_STRING_1777,Items.CROSSBOW_STRING_9438)
override fun defineListeners() {