177 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2004-2014 L2J DataPack
 | |
|  * 
 | |
|  * This file is part of L2J DataPack.
 | |
|  * 
 | |
|  * L2J DataPack 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.
 | |
|  * 
 | |
|  * L2J DataPack 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 <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| package handlers.bypasshandlers;
 | |
| 
 | |
| import java.util.logging.Level;
 | |
| 
 | |
| import com.l2jserver.gameserver.handler.IBypassHandler;
 | |
| import com.l2jserver.gameserver.instancemanager.SiegeManager;
 | |
| import com.l2jserver.gameserver.model.Location;
 | |
| import com.l2jserver.gameserver.model.actor.L2Character;
 | |
| import com.l2jserver.gameserver.model.actor.L2Npc;
 | |
| import com.l2jserver.gameserver.model.actor.instance.L2ObservationInstance;
 | |
| import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 | |
| import com.l2jserver.gameserver.network.SystemMessageId;
 | |
| import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 | |
| import com.l2jserver.gameserver.network.serverpackets.ItemList;
 | |
| 
 | |
| public class Observation implements IBypassHandler
 | |
| {
 | |
| 	private static final String[] COMMANDS =
 | |
| 	{
 | |
| 		"observesiege",
 | |
| 		"observeoracle",
 | |
| 		"observe"
 | |
| 	};
 | |
| 	
 | |
| 	private static final int[][] LOCATIONS = new int[][]
 | |
| 	{
 | |
| 		//@formatter:off
 | |
| 		// Gludio
 | |
| 		{-18347, 114000, -2360, 500},
 | |
| 		{-18347, 113255, -2447, 500},
 | |
| 		// Dion
 | |
| 		{22321, 155785, -2604, 500},
 | |
| 		{22321, 156492, -2627, 500},
 | |
| 		// Giran
 | |
| 		{112000, 144864, -2445, 500},
 | |
| 		{112657, 144864, -2525, 500},
 | |
| 		// Innadril
 | |
| 		{116260, 244600, -775, 500},
 | |
| 		{116260, 245264, -721, 500},
 | |
| 		// Oren
 | |
| 		{78100, 36950, -2242, 500},
 | |
| 		{78744, 36950, -2244, 500},
 | |
| 		// Aden
 | |
| 		{147457, 9601, -233, 500},
 | |
| 		{147457, 8720, -252, 500},
 | |
| 		// Goddard
 | |
| 		{147542, -43543, -1328, 500},
 | |
| 		{147465, -45259, -1328, 500},
 | |
| 		// Rune
 | |
| 		{20598, -49113, -300, 500},
 | |
| 		{18702, -49150, -600, 500},
 | |
| 		// Schuttgart
 | |
| 		{77541, -147447, 353, 500},
 | |
| 		{77541, -149245, 353, 500},
 | |
| 		// Coliseum
 | |
| 		{148416, 46724, -3000, 80},
 | |
| 		{149500, 46724, -3000, 80},
 | |
| 		{150511, 46724, -3000, 80},
 | |
| 		// Dusk
 | |
| 		{-77200, 88500, -4800, 500},
 | |
| 		{-75320, 87135, -4800, 500},
 | |
| 		{-76840, 85770, -4800, 500},
 | |
| 		{-76840, 85770, -4800, 500},
 | |
| 		{-79950, 85165, -4800, 500},
 | |
| 		// Dawn
 | |
| 		{-79185, 112725, -4300, 500},
 | |
| 		{-76175, 113330, -4300, 500},
 | |
| 		{-74305, 111965, -4300, 500},
 | |
| 		{-75915, 110600, -4300, 500},
 | |
| 		{-78930, 110005, -4300, 500}
 | |
| 		//@formatter:on
 | |
| 	};
 | |
| 	
 | |
| 	@Override
 | |
| 	public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
 | |
| 	{
 | |
| 		if (!(target instanceof L2ObservationInstance))
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 		
 | |
| 		if (activeChar.hasSummon())
 | |
| 		{
 | |
| 			activeChar.sendPacket(SystemMessageId.YOU_MAY_NOT_OBSERVE_A_SIEGE_WITH_A_PET_OR_SERVITOR_SUMMONED);
 | |
| 			return false;
 | |
| 		}
 | |
| 		if (activeChar.isOnEvent())
 | |
| 		{
 | |
| 			activeChar.sendMessage("Cannot use while current Event");
 | |
| 			return false;
 | |
| 		}
 | |
| 		
 | |
| 		String _command = command.split(" ")[0].toLowerCase();
 | |
| 		final int param;
 | |
| 		try
 | |
| 		{
 | |
| 			param = Integer.parseInt(command.split(" ")[1]);
 | |
| 		}
 | |
| 		catch (NumberFormatException nfe)
 | |
| 		{
 | |
| 			_log.log(Level.WARNING, "Exception in " + getClass().getSimpleName(), nfe);
 | |
| 			return false;
 | |
| 		}
 | |
| 		
 | |
| 		if ((param < 0) || (param > (LOCATIONS.length - 1)))
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 		final int[] locCost = LOCATIONS[param];
 | |
| 		
 | |
| 		Location loc = new Location(locCost[0], locCost[1], locCost[2]);
 | |
| 		final long cost = locCost[3];
 | |
| 		
 | |
| 		switch (_command)
 | |
| 		{
 | |
| 			case "observesiege":
 | |
| 			{
 | |
| 				if (SiegeManager.getInstance().getSiege(loc) != null)
 | |
| 				{
 | |
| 					doObserve(activeChar, (L2Npc) target, loc, cost);
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					activeChar.sendPacket(SystemMessageId.OBSERVATION_IS_ONLY_POSSIBLE_DURING_A_SIEGE);
 | |
| 				}
 | |
| 				return true;
 | |
| 			}
 | |
| 			case "observeoracle": // Oracle Dusk/Dawn
 | |
| 			{
 | |
| 				doObserve(activeChar, (L2Npc) target, loc, cost);
 | |
| 				return true;
 | |
| 			}
 | |
| 			case "observe": // Observe
 | |
| 			{
 | |
| 				doObserve(activeChar, (L2Npc) target, loc, cost);
 | |
| 				return true;
 | |
| 			}
 | |
| 		}
 | |
| 		return false;
 | |
| 	}
 | |
| 	
 | |
| 	private static final void doObserve(final L2PcInstance player, final L2Npc npc, final Location pos, final long cost)
 | |
| 	{
 | |
| 		if (player.reduceAdena("Broadcast", cost, npc, true))
 | |
| 		{
 | |
| 			// enter mode
 | |
| 			player.enterObserverMode(pos);
 | |
| 			player.sendPacket(new ItemList(player, false));
 | |
| 		}
 | |
| 		player.sendPacket(ActionFailed.STATIC_PACKET);
 | |
| 	}
 | |
| 	
 | |
| 	@Override
 | |
| 	public String[] getBypassList()
 | |
| 	{
 | |
| 		return COMMANDS;
 | |
| 	}
 | |
| }
 | 
