Second World Setup (#518)

* Start Setting Up Second World

Added World Number To Login Message
Added World Number To Login Interface
Made World 2 Listen On Different Port
Made Client Connect To 43597 For World 2

* Small Cleanup For World 2 Support

Calculate Port For World Based On World Number
Use Existing World int For World In Server

* Woops Wrong Ports

* Set Server Port After Loading Config

* Add xpRate Var & Include With XPRate Calculations

* Add -w/-world arg to client

* Add XP Rate Multiplier For Non-Bot Worlds

* More Multi World Stuff

Update Integrations(Discord Bot/Website Stuff) For Multiple Worlds
Added More XP Rate Dialogue Stuff

* Add Kick Command To Discord Bot & Fix Type In ConfigLoader

* Create/Use commandPrefix Var For Discord Bot

* Small Fixup For World 2

Renamed BOT_WORLD to VARIABLE_XP_RATE
Fixed Dialogue/Message grammar
Added a check for VARIABLE_XP_RATES to ::xprate command

* More Discord Commands(GameKick, MoveHome & Update)

*GameKick kicks A player if their client froze but acc stayed logged in
*MoveHome removes the need for ::stuck which removes potential for abuse
*Update schedules A server update

* Minor fixup

* 43597 → 43598

* Fix XP Rate Multiplier & add ::xprate to cooamnds list if enabled

* Use Either VARIABLE_SKILL_RATE OR XP_RATE Not Both

TODO(Convert Player.xpRate Into An Array For Easier Rate Changes)

* Create/Use PLAYER_XP_RATES For Easier Rate Changes

* Fixed Abusive Client Command Privileges & Added myxprate/checkxprate

* Allow Loading VARIABLE_XP_RATES & PLAYER_XP_RATES From Config

* Properly Update Client Title Logo

If The Cache Has Already Been Downloaded You Will Need To Delete It & Let The Client ReDownload It

* Fix Cache CRC Checks For The Client(Allows Cache To Actually Check For Updates)

* Add -no-crc & -dev Arguments To Client

* Fix Naming For Some Vars

* Make CHECK_CRC Description More Descriptive

* Fix More Var Descriptions

* Cleanup Unused GameConstants Vars & Add More Vars To ConfigLoader

Co-authored-by: Danial <admin@redsparr0w.com>
This commit is contained in:
Josh Shippam
2021-12-31 03:47:48 +00:00
committed by GitHub
parent 1c5b400f00
commit e1a8d85408
32 changed files with 406 additions and 149 deletions
@@ -6,8 +6,8 @@ import java.math.BigInteger;
*/ */
public class ClientSettings { public class ClientSettings {
public static String SNOW_MONTH = ".12"; public static String SNOW_MONTH = ".12";
/** /**
* The Servers Name * The Servers Name
*/ */
@@ -18,12 +18,24 @@ public class ClientSettings {
public final static String SERVER_WEBSITE = "www.2006Scape.org"; public final static String SERVER_WEBSITE = "www.2006Scape.org";
/** /**
* The Servers Ip * The Servers Ip
*
* You don't have to change this, the client will automatically connect to the server * You don't have to change this, the client will automatically connect to the server
* on localhost (Assuming you're running Client and LocalGame respectively) * on localhost (Assuming you're running Client and LocalGame respectively)
*
*/ */
public static String SERVER_IP = "www.2006Scape.org"; public static String SERVER_IP = "www.2006Scape.org";
/**
* The Servers World
* This Determines The Port The Server Will Connect On
* World 1 Will Connect On Port 43594
* World 2 Will Connect On Port 43598
*/
public static int SERVER_WORLD = 1;
/**
* Enables/Disables FileServer CRC Checking For Cache Updates
* FileServer Must Be Running Before Starting The Client If This Is True
*/
public static boolean CHECK_CRC = true;
/** /**
* The Npc Bits for the Server * The Npc Bits for the Server
*/ */
+31 -20
View File
@@ -25,6 +25,7 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols; import java.text.DecimalFormatSymbols;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.zip.CRC32;
/** /**
* NOTICE: IF YOU CHANGE ANYTHING IN GAME.JAVA, PLEASE COPY-PASTE THE WHOLE CLASS OVER TO LOCALGAME.JAVA * NOTICE: IF YOU CHANGE ANYTHING IN GAME.JAVA, PLEASE COPY-PASTE THE WHOLE CLASS OVER TO LOCALGAME.JAVA
@@ -3429,11 +3430,12 @@ public class Game extends RSApplet {
} }
} catch (Exception _ex) { } catch (Exception _ex) {
} }
if (abyte0 != null) { if(abyte0 != null && ClientSettings.CHECK_CRC) {
// aCRC32_930.reset(); aCRC32_930.reset();
// aCRC32_930.update(abyte0); aCRC32_930.update(abyte0);
// int i1 = (int)aCRC32_930.getValue(); int i1 = (int)aCRC32_930.getValue();
// if(i1 != j) if(i1 != j)
abyte0 = null;
} }
if (abyte0 != null) { if (abyte0 != null) {
StreamLoader streamLoader = new StreamLoader(abyte0); StreamLoader streamLoader = new StreamLoader(abyte0);
@@ -3480,12 +3482,20 @@ public class Game extends RSApplet {
} catch (Exception _ex) { } catch (Exception _ex) {
decompressors[0] = null; decompressors[0] = null;
} }
/*
* if(abyte0 != null) { aCRC32_930.reset(); if(abyte0 != null && ClientSettings.CHECK_CRC)
* aCRC32_930.update(abyte0); int i3 = {
* (int)aCRC32_930.getValue(); if(i3 != j) { abyte0 = null; aCRC32_930.reset();
* j1++; s2 = "Checksum error: " + i3; } } aCRC32_930.update(abyte0);
*/ int i3 = (int)aCRC32_930.getValue();
if(i3 != j)
{
abyte0 = null;
j1++;
s2 = "Checksum error: " + i3;
}
}
} catch (IOException ioexception) { } catch (IOException ioexception) {
if (s2.equals("Unknown error")) { if (s2.equals("Unknown error")) {
s2 = "Connection error"; s2 = "Connection error";
@@ -5021,12 +5031,12 @@ public class Game extends RSApplet {
if (inputString.equals("::gfxtgl") || inputString.equals("::tglgfx") || inputString.equals("::togglerender") || inputString.equals("::togglegfx")) { if (inputString.equals("::gfxtgl") || inputString.equals("::tglgfx") || inputString.equals("::togglerender") || inputString.equals("::togglegfx")) {
graphicsEnabled = !graphicsEnabled; graphicsEnabled = !graphicsEnabled;
} }
if (myPrivilege >= 0) { if (myPrivilege >= 2) {
if(inputString.equals("::noclip")) if (inputString.equals("::noclip"))
for(int k1 = 0; k1 < 4; k1++) for (int k1 = 0; k1 < 4; k1++)
for(int i2 = 1; i2 < 103; i2++) for (int i2 = 1; i2 < 103; i2++)
for(int k2 = 1; k2 < 103; k2++) for (int k2 = 1; k2 < 103; k2++)
aClass11Array1230[k1].anIntArrayArray294[i2][k2] = 0; aClass11Array1230[k1].anIntArrayArray294[i2][k2] = 0;
if (inputString.equals("::clientdrop")) { if (inputString.equals("::clientdrop")) {
dropClient(); dropClient();
} }
@@ -5060,6 +5070,7 @@ public class Game extends RSApplet {
onDemandFetcher.method563((byte) 1, 2, j1); onDemandFetcher.method563((byte) 1, 2, j1);
} }
} }
}
if (inputString.startsWith("::dd")) { if (inputString.startsWith("::dd")) {
String[] args = inputString.split(" "); String[] args = inputString.split(" ");
int distance = 25; int distance = 25;
@@ -5078,7 +5089,6 @@ public class Game extends RSApplet {
if (inputString.equals("::dataon")) { if (inputString.equals("::dataon")) {
showInfo = !showInfo; showInfo = !showInfo;
} }
}
if (inputString.startsWith("::")) { if (inputString.startsWith("::")) {
stream.createFrame(103); stream.createFrame(103);
stream.writeWordBigEndian(inputString.length() - 1); stream.writeWordBigEndian(inputString.length() - 1);
@@ -5927,7 +5937,7 @@ public class Game extends RSApplet {
loginMessage2 = "Connecting to server..."; loginMessage2 = "Connecting to server...";
drawLoginScreen(true); drawLoginScreen(true);
} }
socketStream = new RSSocket(this, openSocket(43594 + portOff)); socketStream = new RSSocket(this, openSocket((ClientSettings.SERVER_WORLD == 1) ? 43594 : 43596 + ClientSettings.SERVER_WORLD + portOff));
long l = TextClass.longForName(s); long l = TextClass.longForName(s);
int i = (int) (l >> 16 & 31L); int i = (int) (l >> 16 & 31L);
stream.currentOffset = 0; stream.currentOffset = 0;
@@ -12046,8 +12056,9 @@ public class Game extends RSApplet {
bigX = new int[4000]; bigX = new int[4000];
bigY = new int[4000]; bigY = new int[4000];
anInt1289 = -1; anInt1289 = -1;
aCRC32_930 = new CRC32();
} }
public CRC32 aCRC32_930;
public static String server; public static String server;
public int ignoreCount; public int ignoreCount;
public long aLong824; public long aLong824;
+14 -3
View File
@@ -8,10 +8,7 @@ public final class Main {
DEAR DEVELOPER! DEAR DEVELOPER!
If you want to run the client locally, the easiest way to do that is run the class "Client.java" instead! If you want to run the client locally, the easiest way to do that is run the class "Client.java" instead!
If you REALLY want to use this class, add program arguments "-s localhost". If you REALLY want to use this class, add program arguments "-s localhost".
But seriously, Client.java is just a copy-paste of this class and does it locally. Use that instead!
*/ */
public static void main(String[] args) { public static void main(String[] args) {
@@ -25,6 +22,16 @@ public final class Main {
case "-ip": case "-ip":
ClientSettings.SERVER_IP = args[++i]; ClientSettings.SERVER_IP = args[++i];
break; break;
case "-no-crc":
case "-no-cache-crc":
ClientSettings.CHECK_CRC = false;
break;
case "-dev" :
case "-local":
case "-offline":
ClientSettings.SERVER_IP = "localhost";
ClientSettings.CHECK_CRC = false;
break;
} }
} }
} }
@@ -45,6 +52,10 @@ public final class Main {
case "-password": case "-password":
game.myPassword = args[++i]; game.myPassword = args[++i];
break; break;
case "-w":
case "-world":
ClientSettings.SERVER_WORLD = Integer.parseInt(args[++i]);
break;
} }
} }
} }
+5 -2
View File
@@ -4,6 +4,9 @@
"server_debug": false, "server_debug": false,
"file_server": true, "file_server": true,
"world_id": 1, "world_id": 1,
"xp_rate": 1.0,
"variable_xp_rate": false,
"variable_xp_rates": [1, 2, 5, 10],
"members_only": false, "members_only": false,
"tutorial_island_enabled": false, "tutorial_island_enabled": false,
"party_room_enabled": true, "party_room_enabled": true,
@@ -15,6 +18,6 @@
"save_timer": 120, "save_timer": 120,
"timeout": 60, "timeout": 60,
"item_requirements": true, "item_requirements": true,
"xp_rate": 1.0, "max_players": 200,
"max_players": 200 "website_total_characters_integration": false
} }
Binary file not shown.
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
{"token":""}
@@ -3,6 +3,7 @@ package com.rs2;
import com.rs2.integrations.PlayersOnlineWebsite; import com.rs2.integrations.PlayersOnlineWebsite;
import com.rs2.integrations.RegisteredAccsWebsite; import com.rs2.integrations.RegisteredAccsWebsite;
import com.rs2.integrations.discord.JavaCord; import com.rs2.integrations.discord.JavaCord;
import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.*; import java.io.*;
@@ -17,6 +18,8 @@ public class ConfigLoader {
if(obj.has("server_name")) if(obj.has("server_name"))
GameConstants.SERVER_NAME = obj.getString("server_name"); GameConstants.SERVER_NAME = obj.getString("server_name");
if(obj.has("server_test_version"))
GameConstants.TEST_VERSION = obj.getDouble("server_test_version");
if(obj.has("website_link")) if(obj.has("website_link"))
GameConstants.WEBSITE_LINK = obj.getString("website_link"); GameConstants.WEBSITE_LINK = obj.getString("website_link");
if(obj.has("debug")) if(obj.has("debug"))
@@ -49,10 +52,20 @@ public class ConfigLoader {
GameConstants.TIMEOUT = obj.getInt("timeout"); GameConstants.TIMEOUT = obj.getInt("timeout");
if(obj.has("item_requirements")) if(obj.has("item_requirements"))
GameConstants.ITEM_REQUIREMENTS = obj.getBoolean("item_requirements"); GameConstants.ITEM_REQUIREMENTS = obj.getBoolean("item_requirements");
if(obj.has("variable_xp_rate"))
GameConstants.VARIABLE_XP_RATE = obj.getBoolean("variable_xp_rate");
if(obj.has("xp_rate")) if(obj.has("xp_rate"))
GameConstants.XP_RATE = obj.getDouble("xp_rate"); GameConstants.XP_RATE = obj.getDouble("xp_rate");
if(obj.has("max_players")) if(obj.has("max_players"))
GameConstants.MAX_PLAYERS = obj.getInt("max_players"); GameConstants.MAX_PLAYERS = obj.getInt("max_players");
if (obj.has("variable_xp_rates")) {
JSONArray rates = obj.optJSONArray("variable_xp_rates");
for (int i = 0; i < rates.length(); ++i) {
GameConstants.VARIABLE_XP_RATES[i] = rates.optInt(i);
}
}
if(obj.has("website_total_characters_integration"))
GameConstants.WEBSITE_TOTAL_CHARACTERS_INTEGRATION = obj.getBoolean("website_total_characters_integration");
} }
private static void initialize() { private static void initialize() {
@@ -71,7 +84,7 @@ public class ConfigLoader {
} }
public static void loadSecrets() throws IOException { public static void loadSecrets() throws IOException {
if (!new File("data/Secrets.json").exists()) { if (!new File("data/secrets.json").exists()) {
initialize(); initialize();
System.out.println("Please open \"data/secrets.json\" file and enter your discord token bot there!"); System.out.println("Please open \"data/secrets.json\" file and enter your discord token bot there!");
System.out.println("Please open \"data/secrets.json\" file and enter your Website Password there!"); System.out.println("Please open \"data/secrets.json\" file and enter your Website Password there!");
@@ -88,7 +101,7 @@ public class ConfigLoader {
JavaCord.token = obj.getString("bot-token"); JavaCord.token = obj.getString("bot-token");
if(obj.has("websitepass")) if(obj.has("websitepass"))
PlayersOnlineWebsite.password = obj.getString("websitepass"); PlayersOnlineWebsite.password = obj.getString("websitepass");
RegisteredAccsWebsite.password = obj.getString("websitepass"); RegisteredAccsWebsite.password = obj.getString("websitepass");
if(obj.has("erssecret")) if(obj.has("erssecret"))
GameEngine.ersSecret = obj.getString("erssecret"); GameEngine.ersSecret = obj.getString("erssecret");
@@ -16,38 +16,35 @@ public class GameConstants {
* FILE_SERVER Sets Whether The FileServer Should Run With The Server * FILE_SERVER Sets Whether The FileServer Should Run With The Server
* SERVER_DEBUG Sets Whether The Server Should Start In Debug Mode * SERVER_DEBUG Sets Whether The Server Should Start In Debug Mode
* MEMBERS_ONLY Sets Whether The World Is Members Only * MEMBERS_ONLY Sets Whether The World Is Members Only
* TUTORIAL_ISLAND Sets Enables/Disables Tutorial Island For Players On First Login * TUTORIAL_ISLAND Enables/Disables Tutorial Island For Players On First Login
* PARTY_ROOM_DISABLED Enables/Disables The Party Room Should Be Disabled * PARTY_ROOM_DISABLED Enables/Disables The Party Room Should Be Disabled
* CLUES_ENABLED Enables/Disables Clue Scrolls * CLUES_ENABLED Enables/Disables Clue Scrolls
* ITEM_REQUIREMENTS Enables/Disables Item Requirements for All Players * ITEM_REQUIREMENTS Enables/Disables Item Requirements for All Players
* ADMIN_CAN_TRADE Defines Whether Admins Can Trade * ADMIN_CAN_TRADE Defines Whether Admins Can Trade
* ADMIN_DROP_ITEMS Defines Whether Admins Can Drop Items * ADMIN_DROP_ITEMS Defines Whether Admins Can Drop Items
* ADMIN_CAN_SELL_ITEMS Defines Whether Admins Can Sell Items * ADMIN_CAN_SELL_ITEMS Defines Whether Admins Can Sell Items
* XP_RATE Sets The XP Rate Multiplier For All Players/Skills * VARIABLE_XP_RATE Allows Players To Choose An XP Rate Set In VARIABLE_XP_RATES
* VARIABLE_XP_RATES Defines The XP Rates That Should Be Available To Players When VARIABLE_XP_RATES is true(Array Must Contain Four Entries)
* XP_RATE Sets The XP Rate Multiplier For All Players/Skills If VARIABLE_XP_RATES is false
*/ */
public static String SERVER_NAME = "2006Scape", WEBSITE_LINK = "https://2006Scape.org"; public static String SERVER_NAME = "2006Scape", WEBSITE_LINK = "https://2006Scape.org";
public static int WORLD = 1, MAX_PLAYERS = 200, TIMEOUT = 60, SAVE_TIMER = 120, public static int WORLD = 1, MAX_PLAYERS = 200, TIMEOUT = 60, SAVE_TIMER = 120,
RESPAWN_X = 3222, RESPAWN_Y = 3218; RESPAWN_X = 3222, RESPAWN_Y = 3218;
public static boolean FILE_SERVER = true, SERVER_DEBUG = false, MEMBERS_ONLY = false, TUTORIAL_ISLAND = false, public static boolean FILE_SERVER = true, SERVER_DEBUG = false, MEMBERS_ONLY = false, TUTORIAL_ISLAND = false,
PARTY_ROOM_DISABLED = false, CLUES_ENABLED = true, ITEM_REQUIREMENTS = true, PARTY_ROOM_DISABLED = false, CLUES_ENABLED = true, ITEM_REQUIREMENTS = true,
ADMIN_CAN_TRADE = false, ADMIN_DROP_ITEMS = false, ADMIN_CAN_SELL_ITEMS = false; ADMIN_CAN_TRADE = false, ADMIN_DROP_ITEMS = false, ADMIN_CAN_SELL_ITEMS = false, VARIABLE_XP_RATE = false,
public static double XP_RATE = 1; WEBSITE_TOTAL_CHARACTERS_INTEGRATION = false;
public static int[] VARIABLE_XP_RATES = new int[] {1, 2, 5, 10};
public static double TEST_VERSION = 2.3, XP_RATE = 1.0;
/** /**
* The Variables Below Should Only Be Changed If You Understand What You Are Doing * The Variables Below Should Only Be Changed If You Understand What You Are Doing
*/ */
public final static int ITEM_LIMIT = 15000, MAXITEM_AMOUNT = Integer.MAX_VALUE,
public final static String SERVER_VERSION = "Server Stage v " + GameConstants.TEST_VERSION + "."; IPS_ALLOWED = 250, CONNECTION_DELAY = 100;
public final static boolean WEBSITE_TOTAL_CHARACTERS_INTEGRATION = false;
public final static double TEST_VERSION = 2.3;
public final static int ITEM_LIMIT = 15000, MAXITEM_AMOUNT = Integer.MAX_VALUE, CLIENT_VERSION = 999999, public final static boolean sendServerPackets = false, SOUND = true, GUILDS = true;
IPS_ALLOWED = 250, CONNECTION_DELAY = 100,
MESSAGE_DELAY = 6000, REQ_AMOUNT = 150;
public final static boolean sendServerPackets = false, SOUND = true, GUILDS = true,
PRINT_OBJECT_ID = false, EXPERIMENTS = false;
public static int[] SIDEBARS = { 2423, 3917, 638, 3213, 1644, 5608, 1151, public static int[] SIDEBARS = { 2423, 3917, 638, 3213, 1644, 5608, 1151,
18128, 5065, 5715, 2449, 904, 147, 962 }; 18128, 5065, 5715, 2449, 904, 147, 962 };
@@ -63,10 +60,6 @@ public class GameConstants {
public final static int NO_TELEPORT_WILD_LEVEL = 20; public final static int NO_TELEPORT_WILD_LEVEL = 20;
public final static int CASTLE_WARS_X = 2439;
public final static int CASTLE_WARS_Y = 3087;
public final static int NPC_RANDOM_WALK_DISTANCE = 5; public final static int NPC_RANDOM_WALK_DISTANCE = 5;
public final static int NPC_FOLLOW_DISTANCE = 10; public final static int NPC_FOLLOW_DISTANCE = 10;
@@ -131,11 +131,7 @@ public class GameEngine {
private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private final static Lock lock = new ReentrantLock(); private final static Lock lock = new ReentrantLock();
/**
* Port and Cycle rate.
*/
static { static {
serverlistenerPort = 43594;
shutdownServer = false; shutdownServer = false;
} }
@@ -158,6 +154,7 @@ public class GameEngine {
} }
} }
} }
serverlistenerPort = (GameConstants.WORLD == 1) ? 43594 : 43596 + GameConstants.WORLD;
System.out.println("Starting game engine.."); System.out.println("Starting game engine..");
if (GameConstants.SERVER_DEBUG) { if (GameConstants.SERVER_DEBUG) {
@@ -6137,10 +6137,14 @@ public class DialogueHandler {
break; break;
case 3116: case 3116:
player.getPacketSender().showInterface(3559); if(GameConstants.VARIABLE_XP_RATE) {
player.canChangeAppearance = true; player.getDialogueHandler().sendDialogues(10001, -1);
player.closeTutorialInterface = true; } else {
player.nextChat = 0; player.getPacketSender().showInterface(3559);
player.canChangeAppearance = true;
player.closeTutorialInterface = true;
player.nextChat = 0;
}
break; break;
case 3117: case 3117:
@@ -7594,6 +7598,34 @@ public class DialogueHandler {
); );
player.dialogueAction = 10000; player.dialogueAction = 10000;
break; break;
case 10001:
sendNpcChat(2244, ChatEmotes.HAPPY_JOYFUL, "Please select the XP rate you'd like.", "this can be increased, but not decreased later on.");
player.nextChat = 10002;
break;
case 10002:
sendOption("x" + GameConstants.VARIABLE_XP_RATES[0], "x" + GameConstants.VARIABLE_XP_RATES[1], "x" + GameConstants.VARIABLE_XP_RATES[2], "x" + GameConstants.VARIABLE_XP_RATES[3]);
player.dialogueAction = 10002;
break;
case 10003:
sendNpcChat(2244, ChatEmotes.HAPPY_JOYFUL, "Are you sure x" + player.getXPRate() + " is the XP rate you'd like?");
player.nextChat = 10004;
break;
case 10004:
sendOption("Yes", "No");
player.dialogueAction = 10004;
break;
case 10005:
sendOption("x" + GameConstants.VARIABLE_XP_RATES[1], "x" + GameConstants.VARIABLE_XP_RATES[2], "x" + GameConstants.VARIABLE_XP_RATES[3]);
player.dialogueAction = 10005;
break;
case 10006:
sendOption("x" + GameConstants.VARIABLE_XP_RATES[2], "x" + GameConstants.VARIABLE_XP_RATES[3]);
player.dialogueAction = 10006;
break;
case 10007:
sendOption("x" + GameConstants.VARIABLE_XP_RATES[3], "Don't Change");
player.dialogueAction = 10007;
break;
} }
} }
public void chatboxText(String text, String text1, String text2, public void chatboxText(String text, String text1, String text2,
@@ -104,6 +104,12 @@ public class DialogueOptions {
player.getDialogueHandler().sendStatement("You summoned your shop!"); player.getDialogueHandler().sendStatement("You summoned your shop!");
BotHandler.playerShop(player); BotHandler.playerShop(player);
return; return;
case 10005:
player.setXPRate(GameConstants.VARIABLE_XP_RATES[1]);
player.getPacketSender().sendMessage("Your XP rate is now set to x" + player.getXPRate() + " you can increase your rate in the future by using");
player.getPacketSender().sendMessage("::xprate");
player.getPacketSender().closeAllWindows();
return;
} }
player.dialogueAction = 0; player.dialogueAction = 0;
player.getPacketSender().closeAllWindows(); player.getPacketSender().closeAllWindows();
@@ -192,6 +198,12 @@ public class DialogueOptions {
player.getDialogueHandler().sendStatement("You close your shop!"); player.getDialogueHandler().sendStatement("You close your shop!");
BotHandler.closeShop(player); BotHandler.closeShop(player);
return; return;
case 10005:
player.setXPRate(GameConstants.VARIABLE_XP_RATES[2]);
player.getPacketSender().sendMessage("Your XP rate is now set to x" + player.getXPRate() + " you can increase your rate in the future by using");
player.getPacketSender().sendMessage("::xprate");
player.getPacketSender().closeAllWindows();
return;
} }
player.dialogueAction = 0; player.dialogueAction = 0;
player.getPacketSender().closeAllWindows(); player.getPacketSender().closeAllWindows();
@@ -283,6 +295,11 @@ public class DialogueOptions {
player.getDialogueHandler().sendStatement("You withdraw " + Bot.formatSellPrice(BotHandler.checkCoins(player)) + " from your shop!"); player.getDialogueHandler().sendStatement("You withdraw " + Bot.formatSellPrice(BotHandler.checkCoins(player)) + " from your shop!");
BotHandler.takeCoins(player); BotHandler.takeCoins(player);
return; return;
case 10005:
player.setXPRate(GameConstants.VARIABLE_XP_RATES[3]);
player.getPacketSender().sendMessage("Your XP rate is now set to x" + player.getXPRate() + " you now have the highest XP rate.");
player.getPacketSender().closeAllWindows();
return;
} }
player.dialogueAction = 0; player.dialogueAction = 0;
player.getPacketSender().closeAllWindows(); player.getPacketSender().closeAllWindows();
@@ -618,11 +635,37 @@ public class DialogueOptions {
player.getDialogueHandler().sendDialogues(3586, player.npcType); player.getDialogueHandler().sendDialogues(3586, player.npcType);
return; return;
} }
else if (player.dialogueAction == 7559) else if (player.dialogueAction == 7559) {
{
player.getDialogueHandler().sendDialogues(3864, player.npcType); player.getDialogueHandler().sendDialogues(3864, player.npcType);
return; return;
} } else if (player.dialogueAction == 10004) {
if(!player.closeTutorialInterface) {
player.getPacketSender().sendMessage("Your XP rate is now set to x" + player.getXPRate() + " you can increase your rate in the future by using");
player.getPacketSender().sendMessage("::xprate");
player.getPacketSender().showInterface(3559);
player.canChangeAppearance = true;
player.closeTutorialInterface = true;
return;
} else if (player.getXPRate() != + GameConstants.VARIABLE_XP_RATES[3]) {
player.getPacketSender().sendMessage("Your XP rate is now set to x" + player.getXPRate() + " you can increase your rate in the future by using");
player.getPacketSender().sendMessage("::xprate");
return;
} else {
player.getPacketSender().sendMessage("Your XP rate is now set to x" + player.getXPRate() + " you now have the highest XP rate.");
return;
}
} else if(player.dialogueAction == 10006) {
player.setXPRate(GameConstants.VARIABLE_XP_RATES[2]);
player.getPacketSender().sendMessage("Your XP rate is now set to x" + player.getXPRate() + " you can increase your rate in the future by using");
player.getPacketSender().sendMessage("::xprate");
player.getPacketSender().closeAllWindows();
return;
} else if(player.dialogueAction == 10007) {
player.setXPRate(GameConstants.VARIABLE_XP_RATES[3]);
player.getPacketSender().sendMessage("Your XP rate is now set to x" + player.getXPRate() + " you now have the highest XP rate.");
player.getPacketSender().closeAllWindows();
return;
}
player.dialogueAction = 0; player.dialogueAction = 0;
player.getPacketSender().closeAllWindows(); player.getPacketSender().closeAllWindows();
break; break;
@@ -848,6 +891,15 @@ public class DialogueOptions {
{ {
player.getDialogueHandler().sendDialogues(3865, player.npcType); player.getDialogueHandler().sendDialogues(3865, player.npcType);
return; return;
} else if (player.dialogueAction == 10004) {
player.getDialogueHandler().sendDialogues(10002, 2244);
return;
} else if(player.dialogueAction == 10006) {
player.setXPRate(GameConstants.VARIABLE_XP_RATES[3]);
player.getPacketSender().sendMessage("Your XP rate is now set to x" + player.getXPRate() + " you now have the highest XP rate.");
player.getPacketSender().sendMessage("::xprate");
player.getPacketSender().closeAllWindows();
return;
} }
player.dialogueAction = 0; player.dialogueAction = 0;
player.getPacketSender().closeAllWindows(); player.getPacketSender().closeAllWindows();
@@ -922,6 +974,10 @@ public class DialogueOptions {
if (player.dialogueAction == 701) { if (player.dialogueAction == 701) {
player.getDialogueHandler().sendDialogues(3561, player.npcType); player.getDialogueHandler().sendDialogues(3561, player.npcType);
} }
if (player.dialogueAction == 10002) {
player.setXPRate(GameConstants.VARIABLE_XP_RATES[0]);
player.getDialogueHandler().sendDialogues(10003, player.npcType);
}
break; break;
case 9179: case 9179:
@@ -991,6 +1047,10 @@ public class DialogueOptions {
if (player.dialogueAction == 701) { if (player.dialogueAction == 701) {
player.getDialogueHandler().sendDialogues(3562, player.npcType); player.getDialogueHandler().sendDialogues(3562, player.npcType);
} }
if (player.dialogueAction == 10002) {
player.setXPRate(GameConstants.VARIABLE_XP_RATES[1]);
player.getDialogueHandler().sendDialogues(10003, player.npcType);
}
break; break;
case 9180: case 9180:
@@ -1063,6 +1123,10 @@ public class DialogueOptions {
if (player.dialogueAction == 701) { if (player.dialogueAction == 701) {
player.getDialogueHandler().sendDialogues(3563, player.npcType); player.getDialogueHandler().sendDialogues(3563, player.npcType);
} }
if (player.dialogueAction == 10002) {
player.setXPRate(GameConstants.VARIABLE_XP_RATES[2]);
player.getDialogueHandler().sendDialogues(10003, player.npcType);
}
break; break;
case 9181: case 9181:
@@ -1120,6 +1184,10 @@ public class DialogueOptions {
if (player.dialogueAction == 701) { if (player.dialogueAction == 701) {
player.getDialogueHandler().sendDialogues(3564, player.npcType); player.getDialogueHandler().sendDialogues(3564, player.npcType);
} }
if (player.dialogueAction == 10002) {
player.setXPRate(GameConstants.VARIABLE_XP_RATES[3]);
player.getDialogueHandler().sendDialogues(10003, player.npcType);
}
break; break;
} }
} }
@@ -98,7 +98,8 @@ public abstract class Player {
public byte buffer[] = null; public byte buffer[] = null;
public String lastConnectedFrom; public String lastConnectedFrom;
private Compost compost = new Compost(this); public static int xpRate = 1;
private Compost compost = new Compost(this);
private Allotments allotment = new Allotments(this); private Allotments allotment = new Allotments(this);
private Flowers flower = new Flowers(this); private Flowers flower = new Flowers(this);
private Herbs herb = new Herbs(this); private Herbs herb = new Herbs(this);
@@ -166,6 +167,10 @@ public abstract class Player {
private DoubleGates doubleGates = new DoubleGates(); private DoubleGates doubleGates = new DoubleGates();
public int lastMainFrameInterface = -1; //Possibly used in future to prevent packet exploits public int lastMainFrameInterface = -1; //Possibly used in future to prevent packet exploits
public int getXPRate() { return xpRate; }
public void setXPRate(int xpRate) { this.xpRate = xpRate; }
public boolean isPreaching() { public boolean isPreaching() {
return preaching; return preaching;
} }
@@ -173,9 +178,9 @@ public abstract class Player {
public void setPreaching(boolean preaching) { public void setPreaching(boolean preaching) {
this.preaching = preaching; this.preaching = preaching;
} }
public boolean preaching; public boolean preaching;
public Compost getCompost() { public Compost getCompost() {
return compost; return compost;
} }
@@ -223,12 +228,12 @@ public abstract class Player {
public ToolLeprechaun getFarmingTools() { public ToolLeprechaun getFarmingTools() {
return toolLeprechaun; return toolLeprechaun;
} }
public LogCuttingInterface getFletching() { public LogCuttingInterface getFletching() {
return fletching; return fletching;
} }
public SingleGates getSingleGates() { public SingleGates getSingleGates() {
return singleGates; return singleGates;
} }
@@ -404,7 +409,7 @@ public abstract class Player {
public MageTrainingArena getMageTrainingArena() { public MageTrainingArena getMageTrainingArena() {
return mageArena; return mageArena;
} }
public Trading getTrading() { public Trading getTrading() {
return trading; return trading;
} }
@@ -444,13 +449,13 @@ public abstract class Player {
public Inventory getInventory() { public Inventory getInventory() {
return inventory; return inventory;
} }
private Inventory inventory = new Inventory(this); private Inventory inventory = new Inventory(this);
private int tempInteger; private int tempInteger;
public boolean tempBoolean; public boolean tempBoolean;
public void setTempInteger(int tempInteger) { public void setTempInteger(int tempInteger) {
this.tempInteger = tempInteger; this.tempInteger = tempInteger;
} }
@@ -460,17 +465,17 @@ public abstract class Player {
} }
public int totalShopItems; public int totalShopItems;
public boolean stopPlayer(boolean stop) { public boolean stopPlayer(boolean stop) {
return (stop ? stopPlayerPacket == true : stopPlayerPacket == false); return (stop ? stopPlayerPacket == true : stopPlayerPacket == false);
} }
public long objectDelay; public long objectDelay;
public long getObjectDelay() { public long getObjectDelay() {
return (objectDelay); return (objectDelay);
} }
public long setObjectDelay(long delay) { public long setObjectDelay(long delay) {
return (objectDelay = delay); return (objectDelay = delay);
} }
@@ -981,7 +986,7 @@ public abstract class Player {
if (System.currentTimeMillis() - singleCombatDelay2 > 3300) { if (System.currentTimeMillis() - singleCombatDelay2 > 3300) {
underAttackBy2 = 0; underAttackBy2 = 0;
} }
if (System.currentTimeMillis() - restoreStatsDelay > 60000) { if (System.currentTimeMillis() - restoreStatsDelay > 60000) {
restoreStatsDelay = System.currentTimeMillis(); restoreStatsDelay = System.currentTimeMillis();
for (int skill = 0; skill < playerLevel.length; skill++) { for (int skill = 0; skill < playerLevel.length; skill++) {
@@ -1398,20 +1403,20 @@ public abstract class Player {
restoreStatsDelay, logoutDelay, buryDelay, foodDelay, potDelay, restoreStatsDelay, logoutDelay, buryDelay, foodDelay, potDelay,
doorDelay, doubleDoorDelay, buySlayerTimer, lastIncrease, doorDelay, doubleDoorDelay, buySlayerTimer, lastIncrease,
boneDelay, leverDelay = 0, searchObjectDelay = 0, clickDelay = 0; boneDelay, leverDelay = 0, searchObjectDelay = 0, clickDelay = 0;
public boolean hideYell; public boolean hideYell;
private Npc specialTarget = null; private Npc specialTarget = null;
public void setSpecialTarget(Npc target) { public void setSpecialTarget(Npc target) {
this.specialTarget = target; this.specialTarget = target;
} }
public Npc getSpecialTarget() { public Npc getSpecialTarget() {
return specialTarget; return specialTarget;
} }
public int miningAxe = -1, woodcuttingAxe = -1; public int miningAxe = -1, woodcuttingAxe = -1;
public boolean initialized, musicOn = true, luthas, public boolean initialized, musicOn = true, luthas,
@@ -1695,7 +1700,7 @@ public abstract class Player {
4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 2097152, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 2097152,
8388608, 16777216, 67108864, 134217728 }; 8388608, 16777216, 67108864, 134217728 };
/** /**
* Combat variables * Combat variables
*/ */
@@ -1713,7 +1718,7 @@ public abstract class Player {
/** /**
* End * End
*/ */
public int clickNpcType, clickObjectType, objectId, objectX, public int clickNpcType, clickObjectType, objectId, objectX,
objectY, npcIndex, npcClickIndex, npcType; objectY, npcIndex, npcClickIndex, npcType;
public int pItemX, pItemY, pItemId; public int pItemX, pItemY, pItemId;
@@ -2130,11 +2135,11 @@ public abstract class Player {
walkingQueueY[wQueueWritePtr] = y; walkingQueueY[wQueueWritePtr] = y;
wQueueWritePtr = next; wQueueWritePtr = next;
} }
public boolean checkRangeDistance() { public boolean checkRangeDistance() {
return (usingRangeWeapon || usingBow); return (usingRangeWeapon || usingBow);
} }
public int gatherRangeDistance(int distance) { public int gatherRangeDistance(int distance) {
//dart (non long range) //dart (non long range)
if (usingRangeWeapon && RangeData.usingDart(this) && fightMode != 3) { if (usingRangeWeapon && RangeData.usingDart(this) && fightMode != 3) {
@@ -2148,7 +2153,7 @@ public abstract class Player {
//dart, knife, throwing axe (long range) //dart, knife, throwing axe (long range)
} else if (usingRangeWeapon && fightMode == 3) { } else if (usingRangeWeapon && fightMode == 3) {
distance = RangeData.usingDart(this) ? 5 : 6; distance = RangeData.usingDart(this) ? 5 : 6;
//short bow //short bow
} else if (usingBow && !RangeData.usingLongbow(this)) { } else if (usingBow && !RangeData.usingLongbow(this)) {
distance = fightMode == 3 ? 7 : 9; distance = fightMode == 3 ? 7 : 9;
} }
@@ -2507,74 +2512,74 @@ public abstract class Player {
} else { } else {
playerProps.writeByte(0); playerProps.writeByte(0);
} }
if (playerEquipment[ItemConstants.CAPE] > 1) { if (playerEquipment[ItemConstants.CAPE] > 1) {
playerProps.writeWord(0x200 + playerEquipment[ItemConstants.CAPE]); playerProps.writeWord(0x200 + playerEquipment[ItemConstants.CAPE]);
} else { } else {
playerProps.writeByte(0); playerProps.writeByte(0);
} }
if (playerEquipment[ItemConstants.AMULET] > 1) { if (playerEquipment[ItemConstants.AMULET] > 1) {
playerProps.writeWord(0x200 + playerEquipment[ItemConstants.AMULET]); playerProps.writeWord(0x200 + playerEquipment[ItemConstants.AMULET]);
} else { } else {
playerProps.writeByte(0); playerProps.writeByte(0);
} }
if (playerEquipment[ItemConstants.WEAPON] > 1) { if (playerEquipment[ItemConstants.WEAPON] > 1) {
playerProps.writeWord(0x200 + playerEquipment[ItemConstants.WEAPON]); playerProps.writeWord(0x200 + playerEquipment[ItemConstants.WEAPON]);
} else { } else {
playerProps.writeByte(0); playerProps.writeByte(0);
} }
if (playerEquipment[ItemConstants.CHEST] > 1) { if (playerEquipment[ItemConstants.CHEST] > 1) {
playerProps.writeWord(0x200 + playerEquipment[ItemConstants.CHEST]); playerProps.writeWord(0x200 + playerEquipment[ItemConstants.CHEST]);
} else { } else {
playerProps.writeWord(0x100 + playerAppearance[2]); playerProps.writeWord(0x100 + playerAppearance[2]);
} }
if (playerEquipment[ItemConstants.SHIELD] > 1) { if (playerEquipment[ItemConstants.SHIELD] > 1) {
playerProps.writeWord(0x200 + playerEquipment[ItemConstants.SHIELD]); playerProps.writeWord(0x200 + playerEquipment[ItemConstants.SHIELD]);
} else { } else {
playerProps.writeByte(0); playerProps.writeByte(0);
} }
if (!ItemData.isFullBody(playerEquipment[ItemConstants.CHEST])) { if (!ItemData.isFullBody(playerEquipment[ItemConstants.CHEST])) {
playerProps.writeWord(0x100 + playerAppearance[3]); playerProps.writeWord(0x100 + playerAppearance[3]);
} else { } else {
playerProps.writeByte(0); playerProps.writeByte(0);
} }
if (playerEquipment[ItemConstants.LEGS] > 1) { if (playerEquipment[ItemConstants.LEGS] > 1) {
playerProps.writeWord(0x200 + playerEquipment[ItemConstants.LEGS]); playerProps.writeWord(0x200 + playerEquipment[ItemConstants.LEGS]);
} else { } else {
playerProps.writeWord(0x100 + playerAppearance[5]); playerProps.writeWord(0x100 + playerAppearance[5]);
} }
if (!ItemData.isFullHelm(playerEquipment[ItemConstants.HAT]) if (!ItemData.isFullHelm(playerEquipment[ItemConstants.HAT])
&& !ItemData.isFullMask(playerEquipment[ItemConstants.HAT])) { && !ItemData.isFullMask(playerEquipment[ItemConstants.HAT])) {
playerProps.writeWord(0x100 + playerAppearance[1]); playerProps.writeWord(0x100 + playerAppearance[1]);
} else { } else {
playerProps.writeByte(0); playerProps.writeByte(0);
} }
if (playerEquipment[ItemConstants.HANDS] > 1) { if (playerEquipment[ItemConstants.HANDS] > 1) {
playerProps.writeWord(0x200 + playerEquipment[ItemConstants.HANDS]); playerProps.writeWord(0x200 + playerEquipment[ItemConstants.HANDS]);
} else { } else {
playerProps.writeWord(0x100 + playerAppearance[4]); playerProps.writeWord(0x100 + playerAppearance[4]);
} }
if (playerEquipment[ItemConstants.FEET] > 1) { if (playerEquipment[ItemConstants.FEET] > 1) {
playerProps.writeWord(0x200 + playerEquipment[ItemConstants.FEET]); playerProps.writeWord(0x200 + playerEquipment[ItemConstants.FEET]);
} else { } else {
playerProps.writeWord(0x100 + playerAppearance[6]); playerProps.writeWord(0x100 + playerAppearance[6]);
} }
if (playerAppearance[0] != 1 && !ItemData.isFullMask(playerEquipment[ItemConstants.HAT])) { if (playerAppearance[0] != 1 && !ItemData.isFullMask(playerEquipment[ItemConstants.HAT])) {
playerProps.writeWord(0x100 + playerAppearance[7]); playerProps.writeWord(0x100 + playerAppearance[7]);
} else { } else {
playerProps.writeByte(0); playerProps.writeByte(0);
} }
} else {//send npc data } else {//send npc data
playerProps.writeWord(-1);//Tells client that were being a npc playerProps.writeWord(-1);//Tells client that were being a npc
playerProps.writeWord(npcId2);//send NpcID playerProps.writeWord(npcId2);//send NpcID
@@ -17,7 +17,6 @@ import com.rs2.game.content.music.sound.SoundList;
import com.rs2.game.content.randomevents.RandomEventHandler; import com.rs2.game.content.randomevents.RandomEventHandler;
import com.rs2.game.content.skills.SkillData; import com.rs2.game.content.skills.SkillData;
import com.rs2.game.content.skills.SkillHandler; import com.rs2.game.content.skills.SkillHandler;
import com.rs2.game.content.skills.smithing.Superheat;
import com.rs2.game.items.GameItem; import com.rs2.game.items.GameItem;
import com.rs2.game.items.ItemAssistant; import com.rs2.game.items.ItemAssistant;
import com.rs2.game.items.ItemConstants; import com.rs2.game.items.ItemConstants;
@@ -95,7 +94,7 @@ public class PlayerAssistant {
public void loginScreen() { public void loginScreen() {
player.getPacketSender().showInterface(15244); player.getPacketSender().showInterface(15244);
player.getPacketSender().sendString("Welcome to " + GameConstants.SERVER_NAME + "\\n", 15257); player.getPacketSender().sendString("Welcome to " + GameConstants.SERVER_NAME + " World: " + GameConstants.WORLD + "\\n", 15257);
int currentDay = player.getLastLogin() - player.lastLoginDate; int currentDay = player.getLastLogin() - player.lastLoginDate;
if (player.playerLevel[GameConstants.HERBLORE] < 3) { if (player.playerLevel[GameConstants.HERBLORE] < 3) {
@@ -1833,7 +1832,7 @@ public class PlayerAssistant {
player.getItemAssistant().clearBank(); player.getItemAssistant().clearBank();
player.getPlayerAssistant().addStarter(); player.getPlayerAssistant().addStarter();
player.getPlayerAssistant().movePlayer(3233, 3229, 0); player.getPlayerAssistant().movePlayer(3233, 3229, 0);
player.getPacketSender().sendMessage("Welcome to @blu@" + GameConstants.SERVER_NAME + "@bla@ - we are currently in Server Stage v@blu@" + GameConstants.TEST_VERSION + "@bla@."); player.getPacketSender().sendMessage("Welcome to @blu@" + GameConstants.SERVER_NAME + " World: " + GameConstants.WORLD + "@bla@ - we are currently in Server Stage v@blu@" + GameConstants.TEST_VERSION + "@bla@.");
player.getPacketSender().sendMessage("@red@Did you know?@bla@ We're open source and pull requests are welcome!"); player.getPacketSender().sendMessage("@red@Did you know?@bla@ We're open source and pull requests are welcome!");
player.getPacketSender().sendMessage("Source code: github.com/2006-Scape/2006Scape"); player.getPacketSender().sendMessage("Source code: github.com/2006-Scape/2006Scape");
player.getPacketSender().sendMessage("Discord: https://discord.gg/hZ6VfWG"); player.getPacketSender().sendMessage("Discord: https://discord.gg/hZ6VfWG");
@@ -2033,7 +2032,11 @@ public class PlayerAssistant {
if (player.tutorialProgress < 36 && player.playerLevel[skill] == 3 && GameConstants.TUTORIAL_ISLAND) { if (player.tutorialProgress < 36 && player.playerLevel[skill] == 3 && GameConstants.TUTORIAL_ISLAND) {
return false; return false;
} }
amount *= GameConstants.XP_RATE; if (GameConstants.VARIABLE_XP_RATE){
amount *= player.getXPRate();
} else {
amount *= GameConstants.XP_RATE;
}
int oldLevel = getLevelForXP(player.playerXP[skill]); int oldLevel = getLevelForXP(player.playerXP[skill]);
player.playerXP[skill] += amount; player.playerXP[skill] += amount;
if (oldLevel < getLevelForXP(player.playerXP[skill])) { if (oldLevel < getLevelForXP(player.playerXP[skill])) {
@@ -92,6 +92,8 @@ public class PlayerSave {
case "character-rights": case "character-rights":
player.playerRights = Integer.parseInt(token2); player.playerRights = Integer.parseInt(token2);
break; break;
case "xp-rate":
player.xpRate = Integer.parseInt(token2);
case "last-ip": case "last-ip":
player.lastConnectedFrom = token2; player.lastConnectedFrom = token2;
break; break;
@@ -593,6 +595,8 @@ public class PlayerSave {
characterfile.newLine(); characterfile.newLine();
characterfile.write("character-rights = " + player.playerRights); characterfile.write("character-rights = " + player.playerRights);
characterfile.newLine(); characterfile.newLine();
characterfile.write("xp-rate = " + player.xpRate);
characterfile.newLine();
characterfile.write("last-ip = " + player.connectedFrom); characterfile.write("last-ip = " + player.connectedFrom);
characterfile.newLine(); characterfile.newLine();
characterfile.write("isBot = " + player.isBot); characterfile.write("isBot = " + player.isBot);
@@ -13,7 +13,7 @@ public class PlayersOnlineWebsite {
private static void setWebsitePlayersOnline(int amount) throws IOException { private static void setWebsitePlayersOnline(int amount) throws IOException {
URL url; URL url;
url = new URL(GameConstants.WEBSITE_LINK + "/playersonline.php?pass=" + password + "&amount=" + amount); url = new URL(GameConstants.WEBSITE_LINK + "/playersonline.php?pass=" + password + "&amount=" + amount + "&world=" + GameConstants.WORLD);
url.openStream().close(); url.openStream().close();
} }
@@ -12,7 +12,7 @@ public class RegisteredAccsWebsite {
private static void setAccountsRegistered(int amount) throws IOException { private static void setAccountsRegistered(int amount) throws IOException {
URL url; URL url;
url = new URL(GameConstants.WEBSITE_LINK + "/accountsregistered.php?pass=" + password + "&amount=" + amount); url = new URL(GameConstants.WEBSITE_LINK + "/accountsregistered.php?pass=" + password + "&amount=" + amount + "&world=" + GameConstants.WORLD);
url.openStream().close(); url.openStream().close();
} }
@@ -1,12 +1,15 @@
package com.rs2.integrations.discord; package com.rs2.integrations.discord;
import com.rs2.GameConstants; import com.rs2.GameConstants;
import com.rs2.integrations.discord.commands.*;
import com.rs2.integrations.discord.commands.admin.GameKick;
import com.rs2.integrations.discord.commands.admin.MoveHome;
import com.rs2.integrations.discord.commands.admin.Update;
import org.javacord.api.DiscordApi; import org.javacord.api.DiscordApi;
import org.javacord.api.DiscordApiBuilder; import org.javacord.api.DiscordApiBuilder;
import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.entity.channel.TextChannel;
import org.javacord.api.entity.message.MessageBuilder; import org.javacord.api.entity.message.MessageBuilder;
import org.javacord.api.util.logging.ExceptionLogger; import org.javacord.api.util.logging.ExceptionLogger;
import com.rs2.integrations.discord.commands.*;
import java.io.IOException; import java.io.IOException;
@@ -17,6 +20,7 @@ import java.io.IOException;
public class JavaCord { public class JavaCord {
public static String serverName = GameConstants.SERVER_NAME; public static String serverName = GameConstants.SERVER_NAME;
public static String commandPrefix = "::w" + GameConstants.WORLD;
public static String token; public static String token;
public static DiscordApi api = null; public static DiscordApi api = null;
@@ -34,19 +38,14 @@ public class JavaCord {
api.addListener(new Players()); api.addListener(new Players());
api.addListener(new Vote()); api.addListener(new Vote());
api.addListener(new Website()); api.addListener(new Website());
//Admin Commands
api.addListener(new GameKick());
api.addListener(new MoveHome());
api.addListener(new Update());
if(!DiscordActivity.playerCount) { if(!DiscordActivity.playerCount) {
api.updateActivity(GameConstants.WEBSITE_LINK); api.updateActivity(GameConstants.WEBSITE_LINK);
} }
api.addMessageCreateListener(event -> { api.addMessageCreateListener(event -> {
if (event.getMessageContent().startsWith("::movehome")) {
if (event.getMessageAuthor().isServerAdmin()) {
System.out.println("perms");
event.getChannel().sendMessage("perms");
} else {
event.getChannel().sendMessage("You do not have permission to preform this command");
}
}
}); });
} catch (Exception e) { } catch (Exception e) {
@@ -1,5 +1,6 @@
package com.rs2.integrations.discord.commands; package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.listener.message.MessageCreateListener;
@@ -8,22 +9,20 @@ public class Commands implements MessageCreateListener {
@Override @Override
public void onMessageCreate(MessageCreateEvent event) { public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage(); Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::commands")) { if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " commands")) {
event.getChannel().sendMessage("```fix" event.getChannel().sendMessage("```fix"
+ System.lineSeparator() + + System.lineSeparator() +
"::forum/::forums" JavaCord.commandPrefix + " forum/" + JavaCord.commandPrefix + " forums"
+ System.lineSeparator() + + System.lineSeparator() +
"::hiscores/::highscores" JavaCord.commandPrefix + " hiscores/" + JavaCord.commandPrefix + " highscores"
+ System.lineSeparator() + + System.lineSeparator() +
"::issues/::bugs" JavaCord.commandPrefix + " issues/" + JavaCord.commandPrefix + " bugs"
+ System.lineSeparator() + + System.lineSeparator() +
"::online" JavaCord.commandPrefix + " online"
+ System.lineSeparator() + + System.lineSeparator() +
"::players" JavaCord.commandPrefix + " vote"
+ System.lineSeparator() + + System.lineSeparator() +
"::vote" JavaCord.commandPrefix + " website/" + JavaCord.commandPrefix + " site"
+ System.lineSeparator() +
"::website/::site"
+ "```"); + "```");
} }
} }
@@ -1,5 +1,6 @@
package com.rs2.integrations.discord.commands; package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.listener.message.MessageCreateListener;
@@ -10,7 +11,7 @@ public class Forum implements MessageCreateListener {
@Override @Override
public void onMessageCreate(MessageCreateEvent event) { public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage(); Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::forum") || message.getContent().equalsIgnoreCase("::forums")) { if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " forum") || message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " forums")) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK + "/forums/index.php"); event.getChannel().sendMessage(GameConstants.WEBSITE_LINK + "/forums/index.php");
} }
} }
@@ -1,5 +1,6 @@
package com.rs2.integrations.discord.commands; package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.listener.message.MessageCreateListener;
@@ -10,7 +11,7 @@ public class Hiscores implements MessageCreateListener {
@Override @Override
public void onMessageCreate(MessageCreateEvent event) { public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage(); Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::hiscores") || message.getContent().equalsIgnoreCase("::highscores")) { if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " hiscores") || message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " highscores")) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK + "/hiscores.html"); event.getChannel().sendMessage(GameConstants.WEBSITE_LINK + "/hiscores.html");
} }
} }
@@ -1,5 +1,6 @@
package com.rs2.integrations.discord.commands; package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.listener.message.MessageCreateListener;
@@ -8,7 +9,7 @@ public class Issues implements MessageCreateListener {
@Override @Override
public void onMessageCreate(MessageCreateEvent event) { public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage(); Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::issues") || message.getContent().equalsIgnoreCase("::bugs")) { if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " issues") || message.getContent().equalsIgnoreCase(JavaCord.commandPrefix+ " bugs")) {
event.getChannel().sendMessage("https://github.com/2006-Scape/2006Scape/issues"); event.getChannel().sendMessage("https://github.com/2006-Scape/2006Scape/issues");
} }
} }
@@ -1,5 +1,6 @@
package com.rs2.integrations.discord.commands; package com.rs2.integrations.discord.commands;
import com.rs2.GameConstants;
import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.listener.message.MessageCreateListener;
@@ -10,8 +11,8 @@ public class Online implements MessageCreateListener {
@Override @Override
public void onMessageCreate(MessageCreateEvent event) { public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage(); Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::online")) { if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " online")) {
event.getChannel().sendMessage(":tada: " + JavaCord.serverName + " is Online! :tada:"); event.getChannel().sendMessage(":tada: " + JavaCord.serverName + " World:" + GameConstants.WORLD + " is Online! :tada:");
} }
} }
} }
@@ -1,16 +1,16 @@
package com.rs2.integrations.discord.commands; package com.rs2.integrations.discord.commands;
import com.rs2.game.players.PlayerHandler;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.listener.message.MessageCreateListener;
import com.rs2.game.players.PlayerHandler;
public class Players implements MessageCreateListener { public class Players implements MessageCreateListener {
@Override @Override
public void onMessageCreate(MessageCreateEvent event) { public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage(); Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::players")) { if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " players")) {
if (PlayerHandler.getPlayerCount() != 1) { if (PlayerHandler.getPlayerCount() != 1) {
event.getChannel().sendMessage("There are currently " + PlayerHandler.getPlayerCount() + " players online (" + PlayerHandler.getNonPlayerCount() + " staff online)."); event.getChannel().sendMessage("There are currently " + PlayerHandler.getPlayerCount() + " players online (" + PlayerHandler.getNonPlayerCount() + " staff online).");
} else { } else {
@@ -1,5 +1,6 @@
package com.rs2.integrations.discord.commands; package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.listener.message.MessageCreateListener;
@@ -10,7 +11,7 @@ public class Vote implements MessageCreateListener {
@Override @Override
public void onMessageCreate(MessageCreateEvent event) { public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage(); Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::vote")) { if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " vote")) {
event.getChannel().sendMessage("Visit " + GameConstants.WEBSITE_LINK + "/vote.html then type \"::claimvote\" in-game to receive your reward!"); event.getChannel().sendMessage("Visit " + GameConstants.WEBSITE_LINK + "/vote.html then type \"::claimvote\" in-game to receive your reward!");
} }
} }
@@ -1,5 +1,6 @@
package com.rs2.integrations.discord.commands; package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.listener.message.MessageCreateListener;
@@ -10,7 +11,7 @@ public class Website implements MessageCreateListener {
@Override @Override
public void onMessageCreate(MessageCreateEvent event) { public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage(); Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::website") || message.getContent().equalsIgnoreCase("::site")) { if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " website") || message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " site")) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK); event.getChannel().sendMessage(GameConstants.WEBSITE_LINK);
} }
} }
@@ -0,0 +1,32 @@
package com.rs2.integrations.discord.commands.admin;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
public class GameKick implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
if (event.getMessageContent().startsWith(JavaCord.commandPrefix + " gamekick")) {
if (event.getMessageAuthor().isServerAdmin()) {
String playerToKick = event.getMessageContent().replace( JavaCord.commandPrefix + " gamekick ", "");
for (Player player2 : PlayerHandler.players) {
if (player2 != null) {
if (player2.playerName.equalsIgnoreCase(playerToKick)) {
Client c2 = (Client) player2;
event.getChannel().sendMessage( playerToKick+ " was kicked by " + event.getMessageAuthor().getDisplayName() + ".");
c2.disconnected = true;
c2.logout(true);
break;
}
}
}
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
}
}
@@ -0,0 +1,31 @@
package com.rs2.integrations.discord.commands.admin;
import com.rs2.GameConstants;
import com.rs2.game.players.Client;
import com.rs2.game.players.PlayerHandler;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
public class MoveHome implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
if (event.getMessageContent().startsWith(JavaCord.commandPrefix + " movehome")) {
if (event.getMessageAuthor().isServerAdmin()) {
String teleToMe = event.getMessageContent().replace( JavaCord.commandPrefix + " movehome ", "");
for (int i = 0; i < PlayerHandler.players.length; i++) {
if (PlayerHandler.players[i] != null) {
if (PlayerHandler.players[i].playerName.equalsIgnoreCase(teleToMe)) {
Client p = (Client) PlayerHandler.players[i];
event.getChannel().sendMessage(p.playerName + " has been moved to Lumbridge.");
p.getPlayerAssistant().movePlayer(GameConstants.RESPAWN_X, GameConstants.RESPAWN_Y, 0);
}
}
}
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
}
}
@@ -0,0 +1,24 @@
package com.rs2.integrations.discord.commands.admin;
import com.rs2.game.players.PlayerHandler;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
public class Update implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
if(event.getMessageAuthor().isServerAdmin()) {
String seconds = event.getMessageContent().replace(JavaCord.commandPrefix + " update ", "");
if (event.getMessageContent().startsWith(JavaCord.commandPrefix + " update")) {
PlayerHandler.updateSeconds = Integer.parseInt(seconds);
PlayerHandler.updateAnnounced = false;
PlayerHandler.updateRunning = true;
PlayerHandler.updateStartTime = System.currentTimeMillis();
event.getChannel().sendMessage("Server update will begin in " + seconds + " seconds.");
}
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
}
@@ -116,7 +116,7 @@ public class PacketSender {
if (player.tutorialProgress > 35) { if (player.tutorialProgress > 35) {
player.getPlayerAssistant().sendSidebars(); player.getPlayerAssistant().sendSidebars();
Weight.updateWeight(player); Weight.updateWeight(player);
player.getPacketSender().sendMessage("Welcome to @blu@" + GameConstants.SERVER_NAME + "@bla@ - we are currently in Server Stage v@blu@" + GameConstants.TEST_VERSION + "@bla@."); player.getPacketSender().sendMessage("Welcome to @blu@" + GameConstants.SERVER_NAME + " World: " + GameConstants.WORLD + "@bla@ - we are currently in Server Stage v@blu@" + GameConstants.TEST_VERSION + "@bla@.");
player.getPacketSender().sendMessage("@red@Did you know?@bla@ We're open source! Pull requests are welcome"); player.getPacketSender().sendMessage("@red@Did you know?@bla@ We're open source! Pull requests are welcome");
player.getPacketSender().sendMessage("Source code at github.com/2006-Scape/2006Scape"); player.getPacketSender().sendMessage("Source code at github.com/2006-Scape/2006Scape");
player.getPacketSender().sendMessage("Join our Discord: https://discord.gg/hZ6VfWG"); player.getPacketSender().sendMessage("Join our Discord: https://discord.gg/hZ6VfWG");
@@ -8,7 +8,6 @@ import com.rs2.Connection;
import com.rs2.GameConstants; import com.rs2.GameConstants;
import com.rs2.GameEngine; import com.rs2.GameEngine;
import com.rs2.game.bots.BotHandler; import com.rs2.game.bots.BotHandler;
import com.rs2.game.content.combat.magic.SpellTeleport;
import com.rs2.game.npcs.NpcHandler; import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.*; import com.rs2.game.players.*;
import com.rs2.game.players.antimacro.AntiSpam; import com.rs2.game.players.antimacro.AntiSpam;
@@ -45,6 +44,34 @@ public class Commands implements PacketType {
public static void playerCommands(Player player, String playerCommand, String[] arguments) { public static void playerCommands(Player player, String playerCommand, String[] arguments) {
switch (playerCommand.toLowerCase()) { switch (playerCommand.toLowerCase()) {
case "myxprate":
case "checkxprate":
if(GameConstants.VARIABLE_XP_RATE) {
player.getPacketSender().sendMessage("Your current XP rate is x" + player.getXPRate());
break;
}
case "xprate":
if(GameConstants.VARIABLE_XP_RATE) {
if (player.getXPRate() == GameConstants.VARIABLE_XP_RATES[0]) {
player.getDialogueHandler().sendDialogues(10005, 2244);
return;
} else if (player.getXPRate() == GameConstants.VARIABLE_XP_RATES[1]) {
player.getDialogueHandler().sendDialogues(10006, 2244);
return;
} else if (player.getXPRate() == GameConstants.VARIABLE_XP_RATES[2]) {
player.getDialogueHandler().sendDialogues(10007, 2244);
return;
} else if (player.getXPRate() == GameConstants.VARIABLE_XP_RATES[3]) {
player.getPacketSender().sendMessage("You already have the highest XP rate.");
return;
} else {
player.getDialogueHandler().sendDialogues(10001, 2244);
return;
}
} else {
player.getPacketSender().sendMessage("You can't use this command in this world.");
}
break;
case "toggleyell": case "toggleyell":
case "tglyell": case "tglyell":
case "hideyell": case "hideyell":
@@ -257,9 +284,6 @@ public class Commands implements PacketType {
"::loc, ::pos, ::coord", "::loc, ::pos, ::coord",
"Get your current world position", "Get your current world position",
"", "",
"::stuck",
"Return to Lumbridge when stuck",
"",
"::randomtoggle", "::randomtoggle",
"Enable/Disable random events", "Enable/Disable random events",
"", "",
@@ -280,6 +304,8 @@ public class Commands implements PacketType {
"", "",
"::snow", "::snow",
"Add some snow in your mainscreen(works only in december)", "Add some snow in your mainscreen(works only in december)",
(GameConstants.VARIABLE_XP_RATE ? "\\n" + "::xprate\\n" + "Opens dialogue for the player to set/increase their XP rate." : ""),
(GameConstants.VARIABLE_XP_RATE ? "\\n" + "::checkxprate(::myxprate)\\n" + "Displays the players currently set XP rate." : ""),
}; };
// Clear all lines // Clear all lines
@@ -294,17 +320,6 @@ public class Commands implements PacketType {
} }
player.getPacketSender().showInterface(8134); player.getPacketSender().showInterface(8134);
break; break;
case "stuck":
if (player.getCombatAssistant().inCombat()) {
player.getPacketSender().sendMessage("You cannot do that while in combat.");
return;
}
player.getPlayerAssistant().movePlayer(SpellTeleport.LUMBRIDGE.getDestX(), SpellTeleport.LUMBRIDGE.getDestY(), 0);
player.getPacketSender().sendMessage("How did you manage that one...");
player.getPacketSender().sendMessage("If it's bug related, please report on Github/Discord!");
player.gfx100(80);
player.startAnimation(404);
break;
case "randomtoggle": case "randomtoggle":
case "togglerandom": case "togglerandom":
case "random": case "random":
+1 -1
View File
@@ -17,7 +17,7 @@ services:
volumes: volumes:
- ./2006Scape Server:/usr/src/server - ./2006Scape Server:/usr/src/server
working_dir: /usr/src/server working_dir: /usr/src/server
ports: # You will need to open other ports if your world ID is not 1 (43597 for world 2) ports: # You will need to open other ports if your world ID is not 1 (43598 for world 2)
- 43594:43594 # Server - 43594:43594 # Server
- 43595-43596:43595-43596 # File Server - 43595-43596:43595-43596 # File Server
restart: unless-stopped restart: unless-stopped