mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-21 09:02:07 -07:00
Added InterfaceListener.kt and converted a few interfaces over to it
This commit is contained in:
parent
ad1bbaa5b4
commit
35cbb7f2f4
18 changed files with 301 additions and 256 deletions
|
|
@ -5,6 +5,7 @@ import core.game.node.entity.player.link.InterfaceManager;
|
|||
import core.net.packet.PacketRepository;
|
||||
import core.net.packet.context.InterfaceContext;
|
||||
import core.net.packet.out.Interface;
|
||||
import rs09.game.interaction.InterfaceListeners;
|
||||
|
||||
/**
|
||||
* Represents a component.
|
||||
|
|
@ -53,6 +54,7 @@ public class Component {
|
|||
*/
|
||||
public void open(Player player) {
|
||||
InterfaceManager manager = player.getInterfaceManager();
|
||||
InterfaceListeners.runOpen(player,this);
|
||||
if (definition == null) {
|
||||
PacketRepository.send(Interface.class, new InterfaceContext(player, manager.getWindowPaneId(), manager.getDefaultChildId(), getId(), false));
|
||||
if (plugin != null) {
|
||||
|
|
@ -82,6 +84,7 @@ public class Component {
|
|||
* @return {@code True} if the component can be closed.
|
||||
*/
|
||||
public boolean close(Player player) {
|
||||
InterfaceListeners.runClose(player,this);
|
||||
if (closeEvent != null && !closeEvent.close(player, this)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import core.game.world.map.Location;
|
|||
import core.game.world.map.RegionManager;
|
||||
import core.game.world.update.flag.context.Animation;
|
||||
import core.plugin.Plugin;
|
||||
import rs09.game.interaction.Listeners;
|
||||
import rs09.game.interaction.InteractionListeners;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -147,7 +147,7 @@ public final class DragonSlayerPlugin extends OptionHandler {
|
|||
player.getPacketDispatch().sendMessage("You need to complete the Dragon Slayer Quest in order to wear this.");
|
||||
return true;
|
||||
}
|
||||
Listeners.run(node.getId(),0,"equip",player,node);
|
||||
InteractionListeners.run(node.getId(),0,"equip",player,node);
|
||||
break;
|
||||
case 742:
|
||||
if (player.getQuestRepository().getQuest("Dragon Slayer").getStage(player) == 40 && (player.getInventory().containsItem(DragonSlayer.ELVARG_HEAD) || player.getInventory().containsItem(DragonSlayer.ELVARG_HEAD))) {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import core.game.node.object.GameObject;
|
|||
import core.game.system.task.Pulse;
|
||||
import core.game.world.map.Location;
|
||||
import core.plugin.Plugin;
|
||||
import rs09.game.interaction.Listeners;
|
||||
import rs09.game.interaction.InteractionListeners;
|
||||
import rs09.game.world.GameWorld;
|
||||
|
||||
/**
|
||||
|
|
@ -94,7 +94,7 @@ public final class LostCityPlugin extends OptionHandler {
|
|||
player.getPacketDispatch().sendMessage("You need to have completed the Lost City quest in order to wield that weapon.");
|
||||
return true;
|
||||
}
|
||||
return Listeners.run(node.getId(),0,"equip",player,node);
|
||||
return InteractionListeners.run(node.getId(),0,"equip",player,node);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import core.game.world.update.flag.player.FaceLocationFlag;
|
|||
import core.net.packet.PacketRepository;
|
||||
import core.net.packet.context.InteractionOptionContext;
|
||||
import core.net.packet.out.InteractionOption;
|
||||
import rs09.game.interaction.Listeners;
|
||||
import rs09.game.interaction.InteractionListeners;
|
||||
import rs09.game.system.SystemLogger;
|
||||
import rs09.game.world.GameWorld;
|
||||
|
||||
|
|
@ -106,7 +106,7 @@ public class Interaction {
|
|||
if (player.getLocks().isInteractionLocked() || player.getZoneMonitor().interact(node, option)) {
|
||||
return true;
|
||||
}
|
||||
if(Listeners.run(node.getId(),0,option.getName(),player,node)){
|
||||
if(InteractionListeners.run(node.getId(),0,option.getName(),player,node)){
|
||||
return true;
|
||||
}
|
||||
if (option.getHandler() == null || !option.getHandler().handle(player, node, option.getName().toLowerCase())) {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import core.net.packet.out.ContainerPacket;
|
|||
import core.plugin.Initializable;
|
||||
import core.plugin.Plugin;
|
||||
import rs09.game.content.global.action.EquipHandler;
|
||||
import rs09.game.interaction.Listeners;
|
||||
import rs09.game.interaction.InteractionListeners;
|
||||
import rs09.game.world.GameWorld;
|
||||
|
||||
/**
|
||||
|
|
@ -81,7 +81,7 @@ public final class EquipmentInterface extends ComponentPlugin {
|
|||
GameWorld.getPulser().submit(new Pulse(1, p) {
|
||||
@Override
|
||||
public boolean pulse() {
|
||||
Listeners.run(item.getId(),0,"equip",p, item);
|
||||
InteractionListeners.run(item.getId(),0,"equip",p, item);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
@ -191,7 +191,7 @@ public final class EquipmentInterface extends ComponentPlugin {
|
|||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
if(Listeners.run(item.getId(),0,"operate",player,item)){
|
||||
if(InteractionListeners.run(item.getId(),0,"operate",player,item)){
|
||||
return;
|
||||
}
|
||||
OptionHandler handler = item.getOperateHandler();
|
||||
|
|
|
|||
|
|
@ -10,9 +10,10 @@ import core.game.node.entity.player.info.login.LoginConfiguration;
|
|||
import core.game.node.entity.player.link.request.assist.AssistSession;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.system.task.Pulse;
|
||||
import rs09.game.world.GameWorld;
|
||||
import core.net.packet.IncomingPacket;
|
||||
import core.net.packet.IoBuffer;
|
||||
import rs09.game.interaction.InterfaceListeners;
|
||||
import rs09.game.world.GameWorld;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -58,10 +59,15 @@ public class ActionButtonPacket implements IncomingPacket {
|
|||
player.debug("Component " + c + " wasn't opened in interface manager.");
|
||||
return;
|
||||
}
|
||||
int cOpcode = buffer.opcode();
|
||||
ComponentPlugin plugin = c.getPlugin();
|
||||
if (plugin != null) {
|
||||
player.debug("Component plugin = " + plugin.getClass().getSimpleName());
|
||||
plugin.handle(player, c, buffer.opcode(), buttonId, slot, itemId);
|
||||
plugin.handle(player, c, cOpcode, buttonId, slot, itemId);
|
||||
} else {
|
||||
if(InterfaceListeners.run(player,c,cOpcode,buttonId,slot,itemId)){
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import core.net.packet.context.PlayerContext;
|
|||
import core.net.packet.out.ClearMinimapFlag;
|
||||
import rs09.ServerConstants;
|
||||
import rs09.game.ai.AIPlayer;
|
||||
import rs09.game.interaction.Listeners;
|
||||
import rs09.game.interaction.InteractionListeners;
|
||||
import rs09.game.world.repository.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -186,7 +186,7 @@ public final class InteractionPacket implements IncomingPacket {
|
|||
player.debug("spawn=" + npc.getProperties().getSpawnLocation() + ".");
|
||||
player.debug("Varp ID= " + npc.getDefinition().getConfigId() + " Offset=" + npc.getDefinition().getVarbitOffset() + " Size=" + npc.getDefinition().getVarbitSize());
|
||||
handleAIPLegion(player, 0, optionIndex, index);
|
||||
if(Listeners.run(npc.getId(),2, option.getName(),player,npc)){
|
||||
if(InteractionListeners.run(npc.getId(),2, option.getName(),player,npc)){
|
||||
return;
|
||||
}
|
||||
if(PluginInteractionManager.handle(player,shown,option)){
|
||||
|
|
@ -270,7 +270,7 @@ public final class InteractionPacket implements IncomingPacket {
|
|||
}
|
||||
handleAIPLegion(player, 1, optionIndex, x, y, objectId);
|
||||
|
||||
if(Listeners.run(object.getId(),1, option.getName(),player,object)){
|
||||
if(InteractionListeners.run(object.getId(),1, option.getName(),player,object)){
|
||||
return;
|
||||
}
|
||||
if(PluginInteractionManager.handle(player,object)){
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ 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.interaction.InteractionListeners;
|
||||
import rs09.game.node.entity.skill.farming.CompostBins;
|
||||
import rs09.game.node.entity.skill.farming.FarmingPatch;
|
||||
import rs09.game.node.entity.skill.farming.UseWithBinHandler;
|
||||
|
|
@ -69,7 +69,7 @@ public class ItemActionPacket implements IncomingPacket {
|
|||
if(PluginInteractionManager.handle(player,event)){
|
||||
return;
|
||||
}
|
||||
if(Listeners.run(item,npc,2,player)){
|
||||
if(InteractionListeners.run(item,npc,2,player)){
|
||||
return;
|
||||
}
|
||||
event = new NodeUsageEvent(player, interfaceId, item, npc);
|
||||
|
|
@ -128,7 +128,7 @@ public class ItemActionPacket implements IncomingPacket {
|
|||
RottenPotatoUseWithHandler.handle(used,player);
|
||||
return;
|
||||
}
|
||||
if(Listeners.run(used,with,0,player)){
|
||||
if(InteractionListeners.run(used,with,0,player)){
|
||||
return;
|
||||
}
|
||||
if (usedItemId < usedWithItemId) {
|
||||
|
|
@ -179,7 +179,7 @@ public class ItemActionPacket implements IncomingPacket {
|
|||
RottenPotatoUseWithHandler.handle(object,player);
|
||||
return;
|
||||
}
|
||||
if(Listeners.run(used,object,1,player)){
|
||||
if(InteractionListeners.run(used,object,1,player)){
|
||||
return;
|
||||
}
|
||||
event = new NodeUsageEvent(player, 0, used, object);
|
||||
|
|
|
|||
|
|
@ -1,46 +1,35 @@
|
|||
package rs09.game.interaction
|
||||
|
||||
import core.game.component.Component
|
||||
import core.game.component.ComponentDefinition
|
||||
import core.game.component.ComponentPlugin
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import core.plugin.Plugin
|
||||
import rs09.game.world.GameWorld
|
||||
|
||||
@Initializable
|
||||
/**
|
||||
* Handles the corporeal beast warning interface
|
||||
* @author Ceikry
|
||||
*/
|
||||
class CorporealBeastWarningInterface : ComponentPlugin(){
|
||||
companion object{
|
||||
const val COMPONENT_ID = 650
|
||||
}
|
||||
class CorporealBeastWarningInterface : InterfaceListener(){
|
||||
|
||||
override fun handle(player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int): Boolean {
|
||||
player ?: return false
|
||||
when(button){
|
||||
17 -> {
|
||||
if(player.getAttribute("corp-beast-cave-delay",0) <= GameWorld.ticks) {
|
||||
player.properties.teleportLocation = player.location.transform(4, 0, 0).also { close(player) }
|
||||
player.setAttribute("corp-beast-cave-delay",GameWorld.ticks + 5)
|
||||
} else {
|
||||
close(player)
|
||||
}
|
||||
val COMPONENT_ID = 650
|
||||
|
||||
override fun defineListeners() {
|
||||
on(COMPONENT_ID,17){player,component,_,_,_,_ ->
|
||||
if(player.getAttribute("corp-beast-cave-delay",0) <= GameWorld.ticks) {
|
||||
player.properties.teleportLocation = player.location.transform(4, 0, 0).also { close(player,component) }
|
||||
player.setAttribute("corp-beast-cave-delay",GameWorld.ticks + 5)
|
||||
} else {
|
||||
close(player,component)
|
||||
}
|
||||
else -> close(player)
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(COMPONENT_ID){player, component, _, _, _, _ ->
|
||||
close(player,component)
|
||||
return@on true
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
fun close(player: Player){
|
||||
player.interfaceManager.close(Component(650))
|
||||
fun close(player: Player,component: Component){
|
||||
player.interfaceManager.close(component)
|
||||
}
|
||||
|
||||
override fun newInstance(arg: Any?): Plugin<Any> {
|
||||
ComponentDefinition.put(COMPONENT_ID,this)
|
||||
return this
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -8,31 +8,31 @@ abstract class InteractionListener : Listener{
|
|||
val ITEM = 0
|
||||
val OBJECT = 1
|
||||
val NPC = 2
|
||||
fun on(id: Int, type: Int, vararg option: String,handler: (Player, Node) -> Boolean){
|
||||
Listeners.add(id,type,option,handler)
|
||||
fun on(id: Int, type: Int, vararg option: String,handler: (player: Player, node: Node) -> Boolean){
|
||||
InteractionListeners.add(id,type,option,handler)
|
||||
}
|
||||
fun on(ids: IntArray, type: Int, vararg option: String, handler: (Player, Node) -> Boolean){
|
||||
Listeners.add(ids,type,option,handler)
|
||||
fun on(ids: IntArray, type: Int, vararg option: String, handler: (player: Player, node: Node) -> Boolean){
|
||||
InteractionListeners.add(ids,type,option,handler)
|
||||
}
|
||||
fun on(option: String, type: Int, handler: (Player, Node) -> Boolean){
|
||||
Listeners.add(option,type,handler)
|
||||
fun on(option: String, type: Int, handler: (player: Player, node: Node) -> Boolean){
|
||||
InteractionListeners.add(option,type,handler)
|
||||
}
|
||||
fun on(type: Int, vararg option: String, handler: (Player, Node) -> Boolean){
|
||||
Listeners.add(option,type,handler)
|
||||
fun on(type: Int, vararg option: String, handler: (player: Player, node: Node) -> Boolean){
|
||||
InteractionListeners.add(option,type,handler)
|
||||
}
|
||||
fun onUseWith(type: Int, used: Int, vararg with: Int, handler: (Player, Node, Node) -> Boolean){
|
||||
Listeners.add(type,used,with,handler)
|
||||
fun onUseWith(type: Int, used: Int, vararg with: Int, handler: (player: Player, used: Node, with: Node) -> Boolean){
|
||||
InteractionListeners.add(type,used,with,handler)
|
||||
}
|
||||
fun onUseWith(type: Int, used: IntArray, vararg with: Int, handler: (Player, Node, Node) -> Boolean){
|
||||
Listeners.add(type,used,with,handler)
|
||||
fun onUseWith(type: Int, used: IntArray, vararg with: Int, handler: (player: Player, used: Node, with: Node) -> Boolean){
|
||||
InteractionListeners.add(type,used,with,handler)
|
||||
}
|
||||
|
||||
open fun defineDestinationOverrides(){}
|
||||
|
||||
fun setDest(type: Int, id: Int,handler: (Node) -> Location){
|
||||
Listeners.addDestOverride(type,id,handler)
|
||||
InteractionListeners.addDestOverride(type,id,handler)
|
||||
}
|
||||
fun setDest(type:Int, vararg options: String, handler: (Node) -> Location){
|
||||
Listeners.addDestOverrides(type,options,handler)
|
||||
InteractionListeners.addDestOverrides(type,options,handler)
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ import core.game.node.Node
|
|||
import core.game.node.entity.player.Player
|
||||
import core.game.world.map.Location
|
||||
|
||||
object Listeners {
|
||||
object InteractionListeners {
|
||||
private val listeners = HashMap<String,(Player, Node) -> Boolean>(1000)
|
||||
private val useWithListeners = HashMap<String,(Player,Node,Node) -> Boolean>(1000)
|
||||
private val destinationOverrides = HashMap<String,(Node) -> Location>(100)
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package rs09.game.interaction
|
||||
|
||||
import core.game.component.Component
|
||||
import core.game.node.entity.player.Player
|
||||
|
||||
abstract class InterfaceListener : Listener {
|
||||
fun on(componentID: Int, buttonID: Int, handler: (player: Player, component: Component, opcode: Int, buttonID: Int, slot: Int, itemID: Int) -> Boolean){
|
||||
InterfaceListeners.add(componentID,buttonID,handler)
|
||||
}
|
||||
fun on(componentID: Int, handler: (player: Player, component: Component, opcode: Int, buttonID: Int, slot: Int, itemID: Int) -> Boolean){
|
||||
InterfaceListeners.add(componentID,handler)
|
||||
}
|
||||
fun onOpen(componentID: Int,handler: (player: Player, component: Component) -> Boolean){
|
||||
InterfaceListeners.addOpenListener(componentID, handler)
|
||||
}
|
||||
fun onClose(componentID: Int,handler: (player: Player, component: Component) -> Boolean){
|
||||
InterfaceListeners.addCloseListener(componentID,handler)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
package rs09.game.interaction
|
||||
|
||||
import core.game.component.Component
|
||||
import core.game.node.entity.player.Player
|
||||
|
||||
object InterfaceListeners {
|
||||
val buttonListeners = HashMap<String,(Player, Component, Int, Int, Int, Int) -> Boolean>(1000)
|
||||
val openListeners = HashMap<String,(Player,Component) -> Boolean>(100)
|
||||
|
||||
@JvmStatic
|
||||
fun add(componentID: Int, buttonID: Int, handler: (Player,Component,Int,Int,Int,Int) -> Boolean){
|
||||
buttonListeners["$componentID:$buttonID"] = handler
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun add(componentID: Int, handler: (Player, Component, Int, Int, Int, Int) -> Boolean){
|
||||
buttonListeners["$componentID"] = handler
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun addOpenListener(componentID: Int, handler: (Player,Component) -> Boolean){
|
||||
openListeners["$componentID"] = handler
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun addCloseListener(componentID: Int, handler: (Player, Component) -> Boolean){
|
||||
openListeners["close:$componentID"] = handler
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun get(componentID: Int, buttonID: Int): ((Player,Component,Int,Int,Int,Int) -> Boolean)?{
|
||||
return buttonListeners["$componentID:$buttonID"]
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun get(componentID: Int): ((Player,Component,Int,Int,Int,Int) -> Boolean)?{
|
||||
return buttonListeners["$componentID"]
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getOpenListener(componentID: Int): ((Player,Component) -> Boolean)?{
|
||||
return openListeners["$componentID"]
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getCloseListener(componentID: Int): ((Player,Component) -> Boolean)?{
|
||||
return openListeners["close:$componentID"]
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun runOpen(player: Player,component: Component): Boolean{
|
||||
val method = getOpenListener(component.id) ?: return false
|
||||
return method.invoke(player,component)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun runClose(player: Player,component: Component): Boolean{
|
||||
val method = getCloseListener(component.id) ?: return false
|
||||
return method.invoke(player,component)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun run(player: Player, component: Component, opcode: Int, buttonID: Int, slot: Int, itemID: Int): Boolean{
|
||||
val method = get(component.id,buttonID) ?: get(component.id) ?: return false
|
||||
return method.invoke(player,component,opcode,buttonID,slot,itemID)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +1,13 @@
|
|||
package rs09.game.interaction.inter
|
||||
|
||||
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.entity.player.link.TeleportManager
|
||||
import core.game.system.task.Pulse
|
||||
import core.game.world.map.Location
|
||||
import core.game.world.map.RegionManager
|
||||
import core.plugin.Initializable
|
||||
import core.plugin.Plugin
|
||||
import core.tools.RandomFunction
|
||||
import rs09.game.interaction.InterfaceListener
|
||||
import rs09.game.world.GameWorld
|
||||
|
||||
val RING_1 = arrayOf('a','d','c','b')
|
||||
|
|
@ -21,51 +18,57 @@ val RING_3 = arrayOf('p','s','r','q')
|
|||
* Handles the fairy ring interface
|
||||
* @author Ceikry
|
||||
*/
|
||||
@Initializable
|
||||
class FairyRingInterface : ComponentPlugin(){
|
||||
override fun open(player: Player?, component: Component?) {
|
||||
player ?: return
|
||||
super.open(player, component)
|
||||
if(component?.id == 734) {
|
||||
class FairyRingInterface : InterfaceListener(){
|
||||
|
||||
val RINGS = 734
|
||||
val TRAVEL_LOG = 735
|
||||
|
||||
override fun defineListeners() {
|
||||
|
||||
onOpen(RINGS){player, _ ->
|
||||
player.interfaceManager.openSingleTab(Component(TRAVEL_LOG))
|
||||
player.setAttribute("fr:ring1", 0)
|
||||
player.setAttribute("fr:ring2", 0)
|
||||
player.setAttribute("fr:ring3", 0)
|
||||
FairyRing.drawLog(player)
|
||||
return@onOpen true
|
||||
}
|
||||
|
||||
component.setCloseEvent { pl, _ ->
|
||||
pl.removeAttribute("fr:ring1")
|
||||
pl.removeAttribute("fr:ring2")
|
||||
pl.removeAttribute("fr:ring3")
|
||||
pl.configManager.forceSet(816,0,false)
|
||||
pl.interfaceManager.closeSingleTab()
|
||||
true
|
||||
onClose(RINGS){player, _ ->
|
||||
player.interfaceManager.closeSingleTab()
|
||||
player.removeAttribute("fr:ring1")
|
||||
player.removeAttribute("fr:ring2")
|
||||
player.removeAttribute("fr:ring3")
|
||||
player.varpManager.get(816).clearBitRange(0,31)
|
||||
player.varpManager.get(816).send(player)
|
||||
player.interfaceManager.closeSingleTab()
|
||||
return@onClose true
|
||||
}
|
||||
|
||||
on(RINGS){player, _, _, buttonID, _, _ ->
|
||||
if(player.getAttribute("fr:time",0L) > System.currentTimeMillis()) return@on true
|
||||
var delayIncrementer = 1750L
|
||||
when(buttonID){
|
||||
23 -> delayIncrementer += increment(player,1)
|
||||
25 -> delayIncrementer += increment(player,2)
|
||||
27 -> delayIncrementer += increment(player,3)
|
||||
24 -> decrement(player,1)
|
||||
26 -> decrement(player,2)
|
||||
28 -> decrement(player,3)
|
||||
21 -> confirm(player)
|
||||
}
|
||||
player.setAttribute("fr:time",System.currentTimeMillis() + delayIncrementer)
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(TRAVEL_LOG,12){player, _, _, _, _, _ ->
|
||||
toggleSortOrder(player)
|
||||
return@on true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun handle(player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int): Boolean {
|
||||
player ?: return false
|
||||
val delay = player.getAttribute("fr:time",0L)
|
||||
if(delay > System.currentTimeMillis()){
|
||||
return true
|
||||
}
|
||||
|
||||
var delayIncrementer = 1750L
|
||||
when(button){
|
||||
23 -> delayIncrementer += increment(player,1)
|
||||
25 -> delayIncrementer += increment(player,2)
|
||||
27 -> delayIncrementer += increment(player,3)
|
||||
24 -> decrement(player,1)
|
||||
26 -> decrement(player,2)
|
||||
28 -> decrement(player,3)
|
||||
21 -> confirm(player)
|
||||
12 -> delayIncrementer += toggleSortOrder(player)
|
||||
}
|
||||
player.setAttribute("fr:time",System.currentTimeMillis() + delayIncrementer)
|
||||
return true
|
||||
}
|
||||
|
||||
fun toggleSortOrder(player: Player): Long{
|
||||
private fun toggleSortOrder(player: Player): Long{
|
||||
val ring1index = player.getAttribute("fr:ring1",0)
|
||||
var toSet = player.getAttribute("fr:sortorder",true)
|
||||
toSet = !toSet
|
||||
|
|
@ -97,7 +100,7 @@ class FairyRingInterface : ComponentPlugin(){
|
|||
player.setAttribute("fr:ring$ring",nextIndex)
|
||||
}
|
||||
|
||||
fun confirm(player: Player){
|
||||
private fun confirm(player: Player){
|
||||
val ring1index = player.getAttribute("fr:ring1",0)
|
||||
val ring2index = player.getAttribute("fr:ring2",0)
|
||||
val ring3index = player.getAttribute("fr:ring3",0)
|
||||
|
|
@ -131,13 +134,6 @@ class FairyRingInterface : ComponentPlugin(){
|
|||
player.interfaceManager.close()
|
||||
player.teleporter.send(tile,TeleportManager.TeleportType.FAIRY_RING)
|
||||
}
|
||||
|
||||
override fun newInstance(arg: Any?): Plugin<Any> {
|
||||
ComponentDefinition.put(734,this)
|
||||
ComponentDefinition.put(735,this)
|
||||
return this
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum class FairyRing(val tile: Location?, val tip: String = "", val childId: Int = -1) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package rs09.game.interaction.item
|
|||
|
||||
import core.game.node.entity.player.link.quest.QuestRepository
|
||||
import rs09.game.interaction.InteractionListener
|
||||
import rs09.game.interaction.Listeners.run
|
||||
import rs09.game.interaction.InteractionListeners.run
|
||||
|
||||
class QuestCapeListener : InteractionListener() {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,43 +1,36 @@
|
|||
package rs09.game.node.entity.skill.farming
|
||||
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.interaction.NodeUsageEvent
|
||||
import core.game.interaction.UseWithHandler
|
||||
import core.game.node.item.Item
|
||||
import core.plugin.Initializable
|
||||
import core.plugin.Plugin
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.game.interaction.InteractionListener
|
||||
|
||||
@Initializable
|
||||
class LeprechaunNoter : UseWithHandler(*Plantable.values().map{ it.harvestItem }.toIntArray()) {
|
||||
override fun newInstance(arg: Any?): Plugin<Any> {
|
||||
addHandler(NPCs.TOOL_LEPRECHAUN_3021, NPC_TYPE,this)
|
||||
addHandler(NPCs.GOTH_LEPRECHAUN_8000, NPC_TYPE,this)
|
||||
addHandler(NPCs.TOOL_LEPRECHAUN_4965, NPC_TYPE,this)
|
||||
return this
|
||||
}
|
||||
class LeprechaunNoter : InteractionListener() {
|
||||
|
||||
override fun handle(event: NodeUsageEvent?): Boolean {
|
||||
event ?: return false
|
||||
val player = event.player ?: return false
|
||||
val usedItem = event.usedItem ?: return false
|
||||
val npc = event.usedWith.asNpc() ?: return false
|
||||
val CROPS = Plantable.values().map{ it.harvestItem }.toIntArray()
|
||||
val LEPRECHAUNS = intArrayOf(NPCs.TOOL_LEPRECHAUN_3021,NPCs.GOTH_LEPRECHAUN_8000,NPCs.TOOL_LEPRECHAUN_4965)
|
||||
|
||||
val expr = when(npc.id){
|
||||
3021 -> FacialExpression.OLD_NORMAL
|
||||
else -> FacialExpression.FRIENDLY
|
||||
}
|
||||
|
||||
if(usedItem.noteChange != usedItem.id){
|
||||
val amt = player.inventory.getAmount(usedItem.id)
|
||||
if(player.inventory.remove(Item(usedItem.id,amt))){
|
||||
player.inventory.add(Item(usedItem.noteChange,amt))
|
||||
override fun defineListeners() {
|
||||
onUseWith(NPC,CROPS,*LEPRECHAUNS){player, used, with ->
|
||||
val usedItem = used.asItem()
|
||||
val npc = with.asNpc()
|
||||
val expr = when(npc.id){
|
||||
3021 -> FacialExpression.OLD_NORMAL
|
||||
else -> FacialExpression.FRIENDLY
|
||||
}
|
||||
player.dialogueInterpreter.sendDialogues(npc.id,expr,"There ya go.")
|
||||
} else {
|
||||
player.dialogueInterpreter.sendDialogues(npc.id,expr,"But that's already a note!")
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
if(usedItem.noteChange != usedItem.id){
|
||||
val amt = player.inventory.getAmount(usedItem.id)
|
||||
if(player.inventory.remove(Item(usedItem.id,amt))){
|
||||
player.inventory.add(Item(usedItem.noteChange,amt))
|
||||
}
|
||||
player.dialogueInterpreter.sendDialogues(npc.id,expr,"There ya go.")
|
||||
} else {
|
||||
player.dialogueInterpreter.sendDialogues(npc.id,expr,"But that's already a note!")
|
||||
}
|
||||
|
||||
return@onUseWith true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,132 +1,99 @@
|
|||
package rs09.game.node.entity.skill.farming
|
||||
|
||||
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.entity.player.link.RunScript
|
||||
import core.game.node.item.Item
|
||||
import core.plugin.Initializable
|
||||
import core.plugin.Plugin
|
||||
import org.rs09.consts.Components
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.interaction.InterfaceListener
|
||||
|
||||
private const val varp = 615
|
||||
@Initializable
|
||||
class ToolLeprechaunInterface : ComponentPlugin() {
|
||||
override fun newInstance(arg: Any?): Plugin<Any> {
|
||||
ComponentDefinition.put(Components.FARMING_TOOLS_125,this)
|
||||
ComponentDefinition.put(Components.FARMING_TOOLS_SIDE_126,this)
|
||||
return this
|
||||
}
|
||||
class ToolLeprechaunInterface : InterfaceListener() {
|
||||
|
||||
override fun open(player: Player?, component: Component?) {
|
||||
component ?: return
|
||||
super.open(player, component)
|
||||
player?.varpManager?.flagSave(varp)
|
||||
if(component.id == Components.FARMING_TOOLS_125) {
|
||||
player?.interfaceManager?.openSingleTab(Component(Components.FARMING_TOOLS_SIDE_126))
|
||||
component.setCloseEvent { pl, _ ->
|
||||
pl?.interfaceManager?.closeSingleTab()
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
private val FARMING_TOOLS = Components.FARMING_TOOLS_125
|
||||
private val TOOLS_SIDE = Components.FARMING_TOOLS_SIDE_126
|
||||
|
||||
override fun handle(player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int): Boolean {
|
||||
player ?: return false
|
||||
component ?: return false
|
||||
|
||||
when(component.id){
|
||||
|
||||
Components.FARMING_TOOLS_125 -> {
|
||||
when(button){
|
||||
33 -> doWithdrawal(player, Items.RAKE_5341,::setHasRake,::hasRake)
|
||||
|
||||
34 -> doWithdrawal(player,Items.SEED_DIBBER_5343,::setHasDibber,::hasDibber)
|
||||
|
||||
35 -> doWithdrawal(player,Items.SPADE_952,::setHasSpade,::hasSpade)
|
||||
|
||||
36 -> {
|
||||
val sec = if(hasMagicSecateurs(player)) Items.MAGIC_SECATEURS_7409 else Items.SECATEURS_5329
|
||||
doWithdrawal(player,sec,::setHasSecateurs,::hasSecateurs)
|
||||
}
|
||||
|
||||
37 -> {
|
||||
if(!hasWateringCan(player)){
|
||||
player.dialogueInterpreter.sendDialogue("You don't have any of those stored.")
|
||||
} else {
|
||||
player.inventory.add(Item(getWateringCan(player)))
|
||||
setNoWateringCan(player)
|
||||
}
|
||||
}
|
||||
|
||||
38 -> doWithdrawal(player,Items.GARDENING_TROWEL_5325,::setHasGardeningTrowel,::hasGardeningTrowel)
|
||||
|
||||
39 -> doStackedWithdrawal(player,Items.BUCKET_1925,getAmount(opcode),::updateBuckets,::getNumBuckets)
|
||||
|
||||
40 -> doStackedWithdrawal(player,Items.COMPOST_6032,getAmount(opcode),::updateCompost,::getNumCompost)
|
||||
|
||||
41 -> doStackedWithdrawal(player,Items.SUPERCOMPOST_6034,getAmount(opcode),::updateSuperCompost,::getNumSuperCompost)
|
||||
}
|
||||
}
|
||||
|
||||
Components.FARMING_TOOLS_SIDE_126 -> {
|
||||
|
||||
when(button){
|
||||
|
||||
18 -> doDeposit(player,Items.RAKE_5341,::setHasRake,::hasRake)
|
||||
|
||||
19 -> doDeposit(player,Items.SEED_DIBBER_5343,::setHasDibber,::hasDibber)
|
||||
|
||||
20 -> doDeposit(player,Items.SPADE_952,::setHasSpade,::hasSpade)
|
||||
|
||||
21 -> {
|
||||
if(!player.inventory.contains(Items.SECATEURS_5329,1) && !player.inventory.contains(Items.MAGIC_SECATEURS_7409,1)){
|
||||
player.dialogueInterpreter.sendDialogue("You don't have any of those to store.")
|
||||
} else if (!hasSecateurs(player)){
|
||||
if(player.inventory.contains(Items.MAGIC_SECATEURS_7409,1)){
|
||||
player.inventory.remove(Item(Items.MAGIC_SECATEURS_7409))
|
||||
setHasSecateurs(player,true)
|
||||
setHasMagicSecateurs(player,true)
|
||||
} else {
|
||||
player.inventory.remove(Item(Items.SECATEURS_5329))
|
||||
setHasSecateurs(player,true)
|
||||
setHasMagicSecateurs(player,false)
|
||||
}
|
||||
} else {
|
||||
player.dialogueInterpreter.sendDialogue("You already have one of those stored.")
|
||||
}
|
||||
}
|
||||
|
||||
22 -> {
|
||||
val can = getHighestCan(player)
|
||||
if(can == null){
|
||||
player.dialogueInterpreter.sendDialogue("You don't have any of those to store.")
|
||||
} else if(!hasWateringCan(player)){
|
||||
player.inventory.remove(can)
|
||||
setWateringCan(player,can)
|
||||
} else {
|
||||
player.dialogueInterpreter.sendDialogue("You already have one of those stored.")
|
||||
}
|
||||
}
|
||||
|
||||
23 -> doDeposit(player,Items.GARDENING_TROWEL_5325,::setHasGardeningTrowel,::hasGardeningTrowel)
|
||||
|
||||
24 -> doStackedDeposit(player,Items.BUCKET_1925,getAmount(opcode),::updateBuckets,::getNumBuckets)
|
||||
|
||||
25 -> doStackedDeposit(player,Items.COMPOST_6032,getAmount(opcode),::updateCompost,::getNumCompost)
|
||||
|
||||
26 -> doStackedDeposit(player,Items.SUPERCOMPOST_6034,getAmount(opcode),::updateSuperCompost,::getNumSuperCompost)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
override fun defineListeners() {
|
||||
|
||||
onOpen(FARMING_TOOLS){player, component ->
|
||||
player.varpManager?.flagSave(varp)
|
||||
player.interfaceManager.openSingleTab(Component(TOOLS_SIDE))
|
||||
return@onOpen true
|
||||
}
|
||||
|
||||
onClose(FARMING_TOOLS){player, _ ->
|
||||
player.interfaceManager.closeSingleTab()
|
||||
}
|
||||
|
||||
on(FARMING_TOOLS){player, _, opcode, buttonID, _, _ ->
|
||||
when(buttonID){
|
||||
33 -> doWithdrawal(player, Items.RAKE_5341,::setHasRake,::hasRake)
|
||||
34 -> doWithdrawal(player,Items.SEED_DIBBER_5343,::setHasDibber,::hasDibber)
|
||||
35 -> doWithdrawal(player,Items.SPADE_952,::setHasSpade,::hasSpade)
|
||||
36 -> {
|
||||
val sec = if(hasMagicSecateurs(player)) Items.MAGIC_SECATEURS_7409 else Items.SECATEURS_5329
|
||||
doWithdrawal(player,sec,::setHasSecateurs,::hasSecateurs)
|
||||
}
|
||||
37 -> {
|
||||
if(!hasWateringCan(player)){
|
||||
player.dialogueInterpreter.sendDialogue("You don't have any of those stored.")
|
||||
} else {
|
||||
player.inventory.add(Item(getWateringCan(player)))
|
||||
setNoWateringCan(player)
|
||||
}
|
||||
}
|
||||
38 -> doWithdrawal(player,Items.GARDENING_TROWEL_5325,::setHasGardeningTrowel,::hasGardeningTrowel)
|
||||
39 -> doStackedWithdrawal(player,Items.BUCKET_1925,getAmount(opcode),::updateBuckets,::getNumBuckets)
|
||||
40 -> doStackedWithdrawal(player,Items.COMPOST_6032,getAmount(opcode),::updateCompost,::getNumCompost)
|
||||
41 -> doStackedWithdrawal(player,Items.SUPERCOMPOST_6034,getAmount(opcode),::updateSuperCompost,::getNumSuperCompost)
|
||||
}
|
||||
player.varpManager.get(varp).send(player)
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(TOOLS_SIDE){player, _, opcode, buttonID, _, _ ->
|
||||
when(buttonID){
|
||||
18 -> doDeposit(player,Items.RAKE_5341,::setHasRake,::hasRake)
|
||||
19 -> doDeposit(player,Items.SEED_DIBBER_5343,::setHasDibber,::hasDibber)
|
||||
20 -> doDeposit(player,Items.SPADE_952,::setHasSpade,::hasSpade)
|
||||
21 -> {
|
||||
if(!player.inventory.contains(Items.SECATEURS_5329,1) && !player.inventory.contains(Items.MAGIC_SECATEURS_7409,1)){
|
||||
player.dialogueInterpreter.sendDialogue("You don't have any of those to store.")
|
||||
} else if (!hasSecateurs(player)){
|
||||
if(player.inventory.contains(Items.MAGIC_SECATEURS_7409,1)){
|
||||
player.inventory.remove(Item(Items.MAGIC_SECATEURS_7409))
|
||||
setHasSecateurs(player,true)
|
||||
setHasMagicSecateurs(player,true)
|
||||
} else {
|
||||
player.inventory.remove(Item(Items.SECATEURS_5329))
|
||||
setHasSecateurs(player,true)
|
||||
setHasMagicSecateurs(player,false)
|
||||
}
|
||||
} else {
|
||||
player.dialogueInterpreter.sendDialogue("You already have one of those stored.")
|
||||
}
|
||||
}
|
||||
22 -> {
|
||||
val can = getHighestCan(player)
|
||||
if(can == null){
|
||||
player.dialogueInterpreter.sendDialogue("You don't have any of those to store.")
|
||||
} else if(!hasWateringCan(player)){
|
||||
player.inventory.remove(can)
|
||||
setWateringCan(player,can)
|
||||
} else {
|
||||
player.dialogueInterpreter.sendDialogue("You already have one of those stored.")
|
||||
}
|
||||
}
|
||||
23 -> doDeposit(player,Items.GARDENING_TROWEL_5325,::setHasGardeningTrowel,::hasGardeningTrowel)
|
||||
24 -> doStackedDeposit(player,Items.BUCKET_1925,getAmount(opcode),::updateBuckets,::getNumBuckets)
|
||||
25 -> doStackedDeposit(player,Items.COMPOST_6032,getAmount(opcode),::updateCompost,::getNumCompost)
|
||||
26 -> doStackedDeposit(player,Items.SUPERCOMPOST_6034,getAmount(opcode),::updateSuperCompost,::getNumSuperCompost)
|
||||
}
|
||||
player.varpManager.get(varp).send(player)
|
||||
return@on true
|
||||
}
|
||||
|
||||
player.varpManager.get(varp).send(player)
|
||||
return true
|
||||
}
|
||||
|
||||
private fun doWithdrawal(player: Player?, item: Int, withdrawMethod: (Player?,Boolean) -> Unit, checkMethod: (Player?) -> Boolean){
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import core.plugin.PluginType
|
|||
import io.github.classgraph.ClassGraph
|
||||
import io.github.classgraph.ClassInfo
|
||||
import rs09.game.interaction.InteractionListener
|
||||
import rs09.game.interaction.InterfaceListener
|
||||
import rs09.game.system.SystemLogger
|
||||
import rs09.game.system.command.Command
|
||||
import java.util.*
|
||||
|
|
@ -77,6 +78,10 @@ object PluginManager {
|
|||
clazz.defineListeners()
|
||||
clazz.defineDestinationOverrides()
|
||||
}
|
||||
result.getSubclasses("rs09.game.interaction.InterfaceListener").forEach {
|
||||
val clazz = it.loadClass().newInstance() as InterfaceListener
|
||||
clazz.defineListeners()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue