mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-21 09:02:07 -07:00
Added UseWithListener.kt
This commit is contained in:
parent
ffe7888ace
commit
c6498ba920
12 changed files with 106 additions and 42 deletions
|
|
@ -15,7 +15,9 @@ import core.net.packet.IoBuffer;
|
|||
import core.net.packet.PacketRepository;
|
||||
import core.net.packet.context.PlayerContext;
|
||||
import core.net.packet.out.ClearMinimapFlag;
|
||||
import org.rs09.consts.Items;
|
||||
import rs09.game.interaction.ItemOnBankBooth;
|
||||
import rs09.game.interaction.Listeners;
|
||||
import rs09.game.node.entity.skill.farming.CompostBins;
|
||||
import rs09.game.node.entity.skill.farming.FarmingPatch;
|
||||
import rs09.game.node.entity.skill.farming.UseWithBinHandler;
|
||||
|
|
@ -23,7 +25,6 @@ import rs09.game.node.entity.skill.farming.UseWithPatchHandler;
|
|||
import rs09.game.system.SystemLogger;
|
||||
import rs09.game.system.command.rottenpotato.RottenPotatoUseWithHandler;
|
||||
import rs09.game.world.repository.Repository;
|
||||
import org.rs09.consts.Items;
|
||||
|
||||
/**
|
||||
* The incoming item reward packet.
|
||||
|
|
@ -68,6 +69,9 @@ public class ItemActionPacket implements IncomingPacket {
|
|||
if(PluginInteractionManager.handle(player,event)){
|
||||
return;
|
||||
}
|
||||
if(Listeners.run(item,npc,2,player)){
|
||||
return;
|
||||
}
|
||||
event = new NodeUsageEvent(player, interfaceId, item, npc);
|
||||
try {
|
||||
UseWithHandler.run(event);
|
||||
|
|
@ -124,6 +128,9 @@ public class ItemActionPacket implements IncomingPacket {
|
|||
RottenPotatoUseWithHandler.handle(used,player);
|
||||
return;
|
||||
}
|
||||
if(Listeners.run(used,with,0,player)){
|
||||
return;
|
||||
}
|
||||
if (usedItemId < usedWithItemId) {
|
||||
item = used;
|
||||
used = with;
|
||||
|
|
@ -172,6 +179,9 @@ public class ItemActionPacket implements IncomingPacket {
|
|||
RottenPotatoUseWithHandler.handle(object,player);
|
||||
return;
|
||||
}
|
||||
if(Listeners.run(used,object,1,player)){
|
||||
return;
|
||||
}
|
||||
event = new NodeUsageEvent(player, 0, used, object);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import core.game.node.item.Item
|
|||
import core.game.world.map.Direction
|
||||
import core.game.world.map.Location
|
||||
import core.game.world.update.flag.context.Animation
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.interaction.OptionListener
|
||||
import java.util.*
|
||||
|
|
@ -17,7 +16,6 @@ import java.util.*
|
|||
* Handles repairing and climbing of the 3 beacon shortcuts needed to access them
|
||||
* @author Ceikry
|
||||
*/
|
||||
@Initializable
|
||||
class AFURepairClimbHandler : OptionListener() {
|
||||
|
||||
val repairIDs = intArrayOf(38480,38470,38494)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import kotlin.math.ceil
|
|||
* Option handler for fishing trawler
|
||||
* @author Ceikry
|
||||
*/
|
||||
@Initializable
|
||||
class FishingTrawlerOptionHandler : OptionListener() {
|
||||
val ENTRANCE_PLANK = 2178
|
||||
val EXIT_PLANK = 2179
|
||||
|
|
|
|||
5
Server/src/main/kotlin/rs09/game/interaction/Listener.kt
Normal file
5
Server/src/main/kotlin/rs09/game/interaction/Listener.kt
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
package rs09.game.interaction
|
||||
|
||||
interface Listener {
|
||||
fun defineListeners()
|
||||
}
|
||||
|
|
@ -6,7 +6,8 @@ import core.game.node.Node
|
|||
import core.game.node.entity.player.Player
|
||||
|
||||
object Listeners {
|
||||
private val listeners = HashMap<String,(Player, Node) -> Boolean>()
|
||||
private val listeners = HashMap<String,(Player, Node) -> Boolean>(1000)
|
||||
private val useWithListeners = HashMap<String,(Player,Node,Node) -> Boolean>(1000)
|
||||
|
||||
@JvmStatic
|
||||
fun add(id: Int, type: Int, option: Array<out String>, method: (Player,Node) -> Boolean){
|
||||
|
|
@ -36,6 +37,23 @@ object Listeners {
|
|||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun add(used: Int, with: Int, type: Int, method: (Player,Node,Node) -> Boolean){
|
||||
useWithListeners["$used:$with:$type"] = method
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun add(type: Int, used: Int, with: IntArray, method: (Player, Node, Node) -> Boolean){
|
||||
for(id in with){
|
||||
useWithListeners["$used:$with:$type"] = method
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun get(used: Int, with: Int, type: Int): ((Player,Node,Node) -> Boolean)?{
|
||||
return useWithListeners["$used:$with:$type"]
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun get(id: Int, type: Int, option: String): ((Player,Node) -> Boolean)?{
|
||||
return listeners["$id:$type:${option.toLowerCase()}"]
|
||||
|
|
@ -46,6 +64,34 @@ object Listeners {
|
|||
return listeners["$type:${option.toLowerCase()}"]
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun run(used: Node, with: Node, type: Int,player: Player): Boolean{
|
||||
val flag = when(type){
|
||||
2 -> DestinationFlag.ENTITY
|
||||
1 -> DestinationFlag.OBJECT
|
||||
else -> DestinationFlag.OBJECT
|
||||
}
|
||||
|
||||
var flipped = false
|
||||
|
||||
val method = get(used.id,with.id,type) ?: get(with.id,used.id,type).also { flipped = true } ?: return false
|
||||
|
||||
if(type != 0) {
|
||||
player.pulseManager.run(object : MovementPulse(player, with, flag) {
|
||||
override fun pulse(): Boolean {
|
||||
player.faceLocation(with.location)
|
||||
if(flipped) method.invoke(player,with,used)
|
||||
else method.invoke(player,used,with)
|
||||
return true
|
||||
}
|
||||
})
|
||||
} else {
|
||||
if(flipped) method.invoke(player,with,used)
|
||||
else method.invoke(player,used,with)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun run(id: Int, type: Int, option: String, player: Player, node: Node): Boolean{
|
||||
val flag = when(type){
|
||||
|
|
|
|||
|
|
@ -3,11 +3,10 @@ package rs09.game.interaction
|
|||
import core.game.node.Node
|
||||
import core.game.node.entity.player.Player
|
||||
|
||||
abstract class OptionListener {
|
||||
abstract class OptionListener : Listener{
|
||||
val ITEM = 0
|
||||
val OBJECT = 1
|
||||
val NPC = 2
|
||||
abstract fun defineListeners()
|
||||
fun on(id: Int, type: Int, vararg option: String,handler: (Player, Node) -> Boolean){
|
||||
Listeners.add(id,type,option,handler)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package rs09.game.interaction
|
||||
|
||||
import core.game.node.Node
|
||||
import core.game.node.entity.player.Player
|
||||
|
||||
abstract class UseWithListener : Listener {
|
||||
val ITEM = 0
|
||||
val OBJECT = 1
|
||||
val NPC = 2
|
||||
fun on(used: Int, with: Int, type: Int, handler: (Player, Node, Node) -> Boolean){
|
||||
Listeners.add(used,with,type,handler)
|
||||
}
|
||||
fun on(type: Int,used: Int,vararg with: Int, handler: (Player, Node, Node) -> Boolean){
|
||||
Listeners.add(type,used,with,handler)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
package rs09.game.interaction.city
|
||||
|
||||
import core.game.world.map.Location
|
||||
import core.plugin.Initializable
|
||||
import rs09.game.interaction.OptionListener
|
||||
|
||||
/**
|
||||
|
|
@ -10,7 +9,6 @@ import rs09.game.interaction.OptionListener
|
|||
* @author Sir Kermit
|
||||
*/
|
||||
|
||||
@Initializable
|
||||
class IsafdarListeners : OptionListener() {
|
||||
|
||||
val CAVE_ENTRANCE = 4006
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import core.game.node.entity.impl.ForceMovement
|
|||
import core.game.world.map.Direction
|
||||
import core.game.world.map.Location
|
||||
import core.game.world.update.flag.context.Animation
|
||||
import core.plugin.Initializable
|
||||
import rs09.game.interaction.OptionListener
|
||||
|
||||
/**
|
||||
|
|
@ -13,7 +12,6 @@ import rs09.game.interaction.OptionListener
|
|||
* @author Sir Kermit
|
||||
*/
|
||||
|
||||
@Initializable
|
||||
class MorytaniaListeners : OptionListener() {
|
||||
|
||||
val GROTTO_ENTRANCE = 3516
|
||||
|
|
|
|||
|
|
@ -1,19 +1,11 @@
|
|||
package rs09.game.interaction.item.withobject
|
||||
|
||||
import core.cache.def.impl.ObjectDefinition
|
||||
import core.game.interaction.NodeUsageEvent
|
||||
import core.game.interaction.OptionHandler
|
||||
import core.game.interaction.UseWithHandler
|
||||
import core.game.node.Node
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.entity.player.link.diary.DiaryType
|
||||
import core.game.node.item.Item
|
||||
import core.game.world.map.zone.ZoneBorders
|
||||
import core.plugin.Initializable
|
||||
import core.plugin.Plugin
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.interaction.OptionListener
|
||||
import rs09.plugin.PluginManager.definePlugin
|
||||
import rs09.game.interaction.UseWithListener
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
|
|
@ -63,21 +55,20 @@ class CoalTrucksHandler : OptionListener() {
|
|||
}
|
||||
|
||||
//TODO:
|
||||
inner class useCoalWithTruck : UseWithHandler(Items.COAL_453) {
|
||||
override fun newInstance(arg: Any?): Plugin<Any>? {
|
||||
addHandler(2114, OBJECT_TYPE, this)
|
||||
return this
|
||||
}
|
||||
class CoalTruckListener : UseWithListener() {
|
||||
val COAL_TRUCK_2114 = 2114
|
||||
val COAL = Items.COAL_453
|
||||
|
||||
override fun handle(event: NodeUsageEvent): Boolean {
|
||||
val player = event.player
|
||||
override fun defineListeners() {
|
||||
|
||||
on(COAL,COAL_TRUCK_2114,OBJECT){player,_,_ ->
|
||||
var coalInTruck = player.getAttribute("coal-truck-inventory", 0)
|
||||
|
||||
var coalInInventory = player.inventory.getAmount(Items.COAL_453)
|
||||
|
||||
if(coalInInventory + coalInTruck >= 120){
|
||||
coalInInventory = 120 - coalInTruck
|
||||
event.player.packetDispatch.sendMessage("You have filled up the coal truck.")
|
||||
player.packetDispatch.sendMessage("You have filled up the coal truck.")
|
||||
|
||||
//handle coal truck task for seer's village
|
||||
if (!player.achievementDiaryManager.getDiary(DiaryType.SEERS_VILLAGE).isComplete(1, 2)
|
||||
|
|
@ -90,7 +81,9 @@ class CoalTrucksHandler : OptionListener() {
|
|||
coalInTruck += coalInInventory
|
||||
|
||||
player.setAttribute("/save:coal-truck-inventory",coalInTruck)
|
||||
return true
|
||||
return@on true
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,11 +5,9 @@ import core.game.node.`object`.ObjectBuilder
|
|||
import core.game.node.item.GroundItemManager
|
||||
import core.game.node.item.Item
|
||||
import core.game.world.update.flag.context.Animation
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.interaction.OptionListener
|
||||
|
||||
@Initializable
|
||||
/**
|
||||
* Handles the muddy chest
|
||||
* @author Ceikry
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import core.plugin.PluginType
|
|||
import io.github.classgraph.ClassGraph
|
||||
import io.github.classgraph.ClassInfo
|
||||
import rs09.game.interaction.OptionListener
|
||||
import rs09.game.interaction.UseWithListener
|
||||
import rs09.game.system.SystemLogger
|
||||
import rs09.game.system.command.Command
|
||||
import java.util.*
|
||||
|
|
@ -75,6 +76,9 @@ object PluginManager {
|
|||
result.getSubclasses("rs09.game.interaction.OptionListener").forEach {
|
||||
(it.loadClass().newInstance() as OptionListener).defineListeners()
|
||||
}
|
||||
result.getSubclasses("rs09.game.interaction.UseWithListener").forEach {
|
||||
(it.loadClass().newInstance() as UseWithListener).defineListeners()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue