Files
2009scape/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingNode.java
T
Ceikry 124eeab893 Implement Authentic Interaction Subsystem
Implemented authentic script/interaction queues
This does now mean we have a total of 3 interaction systems, but this additional system is necessary to fix certain categories of bug and implement some authentic features
Converted mining to new system
Converted fishing to new system
Converted woodcutting to new system
Provided an example of soft-queued scripts with GrandTreePodListener
Implemented tick-eating (it is now possible to eat a shark, drink a potion, and eat a karambwan all on the same tick)
Can now eat and drop items while stunned
2023-02-28 23:41:14 +00:00

436 lines
13 KiB
Java

package content.global.skill.gather.woodcutting;
import core.ServerConstants;
import core.game.world.repository.Repository;
import java.util.HashMap;
/**
* Woodcutting nodes
* @author ceik
*/
public enum WoodcuttingNode {
//standard trees
STANDARD_TREE_1( 1276, 1342, (byte) 1),
STANDARD_TREE_2( 1277, 1343, (byte) 1),
STANDARD_TREE_3( 1278, 1342, (byte) 1),
STANDARD_TREE_4( 1279, 1345, (byte) 1),
STANDARD_TREE_5( 1280, 1343, (byte) 1),
STANDARD_TREE_6( 1330, 1341, (byte) 1),
STANDARD_TREE_7( 1331, 1341, (byte) 1),
STANDARD_TREE_8( 1332, 1341, (byte) 1),
STANDARD_TREE_9( 2409, 1342, (byte) 1),
STANDARD_TREE_10(3033, 1345, (byte) 1),
STANDARD_TREE_11(3034, 1345, (byte) 1),
STANDARD_TREE_12(3035, 1347, (byte) 1),
STANDARD_TREE_13(3036, 1351, (byte) 1),
STANDARD_TREE_14(3879, 3880, (byte) 1),
STANDARD_TREE_15(3881, 3880, (byte) 1),
STANDARD_TREE_16(3882, 3880, (byte) 1),
STANDARD_TREE_17(3883, 3884, (byte) 1),
STANDARD_TREE_18(10041,1342, (byte) 1),
STANDARD_TREE_19(14308,1342, (byte) 1),
STANDARD_TREE_20(14309,1342, (byte) 1),
STANDARD_TREE_21(16264,1342, (byte) 1),
STANDARD_TREE_22(16265,1342, (byte) 1),
STANDARD_TREE_23(30132,1342, (byte) 1),
STANDARD_TREE_24(30133,1342, (byte) 1),
STANDARD_TREE_25(37477,1342, (byte) 1),
STANDARD_TREE_26(37478,37653, (byte) 1),
STANDARD_TREE_27(37652,37653, (byte) 1),
//Dead trees
DEAD_TREE_1( 1282, 1347, (byte) 2),
DEAD_TREE_2( 1283, 1347, (byte) 2),
DEAD_TREE_3( 1284, 1348, (byte) 2),
DEAD_TREE_4( 1285, 1349, (byte) 2),
DEAD_TREE_5( 1286, 1351, (byte) 2),
DEAD_TREE_6( 1289, 1353, (byte) 2),
DEAD_TREE_7( 1290, 1354, (byte) 2),
DEAD_TREE_8( 1291, 23054, (byte) 2),
DEAD_TREE_9( 1365, 1352, (byte) 2),
DEAD_TREE_10(1383, 1358, (byte) 2),
DEAD_TREE_11(1384, 1359, (byte) 2),
DEAD_TREE_12(5902, 1347, (byte) 2),
DEAD_TREE_13(5903, 1353, (byte) 2),
DEAD_TREE_14(5904, 1353, (byte) 2),
DEAD_TREE_15(32294,1353, (byte) 2),
DEAD_TREE_16(37481,1347, (byte) 2),
DEAD_TREE_17(37482,1351, (byte) 2),
DEAD_TREE_18(37483,1358, (byte) 2),
DEAD_TREE_19(24168,24169, (byte) 2),
//Evergreen
EVERGREEN_1(1315,1342,(byte) 3),
EVERGREEN_2(1316,1355,(byte) 3),
EVERGREEN_3(1318,1355,(byte) 3),
EVERGREEN_4(1319,1355,(byte) 3),
//Jungle stuff
JUNGLE_TREE_1(2887,0, (byte) 4),
JUNGLE_TREE_2(2889,0, (byte) 4),
JUNGLE_TREE_3(2890,0, (byte) 4),
JUNGLE_TREE_4(4818,0, (byte) 4),
JUNGLE_TREE_5(4820,0, (byte) 4),
JUNGLE_BUSH_1(2892,2894, (byte) 5),
JUNGLE_BUSH_2(2893,2895, (byte) 5),
//Achey
ACHEY_TREE(2023,3371, (byte) 6),
//Oak
OAK_TREE_1(1281, 1356, (byte) 7),
OAK_TREE_2(3037, 1357, (byte) 7),
OAK_TREE_3(37479,1356, (byte) 7),
OAK_TREE_4(8467, 1356, (byte) 19, true),
//Willow
WILLOW_TREE_1(1308, 7399, (byte) 8),
WILLOW_TREE_2(5551, 5554, (byte) 8),
WILLOW_TREE_3(5552, 5554, (byte) 8),
WILLOW_TREE_4(5553, 5554, (byte) 8),
WILLOW_TREE_5(37480,7399, (byte) 8),
WILLOW_TREE_6(8488,7399, (byte) 20, true),
//Teak
TEAK_1(9036, 9037, (byte) 9),
TEAK_2(15062,9037, (byte) 9),
//Maple
MAPLE_TREE_1(1307,7400, (byte) 10),
MAPLE_TREE_2(4674,7400, (byte) 10),
MAPLE_TREE_3(8444,7400, (byte) 21, true),
//Hollow
HOLLOW_TREE_1(2289,2310, (byte) 11),
HOLLOW_TREE_2(4060,4061, (byte) 11),
//Mahogany
MAHOGANY(9034,9035, (byte) 12),
//Swaying Tree
SWAYING_TREE(4142,-1, (byte) 30),
//Arctic pine
ARCTIC_PINE(21273,21274, (byte) 13),
//Eucalyptus
EUCALYPTUS_1(28951,28954, (byte) 14),
EUCALYPTUS_2(28952,28955, (byte) 14),
EUCALYPTUS_3(28953,28956, (byte) 14),
//Yew
YEW(1309,7402, (byte) 15),
YEW_1(8513,7402,(byte) 22, true),
//Magic
MAGIC_TREE_1(1306, 7401, (byte) 16),
MAGIC_TREE_2(37823,37824, (byte) 16),
MAGIC_TREE_3(8409, 37824, (byte) 23, true),
//Cursed Magic
CURSED_MAGIC_TREE(37821,37822, (byte) 17),
//Dramen
DRAMEN_TREE(1292, -1, (byte) 18);
int full,empty,reward,respawnRate,level, rewardAmount;
double experience,rate;
public byte identifier;
boolean farming;
public double baseLow = 64;
public double baseHigh = 200;
public double tierModLow = 32;
public double tierModHigh = 100;
WoodcuttingNode(int full, int empty,byte identifier){
this.full = full;
this.empty = empty;
this.identifier = identifier;
this.farming = false;
this.rewardAmount = 1;
switch(identifier & 0xFF){
case 1:
case 2:
case 3:
case 4:
reward = 1511;
respawnRate = 50 | 100 << 16;
rate = 0.05;
experience = 25.0;
level = 1;
break;
case 5:
reward = 1511;
respawnRate = 50 | 100 << 16;
rate = 0.15;
experience = 100;
level = 1;
this.rewardAmount = 2;
break;
case 6:
reward = 2862;
respawnRate = 50 | 100 << 16;
rate = 0.05;
experience = 25.0;
level = 1;
break;
case 7:
reward = 1521;
respawnRate = 14 | 22 << 16;
rate = 0.15;
experience = 37.5;
level = 15;
rewardAmount = 10;
baseLow = 32;
baseHigh = 100;
tierModLow = 16;
tierModHigh = 50;
break;
case 8:
reward = 1519;
respawnRate = 14 | 22 << 16;
rate = 0.3;
experience = 67.8;
level = 30;
rewardAmount = 20;
baseLow = 16;
baseHigh = 50;
tierModLow = 8;
tierModHigh = 25;
break;
case 9:
reward = 6333;
respawnRate = 35 | 60 << 16;
rate = 0.7;
experience = 85.0;
level = 35;
rewardAmount = 25;
baseLow = 15;
baseHigh = 46;
tierModLow = 8;
tierModHigh = 23.5;
break;
case 10:
reward = 1517;
respawnRate = 58 | 100 << 16;
rate = 0.65;
experience = 100.0;
level = 45;
rewardAmount = 30;
baseLow = 8;
baseHigh = 25;
tierModLow = 4;
tierModHigh = 12.5;
break;
case 11:
reward = 3239;
respawnRate = 58 | 100 << 16;
rate = 0.6;
experience = 82.5;
level = 45;
rewardAmount = 30;
baseLow = 18;
baseHigh = 26;
tierModLow = 10;
tierModHigh = 14;
break;
case 12:
reward = 6332;
respawnRate = 62 | 115 << 16;
rate = 0.7;
experience = 125.0;
level = 50;
rewardAmount = 35;
baseLow = 8;
baseHigh = 25;
tierModLow = 4;
tierModHigh = 12.5;
break;
case 13:
reward = 10810;
respawnRate = 75 | 130 << 16;
rate = 0.73;
experience = 140.2;
level = 54;
rewardAmount = 35;
baseLow = 6;
baseHigh = 30;
tierModLow = 3;
tierModHigh = 13.5;
break;
case 14:
reward = 12581;
respawnRate = 80 | 140 << 16;
rate = 0.77;
experience = 165.0;
level = 58;
rewardAmount = 35;
break;
case 15:
reward = 1515;
respawnRate = 100 | 162 << 16;
rate = 0.8;
experience = 175.0;
level = 60;
rewardAmount = 40;
baseLow = 4;
baseHigh = 12.5;
tierModLow = 2;
tierModHigh = 6.25;
break;
case 16:
reward = 1513;
respawnRate = 200 | 317 << 16;
rate = 0.9;
experience = 250.0;
level = 75;
rewardAmount = 50;
baseLow = 2;
baseHigh = 6;
tierModLow = 1;
tierModHigh = 3;
break;
case 17:
reward = 1513;
respawnRate = 200 | 317 << 16;
rate = 0.95;
experience = 275.0;
level = 82;
rewardAmount = 50;
break;
case 18:
reward = 771;
respawnRate = -1;
rate = 0.05;
experience = 25.0;
level = 36;
rewardAmount = Integer.MAX_VALUE;
break;
case 30:
reward = 3692;
respawnRate = -1;
rate = 0.05;
experience = 1;
level = 40;
rewardAmount = Integer.MAX_VALUE;
break;
}
}
WoodcuttingNode(int full, int empty, byte identifier, boolean farming){
this.full = full;
this.empty = empty;
this.identifier = identifier;
this.farming = farming;
switch(identifier & 0xFF){
case 19:
reward = 1521;
respawnRate = 14 | 22 << 16;
rate = 0.15;
experience = 37.5;
level = 15;
rewardAmount = 10;
break;
case 20:
reward = 1519;
respawnRate = 14 | 22 << 16;
rate = 0.3;
experience = 67.8;
level = 30;
rewardAmount = 20;
break;
case 21:
reward = 1517;
respawnRate = 58 | 100 << 16;
rate = 0.65;
experience = 100.0;
level = 45;
rewardAmount = 30;
break;
case 22:
reward = 1515;
respawnRate = 100 | 162 << 16;
rate = 0.8;
experience = 175.0;
level = 60;
rewardAmount = 40;
break;
case 23:
reward = 1513;
respawnRate = 200 | 317 << 16;
rate = 0.9;
experience = 250.0;
level = 75;
rewardAmount = 50;
break;
}
}
private static HashMap<Integer, WoodcuttingNode> NODE_MAP = new HashMap<>();
private static HashMap<Integer, Integer> EMPTY_MAP = new HashMap<>();
static{
for(WoodcuttingNode node : WoodcuttingNode.values()){
NODE_MAP.putIfAbsent(node.full,node);
EMPTY_MAP.putIfAbsent(node.empty,node.full);
}
}
public static WoodcuttingNode forId(int id){
return NODE_MAP.get(id);
}
public static boolean isEmpty(int id){
return EMPTY_MAP.get(id) != null;
}
public int getRewardAmount() {
return rewardAmount;
}
public int getEmptyId() {
return empty;
}
public int getReward() {
return reward;
}
public double getExperience() {
return experience;
}
public int getRespawnRate() {
return respawnRate;
}
public double getRate() {
return rate;
}
public int getLevel() {
return level;
}
public int getId() {
return full;
}
public int getMinimumRespawn() {
return respawnRate & 0xFFFF;
}
public int getMaximumRespawn() {
return (respawnRate >> 16) & 0xFFFF;
}
public boolean isFarming(){ return farming;}
public int getRespawnDuration() {
int minimum = respawnRate & 0xFFFF;
int maximum = (respawnRate >> 16) & 0xFFFF;
double playerRatio = (double) ServerConstants.MAX_PLAYERS / Repository.getPlayers().size();
return (int) (minimum + ((maximum - minimum) / playerRatio));
}
}