mirror of
https://github.com/2006-Scape/2006Scape.git
synced 2026-07-03 08:39:04 +00:00
Compare commits
8 Commits
devcontainer
...
misc
| Author | SHA1 | Date | |
|---|---|---|---|
| f98de298c8 | |||
| 2629186cc0 | |||
| 156d864bfd | |||
| 7a2a6d362b | |||
| 546669ead0 | |||
| 669573c660 | |||
| 1fe76d739e | |||
| 6deaa4162a |
@@ -1,11 +1,16 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
||||
org.eclipse.jdt.core.compiler.processAnnotations=disabled
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
|
||||
@@ -6849,8 +6849,10 @@ public class Game extends RSApplet {
|
||||
}
|
||||
catch(IOException _ex)
|
||||
{
|
||||
s = "Connection problem -- Make sure FileServer is running!!";
|
||||
expectedCRCs[8] = 0;
|
||||
s = "FileServer Connection problem";
|
||||
// Check if we already have cache files, if so then allow the client to load anyway
|
||||
String cacheDir = Signlink.findcachedir();
|
||||
expectedCRCs[8] = new File(cacheDir + "main_file_cache.dat").length() > 0 ? 1 : 0;
|
||||
}
|
||||
catch(Exception _ex)
|
||||
{
|
||||
@@ -6870,7 +6872,7 @@ public class Game extends RSApplet {
|
||||
l = 10;
|
||||
} else
|
||||
{
|
||||
drawLoadingText(10, s + " - Will retry in " + l + " secs.");
|
||||
drawLoadingText(10, s + " - retry in " + l + " secs.");
|
||||
}
|
||||
try
|
||||
{
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package plugin.buttons
|
||||
|
||||
import com.rs2.event.SubscribesTo
|
||||
import com.rs2.event.impl.ButtonActionEvent
|
||||
import com.rs2.game.dialogues.DialoguePlugin
|
||||
import com.rs2.game.players.Player
|
||||
import plugin.buttons.ButtonClick
|
||||
|
||||
@SubscribesTo(ButtonActionEvent::class)
|
||||
class DialogueOptionButtons : ButtonClick() {
|
||||
|
||||
override fun execute(player: Player, event: ButtonActionEvent) {
|
||||
|
||||
when (event.button) {
|
||||
|
||||
// First Option (Option Interfaces 2, 3, 4, and 5)
|
||||
9157, 9167, 9178, 9190 ->
|
||||
player.dialogueFactory.executeOption(0, player.optionDialogue)
|
||||
|
||||
// Second Option (Option Interfaces 2, 3, 4, and 5)
|
||||
9158, 9168, 9179, 9191 ->
|
||||
player.dialogueFactory.executeOption(1, player.optionDialogue)
|
||||
|
||||
// Third Option (Option Interfaces 3, 4, and 5)
|
||||
9169, 9180, 9192 ->
|
||||
player.dialogueFactory.executeOption(2, player.optionDialogue)
|
||||
|
||||
// Fourth Option (Option Interfaces 4 and 5)
|
||||
9181, 9193 ->
|
||||
player.dialogueFactory.executeOption(3, player.optionDialogue)
|
||||
|
||||
// Fifth Option (Option Interface 5)
|
||||
9194 ->
|
||||
player.dialogueFactory.executeOption(4, player.optionDialogue)
|
||||
}
|
||||
}
|
||||
|
||||
override fun test(event: ButtonActionEvent): Boolean {
|
||||
return DialoguePlugin.isDialogueButton(event.button)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package plugin.npc.banker
|
||||
|
||||
import com.rs2.game.dialogues.DialoguePlugin
|
||||
import com.rs2.game.dialogues.DialogueFactoryPlugin
|
||||
import com.rs2.game.dialogues.ExpressionPlugin
|
||||
|
||||
/**
|
||||
* The Dialogue Class for Gnome and Human Banker NPCs
|
||||
* Does NOT include dialogue for Ghost Bankers
|
||||
* @author Qweqker
|
||||
*/
|
||||
class BankerDialogue : DialoguePlugin() {
|
||||
|
||||
override fun sendDialogues(factory: DialogueFactoryPlugin) {
|
||||
|
||||
factory
|
||||
.sendNPCChat(ExpressionPlugin.HAPPY, "Good day. How may I help you?")
|
||||
.sendOption("I'd like to access my bank account, please.", {
|
||||
factory
|
||||
.onAction {
|
||||
factory.player.packetSender.openUpBank()
|
||||
}
|
||||
}, "I'd like to check my PIN settings.", {
|
||||
factory
|
||||
.onAction {
|
||||
factory.player.bankPin.bankPinSettings()
|
||||
}
|
||||
}, "What is this place?") {
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT,"What is this place?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT,"This is the bank of <servername>. We have many branches in many towns.")
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT,"And what do you do?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT,"We will look after your items and money for you. Leave your valuables with us if you want to keep them safe.")
|
||||
}
|
||||
.execute()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package plugin.npc.banker
|
||||
|
||||
import com.rs2.event.EventContext
|
||||
import com.rs2.event.EventSubscriber
|
||||
import com.rs2.event.SubscribesTo
|
||||
import com.rs2.event.impl.NpcFirstClickEvent
|
||||
import com.rs2.game.content.skills.SkillHandler
|
||||
import com.rs2.game.players.Player
|
||||
import com.rs2.util.Misc
|
||||
import plugin.npc.banker.BankerDialogue
|
||||
import plugin.npc.manwoman.ManWomanDialogue
|
||||
|
||||
|
||||
@SubscribesTo(NpcFirstClickEvent::class)
|
||||
class FirstClick : EventSubscriber<NpcFirstClickEvent> {
|
||||
|
||||
override fun subscribe(context: EventContext, player: Player, event: NpcFirstClickEvent) {
|
||||
|
||||
if (player.playerRights >= 3) {
|
||||
player.packetSender.sendMessage("[click= npc], [type = first], [id= ${event.npc}], [Type= ${event.npc}]")
|
||||
}
|
||||
|
||||
when(event.npc) {
|
||||
// Banker (NOT INCLUDING GHOST BANKER IN PORT PHASMATYS)
|
||||
166, 494, 495, 496, 497, 498, 499, 953, 1036, 1360, 2163, 2164, 2354, 2355, 2568, 2569, 2570 -> {
|
||||
if (!SkillHandler.isSkilling(player)) {
|
||||
player.dialogueFactory.sendDialogue(BankerDialogue())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+8
-15
@@ -1,35 +1,28 @@
|
||||
package plugin.click.npc
|
||||
package plugin.npc.manwoman
|
||||
|
||||
import com.rs2.GameConstants
|
||||
import com.rs2.event.EventContext
|
||||
import com.rs2.event.EventSubscriber
|
||||
import com.rs2.event.SubscribesTo
|
||||
import com.rs2.event.impl.NpcFirstClickEvent
|
||||
import com.rs2.game.npcs.Npc
|
||||
import com.rs2.game.content.skills.SkillHandler
|
||||
import com.rs2.game.players.Player
|
||||
import com.rs2.util.Misc
|
||||
import plugin.npc.banker.BankerDialogue
|
||||
import plugin.npc.manwoman.ManWomanDialogue
|
||||
|
||||
|
||||
@SubscribesTo(NpcFirstClickEvent::class)
|
||||
class NpcFirstClick : EventSubscriber<NpcFirstClickEvent> {
|
||||
class FirstClick : EventSubscriber<NpcFirstClickEvent> {
|
||||
|
||||
override fun subscribe(context: EventContext, player: Player, event: NpcFirstClickEvent) {
|
||||
|
||||
if (player.playerRights >= 3) {
|
||||
player.packetSender.sendMessage("[click= npc], [type = first], [id= ${event.npc}], [Type= ${event.npc}]");
|
||||
player.packetSender.sendMessage("[click= npc], [type = first], [id= ${event.npc}], [Type= ${event.npc}]")
|
||||
}
|
||||
|
||||
when(event.npc) {
|
||||
|
||||
1,2,3,4,5,6 -> if (Misc.random(10) <= 5) {
|
||||
player.dialogueHandler.sendDialogues(3869, player.npcType)
|
||||
} else {
|
||||
player.dialogueHandler.sendDialogues(3872, player.npcType)
|
||||
// Man or Woman
|
||||
1,2,3,4,5,6 -> player.dialogueFactory.sendDialogue(ManWomanDialogue(Misc.random(22)))
|
||||
}
|
||||
|
||||
//else ->
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
package plugin.npc.manwoman
|
||||
|
||||
import com.rs2.game.dialogues.DialoguePlugin
|
||||
import com.rs2.game.dialogues.DialogueFactoryPlugin
|
||||
import com.rs2.game.dialogues.ExpressionPlugin
|
||||
|
||||
/**
|
||||
* The Dialogue Class for Man and Woman NPCs
|
||||
* @author Qweqker
|
||||
*/
|
||||
class ManWomanDialogue(private val randomDialogue: Int) : DialoguePlugin() {
|
||||
|
||||
override fun sendDialogues(factory: DialogueFactoryPlugin) {
|
||||
|
||||
// Since Man and Woman NPCs provide a random dialogue every interaction, use a switch statement
|
||||
// There are 23 dialogues, but a random number is rolled between 0 and 22 in the FirstClick.kt file
|
||||
// as part of the calling process
|
||||
when(randomDialogue) {
|
||||
0 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "Not too bad, but I'm a little worried about the increase of goblins these days.")
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Don't worry, I'll kill them.")
|
||||
.execute()
|
||||
1 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "How can I help you?")
|
||||
.sendOption("Do you want to trade? ", {
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT,"Do you want to trade?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT,"No, I have nothing I wish to get rid of. If you want to do some trading, there are plenty of shops and market stalls around though.")
|
||||
}, "I'm in search of a quest.", {
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT,"I'm in search of a quest.")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT,"I'm sorry I can't help you there.")
|
||||
}, "I'm in search of enemies to kill.") {
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "I'm in search of enemies to kill.")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT,"I've heard there are many fearsome creatures that dwell under the ground...")
|
||||
}
|
||||
.execute()
|
||||
2 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.ANNOYED, "Get out of my way, I'm in a hurry!")
|
||||
.execute()
|
||||
3 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.HAPPY, "I'm fine, how are you?")
|
||||
.sendPlayerChat(ExpressionPlugin.HAPPY, "Very well thank you.")
|
||||
.execute()
|
||||
4 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.HAPPY, "Hello there! Nice weather we've been having.")
|
||||
.execute()
|
||||
5 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.HAPPY, "I'm very well thank you.")
|
||||
.execute()
|
||||
6 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "Who are you?")
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "I'm a bold adventurer.")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "Ah, a very noble profession.")
|
||||
.execute()
|
||||
7 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.ANNOYED, "Do I know you? I'm in a hurry!")
|
||||
.execute()
|
||||
8 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "I think we need a new king. The one we've got isn't very good.")
|
||||
.execute()
|
||||
9 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "Not too bad thanks.")
|
||||
.execute()
|
||||
10 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "Are you asking for a fight?")
|
||||
/* TODO: Have NPC Attack Player
|
||||
.onAction {
|
||||
|
||||
}*/
|
||||
.execute()
|
||||
11 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "I'm busy right now.")
|
||||
.execute()
|
||||
12 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "Hello.")
|
||||
.execute()
|
||||
13 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "None of your business.")
|
||||
.execute()
|
||||
14 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT,"Do you wish to trade?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "No, I have nothing I wish to get rid of. If you want to do some trading, there are plenty of shops and market stalls around though.")
|
||||
.execute()
|
||||
15 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT,"I'm in search of a quest.")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "I'm sorry I can't help you there.")
|
||||
.execute()
|
||||
16 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT,"I'm in search of enemies to kill.")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "I've heard there are many fearsome creatures that dwell under the ground...")
|
||||
.execute()
|
||||
17 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.ANNOYED, "No I don't have any spare change.")
|
||||
.execute()
|
||||
18 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DISTRESSED, "I'm a little worried - I've heard there's lots of people going about, killing citizens at random.")
|
||||
.execute()
|
||||
19 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DISTRESSED, "No, I don't want to buy anything!")
|
||||
.execute()
|
||||
20 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "That is classified information.")
|
||||
.execute()
|
||||
21 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "Have this flyer...")
|
||||
.onAction {
|
||||
factory.player.itemAssistant.addOrDropItem(956, 1)
|
||||
}
|
||||
.execute()
|
||||
22 ->
|
||||
factory
|
||||
.sendPlayerChat(ExpressionPlugin.DEFAULT, "Hello, how's it going?")
|
||||
.sendNPCChat(ExpressionPlugin.DEFAULT, "Yo, wassup!")
|
||||
.execute()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,11 @@
|
||||
<version>1.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<kotlin.version>1.5.31</kotlin.version>
|
||||
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>libs-local</id>
|
||||
@@ -18,6 +23,11 @@
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-stdlib</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
@@ -154,14 +164,60 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-maven-plugin</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>compile</id>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<sourceDirs>
|
||||
<sourceDir>${project.basedir}/plugins</sourceDir>
|
||||
<sourceDir>${project.basedir}/src/main/java</sourceDir>
|
||||
</sourceDirs>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.5.1</version>
|
||||
<configuration>
|
||||
<source>8</source>
|
||||
<target>8</target>
|
||||
<encoding>UTF-8</encoding>
|
||||
</configuration>
|
||||
<executions>
|
||||
<!-- Replacing default-compile as it is treated specially by maven -->
|
||||
<execution>
|
||||
<id>default-compile</id>
|
||||
<phase>none</phase>
|
||||
</execution>
|
||||
<!-- Replacing default-testCompile as it is treated specially by maven -->
|
||||
<execution>
|
||||
<id>default-testCompile</id>
|
||||
<phase>none</phase>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>java-compile</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>java-test-compile</id>
|
||||
<phase>test-compile</phase>
|
||||
<goals>
|
||||
<goal>testCompile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
|
||||
@@ -1806,7 +1806,7 @@ public class CombatAssistant {
|
||||
}
|
||||
|
||||
public boolean checkMagicReqs(int spell) {
|
||||
return MagicRequirements.checkMagicReqs(player, spell);
|
||||
return MagicRequirements.checkMagicReqs(player, spell, player.usingMagic);
|
||||
}
|
||||
|
||||
public int calculateRangeDefence() {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,14 @@
|
||||
package com.rs2.game.dialogues;
|
||||
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* The chain-able interface that allows implementing dialogue factories the ability to chain
|
||||
* together.
|
||||
*
|
||||
* @author Vult-R
|
||||
*/
|
||||
public interface ChainablePlugin extends Consumer<DialogueFactoryPlugin> {
|
||||
|
||||
}
|
||||
@@ -4,7 +4,12 @@ package com.rs2.game.dialogues;
|
||||
* ChatEmotes.java
|
||||
* @author Andrew (Mr Extremez)
|
||||
*/
|
||||
|
||||
/**
|
||||
* Contains a List of Chat Head Emotes NPCs and Players can use during Dialogues
|
||||
* @Deprecated Consider using {@link ExpressionPlugin} instead to add Chat Head Animations to Dialogues.
|
||||
*
|
||||
*/
|
||||
@Deprecated
|
||||
public enum ChatEmotes {
|
||||
|
||||
HAPPY_JOYFUL(588),
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
package com.rs2.game.dialogues;
|
||||
|
||||
import com.rs2.game.players.Player;
|
||||
import com.rs2.net.packets.PacketType;
|
||||
|
||||
/**
|
||||
* Dialogue
|
||||
**/
|
||||
|
||||
public class Dialogue implements PacketType {
|
||||
|
||||
@Override
|
||||
public void processPacket(Player c, int packetType, int packetSize) {
|
||||
if (c.nextChat > 0) {
|
||||
c.getDialogueHandler().sendDialogues(c.nextChat, c.talkingNpc);
|
||||
} else {
|
||||
c.getDialogueHandler().sendDialogues(0, -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,741 @@
|
||||
package com.rs2.game.dialogues;
|
||||
|
||||
import com.rs2.GameConstants;
|
||||
import com.rs2.game.npcs.NpcHandler;
|
||||
import com.rs2.game.players.Player;
|
||||
import com.rs2.util.LoggerUtils;
|
||||
import com.rs2.util.Misc;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Represents a factory class that contains important functions for building dialogues.
|
||||
*
|
||||
* @author Vult-R <https://github.com/Vult-R>
|
||||
*
|
||||
* Ported by Qweqker
|
||||
*/
|
||||
public final class DialogueFactoryPlugin {
|
||||
|
||||
/**
|
||||
* The single logger for this class.
|
||||
*/
|
||||
private static final Logger logger = LoggerUtils.getLogger(DialogueFactoryPlugin.class);
|
||||
|
||||
/**
|
||||
* The queue of dialogues in this factory.
|
||||
*/
|
||||
private final Queue<ChainablePlugin> chain = new ArrayDeque<>();
|
||||
|
||||
/**
|
||||
* The approximate maximum characters that can be fit onto a dialogue line in the interface
|
||||
*
|
||||
* Defined for use in the dialogue line splitting code
|
||||
*/
|
||||
private static final int MAXIMUM_CHARACTERS_PER_LINE = 52;
|
||||
|
||||
/**
|
||||
* The maximum length for any dialogue
|
||||
*
|
||||
* Because each line can fit approximately 52 characters, we'll set the maximum
|
||||
* to 260 characters to accommodate for five lines of dialogue. It can be adjusted later if needed.
|
||||
*/
|
||||
private static final int MAXIMUM_LENGTH = 260;
|
||||
|
||||
/**
|
||||
* The player who owns this factory.
|
||||
*/
|
||||
private final Player player;
|
||||
|
||||
/**
|
||||
* The flag that denotes dialogue is active.
|
||||
*/
|
||||
private boolean active;
|
||||
|
||||
/**
|
||||
* The next action in the dialogue chain.
|
||||
*/
|
||||
private Optional<Runnable> nextAction = Optional.empty();
|
||||
|
||||
/**
|
||||
* Creates a new {@link DialogueFactoryPlugin}.
|
||||
*
|
||||
* @param player The player who owns this factory.
|
||||
*/
|
||||
public DialogueFactoryPlugin(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a player a dialogue.
|
||||
*
|
||||
* @param dialogue The dialogue to sent.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendDialogue(DialoguePlugin dialogue) {
|
||||
|
||||
clear(); // Clear dialogue queue before starting new one. Hacky, but it works for this base
|
||||
|
||||
player.setDialogue(Optional.of(dialogue));
|
||||
dialogue.sendDialogues(this);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets an {@code action} so this action can be executed after dialogues are done.
|
||||
*
|
||||
* @param action The action to set.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin onAction(Runnable action) {
|
||||
setNextAction(Optional.of(action));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accepts the next dialogue in the chain.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public DialogueFactoryPlugin onNext() {
|
||||
if (getChain().peek() != null) {
|
||||
ChainablePlugin chain = getChain().poll();
|
||||
|
||||
chain.accept(this);
|
||||
} else {
|
||||
player.getPacketSender().sendClearScreen();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes an {@code option} for a {@code player}.
|
||||
*
|
||||
* @param type The type of option.
|
||||
*
|
||||
* @param option The option to execute.
|
||||
*/
|
||||
public final void executeOption(int type, Optional<OptionDialoguePlugin> option) {
|
||||
option.ifPresent($it -> $it.getActions().get(type).run());
|
||||
execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the current dialogue {@code chain}.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public void clear() {
|
||||
chain.clear();
|
||||
nextAction = Optional.empty();
|
||||
player.setDialogue(Optional.empty());
|
||||
player.setOptionDialogue(Optional.empty());
|
||||
setActive(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a {@code chain} to this factory.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
private final DialogueFactoryPlugin append(ChainablePlugin chain) {
|
||||
this.chain.add(chain);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the next dialogue in the chain and executes it.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin execute() {
|
||||
// check to see if there are anymore dialogues.
|
||||
if (getChain().peek() != null) {
|
||||
|
||||
// there is so, grab the next dialogue.
|
||||
ChainablePlugin entry = getChain().poll();
|
||||
|
||||
// is this an option dialogue?
|
||||
if (entry instanceof OptionDialoguePlugin) {
|
||||
OptionDialoguePlugin option = (OptionDialoguePlugin) entry;
|
||||
player.setOptionDialogue(Optional.of(option));
|
||||
}
|
||||
setActive(true);
|
||||
// whatever dialogue it is, accept it.
|
||||
entry.accept(this);
|
||||
} else {
|
||||
// there are no dialogues in this chain.
|
||||
|
||||
// is there an action?
|
||||
if (getNextAction().isPresent()) {
|
||||
// there is so, execute it.
|
||||
getNextAction().ifPresent($it -> $it.run());
|
||||
// we just used this action so empty it so it can't be used again.
|
||||
setNextAction(Optional.empty());
|
||||
return this;
|
||||
}
|
||||
setActive(false);
|
||||
// there are no more dialogues, so clear the screen.
|
||||
player.getPacketSender().sendClearScreen();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the next dialogue in the chain and executes it.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin executeNoClose() {
|
||||
// check to see if there are anymore dialogues.
|
||||
if (getChain().peek() != null) {
|
||||
|
||||
// there is so, grab the next dialogue.
|
||||
ChainablePlugin entry = getChain().poll();
|
||||
|
||||
// is this an option dialogue?
|
||||
if (entry instanceof OptionDialoguePlugin) {
|
||||
OptionDialoguePlugin option = (OptionDialoguePlugin) entry;
|
||||
player.setOptionDialogue(Optional.of(option));
|
||||
}
|
||||
setActive(true);
|
||||
// whatever dialogue it is, accept it.
|
||||
entry.accept(this);
|
||||
} else {
|
||||
// there are no dialogues in this chain.
|
||||
|
||||
// is there an action?
|
||||
if (getNextAction().isPresent()) {
|
||||
// there is so, execute it.
|
||||
getNextAction().ifPresent($it -> $it.run());
|
||||
// we just used this action so empty it so it can't be used again.
|
||||
setNextAction(Optional.empty());
|
||||
return this;
|
||||
}
|
||||
setActive(false);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces keywords with their translated values in an existing dialogue text.
|
||||
*
|
||||
* @param line The line to check for a keyword.
|
||||
*/
|
||||
private final String appendKeywords(String line) {
|
||||
|
||||
// If the line contains #username, replace with a formatted player name.
|
||||
if (line.contains("<username>")) {
|
||||
line = line.replaceAll("<username>", Misc.formatPlayerName((player.playerName)));
|
||||
}
|
||||
if (line.contains("<servername>")) {
|
||||
line = line.replaceAll("<servername>", GameConstants.SERVER_NAME);
|
||||
}
|
||||
|
||||
return line;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a {@link PlayerDialoguePlugin} to the current dialogue chain.
|
||||
*
|
||||
* @param lines The dialogue of the player talking.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendPlayerChat(String... lines) {
|
||||
return append(new PlayerDialoguePlugin(lines));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a {@link PlayerDialoguePlugin} to the current dialogue chain.
|
||||
*
|
||||
* @param lines The dialogue of the player talking.
|
||||
*
|
||||
* @param expression The expression of this dialogue.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendPlayerChat(ExpressionPlugin expression, String... lines) {
|
||||
return append(new PlayerDialoguePlugin(expression, lines));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a dialogue with a player talking.
|
||||
*
|
||||
* @param dialogue The player dialogue.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
final DialogueFactoryPlugin sendPlayerChat(PlayerDialoguePlugin dialogue) {
|
||||
ExpressionPlugin expression = dialogue.getExpression();
|
||||
String[] lines = dialogue.getLines();
|
||||
|
||||
validateLength(lines);
|
||||
lines = splitLines(lines);
|
||||
|
||||
switch (lines.length) {
|
||||
case 1:
|
||||
player.getPacketSender().sendDialogueAnimation(969, expression.getId());
|
||||
player.getPacketSender().sendString(Misc.formatPlayerName(player.playerName), 970);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[0]), 971);
|
||||
player.getPacketSender().sendPlayerDialogueHead(969);
|
||||
player.getPacketSender().sendChatInterface(968);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
player.getPacketSender().sendDialogueAnimation(974, expression.getId());
|
||||
player.getPacketSender().sendString(Misc.formatPlayerName(player.playerName), 975);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[0]), 976);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[1]), 977);
|
||||
player.getPacketSender().sendPlayerDialogueHead(974);
|
||||
player.getPacketSender().sendChatInterface(973);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
player.getPacketSender().sendDialogueAnimation(980, expression.getId());
|
||||
player.getPacketSender().sendString(Misc.formatPlayerName(player.playerName), 981);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[0]), 982);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[1]), 983);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[2]), 984);
|
||||
player.getPacketSender().sendPlayerDialogueHead(980);
|
||||
player.getPacketSender().sendChatInterface(979);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
player.getPacketSender().sendDialogueAnimation(987, expression.getId());
|
||||
player.getPacketSender().sendString(Misc.formatPlayerName(player.playerName), 988);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[0]), 989);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[1]), 990);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[2]), 991);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[3]), 992);
|
||||
player.getPacketSender().sendPlayerDialogueHead(987);
|
||||
player.getPacketSender().sendChatInterface(986);
|
||||
break;
|
||||
|
||||
default:
|
||||
logger.log(Level.SEVERE, String.format("Invalid player dialogue line length: %s", lines.length));
|
||||
break;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends an npc dialogue.
|
||||
*
|
||||
* @param lines The text of this dialogue.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendNPCChat(String... lines) {
|
||||
return append(new NPCDialogue(lines));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends an {@link NPCDialogue} to the current dialogue chain.
|
||||
*
|
||||
* @param expression The expression of this npc.
|
||||
*
|
||||
* @param lines The text of this dialogue.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendNPCChat(ExpressionPlugin expression, String... lines) {
|
||||
return append(new NPCDialogue(expression, lines));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends an {@link NPCDialogue} to the current dialogue chain.
|
||||
*
|
||||
* @param id The id of this npc.
|
||||
*
|
||||
* @param lines The text of this dialogue.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendNPCChat(int id, String... lines) {
|
||||
return append(new NPCDialogue(id, ExpressionPlugin.DEFAULT, lines));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends an {@link NPCDialogue} to the current dialogue chain.
|
||||
*
|
||||
* @param id The id of this npc.
|
||||
*
|
||||
* @param expression The expression of this npc.
|
||||
*
|
||||
* @param lines The text of this dialogue.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendNPCChat(int id, ExpressionPlugin expression, String... lines) {
|
||||
return append(new NPCDialogue(id, expression, lines));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a dialogue with a npc talking.
|
||||
*
|
||||
* @param dialogue The dialogue.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
final DialogueFactoryPlugin sendNPCChat(NPCDialogue dialogue) {
|
||||
ExpressionPlugin expression = dialogue.getExpression();
|
||||
String[] lines = dialogue.getLines();
|
||||
validateLength(lines);
|
||||
lines = splitLines(lines);
|
||||
|
||||
final String npcName = NpcHandler.getNpcListName(player.npcType).replaceAll("_", " ");
|
||||
|
||||
if (npcName == null) {
|
||||
return this;
|
||||
}
|
||||
|
||||
switch (lines.length) {
|
||||
case 1:
|
||||
player.getPacketSender().sendDialogueAnimation(4883, expression.getId());
|
||||
player.getPacketSender().sendString(npcName, 4884);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[0]), 4885);
|
||||
player.getPacketSender().sendNPCDialogueHead(player.npcType, 4883);
|
||||
player.getPacketSender().sendChatInterface(4882);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
player.getPacketSender().sendDialogueAnimation(4888, expression.getId());
|
||||
player.getPacketSender().sendString(npcName, 4889);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[0]), 4890);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[1]), 4891);
|
||||
player.getPacketSender().sendNPCDialogueHead(player.npcType, 4888);
|
||||
player.getPacketSender().sendChatInterface(4887);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
player.getPacketSender().sendDialogueAnimation(4894, expression.getId());
|
||||
player.getPacketSender().sendString(npcName, 4895);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[0]), 4896);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[1]), 4897);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[2]), 4898);
|
||||
player.getPacketSender().sendNPCDialogueHead(player.npcType, 4894);
|
||||
player.getPacketSender().sendChatInterface(4893);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
player.getPacketSender().sendDialogueAnimation(4901, expression.getId());
|
||||
player.getPacketSender().sendString(npcName, 4902);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[0]), 4903);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[1]), 4904);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[2]), 4905);
|
||||
player.getPacketSender().sendString(appendKeywords(lines[3]), 4906);
|
||||
player.getPacketSender().sendNPCDialogueHead(player.npcType, 4901);
|
||||
player.getPacketSender().sendChatInterface(4900);
|
||||
break;
|
||||
|
||||
default:
|
||||
logger.log(Level.SEVERE,
|
||||
String.format("Invalid npc dialogue line length: %s", lines.length));
|
||||
break;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends the {@link OptionDialoguePlugin} onto the current dialogue chain.
|
||||
*
|
||||
* @param option1 The text for the first option.
|
||||
*
|
||||
* @param action1 The action for the first action.
|
||||
*
|
||||
* @param option2 The text for the second option.
|
||||
*
|
||||
* @param action2 The action for the second action.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendOption(String option1, Runnable action1, String option2,
|
||||
Runnable action2) {
|
||||
return append(new OptionDialoguePlugin(option1, action1, option2, action2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends the {@link OptionDialoguePlugin} onto the current dialogue chain.
|
||||
*
|
||||
* @param option1 The text for the first option.
|
||||
*
|
||||
* @param action1 The action for the first action.
|
||||
*
|
||||
* @param option2 The text for the second option.
|
||||
*
|
||||
* @param action2 The action for the second action.
|
||||
*
|
||||
* @param option3 The text for the third option.
|
||||
*
|
||||
* @param action3 The action for the third action.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendOption(String option1, Runnable action1, String option2,
|
||||
Runnable action2, String option3, Runnable action3) {
|
||||
return append(new OptionDialoguePlugin(option1, action1, option2, action2, option3, action3));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends the {@link OptionDialoguePlugin} onto the current dialogue chain.
|
||||
*
|
||||
* @param option1 The text for the first option.
|
||||
*
|
||||
* @param action1 The action for the first action.
|
||||
*
|
||||
* @param option2 The text for the second option.
|
||||
*
|
||||
* @param action2 The action for the second action.
|
||||
*
|
||||
* @param option3 The text for the third option.
|
||||
*
|
||||
* @param action3 The action for the third action.
|
||||
*
|
||||
* @param option4 The text for the four option.
|
||||
*
|
||||
* @param action4 The action for the four action.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendOption(String option1, Runnable action1, String option2,
|
||||
Runnable action2, String option3, Runnable action3, String option4, Runnable action4) {
|
||||
return append(
|
||||
new OptionDialoguePlugin(option1, action1, option2, action2, option3, action3, option4, action4));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends the {@link OptionDialoguePlugin} onto the current dialogue chain.
|
||||
*
|
||||
* @param option1 The text for the first option.
|
||||
*
|
||||
* @param action1 The action for the first action.
|
||||
*
|
||||
* @param option2 The text for the second option.
|
||||
*
|
||||
* @param action2 The action for the second action.
|
||||
*
|
||||
* @param option3 The text for the third option.
|
||||
*
|
||||
* @param action3 The action for the third action.
|
||||
*
|
||||
* @param option4 The text for the four option.
|
||||
*
|
||||
* @param action4 The action for the four action.
|
||||
*
|
||||
* @param option5 The text for the fifth option.
|
||||
*
|
||||
* @param action5 The action for the fifth action.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendOption(String option1, Runnable action1, String option2,
|
||||
Runnable action2, String option3, Runnable action3, String option4, Runnable action4,
|
||||
String option5, Runnable action5) {
|
||||
return append(new OptionDialoguePlugin(option1, action1, option2, action2, option3, action3, option4,
|
||||
action4, option5, action5));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a dialogue with options.
|
||||
*
|
||||
* @param dialogue The dialogue.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
final DialogueFactoryPlugin sendOption(OptionDialoguePlugin dialogue) {
|
||||
String[] options = dialogue.getLines();
|
||||
validateLength(options);
|
||||
|
||||
switch (options.length) {
|
||||
case 2:
|
||||
player.getPacketSender().sendString("Select an Option", 2460);
|
||||
player.getPacketSender().sendString(options[0], 2461);
|
||||
player.getPacketSender().sendString(options[1], 2462);
|
||||
player.getPacketSender().sendChatInterface(2459);
|
||||
return this;
|
||||
|
||||
case 3:
|
||||
player.getPacketSender().sendString("Select an Option", 2470);
|
||||
player.getPacketSender().sendString(options[0], 2471);
|
||||
player.getPacketSender().sendString(options[1], 2472);
|
||||
player.getPacketSender().sendString(options[2], 2473);
|
||||
player.getPacketSender().sendChatInterface(2469);
|
||||
return this;
|
||||
|
||||
case 4:
|
||||
player.getPacketSender().sendString("Select an Option", 2481);
|
||||
player.getPacketSender().sendString(options[0], 2482);
|
||||
player.getPacketSender().sendString(options[1], 2483);
|
||||
player.getPacketSender().sendString(options[2], 2484);
|
||||
player.getPacketSender().sendString(options[3], 2485);
|
||||
player.getPacketSender().sendChatInterface(2480);
|
||||
return this;
|
||||
|
||||
case 5:
|
||||
player.getPacketSender().sendString("Select an Option", 2493);
|
||||
player.getPacketSender().sendString(options[0], 2494);
|
||||
player.getPacketSender().sendString(options[1], 2495);
|
||||
player.getPacketSender().sendString(options[2], 2496);
|
||||
player.getPacketSender().sendString(options[3], 2497);
|
||||
player.getPacketSender().sendString(options[4], 2498);
|
||||
player.getPacketSender().sendChatInterface(2492);
|
||||
return this;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a {@link StatementDialoguePlugin} to the current dialogue chain.
|
||||
*
|
||||
* @param lines The text for this statement.
|
||||
*
|
||||
* @return The instance of this factory.
|
||||
*/
|
||||
public final DialogueFactoryPlugin sendStatement(String... lines) {
|
||||
append(new StatementDialoguePlugin(lines));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a player a statement dialogue.
|
||||
*
|
||||
* @param dialogue The statement dialogue.
|
||||
*/
|
||||
final DialogueFactoryPlugin sendStatement(StatementDialoguePlugin dialogue) {
|
||||
String[] lines = dialogue.getLines();
|
||||
validateLength(lines);
|
||||
lines = splitLines(lines);
|
||||
|
||||
switch (lines.length) {
|
||||
|
||||
case 1:
|
||||
player.getPacketSender().sendString(dialogue.getLines()[0], 357);
|
||||
player.getPacketSender().sendString("Click here to continue", 358);
|
||||
player.getPacketSender().sendChatInterface(356);
|
||||
break;
|
||||
case 2:
|
||||
player.getPacketSender().sendString(dialogue.getLines()[0], 360);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[1], 361);
|
||||
player.getPacketSender().sendString("Click here to continue", 362);
|
||||
player.getPacketSender().sendChatInterface(359);
|
||||
break;
|
||||
case 3:
|
||||
player.getPacketSender().sendString(dialogue.getLines()[0], 364);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[1], 365);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[2], 366);
|
||||
player.getPacketSender().sendString("Click here to continue", 367);
|
||||
player.getPacketSender().sendChatInterface(363);
|
||||
break;
|
||||
case 4:
|
||||
player.getPacketSender().sendString(dialogue.getLines()[0], 369);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[1], 370);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[2], 371);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[3], 372);
|
||||
player.getPacketSender().sendString("Click here to continue", 373);
|
||||
player.getPacketSender().sendChatInterface(368);
|
||||
break;
|
||||
case 5:
|
||||
player.getPacketSender().sendString(dialogue.getLines()[0], 375);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[1], 376);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[2], 377);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[3], 378);
|
||||
player.getPacketSender().sendString(dialogue.getLines()[4], 379);
|
||||
player.getPacketSender().sendString("Click here to continue", 380);
|
||||
player.getPacketSender().sendChatInterface(374);
|
||||
default:
|
||||
logger.log(Level.SEVERE, String.format("Invalid statement dialogue line length: %s",
|
||||
dialogue.getLines().length));
|
||||
break;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The method that validates the length of {@code text}.
|
||||
*
|
||||
* @param text the text that will be validated.
|
||||
* @throws IllegalStateException if any lines of the text exceed a certain length.
|
||||
*/
|
||||
private final void validateLength(String... text) {
|
||||
if (Arrays.stream(text).filter(Objects::nonNull).anyMatch(s -> s.length() > MAXIMUM_LENGTH)) {
|
||||
throw new IllegalStateException(
|
||||
"Dialogue length too long, maximum length is: " + MAXIMUM_LENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The method that splits the length of {@code text}.
|
||||
*
|
||||
* @param text the text that will be split.
|
||||
* @throws IllegalStateException if the calculated number of lines exceeds 4.
|
||||
* @return text if the line is detected to already be split.
|
||||
* @return splittext the text formatted into lines that fit into the dialogue interface
|
||||
*/
|
||||
private final String[] splitLines(String... text) {
|
||||
|
||||
if(text.length > 1){
|
||||
logger.log(Level.INFO, "Detected more than 1 Dialogue line. Assuming Dialogues have been split already.");
|
||||
return text;
|
||||
}
|
||||
int characters = text[0].length();
|
||||
String[] words = text[0].split(" ");
|
||||
double lines = Math.ceil(characters / MAXIMUM_CHARACTERS_PER_LINE) + 1;
|
||||
|
||||
if(lines > 4){
|
||||
throw new IllegalStateException(
|
||||
"Calculated Line Split Exceeds 4 Lines.");
|
||||
}
|
||||
|
||||
ArrayList<String> splitText = new ArrayList<>();
|
||||
int index = 0;
|
||||
|
||||
// Begin Splitting Lines
|
||||
for(int i = 0; i < lines; i++) {
|
||||
int length = 0;
|
||||
StringBuilder line = new StringBuilder();
|
||||
while (length <= MAXIMUM_CHARACTERS_PER_LINE && !(index == words.length)) {
|
||||
String currentWord = "";
|
||||
try {
|
||||
currentWord = words[index];
|
||||
if (length + (currentWord.length() + 1) <= MAXIMUM_CHARACTERS_PER_LINE) {
|
||||
currentWord += " ";
|
||||
} else {
|
||||
currentWord += "";
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.log(Level.INFO, e.toString());
|
||||
}
|
||||
length += currentWord.length();
|
||||
if (length <= MAXIMUM_CHARACTERS_PER_LINE) {
|
||||
line.append(currentWord);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
splitText.add(line.toString());
|
||||
}
|
||||
return splitText.toArray(new String[0]);
|
||||
}
|
||||
|
||||
// Delombok'd Code Below
|
||||
public Queue<ChainablePlugin> getChain() {
|
||||
return this.chain;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return this.active;
|
||||
}
|
||||
|
||||
public Optional<Runnable> getNextAction() {
|
||||
return this.nextAction;
|
||||
}
|
||||
|
||||
public void setActive(boolean active) {
|
||||
this.active = active;
|
||||
}
|
||||
|
||||
public void setNextAction(Optional<Runnable> nextAction) {
|
||||
this.nextAction = nextAction;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -8,7 +8,6 @@ import com.rs2.game.content.quests.QuestAssistant;
|
||||
import com.rs2.game.content.quests.QuestRewards;
|
||||
import com.rs2.game.content.randomevents.FreakyForester;
|
||||
import com.rs2.game.content.randomevents.RandomEventHandler;
|
||||
import com.rs2.game.content.skills.SkillHandler;
|
||||
import com.rs2.game.content.skills.farming.Farmers;
|
||||
import com.rs2.game.content.skills.slayer.Slayer;
|
||||
import com.rs2.game.content.traveling.CarpetTravel;
|
||||
@@ -22,6 +21,12 @@ import com.rs2.game.players.PlayerAssistant;
|
||||
import com.rs2.game.shops.Shops.Shop;
|
||||
import com.rs2.util.Misc;
|
||||
|
||||
/**
|
||||
* Handles Dialogues between NPCs and Players
|
||||
* @Deprecated Consider using {@link DialogueFactoryPlugin} instead to implement dialogues.
|
||||
*
|
||||
*/
|
||||
@Deprecated
|
||||
public class DialogueHandler {
|
||||
|
||||
private final Player player;
|
||||
@@ -3942,32 +3947,9 @@ public class DialogueHandler {
|
||||
"Tzhaar-Mej-Tal");
|
||||
player.nextChat = 0;
|
||||
break;
|
||||
|
||||
/** Bank Settings **/
|
||||
case 1013:
|
||||
if (SkillHandler.isSkilling(player)) {
|
||||
return;
|
||||
}
|
||||
sendNpcChat1("Good day. How may I help you?", player.talkingNpc, "Banker");
|
||||
player.nextChat = 1014;
|
||||
break;
|
||||
case 1014:// bank open done, this place done, settings done, to do
|
||||
// delete pin
|
||||
sendOption("I'd like to access my bank account, please.", "I'd like to check my my P I N settings.", "What is this place?");
|
||||
player.dialogueAction = 251;
|
||||
break;
|
||||
/** What is this place? **/
|
||||
case 1015:
|
||||
sendPlayerChat("What is this place?");
|
||||
player.nextChat = 1016;
|
||||
break;
|
||||
case 1016:
|
||||
sendNpcChat2("This is the bank of " + GameConstants.SERVER_NAME + ".", "We have many branches in many towns.", player.talkingNpc, "Banker");
|
||||
player.nextChat = 0;
|
||||
break;
|
||||
/**
|
||||
* Note on P I N. In order to check your "Pin Settings. You must have
|
||||
* enter your Bank Pin first
|
||||
* BANK P I N Setting
|
||||
* Note on P I N. In order to check your P I N Settings. You must enter your Bank Pin first
|
||||
**/
|
||||
/** I don't know option for Bank Pin **/
|
||||
case 1017:
|
||||
@@ -7469,26 +7451,6 @@ public class DialogueHandler {
|
||||
player.getDialogueHandler().sendNpcChat(player.talkingNpc, ChatEmotes.HAPPY_JOYFUL, "Enjoy your stay here. May it be spiritually uplifting!");
|
||||
player.getDialogueHandler().endDialogue();
|
||||
break;
|
||||
case 3869:
|
||||
player.getDialogueHandler().sendPlayerChat(ChatEmotes.DEFAULT, "Hello, how's it going?");
|
||||
player.nextChat = 3870;
|
||||
break;
|
||||
case 3870:
|
||||
player.getDialogueHandler().sendNpcChat(player.talkingNpc, ChatEmotes.HAPPY_JOYFUL, "I'm fine how are you?");
|
||||
player.nextChat = 3871;
|
||||
break;
|
||||
case 3871:
|
||||
player.getDialogueHandler().sendPlayerChat(ChatEmotes.DEFAULT, "Very well thank you.");
|
||||
player.getDialogueHandler().endDialogue();
|
||||
break;
|
||||
case 3872:
|
||||
player.getDialogueHandler().sendPlayerChat(ChatEmotes.DEFAULT, "Hello, how's it going?");
|
||||
player.nextChat = 3873;
|
||||
break;
|
||||
case 3873:
|
||||
player.getDialogueHandler().sendNpcChat(player.talkingNpc, ChatEmotes.HAPPY_JOYFUL, "Hello there! Nice weather we've been having.");
|
||||
player.getDialogueHandler().endDialogue();
|
||||
break;
|
||||
//holiday events (easter)
|
||||
case 6000:
|
||||
player.getDialogueHandler().sendNpcChat(player.talkingNpc, ChatEmotes.DISTRESSED, "Oh dear... What am I going to do?");
|
||||
|
||||
@@ -12,316 +12,22 @@ import com.rs2.game.players.Player;
|
||||
* Dialogue Options
|
||||
* @author Andrew (Mr Extremez)
|
||||
*/
|
||||
|
||||
/**
|
||||
* Handles Dialogue Options between NPCs and Players
|
||||
* @Deprecated Consider using {@link DialogueFactoryPlugin} instead to implement dialogues.
|
||||
*
|
||||
*/
|
||||
@Deprecated
|
||||
public class DialogueOptions {
|
||||
|
||||
public static void handleDialogueOptions(Player player, int buttonId) {
|
||||
switch (buttonId) {
|
||||
case 9167:
|
||||
switch (player.dialogueAction) {
|
||||
case 63:
|
||||
player.getDialogueHandler().sendDialogues(166, player.npcType);
|
||||
return;
|
||||
case 64:
|
||||
player.getDialogueHandler().sendDialogues(173, player.npcType);
|
||||
return;
|
||||
case 60:
|
||||
player.getDialogueHandler().sendDialogues(277, player.npcType);
|
||||
return;
|
||||
case 61:
|
||||
player.getDialogueHandler().sendDialogues(295, player.npcType);
|
||||
return;
|
||||
case 129:
|
||||
player.getDialogueHandler().sendDialogues(231, player.npcType);
|
||||
return;
|
||||
case 58:
|
||||
player.getDialogueHandler().sendDialogues(540, player.npcType);
|
||||
return;
|
||||
case 68:
|
||||
player.getDialogueHandler().sendDialogues(39, player.npcType);
|
||||
return;
|
||||
case 124:
|
||||
player.getDialogueHandler().sendDialogues(194, player.npcType);
|
||||
return;
|
||||
case 230:
|
||||
player.getDialogueHandler().sendDialogues(1053, player.npcType);
|
||||
return;
|
||||
case 251:
|
||||
player.getPacketSender().openUpBank();
|
||||
player.nextChat = 0;
|
||||
return;
|
||||
case 144:
|
||||
player.getDialogueHandler().sendDialogues(1314, player.npcType);
|
||||
return;
|
||||
case 502:
|
||||
player.getDialogueHandler().sendDialogues(1026, player.npcType);
|
||||
return;
|
||||
case 1301: // first option haircut.
|
||||
player.getDialogueHandler().sendDialogues(1302, 598);
|
||||
return;
|
||||
case 53:
|
||||
if (player.objectId == 1293 || player.objectId == 1317) {
|
||||
player.getPlayerAssistant().startTeleport(2542, 3169, 0, "modern");
|
||||
} else {
|
||||
player.getPacketSender().sendMessage("You can't teleport there, because you are already there!");
|
||||
player.getPacketSender().closeAllWindows();
|
||||
}
|
||||
return;
|
||||
case 159:
|
||||
player.getDialogueHandler().sendDialogues(3161, player.npcType);
|
||||
return;
|
||||
case 167:
|
||||
player.getDialogueHandler().sendDialogues(1343, player.npcType);
|
||||
return;
|
||||
case 222:
|
||||
player.getDialogueHandler().sendDialogues(911, player.npcType);
|
||||
player.dialogueAction = -1;
|
||||
return;
|
||||
case 182:
|
||||
player.getDialogueHandler().sendNpcChat1("No, I was hoping someone could help me find it though.", player.talkingNpc, "Squire");
|
||||
player.nextChat = 0;
|
||||
return;
|
||||
case 188:
|
||||
player.getDialogueHandler().sendDialogues(3129, 945);
|
||||
return;
|
||||
case 185:
|
||||
player.getDialogueHandler().sendDialogues(629, player.npcType);
|
||||
return;
|
||||
case 186: // Shield of Arrav
|
||||
player.getDialogueHandler().sendDialogues(629, player.npcType);
|
||||
return;
|
||||
case 702:
|
||||
player.getDialogueHandler().sendDialogues(3567, player.npcType);
|
||||
return;
|
||||
case 7555: //lostCity 1
|
||||
player.getDialogueHandler().sendDialogues(3701, player.npcType);
|
||||
return;
|
||||
case 10000: // Shop
|
||||
if (!player.inPlayerShopArea()) {
|
||||
player.getDialogueHandler().sendStatement("You need to be in a bank zone or trade area for this.");
|
||||
return;
|
||||
}
|
||||
player.getDialogueHandler().sendStatement("You summoned your shop!");
|
||||
BotHandler.playerShop(player);
|
||||
return;
|
||||
}
|
||||
player.dialogueAction = 0;
|
||||
player.getPacketSender().closeAllWindows();
|
||||
break;
|
||||
|
||||
case 9168:
|
||||
switch (player.dialogueAction) {
|
||||
case 63:
|
||||
player.getDialogueHandler().sendDialogues(167, player.npcType);
|
||||
return;
|
||||
case 64:
|
||||
player.getDialogueHandler().sendDialogues(174, player.npcType);
|
||||
return;
|
||||
case 60:
|
||||
player.getDialogueHandler().sendDialogues(279, player.npcType);
|
||||
return;
|
||||
case 61:
|
||||
player.getDialogueHandler().sendDialogues(297, player.npcType);
|
||||
return;
|
||||
case 124:
|
||||
player.getDialogueHandler().sendDialogues(192, player.npcType);
|
||||
return;
|
||||
case 126:
|
||||
player.getDialogueHandler().sendDialogues(203, player.npcType);
|
||||
return;
|
||||
case 58:
|
||||
player.getDialogueHandler().sendDialogues(538, player.npcType);
|
||||
return;
|
||||
case 68:
|
||||
player.getDialogueHandler().sendDialogues(40, player.npcType);
|
||||
return;
|
||||
case 230:
|
||||
player.getDialogueHandler().sendDialogues(1049, player.npcType);
|
||||
break;
|
||||
case 251:
|
||||
player.getBankPin().bankPinSettings();
|
||||
player.nextChat = 0;
|
||||
return;
|
||||
case 502:
|
||||
player.getDialogueHandler().sendDialogues(1022, player.npcType);
|
||||
return;
|
||||
case 1301:
|
||||
player.getDialogueHandler().sendDialogues(1308, 598);
|
||||
return;
|
||||
case 144:
|
||||
player.getDialogueHandler().sendDialogues(1315, player.npcType);
|
||||
return;
|
||||
case 53:
|
||||
if (player.objectId == 1294 || player.objectId == 1317) {
|
||||
player.getPlayerAssistant().startTeleport(2461, 3444, 0,
|
||||
"modern");
|
||||
} else {
|
||||
player.getPacketSender().sendMessage("You can't teleport there, because you are already there!");
|
||||
player.getPacketSender().closeAllWindows();
|
||||
}
|
||||
return;
|
||||
case 159:
|
||||
player.getDialogueHandler().sendDialogues(3195, player.npcType);
|
||||
return;
|
||||
case 167:
|
||||
player.getDialogueHandler().sendDialogues(1344, player.npcType);
|
||||
return;
|
||||
case 222:
|
||||
player.getDialogueHandler().sendDialogues(912, player.npcType);
|
||||
player.dialogueAction = -1;
|
||||
return;
|
||||
case 182:
|
||||
player.getDialogueHandler().sendDialogues(615, player.npcType);
|
||||
return;
|
||||
case 188:
|
||||
player.getDialogueHandler().sendDialogues(3130, 945);
|
||||
return;
|
||||
case 185:
|
||||
player.getDialogueHandler().sendDialogues(628, player.npcType);
|
||||
return;
|
||||
case 186: // Shield of Arrav
|
||||
player.getDialogueHandler().sendDialogues(628, player.npcType);
|
||||
return;
|
||||
case 702:
|
||||
player.getDialogueHandler().sendDialogues(3568, player.npcType);
|
||||
return;
|
||||
case 7555:
|
||||
player.getDialogueHandler().sendDialogues(3597, player.npcType);
|
||||
return;
|
||||
case 10000:
|
||||
player.getDialogueHandler().sendStatement("You close your shop!");
|
||||
BotHandler.closeShop(player);
|
||||
return;
|
||||
}
|
||||
player.dialogueAction = 0;
|
||||
player.getPacketSender().closeAllWindows();
|
||||
break;
|
||||
/*
|
||||
* TWO OPTIONS
|
||||
*/
|
||||
|
||||
case 9169:
|
||||
switch (player.dialogueAction) {
|
||||
case 63:
|
||||
player.getDialogueHandler().sendDialogues(168, player.npcType);
|
||||
return;
|
||||
case 64:
|
||||
player.getDialogueHandler().sendDialogues(175, player.npcType);
|
||||
return;
|
||||
case 60:
|
||||
player.getDialogueHandler().sendDialogues(278, player.npcType);
|
||||
return;
|
||||
case 61:
|
||||
player.getDialogueHandler().sendDialogues(296, player.npcType);
|
||||
return;
|
||||
case 53:
|
||||
if (player.objectId == 1294 || player.objectId == 1293) {
|
||||
player.getPlayerAssistant().startTeleport(3179, 3507, 0,
|
||||
"modern");
|
||||
} else {
|
||||
player.getPacketSender().sendMessage("You can't teleport there, because you are already there!");
|
||||
player.getPacketSender().closeAllWindows();
|
||||
}
|
||||
return;
|
||||
case 129:
|
||||
player.getDialogueHandler().sendDialogues(232, player.npcType);
|
||||
return;
|
||||
case 126:
|
||||
player.getDialogueHandler().sendDialogues(204, player.npcType);
|
||||
return;
|
||||
case 144:
|
||||
player.getDialogueHandler().sendDialogues(1316, player.npcType);
|
||||
return;
|
||||
case 124:
|
||||
player.getDialogueHandler().sendDialogues(3193, 741);
|
||||
return;
|
||||
case 58:
|
||||
player.getDialogueHandler().sendDialogues(539, player.npcType);
|
||||
return;
|
||||
case 68:
|
||||
player.getDialogueHandler().sendDialogues(41, player.npcType);
|
||||
return;
|
||||
case 230:
|
||||
player.getDialogueHandler().sendDialogues(1050, player.npcType);
|
||||
break;
|
||||
case 251:
|
||||
player.getDialogueHandler().sendDialogues(1015, 494);
|
||||
return;
|
||||
case 502:
|
||||
player.getDialogueHandler().sendDialogues(1025, player.npcType);
|
||||
return;
|
||||
case 1301:
|
||||
player.getDialogueHandler().sendDialogues(1306, 598);
|
||||
return;
|
||||
case 222:
|
||||
player.getDialogueHandler().sendDialogues(913, player.npcType);
|
||||
player.dialogueAction = -1;
|
||||
return;
|
||||
case 167:
|
||||
player.getDialogueHandler().sendDialogues(1342, player.npcType);
|
||||
return;
|
||||
case 159:
|
||||
player.getDialogueHandler().sendDialogues(3160, player.npcType);
|
||||
return;
|
||||
case 182:
|
||||
player.getDialogueHandler().sendNpcChat1("Of course he is angry...", player.talkingNpc, "Squire");
|
||||
player.nextChat = 0;
|
||||
return;
|
||||
case 188:
|
||||
player.getDialogueHandler().sendDialogues(3131, 945);
|
||||
return;
|
||||
case 185:
|
||||
player.getDialogueHandler().sendDialogues(630, player.npcType);
|
||||
return;
|
||||
case 186: // Shield of Arrav
|
||||
player.getDialogueHandler().sendDialogues(691, player.npcType);
|
||||
return;
|
||||
case 702:
|
||||
player.getDialogueHandler().sendDialogues(3569, player.npcType);
|
||||
return;
|
||||
case 7555:
|
||||
player.getDialogueHandler().sendDialogues(3599, player.npcType);
|
||||
return;
|
||||
case 10000:
|
||||
player.getDialogueHandler().sendStatement("You withdraw " + Bot.formatSellPrice(BotHandler.checkCoins(player)) + " from your shop!");
|
||||
BotHandler.takeCoins(player);
|
||||
return;
|
||||
}
|
||||
player.dialogueAction = 0;
|
||||
player.getPacketSender().closeAllWindows();
|
||||
break;
|
||||
case 9190:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3533, player.npcType);//4
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 9191:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3540, player.npcType);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 9192:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3548, player.npcType);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 9193:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3550, player.npcType);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 9194:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3553, player.npcType);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
// First
|
||||
case 9157:// barrows tele to tunnels
|
||||
if (player.dialogueAction == 1) {
|
||||
int r = 4;
|
||||
@@ -602,31 +308,25 @@ public class DialogueOptions {
|
||||
} else if (player.dialogueAction == 3575) {
|
||||
player.getDialogueHandler().sendDialogues(3577, player.npcType);
|
||||
return;
|
||||
}
|
||||
else if (player.dialogueAction == 7556)
|
||||
{
|
||||
} else if (player.dialogueAction == 7556) {
|
||||
player.getDialogueHandler().sendDialogues(3710, player.npcType);
|
||||
return;
|
||||
}
|
||||
else if (player.dialogueAction == 7557)
|
||||
{
|
||||
} else if (player.dialogueAction == 7557) {
|
||||
player.getDialogueHandler().sendDialogues(3586, player.npcType);
|
||||
return;
|
||||
}
|
||||
else if (player.dialogueAction == 7558)
|
||||
{
|
||||
} else if (player.dialogueAction == 7558) {
|
||||
player.getDialogueHandler().sendDialogues(3586, player.npcType);
|
||||
return;
|
||||
}
|
||||
else if (player.dialogueAction == 7559)
|
||||
{
|
||||
} else if (player.dialogueAction == 7559) {
|
||||
player.getDialogueHandler().sendDialogues(3864, player.npcType);
|
||||
return;
|
||||
}
|
||||
player.dialogueAction = 0;
|
||||
player.getPacketSender().closeAllWindows();
|
||||
|
||||
break;
|
||||
|
||||
// Second
|
||||
case 9158:
|
||||
if (player.dialogueAction == 8) {
|
||||
player.getPlayerAssistant().fixAllBarrows();
|
||||
@@ -835,24 +535,294 @@ public class DialogueOptions {
|
||||
} else if (player.dialogueAction == 3575) {
|
||||
player.getDialogueHandler().sendDialogues(3576, player.npcType);
|
||||
return;
|
||||
} else if (player.dialogueAction == 7556)
|
||||
{
|
||||
} else if (player.dialogueAction == 7556) {
|
||||
player.getDialogueHandler().sendDialogues(3702, player.npcType);
|
||||
return;
|
||||
} else if (player.dialogueAction == 7557)
|
||||
{
|
||||
} else if (player.dialogueAction == 7557) {
|
||||
player.getDialogueHandler().sendDialogues(3704, player.npcType);
|
||||
return;
|
||||
}
|
||||
else if (player.dialogueAction == 7559)
|
||||
{
|
||||
} else if (player.dialogueAction == 7559) {
|
||||
player.getDialogueHandler().sendDialogues(3865, player.npcType);
|
||||
return;
|
||||
}
|
||||
player.dialogueAction = 0;
|
||||
player.getPacketSender().closeAllWindows();
|
||||
|
||||
break;
|
||||
|
||||
/*
|
||||
* THREE OPTIONS
|
||||
*/
|
||||
|
||||
// First
|
||||
case 9167:
|
||||
switch (player.dialogueAction) {
|
||||
case 63:
|
||||
player.getDialogueHandler().sendDialogues(166, player.npcType);
|
||||
return;
|
||||
case 64:
|
||||
player.getDialogueHandler().sendDialogues(173, player.npcType);
|
||||
return;
|
||||
case 60:
|
||||
player.getDialogueHandler().sendDialogues(277, player.npcType);
|
||||
return;
|
||||
case 61:
|
||||
player.getDialogueHandler().sendDialogues(295, player.npcType);
|
||||
return;
|
||||
case 129:
|
||||
player.getDialogueHandler().sendDialogues(231, player.npcType);
|
||||
return;
|
||||
case 58:
|
||||
player.getDialogueHandler().sendDialogues(540, player.npcType);
|
||||
return;
|
||||
case 68:
|
||||
player.getDialogueHandler().sendDialogues(39, player.npcType);
|
||||
return;
|
||||
case 124:
|
||||
player.getDialogueHandler().sendDialogues(194, player.npcType);
|
||||
return;
|
||||
case 230:
|
||||
player.getDialogueHandler().sendDialogues(1053, player.npcType);
|
||||
return;
|
||||
case 144:
|
||||
player.getDialogueHandler().sendDialogues(1314, player.npcType);
|
||||
return;
|
||||
case 502:
|
||||
player.getDialogueHandler().sendDialogues(1026, player.npcType);
|
||||
return;
|
||||
case 1301: // first option haircut.
|
||||
player.getDialogueHandler().sendDialogues(1302, 598);
|
||||
return;
|
||||
case 53:
|
||||
if (player.objectId == 1293 || player.objectId == 1317) {
|
||||
player.getPlayerAssistant().startTeleport(2542, 3169, 0, "modern");
|
||||
} else {
|
||||
player.getPacketSender().sendMessage("You can't teleport there, because you are already there!");
|
||||
player.getPacketSender().closeAllWindows();
|
||||
}
|
||||
return;
|
||||
case 159:
|
||||
player.getDialogueHandler().sendDialogues(3161, player.npcType);
|
||||
return;
|
||||
case 167:
|
||||
player.getDialogueHandler().sendDialogues(1343, player.npcType);
|
||||
return;
|
||||
case 222:
|
||||
player.getDialogueHandler().sendDialogues(911, player.npcType);
|
||||
player.dialogueAction = -1;
|
||||
return;
|
||||
case 182:
|
||||
player.getDialogueHandler().sendNpcChat1("No, I was hoping someone could help me find it though.", player.talkingNpc, "Squire");
|
||||
player.nextChat = 0;
|
||||
return;
|
||||
case 188:
|
||||
player.getDialogueHandler().sendDialogues(3129, 945);
|
||||
return;
|
||||
case 185:
|
||||
player.getDialogueHandler().sendDialogues(629, player.npcType);
|
||||
return;
|
||||
case 186: // Shield of Arrav
|
||||
player.getDialogueHandler().sendDialogues(629, player.npcType);
|
||||
return;
|
||||
case 702:
|
||||
player.getDialogueHandler().sendDialogues(3567, player.npcType);
|
||||
return;
|
||||
case 7555: //lostCity 1
|
||||
player.getDialogueHandler().sendDialogues(3701, player.npcType);
|
||||
return;
|
||||
case 10000: // Shop
|
||||
if (!player.inPlayerShopArea()) {
|
||||
player.getDialogueHandler().sendStatement("You need to be in a bank zone or trade area for this.");
|
||||
return;
|
||||
}
|
||||
player.getDialogueHandler().sendStatement("You summoned your shop!");
|
||||
BotHandler.playerShop(player);
|
||||
return;
|
||||
}
|
||||
player.dialogueAction = 0;
|
||||
player.getPacketSender().closeAllWindows();
|
||||
|
||||
break;
|
||||
|
||||
// Second
|
||||
case 9168:
|
||||
switch (player.dialogueAction) {
|
||||
case 63:
|
||||
player.getDialogueHandler().sendDialogues(167, player.npcType);
|
||||
return;
|
||||
case 64:
|
||||
player.getDialogueHandler().sendDialogues(174, player.npcType);
|
||||
return;
|
||||
case 60:
|
||||
player.getDialogueHandler().sendDialogues(279, player.npcType);
|
||||
return;
|
||||
case 61:
|
||||
player.getDialogueHandler().sendDialogues(297, player.npcType);
|
||||
return;
|
||||
case 124:
|
||||
player.getDialogueHandler().sendDialogues(192, player.npcType);
|
||||
return;
|
||||
case 126:
|
||||
player.getDialogueHandler().sendDialogues(203, player.npcType);
|
||||
return;
|
||||
case 58:
|
||||
player.getDialogueHandler().sendDialogues(538, player.npcType);
|
||||
return;
|
||||
case 68:
|
||||
player.getDialogueHandler().sendDialogues(40, player.npcType);
|
||||
return;
|
||||
case 230:
|
||||
player.getDialogueHandler().sendDialogues(1049, player.npcType);
|
||||
break;
|
||||
case 502:
|
||||
player.getDialogueHandler().sendDialogues(1022, player.npcType);
|
||||
return;
|
||||
case 1301:
|
||||
player.getDialogueHandler().sendDialogues(1308, 598);
|
||||
return;
|
||||
case 144:
|
||||
player.getDialogueHandler().sendDialogues(1315, player.npcType);
|
||||
return;
|
||||
case 53:
|
||||
if (player.objectId == 1294 || player.objectId == 1317) {
|
||||
player.getPlayerAssistant().startTeleport(2461, 3444, 0,
|
||||
"modern");
|
||||
} else {
|
||||
player.getPacketSender().sendMessage("You can't teleport there, because you are already there!");
|
||||
player.getPacketSender().closeAllWindows();
|
||||
}
|
||||
return;
|
||||
case 159:
|
||||
player.getDialogueHandler().sendDialogues(3195, player.npcType);
|
||||
return;
|
||||
case 167:
|
||||
player.getDialogueHandler().sendDialogues(1344, player.npcType);
|
||||
return;
|
||||
case 222:
|
||||
player.getDialogueHandler().sendDialogues(912, player.npcType);
|
||||
player.dialogueAction = -1;
|
||||
return;
|
||||
case 182:
|
||||
player.getDialogueHandler().sendDialogues(615, player.npcType);
|
||||
return;
|
||||
case 188:
|
||||
player.getDialogueHandler().sendDialogues(3130, 945);
|
||||
return;
|
||||
case 185:
|
||||
player.getDialogueHandler().sendDialogues(628, player.npcType);
|
||||
return;
|
||||
case 186: // Shield of Arrav
|
||||
player.getDialogueHandler().sendDialogues(628, player.npcType);
|
||||
return;
|
||||
case 702:
|
||||
player.getDialogueHandler().sendDialogues(3568, player.npcType);
|
||||
return;
|
||||
case 7555:
|
||||
player.getDialogueHandler().sendDialogues(3597, player.npcType);
|
||||
return;
|
||||
case 10000:
|
||||
player.getDialogueHandler().sendStatement("You close your shop!");
|
||||
BotHandler.closeShop(player);
|
||||
return;
|
||||
}
|
||||
player.dialogueAction = 0;
|
||||
player.getPacketSender().closeAllWindows();
|
||||
break;
|
||||
|
||||
// Third
|
||||
case 9169:
|
||||
switch (player.dialogueAction) {
|
||||
case 63:
|
||||
player.getDialogueHandler().sendDialogues(168, player.npcType);
|
||||
return;
|
||||
case 64:
|
||||
player.getDialogueHandler().sendDialogues(175, player.npcType);
|
||||
return;
|
||||
case 60:
|
||||
player.getDialogueHandler().sendDialogues(278, player.npcType);
|
||||
return;
|
||||
case 61:
|
||||
player.getDialogueHandler().sendDialogues(296, player.npcType);
|
||||
return;
|
||||
case 53:
|
||||
if (player.objectId == 1294 || player.objectId == 1293) {
|
||||
player.getPlayerAssistant().startTeleport(3179, 3507, 0,
|
||||
"modern");
|
||||
} else {
|
||||
player.getPacketSender().sendMessage("You can't teleport there, because you are already there!");
|
||||
player.getPacketSender().closeAllWindows();
|
||||
}
|
||||
return;
|
||||
case 129:
|
||||
player.getDialogueHandler().sendDialogues(232, player.npcType);
|
||||
return;
|
||||
case 126:
|
||||
player.getDialogueHandler().sendDialogues(204, player.npcType);
|
||||
return;
|
||||
case 144:
|
||||
player.getDialogueHandler().sendDialogues(1316, player.npcType);
|
||||
return;
|
||||
case 124:
|
||||
player.getDialogueHandler().sendDialogues(3193, 741);
|
||||
return;
|
||||
case 58:
|
||||
player.getDialogueHandler().sendDialogues(539, player.npcType);
|
||||
return;
|
||||
case 68:
|
||||
player.getDialogueHandler().sendDialogues(41, player.npcType);
|
||||
return;
|
||||
case 230:
|
||||
player.getDialogueHandler().sendDialogues(1050, player.npcType);
|
||||
break;
|
||||
case 502:
|
||||
player.getDialogueHandler().sendDialogues(1025, player.npcType);
|
||||
return;
|
||||
case 1301:
|
||||
player.getDialogueHandler().sendDialogues(1306, 598);
|
||||
return;
|
||||
case 222:
|
||||
player.getDialogueHandler().sendDialogues(913, player.npcType);
|
||||
player.dialogueAction = -1;
|
||||
return;
|
||||
case 167:
|
||||
player.getDialogueHandler().sendDialogues(1342, player.npcType);
|
||||
return;
|
||||
case 159:
|
||||
player.getDialogueHandler().sendDialogues(3160, player.npcType);
|
||||
return;
|
||||
case 182:
|
||||
player.getDialogueHandler().sendNpcChat1("Of course he is angry...", player.talkingNpc, "Squire");
|
||||
player.nextChat = 0;
|
||||
return;
|
||||
case 188:
|
||||
player.getDialogueHandler().sendDialogues(3131, 945);
|
||||
return;
|
||||
case 185:
|
||||
player.getDialogueHandler().sendDialogues(630, player.npcType);
|
||||
return;
|
||||
case 186: // Shield of Arrav
|
||||
player.getDialogueHandler().sendDialogues(691, player.npcType);
|
||||
return;
|
||||
case 702:
|
||||
player.getDialogueHandler().sendDialogues(3569, player.npcType);
|
||||
return;
|
||||
case 7555:
|
||||
player.getDialogueHandler().sendDialogues(3599, player.npcType);
|
||||
return;
|
||||
case 10000:
|
||||
player.getDialogueHandler().sendStatement("You withdraw " + Bot.formatSellPrice(BotHandler.checkCoins(player)) + " from your shop!");
|
||||
BotHandler.takeCoins(player);
|
||||
return;
|
||||
}
|
||||
player.dialogueAction = 0;
|
||||
player.getPacketSender().closeAllWindows();
|
||||
break;
|
||||
|
||||
/*
|
||||
* FOUR OPTIONS
|
||||
*/
|
||||
|
||||
// First
|
||||
case 9178:
|
||||
if (player.dialogueAction == 2) {
|
||||
player.getPlayerAssistant().startTeleport(3428, 3538, 0, "modern");
|
||||
@@ -922,8 +892,10 @@ public class DialogueOptions {
|
||||
if (player.dialogueAction == 701) {
|
||||
player.getDialogueHandler().sendDialogues(3561, player.npcType);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Second
|
||||
case 9179:
|
||||
if (player.dialogueAction == 2) {
|
||||
player.getPlayerAssistant().startTeleport(2884, 3395, 0, "modern");
|
||||
@@ -991,8 +963,10 @@ public class DialogueOptions {
|
||||
if (player.dialogueAction == 701) {
|
||||
player.getDialogueHandler().sendDialogues(3562, player.npcType);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Third
|
||||
case 9180:
|
||||
if (player.dialogueAction == 2) {
|
||||
player.getPlayerAssistant().startTeleport(2471, 10137, 0, "modern");
|
||||
@@ -1063,8 +1037,10 @@ public class DialogueOptions {
|
||||
if (player.dialogueAction == 701) {
|
||||
player.getDialogueHandler().sendDialogues(3563, player.npcType);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Fourth
|
||||
case 9181:
|
||||
if (player.dialogueAction == 2) {
|
||||
player.getPlayerAssistant().startTeleport(2669, 3714, 0, "modern");
|
||||
@@ -1120,8 +1096,63 @@ public class DialogueOptions {
|
||||
if (player.dialogueAction == 701) {
|
||||
player.getDialogueHandler().sendDialogues(3564, player.npcType);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
||||
/*
|
||||
* FIVE OPTIONS
|
||||
*/
|
||||
|
||||
// First
|
||||
case 9190:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3533, player.npcType);//4
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Second
|
||||
case 9191:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3540, player.npcType);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Third
|
||||
case 9192:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3548, player.npcType);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Fourth
|
||||
case 9193:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3550, player.npcType);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Fifth
|
||||
case 9194:
|
||||
switch (player.dialogueAction) {
|
||||
case 112:
|
||||
player.getDialogueHandler().sendDialogues(3553, player.npcType);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.rs2.game.dialogues;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
/**
|
||||
* Represents an abstract dialogue, in which extending classes will be able to construct and send
|
||||
* dialogues to a player.
|
||||
*
|
||||
* @author Vult-R
|
||||
*/
|
||||
public abstract class DialoguePlugin {
|
||||
|
||||
/**
|
||||
* The action buttons responsible for dialogues.
|
||||
*/
|
||||
public static final ImmutableList<Integer> DIALOGUE_BUTTONS = ImmutableList.of(9157, 9167, 9178, 9190,
|
||||
9158, 9168, 9179, 9191, 9169, 9180, 9192, 9181, 9193, 9194);
|
||||
|
||||
/**
|
||||
* Sends a player a dialogue.
|
||||
*
|
||||
* @param factory The factory for this dialogue.
|
||||
*/
|
||||
public abstract void sendDialogues(DialogueFactoryPlugin factory);
|
||||
|
||||
/**
|
||||
* Checks if the button triggered is an optional dialogue button.
|
||||
*
|
||||
* @param button The index of the button being checked.
|
||||
*
|
||||
* @return The result of the operation.
|
||||
*/
|
||||
public static final boolean isDialogueButton(int button) {
|
||||
return DIALOGUE_BUTTONS.stream().anyMatch(search -> search == button);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.rs2.game.dialogues;
|
||||
|
||||
/*
|
||||
* Copyright (c) 2010-2011 Graham Edgecombe Copyright (c) 2011-2016 Major <major.emrs@gmail.com> and
|
||||
* other apollo contributors
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any purpose with or without
|
||||
* fee is hereby granted, provided that the above copyright notice and this permission notice appear
|
||||
* in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
|
||||
* SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Represents the expressions of entities for dialogue.
|
||||
*
|
||||
* @author Vult-R
|
||||
*/
|
||||
public enum ExpressionPlugin {
|
||||
HAPPY(588),
|
||||
ANXIOUS(589),
|
||||
CALM_TALK(590),
|
||||
DEFAULT(591),
|
||||
EVIL(592),
|
||||
BAD(593),
|
||||
WICKED(594),
|
||||
ANNOYED(595),
|
||||
DISTRESSED(596),
|
||||
AFFLICTED(597),
|
||||
DRUNK_LEFT(600),
|
||||
DRUNK_RIGHT(601),
|
||||
NOT_INTERESTED(602),
|
||||
SLEEPY(603),
|
||||
PLAIN_EVIL(604),
|
||||
LAUGH(605),
|
||||
SNIGGER(606),
|
||||
HAVE_FUN(607),
|
||||
GUFFAW(608),
|
||||
EVIL_LAUGH_SHORT(609),
|
||||
SLIGHTLY_SAD(610),
|
||||
SAD(599),
|
||||
VERY_SAD(611),
|
||||
ON_ONE_HAND(612),
|
||||
ALMOST_CRYING(598),
|
||||
NEARLY_CRYING(613),
|
||||
ANGRY(614),
|
||||
FURIOUS(615),
|
||||
ENRAGED(616),
|
||||
MAD(617);
|
||||
|
||||
/**
|
||||
* The id for this expression.
|
||||
*/
|
||||
private final int id;
|
||||
|
||||
/**
|
||||
* Creates a new {@link ExpressionPlugin}.
|
||||
*
|
||||
* @param expression The id for this expression.
|
||||
*/
|
||||
private ExpressionPlugin(int expression) {
|
||||
this.id = expression;
|
||||
}
|
||||
|
||||
// Delombok'd Code Below
|
||||
public int getId() {
|
||||
return this.id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
package com.rs2.game.dialogues;
|
||||
|
||||
|
||||
/**
|
||||
* The {@link ChainablePlugin} implementation that represents dialogue in which an NPC is talking.
|
||||
*
|
||||
* @author Vult-R
|
||||
*/
|
||||
public final class NPCDialogue implements ChainablePlugin {
|
||||
|
||||
/**
|
||||
* The id of this npc.
|
||||
*/
|
||||
private int id = -1;
|
||||
|
||||
/**
|
||||
* The expression of this NPC.
|
||||
*/
|
||||
private final ExpressionPlugin expression;
|
||||
|
||||
/**
|
||||
* The text for this dialogue.
|
||||
*/
|
||||
private final String[] lines;
|
||||
|
||||
/**
|
||||
* Creates a new {@link NPCDialogue}
|
||||
*
|
||||
* @param lines The text for this dialogue.
|
||||
*/
|
||||
public NPCDialogue(String... lines) {
|
||||
this(ExpressionPlugin.DEFAULT, lines);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link NPCDialogue}
|
||||
*
|
||||
* @param expression The expression of this npc.
|
||||
*
|
||||
* @param lines The text for this dialogue.
|
||||
*/
|
||||
public NPCDialogue(ExpressionPlugin expression, String... lines) {
|
||||
this.expression = expression;
|
||||
this.lines = lines;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link NPCDialogue}
|
||||
*
|
||||
* @param id The id of this npc.
|
||||
*
|
||||
* @param lines The text for this dialogue.
|
||||
*/
|
||||
public NPCDialogue(int id, String... lines) {
|
||||
this(id, ExpressionPlugin.DEFAULT, lines);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link NPCDialogue}
|
||||
*
|
||||
* @param id The id of this npc.
|
||||
*
|
||||
* @param expression The expression of this npc.
|
||||
*
|
||||
* @param lines The text for this dialogue.
|
||||
*/
|
||||
public NPCDialogue(int id, ExpressionPlugin expression, String... lines) {
|
||||
this.id = id;
|
||||
this.expression = expression;
|
||||
this.lines = lines;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(DialogueFactoryPlugin factory) {
|
||||
factory.sendNPCChat(this);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public ExpressionPlugin getExpression() {
|
||||
return this.expression;
|
||||
}
|
||||
|
||||
// Delombok'd Code Below
|
||||
public String[] getLines() {
|
||||
return this.lines;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public boolean equals(final Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof NPCDialogue)) return false;
|
||||
final NPCDialogue other = (NPCDialogue) o;
|
||||
if (this.getId() != other.getId()) return false;
|
||||
final Object this$expression = this.getExpression();
|
||||
final Object other$expression = other.getExpression();
|
||||
if (this$expression == null ? other$expression != null : !this$expression.equals(other$expression))
|
||||
return false;
|
||||
if (!java.util.Arrays.deepEquals(this.getLines(), other.getLines())) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
final int PRIME = 59;
|
||||
int result = 1;
|
||||
result = result * PRIME + this.getId();
|
||||
final Object $expression = this.getExpression();
|
||||
result = result * PRIME + ($expression == null ? 43 : $expression.hashCode());
|
||||
result = result * PRIME + java.util.Arrays.deepHashCode(this.getLines());
|
||||
return result;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "AstraeusNPCDialogue(id=" + this.getId() + ", expression=" + this.getExpression() + ", lines=" + java.util.Arrays.deepToString(this.getLines()) + ")";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
package com.rs2.game.dialogues;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* The {@link ChainablePlugin} implementation that represents a dialogue in which options are given to the
|
||||
* player.
|
||||
*
|
||||
* @author Vult-R
|
||||
*/
|
||||
public final class OptionDialoguePlugin implements ChainablePlugin {
|
||||
|
||||
/**
|
||||
* The text for this dialogue.
|
||||
*/
|
||||
private final String[] lines;
|
||||
|
||||
/**
|
||||
* The list of actions for this dialogue.
|
||||
*/
|
||||
private final List<Runnable> actions = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Creates a new {@link OptionDialoguePlugin}.
|
||||
*
|
||||
* @param option1 The text for the first option.
|
||||
*
|
||||
* @param action1 The action for the first action.
|
||||
*
|
||||
* @param option2 The text for the second option.
|
||||
*
|
||||
* @param action2 The action for the second action.
|
||||
*/
|
||||
public OptionDialoguePlugin(String option1, Runnable action1, String option2, Runnable action2) {
|
||||
lines = new String[] {option1, option2};
|
||||
actions.add(action1);
|
||||
actions.add(action2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link OptionDialoguePlugin}.
|
||||
*
|
||||
* @param option1 The text for the first option.
|
||||
*
|
||||
* @param action1 The action for the first action.
|
||||
*
|
||||
* @param option2 The text for the second option.
|
||||
*
|
||||
* @param action2 The action for the second action.
|
||||
*
|
||||
* @param option3 The text for the third option.
|
||||
*
|
||||
* @param action3 The action for the third action.
|
||||
*/
|
||||
public OptionDialoguePlugin(String option1, Runnable action1, String option2, Runnable action2,
|
||||
String option3, Runnable action3) {
|
||||
lines = new String[] {option1, option2, option3};
|
||||
actions.add(action1);
|
||||
actions.add(action2);
|
||||
actions.add(action3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link OptionDialoguePlugin}.
|
||||
*
|
||||
* @param option1 The text for the first option.
|
||||
*
|
||||
* @param action1 The action for the first action.
|
||||
*
|
||||
* @param option2 The text for the second option.
|
||||
*
|
||||
* @param action2 The action for the second action.
|
||||
*
|
||||
* @param option3 The text for the third option.
|
||||
*
|
||||
* @param action3 The action for the third action.
|
||||
*
|
||||
* @param option4 The text for the four option.
|
||||
*
|
||||
* @param action4 The action for the four action.
|
||||
*/
|
||||
public OptionDialoguePlugin(String option1, Runnable action1, String option2, Runnable action2,
|
||||
String option3, Runnable action3, String option4, Runnable action4) {
|
||||
lines = new String[] {option1, option2, option3, option4};
|
||||
actions.add(action1);
|
||||
actions.add(action2);
|
||||
actions.add(action3);
|
||||
actions.add(action4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link OptionDialoguePlugin}.
|
||||
*
|
||||
* @param option1 The text for the first option.
|
||||
*
|
||||
* @param action1 The action for the first action.
|
||||
*
|
||||
* @param option2 The text for the second option.
|
||||
*
|
||||
* @param action2 The action for the second action.
|
||||
*
|
||||
* @param option3 The text for the third option.
|
||||
*
|
||||
* @param action3 The action for the third action.
|
||||
*
|
||||
* @param option4 The text for the four option.
|
||||
*
|
||||
* @param action4 The action for the four action.
|
||||
*
|
||||
* @param option5 The text for the fifth option.
|
||||
*
|
||||
* @param action5 The action for the fifth action.
|
||||
*/
|
||||
public OptionDialoguePlugin(String option1, Runnable action1, String option2, Runnable action2,
|
||||
String option3, Runnable action3, String option4, Runnable action4, String option5,
|
||||
Runnable action5) {
|
||||
lines = new String[] {option1, option2, option3, option4, option5};
|
||||
actions.add(action1);
|
||||
actions.add(action2);
|
||||
actions.add(action3);
|
||||
actions.add(action4);
|
||||
actions.add(action5);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(DialogueFactoryPlugin factory) {
|
||||
factory.sendOption(this);
|
||||
}
|
||||
|
||||
// Delombok'd code below
|
||||
public String[] getLines() {
|
||||
return this.lines;
|
||||
}
|
||||
|
||||
public List<Runnable> getActions() {
|
||||
return this.actions;
|
||||
}
|
||||
|
||||
public boolean equals(final Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof OptionDialoguePlugin)) return false;
|
||||
final OptionDialoguePlugin other = (OptionDialoguePlugin) o;
|
||||
if (!java.util.Arrays.deepEquals(this.getLines(), other.getLines())) return false;
|
||||
final Object this$actions = this.getActions();
|
||||
final Object other$actions = other.getActions();
|
||||
if (this$actions == null ? other$actions != null : !this$actions.equals(other$actions)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
final int PRIME = 59;
|
||||
int result = 1;
|
||||
result = result * PRIME + java.util.Arrays.deepHashCode(this.getLines());
|
||||
final Object $actions = this.getActions();
|
||||
result = result * PRIME + ($actions == null ? 43 : $actions.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "AstraeusOptionDialogue(lines=" + java.util.Arrays.deepToString(this.getLines()) + ", actions=" + this.getActions() + ")";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.rs2.game.dialogues;
|
||||
|
||||
/**
|
||||
* A {@link ChainablePlugin} implementation that represents a player talking.
|
||||
*
|
||||
* @author Vult-R
|
||||
*/
|
||||
public class PlayerDialoguePlugin implements ChainablePlugin {
|
||||
|
||||
/**
|
||||
* The expression of this player.
|
||||
*/
|
||||
private final ExpressionPlugin expression;
|
||||
|
||||
/**
|
||||
* The text for this dialogue.
|
||||
*/
|
||||
private final String[] lines;
|
||||
|
||||
/**
|
||||
* Creates a new {@link PlayerDialoguePlugin} with a default expression of {@code DEFAULT}.
|
||||
*
|
||||
* @param lines The text for this dialogue.
|
||||
*/
|
||||
public PlayerDialoguePlugin(String... lines) {
|
||||
this(ExpressionPlugin.DEFAULT, lines);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link PlayerDialoguePlugin}.
|
||||
*
|
||||
* @param expression The expression for this dialogue.
|
||||
*
|
||||
* @param lines The text for this dialogue.
|
||||
*/
|
||||
public PlayerDialoguePlugin(ExpressionPlugin expression, String... lines) {
|
||||
this.expression = expression;
|
||||
this.lines = lines;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(DialogueFactoryPlugin factory) {
|
||||
factory.sendPlayerChat(this);
|
||||
}
|
||||
|
||||
public ExpressionPlugin getExpression() {
|
||||
return this.expression;
|
||||
}
|
||||
|
||||
// Delombok'd Code Below
|
||||
public String[] getLines() {
|
||||
return this.lines;
|
||||
}
|
||||
|
||||
public boolean equals(final Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof PlayerDialoguePlugin)) return false;
|
||||
final PlayerDialoguePlugin other = (PlayerDialoguePlugin) o;
|
||||
if (!other.canEqual((Object) this)) return false;
|
||||
final Object this$expression = this.getExpression();
|
||||
final Object other$expression = other.getExpression();
|
||||
if (this$expression == null ? other$expression != null : !this$expression.equals(other$expression))
|
||||
return false;
|
||||
if (!java.util.Arrays.deepEquals(this.getLines(), other.getLines())) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean canEqual(final Object other) {
|
||||
return other instanceof PlayerDialoguePlugin;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
final int PRIME = 59;
|
||||
int result = 1;
|
||||
final Object $expression = this.getExpression();
|
||||
result = result * PRIME + ($expression == null ? 43 : $expression.hashCode());
|
||||
result = result * PRIME + java.util.Arrays.deepHashCode(this.getLines());
|
||||
return result;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "PlayerDialoguePlugin(expression=" + this.getExpression() + ", lines=" + java.util.Arrays.deepToString(this.getLines()) + ")";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.rs2.game.dialogues;
|
||||
|
||||
/**
|
||||
* The {@link ChainablePlugin} implementation that represents a dialogue with a single statement; which
|
||||
* has no models on the dialogue.
|
||||
*
|
||||
* @author Vult-R
|
||||
*/
|
||||
public class StatementDialoguePlugin implements ChainablePlugin {
|
||||
|
||||
/**
|
||||
* The text for this dialogue.
|
||||
*/
|
||||
private final String[] lines;
|
||||
|
||||
/**
|
||||
* Creates a new {@link StatementDialoguePlugin}.
|
||||
*
|
||||
* @param lines The text for this dialogue.
|
||||
*/
|
||||
public StatementDialoguePlugin(String... lines) {
|
||||
this.lines = lines;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void accept(DialogueFactoryPlugin factory) {
|
||||
factory.sendStatement(this);
|
||||
}
|
||||
|
||||
// Delombok'd code below
|
||||
public String[] getLines() {
|
||||
return this.lines;
|
||||
}
|
||||
|
||||
public boolean equals(final Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof StatementDialoguePlugin)) return false;
|
||||
final StatementDialoguePlugin other = (StatementDialoguePlugin) o;
|
||||
if (!other.canEqual((Object) this)) return false;
|
||||
if (!java.util.Arrays.deepEquals(this.getLines(), other.getLines())) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean canEqual(final Object other) {
|
||||
return other instanceof StatementDialoguePlugin;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
final int PRIME = 59;
|
||||
int result = 1;
|
||||
result = result * PRIME + java.util.Arrays.deepHashCode(this.getLines());
|
||||
return result;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "AstraeusStatementDialogue(lines=" + java.util.Arrays.deepToString(this.getLines()) + ")";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,9 @@
|
||||
package com.rs2.game.players;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
import java.util.Queue;
|
||||
|
||||
import com.everythingrs.hiscores.Hiscores;
|
||||
import com.rs2.event.*;
|
||||
import com.rs2.plugin.PluginService;
|
||||
import org.apache.mina.common.IoSession;
|
||||
import com.rs2.GameConstants;
|
||||
import com.rs2.GameEngine;
|
||||
import com.rs2.event.*;
|
||||
import com.rs2.game.content.BankPin;
|
||||
import com.rs2.game.content.EmoteHandler;
|
||||
import com.rs2.game.content.combat.CombatAssistant;
|
||||
@@ -35,28 +25,11 @@ import com.rs2.game.content.minigames.magetrainingarena.MageTrainingArena;
|
||||
import com.rs2.game.content.music.PlayList;
|
||||
import com.rs2.game.content.music.sound.SoundList;
|
||||
import com.rs2.game.content.skills.SkillInterfaces;
|
||||
import com.rs2.game.content.skills.agility.Agility;
|
||||
import com.rs2.game.content.skills.agility.ApeAtollAgility;
|
||||
import com.rs2.game.content.skills.agility.BarbarianAgility;
|
||||
import com.rs2.game.content.skills.agility.GnomeAgility;
|
||||
import com.rs2.game.content.skills.agility.PyramidAgility;
|
||||
import com.rs2.game.content.skills.agility.WerewolfAgility;
|
||||
import com.rs2.game.content.skills.agility.WildernessAgility;
|
||||
import com.rs2.game.content.skills.agility.*;
|
||||
import com.rs2.game.content.skills.cooking.Potatoes;
|
||||
import com.rs2.game.content.skills.core.Mining;
|
||||
import com.rs2.game.content.skills.crafting.GlassBlowing;
|
||||
import com.rs2.game.content.skills.farming.Allotments;
|
||||
import com.rs2.game.content.skills.farming.Bushes;
|
||||
import com.rs2.game.content.skills.farming.Compost;
|
||||
import com.rs2.game.content.skills.farming.Flowers;
|
||||
import com.rs2.game.content.skills.farming.FruitTree;
|
||||
import com.rs2.game.content.skills.farming.Herbs;
|
||||
import com.rs2.game.content.skills.farming.Hops;
|
||||
import com.rs2.game.content.skills.farming.Seedling;
|
||||
import com.rs2.game.content.skills.farming.SpecialPlantOne;
|
||||
import com.rs2.game.content.skills.farming.SpecialPlantTwo;
|
||||
import com.rs2.game.content.skills.farming.ToolLeprechaun;
|
||||
import com.rs2.game.content.skills.farming.WoodTrees;
|
||||
import com.rs2.game.content.skills.farming.*;
|
||||
import com.rs2.game.content.skills.fletching.LogCuttingInterface;
|
||||
import com.rs2.game.content.skills.runecrafting.Runecrafting;
|
||||
import com.rs2.game.content.skills.slayer.Slayer;
|
||||
@@ -64,18 +37,17 @@ import com.rs2.game.content.skills.smithing.Smithing;
|
||||
import com.rs2.game.content.skills.smithing.SmithingInterface;
|
||||
import com.rs2.game.content.traveling.DesertCactus;
|
||||
import com.rs2.game.content.traveling.DesertHeat;
|
||||
import com.rs2.game.dialogues.DialoguePlugin;
|
||||
import com.rs2.game.dialogues.DialogueFactoryPlugin;
|
||||
import com.rs2.game.dialogues.OptionDialoguePlugin;
|
||||
import com.rs2.game.dialogues.DialogueHandler;
|
||||
import com.rs2.game.globalworldobjects.DoubleGates;
|
||||
import com.rs2.game.globalworldobjects.GateHandler;
|
||||
import com.rs2.game.globalworldobjects.SingleGates;
|
||||
import com.rs2.game.items.GameItem;
|
||||
import com.rs2.game.items.Inventory;
|
||||
import com.rs2.game.items.ItemData;
|
||||
import com.rs2.game.items.ItemAssistant;
|
||||
import com.rs2.game.items.ItemConstants;
|
||||
import com.rs2.game.items.*;
|
||||
import com.rs2.game.items.impl.Greegree.MonkeyData;
|
||||
import com.rs2.game.items.impl.PotionMixing;
|
||||
import com.rs2.game.items.impl.Teles;
|
||||
import com.rs2.game.items.impl.Greegree.MonkeyData;
|
||||
import com.rs2.game.npcs.Npc;
|
||||
import com.rs2.game.npcs.NpcActions;
|
||||
import com.rs2.game.npcs.NpcHandler;
|
||||
@@ -88,11 +60,15 @@ import com.rs2.net.PacketSender;
|
||||
import com.rs2.net.StaticPacketBuilder;
|
||||
import com.rs2.net.packets.PacketHandler;
|
||||
import com.rs2.net.packets.impl.ChallengePlayer;
|
||||
import com.rs2.plugin.PluginService;
|
||||
import com.rs2.util.ISAACRandomGen;
|
||||
import com.rs2.util.Misc;
|
||||
import com.rs2.util.Stream;
|
||||
import com.rs2.world.Boundary;
|
||||
import com.rs2.world.ObjectManager;
|
||||
import org.apache.mina.common.IoSession;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public abstract class Player {
|
||||
|
||||
@@ -142,6 +118,14 @@ public abstract class Player {
|
||||
private final Slayer slayer = new Slayer(this);
|
||||
private final PacketSender packetSender = new PacketSender(this);
|
||||
private final DialogueHandler dialogues = new DialogueHandler(this);
|
||||
|
||||
private final DialogueFactoryPlugin dialogueFactory = new DialogueFactoryPlugin(this);
|
||||
|
||||
private Optional<DialoguePlugin> dialogue = Optional.empty();
|
||||
|
||||
private Optional<OptionDialoguePlugin> optionDialogue = Optional.empty();
|
||||
|
||||
|
||||
private final GnomeAgility gnomeStrongHold = new GnomeAgility(this);
|
||||
private final WildernessAgility wildernessAgility = new WildernessAgility(this);
|
||||
private final BarbarianAgility barbarianAgility = new BarbarianAgility(this);
|
||||
@@ -495,6 +479,26 @@ public abstract class Player {
|
||||
|
||||
private Map<Integer, TinterfaceText> interfaceText = new HashMap<Integer, TinterfaceText>();
|
||||
|
||||
public DialogueFactoryPlugin getDialogueFactory() {
|
||||
return this.dialogueFactory;
|
||||
}
|
||||
|
||||
public Optional<DialoguePlugin> getDialogue() {
|
||||
return this.dialogue;
|
||||
}
|
||||
|
||||
public Optional<OptionDialoguePlugin> getOptionDialogue() {
|
||||
return this.optionDialogue;
|
||||
}
|
||||
|
||||
public void setDialogue(Optional<DialoguePlugin> dialogue) {
|
||||
this.dialogue = dialogue;
|
||||
}
|
||||
|
||||
public void setOptionDialogue(Optional<OptionDialoguePlugin> optionDialogue) {
|
||||
this.optionDialogue = optionDialogue;
|
||||
}
|
||||
|
||||
public class TinterfaceText {
|
||||
public int id;
|
||||
public String currentState;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.rs2.net.packets;
|
||||
|
||||
import com.rs2.GameConstants;
|
||||
import com.rs2.game.dialogues.Dialogue;
|
||||
import com.rs2.net.packets.impl.DialoguePacket;
|
||||
import com.rs2.game.players.Player;
|
||||
import com.rs2.net.packets.impl.AttackPlayer;
|
||||
import com.rs2.net.packets.impl.Bank10;
|
||||
@@ -73,7 +73,7 @@ public class PacketHandler {
|
||||
packetId[150] = u;
|
||||
packetId[120] = new ClickTab();
|
||||
packetId[14] = new ItemOnPlayer();
|
||||
packetId[40] = new Dialogue();
|
||||
packetId[40] = new DialoguePacket();
|
||||
ClickObject co = new ClickObject();
|
||||
packetId[132] = co;
|
||||
packetId[252] = co;
|
||||
|
||||
@@ -45,16 +45,18 @@ public class Commands implements PacketType {
|
||||
|
||||
public static void playerCommands(Player player, String playerCommand, String[] arguments) {
|
||||
switch (playerCommand.toLowerCase()) {
|
||||
case "toggleyell":
|
||||
case "tglyell":
|
||||
case "hideyell":
|
||||
player.hideYell = !player.hideYell;
|
||||
player.getPacketSender().sendMessage("Your yell visibility preferences have been updated.");
|
||||
player.getPacketSender().sendMessage("Your yell visibility preferences have been updated: " + (player.hideYell ? "hidden" : "visible"));
|
||||
break;
|
||||
case "yell":
|
||||
int delay = 0;
|
||||
if (player.playerRights <= 1) {
|
||||
delay = 30000;
|
||||
delay = 10000;
|
||||
}
|
||||
if (!AntiSpam.blockedWords(player, arguments[0].substring(5), true)) {
|
||||
if (!AntiSpam.blockedWords(player, String.join(" ", arguments), true)) {
|
||||
return;
|
||||
}
|
||||
if (Connection.isMuted(player)) {
|
||||
@@ -69,17 +71,20 @@ public class Commands implements PacketType {
|
||||
if (PlayerHandler.players[j] != null) {
|
||||
Client c2 = (Client) PlayerHandler.players[j];
|
||||
if (c2.hideYell) {
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
String msg = "";
|
||||
if (player.playerRights == 0) {
|
||||
c2.getPacketSender().sendMessage("[Player]" + Misc.optimizeText(player.playerName) + ": " + Misc.optimizeText(String.join(" ", arguments)) + "");
|
||||
msg = "@bla@[Player] ";
|
||||
} else if (player.playerRights == 1) {
|
||||
c2.getPacketSender().sendMessage("@blu@[Moderator] @bla@" + Misc.optimizeText(player.playerName) + ": " + Misc.optimizeText(String.join(" ", arguments)) + "");
|
||||
msg = "@blu@[Moderator] ";
|
||||
} else if (player.playerRights == 2) {
|
||||
c2.getPacketSender().sendMessage("@gre@[Administator] @bla@" + Misc.optimizeText(player.playerName) + ": " + Misc.optimizeText(String.join(" ", arguments)) + "");
|
||||
msg = "@gre@[Administator] ";
|
||||
} else if (player.playerRights == 3) {
|
||||
c2.getPacketSender().sendMessage("@red@[Developer] @bla@" + Misc.optimizeText(player.playerName) + ": " + Misc.optimizeText(String.join(" ", arguments)) + "");
|
||||
msg = "@red@[Developer] ";
|
||||
}
|
||||
msg += "@bla@" + Misc.optimizeText(player.playerName) + ": @blu@" + Misc.optimizeText(String.join(" ", arguments));
|
||||
c2.getPacketSender().sendMessage(msg);
|
||||
player.lastYell = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.rs2.net.packets.impl;
|
||||
|
||||
import com.rs2.game.players.Player;
|
||||
import com.rs2.net.packets.PacketType;
|
||||
|
||||
/**
|
||||
* Dialogue Packet
|
||||
**/
|
||||
|
||||
public class DialoguePacket implements PacketType {
|
||||
|
||||
@Override
|
||||
public void processPacket(Player player, int packetType, int packetSize) {
|
||||
/*
|
||||
TODO: Remove the below dialogue handler code when everything has been converted over
|
||||
to the new system. Expect to see flickering in some Astraeus Dialogues as the old
|
||||
dialogue handler activates before it.
|
||||
*/
|
||||
if (player.nextChat > 0) {
|
||||
player.getDialogueHandler().sendDialogues(player.nextChat, player.talkingNpc);
|
||||
} else {
|
||||
player.getDialogueHandler().sendDialogues(0, -1);
|
||||
}
|
||||
|
||||
// New Dialogue System
|
||||
player.getDialogueFactory().execute();
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.rs2.GameConstants;
|
||||
import com.rs2.event.EventSubscriber;
|
||||
import com.rs2.game.players.Player;
|
||||
import com.rs2.util.LoggerUtils;
|
||||
@@ -73,8 +74,9 @@ public final class PluginService {
|
||||
|
||||
base = base.replace(".java", "");
|
||||
|
||||
if (GameConstants.SERVER_DEBUG) {
|
||||
System.out.println(base);
|
||||
System.out.println(dir.getName());
|
||||
}
|
||||
|
||||
if (!file.isDirectory()) {
|
||||
try {
|
||||
|
||||
@@ -5,27 +5,33 @@ import java.util.ArrayList;
|
||||
|
||||
public class Misc {
|
||||
|
||||
|
||||
/*
|
||||
* String Functions
|
||||
*/
|
||||
|
||||
public static final char playerNameXlateTable[] = { '_', 'a', 'b', 'c',
|
||||
'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
|
||||
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2',
|
||||
'3', '4', '5', '6', '7', '8', '9', '[', ']', '/', '-', ' '
|
||||
};
|
||||
|
||||
public static char xlateTable[] = { ' ', 'e', 't', 'a', 'o', 'i', 'h', 'n',
|
||||
's', 'r', 'd', 'l', 'u', 'm', 'w', 'c', 'y', 'f', 'g', 'p', 'b',
|
||||
'v', 'k', 'x', 'j', 'q', 'z', '0', '1', '2', '3', '4', '5', '6',
|
||||
'7', '8', '9', ' ', '!', '?', '.', ',', ':', ';', '(', ')', '-',
|
||||
'&', '*', '\\', '\'', '@', '#', '+', '=', '\243', '$', '%', '"',
|
||||
'[', ']'
|
||||
};
|
||||
|
||||
public static String formatPlayerName(String str) {
|
||||
str = ucFirst(str);
|
||||
str.replace("_", " ");
|
||||
return str;
|
||||
}
|
||||
|
||||
public static int random(final float range) {
|
||||
return (int) (java.lang.Math.random() * (range + 1));
|
||||
}
|
||||
|
||||
// return a random number from 0 → range - 1
|
||||
public static int randomMinusOne(int range) {
|
||||
return (int) Math.random() * range;
|
||||
}
|
||||
|
||||
public static double distance(int x1, int y1, int x2, int y2 ) {
|
||||
return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
|
||||
}
|
||||
|
||||
public static boolean goodDistance(int objectX, int objectY, int playerX, int playerY, int distance) {
|
||||
return objectX - playerX <= distance && objectX - playerX >= -distance && objectY - playerY <= distance && objectY - playerY >= -distance;
|
||||
public static String format(int num) {
|
||||
return NumberFormat.getInstance().format(num);
|
||||
}
|
||||
|
||||
public static String longToReportPlayerName(long l) {
|
||||
@@ -39,14 +45,6 @@ public class Misc {
|
||||
return new String(ac, 12 - i, i);
|
||||
}
|
||||
|
||||
public static int random3(int range) {
|
||||
return (int) (java.lang.Math.random() * range);
|
||||
}
|
||||
|
||||
public static int randomNumber(int range) {
|
||||
return (int) (Math.random() * range);
|
||||
}
|
||||
|
||||
public static String longToPlayerName(long l) {
|
||||
int i = 0;
|
||||
char ac[] = new char[12];
|
||||
@@ -60,11 +58,6 @@ public class Misc {
|
||||
return new String(ac, 12 - i, i);
|
||||
}
|
||||
|
||||
public static final char playerNameXlateTable[] = { '_', 'a', 'b', 'c',
|
||||
'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
|
||||
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2',
|
||||
'3', '4', '5', '6', '7', '8', '9', '[', ']', '/', '-', ' ' };
|
||||
|
||||
public static String longToPlayerName2(long l) {
|
||||
int i = 0;
|
||||
char ac[] = new char[99];
|
||||
@@ -76,10 +69,6 @@ public class Misc {
|
||||
return new String(ac, 12 - i, i);
|
||||
}
|
||||
|
||||
public static String format(int num) {
|
||||
return NumberFormat.getInstance().format(num);
|
||||
}
|
||||
|
||||
public static String ucFirst(String str) {
|
||||
str = str.toLowerCase();
|
||||
if (str.length() > 1) {
|
||||
@@ -124,63 +113,6 @@ public class Misc {
|
||||
}
|
||||
return temp.toUpperCase().trim();
|
||||
}
|
||||
|
||||
public static int hexToInt(byte data[], int offset, int len) {
|
||||
int temp = 0;
|
||||
int i = 1000;
|
||||
for (int cntr = 0; cntr < len; cntr++) {
|
||||
int num = (data[offset + cntr] & 0xFF) * i;
|
||||
temp += num;
|
||||
if (i > 1) {
|
||||
i = i / 1000;
|
||||
}
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
|
||||
public static int random2(int range) {
|
||||
return (int) (java.lang.Math.random() * range + 1);
|
||||
}
|
||||
|
||||
// return a random number from 0 → range (including range)
|
||||
public static int random(int range) {
|
||||
return (int) (java.lang.Math.random() * (++range));
|
||||
}
|
||||
|
||||
// return a random number between & including the min/max values
|
||||
public static int random(int min, int max) {
|
||||
++max;
|
||||
return (int) Math.floor(Math.random() * (max - min)) + min;
|
||||
}
|
||||
|
||||
public static int randomArrayItem(int[] arr) {
|
||||
return arr[(int) Math.floor(Math.random() * arr.length)];
|
||||
}
|
||||
|
||||
public static int randomArrayListItem(ArrayList<Integer> arr) {
|
||||
int index = (int) Math.floor(Math.random() * arr.size());
|
||||
return arr.get(index);
|
||||
}
|
||||
|
||||
public static long playerNameToInt64(String s) {
|
||||
long l = 0L;
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char c = s.charAt(i);
|
||||
l *= 37L;
|
||||
if (c >= 'A' && c <= 'Z') {
|
||||
l += 1 + c - 65;
|
||||
} else if (c >= 'a' && c <= 'z') {
|
||||
l += 1 + c - 97;
|
||||
} else if (c >= '0' && c <= '9') {
|
||||
l += 27 + c - 48;
|
||||
}
|
||||
}
|
||||
while (l % 37L == 0L && l != 0L) {
|
||||
l /= 37L;
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
private static char decodeBuf[] = new char[4096];
|
||||
|
||||
public static String textUnpack(byte packedData[], int size) {
|
||||
@@ -258,12 +190,126 @@ public class Misc {
|
||||
}
|
||||
}
|
||||
|
||||
public static char xlateTable[] = { ' ', 'e', 't', 'a', 'o', 'i', 'h', 'n',
|
||||
's', 'r', 'd', 'l', 'u', 'm', 'w', 'c', 'y', 'f', 'g', 'p', 'b',
|
||||
'v', 'k', 'x', 'j', 'q', 'z', '0', '1', '2', '3', '4', '5', '6',
|
||||
'7', '8', '9', ' ', '!', '?', '.', ',', ':', ';', '(', ')', '-',
|
||||
'&', '*', '\\', '\'', '@', '#', '+', '=', '\243', '$', '%', '"',
|
||||
'[', ']' };
|
||||
public static String capitalize(String s) {
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
if (i == 0) {
|
||||
s = String.format("%s%s", Character.toUpperCase(s.charAt(0)),
|
||||
s.substring(1));
|
||||
}
|
||||
if (!Character.isLetterOrDigit(s.charAt(i))) {
|
||||
if (i + 1 < s.length()) {
|
||||
s = String.format("%s%s%s", s.subSequence(0, i + 1), Character.toUpperCase(s.charAt(i + 1)), s.substring(i + 2));
|
||||
}
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Number Functions
|
||||
*/
|
||||
|
||||
public static int hexToInt(byte data[], int offset, int len) {
|
||||
int temp = 0;
|
||||
int i = 1000;
|
||||
for (int cntr = 0; cntr < len; cntr++) {
|
||||
int num = (data[offset + cntr] & 0xFF) * i;
|
||||
temp += num;
|
||||
if (i > 1) {
|
||||
i = i / 1000;
|
||||
}
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
|
||||
public static long playerNameToInt64(String s) {
|
||||
long l = 0L;
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char c = s.charAt(i);
|
||||
l *= 37L;
|
||||
if (c >= 'A' && c <= 'Z') {
|
||||
l += 1 + c - 65;
|
||||
} else if (c >= 'a' && c <= 'z') {
|
||||
l += 1 + c - 97;
|
||||
} else if (c >= '0' && c <= '9') {
|
||||
l += 27 + c - 48;
|
||||
}
|
||||
}
|
||||
while (l % 37L == 0L && l != 0L) {
|
||||
l /= 37L;
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Random Number Generator Functions
|
||||
*/
|
||||
|
||||
// return a random number from 0 → range (including range)
|
||||
public static int random(int range) {
|
||||
return (int) (java.lang.Math.random() * (++range));
|
||||
}
|
||||
|
||||
// return a random number between & including the min/max values
|
||||
public static int random(int min, int max) {
|
||||
++max;
|
||||
return (int) Math.floor(Math.random() * (max - min)) + min;
|
||||
}
|
||||
|
||||
public static int random(final float range) {
|
||||
return (int) (java.lang.Math.random() * (range + 1));
|
||||
}
|
||||
|
||||
public static int random2(int range) {
|
||||
return (int) (java.lang.Math.random() * range + 1);
|
||||
}
|
||||
|
||||
public static int random3(int range) {
|
||||
return (int) (java.lang.Math.random() * range);
|
||||
}
|
||||
|
||||
public static int randomNumber(int range) {
|
||||
return (int) (Math.random() * range);
|
||||
}
|
||||
|
||||
// return a random number from 0 → range - 1
|
||||
public static int randomMinusOne(int range) {
|
||||
return (int) Math.random() * range;
|
||||
}
|
||||
|
||||
public static int randomArrayItem(int[] arr) {
|
||||
return arr[(int) Math.floor(Math.random() * arr.length)];
|
||||
}
|
||||
|
||||
public static int randomArrayListItem(ArrayList<Integer> arr) {
|
||||
int index = (int) Math.floor(Math.random() * arr.size());
|
||||
return arr.get(index);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Positioning Functions
|
||||
*/
|
||||
|
||||
public static byte directionDeltaX[] = new byte[] { 0, 1, 1, 1, 0, -1, -1, -1 };
|
||||
public static byte directionDeltaY[] = new byte[] { 1, 1, 0, -1, -1, -1, 0, 1 };
|
||||
public static byte xlateDirectionToClient[] = new byte[] { 1, 2, 4, 7, 6, 5, 3, 0 };
|
||||
|
||||
public static double distance(int x1, int y1, int x2, int y2 ) {
|
||||
return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
|
||||
}
|
||||
|
||||
public static boolean goodDistance(int objectX, int objectY, int playerX, int playerY, int distance) {
|
||||
return objectX - playerX <= distance && objectX - playerX >= -distance && objectY - playerY <= distance && objectY - playerY >= -distance;
|
||||
}
|
||||
|
||||
public static int[] delta(int x1, int y1, int x2, int y2) {
|
||||
return new int[] {x2 - x1, y2 - y1};
|
||||
@@ -296,24 +342,4 @@ public class Misc {
|
||||
* changeY == directionDeltaY[j]) return j; } return -1;
|
||||
*/
|
||||
}
|
||||
|
||||
public static byte directionDeltaX[] = new byte[] { 0, 1, 1, 1, 0, -1, -1, -1 };
|
||||
public static byte directionDeltaY[] = new byte[] { 1, 1, 0, -1, -1, -1, 0, 1 };
|
||||
public static byte xlateDirectionToClient[] = new byte[] { 1, 2, 4, 7, 6,
|
||||
5, 3, 0 };
|
||||
|
||||
public static String capitalize(String s) {
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
if (i == 0) {
|
||||
s = String.format("%s%s", Character.toUpperCase(s.charAt(0)),
|
||||
s.substring(1));
|
||||
}
|
||||
if (!Character.isLetterOrDigit(s.charAt(i))) {
|
||||
if (i + 1 < s.length()) {
|
||||
s = String.format("%s%s%s", s.subSequence(0, i + 1), Character.toUpperCase(s.charAt(i + 1)), s.substring(i + 2));
|
||||
}
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,23 +102,26 @@ public class ItemHandler {
|
||||
**/
|
||||
public void reloadItems(Player c) {
|
||||
for (GroundItem i : items) {
|
||||
if (c != null) {
|
||||
if (c != null && i != null) {
|
||||
if (c.getH() == i.getItemH() && c.distanceToPoint(i.getItemX(), i.getItemY()) <= 120) {
|
||||
c.getPacketSender().removeGroundItem(
|
||||
i.getItemId(), i.getItemX(), i.getItemY(),
|
||||
i.getItemAmount());
|
||||
}
|
||||
}
|
||||
}
|
||||
for (GroundItem i : items) {
|
||||
if (c != null && i != null) {
|
||||
// If it's a players item or tradeable
|
||||
if (c.getItemAssistant().tradeable(i.getItemId()) || i.getName().equalsIgnoreCase(c.playerName)) {
|
||||
// Make sure item on the same height and within 60 blocks
|
||||
if (c.getH() == i.getItemH() && c.distanceToPoint(i.getItemX(), i.getItemY()) <= 60) {
|
||||
if (i.hideTicks > 0 && i.getName().equalsIgnoreCase(c.playerName)) {
|
||||
c.getPacketSender().removeGroundItem(
|
||||
i.getItemId(), i.getItemX(), i.getItemY(),
|
||||
i.getItemAmount());
|
||||
c.getPacketSender().createGroundItem(
|
||||
i.getItemId(), i.getItemX(), i.getItemY(),
|
||||
i.getItemAmount());
|
||||
}
|
||||
if (i.hideTicks == 0) {
|
||||
c.getPacketSender().removeGroundItem(
|
||||
i.getItemId(), i.getItemX(), i.getItemY(),
|
||||
i.getItemAmount());
|
||||
c.getPacketSender().createGroundItem(
|
||||
i.getItemId(), i.getItemX(), i.getItemY(),
|
||||
i.getItemAmount());
|
||||
|
||||
BIN
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user