Synced ScriptEngineManager changes from Test to HighFive.

This commit is contained in:
MobiusDev
2016-10-21 22:06:56 +00:00
parent 34fc592ced
commit 42019a897a
70 changed files with 1695 additions and 749 deletions

View File

@@ -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"))
{

View File

@@ -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;
}
}

View File

@@ -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)