124eeab893
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
436 lines
13 KiB
Java
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));
|
|
}
|
|
}
|