/* 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 java.util.LinkedList; import java.util.List; import server.TimerManager; import server.maps.MapleMap; import tools.MaplePacketCreator; /** * * @author kevintjuh93 */ public class MapleSnowball { private MapleMap map; private int position = 0; private int hits = 25; private int snowmanhp = 7500; private boolean hittable = false; private int team; private boolean winner = false; List<MapleCharacter> characters = new LinkedList<MapleCharacter>(); public MapleSnowball(int team, MapleMap map) { this.map = map; this.team = team; for (MapleCharacter chr : map.getCharacters()) { if (chr.getTeam() == team) characters.add(chr); } } public void startEvent() { if (hittable == true) return; for (MapleCharacter chr : characters) { if (chr != null) { chr.announce(MaplePacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); chr.announce(MaplePacketCreator.getClock(600)); } } hittable = true; TimerManager.getInstance().schedule(new Runnable() { @Override public void run() { if (map.getSnowball(team).getPosition() > map.getSnowball(team == 0 ? 1 : 0).getPosition()) { for (MapleCharacter chr : characters) { if (chr != null) chr.announce(MaplePacketCreator.rollSnowBall(false, 3, map.getSnowball(0), map.getSnowball(0))); } winner = true; } else if (map.getSnowball(team == 0 ? 1 : 0).getPosition() > map.getSnowball(team).getPosition()) { for (MapleCharacter chr : characters) { if (chr != null) chr.announce(MaplePacketCreator.rollSnowBall(false, 4, map.getSnowball(0), map.getSnowball(0))); } winner = true; } // Else warpOut(); } }, 600000); } public boolean isHittable() { return hittable; } public void setHittable(boolean hit) { this.hittable = hit; } public int getPosition() { return position; } public int getSnowmanHP() { return snowmanhp; } public void setSnowmanHP(int hp) { this.snowmanhp = hp; } public void hit(int what, int damage) { if (what < 2) if (damage > 0) this.hits--; else { if (this.snowmanhp - damage < 0) { this.snowmanhp = 0; TimerManager.getInstance().schedule(new Runnable() { @Override public void run() { setSnowmanHP(7500); message(5); } }, 10000); } else this.snowmanhp -= damage; map.broadcastMessage(MaplePacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); } if (this.hits == 0) { this.position += 1; if (this.position == 45) map.getSnowball(team == 0 ? 1 : 0).message(1); else if (this.position == 290) map.getSnowball(team == 0 ? 1 : 0).message(2); else if (this.position == 560) map.getSnowball(team == 0 ? 1 : 0).message(3); this.hits = 25; map.broadcastMessage(MaplePacketCreator.rollSnowBall(false, 0, map.getSnowball(0), map.getSnowball(1))); map.broadcastMessage(MaplePacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); } map.broadcastMessage(MaplePacketCreator.hitSnowBall(what, damage)); } public void message(int message) { for (MapleCharacter chr : characters) { if (chr != null) chr.announce(MaplePacketCreator.snowballMessage(team, message)); } } public void warpOut() { TimerManager.getInstance().schedule(new Runnable() { @Override public void run() { if (winner == true) map.warpOutByTeam(team, 109050000); else map.warpOutByTeam(team, 109050001); map.setSnowball(team, null); } }, 10000); } }