package com.rs.game.player.content;
import java.util.Random;
import com.rs.game.Animation;
import com.rs.game.Graphics;
import com.rs.game.player.Player;
import com.rs.game.tasks.WorldTask;
import com.rs.game.tasks.WorldTasksManager;
import com.rs.game.World;
import com.rs.game.WorldTile;
import com.rs.utils.WriteFile;
import com.rs.utils.Misc;
import com.rs.cache.loaders.ItemDefinitions;
import com.rs.game.item.Item;
import com.rs.utils.Utils;
import com.rs.Settings;
import com.rs.game.WorldObject;
import com.rs.game.player.actions.Woodcutting;
import com.rs.game.player.actions.Woodcutting.TreeDefinit ions;
import com.rs.game.player.Skills;
public class EvilTree {
public static WorldObject EVIL_TREE;
public static WorldObject[] ROOTS = new WorldObject[5];
public static final int TREE_X = 2606;
public static final int TREE_Y = 4770;
public static final int ROOT_ID = 11426;
public static final int[][] ROOT_SPAWNS = {{2605, 4772}, {2606, 4769}, {2605, 4771}, {2609, 4771}, {2608, 4773}};
public static boolean STAGE2 = false;
public static boolean STAGE3 = false;
public static boolean STAGEDEAD = false;
public static int KEY;
public static int[][] REWARDS = {{10933, 1}, {10939, 1}, {10940, 1}, {10941, 1}, {21416, 1}, {19879, 1}};
public enum STAGES {
STAGE_ONE(11436, 1000),
STAGE_TWO(11435, 500),
STAGE_THREE(11434, 250),
DEAD(15488, 0);
public int objectId, life;
private STAGES(int objectId, int life) {
this.objectId = objectId;
this.life = life;
}
public int getId() {
return objectId;
}
public int getLife() {
return life;
}
}
public static void startChop(Player player, WorldObject object) {
if(!player.isEvilTree()) {
return;
}
player.getActionManager().setSkill(new Woodcutting(object, TreeDefinitions.NORMAL));
}
public static void addChop(WorldObject object, Player player) {
if(!object.getDefinitions().getName().toLowerCase( ).contains("evil")) {
return;
}
if(object.getDefinitions().getName().toLowerCase() .contains("tree")) {
if(!canChopTree(object, player)) {
message(player, "The Evil Tree is immune to your axe whilst it's roots are alive!");
return;
}
player.getSkills().addXp(Skills.WOODCUTTING, 15, true);
checkTree(player);
message(player, "You hack away some of the Evil Tree");
} else {
player.getSkills().addXp(Skills.WOODCUTTING, 10, true);
object.takeLife(1);
checkRoot(player, object);
message(player, "You hack away some of the Evil Root");
System.out.println("Root life: "+object.getLife());
}
if(player.evilTreeKey != KEY) {
player.evilTreeKey = KEY;
player.evilTreeContribution = 0;
player.evilTreeContribution++;
}
player.evilTreeContribution++;
}
public static boolean canChopTree(WorldObject object, Player player) {
boolean canChop = true;
for(int i=0;i<5;i++) {
if(ROOTS[i] == null)
continue;
if(ROOTS[i].getLife() > 0) {
canChop = false;
}
}
return canChop;
}
public EvilTree() {
EVIL_TREE = null;
STAGE2 = false;
STAGE3 = false;
STAGEDEAD = false;
if(EVIL_TREE == null)
EVIL_TREE = new WorldObject(STAGES.STAGE_ONE.getId(), 10, 1, TREE_X, TREE_Y, 0, STAGES.STAGE_ONE.getLife());
EVIL_TREE.setLife(STAGES.STAGE_ONE.getLife());
World.spawnObject(EVIL_TREE, false);
for(int i=0;i<5;i++) {
if(ROOTS[i] == null) {
ROOTS[i] = new WorldObject(ROOT_ID, 10, 1, ROOT_SPAWNS[i][0], ROOT_SPAWNS[i][1], 0, 100);
}
ROOTS[i].setLife(100);
World.spawnObject(ROOTS[i], false);
}
KEY = Misc.random(10000000);
globalMessage("The Evil Tree has grown back! Get down there and kill it! [::eviltree]");
for(Player players : World.getPlayers()) {
if(players.isEvilTree()) {
players.getActionManager().forceStop();
}
}
}
public static void sendRewards() {
for(Player players : World.getPlayers()) {
if(players.isEvilTree()) {
players.succeedMessage("Well done! You have hacked away the Evil Tree! He will grow back soon so be aware!");
sendRewards(players);
}
}
}
public static void message(Player player, String message) {
player.getPackets().sendGameMessage("<col=ffd700>< shad=03b9ff>"+message);
}
public static void globalMessage(String message) {
for(Player player : World.getPlayers()) {
player.getPackets().sendGameMessage("<col=ffd700>< shad=03b9ff>"+message);
}
}
public static void sendRewards(Player player) {
if(player.evilTreeKey != KEY) {
return;
}
int coins = player.evilTreeContribution * 400000;
player.getInventory().addItem(995, coins);
message(player, "You've received: Coins x"+coins+" as a reward!");
int amount = player.evilTreeContribution / 40;
if(amount == 0) {
player.errorMessage("You didn't contribute enough to earn any extra rewards!");
}
if(amount >= 8)
amount = 8;
for(int i=0;i<amount;i++) {
int index = Misc.random(REWARDS.length);
Item item = new Item(REWARDS[index][0], REWARDS[index][1]);
player.getInventory().addItem(item.getId(), item.getAmount());
message(player, "You've received: "+item.getDefinitions().getName()+" x"+item.getAmount()+" as a reward!");
int ring = Misc.random(3000);
if(ring == 232 || ring == 233) {
globalMessage(player.getDisplayName()+" has received an Enchanted Ring from the Evil Tree!");
player.getInventory().addItem(19879, 1);
}
if(ring == 480 || ring == 500 || ring == 520) {
globalMessage(player.getDisplayName()+" has received a Dragon Axe from the Evil Tree!");
player.getInventory().addItem(6739, 1);
}
if(ring == 645) {
globalMessage(player.getDisplayName()+" has received an Inferno Adze from the Evil Tree!");
player.getInventory().addItem(13661, 1);
}
}
for(int i=0;i<player.evilTreeContribution;i++) {
//player.getFamiliar().whiteFamiliarReward();
}
player.evilTreeContribution = 0;
player.evilTrees++;
}
public static void checkTree(Player player) {
if(EVIL_TREE.getLife() == STAGES.STAGE_TWO.getLife() && !STAGE2) {
EVIL_TREE = new WorldObject(STAGES.STAGE_TWO.getId(), 10, 1, TREE_X, TREE_Y, 0, STAGES.STAGE_TWO.getLife());
globalMessage("The evil tree currently has "+EVIL_TREE.getLife()+" health! [::eviltree]");
STAGE2 = true;
}
if(EVIL_TREE.getLife() == STAGES.STAGE_THREE.getLife() && !STAGE3) {
EVIL_TREE = new WorldObject(STAGES.STAGE_THREE.getId(), 10, 1, TREE_X, TREE_Y, 0, STAGES.STAGE_THREE.getLife());
globalMessage("The evil tree currently has "+EVIL_TREE.getLife()+" health! [::eviltree]");
STAGE3 = true;
}
if(EVIL_TREE.getLife() == 0 && !STAGEDEAD) {
STAGEDEAD = true;
EVIL_TREE = new WorldObject(STAGES.DEAD.getId(), 10, 1, TREE_X, TREE_Y, 0, STAGES.DEAD.getLife());
globalMessage(player.getDisplayName()+" had the last hack and killed the Evil Tree!");
player.evilTreeLatHack++;
sendRewards();
World.removeObject(EVIL_TREE, false);
for(Player players : World.getPlayers()) {
if(players.isEvilTree()) {
players.getActionManager().forceStop();
}
}
}
if(EVIL_TREE != null)
EVIL_TREE.setLife(1);
}
public static void checkRoot(Player player, WorldObject object) {
if(object.getLife() <= 0) {
World.removeObject(object, false);
player.getActionManager().forceStop();
}
}
}