/* * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU 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 General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ package net.sf.l2j.gameserver.handler.admincommandhandlers; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.StringTokenizer; import javolution.text.TextBuilder; import net.sf.l2j.gameserver.datatables.SpawnTable; import net.sf.l2j.gameserver.handler.IAdminCommandHandler; import net.sf.l2j.gameserver.model.L2Spawn; import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.entity.L2Event; import net.sf.l2j.gameserver.network.serverpackets.CharInfo; import net.sf.l2j.gameserver.network.serverpackets.ItemList; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; import net.sf.l2j.gameserver.network.serverpackets.PlaySound; import net.sf.l2j.gameserver.network.serverpackets.UserInfo; /** * This class handles following admin commands: * - admin = shows menu * * @version $Revision: 1.3.2.1.2.4 $ $Date: 2005/04/11 10:06:06 $ */ public class AdminEventEngine implements IAdminCommandHandler { private static final String[] ADMIN_COMMANDS = { "admin_event", "admin_event_new", "admin_event_choose", "admin_event_store", "admin_event_set", "admin_event_change_teams_number", "admin_event_announce", "admin_event_panel", "admin_event_control_begin", "admin_event_control_teleport", "admin_add", "admin_event_see", "admin_event_del", "admin_delete_buffer", "admin_event_control_sit", "admin_event_name", "admin_event_control_kill", "admin_event_control_res", "admin_event_control_poly", "admin_event_control_unpoly", "admin_event_control_prize", "admin_event_control_chatban", "admin_event_control_finish" }; private static String tempBuffer = ""; private static String tempName = ""; private static String tempName2 = ""; private static boolean npcsDeleted = false; public boolean useAdminCommand(String command, L2PcInstance activeChar) { if (command.equals("admin_event")) showMainPage(activeChar); else if (command.equals("admin_event_new")) { showNewEventPage(activeChar); } else if (command.startsWith("admin_add")) { tempBuffer += command.substring(10); showNewEventPage(activeChar); } else if (command.startsWith("admin_event_see")) { String eventName = command.substring(16); try { NpcHtmlMessage adminReply = new NpcHtmlMessage(5); DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("data/events/" + eventName))); BufferedReader inbr = new BufferedReader(new InputStreamReader(in)); TextBuilder replyMSG = new TextBuilder(""); replyMSG.append("
" + eventName + " bY " + inbr.readLine() + "

"); replyMSG.append("
" + inbr.readLine()); replyMSG.append(""); adminReply.setHtml(replyMSG.toString()); activeChar.sendPacket(adminReply); } catch (Exception e) { e.printStackTrace(); } } else if (command.startsWith("admin_event_del")) { String eventName = command.substring(16); File file = new File("data/events/" + eventName); file.delete(); showMainPage(activeChar); } else if (command.startsWith("admin_event_name")) { tempName += command.substring(17); showNewEventPage(activeChar); } else if (command.equalsIgnoreCase("admin_delete_buffer")) { try { tempBuffer += tempBuffer.substring(0, tempBuffer.length() - 10); showNewEventPage(activeChar); } catch (Exception e) { tempBuffer = ""; } } else if (command.startsWith("admin_event_store")) { try { FileOutputStream file = new FileOutputStream("data/events/" + tempName); PrintStream p = new PrintStream(file); p.println(activeChar.getName()); p.println(tempBuffer); file.close(); } catch (Exception e) { e.printStackTrace(); } tempBuffer = ""; tempName = ""; showMainPage(activeChar); } else if (command.startsWith("admin_event_set")) { L2Event.eventName = command.substring(16); showEventParameters(activeChar, 2); } else if (command.startsWith("admin_event_change_teams_number")) { showEventParameters(activeChar, Integer.parseInt(command.substring(32))); } else if (command.startsWith("admin_event_panel")) { showEventControl(activeChar); } else if (command.startsWith("admin_event_control_begin")) { try { L2Event.active = true; L2Event.players.clear(); L2Event.connectionLossData.clear(); for (int j = 0; j < L2Event.teamsNumber; j++) { LinkedList link = new LinkedList(); L2Event.players.put(j + 1, link); } int i = 0; while (L2Event.participatingPlayers.size() > 0) { String target = getMaxLeveledPlayer(); if (!target.equals("")) { L2Event.players.get(i + 1).add(target); i = (i + 1) % L2Event.teamsNumber; } } destroyEventNpcs(); npcsDeleted = true; } catch (Exception e) { e.printStackTrace(); } showEventControl(activeChar); } else if (command.startsWith("admin_event_control_teleport")) { StringTokenizer st = new StringTokenizer(command.substring(29), "-"); while (st.hasMoreElements()) { teleportTeam(activeChar, Integer.parseInt(st.nextToken())); } showEventControl(activeChar); } else if (command.startsWith("admin_event_control_sit")) { StringTokenizer st = new StringTokenizer(command.substring(24), "-"); while (st.hasMoreElements()) { sitTeam(Integer.parseInt(st.nextToken())); } showEventControl(activeChar); } else if (command.startsWith("admin_event_control_kill")) { StringTokenizer st = new StringTokenizer(command.substring(25), "-"); while (st.hasMoreElements()) { killTeam(activeChar, Integer.parseInt(st.nextToken())); } showEventControl(activeChar); } else if (command.startsWith("admin_event_control_res")) { StringTokenizer st = new StringTokenizer(command.substring(24), "-"); while (st.hasMoreElements()) { resTeam(Integer.parseInt(st.nextToken())); } showEventControl(activeChar); } else if (command.startsWith("admin_event_control_poly")) { StringTokenizer st0 = new StringTokenizer(command.substring(25)); StringTokenizer st = new StringTokenizer(st0.nextToken(), "-"); String id = st0.nextToken(); while (st.hasMoreElements()) { polyTeam(Integer.parseInt(st.nextToken()), id); } showEventControl(activeChar); } else if (command.startsWith("admin_event_control_unpoly")) { StringTokenizer st = new StringTokenizer(command.substring(27), "-"); while (st.hasMoreElements()) { unpolyTeam(Integer.parseInt(st.nextToken())); } showEventControl(activeChar); } else if (command.startsWith("admin_event_control_prize")) { StringTokenizer st0 = new StringTokenizer(command.substring(26)); StringTokenizer st = new StringTokenizer(st0.nextToken(), "-"); String n = st0.nextToken(); StringTokenizer st1 = new StringTokenizer(n, "*"); n = st1.nextToken(); String type = ""; if (st1.hasMoreElements()) type = st1.nextToken(); String id = st0.nextToken(); while (st.hasMoreElements()) { regardTeam(activeChar, Integer.parseInt(st.nextToken()), Integer.parseInt(n), Integer.parseInt(id), type); } showEventControl(activeChar); } else if (command.startsWith("admin_event_control_finish")) { for (int i = 0; i < L2Event.teamsNumber; i++) { telePlayersBack(i + 1); } L2Event.eventName = ""; L2Event.teamsNumber = 0; L2Event.names.clear(); L2Event.participatingPlayers.clear(); L2Event.players.clear(); L2Event.id = 12760; L2Event.npcs.clear(); L2Event.active = false; npcsDeleted = false; } else if (command.startsWith("admin_event_announce")) { StringTokenizer st = new StringTokenizer(command.substring(21)); L2Event.id = Integer.parseInt(st.nextToken()); L2Event.teamsNumber = Integer.parseInt(st.nextToken()); String temp = " "; String temp2 = ""; while (st.hasMoreElements()) { temp += st.nextToken() + " "; } st = new StringTokenizer(temp, "-"); Integer i = 1; while (st.hasMoreElements()) { temp2 = st.nextToken(); if (!temp2.equals(" ")) { L2Event.names.put(i, temp2.substring(1, temp2.length() - 1)); i++; } } L2Event.participatingPlayers.clear(); muestraNpcConInfoAPlayers(activeChar, L2Event.id); PlaySound _snd = new PlaySound(1, "B03_F", 0, 0, 0, 0, 0); activeChar.sendPacket(_snd); activeChar.broadcastPacket(_snd); NpcHtmlMessage adminReply = new NpcHtmlMessage(5); TextBuilder replyMSG = new TextBuilder(""); replyMSG.append("
[ L2J EVENT ENGINE

"); replyMSG.append("
The event " + L2Event.eventName + " has been announced, now you can type //event_panel to see the event panel control

"); replyMSG.append(""); adminReply.setHtml(replyMSG.toString()); activeChar.sendPacket(adminReply); } return true; } public String[] getAdminCommandList() { return ADMIN_COMMANDS; } String showStoredEvents() { File dir = new File("data/events"); String[] files = dir.list(); String result = ""; if (files == null) { result = "No 'data/events' directory!"; return result; } for (int i = 0; i < files.length; i++) { File file = new File("data/events/" + files[i]); result += "" + file.getName() + "