2017-03-09 16:08:47 +01:00
|
|
|
package mrbesen.cr.auto.clicker;
|
|
|
|
|
|
|
|
import java.awt.AWTException;
|
2017-03-11 16:41:11 +01:00
|
|
|
import java.awt.Color;
|
2017-03-09 16:08:47 +01:00
|
|
|
import java.awt.MouseInfo;
|
2017-03-11 16:41:11 +01:00
|
|
|
import java.awt.Rectangle;
|
2017-03-09 16:08:47 +01:00
|
|
|
import java.awt.Robot;
|
|
|
|
import java.awt.event.InputEvent;
|
2017-05-28 20:48:26 +02:00
|
|
|
import java.awt.event.KeyEvent;
|
2017-03-11 16:41:11 +01:00
|
|
|
import java.awt.image.BufferedImage;
|
2017-03-09 16:08:47 +01:00
|
|
|
|
|
|
|
public class Clicker implements Runnable{
|
|
|
|
|
|
|
|
private boolean running = false;
|
|
|
|
private boolean should_run = false;
|
|
|
|
private boolean inbattle = false;
|
|
|
|
private boolean skipbattle = false;
|
|
|
|
private Thread thread;
|
|
|
|
|
|
|
|
private Point battle;
|
|
|
|
private Point end;
|
2017-04-29 14:21:42 +02:00
|
|
|
|
2017-04-27 23:27:18 +02:00
|
|
|
private Point arena_switch;
|
2017-03-09 16:08:47 +01:00
|
|
|
|
|
|
|
private Point[] cardslots = new Point[4];
|
|
|
|
private Point playout;
|
2017-05-09 10:32:08 +02:00
|
|
|
|
|
|
|
private Color ok_button = new Color(85, 170, 254);
|
|
|
|
private Color arena_view = new Color(85, 170, 254);//<-not the correct color!
|
|
|
|
|
2017-03-09 16:08:47 +01:00
|
|
|
private boolean autoplay;
|
2017-03-11 21:16:08 +01:00
|
|
|
private boolean doubleplayout = true;
|
2017-03-11 16:41:11 +01:00
|
|
|
private int truppenwait = 180;
|
2017-04-07 09:21:52 +02:00
|
|
|
private int randomness = 15;
|
2017-05-28 19:59:09 +02:00
|
|
|
private boolean paused = false;
|
2017-05-28 20:48:26 +02:00
|
|
|
private boolean backfocus = false;
|
|
|
|
private final int waittime = 50;//time between mouse teleports and clicks
|
|
|
|
|
2017-05-26 09:28:53 +02:00
|
|
|
private int mincolordistance = 35;
|
2017-10-26 12:59:11 +02:00
|
|
|
private Overlay ov = null;
|
2017-03-09 16:08:47 +01:00
|
|
|
|
2017-05-28 20:48:26 +02:00
|
|
|
OSType os;
|
|
|
|
|
2017-07-21 15:24:17 +02:00
|
|
|
long started = -1;
|
2017-05-28 20:48:26 +02:00
|
|
|
|
2017-03-09 16:08:47 +01:00
|
|
|
private void sleep( int ms) {
|
2017-07-21 15:24:17 +02:00
|
|
|
//update ui
|
|
|
|
Main.get().ui.printTime((int) ( (System.currentTimeMillis()-started) / 1000 ));
|
2017-10-26 13:09:37 +02:00
|
|
|
|
2017-03-12 17:27:55 +01:00
|
|
|
if(skipbattle)
|
|
|
|
return;
|
2017-03-09 16:08:47 +01:00
|
|
|
try {
|
2017-07-21 15:24:17 +02:00
|
|
|
if(ms > 1000) {
|
|
|
|
Thread.sleep(1000);
|
|
|
|
sleep(ms-1000);
|
|
|
|
} else
|
|
|
|
Thread.sleep(ms);
|
|
|
|
while(paused & should_run) {
|
2017-05-28 19:59:09 +02:00
|
|
|
Thread.sleep(75);
|
|
|
|
}
|
2017-07-21 15:24:17 +02:00
|
|
|
} catch (InterruptedException e) { } //when skip is applyed, or the bot gets stopped
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void start() {
|
|
|
|
should_run = true;
|
|
|
|
if(!running) {
|
|
|
|
running = true;
|
|
|
|
thread = new Thread(this, "BOT");
|
|
|
|
thread.start();
|
2017-07-21 15:24:17 +02:00
|
|
|
started = System.currentTimeMillis();
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void stop() {
|
|
|
|
should_run = false;
|
2017-07-21 15:24:17 +02:00
|
|
|
skipbattle = true;
|
2017-03-09 16:08:47 +01:00
|
|
|
while(running) {
|
|
|
|
thread.interrupt();//stop that shit (its maybe sleeping)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void skip() {
|
|
|
|
if(isRunning())
|
|
|
|
if(inbattle)
|
|
|
|
skipbattle = true;
|
2017-03-11 16:41:11 +01:00
|
|
|
thread.interrupt();
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isRunning() {
|
|
|
|
return running;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
sleep(1000);//chill ma
|
2017-05-28 20:48:26 +02:00
|
|
|
|
|
|
|
//determine os
|
|
|
|
String oss = System.getProperty("os.name").toLowerCase();
|
|
|
|
if(oss.contains("nix") | oss.contains("nux") | oss.contains("aix"))
|
|
|
|
os = OSType.Linux;
|
|
|
|
else if(oss.contains("win"))
|
|
|
|
os = OSType.Windows;
|
|
|
|
else if(oss.contains("mac"))
|
|
|
|
os = OSType.OSX;
|
|
|
|
else
|
|
|
|
Main.get().ui.info("OS not supported for backfocus: " + oss);
|
|
|
|
|
2017-03-09 16:08:47 +01:00
|
|
|
int card = 0;
|
|
|
|
try {
|
|
|
|
Robot rob = new Robot();
|
|
|
|
while(should_run) {
|
2017-03-11 16:41:11 +01:00
|
|
|
sleep(500);
|
|
|
|
clickL(rob, battle);//smash the start button
|
2017-03-09 16:08:47 +01:00
|
|
|
sleep(1000);
|
2017-03-11 16:41:11 +01:00
|
|
|
clickL(rob, battle);//press start again (if there is an alert poping up)
|
2017-05-28 20:48:26 +02:00
|
|
|
backfocus(rob);
|
2017-03-11 16:41:11 +01:00
|
|
|
//battle is starting up
|
2017-03-09 16:08:47 +01:00
|
|
|
sleep(9000);//wait for the battle to start (loading screen)
|
|
|
|
Main.get().ui.info("Battle started.");
|
|
|
|
inbattle = true;
|
2017-04-01 21:23:45 +02:00
|
|
|
float modifier = 1;
|
2017-03-09 16:08:47 +01:00
|
|
|
long start = System.currentTimeMillis();
|
2017-03-11 16:41:11 +01:00
|
|
|
long lastwait = start;//actions like moving mouse and do stuff gets messured and subtracted of the wait's
|
2017-03-09 16:08:47 +01:00
|
|
|
while( ((System.currentTimeMillis() - start) / 6000) < 41 & should_run & !skipbattle) {
|
2017-03-11 16:41:11 +01:00
|
|
|
|
2017-04-01 21:23:45 +02:00
|
|
|
//check für ok-button
|
|
|
|
if(round(start) > 20) {//game is older then 20 seconds
|
2017-05-09 10:32:08 +02:00
|
|
|
if(checkOK(end, rob,ok_button)) {//check
|
2017-04-29 14:21:42 +02:00
|
|
|
Main.get().ui.info("OK-button detected!");
|
|
|
|
skipbattle = true;
|
|
|
|
break;
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
|
|
|
}
|
2017-03-11 16:41:11 +01:00
|
|
|
|
2017-05-09 10:32:08 +02:00
|
|
|
//try to play out a card
|
|
|
|
if(autoplay) {
|
|
|
|
playout(card, rob);//try to play a card
|
|
|
|
card = (card +1) % 4;//move card pointer to the next
|
|
|
|
if(doubleplayout) {
|
2017-05-28 20:48:26 +02:00
|
|
|
sleep(waittime * 2);
|
2017-05-09 10:32:08 +02:00
|
|
|
playout(card, rob);
|
|
|
|
card = (card +1) % 4;//next
|
|
|
|
}
|
2017-05-28 20:48:26 +02:00
|
|
|
backfocus(rob);
|
2017-03-11 16:41:11 +01:00
|
|
|
}
|
2017-04-29 14:21:42 +02:00
|
|
|
|
2017-05-09 10:32:08 +02:00
|
|
|
if(round(start) >= 115) //game older than 2 minutes -> speed the playout process up!
|
|
|
|
modifier = 2;
|
|
|
|
else if(round(start) >= (115 - (truppenwait / 2))) //remove half waittime and do half speed.
|
|
|
|
modifier = 1.5f;
|
|
|
|
// eingestellter wert (0.1 sec) ggf. durch 2 teilen vergangene zeit abziehen (zeit fürs setztem der letzten truppen)
|
|
|
|
int waittime = ( (int) (((truppenwait * 100) / modifier) - (System.currentTimeMillis()- lastwait)) );//how long to wait?
|
2017-08-18 15:32:14 +02:00
|
|
|
Main.get().ui.info("Waiting for: " + (waittime / 1000) + "s");
|
2017-07-21 15:24:17 +02:00
|
|
|
while (waittime > 1500 & !skipbattle & should_run) {//check for the ok-button every 3 seconds
|
2017-05-09 10:32:08 +02:00
|
|
|
long startwait = System.currentTimeMillis();//record needed time
|
|
|
|
if(checkOK(end, rob, ok_button)) {//check
|
|
|
|
Main.get().ui.info("OK-button detected!");
|
|
|
|
skipbattle = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
sleep((int) (1500 - (System.currentTimeMillis() - startwait)));//sleep the rest of 3 seconds, that was not gone for checking
|
|
|
|
waittime = (int) (waittime - (System.currentTimeMillis() - startwait));//calculate waittime that is left
|
|
|
|
}
|
|
|
|
sleep(waittime);//wait
|
2017-04-29 14:21:42 +02:00
|
|
|
|
2017-05-09 10:32:08 +02:00
|
|
|
lastwait = System.currentTimeMillis();//restart the messurement of time used by the actions
|
|
|
|
}
|
|
|
|
skipbattle = false;
|
|
|
|
inbattle = false;
|
|
|
|
clickL(rob, end);//ok button
|
2017-05-28 20:48:26 +02:00
|
|
|
backfocus(rob);
|
2017-05-09 10:32:08 +02:00
|
|
|
Main.get().ui.info("Battle ended.");
|
|
|
|
sleep(9000);//9 sec-loading screen
|
|
|
|
//checken, ob Arena wechsel pop-up
|
2017-08-18 15:32:14 +02:00
|
|
|
while(checkOK(arena_switch, rob,arena_view) & should_run) {
|
2017-05-26 09:28:53 +02:00
|
|
|
System.out.println("Arena found, clicking");
|
2017-05-09 10:32:08 +02:00
|
|
|
clickL(rob, arena_switch);
|
2017-05-28 20:48:26 +02:00
|
|
|
backfocus(rob);
|
2017-05-09 10:32:08 +02:00
|
|
|
sleep(2000);
|
|
|
|
}
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
|
|
|
} catch (AWTException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
2017-04-01 21:23:45 +02:00
|
|
|
running= false;//remove the running flag
|
|
|
|
}
|
2017-04-29 14:21:42 +02:00
|
|
|
|
2017-04-01 21:23:45 +02:00
|
|
|
private float round(long start) {//returns how old the round is in 0.1 seconds
|
|
|
|
return ((System.currentTimeMillis() - start) / 1000);
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
|
|
|
|
2017-03-11 16:41:11 +01:00
|
|
|
/**
|
|
|
|
* Try to play out an Card. fakes 2 mouse clicks. One at the card, and one at the defined playout spot.
|
|
|
|
* @param card card nummber (0-3)
|
|
|
|
* @param rob the Robot Object to use
|
|
|
|
*/
|
2017-03-09 16:08:47 +01:00
|
|
|
private void playout(int card, Robot rob) {
|
2017-04-02 12:46:05 +02:00
|
|
|
Main.get().ui.info("Playout: " + (card+1));
|
2017-03-09 16:08:47 +01:00
|
|
|
if(cardslots[card] != null) {//card is selectable
|
|
|
|
clickL(rob, cardslots[card]);//click on the card slot
|
2017-05-28 20:48:26 +02:00
|
|
|
sleep(waittime);//lets Teamviewer transmit the data to the phone and let the phone some time zto sumbit the data to supercell.
|
2017-03-09 16:08:47 +01:00
|
|
|
if(playout != null)//a specified playout spot
|
2017-04-07 09:21:52 +02:00
|
|
|
clickL(rob, playout.add(new Point(randomness)));//click on the playout location
|
2017-03-09 16:08:47 +01:00
|
|
|
else
|
2017-04-07 09:21:52 +02:00
|
|
|
clickL(rob, battle.add(new Point(randomness)));//non specified playout spot (the battle start button is a good position to play out cards)
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-05-28 20:48:26 +02:00
|
|
|
private void backfocus(Robot bot) {
|
|
|
|
if(backfocus) {
|
|
|
|
if(os == OSType.Windows | os == OSType.Linux)
|
|
|
|
bot.keyPress(KeyEvent.VK_ALT);
|
|
|
|
else//osx / unsupported
|
|
|
|
bot.keyPress(KeyEvent.VK_META);
|
|
|
|
|
|
|
|
bot.keyPress(KeyEvent.VK_TAB);
|
|
|
|
sleep(waittime);
|
|
|
|
bot.keyRelease(KeyEvent.VK_TAB);
|
|
|
|
if(os == OSType.Windows | os == OSType.Linux)
|
|
|
|
bot.keyRelease(KeyEvent.VK_ALT);
|
|
|
|
else//osx / unsupported
|
|
|
|
bot.keyRelease(KeyEvent.VK_META);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-03-09 16:08:47 +01:00
|
|
|
public void set(Point a, int num) {
|
|
|
|
if(num < 4)
|
|
|
|
cardslots[num] = a;
|
|
|
|
else if(num == 5) {
|
|
|
|
end = a;
|
|
|
|
Main.get().ui.refresh();
|
|
|
|
} else if(num == 4) {
|
|
|
|
battle = a;
|
|
|
|
Main.get().ui.refresh();
|
|
|
|
} else if(num == 6)
|
|
|
|
playout = a;
|
2017-03-11 16:41:11 +01:00
|
|
|
else if(num == 7)
|
2017-04-27 23:27:18 +02:00
|
|
|
arena_switch = a;
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
|
|
|
|
2017-05-28 20:48:26 +02:00
|
|
|
public boolean isBackfocus() {
|
|
|
|
return backfocus;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void toggleBackfocus() {
|
|
|
|
backfocus = !backfocus;
|
|
|
|
}
|
|
|
|
|
2017-03-09 16:08:47 +01:00
|
|
|
public boolean isSet(int num) {
|
|
|
|
if(num < 0 ) throw new IllegalArgumentException("num >= 0 !");
|
|
|
|
|
|
|
|
return get(num) != null;
|
|
|
|
}
|
|
|
|
|
|
|
|
private Point get(int num) {
|
|
|
|
if(num < 4)
|
|
|
|
return cardslots[num];
|
|
|
|
else if(num == 5)
|
|
|
|
return end ;
|
|
|
|
else if(num == 4)
|
|
|
|
return battle;
|
|
|
|
else if(num == 6)
|
|
|
|
return playout;
|
2017-03-11 16:41:11 +01:00
|
|
|
else if(num == 7)
|
2017-04-27 23:27:18 +02:00
|
|
|
return arena_switch;
|
2017-03-09 16:08:47 +01:00
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setWait(int i) {
|
|
|
|
truppenwait = i;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setDoublePlay(boolean a) {
|
|
|
|
doubleplayout = a;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setAutoPlay(boolean a) {
|
|
|
|
autoplay = a;
|
|
|
|
}
|
|
|
|
|
2017-04-07 09:21:52 +02:00
|
|
|
public void setRandmones(int rand) {
|
|
|
|
randomness = rand;
|
|
|
|
}
|
2017-04-29 14:21:42 +02:00
|
|
|
|
2017-03-09 16:08:47 +01:00
|
|
|
public boolean bothset() {
|
|
|
|
return (end != null & battle != null);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void clickL(Robot b, Point a) {
|
2017-03-11 16:56:00 +01:00
|
|
|
if(!should_run)
|
|
|
|
return;
|
2017-03-09 16:08:47 +01:00
|
|
|
Point old = getMouse();
|
|
|
|
b.mouseMove(a.x, a.y);
|
|
|
|
sleep(50);
|
|
|
|
clickL(b);
|
|
|
|
sleep(50);
|
|
|
|
b.mouseMove(old.x, old.y);
|
|
|
|
sleep(50);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void clickL(Robot b) {//40 ms delay
|
|
|
|
b.mousePress(InputEvent.BUTTON1_MASK);
|
2017-05-28 20:48:26 +02:00
|
|
|
sleep(waittime);
|
2017-03-09 16:08:47 +01:00
|
|
|
b.mouseRelease(InputEvent.BUTTON1_MASK);
|
2017-05-28 20:48:26 +02:00
|
|
|
sleep(waittime);
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
private int getMousex() {
|
|
|
|
return MouseInfo.getPointerInfo().getLocation().x;
|
|
|
|
}
|
|
|
|
private int getMousey() {
|
|
|
|
return MouseInfo.getPointerInfo().getLocation().y;
|
|
|
|
}
|
|
|
|
|
2017-03-11 16:41:11 +01:00
|
|
|
/**
|
|
|
|
* This method checks a squared radius of 10 px around the Point and compares the screen color with the color of the ok-button, that ends an game.
|
|
|
|
* @param p the point to scann
|
|
|
|
* @param bot the Robot object to use
|
|
|
|
* @return true, if there are more then 70px alike enough
|
|
|
|
*/
|
2017-05-09 10:32:08 +02:00
|
|
|
private boolean checkOK(Point p, Robot bot, Color goalcolor) {
|
2017-05-28 19:52:51 +02:00
|
|
|
if(p == null | bot == null | goalcolor == null)
|
|
|
|
return false;
|
2017-03-11 16:41:11 +01:00
|
|
|
//long start = System.currentTimeMillis();
|
|
|
|
int count = 0;
|
2017-10-26 13:09:37 +02:00
|
|
|
BufferedImage img = bot.createScreenCapture(getRect(p.x, p.y));//smile
|
|
|
|
for (int x = 0; x < img.getWidth(); x++) {
|
|
|
|
for (int y = 0; y < img.getHeight(); y++) {
|
2017-03-11 16:41:11 +01:00
|
|
|
int color = img.getRGB(x, y);
|
|
|
|
int red = (color & 0x00ff0000) >> 16;
|
2017-10-26 13:09:37 +02:00
|
|
|
int green = (color & 0x0000ff00) >> 8;
|
|
|
|
int blue = color & 0x000000ff;
|
|
|
|
double distance = Math.sqrt(Math.pow((blue - goalcolor.getBlue()), 2)
|
2017-04-29 14:21:42 +02:00
|
|
|
+ Math.pow((red - goalcolor.getRed()), 2) + Math.pow((green - goalcolor.getGreen()), 2));//calculate the distance between the goalcolor and the test color
|
2017-10-26 13:09:37 +02:00
|
|
|
if (distance < mincolordistance)
|
|
|
|
count++;
|
2017-03-11 16:41:11 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-05-28 20:48:26 +02:00
|
|
|
// System.out.println("counts: " + count);//some performance checking
|
2017-10-26 13:09:37 +02:00
|
|
|
return count > 4;//engough pixel have the right color
|
2017-03-11 16:41:11 +01:00
|
|
|
}
|
|
|
|
|
2017-03-09 16:08:47 +01:00
|
|
|
public Point getMouse() {
|
|
|
|
return new Point(getMousex(), getMousey());
|
|
|
|
}
|
|
|
|
|
|
|
|
public String serialize() {
|
|
|
|
String out = "";
|
2017-03-11 16:41:11 +01:00
|
|
|
for(int i = 0; i < 8; i++) {
|
2017-03-09 16:08:47 +01:00
|
|
|
Point p = get(i);
|
|
|
|
String ps = "null";
|
|
|
|
if(p != null)
|
|
|
|
ps = p.serialize();
|
|
|
|
out += i + " " + ps + "\n";
|
|
|
|
}
|
2017-05-09 10:32:08 +02:00
|
|
|
out = out + "104 " + arena_view.getRed() + " " + arena_view.getGreen() + " " + arena_view.getBlue();
|
|
|
|
out = out + "\n105 " + ok_button.getRed() + " " + ok_button.getGreen() + " " + ok_button.getBlue();
|
|
|
|
return out ;
|
|
|
|
}
|
|
|
|
|
2017-05-28 20:48:26 +02:00
|
|
|
|
2017-05-09 10:32:08 +02:00
|
|
|
/**
|
|
|
|
* Set the avg Color of an Button
|
|
|
|
* @param c Color
|
|
|
|
* @param colornum nummber (0=ok-button, 1=arena_view-button)
|
|
|
|
*/
|
2017-05-26 09:28:53 +02:00
|
|
|
public void setColor(Color c, int colornum, int minimumdistance) {
|
2017-05-09 10:32:08 +02:00
|
|
|
switch(colornum) {
|
|
|
|
case 0:
|
|
|
|
ok_button = c;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
arena_view = c;
|
|
|
|
break;
|
|
|
|
}
|
2017-05-26 09:28:53 +02:00
|
|
|
if(mincolordistance < minimumdistance)
|
|
|
|
mincolordistance = minimumdistance;
|
2017-05-09 10:32:08 +02:00
|
|
|
System.out.println(colornum + ": "+c.getRed() + " " + c.getGreen() + " " + c.getBlue());
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|
2017-05-28 19:59:09 +02:00
|
|
|
|
2017-05-28 20:48:26 +02:00
|
|
|
|
2017-05-28 19:59:09 +02:00
|
|
|
public boolean isPaused() {
|
|
|
|
return paused;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setPause(boolean b) {
|
|
|
|
paused = b;
|
|
|
|
}
|
2017-05-28 20:48:26 +02:00
|
|
|
|
|
|
|
private enum OSType {
|
|
|
|
Linux,
|
|
|
|
Windows,
|
|
|
|
OSX,
|
|
|
|
unsupported
|
|
|
|
}
|
2017-10-26 12:59:11 +02:00
|
|
|
|
2017-10-26 13:09:37 +02:00
|
|
|
|
|
|
|
public static Rectangle getRect(int x, int y) {
|
|
|
|
return new Rectangle(x-2, y-2, 5, 5);
|
|
|
|
}
|
2017-10-26 12:59:11 +02:00
|
|
|
|
|
|
|
public void toggleOverlay() {
|
|
|
|
if(ov == null) {
|
|
|
|
ov = new Overlay();
|
|
|
|
ov.set(playout, cardslots, end, battle, arena_switch);
|
|
|
|
ov.init();
|
|
|
|
} else {
|
|
|
|
ov.close();
|
|
|
|
ov = null;
|
|
|
|
}
|
|
|
|
}
|
2017-03-09 16:08:47 +01:00
|
|
|
}
|