Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -2266,5 +2266,11 @@
|
||||
"name": "Norse Code",
|
||||
"indexId": "439",
|
||||
"borders": "{2404,3797,2421,3820}"
|
||||
},
|
||||
{
|
||||
"id": "225",
|
||||
"name": "Volcanic Vikings",
|
||||
"indexId": "440",
|
||||
"borders": "{2304,3785,2635,3818}"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -7745,7 +7745,7 @@
|
||||
},
|
||||
{
|
||||
"npc_id": "5529",
|
||||
"loc_data": "{2323,3790,0,1,1}-{2323,3795,0,1,0}-{2322,3795,0,1,0}-{2317,3794,0,1,6}-{2317,3790,0,1,3}-{2321,3792,0,1,6}-{2327,3796,0,1,7}-{2319,3791,0,1,6}"
|
||||
"loc_data": "{2323,3790,0,1,1}-{2323,3795,0,1,0}-{2322,3795,0,1,0}-{2317,3794,0,1,6}-{2317,3790,0,1,3}-{2321,3792,0,1,6}"
|
||||
},
|
||||
{
|
||||
"npc_id": "5531",
|
||||
@@ -10682,5 +10682,9 @@
|
||||
{
|
||||
"npc_id": "5482",
|
||||
"loc_data": "{2422,3781,0,1,0}"
|
||||
},
|
||||
{
|
||||
"npc_id": "5463",
|
||||
"loc_data": "{2324,3809,0,1,0}-{2317,3802,0,1,0}"
|
||||
}
|
||||
]
|
||||
@@ -73,7 +73,9 @@ public final class ClimbActionHandler {
|
||||
if (SpecialLadders.getDestination(startLadder.getLocation()) != null) {
|
||||
Location destination = SpecialLadders.getDestination(startLadder.getLocation());
|
||||
climb(player, animation, destination);
|
||||
SpecialLadders.getSpecialLadder(startLadder.getLocation()).checkAchievement(player);
|
||||
if(SpecialLadders.getSpecialLadder(startLadder.getLocation()) != null) {
|
||||
SpecialLadders.getSpecialLadder(startLadder.getLocation()).checkAchievement(player);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
switch (option) {
|
||||
|
||||
@@ -25,7 +25,7 @@ public final class WaterSourcePlugin extends UseWithHandler {
|
||||
/**
|
||||
* Represents the objects to use the buckets on.
|
||||
*/
|
||||
private static final int[] OBJECTS = new int[] { 16302, 6827, 11661, 24160, 34577, 15936, 15937, 15938, 23920, 35469, 24265, 153, 879, 880, 2864, 6232, 10436, 10437, 10827, 11007, 11759, 21764, 22973, 24161, 24214, 24265, 28662, 30223, 30820, 34579, 36781, 873, 874, 4063, 6151, 8699, 9143, 9684, 10175, 12279, 12974, 13563, 13564, 14868, 14917, 15678, 16704, 16705, 20358, 22715, 24112, 24314, 25729, 25929, 26966, 29105, 33458, 34082, 34411, 34496, 34547, 34566, 35762, 36971, 37154, 37155, 878, 884, 3264, 3305, 3359, 4004, 4005, 6097, 6249, 6549, 8747, 8927, 11793, 12201, 12897, 24166, 26945, 31359, 32023, 32024, 34576, 35671, 40063, 13561, 13563, 13559 };
|
||||
private static final int[] OBJECTS = new int[] { 21355, 16302, 6827, 11661, 24160, 34577, 15936, 15937, 15938, 23920, 35469, 24265, 153, 879, 880, 2864, 6232, 10436, 10437, 10827, 11007, 11759, 21764, 22973, 24161, 24214, 24265, 28662, 30223, 30820, 34579, 36781, 873, 874, 4063, 6151, 8699, 9143, 9684, 10175, 12279, 12974, 13563, 13564, 14868, 14917, 15678, 16704, 16705, 20358, 22715, 24112, 24314, 25729, 25929, 26966, 29105, 33458, 34082, 34411, 34496, 34547, 34566, 35762, 36971, 37154, 37155, 878, 884, 3264, 3305, 3359, 4004, 4005, 6097, 6249, 6549, 8747, 8927, 11793, 12201, 12897, 24166, 26945, 31359, 32023, 32024, 34576, 35671, 40063, 13561, 13563, 13559 };
|
||||
|
||||
/**
|
||||
* Represents the animation to use.
|
||||
@@ -63,7 +63,7 @@ public final class WaterSourcePlugin extends UseWithHandler {
|
||||
* @version 1.0
|
||||
*/
|
||||
public enum WaterRecipient {
|
||||
BUCKET(new Item(1925), new Item(1929)),
|
||||
BUCKET(new Item(1925), new Item(1929), "You fill the bucket with water."),
|
||||
VIAL(new Item(229), new Item(227)),
|
||||
JUG(new Item(1935), new Item(1937)),
|
||||
BOWL(new Item(1923), new Item(1921)),
|
||||
|
||||
@@ -112,6 +112,8 @@ public abstract class MapZone implements Zone {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean handleUseWith(Player player, Item used, Node with){return false;}
|
||||
|
||||
/**
|
||||
* Handles an reward button.
|
||||
* @param player The player.
|
||||
|
||||
@@ -7,6 +7,7 @@ import core.game.node.entity.combat.CombatStyle;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.node.entity.player.link.music.MusicZone;
|
||||
import core.game.node.entity.player.link.request.RequestType;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.world.map.Location;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -149,6 +150,18 @@ public final class ZoneMonitor {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a zone handles a useWith interaction
|
||||
*/
|
||||
public boolean useWith(Item used, Node with){
|
||||
for (RegionZone z : zones) {
|
||||
if (z.getZone().handleUseWith(entity.asPlayer(), used,with)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the player handled the reward button using a map zone.
|
||||
* @param interfaceId The interface id.
|
||||
|
||||
@@ -72,6 +72,9 @@ public class ItemActionPacket implements IncomingPacket {
|
||||
if(InteractionListeners.run(item,npc,2,player)){
|
||||
return;
|
||||
}
|
||||
if(player.getZoneMonitor().useWith(used,npc)){
|
||||
return;
|
||||
}
|
||||
event = new NodeUsageEvent(player, interfaceId, item, npc);
|
||||
try {
|
||||
UseWithHandler.run(event);
|
||||
@@ -97,6 +100,9 @@ public class ItemActionPacket implements IncomingPacket {
|
||||
if(PluginInteractionManager.handle(player,event)){
|
||||
return;
|
||||
}
|
||||
if(player.getZoneMonitor().useWith(used,player)){
|
||||
return;
|
||||
}
|
||||
event = new NodeUsageEvent(player, interfaceId, item, target);
|
||||
try {
|
||||
UseWithHandler.run(event);
|
||||
@@ -131,6 +137,9 @@ public class ItemActionPacket implements IncomingPacket {
|
||||
if(InteractionListeners.run(used,with,0,player)){
|
||||
return;
|
||||
}
|
||||
if(player.getZoneMonitor().useWith(used,with)){
|
||||
return;
|
||||
}
|
||||
if (usedItemId < usedWithItemId) {
|
||||
item = used;
|
||||
used = with;
|
||||
@@ -182,6 +191,9 @@ public class ItemActionPacket implements IncomingPacket {
|
||||
if(InteractionListeners.run(used,object,1,player)){
|
||||
return;
|
||||
}
|
||||
if(player.getZoneMonitor().useWith(used,object)){
|
||||
return;
|
||||
}
|
||||
event = new NodeUsageEvent(player, 0, used, object);
|
||||
|
||||
/**
|
||||
|
||||
@@ -593,6 +593,16 @@ object ContentAPI {
|
||||
return RegionManager.getLocalNpcs(entity).firstOrNull { it.id == id }
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a list of nearby NPCs that match the given IDs.
|
||||
* @param entity the entity to check around
|
||||
* @param ids the IDs of the NPCs to look for
|
||||
*/
|
||||
@JvmStatic
|
||||
fun findLocalNPCs(entity: Entity, ids: IntArray): List<NPC>{
|
||||
return RegionManager.getSurroundingNPCs(entity).filter { it.id in ids }.toList()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of an attribute key from the Entity's attributes store
|
||||
* @param entity the entity to get the attribute from
|
||||
|
||||
+5
-5
@@ -28,14 +28,14 @@ class TowerGuardDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
1 -> playerl(FacialExpression.HALF_THINKING, "No need to shout.").also { stage++ }
|
||||
2 -> npc(FacialExpression.NEUTRAL, "I'M SORRY I'VE BEEN SHOUTING","INSULTS SO LONG I CAN'T HELP IT!").also { stage++ }
|
||||
3 -> playerl(FacialExpression.HALF_THINKING, "Who are you insulting?").also { stage++ }
|
||||
4 -> npc(FacialExpression.NEUTRAL, "THE TOWER IN NEITIZNOT.","THEY SHOUT INSULTS BACK.").also { stage++ }
|
||||
4 -> npc(FacialExpression.NEUTRAL, "THE TOWER IN ${if(npc.id == NPCs.GUARD_5489) "NEITIZNOT" else "JATIZSO"}.","THEY SHOUT INSULTS BACK.").also { stage++ }
|
||||
5 -> playerl(FacialExpression.ASKING, "Err, why?" ).also { stage++ }
|
||||
6 -> npc(FacialExpression.NEUTRAL, "THE KING TELLS US TO.").also { stage++ }
|
||||
7 -> playerl(FacialExpression.HALF_THINKING, "Your King is a strange person.").also { stage++ }
|
||||
6 -> npc(FacialExpression.NEUTRAL, "THE ${if(npc.id == NPCs.GUARD_5489) "KING" else "BURGHER"} TELLS US TO.").also { stage++ }
|
||||
7 -> playerl(FacialExpression.HALF_THINKING, "Your ${if(npc.id == NPCs.GUARD_5489) "King" else "Burgher"} is a strange person.").also { stage++ }
|
||||
8 -> options("Can I watch? I'm curious.", "Oh well, I'd better get going.").also { stage++ }
|
||||
9 -> when(buttonId){
|
||||
1 -> playerl(FacialExpression.ASKING, "Can I watch? I'm curious.").also { stage++ }
|
||||
2 -> npcl(FacialExpression.HALF_THINKING, "Oh well, I'd better get going.").also { stage = END_DIALOGUE }
|
||||
2 -> playerl(FacialExpression.HALF_THINKING, "Oh well, I'd better get going.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
10 -> npcl(FacialExpression.NEUTRAL, "IF YOU LIKE!").also {
|
||||
stage = END_DIALOGUE
|
||||
@@ -46,7 +46,7 @@ class TowerGuardDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.GUARD_5489)
|
||||
return intArrayOf(NPCs.GUARD_5489, NPCs.GUARD_5490)
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package rs09.game.content.dialogue.region.neitiznot
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
|
||||
@Initializable
|
||||
class FridleifShieldsonDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return FridleifShieldsonDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npcl(FacialExpression.FRIENDLY, "Greetings!")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
when(stage){
|
||||
0 -> playerl(FacialExpression.FRIENDLY, "Hello!").also { stage = END_DIALOGUE }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.FRIDLEIF_SHIELDSON_5505)
|
||||
}
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package rs09.game.content.dialogue.region.neitiznot
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
|
||||
@Initializable
|
||||
class GunnarHoldstromDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return GunnarHoldstromDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npcl(FacialExpression.HAPPY, "Ah, isn't it a lovely day?")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
when(stage){
|
||||
0 -> playerl(FacialExpression.ASKING, "It's not bad. What puts you in such a good mood?").also { stage++ }
|
||||
1 -> npcl(FacialExpression.HAPPY, "Oh, I just love my job. The smell of the sea breeze, the smell of the arctic pine sap, the smell of the yaks. I find it all so bracing.").also { stage++ }
|
||||
2 -> playerl(FacialExpression.ASKING, "Bracing? Hmmm. I think I might have chosen a different word.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.GUNNAR_HOLDSTROM_5511)
|
||||
}
|
||||
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package rs09.game.content.dialogue.region.neitiznot
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.npc.NPC
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
|
||||
@Initializable
|
||||
class JofridrMordstatterDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return JofridrMordstatterDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npc = args[0] as NPC
|
||||
npcl(FacialExpression.NEUTRAL, "Hello there. Would you like to see the goods I have for sale?")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
when (stage) {
|
||||
0 -> options("Yes please, Jofridr.", "No thank you, Jofridr.", "Why do you have so much wool in your store?").also { stage++ }
|
||||
1 -> when (buttonId) {
|
||||
1 -> playerl(FacialExpression.NEUTRAL, "Yes please, Jofridr.").also { stage = END_DIALOGUE }.also { npc.openShop(player) }
|
||||
2 -> playerl(FacialExpression.NEUTRAL, "No thank you, Jofridr.").also { stage = 5 }
|
||||
3 -> playerl(FacialExpression.THINKING, "Why do you have so much wool in your store? I haven't seen any sheep anywhere.").also { stage = 11}
|
||||
}
|
||||
5 -> npcl(FacialExpression.NEUTRAL,"Fair thee well.").also { stage = END_DIALOGUE }
|
||||
|
||||
11 -> npcl(FacialExpression.FRIENDLY,"Ah, I have contacts on the mainland. I have a sailor friend who brings me crates of wool on a regular basis.").also { stage++ }
|
||||
12 -> playerl(FacialExpression.ASKING,"What do you trade for it?").also { stage++ }
|
||||
13 -> npcl(FacialExpression.FRIENDLY,"Rope of course! What else can we sell? Fish would go off before it got so far south.").also { stage++ }
|
||||
14 -> playerl(FacialExpression.ASKING,"Where does all this rope go?").also { stage++ }
|
||||
15 -> npcl(FacialExpression.THINKING,"Err, I don't remember the name of the place very well. Dreinna? Drennor? Something like that.").also { stage++ }
|
||||
16 -> playerl(FacialExpression.NEUTRAL,"That's very interesting. Thanks Jofridr.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.JOFRIDR_MORDSTATTER_5509)
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package rs09.game.content.dialogue.region.neitiznot
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
|
||||
@Initializable
|
||||
class KjedeligUppsenDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return KjedeligUppsenDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npcl(FacialExpression.NEUTRAL, "I'm guarding the king, I cannot speak.")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
when(stage){
|
||||
0 -> playerl(FacialExpression.NEUTRAL, "Sorry.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.KJEDELIG_UPPSEN_5518)
|
||||
}
|
||||
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package rs09.game.content.dialogue.region.neitiznot
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
|
||||
@Initializable
|
||||
class LisseIsaaksonDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return LisseIsaaksonDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npcl(FacialExpression.FRIENDLY, "Hello, visitor!")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
when(stage){
|
||||
0 -> playerl(FacialExpression.ASKING, "Hello. What are you up to?").also { stage++ }
|
||||
1 -> npcl(FacialExpression.FRIENDLY, "Ah, I was about to collect some yak's milk to make yak cheese.").also { stage++ }
|
||||
2 -> playerl(FacialExpression.HALF_WORRIED, "Eughr! Though I am curious. Can I try some?").also { stage++ }
|
||||
3 -> npcl(FacialExpression.SAD, "Sorry, no. The last outlander who ate my cheese was ill for a month.").also { stage++ }
|
||||
4 -> playerl(FacialExpression.ASKING, "So why don't you get ill as well?").also { stage++ }
|
||||
5 -> npcl(FacialExpression.FRIENDLY, "Well, we eat yak milk products every day, from when we're born. So I suppose we're used to it. Anyway I should stop yakking - haha - and get on with my work.").also { stage++ }
|
||||
6 -> playerl(FacialExpression.HAPPY, "I'm glad to see that puns are common everywhere in Gielinor; even here.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.LISSE_ISAAKSON_5513)
|
||||
}
|
||||
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package rs09.game.content.dialogue.region.neitiznot
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
|
||||
@Initializable
|
||||
class MortenHoldstromDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return MortenHoldstromDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npcl(FacialExpression.NEUTRAL, "Good day to you.")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
when(stage){
|
||||
0 -> playerl(FacialExpression.ASKING, "Hello. What are you up to?").also { stage++ }
|
||||
1 -> npcl(FacialExpression.HAPPY, "Ah, today is a surströmming day! The herring I buried six months ago is ready to be dug up.").also { stage++ }
|
||||
2 -> playerl(FacialExpression.DISGUSTED, "Eughr! What are you going to do with it?").also { stage++ }
|
||||
3 -> npcl(FacialExpression.HAPPY, "Eat it, of course! It will be fermented just-right by now.").also { stage++ }
|
||||
4 -> playerl(FacialExpression.ASKING, "Fermented? You eat rotten fish?").also { stage++ }
|
||||
5 -> npcl(FacialExpression.HAPPY, "Hmmm, tasty. I'm guessing you don't want to come round and try it?").also { stage++ }
|
||||
6 -> playerl(FacialExpression.ANNOYED, "You guess correctly.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.MORTEN_HOLDSTROM_5510)
|
||||
}
|
||||
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package rs09.game.content.dialogue.region.neitiznot
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
|
||||
@Initializable
|
||||
class SlugHemliggsenDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return SlugHemliggsenDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npcl(FacialExpression.WORRIED, "Shhh. Go away. I'm not allowed to talk to you.")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
playerl(FacialExpression.ANNOYED, "Fine, whatever ...")
|
||||
stage = END_DIALOGUE
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.SLUG_HEMLIGSSEN_5520)
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package rs09.game.content.dialogue.region.neitiznot
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
|
||||
@Initializable
|
||||
class ThakkradSigmundsonDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return ThakkradSigmundsonDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npcl(FacialExpression.FRIENDLY, "Greetings! I can cure your Yak Hides if you'd like!")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
when(stage){
|
||||
0 -> playerl(FacialExpression.FRIENDLY, "Good to know!").also { stage = END_DIALOGUE }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.THAKKRAD_SIGMUNDSON_5506)
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package rs09.game.content.dialogue.region.neitiznot
|
||||
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
|
||||
@Initializable
|
||||
class TrogenKonungardeDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return TrogenKonungardeDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npcl(FacialExpression.NEUTRAL, "I'm guarding the king, I cannot speak.")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
when(stage){
|
||||
0 -> playerl(FacialExpression.NEUTRAL, "Sorry.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.TROGEN_KONUNGARDE_5519)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -151,6 +151,9 @@ object InteractionListeners {
|
||||
if(player.locks.isMovementLocked) return false
|
||||
player.pulseManager.run(object : MovementPulse(player, with, flag) {
|
||||
override fun pulse(): Boolean {
|
||||
if (player.zoneMonitor.useWith(used.asItem(), with)) {
|
||||
return true
|
||||
}
|
||||
player.faceLocation(with.location)
|
||||
if(flipped) method.invoke(player,with,used)
|
||||
else method.invoke(player,used,with)
|
||||
|
||||
@@ -19,6 +19,7 @@ class JatizsoListeners : InteractionListener() {
|
||||
val WEST_GATE_ZONE = ZoneBorders(2386,3797,2390,3801)
|
||||
val SOUTH_GAE_ZONE = ZoneBorders(2411,3795,2414,3799)
|
||||
val BELL = 21394
|
||||
val TOWER_GUARDS = intArrayOf(NPCs.GUARD_5490, NPCs.GUARD_5489)
|
||||
val GUARDS = intArrayOf(NPCs.GUARD_5491, NPCs.GUARD_5492)
|
||||
val KING_CHEST = intArrayOf(21299,21300)
|
||||
val LINES = arrayOf(
|
||||
@@ -75,15 +76,15 @@ class JatizsoListeners : InteractionListener() {
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(NPCs.GUARD_5489, NPC, "watch-shouting"){player, node ->
|
||||
val local = ContentAPI.findLocalNPC(player, node.id)
|
||||
on(TOWER_GUARDS, NPC, "watch-shouting"){player, _ ->
|
||||
val local = ContentAPI.findLocalNPC(player, NPCs.GUARD_5489)
|
||||
ContentAPI.lock(player, 200)
|
||||
ContentAPI.face(local!!, Location.create(2371, 3801, 2))
|
||||
local.asNpc().isRespawn = false
|
||||
ContentAPI.submitIndividualPulse(player, object : Pulse(4){
|
||||
var id = node.id
|
||||
var id = NPCs.GUARD_5489
|
||||
var counter = 0
|
||||
val other = ContentAPI.findLocalNPC(player, getOther(node.id))
|
||||
val other = ContentAPI.findLocalNPC(player, getOther(NPCs.GUARD_5489))
|
||||
|
||||
override fun start() {
|
||||
other?.isRespawn = false
|
||||
@@ -92,12 +93,12 @@ class JatizsoListeners : InteractionListener() {
|
||||
override fun pulse(): Boolean {
|
||||
val npc = ContentAPI.findLocalNPC(player, id) ?: return false
|
||||
val index = when(id){
|
||||
node.id -> 0
|
||||
NPCs.GUARD_5489 -> 0
|
||||
else -> 1
|
||||
}
|
||||
if(index == 1 && counter == 5) return true
|
||||
ContentAPI.sendChat(npc, LINES[index][counter])
|
||||
if(npc.id != node.id) counter++
|
||||
if(npc.id != NPCs.GUARD_5489) counter++
|
||||
id = getOther(id)
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package rs09.game.interaction.region.rellekka
|
||||
|
||||
import api.ContentAPI
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.Node
|
||||
import core.game.node.entity.npc.NPC
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.item.Item
|
||||
import core.game.world.map.Location
|
||||
import core.game.world.map.zone.MapZone
|
||||
import core.game.world.map.zone.ZoneBorders
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.game.interaction.InteractionListener
|
||||
|
||||
class NeitiznotListeners : InteractionListener() {
|
||||
val STUMP = 21305
|
||||
|
||||
override fun defineListeners() {
|
||||
|
||||
on(STUMP, SCENERY, "cut-wood"){player, _ ->
|
||||
ContentAPI.sendPlayerDialogue(player, "I should probably leave this alone.", FacialExpression.HALF_THINKING)
|
||||
return@on true
|
||||
}
|
||||
|
||||
val zone = object : MapZone("Yakzone", true){
|
||||
override fun handleUseWith(player: Player, used: Item?, with: Node?): Boolean {
|
||||
if(with is NPC && with.id == NPCs.YAK_5529){
|
||||
ContentAPI.sendMessage(player, "The cow doesn't want that.")
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
ContentAPI.registerMapZone(zone, ZoneBorders(2313,3786,2331,3802))
|
||||
ContentAPI.addClimbDest(Location.create(2363, 3799, 0), Location.create(2364, 3799, 2))
|
||||
ContentAPI.addClimbDest(Location.create(2363, 3799, 2), Location.create(2362, 3799, 0))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package rs09.game.node.entity.npc.other
|
||||
|
||||
import api.ContentAPI
|
||||
import core.game.node.entity.npc.AbstractNPC
|
||||
import core.game.world.map.Location
|
||||
import core.plugin.Initializable
|
||||
import core.tools.RandomFunction
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.game.system.SystemLogger
|
||||
|
||||
@Initializable
|
||||
class IceTrollJatizsoCaves : AbstractNPC {
|
||||
//Constructor spaghetti because Arios I guess
|
||||
constructor() : super(NPCs.ICE_TROLL_MALE_5474, null, true) {}
|
||||
private constructor(id: Int, location: Location) : super(id, location) {}
|
||||
|
||||
override fun construct(id: Int, location: Location, vararg objects: Any?): AbstractNPC {
|
||||
return IceTrollJatizsoCaves(id, location)
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.ICE_TROLL_MALE_5474,NPCs.ICE_TROLL_RUNT_5473,NPCs.ICE_TROLL_FEMALE_5475)
|
||||
}
|
||||
|
||||
override fun tick() {
|
||||
val nearbyMiner = ContentAPI.findLocalNPC(this, NPCs.MINER_5497) ?: return super.tick()
|
||||
if(!inCombat() && nearbyMiner.location.withinDistance(location, 8)){
|
||||
attack(nearbyMiner)
|
||||
}
|
||||
super.tick()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package rs09.game.node.entity.npc.other
|
||||
|
||||
import core.game.node.entity.npc.AbstractNPC
|
||||
import core.game.world.map.Location
|
||||
import core.plugin.Initializable
|
||||
import core.tools.RandomFunction
|
||||
import org.rs09.consts.NPCs
|
||||
|
||||
@Initializable
|
||||
class YakNPC : AbstractNPC {
|
||||
//Constructor spaghetti because Arios I guess
|
||||
constructor() : super(NPCs.ICE_TROLL_MALE_5474, null, true) {}
|
||||
private constructor(id: Int, location: Location) : super(id, location) {}
|
||||
|
||||
override fun construct(id: Int, location: Location, vararg objects: Any?): AbstractNPC {
|
||||
return YakNPC(id,location)
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.YAK_5529)
|
||||
}
|
||||
|
||||
override fun tick() {
|
||||
if(RandomFunction.roll(20)){
|
||||
sendChat("Moo")
|
||||
}
|
||||
super.tick()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,13 +1,20 @@
|
||||
package rs09.game.system.command.sets
|
||||
|
||||
import api.ContentAPI
|
||||
import core.game.content.quest.tutorials.tutorialisland.CharacterDesign
|
||||
import core.game.node.entity.npc.NPC
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.system.task.Pulse
|
||||
import core.game.world.map.Location
|
||||
import core.game.world.map.RegionManager
|
||||
import core.game.world.update.flag.context.Animation
|
||||
import core.plugin.Initializable
|
||||
import rs09.game.content.dialogue.DialogueFile
|
||||
import rs09.game.interaction.InteractionListeners
|
||||
import rs09.game.interaction.SpadeDigListener
|
||||
import rs09.game.system.command.Command
|
||||
import rs09.game.world.GameWorld
|
||||
import rs09.tools.END_DIALOGUE
|
||||
import java.util.*
|
||||
|
||||
@Initializable
|
||||
@@ -116,5 +123,42 @@ class FunCommandSet : CommandSet(Command.Privilege.ADMIN) {
|
||||
define("makeover", Command.Privilege.MODERATOR){ player, _ ->
|
||||
CharacterDesign.open(player)
|
||||
}
|
||||
|
||||
/**
|
||||
* Bury inventory at current location
|
||||
*/
|
||||
define("bury"){player, _ ->
|
||||
if(player.inventory.isEmpty){
|
||||
reject(player, "You have no items to bury.")
|
||||
}
|
||||
|
||||
player.dialogueInterpreter.open(object : DialogueFile(){
|
||||
override fun handle(componentID: Int, buttonID: Int) {
|
||||
when(stage){
|
||||
0 -> dialogue("This will bury your whole inventory in this spot.","Are you sure?").also { stage++ }
|
||||
1 -> options("Yes","No").also { stage++ }
|
||||
2 -> when(buttonID){
|
||||
1 -> bury(player).also { end() }
|
||||
2 -> stage = END_DIALOGUE
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun bury(player: Player){
|
||||
val loc = Location.create(player.location)
|
||||
val inv = player.inventory.toArray().filterNotNull()
|
||||
SpadeDigListener.registerListener(player.location){p ->
|
||||
for(item in inv){
|
||||
ContentAPI.addItemOrDrop(p, item.id, item.amount)
|
||||
ContentAPI.sendMessage(p, "You dig and find ${if(item.amount > 1) "some" else "a"} ${item.name}")
|
||||
}
|
||||
SpadeDigListener.listeners.remove(loc)
|
||||
}
|
||||
player.inventory.clear()
|
||||
notify(player, "You have buried your loot at ${loc.toString()}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,28 +479,5 @@ class MiscCommandSet : CommandSet(Command.Privilege.ADMIN){
|
||||
notify(player,"No parent NPC found.")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
define("bury"){player,args ->
|
||||
if(args.size < 2){
|
||||
reject(player,"Usage: ::bury itemid")
|
||||
}
|
||||
|
||||
val itemId = args[1].toInt()
|
||||
val def = ItemDefinition.forId(itemId)
|
||||
|
||||
SpadeDigListener.registerListener(player.location){pl ->
|
||||
if(player.getAttribute("${player.location.toString()}:$itemId",false)){
|
||||
pl.sendMessage("You dig and find nothing.")
|
||||
return@registerListener
|
||||
}
|
||||
pl.dialogueInterpreter.sendDialogue("You dig and find a ${def.name}!")
|
||||
player.inventory.add(Item(itemId))
|
||||
player.setExpirableAttribute("/save:${player.location.toString()}:$itemId",true,TimeUnit.SECONDS.toMillis(10))
|
||||
}
|
||||
|
||||
notify(player,"You buried a ${def.name} at ${player.location}")
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package rs09.game.system.command.sets
|
||||
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.entity.player.info.Rights
|
||||
import rs09.game.system.command.Command
|
||||
import core.game.system.task.Pulse
|
||||
import rs09.game.world.GameWorld
|
||||
@@ -59,8 +60,7 @@ class ModerationCommandSet : CommandSet(Command.Privilege.MODERATOR){
|
||||
reject(player, "Can not find $name in the player list!")
|
||||
}
|
||||
|
||||
val NameCheck = name.toLowerCase()
|
||||
if (NameCheck == "kermit" || NameCheck == "ceikry"){
|
||||
if (otherPlayer?.rights == Rights.ADMINISTRATOR){
|
||||
reject(player, "You cannot jail $name, they are a god. Nice try though ${player.username}!")
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,6 @@ object PacketWriteQueue {
|
||||
|
||||
@JvmStatic
|
||||
fun <T> queue(packet: OutgoingPacket<T>, context: T){
|
||||
SystemLogger.logInfo("Queueing ${packet.javaClass.simpleName}")
|
||||
PacketsToWrite.add(QueuedPacket(packet,context))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user