mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-13 10:00:17 -07:00
Add entity passthrough to destination overrides
This commit is contained in:
parent
cd641fdaaf
commit
0cb1e53f67
9 changed files with 23 additions and 20 deletions
|
|
@ -14,6 +14,7 @@ import core.net.packet.PacketRepository;
|
||||||
import core.net.packet.context.PlayerContext;
|
import core.net.packet.context.PlayerContext;
|
||||||
import core.net.packet.out.ClearMinimapFlag;
|
import core.net.packet.out.ClearMinimapFlag;
|
||||||
import kotlin.jvm.functions.Function1;
|
import kotlin.jvm.functions.Function1;
|
||||||
|
import kotlin.jvm.functions.Function2;
|
||||||
import rs09.game.system.SystemLogger;
|
import rs09.game.system.SystemLogger;
|
||||||
|
|
||||||
import java.util.Deque;
|
import java.util.Deque;
|
||||||
|
|
@ -75,7 +76,7 @@ public abstract class MovementPulse extends Pulse {
|
||||||
*/
|
*/
|
||||||
private boolean near;
|
private boolean near;
|
||||||
|
|
||||||
private Function1<Node,Location> overrideMethod;
|
private Function2<Entity,Node,Location> overrideMethod;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new {@code MovementPulse} {@code Object}.
|
* Constructs a new {@code MovementPulse} {@code Object}.
|
||||||
|
|
@ -145,7 +146,7 @@ public abstract class MovementPulse extends Pulse {
|
||||||
this.destinationFlag = destinationFlag;
|
this.destinationFlag = destinationFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MovementPulse(Entity mover, Node destination, DestinationFlag destinationFlag, Function1<Node,Location> method){
|
public MovementPulse(Entity mover, Node destination, DestinationFlag destinationFlag, Function2<Entity,Node,Location> method){
|
||||||
this(mover,destination,null,false);
|
this(mover,destination,null,false);
|
||||||
this.destinationFlag = destinationFlag;
|
this.destinationFlag = destinationFlag;
|
||||||
this.overrideMethod = method;
|
this.overrideMethod = method;
|
||||||
|
|
@ -241,7 +242,7 @@ public abstract class MovementPulse extends Pulse {
|
||||||
loc = destinationFlag.getDestination(mover, destination);
|
loc = destinationFlag.getDestination(mover, destination);
|
||||||
}
|
}
|
||||||
if(overrideMethod != null){
|
if(overrideMethod != null){
|
||||||
loc = overrideMethod.invoke(destination);
|
loc = overrideMethod.invoke(mover,destination);
|
||||||
if(loc == destination.getLocation()) loc = destinationFlag.getDestination(mover,destination);
|
if(loc == destination.getLocation()) loc = destinationFlag.getDestination(mover,destination);
|
||||||
}
|
}
|
||||||
if (loc == null && optionHandler != null) {
|
if (loc == null && optionHandler != null) {
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ class NPCTradePlugin : InteractionListener() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun defineDestinationOverrides() {
|
override fun defineDestinationOverrides() {
|
||||||
setDest(NPC,"trade","shop"){node ->
|
setDest(NPC,"trade","shop"){_,node ->
|
||||||
val npc = node as NPC
|
val npc = node as NPC
|
||||||
if (npc.getAttribute("facing_booth", false)) {
|
if (npc.getAttribute("facing_booth", false)) {
|
||||||
val offsetX = npc.direction.stepX shl 1
|
val offsetX = npc.direction.stepX shl 1
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ class SupriseExamListeners : InteractionListener() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun defineDestinationOverrides() {
|
override fun defineDestinationOverrides() {
|
||||||
setDest(NPC,MORDAUT){_ ->
|
setDest(NPC,MORDAUT){_,_ ->
|
||||||
return@setDest Location.create(1886, 5025, 0)
|
return@setDest Location.create(1886, 5025, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ class WaterfallListeners : InteractionListener(){
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun defineDestinationOverrides() {
|
override fun defineDestinationOverrides() {
|
||||||
setDest(NPC,HUDON){
|
setDest(NPC,HUDON){_,_ ->
|
||||||
return@setDest Location.create(2512, 3481, 0)
|
return@setDest Location.create(2512, 3481, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package rs09.game.interaction
|
package rs09.game.interaction
|
||||||
|
|
||||||
import core.game.node.Node
|
import core.game.node.Node
|
||||||
|
import core.game.node.entity.Entity
|
||||||
import core.game.node.entity.player.Player
|
import core.game.node.entity.player.Player
|
||||||
import core.game.world.map.Location
|
import core.game.world.map.Location
|
||||||
|
|
||||||
|
|
@ -38,14 +39,14 @@ abstract class InteractionListener : Listener{
|
||||||
|
|
||||||
open fun defineDestinationOverrides(){}
|
open fun defineDestinationOverrides(){}
|
||||||
|
|
||||||
fun setDest(type: Int, id: Int,handler: (Node) -> Location){
|
fun setDest(type: Int, id: Int,handler: (Entity, Node) -> Location){
|
||||||
InteractionListeners.addDestOverride(type,id,handler)
|
InteractionListeners.addDestOverride(type,id,handler)
|
||||||
}
|
}
|
||||||
fun setDest(type:Int, vararg options: String, handler: (Node) -> Location){
|
fun setDest(type:Int, vararg options: String, handler: (Entity, Node) -> Location){
|
||||||
InteractionListeners.addDestOverrides(type,options,handler)
|
InteractionListeners.addDestOverrides(type,options,handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setDest(type: Int, ids: IntArray, vararg options: String, handler: (Node) -> Location){
|
fun setDest(type: Int, ids: IntArray, vararg options: String, handler: (Entity, Node) -> Location){
|
||||||
InteractionListeners.addDestOverrides(type,ids,options,handler)
|
InteractionListeners.addDestOverrides(type,ids,options,handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,14 @@ import core.game.interaction.DestinationFlag
|
||||||
import core.game.interaction.MovementPulse
|
import core.game.interaction.MovementPulse
|
||||||
import core.game.interaction.Option
|
import core.game.interaction.Option
|
||||||
import core.game.node.Node
|
import core.game.node.Node
|
||||||
|
import core.game.node.entity.Entity
|
||||||
import core.game.node.entity.player.Player
|
import core.game.node.entity.player.Player
|
||||||
import core.game.world.map.Location
|
import core.game.world.map.Location
|
||||||
|
|
||||||
object InteractionListeners {
|
object InteractionListeners {
|
||||||
private val listeners = HashMap<String,(Player, Node) -> Boolean>(1000)
|
private val listeners = HashMap<String,(Player, Node) -> Boolean>(1000)
|
||||||
private val useWithListeners = HashMap<String,(Player,Node,Node) -> Boolean>(1000)
|
private val useWithListeners = HashMap<String,(Player,Node,Node) -> Boolean>(1000)
|
||||||
private val destinationOverrides = HashMap<String,(Node) -> Location>(100)
|
private val destinationOverrides = HashMap<String,(Entity, Node) -> Location>(100)
|
||||||
private val equipListeners = HashMap<String,(Player,Node) -> Boolean>(10)
|
private val equipListeners = HashMap<String,(Player,Node) -> Boolean>(10)
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
|
|
@ -89,19 +90,19 @@ object InteractionListeners {
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun addDestOverride(type: Int, id: Int, method: (Node) -> Location){
|
fun addDestOverride(type: Int, id: Int, method: (Entity,Node) -> Location){
|
||||||
destinationOverrides["$type:$id"] = method
|
destinationOverrides["$type:$id"] = method
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun addDestOverrides(type: Int,options: Array<out String>, method: (Node) -> Location){
|
fun addDestOverrides(type: Int,options: Array<out String>, method: (Entity,Node) -> Location){
|
||||||
for(opt in options){
|
for(opt in options){
|
||||||
destinationOverrides["$type:${opt.toLowerCase()}"] = method
|
destinationOverrides["$type:${opt.toLowerCase()}"] = method
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun addDestOverrides(type: Int, ids: IntArray,options: Array<out String>, method: (Node) -> Location){
|
fun addDestOverrides(type: Int, ids: IntArray,options: Array<out String>, method: (Entity,Node) -> Location){
|
||||||
for(id in ids){
|
for(id in ids){
|
||||||
for(opt in options){
|
for(opt in options){
|
||||||
destinationOverrides["$type:$id:${opt.toLowerCase()}"] = method
|
destinationOverrides["$type:$id:${opt.toLowerCase()}"] = method
|
||||||
|
|
@ -110,17 +111,17 @@ object InteractionListeners {
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getOverride(type: Int, id:Int, option: String): ((Node) -> Location)?{
|
fun getOverride(type: Int, id:Int, option: String): ((Entity, Node) -> Location)?{
|
||||||
return destinationOverrides["$type:$id:${option.toLowerCase()}"]
|
return destinationOverrides["$type:$id:${option.toLowerCase()}"]
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getOverride(type: Int,id: Int): ((Node) -> Location)?{
|
fun getOverride(type: Int,id: Int): ((Entity,Node) -> Location)?{
|
||||||
return destinationOverrides["$type:$id"]
|
return destinationOverrides["$type:$id"]
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getOverride(type: Int,option: String): ((Node) -> Location)?{
|
fun getOverride(type: Int,option: String): ((Entity,Node) -> Location)?{
|
||||||
return destinationOverrides["$type:$option"]
|
return destinationOverrides["$type:$option"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ class NPCTalkListener : InteractionListener() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun defineDestinationOverrides() {
|
override fun defineDestinationOverrides() {
|
||||||
setDest(NPC,"talk","talk-to"){node ->
|
setDest(NPC,"talk","talk-to"){_,node ->
|
||||||
val npc = node as NPC
|
val npc = node as NPC
|
||||||
if (npc.getAttribute("facing_booth", false)) {
|
if (npc.getAttribute("facing_booth", false)) {
|
||||||
val offsetX = npc.direction.stepX shl 1
|
val offsetX = npc.direction.stepX shl 1
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,10 @@ class CanoeStationListener : InteractionListener() {
|
||||||
private val FLOAT = Animation(3304)
|
private val FLOAT = Animation(3304)
|
||||||
|
|
||||||
override fun defineDestinationOverrides() {
|
override fun defineDestinationOverrides() {
|
||||||
setDest(SCENERY,STATION_IDs,"chop-down"){ node ->
|
setDest(SCENERY,STATION_IDs,"chop-down"){ _,node ->
|
||||||
return@setDest CanoeUtils.getChopLocation(node.location)
|
return@setDest CanoeUtils.getChopLocation(node.location)
|
||||||
}
|
}
|
||||||
setDest(SCENERY,STATION_IDs,"shape-canoe","float canoe","float log","float waka"){ node ->
|
setDest(SCENERY,STATION_IDs,"shape-canoe","float canoe","float log","float waka"){ _,node ->
|
||||||
return@setDest CanoeUtils.getCraftFloatLocation(node.location)
|
return@setDest CanoeUtils.getCraftFloatLocation(node.location)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,7 @@ class JatizsoListeners : InteractionListener() {
|
||||||
return@on true
|
return@on true
|
||||||
}
|
}
|
||||||
|
|
||||||
setDest(NPC, NPCs.MAGNUS_GRAM_5488){_ ->
|
setDest(NPC, NPCs.MAGNUS_GRAM_5488){_,_ ->
|
||||||
return@setDest Location.create(2416, 3801, 0)
|
return@setDest Location.create(2416, 3801, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue