/* OrpheusMS: MapleStory Private Server based on OdinMS Copyright (C) 2012 Aaron Weiss <aaron@deviant-core.net> Patrick Huy <patrick.huy@frz.cc> Matthias Butz <matze@odinms.de> Jan Christian Meyer <vimes@odinms.de> This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package server.events.gm; import client.MapleCharacter; import tools.Randomizer; import java.io.File; import provider.MapleDataProvider; import provider.MapleDataProviderFactory; import provider.MapleDataTool; import server.TimerManager; import server.maps.MapleMap; import tools.MaplePacketCreator; /** * * @author FloppyDisk */ public final class MapleOxQuiz { private int round = 1; private int question = 1; private MapleMap map = null; private int expGain = 200; private static MapleDataProvider stringData = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/Etc.wz")); public MapleOxQuiz(MapleMap map) { this.map = map; this.round = Randomizer.nextInt(9); this.question = 1; } private boolean isCorrectAnswer(MapleCharacter chr, int answer) { double x = chr.getPosition().getX(); double y = chr.getPosition().getY(); if ((x > -234 && y > -26 && answer == 0) || (x < -234 && y > -26 && answer == 1)) { chr.dropMessage("Correct!"); return true; } return false; } public void sendQuestion() { int gm = 0; for (MapleCharacter mc : map.getCharacters()) { if (mc.gmLevel() > 0) { gm++; } } final int number = gm; map.broadcastMessage(MaplePacketCreator.showOXQuiz(round, question, true)); TimerManager.getInstance().schedule(new Runnable() { @Override public void run() { map.broadcastMessage(MaplePacketCreator.showOXQuiz(round, question, true)); for (MapleCharacter chr : map.getCharacters()) { if (chr != null) // make sure they aren't null... maybe // something can happen in 12 seconds. { if (!isCorrectAnswer(chr, getOXAnswer(round, question)) && !chr.isGM()) { chr.changeMap(chr.getMap().getReturnMap()); } else { chr.gainExp(expGain, true, true); } } } // do question if ((round == 1 && question == 29) || ((round == 2 || round == 3) && question == 17) || ((round == 4 || round == 8) && question == 12) || (round == 5 && question == 26) || (round == 9 && question == 44) || ((round == 6 || round == 7) && question == 16)) { question = 100; } else { question++; } // send question if (map.getCharacters().size() - number <= 1) { map.broadcastMessage(MaplePacketCreator.serverNotice(6, "The event has ended")); map.getPortal("join00").setPortalStatus(true); map.setOx(null); map.setOxQuiz(false); // prizes here return; } sendQuestion(); } }, 30000); // Time to answer = 30 seconds ( Ox Quiz packet shows a 30 // second timer. } private static int getOXAnswer(int imgdir, int id) { return MapleDataTool.getInt(stringData.getData("OXQuiz.img").getChildByPath("" + imgdir + "").getChildByPath("" + id + "").getChildByPath("a")); } }