/*
Copyright 2012 Jan Ove Saltvedt
This file is part of KBot.
KBot is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
KBot is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with KBot. If not, see <http://www.gnu.org/licenses/>.
*/
package com.kbotpro.randoms;
import com.kbotpro.scriptsystem.fetch.Game;
import com.kbotpro.scriptsystem.runnable.Random;
import com.kbotpro.scriptsystem.various.KTimer;
import com.kbotpro.scriptsystem.wrappers.IComponent;
import com.kbotpro.scriptsystem.wrappers.Interface;
import com.kbotpro.scriptsystem.wrappers.Item;
import java.awt.*;
import java.util.ArrayList;
/**
* Created by endoskeleton.
*/
public class RewardBox extends Random {
public final static int REWARD_BOX_ID = 14664;
public final static int REWARD_BOX_INTERFACE = 202;
public final static int[] LAMP_ID = { 2528, 11640 };
public final static int LAMP_INTERFACE_ID = 134;
private boolean pickLamp;
public String getName() {
return "Reward Box";
}
public boolean activate() {
return isLoggedIn() && inventory.contains(REWARD_BOX_ID) ||
isLoggedIn() && inventory.contains(LAMP_ID);
}
public synchronized void onStart() {
KTimer timeout = new KTimer(300000);
do {
int i = loop();
if (i <= 0) {
break;
}
sleep(i);
} while (!botEnv.randomManager.scriptStopped && activate() && !timeout.isDone());
if (interfaces.canContinue()) {
interfaces.clickContinue();
}
if (timeout.isDone()) {
botEnv.scriptManager.stopAllScripts();
}
}
private synchronized int loop() {
if (bank.isOpen()) {
bank.close();
sleep(1000, 1500);
}
if (interfaces.canContinue()) {
interfaces.clickContinue();
sleep(1000,1500);
}
if (!inventory.isOpen()) {
game.openTab(Game.TAB_INVENTORY);
}
if (game.hasSelectedItem()) {
menu.atMenu("Cancel");
}
if (!activate()) {
return -1;
}
if (inventory.contains(REWARD_BOX_ID)) {
Interface rewardInterface = interfaces.getInterface(REWARD_BOX_INTERFACE);
IComponent lampComponent = null;
IComponent coinsComponent = null;
IComponent costumeComponent = null;
IComponent emoteComponent = null;
ArrayList<IComponent> allChoices = new ArrayList<IComponent>();
if (rewardInterface != null && rewardInterface.isValid()) {
for (IComponent element : rewardInterface.getComponent(15).getChildren()) {
if (botEnv.botPanel.botName.useLamp && (element.getText().toLowerCase().contains("lamp") || element.getText().toLowerCase().contains("knowledge"))) {
lampComponent = element;
} else if (element.getText().toLowerCase().contains("costume")) {
costumeComponent = element;
} else if (element.getText().toLowerCase().contains("emote")) {
emoteComponent = element;
} else if (element.getText().contains("Coins")) {
coinsComponent = element;
}
String[] actions = element.getActions();
if (actions != null && actions.length > 0) {
allChoices.add(element);
}
}
if (lampComponent != null) {
chooseReward(lampComponent);
} else if (costumeComponent != null) {
chooseReward(costumeComponent);
} else if (emoteComponent != null) {
chooseReward(emoteComponent);
} else if (coinsComponent != null) {
chooseReward(coinsComponent);
} else {
inventory.drop(REWARD_BOX_ID);
sleep(random(1000,1500));
}
} else {
Item[] box = inventory.getItems(REWARD_BOX_ID);
if (box != null && box.length > 0) {
if (box[0].doAction("Open")) {
waitForInterface(true, REWARD_BOX_INTERFACE);
}
}
}
} else if (inventory.contains(LAMP_ID)) {
Interface lampInterface = interfaces.getInterface(LAMP_INTERFACE_ID);
if (lampInterface != null && lampInterface.getComponent(0).isVisible()) {
for (IComponent i : lampInterface.getComponents()) {
if (i.getElementName().contains(botEnv.botPanel.botName.lampIndex)) {
i.doClick();
lampInterface.getComponent(2).doClick();
waitForInterface(false, LAMP_INTERFACE_ID);
sleep(random(1200, 2500));
break;
}
}
} else {
Item[] lamp = inventory.getItems(LAMP_ID);
if (lamp != null && lamp.length > 0) {
if (lamp[0].doClick()) {
waitForInterface(true, LAMP_INTERFACE_ID);
}
}
}
}
return random(500, 600);
}
private void chooseReward(IComponent iComponent) {
Interface rewardBox = interfaces.getInterface(REWARD_BOX_INTERFACE);
if (rewardBox != null) {
IComponent internalRewardBox = rewardBox.getComponent(15);
Point center = iComponent.getCenter();
if (!internalRewardBox.getBounds().contains(center)) {
Rectangle r = rewardBox.getComponent(24).getChildren()[0].getBounds();
if (center.y < internalRewardBox.getAbsoluteY()) {
mouse.moveMouse(new Point(r.x + random(0, r.width), r.y+random(0,10)), true);
}
if (center.y > (internalRewardBox.getAbsoluteY() + internalRewardBox.getHeight())) {
mouse.moveMouse(new Point(r.x + random(0, r.width), r.y + r.height - random(0,10)), true);
}
}
iComponent.doClick();
if (rewardBox.getComponent(28).getText().contains("Confirm")) {
rewardBox.getComponent(28).doClick();
sleep(random(3000, 3500));
}
}
}
private void waitForInterface(boolean open, int interfaceID) {
for (int i = 0; i < 2000; i += 20) {
if (open && interfaces.interfaceExists(interfaceID)
|| !open && !interfaces.interfaceExists(interfaceID)) {
break;
}
sleep(20);
}
}
}