package server.events;
import client.MapleCharacter;
import client.MapleStat;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import server.Timer.EventTimer;
import server.maps.MapleMap;
import tools.MaplePacketCreator;
import tools.Pair;
public class MapleOxQuiz extends MapleEvent {
private ScheduledFuture<?> oxSchedule;
private ScheduledFuture<?> oxSchedule2;
private int timesAsked = 0;
private boolean finished = false;
public MapleOxQuiz(int channel, MapleEventType type) {
super(channel, type);
}
@Override
public void finished(MapleCharacter chr) {
}
private void resetSchedule() {
if (this.oxSchedule != null) {
this.oxSchedule.cancel(false);
this.oxSchedule = null;
}
if (this.oxSchedule2 != null) {
this.oxSchedule2.cancel(false);
this.oxSchedule2 = null;
}
}
@Override
public void onMapLoad(MapleCharacter chr) {
super.onMapLoad(chr);
if ((chr.getMapId() == this.type.mapids[0]) && (!chr.isGM())) {
chr.canTalk(false);
}
}
@Override
public void reset() {
super.reset();
getMap(0).getPortal("join00").setPortalState(false);
resetSchedule();
this.timesAsked = 0;
}
@Override
public void unreset() {
super.unreset();
getMap(0).getPortal("join00").setPortalState(true);
resetSchedule();
}
@Override
public void startEvent() {
sendQuestion();
this.finished = false;
}
public void sendQuestion() {
sendQuestion(getMap(0));
}
public void sendQuestion(final MapleMap toSend) {
final Map.Entry question = MapleOxQuizFactory.getInstance().grabRandomQuestion();
if (this.oxSchedule2 != null) {
this.oxSchedule2.cancel(false);
}
this.oxSchedule2 = EventTimer.getInstance().schedule(new Runnable() {
@Override
public void run() {
int number = 0;
for (MapleCharacter mc : toSend.getCharactersThreadsafe()) {
if ((mc.isGM()) || (!mc.isAlive())) {
number++;
}
}
if ((toSend.getCharactersSize() - number <= 1) || (MapleOxQuiz.this.timesAsked == 10)) {
toSend.broadcastMessage(MaplePacketCreator.serverMessageNotice("The event has ended"));
MapleOxQuiz.this.unreset();
for (MapleCharacter chr : toSend.getCharactersThreadsafe()) {
if ((chr != null) && (!chr.isGM()) && (chr.isAlive())) {
chr.canTalk(true);
MapleEvent.givePrize(chr);
MapleOxQuiz.this.warpBack(chr);
}
}
MapleOxQuiz.this.finished = true;
return;
}
toSend.broadcastMessage(MaplePacketCreator.showOXQuiz(((Integer) ((Pair) question.getKey()).left), ((Integer) ((Pair) question.getKey()).right), true));
toSend.broadcastMessage(MaplePacketCreator.getClock(10));
}
}, 10000L);
if (this.oxSchedule != null) {
this.oxSchedule.cancel(false);
}
this.oxSchedule = EventTimer.getInstance().schedule(new Runnable() {
@Override
public void run() {
if (MapleOxQuiz.this.finished) {
return;
}
toSend.broadcastMessage(MaplePacketCreator.showOXQuiz(((Integer) ((Pair) question.getKey()).left), ((Integer) ((Pair) question.getKey()).right), false));
timesAsked++;
for (MapleCharacter chr : toSend.getCharactersThreadsafe()) {
if ((chr != null) && (!chr.isGM()) && (chr.isAlive())) {
if (!MapleOxQuiz.this.isCorrectAnswer(chr, ((MapleOxQuizFactory.MapleOxQuizEntry) question.getValue()).getAnswer())) {
chr.getStat().setHp(0);
chr.updateSingleStat(MapleStat.HP, 0L);
} else {
chr.gainExp(3000, true, true, false);
}
}
}
MapleOxQuiz.this.sendQuestion();
}
}, 20000L);
}
private boolean isCorrectAnswer(MapleCharacter chr, int answer) {
double x = chr.getTruePosition().getX();
double y = chr.getTruePosition().getY();
if (((x > -234.0D) && (y > -26.0D) && (answer == 0)) || ((x < -234.0D) && (y > -26.0D) && (answer == 1))) {
chr.dropMessage(6, "[Ox Quiz] Correct!");
return true;
}
chr.dropMessage(6, "[Ox Quiz] Incorrect!");
return false;
}
}