Compare commits

...

7 Commits

Author SHA1 Message Date
dginovker bb936bf809 latest compile 2019-11-03 22:10:46 -05:00
dginovker 5c4ca489ef Merge branch 'master' of https://github.com/dginovker/2006rebotted 2019-11-03 22:07:57 -05:00
dginovker fcb3fa255f Latest compile 2019-11-03 22:07:48 -05:00
Gptaqbc b02950045c Buy/sell x buying loop lagging issue fix general shop using fixes trading amount fix (#133)
* Update NpcHandler.class

Fixed the diagonal safefpotting combat bug. The NPC will move when it detects that the player is standing diagonally to it.

Still have some issue around objects but that's another story.

* Update NpcHandler.java

Fixed the diagonal safefpotting combat bug. The NPC will move when it detects that the player is standing diagonally to it.

Still have some issue around objects but that's another story.

closes #47

* Buy/Sell-X--Buying-loop-lagging-issue-fix--General-shop-using-fixes--Trading-amount-fix

- Added buy/sell X feature
- Fixed a lag with the buying loop when buying high amount. Instead of spam buying 1 at a  times it divide the amount to buy in equal parts and buy in increments.
- Cant remember at all I'll edit after eating.
2019-11-03 22:02:39 -05:00
dginovker dcf6cbdc45 Latest compile + .gitignore 2019-10-31 14:03:18 -04:00
Danial efc6b3c8be Misc changes (#129)
* fixup "cantattack" command

* remove duplicate code

* fix brimhaven vines

* fixup cluescroll drops

* add clicktotele alias

* check player has an axe

* remove duplicate item id
2019-10-30 21:21:19 -04:00
Daniel Ginovker 9950dbe315 Easier setup (#128)
* Simpler compilation steps

* Add images

* Added artifact METAs

* Artifact fix
2019-10-28 20:46:04 -04:00
47 changed files with 448 additions and 169 deletions
+1
View File
@@ -1 +1,2 @@
2006Redone\ Server/data/characters/
.idea/
+1 -1
View File
@@ -7,7 +7,7 @@
<sourceFolder url="file://$MODULE_DIR$/2006Redone file_server/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/2006Redone Client/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library>
+42
View File
@@ -0,0 +1,42 @@
<component name="ArtifactManager">
<artifact type="jar" name="2006rebotted:jar">
<output-path>$PROJECT_DIR$/CompiledServer/artifacts/2006rebotted_jar</output-path>
<root id="archive" name="2006rebotted.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/2006Redone Client/METAs/Client Meta/META-INF/MANIFEST.MF" />
</element>
<element id="module-output" name="2006rebotted" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/slf4j-nop.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/commons-lang3-3.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/javac++.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/netty-3.6.6.Final.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/mina.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/mysql-connector-java-5.1.23-bin.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/slf4j-nop.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/slf4j.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/xpp3-1.1.4c.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/xstream-1.4.1.jar" path-in-jar="/" />
<element id="library" level="project" name="libs" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/commons-lang3-3.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/javac++.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/mysql-connector-java-5.1.23-bin.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/xstream-1.4.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/xpp3-1.1.4c.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/mina.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/slf4j.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/okio-1.13.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/okhttp-3.9.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/json-20190722.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/everythingrs-api.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/log4j-api-2.11.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/netty-3.6.6.Final.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/jackson-core-2.9.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/javacord-api-3.0.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/javacord-core-3.0.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/jackson-databind-2.9.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/nv-websocket-client-2.6.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/jackson-annotations-2.9.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/logging-interceptor-3.9.1.jar" path-in-jar="/" />
</root>
</artifact>
</component>
+42
View File
@@ -0,0 +1,42 @@
<component name="ArtifactManager">
<artifact type="jar" name="localhost_2006rebotted:jar">
<output-path>$PROJECT_DIR$/CompiledServer/artifacts/localhost_2006rebotted_jar</output-path>
<root id="archive" name="localhost_2006rebotted.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/2006Redone Client/METAs/Local Client Meta/META-INF/MANIFEST.MF" />
</element>
<element id="module-output" name="2006rebotted" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/slf4j-nop.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/commons-lang3-3.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/javac++.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/netty-3.6.6.Final.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/mina.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/mysql-connector-java-5.1.23-bin.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/slf4j-nop.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/slf4j.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/xpp3-1.1.4c.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone file_server/libs/xstream-1.4.1.jar" path-in-jar="/" />
<element id="library" level="project" name="libs" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/commons-lang3-3.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/javac++.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/mysql-connector-java-5.1.23-bin.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/xstream-1.4.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/xpp3-1.1.4c.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/mina.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/slf4j.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/okio-1.13.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/okhttp-3.9.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/json-20190722.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/everythingrs-api.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/log4j-api-2.11.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/netty-3.6.6.Final.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/jackson-core-2.9.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/javacord-api-3.0.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/javacord-core-3.0.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/jackson-databind-2.9.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/nv-websocket-client-2.6.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/jackson-annotations-2.9.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/2006Redone Server/libs/logging-interceptor-3.9.1.jar" path-in-jar="/" />
</root>
</artifact>
</component>
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8.0_222 (2)" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/CompiledServer" />
</component>
</project>
+122
View File
@@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ArtifactsWorkspaceSettings">
<artifacts-to-build>
<artifact name="localhost_2006rebotted:jar" />
</artifacts-to-build>
</component>
<component name="ChangeListManager">
<list default="true" id="9c1d485e-b413-4c80-b742-7c5a88c1c73c" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/2006Redone Server/src/redone/game/npcs/NpcHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/2006Redone Server/src/redone/game/npcs/NpcHandler.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/2006Redone Server/src/redone/net/packets/impl/Commands.java" beforeDir="false" afterPath="$PROJECT_DIR$/2006Redone Server/src/redone/net/packets/impl/Commands.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/2006Redone Server/src/redone/world/ObjectHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/2006Redone Server/src/redone/world/ObjectHandler.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/CompiledServer/production/2006rebotted/redone/net/packets/impl/Commands.class" beforeDir="false" afterPath="$PROJECT_DIR$/CompiledServer/production/2006rebotted/redone/net/packets/impl/Commands.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/CompiledServer/production/2006rebotted/redone/world/ObjectHandler.class" beforeDir="false" afterPath="$PROJECT_DIR$/CompiledServer/production/2006rebotted/redone/world/ObjectHandler.class" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectId" id="1Sr1PyvKre5eWJ6XgOrqWrHM5hp" />
<component name="PropertiesComponent">
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/2006Redone Client/METAs/Client Meta" />
<property name="project.structure.last.edited" value="Project" />
<property name="project.structure.proportion" value="0.15" />
<property name="project.structure.side.proportion" value="0.2" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager" selected="Application.FileServer">
<configuration name="Client" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="Client" />
<module name="2006rebotted" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="FileServer" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="org.apollo.jagcached.FileServer" />
<module name="2006rebotted" />
<option name="WORKING_DIRECTORY" value="2006Redone file_server" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="org.apollo.jagcached.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="Server" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="redone.Server" />
<module name="2006rebotted" />
<option name="WORKING_DIRECTORY" value="2006Redone Server" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="redone.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<list>
<item itemvalue="Application.FileServer" />
<item itemvalue="Application.Server" />
<item itemvalue="Application.Client" />
</list>
<recent_temporary>
<list>
<item itemvalue="Application.FileServer" />
<item itemvalue="Application.Server" />
<item itemvalue="Application.Client" />
</list>
</recent_temporary>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="e34c4650-a3c9-498e-b05e-c1cbb72d0ad7" name="Default Changelist" comment="" />
<created>1572306880139</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1572306880139</updated>
</task>
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State>
<option name="COLUMN_ORDER" />
</State>
</value>
</entry>
</map>
</option>
</component>
</project>
@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: Client
+8
View File
@@ -111,6 +111,14 @@ public final class RSInterface {
rsInterface.actions[l3] = null;
}
}
if(rsInterface.parentID == 3822) {
rsInterface.actions[2] = "Sell 10";
rsInterface.actions[3] = "Sell X";
}
if(rsInterface.id == 3900) {
rsInterface.actions[2] = "Buy 10";
rsInterface.actions[3] = "Buy X";
}
}
if (rsInterface.type == 3) {
rsInterface.aBoolean227 = stream.readUnsignedByte() == 1;
@@ -175,7 +175,7 @@ public class Woodcutting {
}
}
public boolean hasAxe(Client player) {
public static boolean hasAxe(Client player) {
for (int i = 0; i < Axe_Settings.length; i++) {
if (player.getItemAssistant().playerHasItem(Axe_Settings[i][0]) || player.playerEquipment[player.playerWeapon] == Axe_Settings[i][0]) {
return true;
@@ -88,7 +88,7 @@ public class Item {
6062 };
public static int rings[] = { 8082, 773, 1635, 1637, 1639, 1641, 1643,
1645, 2550, 2552, 2554, 2556, 2558, 2560, 2562, 2564, 2566, 2568,
2570, 2572, 4202, 4657, 6465, 6737, 6731, 6735, 6735, 6583, 6733 };
2570, 2572, 4202, 4657, 6465, 6737, 6731, 6735, 6583, 6733 };
public static int body[] = { 7608, 2520, 430, 7362, 7364, 636, 638, 640,
642, 644, 8064, 426, 430, 1005, 1757, 7592, 8031, 8027, 6617, 8019,
8014, 8002, 7376, 544, 7372, 7370, 577, 7974, 7970, 7965, 7961,
@@ -935,7 +935,7 @@ public class NpcHandler {
break;
}
if (Misc.random(1, 256) == 1) {
int level = npcs[i].combatLevel;
int level = getNpcListCombat(npcs[i].npcType);
if (level >= 2 && level <= 24) // easy
Server.itemHandler.createGroundItem(c, 2677, npcs[i].absX, npcs[i].absY, 1, c.playerId);
else if (level <= 40) // easy → medium
@@ -944,8 +944,8 @@ public class NpcHandler {
Server.itemHandler.createGroundItem(c, 2678, npcs[i].absX, npcs[i].absY, 1, c.playerId);
else if (level <= 150) // medium → hard
Server.itemHandler.createGroundItem(c, 2678 + Misc.random(0, 1), npcs[i].absX, npcs[i].absY, 1, c.playerId);
else // hard
Server.itemHandler.createGroundItem(c, 2678 + Misc.random(0, 1), npcs[i].absX, npcs[i].absY, 1, c.playerId);
else if (level > 150)// hard
Server.itemHandler.createGroundItem(c, 2679, npcs[i].absX, npcs[i].absY, 1, c.playerId);
}
}
}
@@ -1387,16 +1387,10 @@ public class NpcHandler {
token = token.trim();
token2 = line.substring(spot + 1);
token2 = token2.trim();
token2_2 = token2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2.replaceAll("\t+", "\t");
token3 = token2_2.split("\t");
if (token.equals("npc")) {
newNPCList(Integer.parseInt(token3[0]), token3[1],
Integer.parseInt(token3[2]),
Integer.parseInt(token3[3]));
newNPCList(Integer.parseInt(token3[0]), token3[1], Integer.parseInt(token3[2]), Integer.parseInt(token3[3]));
}
} else {
if (line.equals("[ENDOFNPCLIST]")) {
@@ -1,5 +1,6 @@
package redone.game.objects.impl;
import redone.game.content.skills.core.Woodcutting;
import redone.game.players.Client;
/**
@@ -8,6 +9,11 @@ import redone.game.players.Client;
public class BrimhavenVines {
public static void handleBrimhavenVines(Client c, int objectType) {
if (!Woodcutting.hasAxe(c)) {
c.getActionSender().sendMessage("You will need an axe to chop through these!");
return;
}
c.getActionSender().sendMessage("You chop your way through the vines.");
switch (objectType) {
case 12987:
case 12986:
@@ -31,21 +37,23 @@ public class BrimhavenVines {
}
}
public static void moveThroughVinesX(Client c, int originX, int x1, int y1,
int x2, int y2) {
public static void moveThroughVinesX(Client c, int originX, int x1, int y1, int x2, int y2) {
int x = c.getX();
int y = c.getY();
if (c.absX <= originX) {
c.getPlayerAssistant().walkTo(x1, y1);
c.getPlayerAssistant().movePlayer(x + x1, y + y1, 0);
} else {
c.getPlayerAssistant().walkTo(x2, y2);
c.getPlayerAssistant().movePlayer(x + x2, y + y2, 0);
}
}
public static void moveThroughVinesY(Client c, int originY, int x1, int y1,
int x2, int y2) {
public static void moveThroughVinesY(Client c, int originY, int x1, int y1, int x2, int y2) {
int x = c.getX();
int y = c.getY();
if (c.absY <= originY) {
c.getPlayerAssistant().walkTo(x1, y1);
c.getPlayerAssistant().movePlayer(x + x1, y + y1, 0);
} else {
c.getPlayerAssistant().walkTo(x2, y2);
c.getPlayerAssistant().movePlayer(x + x2, y + y2, 0);
}
}
@@ -657,11 +657,10 @@ public class Client extends Player {
getActionSender().sendMessage("Welcome to @blu@" + Constants.SERVER_NAME + "@bla@ - we are currently in Server Stage v@blu@" + Constants.TEST_VERSION + "@bla@.");
getActionSender().sendMessage("@red@Did you know?@bla@ We're open source! Pull requests are welcome");
getActionSender().sendMessage("Source code at github.com/dginovker/2006rebotted");
getActionSender().sendMessage("Welcome to the Beta! A reset will occur before main release -");
getActionSender().sendMessage("Join our Discord: discord.gg/4zrA2Wy");
if (!hasBankpin) {
getActionSender().sendMessage("You do not, have a bank pin it is highly recommened you set one.");
}
/*if (!hasBankpin) { //Kind of annoying. Maybe add Random % 10 or something.
getActionSender().sendMessage("You do not have a bank pin it is highly recommended you set one.");
}*/
}
getPlayerAssistant().firstTimeTutorial();
getItemAssistant().sendWeapon(playerEquipment[playerWeapon], ItemAssistant.getItemName(playerEquipment[playerWeapon]));
@@ -22,7 +22,7 @@ public abstract class Player {
public ArrayList<String> killedPlayers = new ArrayList<String>();
public ArrayList<Integer> attackedPlayers = new ArrayList<Integer>();
public ArrayList<String> lastKilledPlayers = new ArrayList<String>();
public int CraftInt, Dcolor, FletchInt, clanId = -1;
public int[][] barrowCrypt = {
@@ -970,32 +970,9 @@ public abstract class Player {
wQueueWritePtr = next;
// }
}
public boolean goodDistance(int objectX, int objectY, int playerX,
int playerY, int distance) {
for (int i = 0; i <= distance; i++) {
for (int j = 0; j <= distance; j++) {
if (objectId == 2282 || objectId == 10883 || objectId == 2322
|| objectId == 4493 || objectId == 12164
|| objectId == 1721 || objectId == 1722
|| objectId == 4304 && playerX == 2619
&& playerY == 3667) {
return true;
}
if (objectX + i == playerX
&& (objectY + j == playerY || objectY - j == playerY || objectY == playerY)) {
return true;
} else if (objectX - i == playerX
&& (objectY + j == playerY || objectY - j == playerY || objectY == playerY)) {
return true;
} else if (objectX == playerX
&& (objectY + j == playerY || objectY - j == playerY || objectY == playerY)) {
return true;
}
}
}
return false;
}
public 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 int getNextWalkingDirection() {
if (wQueueReadPtr == wQueueWritePtr) {
@@ -252,7 +252,10 @@ public class Trading {
if (o == null) {
return false;
}
if (!(player.playerItems[fromSlot] == itemID + 1 && player.playerItemsN[fromSlot] >= amount)) {
player.getActionSender().sendMessage("amount: " + amount);
player.getActionSender().sendMessage("player.playerItems[fromSlot]: " + player.playerItems[fromSlot]);
player.getActionSender().sendMessage("itemID + 1: " + itemID + 1);
if (!(player.playerItems[fromSlot] == itemID + 1 )){//&& player.playerItemsN[fromSlot] >= amount)) { I removed this check to permit trading max amount of item in inventory even when amount is higher than quantity in inventory.
player.getActionSender().sendMessage("You don't have that amount!");
return false;
}
@@ -7,7 +7,6 @@ import redone.game.items.ItemDefinitions;
import redone.game.players.Client;
import redone.game.players.Player;
import redone.game.players.PlayerHandler;
import redone.net.ActionSender;
import redone.util.GameLogger;
@@ -68,13 +67,13 @@ public class ShopAssistant {
public void resetShop(int ShopID) {
synchronized (player) {
int TotalItems = 0;
for (int i = 0; i < ShopHandler.MaxShopItems; i++) {
for (int i = 0; i < ShopHandler.MaxShopItems; i++) { //adds items in store when items are sold until max value.
if (ShopHandler.ShopItems[ShopID][i] > 0) {
TotalItems++;
}
}
if (TotalItems > ShopHandler.MaxShopItems) {
TotalItems = ShopHandler.MaxShopItems;
TotalItems = ShopHandler.MaxShopItems; //sets the stack of item sold to max value if the resulting amount is higher than max value.
}
player.getOutStream().createFrameVarSizeWord(53);
player.getOutStream().writeWord(3900);
@@ -334,6 +333,7 @@ public class ShopAssistant {
}
public boolean sellItem(int itemID, int fromSlot, int amount) {
player.getItemAssistant();
for (int i : Constants.ITEM_SELLABLE) {
if (i == itemID) {
player.getItemAssistant();
@@ -364,14 +364,11 @@ public class ShopAssistant {
return false;
}
}
if (amount > player.playerItemsN[fromSlot] && (ItemDefinitions.getDef()[player.playerItems[fromSlot] - 1].isNoteable == true || ItemDefinitions.getDef()[player.playerItems[fromSlot] - 1].isStackable == true)) {
amount = player.playerItemsN[fromSlot];
} else if (amount > player.getItemAssistant().getItemAmount(itemID) && ItemDefinitions.getDef()[player.playerItems[fromSlot] - 1].isNoteable == false && ItemDefinitions.getDef()[player.playerItems[fromSlot] - 1].isStackable == false) {
amount = player.getItemAssistant().getItemAmount(itemID);
}
// double ShopValue;
// double TotPrice;
String itemName = ItemAssistant.getItemName(itemID).toLowerCase();
int TotPrice2 = 0;
if (player.myShopId == 138 || player.myShopId == 58 || player.myShopId == 139) {
@@ -381,9 +378,13 @@ public class ShopAssistant {
}
if (player.getItemAssistant().freeSlots() > 0 || player.getItemAssistant().playerHasItem(995) || player.getItemAssistant().playerHasItem(6529)) { //Checks to see if player has room for coins.
if (!ItemDefinitions.getDef()[itemID].isNoteable) { //Check to see if its notable.
player.getItemAssistant().deleteItem(itemID, player.getItemAssistant().getItemSlot(itemID), amount); //don't really understand if the item isn't notable why it still needs to find the slot.
player.getItemAssistant().deleteItem2(itemID, amount);
} else {
player.getItemAssistant().deleteItem(itemID, fromSlot, amount);
player.getItemAssistant().deleteItem2(itemID, amount);
String ItemNameUnNotedItem = ItemAssistant.getItemName(itemID - 1).toLowerCase();
if (itemName.contains(ItemNameUnNotedItem)) {
itemID = itemID - 1; //Replace the noted item by it's un-noted version.
}
}
if (player.myShopId == 138 || player.myShopId == 139 || player.myShopId == 58) {
player.getItemAssistant().addItem(6529, TotPrice2); //Add the tokkul to your inventory.
@@ -401,7 +402,7 @@ public class ShopAssistant {
player.getItemAssistant().resetItems(3823);
resetShop(player.myShopId);
updatePlayerShop();
player.getActionSender().sendMessage("You sold " + amount + " " +itemName + " for " + TotPrice2 + " gp." );
player.getActionSender().sendMessage("You sold " + amount + " " +itemName + " for " + TotPrice2 + " coins." );
return true;
}
return true;
@@ -437,10 +438,50 @@ public class ShopAssistant {
private static final int FISHING_ITEMS[] = {383, 371, 377, 359, 321, 341, 353, 345, 327, 317};
public boolean buyItem(int itemID, int fromSlot, int amount) {
int iValue = 0;
int boughtQty = 0;
boolean boughtItem = false;
if (amount > 0) {
if (amount > ShopHandler.ShopItemsN[player.myShopId][fromSlot]) {
//S4
if (ShopHandler.ShopItemsN[player.myShopId][fromSlot] == 0) {
player.getActionSender().sendMessage("You can't buy that right now!");
return false;
}
if (amount > ShopHandler.ShopItemsN[player.myShopId][fromSlot] && ShopHandler.ShopItemsN[player.myShopId][fromSlot] > 0) {
amount = ShopHandler.ShopItemsN[player.myShopId][fromSlot];
}
if (amount % 23 == 0) {
amount = amount / 23;
iValue = 23; }
else if (amount % 19 == 0) {
amount = amount / 19;
iValue = 19;
} else if (amount % 17 == 0) {
amount = amount / 17;
iValue = 17;
} else if (amount % 13 == 0) {
amount = amount / 13;
iValue = 13;
} else if (amount % 11 == 0) {
amount = amount / 11;
iValue = 11;
} else if (amount % 7 == 0) {
amount = amount / 7;
iValue = 7;
} else if (amount % 5 == 0) {
amount = amount / 5;
iValue = 5;
}
else if (amount % 3 == 0) {
amount = amount / 3;
iValue = 3;
} else if (amount % 2 == 0) {
amount = amount / 2;
iValue = 2;
} else{
iValue = 1;
}
if(!player.isShopping) {
return false;
}
@@ -456,15 +497,13 @@ public class ShopAssistant {
if (!shopSellsItem(itemID)) {
return false;
}
// double ShopValue;
// double TotPrice;
int TotPrice2 = 0;
// int Overstock;
int Slot = 0;
int tokkulSlot = 0;// Tokkul
int TotPrice2 = 0; //ShopPrice
int RemainingToBuy; //Remaining of item to buy to fill the order. It's the remaining that can't fit in the loop. It has to be processed by itself after the loop.
int Slot = 0; //gp (995)
int tokkulSlot = 0;
int rangeSlot = 0;
int castleSlot = 0;
for (int i = amount; i > 0; i--) {
for (int i = amount; iValue > 0; iValue--) {
if (player.myShopId != 138 && player.myShopId != 58 && player.myShopId != 139 && player.myShopId != RANGE_SHOP && player.myShopId != PEST_SHOP && player.myShopId != CASTLE_SHOP) {
TotPrice2 = (int) Math.floor(getItemShopValue(itemID, 0, false));
} else if (player.myShopId == 138 || player.myShopId == 58 || player.myShopId == 139) {
@@ -577,34 +616,93 @@ public class ShopAssistant {
}
}
} else {
if (player.playerItemsN[Slot] >= TotPrice2) {
if (player.getItemAssistant().freeSlots() > 0 || (player.getItemAssistant().playerHasItem(itemID) && ItemDefinitions.getDef()[itemID].isStackable)) {
if (player.playerItemsN[Slot] >= TotPrice2 * amount) {
if (player.getItemAssistant().freeSlots() >= amount || (player.getItemAssistant().playerHasItem(itemID) && ItemDefinitions.getDef()[itemID].isStackable) || player.getItemAssistant().freeSlots() >= 1 && ItemDefinitions.getDef()[itemID].isStackable) {
player.getItemAssistant().deleteItem(995,
player.getItemAssistant().getItemSlot(995),
TotPrice2);
player.getItemAssistant().addItem(itemID, 1);
ShopHandler.ShopItemsN[player.myShopId][fromSlot] -= 1;
ShopHandler.ShopItemsDelay[player.myShopId][fromSlot] = 0;
TotPrice2 * amount);
player.getItemAssistant().addItem(itemID, amount); //All of these actions are performed in a loop. We are in the loop right now.
boughtQty+=amount;
ShopHandler.ShopItemsN[player.myShopId][fromSlot] -= amount; //Delete X item from shop at the slot the item is.
ShopHandler.ShopItemsDelay[player.myShopId][fromSlot] = 0; //Shit ass delay
if (fromSlot + 1 > ShopHandler.ShopItemsStandard[player.myShopId]) {
ShopHandler.ShopItems[player.myShopId][fromSlot] = 0;
ShopHandler.ShopItems[player.myShopId][fromSlot] = itemID + 1;
}
} else {
player.getActionSender()
.sendMessage(
"You don't have enough space in your inventory.");
if (player.getItemAssistant().freeSlots() == 0) {
player.getActionSender().sendMessage(
"You don't have enough space in your inventory.");
} else {
//Buys the remaining item to fill the inventory slots.
RemainingToBuy = player.getItemAssistant().freeSlots();
amount = RemainingToBuy;
player.getItemAssistant().deleteItem(995,
player.getItemAssistant().getItemSlot(995),
TotPrice2 * amount);
player.getItemAssistant().addItem(itemID, amount);
boughtQty+=amount;
ShopHandler.ShopItemsN[player.myShopId][fromSlot] -= amount;
ShopHandler.ShopItemsDelay[player.myShopId][fromSlot] = 0;
if (fromSlot + 1 > ShopHandler.ShopItemsStandard[player.myShopId]) {
ShopHandler.ShopItems[player.myShopId][fromSlot] = itemID + 1;
}
}
break;
}
boughtItem = true;
} else {
player.getActionSender().sendMessage(
"You don't have enough coins.");
break;
if (player.playerItemsN[Slot] / TotPrice2 > 0) {
amount = (int)Math.floor(player.playerItemsN[Slot] / TotPrice2);
} else {
player.getActionSender().sendMessage("You don't have enough coins.");
player.getItemAssistant().resetItems(3823);
resetShop(player.myShopId);
updatePlayerShop();
return false;
}
if (player.getItemAssistant().freeSlots() >= amount || (player.getItemAssistant().playerHasItem(itemID) && ItemDefinitions.getDef()[itemID].isStackable) || player.getItemAssistant().freeSlots() >= 1 && ItemDefinitions.getDef()[itemID].isStackable) {
player.getItemAssistant().deleteItem(995,
player.getItemAssistant().getItemSlot(995),
TotPrice2 * amount);
player.getItemAssistant().addItem(itemID, amount); //All of these actions are performed in a loop. We are in the loop right now.
boughtQty+=amount;
ShopHandler.ShopItemsN[player.myShopId][fromSlot] -= amount; //Delete X item from shop at the slot the item is.
ShopHandler.ShopItemsDelay[player.myShopId][fromSlot] = 0; //Shit ass delay
if (fromSlot + 1 > ShopHandler.ShopItemsStandard[player.myShopId]) {
ShopHandler.ShopItems[player.myShopId][fromSlot] = itemID + 1;
}
} else {
if (player.getItemAssistant().freeSlots() == 0) {
player.getActionSender().sendMessage(
"You don't have enough space in your inventory.");
} else {
//Buys the remaining item to fill the inventory slots.
RemainingToBuy = player.getItemAssistant().freeSlots();
amount = RemainingToBuy;
player.getItemAssistant().deleteItem(995,
player.getItemAssistant().getItemSlot(995),
TotPrice2 * amount);
player.getItemAssistant().addItem(itemID, amount);
boughtQty+=amount;
ShopHandler.ShopItemsN[player.myShopId][fromSlot] -= amount;
ShopHandler.ShopItemsDelay[player.myShopId][fromSlot] = 0;
if (fromSlot + 1 > ShopHandler.ShopItemsStandard[player.myShopId]) {
ShopHandler.ShopItems[player.myShopId][fromSlot] = itemID + 1;
}
}
break;
}
boughtItem = true;
}
}
}
if (boughtItem) {
player.getActionSender().sendMessage("You bought " + boughtQty + " " + ItemAssistant.getItemName(itemID).toLowerCase() + " for " + TotPrice2 * boughtQty + " coins." );
}
player.getItemAssistant().resetItems(3823);
resetShop(player.myShopId);
updatePlayerShop();
return true;
return true; //return TRUE / FALSE Update = shop&Inventory / Doesnt Update
}
return false;
}
@@ -7,7 +7,7 @@ public class DiscordActivity {
private static int count = 50;
public static void updateActivity() {
if (!JavaCord.token.equals("")) {
if (JavaCord.token != null && !JavaCord.token.equals("")) {
if (count == 0) {
if (PlayerHandler.getPlayerCount() != 1) {
JavaCord.api.updateActivity(PlayerHandler.getPlayerCount() + " Players Online");
@@ -24,7 +24,7 @@ public class Bank5 implements PacketType {
JewelryMaking.mouldItem(player, removeId, 5);
break;
case 3900:
player.getShopAssistant().buyItem(removeId, removeSlot, 1);
player.getShopAssistant().buyItem(removeId, removeSlot, 1); //this says 1 in BANKx5 but it's banking 5 for real... strange shit.
break;
case 3823:
@@ -20,15 +20,21 @@ public class BankAll implements PacketType {
player.endCurrentTask();
switch (interfaceId) {
case 3900:
player.getShopAssistant().buyItem(removeId, removeSlot, 10);
player.outStream.createFrame(27);
player.xRemoveSlot = removeSlot;
player.xRemoveId = removeId;
player.xInterfaceId = interfaceId;
break;
case 3823:
if(!player.getItemAssistant().playerHasItem(removeId)) {
return;
}
player.getShopAssistant().sellItem(removeId,
removeSlot, player.playerItemsN[removeSlot] );
player.outStream.createFrame(27);
player.xRemoveSlot = removeSlot;
player.xRemoveId = removeId;
player.xInterfaceId = interfaceId;
break;
case 7423:
@@ -20,14 +20,7 @@ public class BankX1 implements PacketType {
c.xInterfaceId = c.getInStream().readUnsignedWordA();
c.xRemoveId = c.getInStream().readSignedWordBigEndian();
}
if (c.xInterfaceId == 3900) {
c.getShopAssistant().buyItem(c.xRemoveId, c.xRemoveSlot, 20);// buy
// 20
c.xRemoveSlot = 0;
c.xInterfaceId = 0;
c.xRemoveId = 0;
return;
} else {
else {
if (c.xInterfaceId == 7423) {
c.getItemAssistant().bankItem(c.xRemoveId, c.xRemoveSlot,
Xamount);// Depo
@@ -35,7 +28,6 @@ public class BankX1 implements PacketType {
c.getItemAssistant().resetItems(7423);
}
}
if (packetType == PART1) {
synchronized (c) {
c.getOutStream().createFrame(27);
@@ -20,52 +20,56 @@ public class BankX2 implements PacketType {
Xamount = 1;
}
switch (player.xInterfaceId) {
case 5064:
/*if(!player.getItemAssistant().playerHasItem(player.playerItems[player.xRemoveSlot], Xamount))
return;*/
if (player.inPartyRoom) {
PartyRoom.depositItem(player, player.xRemoveId, player.getItemAssistant().itemAmount(player.playerItems[player.xRemoveSlot]));
case 5064:
if (player.inPartyRoom) {
PartyRoom.depositItem(player, player.xRemoveId, player.getItemAssistant().itemAmount(player.playerItems[player.xRemoveSlot]));
break;
}
if (player.inTrade) {
player.getActionSender().sendMessage("You can't store items while trading!");
return;
}
player.getItemAssistant().bankItem(player.playerItems[player.xRemoveSlot], player.xRemoveSlot, Xamount);
break;
}
if (player.inTrade) {
player.getActionSender().sendMessage("You can't store items while trading!");
return;
}
player.getItemAssistant().bankItem(player.playerItems[player.xRemoveSlot], player.xRemoveSlot, Xamount);
break;
case 5382:
/*if(!player.getItemAssistant().playerHasItem(player.playerItems[player.xRemoveSlot], Xamount))
return;*/
player.getItemAssistant().fromBank(player.bankItems[player.xRemoveSlot], player.xRemoveSlot, Xamount);
break;
case 5382:
player.getItemAssistant().fromBank(player.bankItems[player.xRemoveSlot], player.xRemoveSlot, Xamount);
break;
case 7423:
if (player.storing) {
return;
}
player.getItemAssistant().bankItem(player.playerItems[player.xRemoveSlot],
player.xRemoveSlot, Xamount);
player.getItemAssistant().resetItems(7423);
break;
case 7423:
if (player.storing) {
return;
}
player.getItemAssistant().bankItem(player.playerItems[player.xRemoveSlot],
player.xRemoveSlot, Xamount);
player.getItemAssistant().resetItems(7423);
break;
case 3322:
if (player.duelStatus <= 0) {
player.getTrading().tradeItem(player.xRemoveId, player.xRemoveSlot, Xamount);
} else {
player.getDueling().stakeItem(player.xRemoveId, player.xRemoveSlot, Xamount);
}
break;
case 3322:
if (player.duelStatus <= 0) {
player.getTrading().tradeItem(player.xRemoveId, player.xRemoveSlot, Xamount);
} else {
player.getDueling().stakeItem(player.xRemoveId, player.xRemoveSlot, Xamount);
}
break;
case 3415:
if (player.duelStatus <= 0) {
player.getTrading().fromTrade(player.xRemoveId, player.xRemoveSlot, Xamount);
}
break;
case 3415:
if (player.duelStatus <= 0) {
player.getTrading().fromTrade(player.xRemoveId, player.xRemoveSlot, Xamount);
}
break;
case 6669:
player.getDueling().fromDuel(player.xRemoveId, player.xRemoveSlot, Xamount);
break;
case 6669:
player.getDueling().fromDuel(player.xRemoveId, player.xRemoveSlot, Xamount);
break;
case 3900:
player.getShopAssistant().buyItem(player.xRemoveId, player.xRemoveSlot, Xamount);
break;
case 3823:
player.getShopAssistant().sellItem(player.xRemoveId, player.xRemoveSlot, Xamount);
break;
}
}
}
@@ -522,6 +522,7 @@ public class Commands implements PacketType {
public static void developerCommands(Client player, String playerCommand, String[] arguments) {
switch (playerCommand.toLowerCase()) {
case "clicktotele":
case "ctt": // alias
player.clickToTele = !player.clickToTele;
player.getActionSender().sendMessage("Click to teleport: " + (player.clickToTele ? "Enabled" : "Disabled"));
break;
@@ -627,7 +628,7 @@ public class Commands implements PacketType {
}
} catch (Exception ಠ_ಠ) {}
break;
case "cantAttack":
case "cantattack":
player.npcCanAttack = !player.npcCanAttack;
player.getActionSender().sendMessage("Npcs " + (player.npcCanAttack ? "can" : "can no longer") + " attack you.");
break;
@@ -305,9 +305,7 @@ public int itemAmount(String name, int itemId, int itemX, int itemY) {
public ItemList ItemList[] = new ItemList[Constants.ITEM_LIMIT];
public void newItemList(int ItemId, String ItemName,
String ItemDescription, double ShopValue, double LowAlch,
double HighAlch, int Bonuses[]) {
public void newItemList(int ItemId, String ItemName, String ItemDescription, double ShopValue, double LowAlch, double HighAlch, int Bonuses[]) {
// first, search for a free slot
int slot = -1;
for (int i = 0; i < 11740; i++) {
@@ -386,11 +384,7 @@ public int itemAmount(String name, int itemId, int itemX, int itemY) {
token = token.trim();
token2 = line.substring(spot + 1);
token2 = token2.trim();
token2_2 = token2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2.replaceAll("\t+", "\t");
token3 = token2_2.split("\t");
if (token.equals("item")) {
int[] Bonuses = new int[12];
@@ -412,8 +406,7 @@ public int itemAmount(String name, int itemId, int itemX, int itemY) {
if (line.equals("[ENDOFITEMLIST]")) {
try {
characterfile.close();
} catch (IOException ioexception) {
}
} catch (IOException ಠ_ಠ) {}
//return true;
}
}
+4 -18
View File
@@ -38,27 +38,13 @@ Step 12: Click File -> Project Structure
Step 13: Set Project SDK to 1.8, Project Language Level to 8, & Project Compiler Output to any valid folder [Image](https://i.imgur.com/9PJDk0Q.png)
Step 14: Click "Modules" and make sure it looks like what I have highlighted. If it doesn't, join the Discord and I'll help you create one. ([Image](https://i.imgur.com/NBAnk0A.png))
Step 14: Hit OK in the project structure screen
Step 15: Click "Dependencies", then click the "Add" arrow and select "JARs or directories"([Image](https://i.imgur.com/tGI9QNI.png))
Step 15: Start the FileServer [Image](https://i.imgur.com/moNKg9u.png)
Step 16: Navigate to your 2006rebotted folder, open `2006Redone file_server` > `libs`. Holding "Shift" on your keyboard, select all the .jar files in the `libs` folder there, and hit OK. ([Image](https://i.imgur.com/Yv3SX1q.png))
Step 16: Start the Server [Image](https://i.imgur.com/uUw522i.png)
Step 17: Hit OK in the project structure screen after all your JARs are imported: ([Image](https://i.imgur.com/Yv3SX1q.png))
Step 18: Navigate to the FileServer class (`2006Redone file_server/src/org/apollo/jagcached/FileServer.java`), Right Click -> Run. It will fail since we need to start it in the right directory: [Image](https://i.imgur.com/LFkr39U.png)
Step 19: To fix the directory issue, click FileServer and hit Edit Configurations at the top: [Image](https://i.imgur.com/lJdBPCs.png)
Step 20: Under Working Directory, add `2006Redone file_server` to the path (on Windows, you may need a \\ for paths instead of a /. Not sure): [Image](https://i.imgur.com/ANkbgBl.png)
Step 21: Navigate to the Server class (`2006Redone Server/src/redone/Server.java`), Right Click -> Run. It will fail since we need to start it in the right directory
Step 22: To fix the directory issue, click Server and hit Edit Configurations at the top
Step 23: Under Working Directory, add `2006Redone Server` to the path ([Image]("/home/dr_cookie/Projects/2006rebotted/2006Redone Client/src/Client.java"))
Step 24: Navigate to the Client class (`2006Redone Client/src/Client.java`), Right Click -> Run.
Step 17: Start the Client [Image](https://i.imgur.com/dHTiU0I.png)
# Using Parabot with your local server: