Synced ScriptEngineManager changes from Test to HighFive.
This commit is contained in:
		| @@ -31,7 +31,7 @@ import com.l2jmobius.gameserver.network.serverpackets.ExCubeGameTeamList; | ||||
|  * Handys Block Checker Event AI. | ||||
|  * @authors BiggBoss, Gigiikun | ||||
|  */ | ||||
| final class HandysBlockCheckerEvent extends Quest | ||||
| public final class HandysBlockCheckerEvent extends Quest | ||||
| { | ||||
| 	// Arena Managers | ||||
| 	private static final int A_MANAGER_1 = 32521; | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Fantasy Isle Parade | ||||
|  * @author JOJO, Pandragon | ||||
|  */ | ||||
| final class Parade extends AbstractNpcAI | ||||
| public final class Parade extends AbstractNpcAI | ||||
| { | ||||
| 	// @formatter:off | ||||
| 	final int[] ACTORS = | ||||
|   | ||||
| @@ -36,7 +36,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Talent Show AI. | ||||
|  * @author Kerberos | ||||
|  */ | ||||
| final class TalentShow extends AbstractNpcAI | ||||
| public final class TalentShow extends AbstractNpcAI | ||||
| { | ||||
| 	private static int MC = 32433; | ||||
| 	// @formatter:off | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Anais AI. | ||||
|  * @author nonom | ||||
|  */ | ||||
| final class Anais extends AbstractNpcAI | ||||
| public final class Anais extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int ANAIS = 25701; | ||||
|   | ||||
| @@ -30,7 +30,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Ballista AI. | ||||
|  * @author St3eT | ||||
|  */ | ||||
| final class Ballista extends AbstractNpcAI | ||||
| public final class Ballista extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int[] BALLISTA = | ||||
|   | ||||
| @@ -54,7 +54,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Beleth's AI. | ||||
|  * @author Treat, Sahar | ||||
|  */ | ||||
| final class Beleth extends AbstractNpcAI | ||||
| public final class Beleth extends AbstractNpcAI | ||||
| { | ||||
| 	// Status | ||||
| 	private static final int ALIVE = 0; | ||||
|   | ||||
| @@ -37,7 +37,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Core AI. | ||||
|  * @author DrLecter, Emperorc | ||||
|  */ | ||||
| final class Core extends AbstractNpcAI | ||||
| public final class Core extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int CORE = 29006; | ||||
| 	private static final int DEATH_KNIGHT = 29007; | ||||
|   | ||||
| @@ -28,7 +28,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * AI for Kamaloka (33) - Crimson Hatu Otis | ||||
|  * @author Gladicek | ||||
|  */ | ||||
| final class CrimsonHatuOtis extends AbstractNpcAI | ||||
| public final class CrimsonHatuOtis extends AbstractNpcAI | ||||
| { | ||||
| 	// Npc | ||||
| 	private static final int CRIMSON_HATU_OTIS = 18558; | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
| /** | ||||
|  * Dark Water Dragon's AI. | ||||
|  */ | ||||
| final class DarkWaterDragon extends AbstractNpcAI | ||||
| public final class DarkWaterDragon extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int DRAGON = 22267; | ||||
| 	private static final int SHADE1 = 22268; | ||||
|   | ||||
| @@ -26,7 +26,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Simple AI that manages special conditions for Divine Beast summon. | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| final class DivineBeast extends AbstractNpcAI | ||||
| public final class DivineBeast extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int DIVINE_BEAST = 14870; | ||||
| 	private static final int TRANSFORMATION_ID = 258; | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Manages minion's spawn, idle despawn and Teleportation Cube spawn. | ||||
|  * @author GKR | ||||
|  */ | ||||
| final class Epidos extends AbstractNpcAI | ||||
| public final class Epidos extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int[] EPIDOSES = | ||||
| 	{ | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Eva's Gift Box AI. | ||||
|  * @author St3eT | ||||
|  */ | ||||
| final class EvasGiftBox extends AbstractNpcAI | ||||
| public final class EvasGiftBox extends AbstractNpcAI | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int BOX = 32342; // Eva's Gift Box | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Frightened Ragna Orc AI. | ||||
|  * @author Gladicek, malyelfik | ||||
|  */ | ||||
| final class FrightenedRagnaOrc extends AbstractNpcAI | ||||
| public final class FrightenedRagnaOrc extends AbstractNpcAI | ||||
| { | ||||
| 	// NPC ID | ||||
| 	private static final int MOB_ID = 18807; | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Gordon AI | ||||
|  * @author TOFIZ, malyelfik | ||||
|  */ | ||||
| final class Gordon extends AbstractNpcAI | ||||
| public final class Gordon extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int GORDON = 29095; | ||||
| 	 | ||||
|   | ||||
| @@ -28,7 +28,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * </ul> | ||||
|  * @author Zealar | ||||
|  */ | ||||
| final class GraveRobbers extends AbstractNpcAI | ||||
| public final class GraveRobbers extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int GRAVE_ROBBER_SUMMONER = 22678; | ||||
| 	private static final int GRAVE_ROBBER_MEGICIAN = 22679; | ||||
|   | ||||
| @@ -45,7 +45,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Orfen's AI | ||||
|  * @author Emperorc | ||||
|  */ | ||||
| final class Orfen extends AbstractNpcAI | ||||
| public final class Orfen extends AbstractNpcAI | ||||
| { | ||||
| 	private static final Location[] POS = | ||||
| 	{ | ||||
|   | ||||
| @@ -45,7 +45,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Queen Ant's AI | ||||
|  * @author Emperorc | ||||
|  */ | ||||
| final class QueenAnt extends AbstractNpcAI | ||||
| public final class QueenAnt extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int QUEEN = 29001; | ||||
| 	private static final int LARVA = 29002; | ||||
|   | ||||
| @@ -30,7 +30,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Queen Shyeed AI | ||||
|  * @author malyelfik | ||||
|  */ | ||||
| final class QueenShyeed extends AbstractNpcAI | ||||
| public final class QueenShyeed extends AbstractNpcAI | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int SHYEED = 25671; | ||||
|   | ||||
| @@ -24,7 +24,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Ragna Orc Commander AI. | ||||
|  * @author Zealar | ||||
|  */ | ||||
| final class RagnaOrcCommander extends AbstractNpcAI | ||||
| public final class RagnaOrcCommander extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int RAGNA_ORC_COMMANDER = 22694; | ||||
| 	 | ||||
|   | ||||
| @@ -24,7 +24,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Ragna Orc Hero AI. | ||||
|  * @author Zealar | ||||
|  */ | ||||
| final class RagnaOrcHero extends AbstractNpcAI | ||||
| public final class RagnaOrcHero extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int RAGNA_ORC_HERO = 22693; | ||||
| 	 | ||||
|   | ||||
| @@ -24,7 +24,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Ragna Orc Seer AI. | ||||
|  * @author Zealar | ||||
|  */ | ||||
| final class RagnaOrcSeer extends AbstractNpcAI | ||||
| public final class RagnaOrcSeer extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int RAGNA_ORC_SEER = 22697; | ||||
| 	 | ||||
|   | ||||
| @@ -39,7 +39,7 @@ import ai.npc.AbstractNpcAI; | ||||
| /** | ||||
|  * @author Micr0, Zerox | ||||
|  */ | ||||
| final class ScarletVanHalisha extends AbstractNpcAI | ||||
| public final class ScarletVanHalisha extends AbstractNpcAI | ||||
| { | ||||
| 	private L2Character _target; | ||||
| 	private Skill _skill; | ||||
|   | ||||
| @@ -36,7 +36,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Sin Eater AI. | ||||
|  * @author St3eT. | ||||
|  */ | ||||
| final class SinEater extends AbstractNpcAI | ||||
| public final class SinEater extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int SIN_EATER = 12564; | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Manages Sin Wardens disappearing and chat. | ||||
|  * @author GKR | ||||
|  */ | ||||
| final class SinWardens extends AbstractNpcAI | ||||
| public final class SinWardens extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int[] SIN_WARDEN_MINIONS = | ||||
| 	{ | ||||
|   | ||||
| @@ -41,7 +41,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Venom AI on Rune Castle. | ||||
|  * @author nonom, MELERIX | ||||
|  */ | ||||
| final class Venom extends AbstractNpcAI | ||||
| public final class Venom extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int CASTLE = 8; // Rune | ||||
| 	 | ||||
|   | ||||
| @@ -31,7 +31,7 @@ import quests.Q00185_NikolasCooperation.Q00185_NikolasCooperation; | ||||
|  * Alarm AI for quests Art of Persuasion (184) and Nikola's Cooperation (185). | ||||
|  * @author Zoey76 | ||||
|  */ | ||||
| final class Alarm extends AbstractNpcAI | ||||
| public final class Alarm extends AbstractNpcAI | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int ALARM = 32367; | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Alexandria (Armor Merchant) AI. | ||||
|  * @author xban1x | ||||
|  */ | ||||
| final class Alexandria extends AbstractNpcAI | ||||
| public final class Alexandria extends AbstractNpcAI | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int ALEXANDRIA = 30098; | ||||
|   | ||||
| @@ -29,7 +29,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Arena Manager AI. | ||||
|  * @author St3eT | ||||
|  */ | ||||
| final class ArenaManager extends AbstractNpcAI | ||||
| public final class ArenaManager extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int[] ARENA_MANAGER = | ||||
|   | ||||
| @@ -29,7 +29,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Castle Ambassador AI. | ||||
|  * @author St3eT | ||||
|  */ | ||||
| final class CastleAmbassador extends AbstractNpcAI | ||||
| public final class CastleAmbassador extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	// @formatter:off | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Castle Blacksmith AI. | ||||
|  * @author malyelfik | ||||
|  */ | ||||
| final class CastleBlacksmith extends AbstractNpcAI | ||||
| public final class CastleBlacksmith extends AbstractNpcAI | ||||
| { | ||||
| 	// Blacksmith IDs | ||||
| 	private static final int[] NPCS = | ||||
|   | ||||
| @@ -25,7 +25,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Castle Siege Manager AI. | ||||
|  * @author St3eT | ||||
|  */ | ||||
| final class CastleSiegeManager extends AbstractNpcAI | ||||
| public final class CastleSiegeManager extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int[] SIEGE_MANAGER = | ||||
|   | ||||
| @@ -31,7 +31,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Castle Teleporter AI. | ||||
|  * @author malyelfik | ||||
|  */ | ||||
| final class CastleTeleporter extends AbstractNpcAI | ||||
| public final class CastleTeleporter extends AbstractNpcAI | ||||
| { | ||||
| 	// Teleporter IDs | ||||
| 	private static final int[] NPCS = | ||||
|   | ||||
| @@ -25,7 +25,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Castle Warehouse Keeper AI. | ||||
|  * @author malyelfik | ||||
|  */ | ||||
| final class CastleWarehouse extends AbstractNpcAI | ||||
| public final class CastleWarehouse extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int[] NPCS = | ||||
|   | ||||
| @@ -29,7 +29,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Clan Trader AI. | ||||
|  * @author St3eT | ||||
|  */ | ||||
| final class ClanTrader extends AbstractNpcAI | ||||
| public final class ClanTrader extends AbstractNpcAI | ||||
| { | ||||
| 	// Npc | ||||
| 	private static final int[] CLAN_TRADER = | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Fame Manager AI. | ||||
|  * @author St3eT | ||||
|  */ | ||||
| final class FameManager extends AbstractNpcAI | ||||
| public final class FameManager extends AbstractNpcAI | ||||
| { | ||||
| 	// Npc | ||||
| 	private static final int[] FAME_MANAGER = | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Forge of the Gods AI | ||||
|  * @author nonom, malyelfik | ||||
|  */ | ||||
| final class ForgeOfTheGods extends AbstractNpcAI | ||||
| public final class ForgeOfTheGods extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int[] FOG_MOBS = | ||||
|   | ||||
| @@ -29,7 +29,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Rooney AI | ||||
|  * @author malyelfik | ||||
|  */ | ||||
| final class Rooney extends AbstractNpcAI | ||||
| public final class Rooney extends AbstractNpcAI | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int ROONEY = 32049; | ||||
|   | ||||
| @@ -25,7 +25,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Fortress Archer Captain AI. | ||||
|  * @author St3eT | ||||
|  */ | ||||
| final class FortressArcherCaptain extends AbstractNpcAI | ||||
| public final class FortressArcherCaptain extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int[] ARCHER_CAPTAIN = | ||||
|   | ||||
| @@ -33,7 +33,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Fortress Siege Manager AI. | ||||
|  * @author St3eT | ||||
|  */ | ||||
| final class FortressSiegeManager extends AbstractNpcAI | ||||
| public final class FortressSiegeManager extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int[] MANAGERS = | ||||
|   | ||||
| @@ -26,7 +26,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Freya's Steward AI. | ||||
|  * @author Adry_85 | ||||
|  */ | ||||
| final class FreyasSteward extends AbstractNpcAI | ||||
| public final class FreyasSteward extends AbstractNpcAI | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int FREYAS_STEWARD = 32029; | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import quests.Q10286_ReunionWithSirra.Q10286_ReunionWithSirra; | ||||
|  * Jinia AI. | ||||
|  * @author Adry_85 | ||||
|  */ | ||||
| final class Jinia extends AbstractNpcAI | ||||
| public final class Jinia extends AbstractNpcAI | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int JINIA = 32781; | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Original Jython script by Emperorc and Kerberos_20. | ||||
|  * @authors Nyaran | ||||
|  */ | ||||
| final class KetraOrcSupport extends AbstractNpcAI | ||||
| public final class KetraOrcSupport extends AbstractNpcAI | ||||
| { | ||||
| 	private static class BuffsData | ||||
| 	{ | ||||
|   | ||||
| @@ -39,7 +39,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Monastery Minigame AI. | ||||
|  * @author nonom | ||||
|  */ | ||||
| final class Minigame extends AbstractNpcAI | ||||
| public final class Minigame extends AbstractNpcAI | ||||
| { | ||||
| 	private static final int SUMIEL = 32758; | ||||
| 	private static final int BURNER = 18913; | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * Original Jython script by Emperorc and Kerberos_20. | ||||
|  * @author Nyaran | ||||
|  */ | ||||
| final class VarkaSilenosSupport extends AbstractNpcAI | ||||
| public final class VarkaSilenosSupport extends AbstractNpcAI | ||||
| { | ||||
| 	private static class BuffsData | ||||
| 	{ | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import ai.npc.AbstractNpcAI; | ||||
|  * None of them provide actual class transfers, they only talk about it. | ||||
|  * @author jurchiks, xban1x | ||||
|  */ | ||||
| final class FirstClassTransferTalk extends AbstractNpcAI | ||||
| public final class FirstClassTransferTalk extends AbstractNpcAI | ||||
| { | ||||
| 	private static final Map<Integer, Race> MASTERS = new HashMap<>(); | ||||
| 	static | ||||
|   | ||||
| @@ -40,6 +40,7 @@ import com.l2jmobius.gameserver.model.Location; | ||||
| import com.l2jmobius.gameserver.model.TeleportWhereType; | ||||
| import com.l2jmobius.gameserver.model.actor.L2Npc; | ||||
| import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; | ||||
| import com.l2jmobius.gameserver.model.entity.Siegable; | ||||
| import com.l2jmobius.gameserver.model.entity.clanhall.ClanHallSiegeEngine; | ||||
| import com.l2jmobius.gameserver.model.entity.clanhall.SiegeStatus; | ||||
| import com.l2jmobius.gameserver.model.zone.type.L2ResidenceHallTeleportZone; | ||||
| @@ -498,17 +499,20 @@ public abstract class FlagWar extends ClanHallSiegeEngine | ||||
| 		} | ||||
| 		 | ||||
| 		// Schedule open doors closement and siege start in 2 minutes | ||||
| 		ThreadPoolManager.getInstance().scheduleGeneral(new CloseOutterDoorsTask(), 300000); | ||||
| 		ThreadPoolManager.getInstance().scheduleGeneral(new CloseOutterDoorsTask(this), 300000); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Runnable class to schedule doors closing and siege start. | ||||
| 	 * @author Zoey76 | ||||
| 	 */ | ||||
| 	private class CloseOutterDoorsTask implements Runnable | ||||
| 	protected class CloseOutterDoorsTask implements Runnable | ||||
| 	{ | ||||
| 		public CloseOutterDoorsTask() | ||||
| 		private final Siegable _siegable; | ||||
| 		 | ||||
| 		protected CloseOutterDoorsTask(Siegable clanHallSiege) | ||||
| 		{ | ||||
| 			_siegable = clanHallSiege; | ||||
| 		} | ||||
| 		 | ||||
| 		@Override | ||||
| @@ -520,7 +524,8 @@ public abstract class FlagWar extends ClanHallSiegeEngine | ||||
| 			} | ||||
| 			 | ||||
| 			_hall.getZone().banishNonSiegeParticipants(); | ||||
| 			_hall.getSiege().startSiege(); | ||||
| 			 | ||||
| 			_siegable.startSiege(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
|   | ||||
| @@ -16,12 +16,13 @@ | ||||
|  */ | ||||
| package handlers.admincommandhandlers; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.nio.file.Paths; | ||||
| import java.util.List; | ||||
| import java.util.Set; | ||||
| import java.util.StringTokenizer; | ||||
| import java.util.TreeSet; | ||||
|  | ||||
| import javax.script.ScriptException; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import com.l2jmobius.gameserver.handler.IAdminCommandHandler; | ||||
| import com.l2jmobius.gameserver.instancemanager.QuestManager; | ||||
| @@ -33,11 +34,12 @@ import com.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; | ||||
| import com.l2jmobius.gameserver.model.quest.Quest; | ||||
| import com.l2jmobius.gameserver.model.quest.QuestTimer; | ||||
| import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; | ||||
| import com.l2jmobius.gameserver.scripting.L2ScriptEngineManager; | ||||
| import com.l2jmobius.gameserver.scripting.ScriptEngineManager; | ||||
| import com.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| public class AdminQuest implements IAdminCommandHandler | ||||
| { | ||||
| 	public static final Logger LOGGER = Logger.getLogger(AdminQuest.class.getName()); | ||||
| 	private static final String[] ADMIN_COMMANDS = | ||||
| 	{ | ||||
| 		"admin_quest_reload", | ||||
| @@ -47,139 +49,89 @@ public class AdminQuest implements IAdminCommandHandler | ||||
| 		"admin_quest_info" | ||||
| 	}; | ||||
| 	 | ||||
| 	private Quest findScript(String script) | ||||
| 	{ | ||||
| 		if (Util.isDigit(script)) | ||||
| 		{ | ||||
| 			return QuestManager.getInstance().getQuest(Integer.parseInt(script)); | ||||
| 		} | ||||
| 		return QuestManager.getInstance().getQuest(script); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean useAdminCommand(String command, L2PcInstance activeChar) | ||||
| 	{ | ||||
| 		if (activeChar == null) | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
| 		 | ||||
| 		// syntax will either be: | ||||
| 		// //quest_reload <id> | ||||
| 		// //quest_reload <questName> | ||||
| 		// The questName MUST start with a non-numeric character for this to work, | ||||
| 		// regardless which of the two formats is used. | ||||
| 		// Example: //quest_reload orc_occupation_change_1 | ||||
| 		// Example: //quest_reload chests | ||||
| 		// Example: //quest_reload SagasSuperclass | ||||
| 		// Example: //quest_reload 12 | ||||
| 		if (command.startsWith("admin_quest_reload")) | ||||
| 		{ | ||||
| 			final String[] parts = command.split(" "); | ||||
| 			if (parts.length < 2) | ||||
| 			StringTokenizer st = new StringTokenizer(command); | ||||
| 			st.nextToken(); // skip command token | ||||
| 			 | ||||
| 			if (!st.hasMoreTokens()) | ||||
| 			{ | ||||
| 				activeChar.sendMessage("Usage: //quest_reload <questFolder>.<questSubFolders...>.questName> or //quest_reload <id>"); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				// try the first param as id | ||||
| 				try | ||||
| 				{ | ||||
| 					final int questId = Integer.parseInt(parts[1]); | ||||
| 					if (QuestManager.getInstance().reload(questId)) | ||||
| 					{ | ||||
| 						activeChar.sendMessage("Quest Reloaded Successfully."); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendMessage("Quest Reloaded Failed"); | ||||
| 					} | ||||
| 				} | ||||
| 				catch (NumberFormatException e) | ||||
| 				{ | ||||
| 					if (QuestManager.getInstance().reload(parts[1])) | ||||
| 					{ | ||||
| 						activeChar.sendMessage("Quest Reloaded Successfully."); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendMessage("Quest Reloaded Failed"); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		// script load should NOT be used in place of reload. If a script is already loaded | ||||
| 		// successfully, quest_reload ought to be used. The script_load command should only | ||||
| 		// be used for scripts that failed to load altogether (eg. due to errors) or that | ||||
| 		// did not at all exist during server boot. Using script_load to re-load a previously | ||||
| 		// loaded script may cause unpredictable script flow, minor loss of data, and more. | ||||
| 		// This provides a way to load new scripts without having to reboot the server. | ||||
| 		else if (command.startsWith("admin_script_load")) | ||||
| 		{ | ||||
| 			final String[] parts = command.split(" "); | ||||
| 			if (parts.length < 2) | ||||
| 			{ | ||||
| 				// activeChar.sendMessage("Example: //script_load <questFolder>/<questSubFolders...>/<filename>.<ext> "); | ||||
| 				activeChar.sendMessage("Example: //script_load quests/SagasSuperclass/__init__.py"); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				File file = new File(L2ScriptEngineManager.SCRIPT_FOLDER, parts[1]); | ||||
| 				// Trying to reload by script name. | ||||
| 				if (!file.exists()) | ||||
| 				{ | ||||
| 					final Quest quest = QuestManager.getInstance().getQuest(parts[1]); | ||||
| 					if (quest != null) | ||||
| 					{ | ||||
| 						file = new File(L2ScriptEngineManager.SCRIPT_FOLDER, quest.getClass().getName().replaceAll("\\.", "/") + ".java"); | ||||
| 					} | ||||
| 				} | ||||
| 				 | ||||
| 				// Reloading by full path | ||||
| 				if (file.isFile()) | ||||
| 				{ | ||||
| 					try | ||||
| 					{ | ||||
| 						L2ScriptEngineManager.getInstance().executeScript(file); | ||||
| 						 | ||||
| 						// This part should be called only when the script is successfully loaded. | ||||
| 						activeChar.sendMessage("Script Successfully Loaded."); | ||||
| 					} | ||||
| 					catch (ScriptException e) | ||||
| 					{ | ||||
| 						activeChar.sendMessage("Failed loading: " + parts[1]); | ||||
| 						L2ScriptEngineManager.getInstance().reportScriptFileError(file, e); | ||||
| 					} | ||||
| 					catch (Exception e) | ||||
| 					{ | ||||
| 						activeChar.sendMessage("Failed loading: " + parts[1]); | ||||
| 					} | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					activeChar.sendMessage("File Not Found: " + parts[1]); | ||||
| 				} | ||||
| 				activeChar.sendMessage("Usage: //quest_reload <questName> or <questId>"); | ||||
| 				return false; | ||||
| 			} | ||||
| 			 | ||||
| 			String script = st.nextToken(); | ||||
| 			Quest quest = findScript(script); | ||||
| 			if (quest == null) | ||||
| 			{ | ||||
| 				activeChar.sendMessage("The script " + script + " couldn't be found!"); | ||||
| 				return false; | ||||
| 			} | ||||
| 			 | ||||
| 			if (!quest.reload()) | ||||
| 			{ | ||||
| 				activeChar.sendMessage("Failed to reload " + script + "!"); | ||||
| 				return false; | ||||
| 			} | ||||
| 			 | ||||
| 			activeChar.sendMessage("Script successful reloaded."); | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_script_load")) | ||||
| 		{ | ||||
| 			StringTokenizer st = new StringTokenizer(command); | ||||
| 			st.nextToken(); // skip command token | ||||
| 			 | ||||
| 			if (!st.hasMoreTokens()) | ||||
| 			{ | ||||
| 				activeChar.sendMessage("Usage: //script_load path/to/script.java"); | ||||
| 				return false; | ||||
| 			} | ||||
| 			 | ||||
| 			String script = st.nextToken(); | ||||
| 			try | ||||
| 			{ | ||||
| 				ScriptEngineManager.getInstance().executeScript(Paths.get(script)); | ||||
| 				activeChar.sendMessage("Script loaded seccessful!"); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 				activeChar.sendMessage("Failed to load script!"); | ||||
| 				LOGGER.log(Level.WARNING, "Failed to load script " + script + "!", e); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_script_unload")) | ||||
| 		{ | ||||
| 			final String[] parts = command.split(" "); | ||||
| 			if (parts.length < 2) | ||||
| 			StringTokenizer st = new StringTokenizer(command); | ||||
| 			st.nextToken(); // skip command token | ||||
| 			 | ||||
| 			if (!st.hasMoreTokens()) | ||||
| 			{ | ||||
| 				activeChar.sendMessage("Example: //script_unload questName/questId"); | ||||
| 				activeChar.sendMessage("Usage: //script_load path/to/script.java"); | ||||
| 				return false; | ||||
| 			} | ||||
| 			else | ||||
| 			 | ||||
| 			String script = st.nextToken(); | ||||
| 			Quest quest = findScript(script); | ||||
| 			if (quest == null) | ||||
| 			{ | ||||
| 				final Quest q = Util.isDigit(parts[1]) ? QuestManager.getInstance().getQuest(Integer.parseInt(parts[1])) : QuestManager.getInstance().getQuest(parts[1]); | ||||
| 				 | ||||
| 				if (q != null) | ||||
| 				{ | ||||
| 					if (q.unload()) | ||||
| 					{ | ||||
| 						activeChar.sendMessage("Script Successfully Unloaded [" + q.getName() + "/" + q.getId() + "]"); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendMessage("Failed unloading [" + q.getName() + "/" + q.getId() + "]."); | ||||
| 					} | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					activeChar.sendMessage("The quest [" + parts[1] + "] was not found!."); | ||||
| 				} | ||||
| 				activeChar.sendMessage("The script " + script + " couldn't be found!"); | ||||
| 				return false; | ||||
| 			} | ||||
| 			 | ||||
| 			quest.unload(); | ||||
| 			activeChar.sendMessage("Script successful unloaded!"); | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_show_quests")) | ||||
| 		{ | ||||
|   | ||||
| @@ -18,8 +18,8 @@ package handlers.admincommandhandlers; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.util.StringTokenizer; | ||||
|  | ||||
| import javax.script.ScriptException; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
| import com.l2jmobius.gameserver.cache.HtmCache; | ||||
| @@ -41,7 +41,7 @@ import com.l2jmobius.gameserver.instancemanager.QuestManager; | ||||
| import com.l2jmobius.gameserver.instancemanager.WalkingManager; | ||||
| import com.l2jmobius.gameserver.instancemanager.ZoneManager; | ||||
| import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; | ||||
| import com.l2jmobius.gameserver.scripting.L2ScriptEngineManager; | ||||
| import com.l2jmobius.gameserver.scripting.ScriptEngineManager; | ||||
| import com.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| /** | ||||
| @@ -49,6 +49,8 @@ import com.l2jmobius.gameserver.util.Util; | ||||
|  */ | ||||
| public class AdminReload implements IAdminCommandHandler | ||||
| { | ||||
| 	private static final Logger LOGGER = Logger.getLogger(AdminReload.class.getName()); | ||||
| 	 | ||||
| 	private static final String[] ADMIN_COMMANDS = | ||||
| 	{ | ||||
| 		"admin_reload" | ||||
| @@ -204,31 +206,29 @@ public class AdminReload implements IAdminCommandHandler | ||||
| 				} | ||||
| 				case "effect": | ||||
| 				{ | ||||
| 					final File file = new File(L2ScriptEngineManager.SCRIPT_FOLDER, "handlers/EffectMasterHandler.java"); | ||||
| 					try | ||||
| 					{ | ||||
| 						L2ScriptEngineManager.getInstance().executeScript(file); | ||||
| 						AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Effects."); | ||||
| 						ScriptEngineManager.getInstance().executeEffectMasterHandler(); | ||||
| 						AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded effect master handler."); | ||||
| 					} | ||||
| 					catch (ScriptException e) | ||||
| 					catch (Exception e) | ||||
| 					{ | ||||
| 						L2ScriptEngineManager.getInstance().reportScriptFileError(file, e); | ||||
| 						activeChar.sendMessage("There was an error while loading handlers."); | ||||
| 						LOGGER.log(Level.WARNING, "Failed executing effect master handler!", e); | ||||
| 						activeChar.sendMessage("Error reloading effect master handler!"); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case "handler": | ||||
| 				{ | ||||
| 					final File file = new File(L2ScriptEngineManager.SCRIPT_FOLDER, "handlers/MasterHandler.java"); | ||||
| 					try | ||||
| 					{ | ||||
| 						L2ScriptEngineManager.getInstance().executeScript(file); | ||||
| 						AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Handlers."); | ||||
| 						ScriptEngineManager.getInstance().executeMasterHandler(); | ||||
| 						AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded master handler."); | ||||
| 					} | ||||
| 					catch (ScriptException e) | ||||
| 					catch (Exception e) | ||||
| 					{ | ||||
| 						L2ScriptEngineManager.getInstance().reportScriptFileError(file, e); | ||||
| 						activeChar.sendMessage("There was an error while loading handlers."); | ||||
| 						LOGGER.log(Level.WARNING, "Failed executing master handler!", e); | ||||
| 						activeChar.sendMessage("Error reloading master handler!"); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -261,5 +261,4 @@ public class AdminReload implements IAdminCommandHandler | ||||
| 	{ | ||||
| 		return ADMIN_COMMANDS; | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
|   | ||||
| @@ -16,12 +16,11 @@ | ||||
|  */ | ||||
| package handlers.telnethandlers; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.PrintWriter; | ||||
| import java.net.Socket; | ||||
| import java.nio.file.Paths; | ||||
| import java.util.StringTokenizer; | ||||
|  | ||||
| import javax.script.ScriptException; | ||||
| import java.util.logging.Level; | ||||
|  | ||||
| import com.l2jmobius.gameserver.cache.HtmCache; | ||||
| import com.l2jmobius.gameserver.data.sql.impl.TeleportLocationTable; | ||||
| @@ -36,7 +35,7 @@ import com.l2jmobius.gameserver.instancemanager.QuestManager; | ||||
| import com.l2jmobius.gameserver.instancemanager.RaidBossSpawnManager; | ||||
| import com.l2jmobius.gameserver.instancemanager.ZoneManager; | ||||
| import com.l2jmobius.gameserver.model.L2World; | ||||
| import com.l2jmobius.gameserver.scripting.L2ScriptEngineManager; | ||||
| import com.l2jmobius.gameserver.scripting.ScriptEngineManager; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
| @@ -116,29 +115,16 @@ public class ReloadHandler implements ITelnetHandler | ||||
| 				{ | ||||
| 					try | ||||
| 					{ | ||||
| 						final String questPath = st.hasMoreTokens() ? st.nextToken() : ""; | ||||
| 						String questPath = st.hasMoreTokens() ? st.nextToken() : ""; | ||||
| 						 | ||||
| 						final File file = new File(L2ScriptEngineManager.SCRIPT_FOLDER, questPath); | ||||
| 						if (file.isFile()) | ||||
| 						try | ||||
| 						{ | ||||
| 							try | ||||
| 							{ | ||||
| 								L2ScriptEngineManager.getInstance().executeScript(file); | ||||
| 								_print.println(file.getName() + " was successfully loaded!\n"); | ||||
| 							} | ||||
| 							catch (ScriptException e) | ||||
| 							{ | ||||
| 								_print.println("Failed loading: " + questPath); | ||||
| 								L2ScriptEngineManager.getInstance().reportScriptFileError(file, e); | ||||
| 							} | ||||
| 							catch (Exception e) | ||||
| 							{ | ||||
| 								_print.println("Failed loading: " + questPath); | ||||
| 							} | ||||
| 							ScriptEngineManager.getInstance().executeScript(Paths.get(questPath)); | ||||
| 							_print.println(questPath + " was successfully loaded!\n"); | ||||
| 						} | ||||
| 						else | ||||
| 						catch (Exception e) | ||||
| 						{ | ||||
| 							_print.println(file.getName() + " is not a file in: " + questPath); | ||||
| 							_log.log(Level.WARNING, "Failed to execute script!", e); | ||||
| 						} | ||||
| 					} | ||||
| 					catch (StringIndexOutOfBoundsException e) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDev
					MobiusDev