package handling.channel.handler; import clientside.MapleCharacter; import clientside.MapleClient; import clientside.MapleDisease; import java.util.List; import server.MapleCarnivalFactory; import server.Randomizer; import server.life.MapleLifeFactory; import server.life.MapleMonster; import tools.Pair; import tools.data.LittleEndianAccessor; import tools.packet.CWvsContext; import tools.packet.MonsterCarnivalPacket; public class MonsterCarnivalHandler { public static final void MonsterCarnival(LittleEndianAccessor slea, MapleClient c) { if (c.getPlayer().getCarnivalParty() == null) { c.getSession().write(CWvsContext.enableActions()); return; } int tab = slea.readByte(); int num = slea.readInt(); if (tab == 0) { List mobs = c.getPlayer().getMap().getMobsToSpawn(); if ((num >= mobs.size()) || (c.getPlayer().getAvailableCP() < ((Integer) ((Pair) mobs.get(num)).right).intValue())) { c.getPlayer().dropMessage(5, "You do not have the CP."); c.getSession().write(CWvsContext.enableActions()); return; } MapleMonster mons = MapleLifeFactory.getMonster(((Integer) ((Pair) mobs.get(num)).left).intValue()); if ((mons != null) && (c.getPlayer().getMap().makeCarnivalSpawn(c.getPlayer().getCarnivalParty().getTeam(), mons, num))) { c.getPlayer().getCarnivalParty().useCP(c.getPlayer(), ((Integer) ((Pair) mobs.get(num)).right).intValue()); c.getPlayer().CPUpdate(false, c.getPlayer().getAvailableCP(), c.getPlayer().getTotalCP(), 0); for (MapleCharacter chr : c.getPlayer().getMap().getCharactersThreadsafe()) { chr.CPUpdate(true, c.getPlayer().getCarnivalParty().getAvailableCP(), c.getPlayer().getCarnivalParty().getTotalCP(), c.getPlayer().getCarnivalParty().getTeam()); } c.getPlayer().getMap().broadcastMessage(MonsterCarnivalPacket.playerSummoned(c.getPlayer().getName(), tab, num)); c.getSession().write(CWvsContext.enableActions()); } else { c.getPlayer().dropMessage(5, "You may no longer summon the monster."); c.getSession().write(CWvsContext.enableActions()); } } else if (tab == 1) { List skillid = c.getPlayer().getMap().getSkillIds(); if (num >= skillid.size()) { c.getPlayer().dropMessage(5, "An error occurred."); c.getSession().write(CWvsContext.enableActions()); return; } MapleCarnivalFactory.MCSkill skil = MapleCarnivalFactory.getInstance().getSkill(((Integer) skillid.get(num)).intValue()); if ((skil == null) || (c.getPlayer().getAvailableCP() < skil.cpLoss)) { c.getPlayer().dropMessage(5, "You do not have the CP."); c.getSession().write(CWvsContext.enableActions()); return; } MapleDisease dis = skil.getDisease(); boolean found = false; for (MapleCharacter chr : c.getPlayer().getMap().getCharactersThreadsafe()) { if (((chr.getParty() == null) || ((c.getPlayer().getParty() != null) && (chr.getParty().getId() != c.getPlayer().getParty().getId()))) && ((skil.targetsAll) || (Randomizer.nextBoolean()))) { found = true; if (dis == null) { chr.dispel(); } else if (skil.getSkill() == null) { chr.giveDebuff(dis, 1, 30000L, dis.getDisease(), 1); } else { chr.giveDebuff(dis, skil.getSkill()); } if (!skil.targetsAll) { break; } } } if (found) { c.getPlayer().getCarnivalParty().useCP(c.getPlayer(), skil.cpLoss); c.getPlayer().CPUpdate(false, c.getPlayer().getAvailableCP(), c.getPlayer().getTotalCP(), 0); for (MapleCharacter chr : c.getPlayer().getMap().getCharactersThreadsafe()) { chr.CPUpdate(true, c.getPlayer().getCarnivalParty().getAvailableCP(), c.getPlayer().getCarnivalParty().getTotalCP(), c.getPlayer().getCarnivalParty().getTeam()); } c.getPlayer().getMap().broadcastMessage(MonsterCarnivalPacket.playerSummoned(c.getPlayer().getName(), tab, num)); c.getSession().write(CWvsContext.enableActions()); } else { c.getPlayer().dropMessage(5, "An error occurred."); c.getSession().write(CWvsContext.enableActions()); } } else if (tab == 2) { MapleCarnivalFactory.MCSkill skil = MapleCarnivalFactory.getInstance().getGuardian(num); if ((skil == null) || (c.getPlayer().getAvailableCP() < skil.cpLoss)) { c.getPlayer().dropMessage(5, "You do not have the CP."); c.getSession().write(CWvsContext.enableActions()); return; } if (c.getPlayer().getMap().makeCarnivalReactor(c.getPlayer().getCarnivalParty().getTeam(), num)) { c.getPlayer().getCarnivalParty().useCP(c.getPlayer(), skil.cpLoss); c.getPlayer().CPUpdate(false, c.getPlayer().getAvailableCP(), c.getPlayer().getTotalCP(), 0); for (MapleCharacter chr : c.getPlayer().getMap().getCharactersThreadsafe()) { chr.CPUpdate(true, c.getPlayer().getCarnivalParty().getAvailableCP(), c.getPlayer().getCarnivalParty().getTotalCP(), c.getPlayer().getCarnivalParty().getTeam()); } c.getPlayer().getMap().broadcastMessage(MonsterCarnivalPacket.playerSummoned(c.getPlayer().getName(), tab, num)); c.getSession().write(CWvsContext.enableActions()); } else { c.getPlayer().dropMessage(5, "You may no longer summon the being."); c.getSession().write(CWvsContext.enableActions()); } } } }