316 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			316 lines
		
	
	
		
			10 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.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 "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;
 | |
| 	}
 | |
| }
 | 
