l2j_mobius/trunk/dist/game/data/scripts/handlers/admincommandhandlers/AdminReload.java
2016-07-11 15:08:33 +00:00

323 lines
11 KiB
Java

/*
* This file is part of the L2J Mobius project.
*
* 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 <http://www.gnu.org/licenses/>.
*/
package handlers.admincommandhandlers;
import java.io.File;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.cache.HtmCache;
import com.l2jmobius.gameserver.data.sql.impl.CrestTable;
import com.l2jmobius.gameserver.data.sql.impl.TeleportLocationTable;
import com.l2jmobius.gameserver.data.xml.impl.AbilityPointsData;
import com.l2jmobius.gameserver.data.xml.impl.AdminData;
import com.l2jmobius.gameserver.data.xml.impl.AppearanceItemData;
import com.l2jmobius.gameserver.data.xml.impl.ArmorSetsData;
import com.l2jmobius.gameserver.data.xml.impl.BuyListData;
import com.l2jmobius.gameserver.data.xml.impl.DoorData;
import com.l2jmobius.gameserver.data.xml.impl.EnchantItemData;
import com.l2jmobius.gameserver.data.xml.impl.EnchantItemGroupsData;
import com.l2jmobius.gameserver.data.xml.impl.FishingData;
import com.l2jmobius.gameserver.data.xml.impl.ItemCrystalizationData;
import com.l2jmobius.gameserver.data.xml.impl.MultisellData;
import com.l2jmobius.gameserver.data.xml.impl.NpcData;
import com.l2jmobius.gameserver.data.xml.impl.OptionData;
import com.l2jmobius.gameserver.data.xml.impl.PrimeShopData;
import com.l2jmobius.gameserver.data.xml.impl.SayuneData;
import com.l2jmobius.gameserver.data.xml.impl.SkillData;
import com.l2jmobius.gameserver.data.xml.impl.TeleportersData;
import com.l2jmobius.gameserver.data.xml.impl.TransformData;
import com.l2jmobius.gameserver.datatables.ItemTable;
import com.l2jmobius.gameserver.handler.IAdminCommandHandler;
import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
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.ScriptEngineManager;
import com.l2jmobius.gameserver.util.Util;
/**
* @author NosBit
*/
public class AdminReload implements IAdminCommandHandler
{
private static final Logger LOGGER = Logger.getLogger(AdminReload.class.getName());
private static final String[] ADMIN_COMMANDS =
{
"admin_reload"
};
private static final String RELOAD_USAGE = "Usage: //reload <config|access|npc|quest [quest_id|quest_name]|walker|htm[l] [file|directory]|multisell|buylist|teleport|skill|item|door|effect|handler|enchant|options|fishing>";
@Override
public boolean useAdminCommand(String command, L2PcInstance activeChar)
{
final StringTokenizer st = new StringTokenizer(command, " ");
final String actualCommand = st.nextToken();
if (actualCommand.equalsIgnoreCase("admin_reload"))
{
if (!st.hasMoreTokens())
{
AdminHtml.showAdminHtml(activeChar, "reload.htm");
activeChar.sendMessage(RELOAD_USAGE);
return true;
}
final String type = st.nextToken();
switch (type.toLowerCase())
{
case "config":
{
Config.load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Configs.");
break;
}
case "access":
{
AdminData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Access.");
break;
}
case "npc":
{
NpcData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Npcs.");
break;
}
case "quest":
{
if (st.hasMoreElements())
{
final String value = st.nextToken();
if (!Util.isDigit(value))
{
QuestManager.getInstance().reload(value);
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Quest Name:" + value + ".");
}
else
{
final int questId = Integer.parseInt(value);
QuestManager.getInstance().reload(questId);
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Quest ID:" + questId + ".");
}
}
else
{
QuestManager.getInstance().reloadAllScripts();
activeChar.sendMessage("All scripts have been reloaded.");
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Quests.");
}
break;
}
case "walker":
{
WalkingManager.getInstance().load();
activeChar.sendMessage("All walkers have been reloaded");
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Walkers.");
break;
}
case "htm":
case "html":
{
if (st.hasMoreElements())
{
final String path = st.nextToken();
final File file = new File(Config.DATAPACK_ROOT, "data/html/" + path);
if (file.exists())
{
HtmCache.getInstance().reload(file);
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Htm File:" + file.getName() + ".");
}
else
{
activeChar.sendMessage("File or Directory does not exist.");
}
}
else
{
HtmCache.getInstance().reload();
activeChar.sendMessage("Cache[HTML]: " + HtmCache.getInstance().getMemoryUsage() + " megabytes on " + HtmCache.getInstance().getLoadedFiles() + " files loaded");
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Htms.");
}
break;
}
case "multisell":
{
MultisellData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Multisells.");
break;
}
case "buylist":
{
BuyListData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Buylists.");
break;
}
case "teleport":
{
TeleportLocationTable.getInstance().reloadAll();
TeleportersData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Teleports.");
break;
}
case "skill":
{
SkillData.getInstance().reload();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Skills.");
break;
}
case "item":
{
ItemTable.getInstance().reload();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Items.");
break;
}
case "door":
{
DoorData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Doors.");
break;
}
case "zone":
{
ZoneManager.getInstance().reload();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Zones.");
break;
}
case "cw":
{
CursedWeaponsManager.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Cursed Weapons.");
break;
}
case "crest":
{
CrestTable.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Crests.");
break;
}
case "effect":
{
try
{
ScriptEngineManager.getInstance().executeEffectMasterHandler();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded effect master handler.");
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Failed executing effect master handler!", e);
activeChar.sendMessage("Error reloading effect master handler!");
}
break;
}
case "handler":
{
try
{
ScriptEngineManager.getInstance().executeMasterHandler();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded master handler.");
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Failed executing master handler!", e);
activeChar.sendMessage("Error reloading master handler!");
}
break;
}
case "enchant":
{
EnchantItemGroupsData.getInstance().load();
EnchantItemData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded item enchanting data.");
break;
}
case "transform":
{
TransformData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded transform data.");
break;
}
case "crystalizable":
{
ItemCrystalizationData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded item crystalization data.");
break;
}
case "primeshop":
{
PrimeShopData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Prime Shop data.");
break;
}
case "ability":
{
AbilityPointsData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded ability points data.");
break;
}
case "appearance":
{
AppearanceItemData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded appearance item data.");
break;
}
case "sayune":
{
SayuneData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Sayune data.");
break;
}
case "sets":
{
ArmorSetsData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Armor sets data.");
break;
}
case "options":
{
OptionData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Options data.");
break;
}
case "fishing":
{
FishingData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Fishing data.");
break;
}
default:
{
activeChar.sendMessage(RELOAD_USAGE);
return true;
}
}
activeChar.sendMessage("WARNING: There are several known issues regarding this feature. Reloading server data during runtime is STRONGLY NOT RECOMMENDED for live servers, just for developing environments.");
}
return true;
}
@Override
public String[] getAdminCommandList()
{
return ADMIN_COMMANDS;
}
}