Code:
package com.iwinscape.player.skill;
import com.iwinscape.global.Server;
import com.iwinscape.global.thread.PlayerHandler;
import com.iwinscape.object.Stumps;
import com.iwinscape.object.Trees;
import com.iwinscape.player.Client;
import com.iwinscape.player.Misc;
public class Woodcutting {
public static int[][] axes = {
/* ID, animi,str,lvlreq */
{ 1351, 879, 1, 1 },// Bronze
{ 1349, 877, 2, 1 },// Iron
{ 1353, 875, 3, 6 },// Steel
{ 1361, 873, 3, 6 },// Black
{ 1355, 871, 4, 21 },// Mithril
{ 1357, 869, 5, 31 },// Adamant
{ 1359, 867, 8, 41 },// Rune
{ 6739, 2846, 10, 61 },// Dragon
{ 12652, 2846, 10, 61 },// Inferno adze
};
public static double[][] trees = {
/* level req, exp, logID, respawn, hits before log, logs, stumpID */
{ 1, 25, 1511, 60, 20, 1, 1344 }, // normal
{ 1, 25, 1511, 60, 20, 1, 1347 }, // dead
{ 1, 25, 1511, 60, 20, 1, 4821 }, // jungle
{ 1, 25, 2862, 60, 20, 1, 3371 }, // achey
{ 15, 37.5, 1521, 100, 30, 25, 1356 }, // oak
{ 30, 67.5, 1519, 120, 40, 30, 7399 }, // willow
{ 35, 85, 6333, 60, 50, 30, 9037 }, // teak
{ 36, 0, 771, 10, 20, 1, 771 }, // dramen tree
{ 45, 100, 1517, 120, 80, 55, 7400 }, // maple
{ 45, 82, 1511, 120, 80, 10, 4061 }, // hollow
{ 50, 125, 6332, 180, 100, 25, 9035 }, // mahogany
{ 60, 175, 1515, 180, 150, 75, 7402 }, // yew
{ 75, 250, 1513, 380, 300, 80, 7401 }, // magic
};
private static int arrayAxeID(Client c, int data) {
return axes[data][0];
}
private static int arrayAxeAnimi(Client c, int data) {
return axes[data][1];
}
private static int arrayAxeStr(Client c, int data) {
return axes[data][2];
}
private static int arrayAxeReq(Client c, int data) {
return axes[data][3];
}
private static int currentAxeStr(Client c) {
return c.AxeHits;
}
private static int currentAxeID(Client c) {
return c.axeID;
}
private static int currentAxeAnimi(Client c) {
return c.AxeAnimi;
}
private static void setAxeID(Client c, int id) {
c.axeID = id;
}
private static void setAxeAnimi(Client c, int id) {
c.AxeAnimi = id;
}
private static void setAxeStr(Client c, int id) {
c.AxeHits = id;
}
private static void setAxeData(Client c, int data) {
setAxeID(c, arrayAxeID(c, data));
setAxeAnimi(c, arrayAxeAnimi(c, data));
setAxeStr(c, arrayAxeStr(c, data));
}
private static int getWeapon(Client c) {
return c.playerEquipment[c.playerWeapon];
}
private static int getWoodcuttingLevel(Client c) {
return c.playerLevel[c.playerWoodcutting];
}
private static boolean axeEquipped(Client c) {
if (getWeapon(c) < 1) {
return false;
}
for (int i = 0; i < axes.length; i++) {
if (getWeapon(c) == arrayAxeID(c, i)
&& getWoodcuttingLevel(c) >= arrayAxeReq(c, i)) {
setAxeData(c, i);
return true;
}
}
return false;
}
private static boolean axeInInventory(Client c) {
/* if usable axe in inventory */
for (int i = 0; i < axes.length; i++) {
if (c.playerHasItem(arrayAxeID(c, i))
&& getWoodcuttingLevel(c) >= arrayAxeReq(c, i)) {
return true;
}
}
return false;
}
private static void getAxeData(Client c) {
if (!axeEquipped(c)) {
if (axeInInventory(c)) {
for (int i = 0; i < axes.length; i++) {
if (c.playerHasItem(arrayAxeID(c, i))) {
if (getWoodcuttingLevel(c) >= arrayAxeReq(c, i)) {
if (arrayAxeStr(c, i) > currentAxeStr(c)) {
setAxeData(c, i);
}
}
}
}
}
}
}
private static double treeData(Client c, String type) {
switch (type) {
case "level":
return trees[c.TreeType][0];
case "exp":
return trees[c.TreeType][1];
case "log":
return trees[c.TreeType][2];
case "respawn":
return trees[c.TreeType][3];
case "hits":
return trees[c.TreeType][4];
case "logamt":
return trees[c.TreeType][5];
case "stump":
return trees[c.TreeType][6];
default:
return -1;
}
}
public static int treeType(Client c, int objectID) {
switch (objectID) {
case 1276:// Tree
case 1277:
case 1278:
case 1279:
case 1280:
case 1315:// Evergreen
case 1316:
case 1318:
case 1319:
case 1330:// Tree
case 1331:
case 1332:
case 2409:
case 3033:
case 3034:
case 3035:
case 3036:
case 3879:
case 3881:
case 3882:
case 3883:
case 10041:
case 14308:
case 14309:
return 0;// Normal
case 1282:
case 1283:
case 1284:
case 1285:
case 1286:
case 1289:
case 1290:
case 1291:
case 1365:
case 1383:
case 1384:
case 5902:
case 5903:
case 5904:
return 1;// Dead
// return 2;// Jungle
case 2023:
return 3;// Achey
case 1281:
case 3037:
case 8467:
return 4;// Oak
case 1308:
case 5551:
case 5552:
case 5553:
case 8488:
return 5;// willow
case 9036:
return 6;// teak
case 1292:
return 7;// Dramen
case 1307:
case 4674:
case 8444:
return 8;// maple
case 2289:
case 4060:
return 9;// hollow
case 9034:
return 10;// mahogany
case 1309:
case 8513:
return 11;// yew
case 1306:
case 8409:
return 12;// magic
default:
return -1;
}
}
public static void WC(Client c) {
getAxeData(c);
c.TreeType = treeType(c, c.TreeID);
if (treeType(c, c.TreeID) < 0) {
c.sM("Error with tree ID: " + c.TreeID);
c.resetSkills(0);
return;
}
if (currentAxeID(c) < 0 || currentAxeAnimi(c) < 0) {
c.sM("You need an axe to cut down trees!");
c.resetSkills(0);
return;
}
if (getWoodcuttingLevel(c) < treeData(c, "level")) {
c.sM("Your woodcutting level isn't high enough to chop these trees.");
c.resetSkills(0);
return;
}
if (Stumps.isStump(c.TreeX, c.TreeY)) {
c.resetSkills(0);
return;
}
SetTree(c);
}
private static boolean isTree(int X, int Y) {
for (Trees i : Server.trees) {
if (i.getTreeX(i) == X && i.getTreeY(i) == Y) {
i.setRemovalCounter(i, 480);
return true;
}
}
return false;
}
private static void SetTree(Client c) {
if (c.freeSlots() < 1) {
c.sM("Not enough space in your inventory.");
c.resetSkills(0);
return;
}
c.startAnimation(currentAxeAnimi(c));
if (!isTree(c.TreeX, c.TreeY)) {
Trees tree = new Trees(c.TreeID, c.TreeX, c.TreeY);
tree.setTreeHits(tree,
10 + Misc.random((int) (treeData(c, "hits") - 10)));
tree.setTreeLogs(tree, Misc.random2((int) treeData(c, "logamt")));
Server.trees.add(tree);
}
for (int i = 0; i < Server.trees.size(); i++) {
Trees tree = Server.trees.get(i);
if (tree.getTreeID(tree) == c.TreeID) {
if (tree.getTreeX(tree) == c.TreeX
&& tree.getTreeY(tree) == c.TreeY) {
tree.setTreeHits(
tree,
tree.getTreeHits(tree)
- Misc.random2(currentAxeStr(c)));
if (tree.getTreeHits(tree) < 1) {
tree.removeLog(tree);
getLogs(c);
if (tree.getTreeLogsLeft(tree) < 1) {
Server.stumps.add(new Stumps((int) treeData(c,
"stump"), tree.getTreeX(tree), tree
.getTreeY(tree), (int) treeData(c,
"respawn"), tree.getTreeID(tree)));
for (int i1 = 0; i1 < PlayerHandler.maxPlayers; i1++) {
if (PlayerHandler.players[i1] != null) {
Client p = (Client) PlayerHandler.players[i1];
if (p.playerName != null) {
if (c.TreeID == p.TreeID
&& c.TreeX == p.TreeX
&& c.TreeY == p.TreeY) {
p.sM("The tree has fallen.");
p.resetSkills(0);
}
}
}
}
}
tree.checkLogs(tree);
tree.setTreeHits(tree, 10 + Misc
.random((int) (treeData(c, "hits") - 10)));
return;
}
}
}
}
}
private static void getLogs(Client c) {
/* GUI */
c.addItem((int) treeData(c, "log"), 1);
if (!c.Woodcutting)
return;
c.addSkillXP(treeData(c, "exp"), c.playerWoodcutting);
c.sM("You get some logs.");
setAxeAnimi(c, -1);
setAxeID(c, -1);
setAxeStr(c, -1);
}
}