Преглед на файлове

Multilanguage system, require DP update.

_DS_ преди 15 години
родител
ревизия
0027a93795
променени са 61 файла, в които са добавени 601 реда и са изтрити 458 реда
  1. 14 0
      L2_GameServer/java/com/l2jserver/Config.java
  2. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/Announcements.java
  3. 63 39
      L2_GameServer/java/com/l2jserver/gameserver/cache/HtmCache.java
  4. 3 3
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/TopBBSManager.java
  5. 4 4
      L2_GameServer/java/com/l2jserver/gameserver/instancemanager/DimensionalRiftManager.java
  6. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/instancemanager/FourSepulchersManager.java
  7. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/instancemanager/PetitionManager.java
  8. 17 17
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Npc.java
  9. 19 19
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2AuctioneerInstance.java
  10. 3 3
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleBlacksmithInstance.java
  11. 78 78
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleChamberlainInstance.java
  12. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleMagicianInstance.java
  13. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleTeleporterInstance.java
  14. 3 3
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleWarehouseInstance.java
  15. 8 8
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ClanHallDoormenInstance.java
  16. 75 75
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ClanHallManagerInstance.java
  17. 5 5
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ClanTraderInstance.java
  18. 8 8
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ClassMasterInstance.java
  19. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2DawnPriestInstance.java
  20. 3 3
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2DoormenInstance.java
  21. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2DungeonGatekeeperInstance.java
  22. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2DuskPriestInstance.java
  23. 7 7
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FameManagerInstance.java
  24. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FestivalGuideInstance.java
  25. 3 3
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortDoormenInstance.java
  26. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortEnvoyInstance.java
  27. 6 6
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortLogisticsInstance.java
  28. 57 57
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortManagerInstance.java
  29. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortSiegeNpcInstance.java
  30. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortSupportCaptainInstance.java
  31. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ManorManagerInstance.java
  32. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2MercManagerInstance.java
  33. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2MerchantInstance.java
  34. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2MerchantSummonInstance.java
  35. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java
  36. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ObservationInstance.java
  37. 9 9
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2OlympiadManagerInstance.java
  38. 51 7
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  39. 5 5
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PetManagerInstance.java
  40. 5 5
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2RaceManagerInstance.java
  41. 3 3
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java
  42. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2SiegeNpcInstance.java
  43. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2SignsPriestInstance.java
  44. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2StaticObjectInstance.java
  45. 4 4
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2TeleporterInstance.java
  46. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2TransformManagerInstance.java
  47. 3 3
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2TvTEventNpcInstance.java
  48. 20 20
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java
  49. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2WarehouseInstance.java
  50. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2WeddingManagerInstance.java
  51. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2WyvernManagerInstance.java
  52. 10 10
      L2_GameServer/java/com/l2jserver/gameserver/model/entity/TvTEvent.java
  53. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java
  54. 19 8
      L2_GameServer/java/com/l2jserver/gameserver/model/quest/Quest.java
  55. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/quest/QuestState.java
  56. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
  57. 31 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestBypassToServer.java
  58. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestLinkHtml.java
  59. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/NpcHtmlMessage.java
  60. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/NpcQuestHtmlMessage.java
  61. 21 0
      L2_GameServer/java/config/l2jmods.properties

+ 14 - 0
L2_GameServer/java/com/l2jserver/Config.java

@@ -657,6 +657,10 @@ public final class Config
 	public static String ANNOUNCE_PK_MSG;
 	public static String ANNOUNCE_PVP_MSG;
 	public static boolean L2JMOD_CHAT_ADMIN;
+	public static boolean L2JMOD_MULTILANG_ENABLE;
+	public static List<String> L2JMOD_MULTILANG_ALLOWED = new ArrayList<String>();
+	public static String L2JMOD_MULTILANG_DEFAULT;
+	public static boolean L2JMOD_MULTILANG_VOICED_ALLOW;
 
 	//--------------------------------------------------
 	// NPC Settings
@@ -2171,6 +2175,16 @@ public final class Config
 					ANNOUNCE_PVP_MSG = L2JModSettings.getProperty("AnnouncePvpMsg", "$killer has defeated $target");
 					
 					L2JMOD_CHAT_ADMIN = Boolean.parseBoolean(L2JModSettings.getProperty("ChatAdmin", "false"));
+
+					L2JMOD_MULTILANG_ENABLE = Boolean.parseBoolean(L2JModSettings.getProperty("MultiLangEnable", "false"));
+					String[] allowed = L2JModSettings.getProperty("MultiLangAllowed", "en").split(";");
+					L2JMOD_MULTILANG_ALLOWED = new ArrayList<String>(allowed.length);
+					for (String lang : allowed)
+						L2JMOD_MULTILANG_ALLOWED.add(lang);
+					L2JMOD_MULTILANG_DEFAULT = L2JModSettings.getProperty("MultiLangDefault", "en");
+					if (!L2JMOD_MULTILANG_ALLOWED.contains(L2JMOD_MULTILANG_DEFAULT))
+						_log.warning("MultiLang[Config.load()]: default language: " + L2JMOD_MULTILANG_DEFAULT + " is not in allowed list !");
+					L2JMOD_MULTILANG_VOICED_ALLOW = Boolean.parseBoolean(L2JModSettings.getProperty("MultiLangVoiceCommand", "True"));
 				}
 				catch (Exception e)
 				{

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/Announcements.java

@@ -114,7 +114,7 @@ public class Announcements
 	
 	public void listAnnouncements(L2PcInstance activeChar)
 	{
-		String content = HtmCache.getInstance().getHtmForce("data/html/admin/announce.htm");
+		String content = HtmCache.getInstance().getHtmForce(activeChar.getHtmlPrefix(), "data/html/admin/announce.htm");
 		NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
 		adminReply.setHtml(content);
 		final StringBuilder replyMSG = StringUtil.startAppend(500, "<br>");

+ 63 - 39
L2_GameServer/java/com/l2jserver/gameserver/cache/HtmCache.java

@@ -18,6 +18,7 @@ import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileFilter;
 import java.io.FileInputStream;
+import java.util.Map;
 import java.util.logging.Logger;
 
 import com.l2jserver.Config;
@@ -32,28 +33,28 @@ import javolution.util.FastMap;
 public class HtmCache
 {
 	private static Logger _log = Logger.getLogger(HtmCache.class.getName());
-	
-	private FastMap<Integer, String> _cache;
-	
+
+	private Map<Integer, String> _cache;
+
 	private int _loadedFiles;
 	private long _bytesBuffLen;
-	
+
 	public static HtmCache getInstance()
 	{
 		return SingletonHolder._instance;
 	}
-	
+
 	private HtmCache()
 	{
 		_cache = new FastMap<Integer, String>();
 		reload();
 	}
-	
+
 	public void reload()
 	{
 		reload(Config.DATAPACK_ROOT);
 	}
-	
+
 	public void reload(File f)
 	{
 		if (!Config.LAZY_CACHE)
@@ -70,23 +71,23 @@ public class HtmCache
 			_log.info("Cache[HTML]: Running lazy cache");
 		}
 	}
-	
+
 	public void reloadPath(File f)
 	{
 		parseDir(f);
 		_log.info("Cache[HTML]: Reloaded specified path.");
 	}
-	
+
 	public double getMemoryUsage()
 	{
 		return ((float) _bytesBuffLen / 1048576);
 	}
-	
+
 	public int getLoadedFiles()
 	{
 		return _loadedFiles;
 	}
-	
+
 	class HtmFilter implements FileFilter
 	{
 		public boolean accept(File file)
@@ -98,7 +99,7 @@ public class HtmCache
 			return true;
 		}
 	}
-	
+
 	private void parseDir(File dir)
 	{
 		FileFilter filter = new HtmFilter();
@@ -112,32 +113,32 @@ public class HtmCache
 				parseDir(file);
 		}
 	}
-	
+
 	public String loadFile(File file)
 	{
-		HtmFilter filter = new HtmFilter();
-		
+		final String relpath = Util.getRelativePath(Config.DATAPACK_ROOT, file);
+		final int hashcode = relpath.hashCode();
+
+		final HtmFilter filter = new HtmFilter();
+
 		if (file.exists() && filter.accept(file) && !file.isDirectory())
 		{
 			String content;
 			FileInputStream fis = null;
-			
+
 			try
 			{
 				fis = new FileInputStream(file);
 				BufferedInputStream bis = new BufferedInputStream(fis);
 				int bytes = bis.available();
 				byte[] raw = new byte[bytes];
-				
+
 				bis.read(raw);
 				content = new String(raw, "UTF-8");
 				content = content.replaceAll("\r\n", "\n");
-				
-				String relpath = Util.getRelativePath(Config.DATAPACK_ROOT, file);
-				int hashcode = relpath.hashCode();
-				
+
 				String oldContent = _cache.get(hashcode);
-				
+
 				if (oldContent == null)
 				{
 					_bytesBuffLen += bytes;
@@ -147,9 +148,9 @@ public class HtmCache
 				{
 					_bytesBuffLen = _bytesBuffLen - oldContent.length() + bytes;
 				}
-				
+
 				_cache.put(hashcode, content);
-				
+
 				return content;
 			}
 			catch (Exception e)
@@ -167,38 +168,61 @@ public class HtmCache
 				}
 			}
 		}
-		
+
 		return null;
 	}
-	
-	public String getHtmForce(String path)
+
+	public String getHtmForce(String prefix, String path)
 	{
-		String content = getHtm(path);
-		
+		String content = getHtm(prefix, path);
+
 		if (content == null)
 		{
 			content = "<html><body>My text is missing:<br>" + path + "</body></html>";
 			_log.warning("Cache[HTML]: Missing HTML page: " + path);
 		}
-		
+
 		return content;
 	}
-	
-	public String getHtm(String path)
+
+	public String getHtm(String prefix, String path)
 	{
-		String content = _cache.get(path.hashCode());
-		
+		String newPath = null;
+		String content;
+		if (prefix != null && !prefix.isEmpty())
+		{
+			newPath = prefix + path;
+			content = getHtm(newPath);
+			if (content != null)
+				return content;
+		}
+
+		content = getHtm(path);
+		if (content != null && newPath != null)
+			_cache.put(newPath.hashCode(), content);
+
+		return content;
+	}
+
+	private String getHtm(String path)
+	{
+		if (path == null || path.isEmpty())
+			return ""; // avoid possible NPE
+
+		final int hashCode = path.hashCode();
+		String content = _cache.get(hashCode);
+
 		if (Config.LAZY_CACHE && content == null)
 			content = loadFile(new File(Config.DATAPACK_ROOT, path));
-		
+
 		return content;
 	}
-	
+
 	public boolean contains(String path)
 	{
 		return _cache.containsKey(path.hashCode());
 	}
-	
+
 	/**
 	 * Check if an HTM exists and can be loaded
 	 * @param
@@ -208,13 +232,13 @@ public class HtmCache
 	{
 		File file = new File(path);
 		HtmFilter filter = new HtmFilter();
-		
+
 		if (file.exists() && filter.accept(file) && !file.isDirectory())
 			return true;
 		
 		return false;
 	}
-	
+
 	@SuppressWarnings("synthetic-access")
 	private static class SingletonHolder
 	{

+ 3 - 3
L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/TopBBSManager.java

@@ -36,7 +36,7 @@ public class TopBBSManager extends BaseBBSManager
 	{
 		if (command.equals("_bbstop"))
 		{
-			String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
+			String content = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/index.htm");
 			if (content == null)
 			{
 				content = "<html><body><br><br><center>404 :File Not foud: 'data/html/CommunityBoard/index.htm' </center></body></html>";
@@ -45,7 +45,7 @@ public class TopBBSManager extends BaseBBSManager
 		}
 		else if (command.equals("_bbshome"))
 		{
-			String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
+			String content = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/index.htm");
 			if (content == null)
 			{
 				content = "<html><body><br><br><center>404 :File Not foud: 'data/html/CommunityBoard/index.htm' </center></body></html>";
@@ -57,7 +57,7 @@ public class TopBBSManager extends BaseBBSManager
 			StringTokenizer st = new StringTokenizer(command, ";");
 			st.nextToken();
 			int idp = Integer.parseInt(st.nextToken());
-			String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/" + idp + ".htm");
+			String content = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/" + idp + ".htm");
 			if (content == null)
 			{
 				content = "<html><body><br><br><center>404 :File Not foud: 'data/html/CommunityBoard/" + idp

+ 4 - 4
L2_GameServer/java/com/l2jserver/gameserver/instancemanager/DimensionalRiftManager.java

@@ -297,7 +297,7 @@ public class DimensionalRiftManager
 		if (player.getParty().getMemberCount() < Config.RIFT_MIN_PARTY_SIZE)
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-			html.setFile("data/html/seven_signs/rift/SmallParty.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/seven_signs/rift/SmallParty.htm");
 			html.replace("%npc_name%", npc.getName());
 			html.replace("%count%", Integer.toString(Config.RIFT_MIN_PARTY_SIZE));
 			player.sendPacket(html);
@@ -354,7 +354,7 @@ public class DimensionalRiftManager
 		if (!canPass)
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-			html.setFile("data/html/seven_signs/rift/NoFragments.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/seven_signs/rift/NoFragments.htm");
 			html.replace("%npc_name%", npc.getName());
 			html.replace("%count%", Integer.toString(count));
 			player.sendPacket(html);
@@ -367,7 +367,7 @@ public class DimensionalRiftManager
 			if (!p.destroyItem("RiftEntrance", i, count, null, false))
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-				html.setFile("data/html/seven_signs/rift/NoFragments.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/seven_signs/rift/NoFragments.htm");
 				html.replace("%npc_name%", npc.getName());
 				html.replace("%count%", Integer.toString(count));
 				player.sendPacket(html);
@@ -530,7 +530,7 @@ public class DimensionalRiftManager
 	public void showHtmlFile(L2PcInstance player, String file, L2Npc npc)
 	{
 		NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-		html.setFile(file);
+		html.setFile(player.getHtmlPrefix(), file);
 		html.replace("%npc_name%", npc.getName());
 		player.sendPacket(html);
 	}

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/instancemanager/FourSepulchersManager.java

@@ -1808,7 +1808,7 @@ public class FourSepulchersManager
 	public void showHtmlFile(L2PcInstance player, String file, L2Npc npc, L2PcInstance member)
 	{
 		NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-		html.setFile("data/html/SepulcherNpc/" + file);
+		html.setFile(player.getHtmlPrefix(), "data/html/SepulcherNpc/" + file);
 		if (member != null)
 			html.replace("%member%", member.getName());
 		player.sendPacket(html);

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/instancemanager/PetitionManager.java

@@ -571,7 +571,7 @@ public final class PetitionManager
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
 
 		NpcHtmlMessage html = new NpcHtmlMessage(0);
-		html.setFile("data/html/admin/petition.htm");
+		html.setFile(activeChar.getHtmlPrefix(), "data/html/admin/petition.htm");
 		html.replace("%petition%", String.valueOf(currPetition.getId()));
 		html.replace("%time%", dateFormat.format(new Date(currPetition.getSubmitTime())));
 		html.replace("%type%", currPetition.getTypeAsString());

+ 17 - 17
L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Npc.java

@@ -1409,7 +1409,7 @@ public class L2Npc extends L2Character
 				player.sendPacket(ActionFailed.STATIC_PACKET);
 
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/npcbusy.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/npcbusy.htm");
 				html.replace("%busymessage%", getBusyMessage());
 				html.replace("%npcname%", getName());
 				html.replace("%playername%", player.getName());
@@ -1421,14 +1421,14 @@ public class L2Npc extends L2Character
 				{
 					if (getCastle().getOwnerId() > 0)
 					{
-						html.setFile("data/html/territorystatus.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/territorystatus.htm");
 						L2Clan clan = ClanTable.getInstance().getClan(getCastle().getOwnerId());
 						html.replace("%clanname%", clan.getName());
 						html.replace("%clanleadername%", clan.getLeaderName());
 					}
 					else
 					{
-						html.setFile("data/html/territorynoclan.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/territorynoclan.htm");
 					}
 				}
 				html.replace("%castlename%", getCastle().getName());
@@ -1483,7 +1483,7 @@ public class L2Npc extends L2Character
 					return;
 				String filename = "data/html/" + path;
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				player.sendPacket(html);
 			}
@@ -1493,7 +1493,7 @@ public class L2Npc extends L2Character
 				{
 					String filename = "data/html/teleporter/nobleteleporter-no.htm";
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					html.replace("%npcname%", getName());
 					player.sendPacket(html);
@@ -1619,7 +1619,7 @@ public class L2Npc extends L2Character
 					case 1:
 						String filename = "data/html/default/30981-1.htm";
 						NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-						html.setFile(filename);
+						html.setFile(player.getHtmlPrefix(), filename);
 						html.replace("%objectId%", String.valueOf(getObjectId()));
 						html.replace("%dp_price%", String.valueOf(pen_clear_price[player.getExpertiseIndex()]));
 						player.sendPacket(html);
@@ -1938,7 +1938,7 @@ public class L2Npc extends L2Character
 			questId = qs.getQuest().getName();
 			String stateId = State.getStateName(qs.getState());
 			String path = "data/scripts/quests/" + questId + "/" + stateId + ".htm";
-			content = HtmCache.getInstance().getHtm(path); //TODO path for quests html
+			content = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), path); //TODO path for quests html
 
 			if (Config.DEBUG)
 			{
@@ -2041,7 +2041,7 @@ public class L2Npc extends L2Character
 		if (val == 0) // 0 - first buy lottery ticket window
 		{
 			filename = (getHtmlPath(npcId, 1));
-			html.setFile(filename);
+			html.setFile(player.getHtmlPrefix(), filename);
 		}
 		else if (val >= 1 && val <= 21) // 1-20 - buttons, 21 - second buy lottery ticket window
 		{
@@ -2059,7 +2059,7 @@ public class L2Npc extends L2Character
 			}
 
 			filename = (getHtmlPath(npcId, 5));
-			html.setFile(filename);
+			html.setFile(player.getHtmlPrefix(), filename);
 
 			int count = 0;
 			int found = 0;
@@ -2167,17 +2167,17 @@ public class L2Npc extends L2Character
 			player.sendPacket(iu);
 
 			filename = (getHtmlPath(npcId, 3));
-			html.setFile(filename);
+			html.setFile(player.getHtmlPrefix(), filename);
 		}
 		else if (val == 23) //23 - current lottery jackpot
 		{
 			filename = (getHtmlPath(npcId, 3));
-			html.setFile(filename);
+			html.setFile(player.getHtmlPrefix(), filename);
 		}
 		else if (val == 24) // 24 - Previous winning numbers/Prize claim
 		{
 			filename = (getHtmlPath(npcId, 4));
-			html.setFile(filename);
+			html.setFile(player.getHtmlPrefix(), filename);
 
 			int lotonumber = Lottery.getInstance().getId();
 			String message = "";
@@ -2401,7 +2401,7 @@ public class L2Npc extends L2Character
 	 */
 	private boolean showPkDenyChatWindow(L2PcInstance player, String type)
 	{
-		String html = HtmCache.getInstance().getHtm("data/html/" + type + "/" + getNpcId() + "-pk.htm");
+		String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/" + type + "/" + getNpcId() + "-pk.htm");
 
 		if (html != null)
 		{
@@ -2597,7 +2597,7 @@ public class L2Npc extends L2Character
 
 		// Send a Server->Client NpcHtmlMessage containing the text of the L2NpcInstance to the L2PcInstance 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 
 		if (this instanceof L2MerchantInstance)
 		{
@@ -2626,7 +2626,7 @@ public class L2Npc extends L2Character
 	{
 		// Send a Server->Client NpcHtmlMessage containing the text of the L2NpcInstance to the L2PcInstance 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 		
@@ -2890,9 +2890,9 @@ public class L2Npc extends L2Character
 		String html = "";
 
 		if (this instanceof L2WarehouseInstance)
-			html = HtmCache.getInstance().getHtm("data/html/warehouse/" + npcId + "-noteach.htm");
+			html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/warehouse/" + npcId + "-noteach.htm");
 		else if (this instanceof L2TrainerInstance)
-			html = HtmCache.getInstance().getHtm("data/html/trainer/" + npcId + "-noteach.htm");
+			html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/trainer/" + npcId + "-noteach.htm");
 
 		if (html == null)
 		{

+ 19 - 19
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2AuctioneerInstance.java

@@ -64,7 +64,7 @@ public final class L2AuctioneerInstance extends L2Npc
 		{
 			String filename = "data/html/auction/auction-busy.htm";
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile(filename);
+			html.setFile(player.getHtmlPrefix(), filename);
 			html.replace("%objectId%", String.valueOf(getObjectId()));
 			player.sendPacket(html);
 			return;
@@ -101,7 +101,7 @@ public final class L2AuctioneerInstance extends L2Npc
 
 						String filename = "data/html/auction/AgitSale3.htm";
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile(filename);
+						html.setFile(player.getHtmlPrefix(), filename);
 						html.replace("%x%", val);
 						html.replace("%AGIT_AUCTION_END%", String.valueOf(format.format(a.getEndDate())));
 						html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid()));
@@ -156,7 +156,7 @@ public final class L2AuctioneerInstance extends L2Npc
 					Auction a = AuctionManager.getInstance().getAuction(auctionId);
 
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					if (a != null)
 					{
 						html.replace("%AGIT_NAME%", a.getItemName());
@@ -238,7 +238,7 @@ public final class L2AuctioneerInstance extends L2Npc
 						minimumBid = AuctionManager.getInstance().getAuction(Integer.parseInt(val)).getStartingBid();
 
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_bidding "+val);
 					html.replace("%PLEDGE_ADENA%", String.valueOf(player.getClan().getWarehouse().getAdena()));
 					html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(minimumBid));
@@ -310,7 +310,7 @@ public final class L2AuctioneerInstance extends L2Npc
 				String filename = "data/html/auction/AgitAuctionList.htm";
 
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_start");
 				html.replace("%itemsField%", items);
 				player.sendPacket(html);
@@ -343,7 +343,7 @@ public final class L2AuctioneerInstance extends L2Npc
 				String filename = "data/html/auction/AgitBidderList.htm";
 
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				html.replace("%AGIT_LIST%", biders);
 				html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_selectedItems");
 				html.replace("%x%", val);
@@ -358,7 +358,7 @@ public final class L2AuctioneerInstance extends L2Npc
 					SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
 					String filename = "data/html/auction/AgitBidInfo.htm";
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					Auction a = AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt());
 					if (a != null)
 					{
@@ -387,7 +387,7 @@ public final class L2AuctioneerInstance extends L2Npc
 					SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
 					String filename = "data/html/auction/AgitSaleInfo.htm";
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					Auction a = AuctionManager.getInstance().getAuction(player.getClan().getHasHideout());
 					if (a != null)
 					{
@@ -417,7 +417,7 @@ public final class L2AuctioneerInstance extends L2Npc
 					int ItemId = player.getClan().getHasHideout();
 					String filename = "data/html/auction/AgitInfo.htm";
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					if (ClanHallManager.getInstance().getClanHallById(ItemId) != null)
 					{
 						html.replace("%AGIT_NAME%", ClanHallManager.getInstance().getClanHallById(ItemId).getName());
@@ -451,7 +451,7 @@ public final class L2AuctioneerInstance extends L2Npc
 				long bid = AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt()).getBidders().get(player.getClanId()).getBid();
 				String filename = "data/html/auction/AgitBidCancel.htm";
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				html.replace("%AGIT_BID%", String.valueOf(bid));
 				html.replace("%AGIT_BID_REMAIN%", String.valueOf((long)(bid*0.9)));
 				html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_selectedItems");
@@ -474,14 +474,14 @@ public final class L2AuctioneerInstance extends L2Npc
 				{
 					String filename = "data/html/auction/not_authorized.htm";
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
 					return;
 				}
 				String filename = "data/html/auction/AgitSaleCancel.htm";
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				html.replace("%AGIT_DEPOSIT%", String.valueOf(ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease()));
 				html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_selectedItems");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
@@ -501,7 +501,7 @@ public final class L2AuctioneerInstance extends L2Npc
 			{
 				String filename = "data/html/auction/AgitSale2.htm";
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				html.replace("%AGIT_LAST_PRICE%", String.valueOf(ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease()));
 				html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_sale");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
@@ -514,14 +514,14 @@ public final class L2AuctioneerInstance extends L2Npc
 				{
 					String filename = "data/html/auction/not_authorized.htm";
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
 					return;
 				}
 				String filename = "data/html/auction/AgitSale1.htm";
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				html.replace("%AGIT_DEPOSIT%", String.valueOf(ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease()));
 				html.replace("%AGIT_PLEDGE_ADENA%", String.valueOf(player.getClan().getWarehouse().getAdena()));
 				html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_selectedItems");
@@ -536,7 +536,7 @@ public final class L2AuctioneerInstance extends L2Npc
 				{
 					String filename = "data/html/auction/not_authorized.htm";
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
 					return;
@@ -545,7 +545,7 @@ public final class L2AuctioneerInstance extends L2Npc
 				{
 					String filename = "data/html/auction/AgitBid2.htm";
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					Auction a = AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt());
 					if (a != null)
 					{
@@ -569,7 +569,7 @@ public final class L2AuctioneerInstance extends L2Npc
 			else if (actualCommand.equalsIgnoreCase("location"))
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
-				html.setFile("data/html/auction/location.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/auction/location.htm");
 				html.replace("%location%", MapRegionTable.getInstance().getClosestTownName(player));
 				html.replace("%LOCATION%", getPictureName(player));
 				html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_start");
@@ -597,7 +597,7 @@ public final class L2AuctioneerInstance extends L2Npc
 			filename = "data/html/auction/auction.htm";
 
 		NpcHtmlMessage html = new NpcHtmlMessage(1);
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcId%", String.valueOf(getNpcId()));
 		html.replace("%npcname%", getName());

+ 3 - 3
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleBlacksmithInstance.java

@@ -39,7 +39,7 @@ public class L2CastleBlacksmithInstance extends L2NpcInstance
 		if (CastleManorManager.getInstance().isDisabled())
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile("data/html/npcdefault.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/npcdefault.htm");
 			html.replace("%objectId%", String.valueOf(getObjectId()));
 			html.replace("%npcname%", getName());
 			player.sendPacket(html);
@@ -75,7 +75,7 @@ public class L2CastleBlacksmithInstance extends L2NpcInstance
 		if (CastleManorManager.getInstance().isDisabled())
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile("data/html/npcdefault.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/npcdefault.htm");
 			html.replace("%objectId%", String.valueOf(getObjectId()));
 			html.replace("%npcname%", getName());
 			player.sendPacket(html);
@@ -99,7 +99,7 @@ public class L2CastleBlacksmithInstance extends L2NpcInstance
 		}
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcname%", getName());
 		html.replace("%castleid%", Integer.toString(getCastle().getCastleId()));

+ 78 - 78
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleChamberlainInstance.java

@@ -100,7 +100,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				if (siegeBlocksFunction(player)) return;
 				getCastle().banishForeigners(); // Move non-clan members off castle area
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/chamberlain/chamberlain-banishafter.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-banishafter.htm");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				player.sendPacket(html);
 				return;
@@ -110,7 +110,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				if (!validatePrivileges(player, L2Clan.CP_CS_DISMISS)) return;
 				if (siegeBlocksFunction(player)) return;
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/chamberlain/chamberlain-banishfore.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-banishfore.htm");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				player.sendPacket(html);
 				return;
@@ -125,7 +125,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					player.sendPacket(html);
 					return;
 				}
@@ -140,7 +140,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					player.sendPacket(html);
 					return;
 				}
@@ -150,7 +150,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				if (player.isClanLeader())
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-report.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-report.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					L2Clan clan = ClanTable.getInstance().getClan(getCastle().getOwnerId());
 					html.replace("%clanname%", clan.getName());
@@ -218,7 +218,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					player.sendPacket(html);
 					return;
 				}
@@ -241,7 +241,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					player.sendPacket(html);
 					return;
 				}
@@ -256,7 +256,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					player.sendPacket(html);
 					return;
 				}
@@ -305,7 +305,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 						}
 					}
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile(filename);
+					html.setFile(player.getHtmlPrefix(), filename);
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					html.replace("%npcname%", getName());
 					html.replace("%tax_income%", Util.formatAdena(getCastle().getTreasury()));
@@ -316,7 +316,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					player.sendPacket(html);
 					return;
 				}
@@ -350,7 +350,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 					if (filename.length() != 0)
 					{
 						NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-						html.setFile(filename);
+						html.setFile(player.getHtmlPrefix(), filename);
 						html.replace("%objectId%", String.valueOf(getObjectId()));
 						html.replace("%npcname%", getName());
 						player.sendPacket(html);
@@ -360,7 +360,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					player.sendPacket(html);
 					return;
 				}
@@ -437,14 +437,14 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 						String file = "data/html/chamberlain/doors-close.htm";
 						if (open)
 							file = "data/html/chamberlain/doors-open.htm";
-						html.setFile(file);
+						html.setFile(player.getHtmlPrefix(), file);
 						html.replace("%objectId%", String.valueOf(getObjectId()));
 						player.sendPacket(html);
 						return;
 					}
 
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/" + getTemplate().npcId	+ "-d.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/" + getTemplate().npcId	+ "-d.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					html.replace("%npcname%", getName());
 					player.sendPacket(html);
@@ -453,7 +453,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					player.sendPacket(html);
 					return;
 				}
@@ -489,7 +489,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/chamberlain/chamberlain-tax.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-tax.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					html.replace("%tax%", String.valueOf(getCastle().getTaxPercent()));
 					player.sendPacket(html);
@@ -499,7 +499,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 			else if (actualCommand.equalsIgnoreCase("manage_functions"))
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/chamberlain/chamberlain-manage.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-manage.htm");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				player.sendPacket(html);
 				return;
@@ -507,7 +507,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 			else if (actualCommand.equalsIgnoreCase("products"))
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/chamberlain/chamberlain-products.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-products.htm");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				html.replace("%npcId%", String.valueOf(getNpcId()));
 				player.sendPacket(html);
@@ -519,9 +519,9 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
 					if (getCastle().getFunction(Castle.FUNC_TELEPORT) == null)
-						html.setFile("data/html/chamberlain/chamberlain-nac.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-nac.htm");
 					else
-						html.setFile("data/html/chamberlain/"+ getNpcId()+ "-t"
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/"+ getNpcId()+ "-t"
 								+ getCastle().getFunction(Castle.FUNC_TELEPORT).getLvl()+ ".htm");
 					sendHtmlMessage(player, html);
 				}
@@ -529,10 +529,10 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
 					if (getCastle().getFunction(Castle.FUNC_SUPPORT) == null)
-						html.setFile("data/html/chamberlain/chamberlain-nac.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-nac.htm");
 					else
 					{
-						html.setFile("data/html/chamberlain/support"
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/support"
 								+ getCastle().getFunction(Castle.FUNC_SUPPORT).getLvl()+ ".htm");
 						html.replace("%mp%", String.valueOf((int)getCurrentMp()));
 					}
@@ -543,7 +543,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile("data/html/chamberlain/chamberlain-functions.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-functions.htm");
 					if (getCastle().getFunction(Castle.FUNC_RESTORE_EXP) != null)
 						html.replace("%xp_regen%", String.valueOf(getCastle().getFunction(Castle.FUNC_RESTORE_EXP).getLvl()));
 					else
@@ -577,7 +577,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							if (val.equalsIgnoreCase("hp_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel.htm");
 								html.replace("%apply%", "recovery hp 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -585,7 +585,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							else if (val.equalsIgnoreCase("mp_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel.htm");
 								html.replace("%apply%", "recovery mp 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -593,7 +593,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							else if (val.equalsIgnoreCase("exp_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel.htm");
 								html.replace("%apply%", "recovery exp 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -602,7 +602,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply.htm");
 								html.replace("%name%", "Fireplace (HP Recovery Device)");
 								int percent = Integer.parseInt(val);
 								int cost;
@@ -641,7 +641,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply.htm");
 								html.replace("%name%", "Carpet (MP Recovery)");
 								int percent = Integer.parseInt(val);
 								int cost;
@@ -676,7 +676,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply.htm");
 								html.replace("%name%", "Chandelier (EXP Recovery Device)");
 								int percent = Integer.parseInt(val);
 								int cost;
@@ -716,12 +716,12 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 										_log.warning("Hp editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/chamberlain/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply_confirmed.htm");
 									if (getCastle().getFunction(Castle.FUNC_RESTORE_HP) != null)
 									{
 										if (getCastle().getFunction(Castle.FUNC_RESTORE_HP).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/chamberlain/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-used.htm");
 											html.replace("%val%", String.valueOf(val)
 													+ "%");
 											sendHtmlMessage(player, html);
@@ -733,7 +733,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/chamberlain/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel_confirmed.htm");
 											break;
 										case 80:
 											fee = Config.CS_HPREG1_FEE;
@@ -753,7 +753,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									}
 									if (!getCastle().updateFunctions(player, Castle.FUNC_RESTORE_HP, percent, fee, Config.CS_HPREG_FEE_RATIO, (getCastle().getFunction(Castle.FUNC_RESTORE_HP) == null)))
 									{
-										html.setFile("data/html/chamberlain/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									sendHtmlMessage(player, html);
@@ -769,12 +769,12 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 										_log.warning("Mp editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/chamberlain/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply_confirmed.htm");
 									if (getCastle().getFunction(Castle.FUNC_RESTORE_MP) != null)
 									{
 										if (getCastle().getFunction(Castle.FUNC_RESTORE_MP).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/chamberlain/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-used.htm");
 											html.replace("%val%", String.valueOf(val)
 													+ "%");
 											sendHtmlMessage(player, html);
@@ -786,7 +786,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/chamberlain/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel_confirmed.htm");
 											break;
 										case 5:
 											fee = Config.CS_MPREG1_FEE;
@@ -803,7 +803,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									}
 									if (!getCastle().updateFunctions(player, Castle.FUNC_RESTORE_MP, percent, fee, Config.CS_MPREG_FEE_RATIO, (getCastle().getFunction(Castle.FUNC_RESTORE_MP) == null)))
 									{
-										html.setFile("data/html/chamberlain/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									sendHtmlMessage(player, html);
@@ -819,12 +819,12 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 										_log.warning("Exp editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/chamberlain/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply_confirmed.htm");
 									if (getCastle().getFunction(Castle.FUNC_RESTORE_EXP) != null)
 									{
 										if (getCastle().getFunction(Castle.FUNC_RESTORE_EXP).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/chamberlain/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-used.htm");
 											html.replace("%val%", String.valueOf(val)
 													+ "%");
 											sendHtmlMessage(player, html);
@@ -836,7 +836,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/chamberlain/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel_confirmed.htm");
 											break;
 										case 15:
 											fee = Config.CS_EXPREG1_FEE;
@@ -853,7 +853,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									}
 									if (!getCastle().updateFunctions(player, Castle.FUNC_RESTORE_EXP, percent, fee, Config.CS_EXPREG_FEE_RATIO, (getCastle().getFunction(Castle.FUNC_RESTORE_EXP) == null)))
 									{
-										html.setFile("data/html/chamberlain/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									sendHtmlMessage(player, html);
@@ -862,7 +862,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							}
 						}
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile("data/html/chamberlain/edit_recovery.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/edit_recovery.htm");
 						String hp = "[<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 80\">80%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 120\">120%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 180\">180%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 240\">240%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 300\">300%</a>]";
 						String exp = "[<a action=\"bypass -h npc_%objectId%_manage recovery edit_exp 15\">15%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_exp 25\">25%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_exp 35\">35%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_exp 50\">50%</a>]";
 						String mp = "[<a action=\"bypass -h npc_%objectId%_manage recovery edit_mp 5\">5%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_mp 15\">15%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_mp 30\">30%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_mp 40\">40%</a>]";
@@ -938,7 +938,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							if (val.equalsIgnoreCase("tele_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel.htm");
 								html.replace("%apply%", "other tele 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -946,7 +946,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							else if (val.equalsIgnoreCase("support_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel.htm");
 								html.replace("%apply%", "other support 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -955,7 +955,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply.htm");
 								html.replace("%name%", "Insignia (Supplementary Magic)");
 								int stage = Integer.parseInt(val);
 								int cost;
@@ -989,7 +989,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/chamberlain/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply.htm");
 								html.replace("%name%", "Mirror (Teleportation Device)");
 								int stage = Integer.parseInt(val);
 								int cost;
@@ -1023,12 +1023,12 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 										_log.warning("Tele editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/chamberlain/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply_confirmed.htm");
 									if (getCastle().getFunction(Castle.FUNC_TELEPORT) != null)
 									{
 										if (getCastle().getFunction(Castle.FUNC_TELEPORT).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/chamberlain/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-used.htm");
 											html.replace("%val%", "Stage "	+ String.valueOf(val));
 											sendHtmlMessage(player, html);
 											return;
@@ -1039,7 +1039,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/chamberlain/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel_confirmed.htm");
 											break;
 										case 1:
 											fee = Config.CS_TELE1_FEE;
@@ -1050,7 +1050,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									}
 									if (!getCastle().updateFunctions(player, Castle.FUNC_TELEPORT, lvl, fee, Config.CS_TELE_FEE_RATIO, (getCastle().getFunction(Castle.FUNC_TELEPORT) == null)))
 									{
-										html.setFile("data/html/chamberlain/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									sendHtmlMessage(player, html);
@@ -1066,12 +1066,12 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 										_log.warning("Support editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/chamberlain/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-apply_confirmed.htm");
 									if (getCastle().getFunction(Castle.FUNC_SUPPORT) != null)
 									{
 										if (getCastle().getFunction(Castle.FUNC_SUPPORT).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/chamberlain/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-used.htm");
 											html.replace("%val%", "Stage "
 													+ String.valueOf(val));
 											sendHtmlMessage(player, html);
@@ -1083,7 +1083,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/chamberlain/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/functions-cancel_confirmed.htm");
 											break;
 										case 1:
 											fee = Config.CS_SUPPORT1_FEE;
@@ -1100,7 +1100,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 									}
 									if (!getCastle().updateFunctions(player, Castle.FUNC_SUPPORT, lvl, fee, Config.CS_SUPPORT_FEE_RATIO, (getCastle().getFunction(Castle.FUNC_SUPPORT) == null)))
 									{
-										html.setFile("data/html/chamberlain/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									else
@@ -1110,7 +1110,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 							}
 						}
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile("data/html/chamberlain/edit_other.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/edit_other.htm");
 						String tele = "[<a action=\"bypass -h npc_%objectId%_manage other edit_tele 1\">Level 1</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_tele 2\">Level 2</a>]";
 						String support = "[<a action=\"bypass -h npc_%objectId%_manage other edit_support 1\">Level 1</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_support 2\">Level 2</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_support 3\">Level 3</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_support 4\">Level 4</a>]";
 						if (getCastle().getFunction(Castle.FUNC_TELEPORT) != null)
@@ -1160,14 +1160,14 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 					else
 					{
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile("data/html/chamberlain/manage.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/manage.htm");
 						sendHtmlMessage(player, html);
 					}
 				}
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					sendHtmlMessage(player, html);
 				}
 				return;
@@ -1201,13 +1201,13 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 								this.doCast(skill);
 							else
 							{
-								html.setFile("data/html/chamberlain/support-no_mana.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/support-no_mana.htm");
 								html.replace("%mp%", String.valueOf((int)getCurrentMp()));
 								sendHtmlMessage(player, html);
 								return;
 							}
 						}
-						html.setFile("data/html/chamberlain/support-done.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/support-done.htm");
 						html.replace("%mp%", String.valueOf((int)getCurrentMp()));
 						sendHtmlMessage(player, html);
 					}
@@ -1227,7 +1227,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
 				if (getCastle().getFunction(Castle.FUNC_SUPPORT).getLvl() == 0)
 					return;
-				html.setFile("data/html/chamberlain/support"
+				html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/support"
 						+ getCastle().getFunction(Castle.FUNC_SUPPORT).getLvl()	+ ".htm");
 				html.replace("%mp%", String.valueOf((int)getStatus().getCurrentMp()));
 				sendHtmlMessage(player, html);
@@ -1244,7 +1244,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				if (Config.CL_SET_SIEGE_TIME_LIST.isEmpty())
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile("data/html/chamberlain/chamberlain-noadmin.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noadmin.htm");
 					sendHtmlMessage(player, html);
 				}
 				else if (player.isClanLeader())
@@ -1252,19 +1252,19 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 					if (getCastle().getSiege().getTimeRegistrationOverDate().getTimeInMillis() < Calendar.getInstance().getTimeInMillis())
 					{
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile("data/html/chamberlain/siegetime1.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/siegetime1.htm");
 						sendHtmlMessage(player, html);						
 					}
 					else if (getCastle().getSiege().getIsTimeRegistrationOver()) 
 					{
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile("data/html/chamberlain/siegetime2.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/siegetime2.htm");
 						sendHtmlMessage(player, html);						
 					}
 					else
 					{
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile("data/html/chamberlain/siegetime3.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/siegetime3.htm");
 						html.replace("%time%", String.valueOf(getCastle().getSiegeDate().getTime()));
 						sendHtmlMessage(player, html);						
 					}
@@ -1272,7 +1272,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 					sendHtmlMessage(player, html);
 				}
 				return;
@@ -1297,7 +1297,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 					default:
 						break;
 				}
-				NpcHtmlMessage html = getNextSiegeTimePage(Integer.parseInt(val),isAfternoon);
+				NpcHtmlMessage html = getNextSiegeTimePage(player.getHtmlPrefix(), Integer.parseInt(val),isAfternoon);
 				
 				if (html == null)
 				{
@@ -1313,7 +1313,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 					getCastle().getSiege().endTimeRegistration(false);
 					
 					html = new NpcHtmlMessage(1);
-					html.setFile("data/html/chamberlain/siegetime8.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/siegetime8.htm");
 					html.replace("%time%", String.valueOf(getCastle().getSiegeDate().getTime()));
 				}
 				sendHtmlMessage(player, html);
@@ -1336,15 +1336,15 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 						ms.addItemName(crown);
 						player.sendPacket(ms);
 
-						html.setFile("data/html/chamberlain/chamberlain-gavecrown.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-gavecrown.htm");
 						html.replace("%CharName%", String.valueOf(player.getName()));
 						html.replace("%FeudName%", String.valueOf(getCastle().getName()));
 					}
 					else
-						html.setFile("data/html/chamberlain/chamberlain-hascrown.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-hascrown.htm");
 				}
 				else
-					html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 				
 				player.sendPacket(html);
 				return;
@@ -1354,12 +1354,12 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 		}
 	}
 	
-	private NpcHtmlMessage getNextSiegeTimePage(int now, boolean isAfternoon)
+	private NpcHtmlMessage getNextSiegeTimePage(String htmlPrefix, int now, boolean isAfternoon)
 	{
 		NpcHtmlMessage ret = new NpcHtmlMessage(1);
 		if (now == 0 && Config.CL_SET_SIEGE_TIME_LIST.contains("day"))
 		{
-			ret.setFile("data/html/chamberlain/siegetime4.htm");
+			ret.setFile(htmlPrefix, "data/html/chamberlain/siegetime4.htm");
 			return ret;
 		}
 		if (now < 3 && Config.CL_SET_SIEGE_TIME_LIST.contains("hour"))
@@ -1370,11 +1370,11 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				case 1:
 					if (!Config.SIEGE_HOUR_LIST_MORNING.isEmpty() && !Config.SIEGE_HOUR_LIST_AFTERNOON.isEmpty())
 					{
-						ret.setFile("data/html/chamberlain/siegetime5.htm");
+						ret.setFile(htmlPrefix, "data/html/chamberlain/siegetime5.htm");
 						return ret;
 					}
 				case 2:
-					ret.setFile("data/html/chamberlain/siegetime6.htm");
+					ret.setFile(htmlPrefix, "data/html/chamberlain/siegetime6.htm");
 					List<Integer> list;
 					int inc = 0;
 					String ampm = "";
@@ -1425,7 +1425,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 		}
 		if (now < 4 && Config.CL_SET_SIEGE_TIME_LIST.contains("minute"))
 		{
-			ret.setFile("data/html/chamberlain/siegetime7.htm");
+			ret.setFile(htmlPrefix, "data/html/chamberlain/siegetime7.htm");
 			return ret;
 		}
 		
@@ -1456,7 +1456,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 		}
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcname%", getName());
 		player.sendPacket(html);
@@ -1503,7 +1503,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 		if ((player.getClanPrivileges() & privilege) != privilege)
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile("data/html/chamberlain/chamberlain-noprivs.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-noprivs.htm");
 			player.sendPacket(html);
 			return false;
 		}
@@ -1515,7 +1515,7 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 		if (getCastle().getSiege().getIsInProgress())
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile("data/html/chamberlain/chamberlain-busy.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/chamberlain/chamberlain-busy.htm");
 			html.replace("%npcname%", String.valueOf(getName()));
 			player.sendPacket(html);
 			return true;

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleMagicianInstance.java

@@ -75,7 +75,7 @@ public class L2CastleMagicianInstance extends L2NpcInstance
 		}
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 	}

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleTeleporterInstance.java

@@ -63,7 +63,7 @@ public final class L2CastleTeleporterInstance extends L2Npc
 			
 			String filename = "data/html/castleteleporter/MassGK-1.htm";
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile(filename);
+			html.setFile(player.getHtmlPrefix(), filename);
 			player.sendPacket(html);
 			return;
 		}
@@ -86,7 +86,7 @@ public final class L2CastleTeleporterInstance extends L2Npc
 			filename = "data/html/castleteleporter/MassGK-1.htm";
 		
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 	}

+ 3 - 3
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2CastleWarehouseInstance.java

@@ -137,7 +137,7 @@ public class L2CastleWarehouseInstance extends L2NpcInstance
 			if (Config.L2JMOD_ENABLE_WAREHOUSESORTING_PRIVATE)
 			{
 				String htmFile = "data/html/mods/WhSortedP.htm";
-				String htmContent = HtmCache.getInstance().getHtm(htmFile);
+				String htmContent = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmFile);
 
 				if (htmContent != null)
 				{
@@ -171,7 +171,7 @@ public class L2CastleWarehouseInstance extends L2NpcInstance
 			if (Config.L2JMOD_ENABLE_WAREHOUSESORTING_CLAN)
 			{
 				String htmFile = "data/html/mods/WhSortedC.htm";
-				String htmContent = HtmCache.getInstance().getHtm(htmFile);
+				String htmContent = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmFile);
 
 				if (htmContent != null)
 				{
@@ -236,7 +236,7 @@ public class L2CastleWarehouseInstance extends L2NpcInstance
 			}
 		}
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcname%", getName());
 		player.sendPacket(html);

+ 8 - 8
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ClanHallDoormenInstance.java

@@ -73,9 +73,9 @@ public class L2ClanHallDoormenInstance extends L2DoormenInstance
 				}
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
 				if (ok)
-					html.setFile("data/html/clanHallDoormen/evolve-ok.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/evolve-ok.htm");
 				else
-					html.setFile("data/html/clanHallDoormen/evolve-no.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/evolve-no.htm");
 				player.sendPacket(html);
 				return;
 			}
@@ -97,12 +97,12 @@ public class L2ClanHallDoormenInstance extends L2DoormenInstance
 			{
 				if (_hasEvolve)
 				{
-					html.setFile("data/html/clanHallDoormen/doormen2.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen2.htm");
 					html.replace("%clanname%", owner.getName());
 				}
 				else
 				{
-					html.setFile("data/html/clanHallDoormen/doormen1.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen1.htm");
 					html.replace("%clanname%", owner.getName());
 				}
 			}
@@ -110,13 +110,13 @@ public class L2ClanHallDoormenInstance extends L2DoormenInstance
 			{
 				if (owner != null && owner.getLeader() != null)
 				{
-					html.setFile("data/html/clanHallDoormen/doormen-no.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen-no.htm");
 					html.replace("%leadername%", owner.getLeaderName());
 					html.replace("%clanname%", owner.getName());
 				}
 				else
 				{
-					html.setFile("data/html/clanHallDoormen/emptyowner.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/emptyowner.htm");
 					html.replace("%hallname%", getClanHall().getName());
 				}
 			}
@@ -133,7 +133,7 @@ public class L2ClanHallDoormenInstance extends L2DoormenInstance
 	{
 		getClanHall().openCloseDoors(true);
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile("data/html/clanHallDoormen/doormen-opened.htm");
+		html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen-opened.htm");
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 	}
@@ -143,7 +143,7 @@ public class L2ClanHallDoormenInstance extends L2DoormenInstance
 	{
 		getClanHall().openCloseDoors(false);
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile("data/html/clanHallDoormen/doormen-closed.htm");
+		html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen-closed.htm");
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 	}

+ 75 - 75
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ClanHallManagerInstance.java

@@ -80,17 +80,17 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                 {
                 	if (val.equalsIgnoreCase("list"))
                 	{
-                		html.setFile("data/html/clanHallManager/banish-list.htm");            		
+                		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/banish-list.htm");            		
                 	}
                 	else if (val.equalsIgnoreCase("banish"))
                 	{
                 		getClanHall().banishForeigners();
-                		html.setFile("data/html/clanHallManager/banish.htm");
+                		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/banish.htm");
                 	}
                 }
                 else
                 {
-                    html.setFile("data/html/clanHallManager/not_authorized.htm");
+                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/not_authorized.htm");
                 }
                 sendHtmlMessage(player, html);
             	return;
@@ -107,7 +107,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                     	if (Config.L2JMOD_ENABLE_WAREHOUSESORTING_CLAN)
                     	{
                     		String htmFile = "data/html/mods/WhSortedC.htm";
-	                		String htmContent = HtmCache.getInstance().getHtm(htmFile);
+	                		String htmContent = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmFile);
 	                		if (htmContent != null)
 	                		{
 	                			NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId());
@@ -125,7 +125,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                     }
                     else
                     {
-                        html.setFile("data/html/clanHallManager/vault.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/vault.htm");
                         html.replace("%rent%", String.valueOf(getClanHall().getLease()));
                         html.replace("%date%", format.format(getClanHall().getPaidUntil()));
                         sendHtmlMessage(player, html);
@@ -133,7 +133,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                 }
                 else
                 {
-                    html.setFile("data/html/clanHallManager/not_authorized.htm");
+                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/not_authorized.htm");
                     sendHtmlMessage(player, html);
                 }
                 return;
@@ -157,22 +157,22 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                     if (val.equalsIgnoreCase("open"))
                     {
                         getClanHall().openCloseDoors(true);
-                    	html.setFile("data/html/clanHallManager/door-open.htm");
+                    	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/door-open.htm");
                     }
                     else if (val.equalsIgnoreCase("close"))
                     {
                         getClanHall().openCloseDoors(false);
-                        html.setFile("data/html/clanHallManager/door-close.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/door-close.htm");
                     }
                     else
                     {
-                        html.setFile("data/html/clanHallManager/door.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/door.htm");
                     }
                     sendHtmlMessage(player, html);
                 }
                 else
                 {
-                    html.setFile("data/html/clanHallManager/not_authorized.htm");
+                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/not_authorized.htm");
                     sendHtmlMessage(player, html);
                 }
                 return;
@@ -183,16 +183,16 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                 {
                     NpcHtmlMessage html = new NpcHtmlMessage(1);
                     if (getClanHall().getFunction(ClanHall.FUNC_TELEPORT) == null)
-                    	html.setFile("data/html/clanHallManager/chamberlain-nac.htm");
+                    	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/chamberlain-nac.htm");
                     else
-                    	html.setFile("data/html/clanHallManager/tele"+getClanHall().getLocation()+getClanHall().getFunction(ClanHall.FUNC_TELEPORT).getLvl()+".htm");
+                    	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/tele"+getClanHall().getLocation()+getClanHall().getFunction(ClanHall.FUNC_TELEPORT).getLvl()+".htm");
                     sendHtmlMessage(player, html);
                 }
                 else if (val.equalsIgnoreCase("item_creation"))
                 {
                     if (getClanHall().getFunction(ClanHall.FUNC_ITEM_CREATE) == null){
                         NpcHtmlMessage html = new NpcHtmlMessage(1);
-                        html.setFile("data/html/clanHallManager/chamberlain-nac.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/chamberlain-nac.htm");
                         sendHtmlMessage(player, html);
                         return;
                     }
@@ -205,9 +205,9 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
 
                     NpcHtmlMessage html = new NpcHtmlMessage(1);
                     if (getClanHall().getFunction(ClanHall.FUNC_SUPPORT)== null)
-                        html.setFile("data/html/clanHallManager/chamberlain-nac.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/chamberlain-nac.htm");
                     else{
-                    	html.setFile("data/html/clanHallManager/support"+getClanHall().getFunction(ClanHall.FUNC_SUPPORT).getLvl()+".htm");
+                    	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/support"+getClanHall().getFunction(ClanHall.FUNC_SUPPORT).getLvl()+".htm");
                     	html.replace("%mp%", String.valueOf((int)getCurrentMp()));
                     }
                     sendHtmlMessage(player, html);
@@ -217,7 +217,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                 else
                 {
 	                NpcHtmlMessage html = new NpcHtmlMessage(1);
-	                html.setFile("data/html/clanHallManager/functions.htm");
+	                html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions.htm");
 	                if (getClanHall().getFunction(ClanHall.FUNC_RESTORE_EXP) != null)
 	                    html.replace("%xp_regen%", String.valueOf(getClanHall().getFunction(ClanHall.FUNC_RESTORE_EXP).getLvl()));
 	                else
@@ -251,7 +251,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             if (val.equalsIgnoreCase("hp_cancel"))
                             {
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-cancel.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel.htm");
                             	html.replace("%apply%", "recovery hp 0");
                             	sendHtmlMessage(player, html);
                             	return;
@@ -259,7 +259,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             else if (val.equalsIgnoreCase("mp_cancel"))
                             {
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-cancel.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel.htm");
                             	html.replace("%apply%", "recovery mp 0");
                             	sendHtmlMessage(player, html);
                             	return;
@@ -267,7 +267,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             else if (val.equalsIgnoreCase("exp_cancel"))
                             {
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-cancel.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel.htm");
                             	html.replace("%apply%", "recovery exp 0");
                             	sendHtmlMessage(player, html);
                             	return;
@@ -276,7 +276,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             {
                             	val = st.nextToken();
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-apply.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply.htm");
                             	html.replace("%name%", "Fireplace (HP Recovery Device)");
                             	int percent = Integer.parseInt(val);
                             	int cost;
@@ -333,7 +333,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             {
                             	val = st.nextToken();
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-apply.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply.htm");
                             	html.replace("%name%", "Carpet (MP Recovery)");
                             	int percent = Integer.parseInt(val);
                             	int cost;
@@ -365,7 +365,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             {
                             	val = st.nextToken();
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-apply.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply.htm");
                             	html.replace("%name%", "Chandelier (EXP Recovery Device)");
                             	int percent = Integer.parseInt(val);
                             	int cost;
@@ -407,12 +407,12 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     if (Config.DEBUG) _log.warning("Mp editing invoked");
                                     val = st.nextToken();
                                     NpcHtmlMessage html = new NpcHtmlMessage(1);
-                                    html.setFile("data/html/clanHallManager/functions-apply_confirmed.htm");
+                                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply_confirmed.htm");
                                     if (getClanHall().getFunction(ClanHall.FUNC_RESTORE_HP) != null)
                                     {
                                     	if (getClanHall().getFunction(ClanHall.FUNC_RESTORE_HP).getLvl() == Integer.parseInt(val))
                                     	{
-                                    		html.setFile("data/html/clanHallManager/functions-used.htm");
+                                    		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-used.htm");
                                     		html.replace("%val%", String.valueOf(val)+"%");
                                     		sendHtmlMessage(player, html);
                                     		return;
@@ -423,7 +423,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     {
                                 		case 0:
                                 			fee = 0;
-                                			html.setFile("data/html/clanHallManager/functions-cancel_confirmed.htm");
+                                			html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel_confirmed.htm");
                                 			break;
                                         case 20:
                                             fee = Config.CH_HPREG1_FEE;
@@ -467,7 +467,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     }
                                     if (!getClanHall().updateFunctions(player,ClanHall.FUNC_RESTORE_HP, percent, fee, Config.CH_HPREG_FEE_RATIO,(getClanHall().getFunction(ClanHall.FUNC_RESTORE_HP) == null)))
                                     {
-                                        html.setFile("data/html/clanHallManager/low_adena.htm");
+                                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/low_adena.htm");
                                         sendHtmlMessage(player, html);
                                     }
                                     else
@@ -484,12 +484,12 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     if (Config.DEBUG) _log.warning("Mp editing invoked");
                                     val = st.nextToken();
                                     NpcHtmlMessage html = new NpcHtmlMessage(1);
-                        			html.setFile("data/html/clanHallManager/functions-apply_confirmed.htm");
+                        			html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply_confirmed.htm");
                                     if (getClanHall().getFunction(ClanHall.FUNC_RESTORE_MP) != null)
                                     {
                                     	if (getClanHall().getFunction(ClanHall.FUNC_RESTORE_MP).getLvl() == Integer.parseInt(val))
                                     	{
-                                    		html.setFile("data/html/clanHallManager/functions-used.htm");
+                                    		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-used.htm");
                                     		html.replace("%val%", String.valueOf(val)+"%");
                                     		sendHtmlMessage(player, html);
                                     		return;
@@ -500,7 +500,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     {
                                 		case 0:
                                 			fee = 0;
-                                			html.setFile("data/html/clanHallManager/functions-cancel_confirmed.htm");
+                                			html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel_confirmed.htm");
                                 			break;
                                         case 5:
                                             fee = Config.CH_MPREG1_FEE;
@@ -520,7 +520,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     }
                                     if(!getClanHall().updateFunctions(player,ClanHall.FUNC_RESTORE_MP, percent, fee, Config.CH_MPREG_FEE_RATIO,(getClanHall().getFunction(ClanHall.FUNC_RESTORE_MP) == null)))
                                     {
-                                        html.setFile("data/html/clanHallManager/low_adena.htm");
+                                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/low_adena.htm");
                                         sendHtmlMessage(player, html);
                                     }
                                     else
@@ -537,12 +537,12 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     if (Config.DEBUG) _log.warning("Exp editing invoked");
                                     val = st.nextToken();
                                     NpcHtmlMessage html = new NpcHtmlMessage(1);
-                        			html.setFile("data/html/clanHallManager/functions-apply_confirmed.htm");
+                        			html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply_confirmed.htm");
                                     if (getClanHall().getFunction(ClanHall.FUNC_RESTORE_EXP) != null)
                                     {
                                     	if (getClanHall().getFunction(ClanHall.FUNC_RESTORE_EXP).getLvl() == Integer.parseInt(val))
                                     	{
-                                    		html.setFile("data/html/clanHallManager/functions-used.htm");
+                                    		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-used.htm");
                                     		html.replace("%val%", String.valueOf(val)+"%");
                                     		sendHtmlMessage(player, html);
                                     		return;
@@ -553,7 +553,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     {
                                     	case 0:
                                     		fee = 0;
-                                			html.setFile("data/html/clanHallManager/functions-cancel_confirmed.htm");
+                                			html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel_confirmed.htm");
                                     		break;
                                         case 5:
                                             fee = Config.CH_EXPREG1_FEE;
@@ -579,7 +579,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     }
                                     if (!getClanHall().updateFunctions(player, ClanHall.FUNC_RESTORE_EXP, percent, fee, Config.CH_EXPREG_FEE_RATIO,(getClanHall().getFunction(ClanHall.FUNC_RESTORE_EXP) == null)))
                                     {
-                                        html.setFile("data/html/clanHallManager/low_adena.htm");
+                                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/low_adena.htm");
                                         sendHtmlMessage(player, html);
                                     }
                                     else
@@ -590,7 +590,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             }
                         }
                         NpcHtmlMessage html = new NpcHtmlMessage(1);
-                        html.setFile("data/html/clanHallManager/edit_recovery.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/edit_recovery.htm");
                         String hp_grade0 = "[<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 20\">20%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 40\">40%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 220\">220%</a>]";
                         String hp_grade1 = "[<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 40\">40%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 100\">100%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 160\">160%</a>]";
                         String hp_grade2 = "[<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 80\">80%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 140\">140%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 200\">200%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 260\">260%</a>]";
@@ -744,7 +744,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             if (val.equalsIgnoreCase("item_cancel"))
                             {
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-cancel.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel.htm");
                             	html.replace("%apply%", "other item 0");
                             	sendHtmlMessage(player, html);
                             	return;
@@ -752,7 +752,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             else if (val.equalsIgnoreCase("tele_cancel"))
                             {
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-cancel.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel.htm");
                             	html.replace("%apply%", "other tele 0");
                             	sendHtmlMessage(player, html);
                             	return;
@@ -760,7 +760,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             else if (val.equalsIgnoreCase("support_cancel"))
                             {
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-cancel.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel.htm");
                             	html.replace("%apply%", "other support 0");
                             	sendHtmlMessage(player, html);
                             	return;
@@ -769,7 +769,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             {
                             	val = st.nextToken();
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-apply.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply.htm");
                             	html.replace("%name%", "Magic Equipment (Item Production Facilities)");
                             	int stage = Integer.parseInt(val);
                             	int cost;
@@ -795,7 +795,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             {
                             	val = st.nextToken();
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-apply.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply.htm");
                             	html.replace("%name%", "Insignia (Supplementary Magic)");
                             	int stage = Integer.parseInt(val);
                             	int cost;
@@ -836,7 +836,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             {
                             	val = st.nextToken();
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-apply.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply.htm");
                             	html.replace("%name%", "Mirror (Teleportation Device)");
                             	int stage = Integer.parseInt(val);
                             	int cost;
@@ -866,12 +866,12 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                 	if (Config.DEBUG) _log.warning("Item editing invoked");
                                     val = st.nextToken();
                                     NpcHtmlMessage html = new NpcHtmlMessage(1);
-                                    html.setFile("data/html/clanHallManager/functions-apply_confirmed.htm");
+                                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply_confirmed.htm");
                                     if (getClanHall().getFunction(ClanHall.FUNC_ITEM_CREATE) != null)
                                     {
                                     	if (getClanHall().getFunction(ClanHall.FUNC_ITEM_CREATE).getLvl() == Integer.parseInt(val))
                                     	{
-                                    		html.setFile("data/html/clanHallManager/functions-used.htm");
+                                    		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-used.htm");
                                     		html.replace("%val%","Stage " +String.valueOf(val));
                                     		sendHtmlMessage(player, html);
                                     		return;
@@ -883,7 +883,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     {
                                 		case 0:
                                 			fee = 0;
-                                			html.setFile("data/html/clanHallManager/functions-cancel_confirmed.htm");
+                                			html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel_confirmed.htm");
                                 			break;
                                         case 1:
                                             fee = Config.CH_ITEM1_FEE;
@@ -897,7 +897,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     }
                                     if (!getClanHall().updateFunctions(player, ClanHall.FUNC_ITEM_CREATE, lvl, fee, Config.CH_ITEM_FEE_RATIO,(getClanHall().getFunction(ClanHall.FUNC_ITEM_CREATE) == null)))
                                     {
-                                        html.setFile("data/html/clanHallManager/low_adena.htm");
+                                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/low_adena.htm");
                                         sendHtmlMessage(player, html);
                                     }
                                     else
@@ -914,12 +914,12 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     if (Config.DEBUG) _log.warning("Tele editing invoked");
                                     val = st.nextToken();
                                     NpcHtmlMessage html = new NpcHtmlMessage(1);
-                                    html.setFile("data/html/clanHallManager/functions-apply_confirmed.htm");
+                                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply_confirmed.htm");
                                     if (getClanHall().getFunction(ClanHall.FUNC_TELEPORT) != null)
                                     {
                                     	if (getClanHall().getFunction(ClanHall.FUNC_TELEPORT).getLvl() == Integer.parseInt(val))
                                     	{
-                                    		html.setFile("data/html/clanHallManager/functions-used.htm");
+                                    		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-used.htm");
                                     		html.replace("%val%","Stage " +String.valueOf(val));
                                     		sendHtmlMessage(player, html);
                                     		return;
@@ -930,7 +930,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     {
                                 		case 0:
                                 			fee = 0;
-                                			html.setFile("data/html/clanHallManager/functions-cancel_confirmed.htm");
+                                			html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel_confirmed.htm");
                                 			break;
                                         case 1:
                                             fee = Config.CH_TELE1_FEE;
@@ -941,7 +941,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     }
                                     if (!getClanHall().updateFunctions(player,ClanHall.FUNC_TELEPORT, lvl, fee, Config.CH_TELE_FEE_RATIO,(getClanHall().getFunction(ClanHall.FUNC_TELEPORT) == null)))
                                     {
-                                        html.setFile("data/html/clanHallManager/low_adena.htm");
+                                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/low_adena.htm");
                                         sendHtmlMessage(player, html);
                                     }
                                     else
@@ -958,12 +958,12 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     if (Config.DEBUG) _log.warning("Support editing invoked");
                                     val = st.nextToken();
                                     NpcHtmlMessage html = new NpcHtmlMessage(1);
-                                    html.setFile("data/html/clanHallManager/functions-apply_confirmed.htm");
+                                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply_confirmed.htm");
                                     if (getClanHall().getFunction(ClanHall.FUNC_SUPPORT) != null)
                                     {
                                     	if (getClanHall().getFunction(ClanHall.FUNC_SUPPORT).getLvl() == Integer.parseInt(val))
                                     	{
-                                    		html.setFile("data/html/clanHallManager/functions-used.htm");
+                                    		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-used.htm");
                                     		html.replace("%val%","Stage " +String.valueOf(val));
                                     		sendHtmlMessage(player, html);
                                     		return;
@@ -974,7 +974,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     {
                                 		case 0:
 	                                		fee = 0;
-	                                		html.setFile("data/html/clanHallManager/functions-cancel_confirmed.htm");
+	                                		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel_confirmed.htm");
 	                                		break;
                                         case 1:
                                             fee = Config.CH_SUPPORT1_FEE;
@@ -1003,7 +1003,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                                     }
                                     if (!getClanHall().updateFunctions(player,ClanHall.FUNC_SUPPORT, lvl, fee, Config.CH_SUPPORT_FEE_RATIO,(getClanHall().getFunction(ClanHall.FUNC_SUPPORT) == null)))
                                     {
-                                        html.setFile("data/html/clanHallManager/low_adena.htm");
+                                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/low_adena.htm");
                                         sendHtmlMessage(player, html);
                                     }
                                     else
@@ -1014,7 +1014,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             }
                         }
                         NpcHtmlMessage html = new NpcHtmlMessage(1);
-                        html.setFile("data/html/clanHallManager/edit_other.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/edit_other.htm");
                         String tele = "[<a action=\"bypass -h npc_%objectId%_manage other edit_tele 1\">Level 1</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_tele 2\">Level 2</a>]";
                         String support_grade0 = "[<a action=\"bypass -h npc_%objectId%_manage other edit_support 1\">Level 1</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_support 2\">Level 2</a>]";
                         String support_grade1 = "[<a action=\"bypass -h npc_%objectId%_manage other edit_support 1\">Level 1</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_support 2\">Level 2</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_support 4\">Level 4</a>]";
@@ -1092,7 +1092,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             if (val.equalsIgnoreCase("curtains_cancel"))
                             {
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-cancel.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel.htm");
                             	html.replace("%apply%", "deco curtains 0");
                             	sendHtmlMessage(player, html);
                             	return;
@@ -1100,7 +1100,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             else if (val.equalsIgnoreCase("fixtures_cancel"))
                             {
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-cancel.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel.htm");
                             	html.replace("%apply%", "deco fixtures 0");
                             	sendHtmlMessage(player, html);
                             	return;
@@ -1109,7 +1109,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             {
                             	val = st.nextToken();
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-apply.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply.htm");
                             	html.replace("%name%", "Curtains (Decoration)");
                             	int stage = Integer.parseInt(val);
                             	int cost;
@@ -1132,7 +1132,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                             {
                             	val = st.nextToken();
                             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                            	html.setFile("data/html/clanHallManager/functions-apply.htm");
+                            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply.htm");
                             	html.replace("%name%", "Front Platform (Decoration)");
                             	int stage = Integer.parseInt(val);
                             	int cost;
@@ -1158,12 +1158,12 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
 	                                if (Config.DEBUG) _log.warning("Deco curtains editing invoked");
 	                                val = st.nextToken();
                                     NpcHtmlMessage html = new NpcHtmlMessage(1);
-                                    html.setFile("data/html/clanHallManager/functions-apply_confirmed.htm");
+                                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply_confirmed.htm");
                                     if (getClanHall().getFunction(ClanHall.FUNC_DECO_CURTAINS) != null)
                                     {
                                     	if (getClanHall().getFunction(ClanHall.FUNC_DECO_CURTAINS).getLvl() == Integer.parseInt(val))
                                     	{
-                                    		html.setFile("data/html/clanHallManager/functions-used.htm");
+                                    		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-used.htm");
                                     		html.replace("%val%","Stage " +String.valueOf(val));
                                     		sendHtmlMessage(player, html);
                                     		return;
@@ -1174,7 +1174,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
 	                                {
                                 		case 0:
                                 			fee = 0;
-                                			html.setFile("data/html/clanHallManager/functions-cancel_confirmed.htm");
+                                			html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel_confirmed.htm");
                                 			break;
 	                                    case 1:
 	                                        fee = Config.CH_CURTAIN1_FEE;
@@ -1185,7 +1185,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
 	                                }
 	                                if (!getClanHall().updateFunctions(player,ClanHall.FUNC_DECO_CURTAINS, lvl, fee, Config.CH_CURTAIN_FEE_RATIO,(getClanHall().getFunction(ClanHall.FUNC_DECO_CURTAINS) == null)))
 	                                {
-	                                    html.setFile("data/html/clanHallManager/low_adena.htm");
+	                                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/low_adena.htm");
 	                                    sendHtmlMessage(player, html);
 	                                }
 	                                else
@@ -1202,12 +1202,12 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
 	                                if (Config.DEBUG) _log.warning("Deco fixtures editing invoked");
 	                                val = st.nextToken();
                                     NpcHtmlMessage html = new NpcHtmlMessage(1);
-                                    html.setFile("data/html/clanHallManager/functions-apply_confirmed.htm");
+                                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-apply_confirmed.htm");
                                     if (getClanHall().getFunction(ClanHall.FUNC_DECO_FRONTPLATEFORM) != null)
                                     {
                                     	if (getClanHall().getFunction(ClanHall.FUNC_DECO_FRONTPLATEFORM).getLvl() == Integer.parseInt(val))
                                     	{
-                                    		html.setFile("data/html/clanHallManager/functions-used.htm");
+                                    		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-used.htm");
                                     		html.replace("%val%","Stage " +String.valueOf(val));
                                     		sendHtmlMessage(player, html);
                                     		return;
@@ -1218,7 +1218,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
 	                                {
                                 		case 0:
                                 			fee = 0;
-                                			html.setFile("data/html/clanHallManager/functions-cancel_confirmed.htm");
+                                			html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/functions-cancel_confirmed.htm");
                                 			break;
 	                                    case 1:
 	                                        fee = Config.CH_FRONT1_FEE;
@@ -1229,7 +1229,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
 	                                }
 	                                if (!getClanHall().updateFunctions(player,ClanHall.FUNC_DECO_FRONTPLATEFORM, lvl, fee, Config.CH_FRONT_FEE_RATIO,(getClanHall().getFunction(ClanHall.FUNC_DECO_FRONTPLATEFORM) == null)))
 	                                {
-	                                    html.setFile("data/html/clanHallManager/low_adena.htm");
+	                                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/low_adena.htm");
 	                                    sendHtmlMessage(player, html);
 	                                }
 	                                else
@@ -1240,7 +1240,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
 	                    	}
                         }
                         NpcHtmlMessage html = new NpcHtmlMessage(1);
-                        html.setFile("data/html/clanHallManager/deco.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/deco.htm");
                         String curtains = "[<a action=\"bypass -h npc_%objectId%_manage deco edit_curtains 1\">Level 1</a>][<a action=\"bypass -h npc_%objectId%_manage deco edit_curtains 2\">Level 2</a>]";
                         String fixtures = "[<a action=\"bypass -h npc_%objectId%_manage deco edit_fixtures 1\">Level 1</a>][<a action=\"bypass -h npc_%objectId%_manage deco edit_fixtures 2\">Level 2</a>]";
                         if (getClanHall().getFunction(ClanHall.FUNC_DECO_CURTAINS) != null)
@@ -1274,14 +1274,14 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                     else
                     {
                         NpcHtmlMessage html = new NpcHtmlMessage(1);
-                        html.setFile("data/html/clanHallManager/manage.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/manage.htm");
                         sendHtmlMessage(player, html);
                     }
                 }
                 else
                 {
                 	NpcHtmlMessage html = new NpcHtmlMessage(1);
-                    html.setFile("data/html/clanHallManager/not_authorized.htm");
+                    html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/not_authorized.htm");
                     sendHtmlMessage(player, html);
                 }
                 return;
@@ -1315,7 +1315,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                         	else
                         	{
                         		NpcHtmlMessage html = new NpcHtmlMessage(1);
-                        		html.setFile("data/html/clanHallManager/support-no_mana.htm");
+                        		html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/support-no_mana.htm");
                                 html.replace("%mp%", String.valueOf((int)getCurrentMp()));
                                 sendHtmlMessage(player, html);
                                 return;
@@ -1326,7 +1326,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
                         NpcHtmlMessage html = new NpcHtmlMessage(1);
                         if(getClanHall().getFunction(ClanHall.FUNC_SUPPORT).getLvl() == 0)
                         	return;
-                        html.setFile("data/html/clanHallManager/support-done.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/support-done.htm");
                         html.replace("%mp%", String.valueOf((int)getCurrentMp()));
                         sendHtmlMessage(player, html);
                     }
@@ -1344,7 +1344,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
             else if (actualCommand.equalsIgnoreCase("list_back"))
             {
             	NpcHtmlMessage html = new NpcHtmlMessage(1);
-            	html.setFile("data/html/clanHallManager/chamberlain.htm");
+            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/chamberlain.htm");
                 html.replace("%objectId%", String.valueOf(this.getObjectId()));
                 html.replace("%npcname%", this.getName());
             	sendHtmlMessage(player, html);
@@ -1355,7 +1355,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
             	NpcHtmlMessage html = new NpcHtmlMessage(1); 
             	if(getClanHall().getFunction(ClanHall.FUNC_SUPPORT).getLvl() == 0) 
             		return; 
-            	html.setFile("data/html/clanHallManager/support" + getClanHall().getFunction(ClanHall.FUNC_SUPPORT).getLvl()+".htm"); 
+            	html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/support" + getClanHall().getFunction(ClanHall.FUNC_SUPPORT).getLvl()+".htm"); 
             	html.replace("%mp%", String.valueOf((int)getStatus().getCurrentMp())); 
             	sendHtmlMessage(player, html);
             	return;
@@ -1388,7 +1388,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
         if (condition == COND_OWNER_FALSE)
             filename = "data/html/clanHallManager/chamberlain-of.htm";
         NpcHtmlMessage html = new NpcHtmlMessage(1);
-        html.setFile(filename);
+        html.setFile(player.getHtmlPrefix(), filename);
         html.replace("%objectId%", String.valueOf(getObjectId()));
         html.replace("%npcId%", String.valueOf(getNpcId()));
         player.sendPacket(html);
@@ -1444,7 +1444,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
     	else
     	{
     		NpcHtmlMessage html = new NpcHtmlMessage(1);
-            html.setFile("data/html/clanHallManager/not_authorized.htm");
+            html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/not_authorized.htm");
             sendHtmlMessage(player, html);
     	}
 	}

+ 5 - 5
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ClanTraderInstance.java

@@ -37,9 +37,9 @@ public final class L2ClanTraderInstance extends L2Npc
 		if (command.equalsIgnoreCase("crp"))
 		{
 			if (player.getClan().getLevel() > 4)
-				html.setFile("data/html/clantrader/" + getNpcId() + "-2.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/clantrader/" + getNpcId() + "-2.htm");
 			else
-				html.setFile("data/html/clantrader/" + getNpcId() + "-1.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/clantrader/" + getNpcId() + "-1.htm");
 
 			sendHtmlMessage(player, html);
 			return;
@@ -83,10 +83,10 @@ public final class L2ClanTraderInstance extends L2Npc
 				sm.addItemNumber(reputation);
 				player.sendPacket(sm);*/
 
-				html.setFile("data/html/clantrader/" + getNpcId() + "-ExchangeSuccess.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/clantrader/" + getNpcId() + "-ExchangeSuccess.htm");
 			}
 			else
-				html.setFile("data/html/clantrader/" + getNpcId() + "-ExchangeFailed.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/clantrader/" + getNpcId() + "-ExchangeFailed.htm");
 
 			sendHtmlMessage(player, html);
 			return;
@@ -110,7 +110,7 @@ public final class L2ClanTraderInstance extends L2Npc
 			filename = "data/html/clantrader/" + getNpcId() + ".htm";
 
 		NpcHtmlMessage html = new NpcHtmlMessage(1);
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 	}

+ 8 - 8
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ClassMasterInstance.java

@@ -80,7 +80,7 @@ public final class L2ClassMasterInstance extends L2NpcInstance
 			if (checkAndChangeClass(player, val))
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/classmaster/ok.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/classmaster/ok.htm");
 				html.replace("%name%", CharTemplateTable.getInstance().getClassNameById(val));
 				player.sendPacket(html);
 			}
@@ -141,7 +141,7 @@ public final class L2ClassMasterInstance extends L2NpcInstance
 
 		if (!Config.ALLOW_CLASS_MASTERS)
 		{
-			html.setFile("data/html/classmaster/disabled.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/classmaster/disabled.htm");
 		}
 		else if (!Config.CLASS_MASTER_SETTINGS.isAllowed(level))
 		{
@@ -186,7 +186,7 @@ public final class L2ClassMasterInstance extends L2NpcInstance
 			final ClassId currentClassId = player.getClassId();
 			if (currentClassId.level() >= level)
 			{
-				html.setFile("data/html/classmaster/nomore.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/classmaster/nomore.htm");
 			}
 			else
 			{
@@ -210,13 +210,13 @@ public final class L2ClassMasterInstance extends L2NpcInstance
 
 					if (menu.length() > 0)
 					{
-						html.setFile("data/html/classmaster/template.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/classmaster/template.htm");
 						html.replace("%name%", CharTemplateTable.getInstance().getClassNameById(currentClassId.getId()));
 						html.replace("%menu%", menu.toString());
 					}
 					else
 					{
-						html.setFile("data/html/classmaster/comebacklater.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/classmaster/comebacklater.htm");
 						html.replace("%level%", String.valueOf(getMinLevel(level - 1)));
 					}
 				}
@@ -224,11 +224,11 @@ public final class L2ClassMasterInstance extends L2NpcInstance
 				{
 					if (minLevel < Integer.MAX_VALUE)
 					{
-						html.setFile("data/html/classmaster/comebacklater.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/classmaster/comebacklater.htm");
 						html.replace("%level%", String.valueOf(minLevel));
 					}
 					else
-						html.setFile("data/html/classmaster/nomore.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/classmaster/nomore.htm");
 				}
 			}
 		}
@@ -245,7 +245,7 @@ public final class L2ClassMasterInstance extends L2NpcInstance
 				&& !Config.ALLOW_ENTIRE_TREE)
 			return;
 
-		String msg = HtmCache.getInstance().getHtm("data/html/classmaster/tutorialtemplate.htm");
+		String msg = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/classmaster/tutorialtemplate.htm");
 
 		msg = msg.replaceAll("%name%", CharTemplateTable.getInstance().getClassNameById(currentClassId.getId()));
 

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2DawnPriestInstance.java

@@ -97,7 +97,7 @@ public class L2DawnPriestInstance extends L2SignsPriestInstance
 		}
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 	}

+ 3 - 3
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2DoormenInstance.java

@@ -84,9 +84,9 @@ public class L2DoormenInstance extends L2NpcInstance
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
 
 		if (!isOwnerClan(player))
-			html.setFile("data/html/doormen/"+ getTemplate().npcId + "-no.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/doormen/"+ getTemplate().npcId + "-no.htm");
 		else
-			html.setFile("data/html/doormen/"+ getTemplate().npcId + ".htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/doormen/"+ getTemplate().npcId + ".htm");
 
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
@@ -119,7 +119,7 @@ public class L2DoormenInstance extends L2NpcInstance
 		player.sendPacket(ActionFailed.STATIC_PACKET);
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile("data/html/doormen/"+ getTemplate().npcId + "-busy.htm");
+		html.setFile(player.getHtmlPrefix(), "data/html/doormen/"+ getTemplate().npcId + "-busy.htm");
 		player.sendPacket(html);
 	}
 

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2DungeonGatekeeperInstance.java

@@ -79,7 +79,7 @@ public class L2DungeonGatekeeperInstance extends L2Npc
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
 				filename += "necro_no.htm";
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				player.sendPacket(html);
 			}
 			else
@@ -118,7 +118,7 @@ public class L2DungeonGatekeeperInstance extends L2Npc
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
 				filename += "cata_no.htm";
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				player.sendPacket(html);
 			}
 			else

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2DuskPriestInstance.java

@@ -97,7 +97,7 @@ public class L2DuskPriestInstance extends L2SignsPriestInstance
 		}
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 	}

+ 7 - 7
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FameManagerInstance.java

@@ -52,13 +52,13 @@ public class L2FameManagerInstance extends L2Npc
 					player.setPkKills(player.getPkKills()-1);
 					player.sendPacket(new UserInfo(player));
 					player.sendPacket(new ExBrExtraUserInfo(player));
-					html.setFile("data/html/famemanager/"+getNpcId()+"-3.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/famemanager/"+getNpcId()+"-3.htm");
 				}
 				else
-					html.setFile("data/html/famemanager/"+getNpcId()+"-4.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/famemanager/"+getNpcId()+"-4.htm");
 			}
 			else
-				html.setFile("data/html/famemanager/"+getNpcId()+"-lowfame.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/famemanager/"+getNpcId()+"-lowfame.htm");
 
 			sendHtmlMessage(player, html);
 			return;
@@ -75,13 +75,13 @@ public class L2FameManagerInstance extends L2Npc
 					player.sendPacket(new ExBrExtraUserInfo(player));
 					player.getClan().addReputationScore(50, true);
 					player.sendPacket(new SystemMessage(SystemMessageId.ACQUIRED_50_CLAN_FAME_POINTS));
-					html.setFile("data/html/famemanager/"+getNpcId()+"-5.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/famemanager/"+getNpcId()+"-5.htm");
 				}
 				else
-					html.setFile("data/html/famemanager/"+getNpcId()+"-lowfame.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/famemanager/"+getNpcId()+"-lowfame.htm");
 			}
 			else
-				html.setFile("data/html/famemanager/"+getNpcId()+"-noclan.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/famemanager/"+getNpcId()+"-noclan.htm");
 
 			sendHtmlMessage(player, html);
 			return;
@@ -105,7 +105,7 @@ public class L2FameManagerInstance extends L2Npc
 			filename = "data/html/famemanager/"+getNpcId()+".htm";
 
 		NpcHtmlMessage html = new NpcHtmlMessage(1);
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 	}

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FestivalGuideInstance.java

@@ -452,7 +452,7 @@ public final class L2FestivalGuideInstance extends L2Npc
 
         // Send a Server->Client NpcHtmlMessage containing the text of the L2NpcInstance to the L2PcInstance
         NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-        html.setFile(filename);
+        html.setFile(player.getHtmlPrefix(), filename);
         html.replace("%objectId%",String.valueOf(getObjectId()));
         html.replace("%festivalType%", SevenSignsFestival.getFestivalName(_festivalType));
         html.replace("%cycleMins%", String.valueOf(SevenSignsFestival.getInstance().getMinsToNextCycle()));

+ 3 - 3
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortDoormenInstance.java

@@ -35,11 +35,11 @@ public class L2FortDoormenInstance extends L2DoormenInstance
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
 
 		if (!isOwnerClan(player))
-			html.setFile("data/html/doormen/"+ getTemplate().npcId + "-no.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/doormen/"+ getTemplate().npcId + "-no.htm");
 		else if (isUnderSiege())
-			html.setFile("data/html/doormen/"+ getTemplate().npcId + "-busy.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/doormen/"+ getTemplate().npcId + "-busy.htm");
 		else
-			html.setFile("data/html/doormen/"+ getTemplate().npcId + ".htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/doormen/"+ getTemplate().npcId + ".htm");
 
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortEnvoyInstance.java

@@ -43,7 +43,7 @@ public class L2FortEnvoyInstance extends L2Npc
 			filename = "data/html/fortress/envoy-no.htm";
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%castleName%", String.valueOf(CastleManager.getInstance().getCastleById(getFort().getCastleIdFromEnvoy(getNpcId())).getName()));
 		player.sendPacket(html);
@@ -81,7 +81,7 @@ public class L2FortEnvoyInstance extends L2Npc
 				}
 			}
 			getFort().setFortState(val, castleId);
-			html.setFile("data/html/fortress/envoy-ok.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/fortress/envoy-ok.htm");
 			html.replace("%castleName%", String.valueOf(CastleManager.getInstance().getCastleById(getFort().getCastleIdFromEnvoy(getNpcId())).getName()));
 			player.sendPacket(html);
 		}

+ 6 - 6
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortLogisticsInstance.java

@@ -62,7 +62,7 @@ public class L2FortLogisticsInstance extends L2MerchantInstance
 			if (player.getClan() != null && getFort().getOwnerClan() != null && player.getClan() == getFort().getOwnerClan() && player.isClanLeader())
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/fortress/logistics-rewards.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/fortress/logistics-rewards.htm");
 				int blood = getFort().getBloodOathReward();
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				html.replace("%bloodoath%", String.valueOf(blood));
@@ -72,7 +72,7 @@ public class L2FortLogisticsInstance extends L2MerchantInstance
 			else
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/fortress/logistics-noprivs.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/fortress/logistics-noprivs.htm");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				player.sendPacket(html);
 				return;
@@ -86,12 +86,12 @@ public class L2FortLogisticsInstance extends L2MerchantInstance
 				int blood = getFort().getBloodOathReward();
 				if (blood > 0)
 				{
-					html.setFile("data/html/fortress/logistics-blood.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/logistics-blood.htm");
 					player.addItem("Quest", BLOOD_OATH, blood, this, true);
 					getFort().setBloodOathReward(0);
 				}
 				else
-					html.setFile("data/html/fortress/logistics-noblood.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/logistics-noblood.htm");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				player.sendPacket(html);
 				return;
@@ -99,7 +99,7 @@ public class L2FortLogisticsInstance extends L2MerchantInstance
 			else
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/fortress/logistics-noprivs.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/fortress/logistics-noprivs.htm");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				player.sendPacket(html);
 				return;
@@ -126,7 +126,7 @@ public class L2FortLogisticsInstance extends L2MerchantInstance
 			filename = "data/html/fortress/logistics-" + val + ".htm";
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcId%", String.valueOf(getNpcId()));
 		if (getFort().getOwnerClan() != null) 

+ 57 - 57
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortManagerInstance.java

@@ -89,7 +89,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 				if ((player.getClanPrivileges() & L2Clan.CP_CS_DISMISS) == L2Clan.CP_CS_DISMISS)
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/fortress/foreman-expel.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-expel.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
 					return;
@@ -97,7 +97,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/fortress/foreman-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-noprivs.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
 					return;
@@ -109,7 +109,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 				{
 					getFort().banishForeigners(); // Move non-clan members off fortress area
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/fortress/foreman-expeled.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-expeled.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
 					return;
@@ -117,7 +117,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/fortress/foreman-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-noprivs.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
 					return;
@@ -130,7 +130,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 					SimpleDateFormat format2 = new SimpleDateFormat("HH");
 					SimpleDateFormat format3 = new SimpleDateFormat("mm");
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/fortress/foreman-report.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-report.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					html.replace("%hr%", format2.format(getFort().getOwnedTime()));
 					html.replace("%min%", format3.format(getFort().getOwnedTime()));
@@ -142,7 +142,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 					SimpleDateFormat format2 = new SimpleDateFormat("HH");
 					SimpleDateFormat format3 = new SimpleDateFormat("mm");
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/fortress/foreman-report.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-report.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					html.replace("%hr%", format2.format(getFort().getOwnedTime()));
 					html.replace("%min%", format3.format(getFort().getOwnedTime()));
@@ -163,7 +163,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 						if (open)
 						{
 							NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-							html.setFile("data/html/fortress/foreman-opened.htm");
+							html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-opened.htm");
 							html.replace("%objectId%", String.valueOf(getObjectId()));
 							player.sendPacket(html);
 							return;
@@ -171,7 +171,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 						else
 						{
 							NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-							html.setFile("data/html/fortress/foreman-closed.htm");
+							html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-closed.htm");
 							html.replace("%objectId%", String.valueOf(getObjectId()));
 							player.sendPacket(html);
 							return;
@@ -180,7 +180,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 					else
 					{
 						NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-						html.setFile("data/html/fortress/" + getTemplate().npcId	+ "-d.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/fortress/" + getTemplate().npcId	+ "-d.htm");
 						html.replace("%objectId%", String.valueOf(getObjectId()));
 						html.replace("%npcname%", getName());
 						player.sendPacket(html);
@@ -190,7 +190,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile("data/html/fortress/foreman-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-noprivs.htm");
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
 					return;
@@ -208,7 +208,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
                     	if (Config.L2JMOD_ENABLE_WAREHOUSESORTING_CLAN)
                     	{
                     		String htmFile = "data/html/mods/WhSortedC.htm";
-	                		String htmContent = HtmCache.getInstance().getHtm(htmFile);
+	                		String htmContent = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmFile);
 	                		if (htmContent != null)
 	                		{
 	                			NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId());
@@ -226,13 +226,13 @@ public class L2FortManagerInstance extends L2MerchantInstance
                     }
                     else
                     {
-                        html.setFile("data/html/fortress/foreman-vault.htm");
+                        html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-vault.htm");
                         sendHtmlMessage(player, html);
                     }
                 }
                 else
                 {
-                    html.setFile("data/html/fortress/foreman-noprivs.htm");
+                    html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-noprivs.htm");
                     sendHtmlMessage(player, html);
                 }
                 return;
@@ -254,9 +254,9 @@ public class L2FortManagerInstance extends L2MerchantInstance
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
 					if (getFort().getFunction(Fort.FUNC_TELEPORT) == null)
-						html.setFile("data/html/fortress/foreman-nac.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-nac.htm");
 					else
-						html.setFile("data/html/fortress/"+ getNpcId()+ "-t"
+						html.setFile(player.getHtmlPrefix(), "data/html/fortress/"+ getNpcId()+ "-t"
 								+ getFort().getFunction(Fort.FUNC_TELEPORT).getLvl()+ ".htm");
 					sendHtmlMessage(player, html);
 				}
@@ -264,10 +264,10 @@ public class L2FortManagerInstance extends L2MerchantInstance
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
 					if (getFort().getFunction(Fort.FUNC_SUPPORT) == null)
-						html.setFile("data/html/fortress/foreman-nac.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-nac.htm");
 					else
 					{
-						html.setFile("data/html/fortress/support"
+						html.setFile(player.getHtmlPrefix(), "data/html/fortress/support"
 								+ getFort().getFunction(Fort.FUNC_SUPPORT).getLvl()+ ".htm");
 						html.replace("%mp%", String.valueOf((int)getCurrentMp()));
 					}
@@ -278,7 +278,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile("data/html/fortress/foreman-functions.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-functions.htm");
 					if (getFort().getFunction(Fort.FUNC_RESTORE_EXP) != null)
 						html.replace("%xp_regen%", String.valueOf(getFort().getFunction(Fort.FUNC_RESTORE_EXP).getLvl()));
 					else
@@ -312,7 +312,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							if (val.equalsIgnoreCase("hp_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel.htm");
 								html.replace("%apply%", "recovery hp 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -320,7 +320,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							else if (val.equalsIgnoreCase("mp_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel.htm");
 								html.replace("%apply%", "recovery mp 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -328,7 +328,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							else if (val.equalsIgnoreCase("exp_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel.htm");
 								html.replace("%apply%", "recovery exp 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -337,7 +337,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply.htm");
 								html.replace("%name%", "(HP Recovery Device)");
 								int percent = Integer.parseInt(val);
 								int cost;
@@ -367,7 +367,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply.htm");
 								html.replace("%name%", "(MP Recovery)");
 								int percent = Integer.parseInt(val);
 								int cost;
@@ -396,7 +396,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply.htm");
 								html.replace("%name%", "(EXP Recovery Device)");
 								int percent = Integer.parseInt(val);
 								int cost;
@@ -430,12 +430,12 @@ public class L2FortManagerInstance extends L2MerchantInstance
 										_log.warning("Mp editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/fortress/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply_confirmed.htm");
 									if (getFort().getFunction(Fort.FUNC_RESTORE_HP) != null)
 									{
 										if (getFort().getFunction(Fort.FUNC_RESTORE_HP).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/fortress/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-used.htm");
 											html.replace("%val%", String.valueOf(val)
 													+ "%");
 											sendHtmlMessage(player, html);
@@ -447,7 +447,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/fortress/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel_confirmed.htm");
 											break;
 										case 300:
 											fee = Config.FS_HPREG1_FEE;
@@ -458,7 +458,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									}
 									if (!getFort().updateFunctions(player, Fort.FUNC_RESTORE_HP, percent, fee, Config.FS_HPREG_FEE_RATIO, (getFort().getFunction(Fort.FUNC_RESTORE_HP) == null)))
 									{
-										html.setFile("data/html/fortress/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/fortress/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									sendHtmlMessage(player, html);
@@ -474,12 +474,12 @@ public class L2FortManagerInstance extends L2MerchantInstance
 										_log.warning("Mp editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/fortress/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply_confirmed.htm");
 									if (getFort().getFunction(Fort.FUNC_RESTORE_MP) != null)
 									{
 										if (getFort().getFunction(Fort.FUNC_RESTORE_MP).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/fortress/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-used.htm");
 											html.replace("%val%", String.valueOf(val)
 													+ "%");
 											sendHtmlMessage(player, html);
@@ -491,7 +491,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/fortress/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel_confirmed.htm");
 											break;
 										case 40:
 											fee = Config.FS_MPREG1_FEE;
@@ -502,7 +502,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									}
 									if (!getFort().updateFunctions(player, Fort.FUNC_RESTORE_MP, percent, fee, Config.FS_MPREG_FEE_RATIO, (getFort().getFunction(Fort.FUNC_RESTORE_MP) == null)))
 									{
-										html.setFile("data/html/fortress/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/fortress/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									sendHtmlMessage(player, html);
@@ -518,12 +518,12 @@ public class L2FortManagerInstance extends L2MerchantInstance
 										_log.warning("Exp editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/fortress/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply_confirmed.htm");
 									if (getFort().getFunction(Fort.FUNC_RESTORE_EXP) != null)
 									{
 										if (getFort().getFunction(Fort.FUNC_RESTORE_EXP).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/fortress/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-used.htm");
 											html.replace("%val%", String.valueOf(val)
 													+ "%");
 											sendHtmlMessage(player, html);
@@ -535,7 +535,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/fortress/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel_confirmed.htm");
 											break;
 										case 45:
 											fee = Config.FS_EXPREG1_FEE;
@@ -546,7 +546,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									}
 									if (!getFort().updateFunctions(player, Fort.FUNC_RESTORE_EXP, percent, fee, Config.FS_EXPREG_FEE_RATIO, (getFort().getFunction(Fort.FUNC_RESTORE_EXP) == null)))
 									{
-										html.setFile("data/html/fortress/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/fortress/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									sendHtmlMessage(player, html);
@@ -555,7 +555,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							}
 						}
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile("data/html/fortress/edit_recovery.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/fortress/edit_recovery.htm");
 						String hp = "[<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 300\">300%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_hp 400\">400%</a>]";
 						String exp = "[<a action=\"bypass -h npc_%objectId%_manage recovery edit_exp 45\">45%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_exp 50\">50%</a>]";
 						String mp = "[<a action=\"bypass -h npc_%objectId%_manage recovery edit_mp 40\">40%</a>][<a action=\"bypass -h npc_%objectId%_manage recovery edit_mp 50\">50%</a>]";
@@ -631,7 +631,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							if (val.equalsIgnoreCase("tele_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel.htm");
 								html.replace("%apply%", "other tele 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -639,7 +639,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							else if (val.equalsIgnoreCase("support_cancel"))
 							{
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-cancel.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel.htm");
 								html.replace("%apply%", "other support 0");
 								sendHtmlMessage(player, html);
 								return;
@@ -648,7 +648,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply.htm");
 								html.replace("%name%", "Insignia (Supplementary Magic)");
 								int stage = Integer.parseInt(val);
 								int cost;
@@ -676,7 +676,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							{
 								val = st.nextToken();
 								NpcHtmlMessage html = new NpcHtmlMessage(1);
-								html.setFile("data/html/fortress/functions-apply.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply.htm");
 								html.replace("%name%", "Mirror (Teleportation Device)");
 								int stage = Integer.parseInt(val);
 								int cost;
@@ -710,12 +710,12 @@ public class L2FortManagerInstance extends L2MerchantInstance
 										_log.warning("Tele editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/fortress/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply_confirmed.htm");
 									if (getFort().getFunction(Fort.FUNC_TELEPORT) != null)
 									{
 										if (getFort().getFunction(Fort.FUNC_TELEPORT).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/fortress/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-used.htm");
 											html.replace("%val%", "Stage "	+ String.valueOf(val));
 											sendHtmlMessage(player, html);
 											return;
@@ -726,7 +726,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/fortress/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel_confirmed.htm");
 											break;
 										case 1:
 											fee = Config.FS_TELE1_FEE;
@@ -737,7 +737,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									}
 									if (!getFort().updateFunctions(player, Fort.FUNC_TELEPORT, lvl, fee, Config.FS_TELE_FEE_RATIO, (getFort().getFunction(Fort.FUNC_TELEPORT) == null)))
 									{
-										html.setFile("data/html/fortress/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/fortress/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									sendHtmlMessage(player, html);
@@ -753,12 +753,12 @@ public class L2FortManagerInstance extends L2MerchantInstance
 										_log.warning("Support editing invoked");
 									val = st.nextToken();
 									NpcHtmlMessage html = new NpcHtmlMessage(1);
-									html.setFile("data/html/fortress/functions-apply_confirmed.htm");
+									html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-apply_confirmed.htm");
 									if (getFort().getFunction(Fort.FUNC_SUPPORT) != null)
 									{
 										if (getFort().getFunction(Fort.FUNC_SUPPORT).getLvl() == Integer.parseInt(val))
 										{
-											html.setFile("data/html/fortress/functions-used.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-used.htm");
 											html.replace("%val%", "Stage "
 													+ String.valueOf(val));
 											sendHtmlMessage(player, html);
@@ -770,7 +770,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									{
 										case 0:
 											fee = 0;
-											html.setFile("data/html/fortress/functions-cancel_confirmed.htm");
+											html.setFile(player.getHtmlPrefix(), "data/html/fortress/functions-cancel_confirmed.htm");
 											break;
 										case 1:
 											fee = Config.FS_SUPPORT1_FEE;
@@ -781,7 +781,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 									}
 									if (!getFort().updateFunctions(player, Fort.FUNC_SUPPORT, lvl, fee, Config.FS_SUPPORT_FEE_RATIO, (getFort().getFunction(Fort.FUNC_SUPPORT) == null)))
 									{
-										html.setFile("data/html/fortress/low_adena.htm");
+										html.setFile(player.getHtmlPrefix(), "data/html/fortress/low_adena.htm");
 										sendHtmlMessage(player, html);
 									}
 									else
@@ -791,7 +791,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 							}
 						}
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile("data/html/fortress/edit_other.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/fortress/edit_other.htm");
 						String tele = "[<a action=\"bypass -h npc_%objectId%_manage other edit_tele 1\">Level 1</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_tele 2\">Level 2</a>]";
 						String support = "[<a action=\"bypass -h npc_%objectId%_manage other edit_support 1\">Level 1</a>][<a action=\"bypass -h npc_%objectId%_manage other edit_support 2\">Level 2</a>]";
 						if (getFort().getFunction(Fort.FUNC_TELEPORT) != null)
@@ -841,14 +841,14 @@ public class L2FortManagerInstance extends L2MerchantInstance
 					else
 					{
 						NpcHtmlMessage html = new NpcHtmlMessage(1);
-						html.setFile("data/html/fortress/manage.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/fortress/manage.htm");
 						sendHtmlMessage(player, html);
 					}
 				}
 				else
 				{
 					NpcHtmlMessage html = new NpcHtmlMessage(1);
-					html.setFile("data/html/fortress/foreman-noprivs.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-noprivs.htm");
 					sendHtmlMessage(player, html);
 				}
 				return;
@@ -882,13 +882,13 @@ public class L2FortManagerInstance extends L2MerchantInstance
 								this.doCast(skill);
 							else
 							{
-								html.setFile("data/html/fortress/support-no_mana.htm");
+								html.setFile(player.getHtmlPrefix(), "data/html/fortress/support-no_mana.htm");
 								html.replace("%mp%", String.valueOf((int)getCurrentMp()));
 								sendHtmlMessage(player, html);
 								return;
 							}
 						}
-						html.setFile("data/html/fortress/support-done.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/fortress/support-done.htm");
 						html.replace("%mp%", String.valueOf((int)getCurrentMp()));
 						sendHtmlMessage(player, html);
 					}
@@ -908,7 +908,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
 				if (getFort().getFunction(Fort.FUNC_SUPPORT).getLvl() == 0)
 					return;
-				html.setFile("data/html/fortress/support"
+				html.setFile(player.getHtmlPrefix(), "data/html/fortress/support"
 						+ getFort().getFunction(Fort.FUNC_SUPPORT).getLvl()	+ ".htm");
 				html.replace("%mp%", String.valueOf((int)getStatus().getCurrentMp()));
 				sendHtmlMessage(player, html);
@@ -939,7 +939,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 		}
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcname%", getName());
 		player.sendPacket(html);
@@ -1002,7 +1002,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
     	else
         {
     		NpcHtmlMessage html = new NpcHtmlMessage(1);
-            html.setFile("data/html/fortress/foreman-noprivs.htm");
+            html.setFile(player.getHtmlPrefix(), "data/html/fortress/foreman-noprivs.htm");
             sendHtmlMessage(player, html);
         }
     }

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortSiegeNpcInstance.java

@@ -101,7 +101,7 @@ public class L2FortSiegeNpcInstance extends L2Npc
 			filename = "data/html/fortress/merchant-" + val + ".htm";
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcId%", String.valueOf(getNpcId()));
 		if (getFort().getOwnerClan() != null) 

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortSupportCaptainInstance.java

@@ -99,7 +99,7 @@ public class L2FortSupportCaptainInstance extends L2MerchantInstance
 		if (player.getClan() == null || getFort().getOwnerClan() == null || player.getClan() != getFort().getOwnerClan())
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile("data/html/fortress/supportunit-noclan.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/fortress/supportunit-noclan.htm");
 			html.replace("%objectId%", String.valueOf(getObjectId()));
 			player.sendPacket(html);
 			return;
@@ -120,7 +120,7 @@ public class L2FortSupportCaptainInstance extends L2MerchantInstance
 			filename = "data/html/fortress/supportunit-" + val + ".htm";
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcId%", String.valueOf(getNpcId()));
 		if (getFort().getOwnerClan() != null) 

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ManorManagerInstance.java

@@ -126,7 +126,7 @@ public class L2ManorManagerInstance extends L2MerchantInstance
 		if (CastleManorManager.getInstance().isDisabled())
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile("data/html/npcdefault.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/npcdefault.htm");
 			html.replace("%objectId%", String.valueOf(getObjectId()));
 			html.replace("%npcname%", getName());
 			player.sendPacket(html);
@@ -140,7 +140,7 @@ public class L2ManorManagerInstance extends L2MerchantInstance
 	public void showChatWindow(L2PcInstance player, String filename)
 	{
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(getHtmlPath() + filename);
+		html.setFile(player.getHtmlPrefix(), getHtmlPath() + filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcId%", String.valueOf(getNpcId()));
 		html.replace("%npcname%", getName());

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2MercManagerInstance.java

@@ -73,7 +73,7 @@ public final class L2MercManagerInstance extends L2MerchantInstance
 			filename = "data/html/mercmanager/mercmanager.htm"; // Owner message window
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcId%", String.valueOf(getNpcId()));
 		html.replace("%npcname%", getName());

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2MerchantInstance.java

@@ -138,9 +138,9 @@ public class L2MerchantInstance extends L2NpcInstance
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
 			if (player.getLevel() >= 40)
-				html.setFile("data/html/merchant/shadow_item.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/merchant/shadow_item.htm");
 			else
-				html.setFile("data/html/merchant/shadow_item-lowlevel.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/merchant/shadow_item-lowlevel.htm");
 			html.replace("%objectId%", String.valueOf(getObjectId()));
 			player.sendPacket(html);
 		}

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2MerchantSummonInstance.java

@@ -241,7 +241,7 @@ public class L2MerchantSummonInstance extends L2SummonInstance
 		player.sendPacket(ActionFailed.STATIC_PACKET);
 		final String filename = "data/html/merchant/"+getNpcId()+".htm";
 		final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));       
 		player.sendPacket(html);
 	}

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java

@@ -49,10 +49,10 @@ public class L2NpcBufferInstance extends L2Npc
 		if (playerInstance == null)
 			return;
 		
-		String htmContent = HtmCache.getInstance().getHtm("data/html/mods/NpcBuffer.htm");
+		String htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), "data/html/mods/NpcBuffer.htm");
 		
 		if (val > 0)
-			htmContent = HtmCache.getInstance().getHtm("data/html/mods/NpcBuffer-" + val + ".htm");
+			htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), "data/html/mods/NpcBuffer-" + val + ".htm");
 		
 		if (htmContent != null)
 		{

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ObservationInstance.java

@@ -113,7 +113,7 @@ public final class L2ObservationInstance extends L2Npc
 		}
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 	}

+ 9 - 9
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2OlympiadManagerInstance.java

@@ -88,7 +88,7 @@ public class L2OlympiadManagerInstance extends L2Npc
 						classed = array[0];
 						nonClassed = array[1];
 					}
-					html.setFile(Olympiad.OLYMPIAD_HTML_PATH + "noble_registered.htm");
+					html.setFile(player.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "noble_registered.htm");
 					if (Config.ALT_OLY_REG_DISPLAY > 0)
 					{
 						html.replace("%listClassed%", classed < Config.ALT_OLY_REG_DISPLAY ? FEWER_THAN : MORE_THAN);
@@ -106,7 +106,7 @@ public class L2OlympiadManagerInstance extends L2Npc
 					break;
 				case 3:
 					int points = Olympiad.getInstance().getNoblePoints(player.getObjectId());
-					html.setFile(Olympiad.OLYMPIAD_HTML_PATH + "noble_points1.htm");
+					html.setFile(player.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "noble_points1.htm");
 					html.replace("%points%", String.valueOf(points));
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
@@ -121,13 +121,13 @@ public class L2OlympiadManagerInstance extends L2Npc
 					passes = Olympiad.getInstance().getNoblessePasses(player, false);
 					if (passes > 0)
 					{
-						html.setFile(Olympiad.OLYMPIAD_HTML_PATH + "noble_settle.htm");
+						html.setFile(player.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "noble_settle.htm");
 						html.replace("%objectId%", String.valueOf(getObjectId()));
 						player.sendPacket(html);
 					}
 					else
 					{
-						html.setFile(Olympiad.OLYMPIAD_HTML_PATH + "noble_nopoints.htm");
+						html.setFile(player.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "noble_nopoints.htm");
 						html.replace("%objectId%", String.valueOf(getObjectId()));
 						player.sendPacket(html);
 					}
@@ -140,7 +140,7 @@ public class L2OlympiadManagerInstance extends L2Npc
 					break;
 				case 9:
 					int point = Olympiad.getInstance().getLastNobleOlympiadPoints(player.getObjectId());
-					html.setFile(Olympiad.OLYMPIAD_HTML_PATH + "noble_points2.htm");
+					html.setFile(player.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "noble_points2.htm");
 					html.replace("%points%", String.valueOf(point));
 					html.replace("%objectId%", String.valueOf(getObjectId()));
 					player.sendPacket(html);
@@ -205,13 +205,13 @@ public class L2OlympiadManagerInstance extends L2Npc
 
 			if (player.olyBuff > 0)
 			{
-				html.setFile(player.olyBuff == 5 ? Olympiad.OLYMPIAD_HTML_PATH + "olympiad_buffs.htm" : Olympiad.OLYMPIAD_HTML_PATH + "olympiad_5buffs.htm");
+				html.setFile(player.getHtmlPrefix(), player.olyBuff == 5 ? Olympiad.OLYMPIAD_HTML_PATH + "olympiad_buffs.htm" : Olympiad.OLYMPIAD_HTML_PATH + "olympiad_5buffs.htm");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				player.sendPacket(html);
 			}
 			else
 			{
-				html.setFile(Olympiad.OLYMPIAD_HTML_PATH + "olympiad_nobuffs.htm");
+				html.setFile(player.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "olympiad_nobuffs.htm");
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				player.sendPacket(html);
 				deleteMe();
@@ -227,7 +227,7 @@ public class L2OlympiadManagerInstance extends L2Npc
 			{
 				case 1:
 					FastMap<Integer, String> matches = Olympiad.getInstance().getMatchList();
-					reply.setFile(Olympiad.OLYMPIAD_HTML_PATH + "olympiad_observe1.htm");
+					reply.setFile(player.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "olympiad_observe1.htm");
 
 					for (int i = 0; i < Olympiad.getStadiumCount(); i++)
 					{
@@ -245,7 +245,7 @@ public class L2OlympiadManagerInstance extends L2Npc
 					if ((classId >= 88 && classId <= 118) || (classId >= 131 && classId <= 134) || classId == 136)
 					{
 						L2FastList<String> names = Olympiad.getInstance().getClassLeaderBoard(classId);
-						reply.setFile(Olympiad.OLYMPIAD_HTML_PATH + "olympiad_ranking.htm");
+						reply.setFile(player.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "olympiad_ranking.htm");
 
 						int index = 1;
 						for (String name : names)

+ 51 - 7
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -270,8 +270,8 @@ public final class L2PcInstance extends L2Playable
 
 	// Character Character SQL String Definitions:
     private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,fame,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,title_color,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,newbie,nobless,power_grade,last_recom_date,createTime) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
-	private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,fame=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,bookmarkslot=?,vitality_points=? WHERE charId=?";
-    private static final String RESTORE_CHARACTER = "SELECT account_name, charId, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, fame, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, title_color, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,bookmarkslot,vitality_points,createTime FROM characters WHERE charId=?";
+	private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,fame=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,bookmarkslot=?,vitality_points=?,language=? WHERE charId=?";
+    private static final String RESTORE_CHARACTER = "SELECT account_name, charId, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, fame, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, title_color, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,bookmarkslot,vitality_points,createTime,language FROM characters WHERE charId=?";
 
     // Character Teleport Bookmark:
     private static final String INSERT_TP_BOOKMARK = "INSERT INTO character_tpbookmark (charId,Id,x,y,z,icon,tag,name) values (?,?,?,?,?,?,?,?)";
@@ -373,6 +373,9 @@ public final class L2PcInstance extends L2Playable
 	private long _deleteTimer;
 	private long _creationTime; 
 
+	private String _lang = null;
+	private String _htmlPrefix = null;
+
 	private boolean _isOnline = false;
 	private long _onlineTime;
 	private long _onlineBeginTime;
@@ -1723,7 +1726,7 @@ public final class L2PcInstance extends L2Playable
 	private void showQuestWindow(String questId, String stateId)
 	{
 		String path = "data/scripts/quests/"+questId+"/"+stateId+".htm";
-		String content = HtmCache.getInstance().getHtm(path);  //TODO path for quests html
+		String content = HtmCache.getInstance().getHtm(getHtmlPrefix(), path);  //TODO path for quests html
 
 		if (content != null)
 		{
@@ -7401,7 +7404,10 @@ public final class L2PcInstance extends L2Playable
 				
 				//character creation Time 
 				player.setCreateTime(rset.getLong("createTime")); 
-				
+
+				// Language
+				player.setLang(rset.getString("language"));
+
 				// Retrieve the name and ID of the other characters assigned to this account.
 				PreparedStatement stmt = con.prepareStatement("SELECT charId, char_name FROM characters WHERE account_name=? AND charId<>?");
 				stmt.setString(1, player._accountName);
@@ -7749,7 +7755,8 @@ public final class L2PcInstance extends L2Playable
 			statement.setLong(52, getDeathPenaltyBuffLevel());
 			statement.setInt(53, getBookMarkSlot());
 			statement.setInt(54, getVitalityPoints());
-            statement.setInt(55, getObjectId());
+			statement.setString(55, getLang());
+            statement.setInt(56, getObjectId());
 
 			statement.execute();
 			statement.close();
@@ -12575,7 +12582,7 @@ public final class L2PcInstance extends L2Playable
 		    			_punishLevel = state;
 		    			// Open a Html message to inform the player
 		        		NpcHtmlMessage htmlMsg = new NpcHtmlMessage(0);
-			            String jailInfos = HtmCache.getInstance().getHtm("data/html/jail_out.htm");
+			            String jailInfos = HtmCache.getInstance().getHtm(getHtmlPrefix(), "data/html/jail_out.htm");
 			            if (jailInfos != null)
 			                htmlMsg.setHtml(jailInfos);
 			            else
@@ -12635,7 +12642,7 @@ public final class L2PcInstance extends L2Playable
 	
 	            // Open a Html message to inform the player
 	            NpcHtmlMessage htmlMsg = new NpcHtmlMessage(0);
-	            String jailInfos = HtmCache.getInstance().getHtm("data/html/jail_in.htm");
+	            String jailInfos = HtmCache.getInstance().getHtm(getHtmlPrefix(), "data/html/jail_in.htm");
 	            if (jailInfos != null)
 	                htmlMsg.setHtml(jailInfos);
 	            else
@@ -14738,4 +14745,41 @@ public final class L2PcInstance extends L2Playable
 	{
 		return _uiKeySettings;
 	}
+
+	public String getHtmlPrefix()
+	{
+		if (!Config.L2JMOD_MULTILANG_ENABLE)
+			return null;
+
+		return _htmlPrefix;
+	}
+
+	public String getLang()
+	{
+		return _lang;
+	}
+
+	public boolean setLang(String lang)
+	{
+		boolean result = false;
+		if (Config.L2JMOD_MULTILANG_ENABLE)
+		{
+			if (Config.L2JMOD_MULTILANG_ALLOWED.contains(lang))
+			{
+				_lang = lang;
+				result = true;
+			}
+			else
+				_lang = Config.L2JMOD_MULTILANG_DEFAULT;
+
+			_htmlPrefix = "data/lang/" + _lang + "/";
+		}
+		else
+		{
+			_lang = null;
+			_htmlPrefix = null;
+		}
+
+		return result;
+	}
 }

+ 5 - 5
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PetManagerInstance.java

@@ -54,7 +54,7 @@ public class L2PetManagerInstance extends L2MerchantInstance
 			filename = "data/html/petmanager/restore-unsummonpet.htm";
 
 		NpcHtmlMessage html = new NpcHtmlMessage(1);
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		if (Config.ALLOW_RENTPET && Config.LIST_PET_RENT_NPC.contains(getNpcId()))
 			html.replace("_Quest", "_RentPet\">Rent Pet</a><br><a action=\"bypass -h npc_%objectId%_Quest");
 		html.replace("%objectId%", String.valueOf(getObjectId()));
@@ -110,7 +110,7 @@ public class L2PetManagerInstance extends L2MerchantInstance
 			if (!ok)
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/petmanager/evolve_no.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/petmanager/evolve_no.htm");
 				player.sendPacket(html);
 			}
 			return;
@@ -142,7 +142,7 @@ public class L2PetManagerInstance extends L2MerchantInstance
 			if (!ok)
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/petmanager/restore_no.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/petmanager/restore_no.htm");
 				player.sendPacket(html);
 			}
 			return;
@@ -157,12 +157,12 @@ public class L2PetManagerInstance extends L2MerchantInstance
 		if (player.destroyItemByItemId("Consume", itemIdtake, 1, this, true))
 		{
 			player.addItem("", itemIdgive, 1, this, true);
-			html.setFile("data/html/petmanager/" + getNpcId() + ".htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/petmanager/" + getNpcId() + ".htm");
 			player.sendPacket(html);
 		}
 		else
 		{
-			html.setFile("data/html/petmanager/exchange_no.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/petmanager/exchange_no.htm");
 			player.sendPacket(html);
 		}
 	}

+ 5 - 5
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2RaceManagerInstance.java

@@ -310,7 +310,7 @@ public class L2RaceManagerInstance extends L2Npc
         String filename, search;
         NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
         filename = getHtmlPath(npcId, 5);
-        html.setFile(filename);
+        html.setFile(player.getHtmlPrefix(), filename);
         for (int i = 0; i < 8; i++)
         {
             int n = i + 1;
@@ -329,7 +329,7 @@ public class L2RaceManagerInstance extends L2Npc
         String filename, search;
         NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
         filename = getHtmlPath(npcId, 6);
-        html.setFile(filename);
+        html.setFile(player.getHtmlPrefix(), filename);
         for (int i = 0; i < 8; i++)
         {
             int n = i + 1;
@@ -351,7 +351,7 @@ public class L2RaceManagerInstance extends L2Npc
         if (val < 10)
         {
             filename = getHtmlPath(npcId, 2);
-            html.setFile(filename);
+            html.setFile(player.getHtmlPrefix(), filename);
             for (int i = 0; i < 8; i++)
             {
                 int n = i + 1;
@@ -370,7 +370,7 @@ public class L2RaceManagerInstance extends L2Npc
         {
             if (player.getRace(0) == 0) return;
             filename = getHtmlPath(npcId, 3);
-            html.setFile(filename);
+            html.setFile(player.getHtmlPrefix(), filename);
             html.replace("0place", "" + player.getRace(0));
             search = "Mob1";
             replace = MonsterRace.getInstance().getMonsters()[player.getRace(0) - 1].getTemplate().name;
@@ -387,7 +387,7 @@ public class L2RaceManagerInstance extends L2Npc
         {
             if (player.getRace(0) == 0 || player.getRace(1) == 0) return;
             filename = getHtmlPath(npcId, 4);
-            html.setFile(filename);
+            html.setFile(player.getHtmlPrefix(), filename);
             html.replace("0place", "" + player.getRace(0));
             search = "Mob1";
             replace = MonsterRace.getInstance().getMonsters()[player.getRace(0) - 1].getTemplate().name;

+ 3 - 3
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java

@@ -284,7 +284,7 @@ public class L2SepulcherNpcInstance extends L2Npc
 	{
 		String filename = getHtmlPath(getNpcId(), val);
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		player.sendPacket(html);
 		player.sendPacket(ActionFailed.STATIC_PACKET);
@@ -297,7 +297,7 @@ public class L2SepulcherNpcInstance extends L2Npc
 		if (isBusy())
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile("data/html/npcbusy.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/npcbusy.htm");
 			html.replace("%busymessage%", getBusyMessage());
 			html.replace("%npcname%", getName());
 			html.replace("%playername%", player.getName());
@@ -448,7 +448,7 @@ public class L2SepulcherNpcInstance extends L2Npc
 	public void showHtmlFile(L2PcInstance player, String file)
 	{
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile("data/html/SepulcherNpc/" + file);
+		html.setFile(player.getHtmlPrefix(), "data/html/SepulcherNpc/" + file);
 		html.replace("%npcname%", getName());
 		player.sendPacket(html);
 	}

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2SiegeNpcInstance.java

@@ -47,7 +47,7 @@ public class L2SiegeNpcInstance extends L2NpcInstance
 		else
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile("data/html/siege/" + getNpcId() + "-busy.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/siege/" + getNpcId() + "-busy.htm");
 			html.replace("%castlename%",getCastle().getName());
 			html.replace("%objectId%",String.valueOf(getObjectId()));
 			player.sendPacket(html);

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2SignsPriestInstance.java

@@ -495,7 +495,7 @@ public class L2SignsPriestInstance extends L2Npc
 					else
 						path = SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_6_dusk_contribute.htm";
 
-					String contentContr = HtmCache.getInstance().getHtm(path);
+					String contentContr = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), path);
 
 					if (contentContr != null)
 					{
@@ -676,7 +676,7 @@ public class L2SignsPriestInstance extends L2Npc
 				else
 					path = SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_17_dusk.htm";
 
-				String content = HtmCache.getInstance().getHtm(path);
+				String content = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), path);
 
 				if (content != null)
 				{

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2StaticObjectInstance.java

@@ -222,7 +222,7 @@ public class L2StaticObjectInstance extends L2Character
             } else {
 			if(_type == 2) {
 				String filename = "data/html/signboard.htm";
-				String content = HtmCache.getInstance().getHtm(filename);
+				String content = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), filename);
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
 
 				if (content == null) html.setHtml("<html><body>Signboard is missing:<br>"+filename+"</body></html>");

+ 4 - 4
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2TeleporterInstance.java

@@ -153,7 +153,7 @@ public final class L2TeleporterInstance extends L2Npc
 		if (!HtmCache.getInstance().isLoadable(filename))
 			filename = "data/html/teleporter/" + getTemplate().npcId + "-1.htm";
 
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcname%", getName());
 		player.sendPacket(html);
@@ -170,7 +170,7 @@ public final class L2TeleporterInstance extends L2Npc
 		if (!HtmCache.getInstance().isLoadable(filename))
 			filename = "data/html/teleporter/" + getNpcId() + "-1.htm";
 
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcname%", getName());
 		player.sendPacket(html);
@@ -198,7 +198,7 @@ public final class L2TeleporterInstance extends L2Npc
 		}
 
 		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcname%", getName());
 		player.sendPacket(html);
@@ -230,7 +230,7 @@ public final class L2TeleporterInstance extends L2Npc
 			{
 				String filename = "data/html/teleporter/nobleteleporter-no.htm";
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile(filename);
+				html.setFile(player.getHtmlPrefix(), filename);
 				html.replace("%objectId%", String.valueOf(getObjectId()));
 				html.replace("%npcname%", getName());
 				player.sendPacket(html);

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2TransformManagerInstance.java

@@ -65,7 +65,7 @@ public class L2TransformManagerInstance extends L2MerchantInstance
 			else
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/default/" + getNpcId() + "-cantlearn.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/default/" + getNpcId() + "-cantlearn.htm");
 				player.sendPacket(html);
 			}
 		}
@@ -78,7 +78,7 @@ public class L2TransformManagerInstance extends L2MerchantInstance
 			else
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/default/" + getNpcId() + "-cantbuy.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/default/" + getNpcId() + "-cantbuy.htm");
 				player.sendPacket(html);
 			}
 		}

+ 3 - 3
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2TvTEventNpcInstance.java

@@ -49,9 +49,9 @@ public class L2TvTEventNpcInstance extends L2Npc
 			final String htmContent;
 
 			if (!isParticipant)
-				htmContent = HtmCache.getInstance().getHtm(htmlPath + "Participation.htm");
+				htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath + "Participation.htm");
 			else
-				htmContent = HtmCache.getInstance().getHtm(htmlPath + "RemoveParticipation.htm");
+				htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath + "RemoveParticipation.htm");
 
 	    	if (htmContent != null)
 	    	{
@@ -73,7 +73,7 @@ public class L2TvTEventNpcInstance extends L2Npc
 		}
 		else if (TvTEvent.isStarting() || TvTEvent.isStarted())
 		{
-			final String htmContent = HtmCache.getInstance().getHtm(htmlPath + "Status.htm");
+			final String htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath + "Status.htm");
 
 	    	if (htmContent != null)
 	    	{

+ 20 - 20
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java

@@ -184,7 +184,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 
 			if (player.getTransformation() != null)
 			{
-				html.setFile("data/html/villagemaster/SubClass_NoTransformed.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_NoTransformed.htm");
 				player.sendPacket(html);
 				return;
 			}
@@ -212,17 +212,17 @@ public class L2VillageMasterInstance extends L2NpcInstance
 			switch (cmdChoice)
 			{
 				case 0: // Subclass change menu
-					html.setFile(getSubClassMenu(player.getRace()));
+					html.setFile(player.getHtmlPrefix(), getSubClassMenu(player.getRace()));
 					break;
 				case 1: // Add Subclass - Initial
 					// Avoid giving player an option to add a new sub class, if they have three already.
 					if (player.getTotalSubClasses() >= Config.MAX_SUBCLASS)
 					{
-						html.setFile(getSubClassFail());
+						html.setFile(player.getHtmlPrefix(), getSubClassFail());
 						break;
 					}
 
-					html.setFile("data/html/villagemaster/SubClass_Add.htm");
+					html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Add.htm");
 					final StringBuilder content1 = StringUtil.startAppend(200);
 					Set<PlayerClass> subsAvailable = getAvailableSubClasses(player);
 
@@ -250,7 +250,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 					break;
 				case 2: // Change Class - Initial
 					if (player.getSubClasses().isEmpty())
-						html.setFile("data/html/villagemaster/SubClass_ChangeNo.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ChangeNo.htm");
 					else
 					{
 						final StringBuilder content2 = StringUtil.startAppend(200);
@@ -279,24 +279,24 @@ public class L2VillageMasterInstance extends L2NpcInstance
 
 						if (content2.length() > 0)
 						{
-							html.setFile("data/html/villagemaster/SubClass_Change.htm");
+							html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Change.htm");
 							html.replace("%list%", content2.toString());
 						}
 						else
-							html.setFile("data/html/villagemaster/SubClass_ChangeNotFound.htm");
+							html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ChangeNotFound.htm");
 					}
 					break;
 				case 3: // Change/Cancel Subclass - Initial
 					if (player.getSubClasses() == null || player.getSubClasses().isEmpty())
 					{
-						html.setFile("data/html/villagemaster/SubClass_ModifyEmpty.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyEmpty.htm");
 						break;
 					}
 
 					// custom value
 					if (player.getTotalSubClasses() > 3)
 					{
-						html.setFile("data/html/villagemaster/SubClass_ModifyCustom.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyCustom.htm");
 						final StringBuilder content3 = StringUtil.startAppend(200);
 						int classIndex = 1;
 
@@ -319,7 +319,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 					else
 					{
 						// retail html contain only 3 subclasses
-						html.setFile("data/html/villagemaster/SubClass_Modify.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Modify.htm");
 						if (player.getSubClasses().containsKey(1))
 							html.replace("%sub1%", CharTemplateTable.getInstance().getClassNameById(player.getSubClasses().get(1).getClassId()));
 						else
@@ -389,12 +389,12 @@ public class L2VillageMasterInstance extends L2NpcInstance
 
 						player.setActiveClass(player.getTotalSubClasses());
 
-						html.setFile("data/html/villagemaster/SubClass_AddOk.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_AddOk.htm");
 
 						player.sendPacket(new SystemMessage(SystemMessageId.ADD_NEW_SUBCLASS)); // Subclass added.
 					}
 					else
-						html.setFile(getSubClassFail());
+						html.setFile(player.getHtmlPrefix(), getSubClassFail());
 					break;
 				case 5: // Change Class - Action
 					/*
@@ -412,7 +412,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 
 					if (player.getClassIndex() == paramOne)
 					{
-						html.setFile("data/html/villagemaster/SubClass_Current.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Current.htm");
 						break;
 					}
 
@@ -471,16 +471,16 @@ public class L2VillageMasterInstance extends L2NpcInstance
 					switch (paramOne)
 					{
 						case 1:
-							html.setFile("data/html/villagemaster/SubClass_ModifyChoice1.htm");
+							html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice1.htm");
 							break;
 						case 2:
-							html.setFile("data/html/villagemaster/SubClass_ModifyChoice2.htm");
+							html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice2.htm");
 							break;
 						case 3:
-							html.setFile("data/html/villagemaster/SubClass_ModifyChoice3.htm");
+							html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice3.htm");
 							break;
 						default:
-							html.setFile("data/html/villagemaster/SubClass_ModifyChoice.htm");
+							html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice.htm");
 					}						
 					html.replace("%list%", content6.toString());
 					break;
@@ -506,7 +506,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 						player.stopCubics();
 						player.setActiveClass(paramOne);
 
-						html.setFile("data/html/villagemaster/SubClass_ModifyOk.htm");
+						html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyOk.htm");
 						html.replace("%name%", CharTemplateTable.getInstance().getClassNameById(paramTwo));
 
 						player.sendPacket(new SystemMessage(SystemMessageId.ADD_NEW_SUBCLASS)); // Subclass added.
@@ -1018,7 +1018,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 		if (player.getClan() == null || !player.isClanLeader())
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(1);
-			html.setFile("data/html/villagemaster/NotClanLeader.htm");
+			html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/NotClanLeader.htm");
 			player.sendPacket(html);
 			player.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
@@ -1052,7 +1052,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 			else
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
-				html.setFile("data/html/villagemaster/NoMoreSkills.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/NoMoreSkills.htm");
 				player.sendPacket(html);
 			}
 		}

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2WarehouseInstance.java

@@ -152,7 +152,7 @@ public final class L2WarehouseInstance extends L2NpcInstance
 			if (Config.L2JMOD_ENABLE_WAREHOUSESORTING_PRIVATE)
 			{
 				String htmFile = "data/html/mods/WhSortedP.htm";
-				String htmContent = HtmCache.getInstance().getHtm(htmFile);
+				String htmContent = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmFile);
 
 				if (htmContent != null)
 				{
@@ -188,7 +188,7 @@ public final class L2WarehouseInstance extends L2NpcInstance
 			if (Config.L2JMOD_ENABLE_WAREHOUSESORTING_CLAN)
 			{
 				String htmFile = "data/html/mods/WhSortedC.htm";
-				String htmContent = HtmCache.getInstance().getHtm(htmFile);
+				String htmContent = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmFile);
 
 				if (htmContent != null)
 				{

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2WeddingManagerInstance.java

@@ -44,7 +44,7 @@ public class L2WeddingManagerInstance extends L2Npc
         String replace = String.valueOf(Config.L2JMOD_WEDDING_PRICE);
 
         NpcHtmlMessage html = new NpcHtmlMessage(1);
-        html.setFile(filename);
+        html.setFile(player.getHtmlPrefix(), filename);
         html.replace("%objectId%", String.valueOf(getObjectId()));
         html.replace("%replace%", replace);
         html.replace("%npcname%", getName());
@@ -237,7 +237,7 @@ public class L2WeddingManagerInstance extends L2Npc
     private void sendHtmlMessage(L2PcInstance player, String filename, String replace)
     {
         NpcHtmlMessage html = new NpcHtmlMessage(1);
-        html.setFile(filename);
+        html.setFile(player.getHtmlPrefix(), filename);
         html.replace("%objectId%", String.valueOf(getObjectId()));
         html.replace("%replace%", replace);
         html.replace("%npcname%", getName());

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2WyvernManagerInstance.java

@@ -111,7 +111,7 @@ public class L2WyvernManagerInstance extends L2Npc
 			filename = "data/html/wyvernmanager/wyvernmanager.htm";      // Owner message window
 
 		NpcHtmlMessage html = new NpcHtmlMessage(1);
-		html.setFile(filename);
+		html.setFile(player.getHtmlPrefix(), filename);
 		html.replace("%objectId%", String.valueOf(getObjectId()));
 		html.replace("%npcname%", getName());
 		player.sendPacket(html);

+ 10 - 10
L2_GameServer/java/com/l2jserver/gameserver/model/entity/TvTEvent.java

@@ -359,7 +359,7 @@ public class TvTEvent
 			NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(0);
 			
 			statusUpdate.addAttribute(StatusUpdate.CUR_LOAD, playerInstance.getCurrentLoad());
-			npcHtmlMessage.setHtml(HtmCache.getInstance().getHtm(htmlPath+"Reward.htm"));
+			npcHtmlMessage.setHtml(HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"Reward.htm"));
 			playerInstance.sendPacket(statusUpdate);
 			playerInstance.sendPacket(npcHtmlMessage);
 		}
@@ -420,7 +420,7 @@ public class TvTEvent
 			NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(0);
 			
 			statusUpdate.addAttribute(StatusUpdate.CUR_LOAD, playerInstance.getCurrentLoad());
-			npcHtmlMessage.setHtml(HtmCache.getInstance().getHtm(htmlPath+"Reward.htm"));
+			npcHtmlMessage.setHtml(HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"Reward.htm"));
 			playerInstance.sendPacket(statusUpdate);
 			playerInstance.sendPacket(npcHtmlMessage);
 		}
@@ -676,25 +676,25 @@ public class TvTEvent
 			
 			if (playerInstance.isCursedWeaponEquipped())
 			{
-				htmContent = HtmCache.getInstance().getHtm(htmlPath+"CursedWeaponEquipped.htm");
+				htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"CursedWeaponEquipped.htm");
 				if (htmContent != null)
 					npcHtmlMessage.setHtml(htmContent);
 			}
 			else if (Olympiad.getInstance().isRegistered(playerInstance))
 			{
-				htmContent = HtmCache.getInstance().getHtm(htmlPath+"Olympiad.htm");
+				htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"Olympiad.htm");
 				if (htmContent != null)
 					npcHtmlMessage.setHtml(htmContent);
 			}
 			else if (playerInstance.getKarma() > 0)
 			{
-				htmContent = HtmCache.getInstance().getHtm(htmlPath+"Karma.htm");
+				htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"Karma.htm");
 				if (htmContent != null)
 					npcHtmlMessage.setHtml(htmContent);
 			}
 			else if (playerLevel < Config.TVT_EVENT_MIN_LVL || playerLevel > Config.TVT_EVENT_MAX_LVL)
 			{
-				htmContent = HtmCache.getInstance().getHtm(htmlPath+"Level.htm");
+				htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"Level.htm");
 				if (htmContent != null)
 				{
 					npcHtmlMessage.setHtml(htmContent);
@@ -704,7 +704,7 @@ public class TvTEvent
 			}
 			else if (_teams[0].getParticipatedPlayerCount() == Config.TVT_EVENT_MAX_PLAYERS_IN_TEAMS && _teams[1].getParticipatedPlayerCount() == Config.TVT_EVENT_MAX_PLAYERS_IN_TEAMS)
 			{
-				htmContent = HtmCache.getInstance().getHtm(htmlPath+"TeamsFull.htm");
+				htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"TeamsFull.htm");
 				if (htmContent != null)
 				{
 					npcHtmlMessage.setHtml(htmContent);
@@ -713,7 +713,7 @@ public class TvTEvent
 			}
 			else if (!payParticipationFee(playerInstance))
 			{
-				htmContent = HtmCache.getInstance().getHtm(htmlPath+"ParticipationFee.htm");
+				htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"ParticipationFee.htm");
 				if (htmContent != null)
 				{
 					npcHtmlMessage.setHtml(htmContent);
@@ -721,7 +721,7 @@ public class TvTEvent
 				}
 			}
 			else if (addParticipant(playerInstance))
-				npcHtmlMessage.setHtml(HtmCache.getInstance().getHtm(htmlPath+"Registered.htm"));
+				npcHtmlMessage.setHtml(HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"Registered.htm"));
 			else
 				return;
 			
@@ -733,7 +733,7 @@ public class TvTEvent
 			
 			NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(0);
 			
-			npcHtmlMessage.setHtml(HtmCache.getInstance().getHtm(htmlPath+"Unregistered.htm"));
+			npcHtmlMessage.setHtml(HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), htmlPath+"Unregistered.htm"));
 			playerInstance.sendPacket(npcHtmlMessage);
 		}
 	}

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java

@@ -1640,7 +1640,7 @@ public class Olympiad
 	public static void sendMatchList(L2PcInstance player)
 	{
 		NpcHtmlMessage message = new NpcHtmlMessage(0);
-		message.setFile(Olympiad.OLYMPIAD_HTML_PATH + "olympiad_observe2.htm");
+		message.setFile(player.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "olympiad_observe2.htm");
 
 		FastMap<Integer, String> matches = getInstance().getMatchList();
 		for (int i = 0; i < Olympiad.getStadiumCount(); i++)

+ 19 - 8
L2_GameServer/java/com/l2jserver/gameserver/model/quest/Quest.java

@@ -1554,16 +1554,11 @@ public class Quest extends ManagedScript
 	 */
 	public String showHtmlFile(L2PcInstance player, String fileName)
 	{
-		String questName = getName();
 		int questId = getQuestIntId(); 
 		//Create handler to file linked to the quest
-		String directory = getDescr().toLowerCase();
-		String content = HtmCache.getInstance().getHtm("data/scripts/" + directory + "/" + questName + "/" + fileName);
+		String content = getHtm(player.getHtmlPrefix(), fileName);
 		
-		if (content == null)
-			content = HtmCache.getInstance().getHtmForce("data/scripts/quests/" + questName + "/" + fileName);
-		
-		if (player != null && player.getTarget() != null)
+		if (player.getTarget() != null)
 			content = content.replaceAll("%objectId%", String.valueOf(player.getTarget().getObjectId()));
 		
 		//Send message to client if message not empty     
@@ -1588,7 +1583,23 @@ public class Quest extends ManagedScript
 		
 		return content;
 	}
-	
+
+	/**
+	 * Return HTML file contents
+	 * @param player
+	 * @param fileName
+	 * @return
+	 */
+	public String getHtm(String prefix, String fileName)
+	{
+		String content = HtmCache.getInstance().getHtm(prefix, "data/scripts/" + getDescr().toLowerCase() + "/" + getName() + "/" + fileName);
+		
+		if (content == null)
+			content = HtmCache.getInstance().getHtmForce(prefix, "data/scripts/quests/" + getName() + "/" + fileName);
+
+		return content;
+	}
+
 	// Method - Public
 	/**
 	 * Add a temporary (quest) spawn

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/quest/QuestState.java

@@ -1125,7 +1125,7 @@ public final class QuestState
 
 	public void showTutorialHTML(String html)
 	{
-		String text = HtmCache.getInstance().getHtm("data/scripts/quests/255_Tutorial/" + html);
+		String text = HtmCache.getInstance().getHtm(getPlayer().getHtmlPrefix(), "data/scripts/quests/255_Tutorial/" + html);
 		if (text == null)
 		{
 			_log.warning("missing html page data/scripts/quests/255_Tutorial/" + html);

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java

@@ -388,14 +388,14 @@ public class EnterWorld extends L2GameClientPacket
 		if (showClanNotice)
 		{
 			NpcHtmlMessage notice = new NpcHtmlMessage(1);
-			notice.setFile("data/html/clanNotice.htm");
+			notice.setFile(activeChar.getHtmlPrefix(), "data/html/clanNotice.htm");
 			notice.replace("%clan_name%", activeChar.getClan().getName());
 			notice.replace("%notice_text%", activeChar.getClan().getNotice().replaceAll("\r\n", "<br>"));
 			sendPacket(notice);
 		}
 		else if (Config.SERVER_NEWS)
 		{
-			String serverNews = HtmCache.getInstance().getHtm("data/html/servnews.htm");
+			String serverNews = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/servnews.htm");
 			if (serverNews != null)
 				sendPacket(new NpcHtmlMessage(1, serverNews));
 		}

+ 31 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestBypassToServer.java

@@ -24,6 +24,8 @@ import com.l2jserver.gameserver.communitybbs.CommunityBoard;
 import com.l2jserver.gameserver.datatables.AdminCommandAccessRights;
 import com.l2jserver.gameserver.handler.AdminCommandHandler;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
+import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
+import com.l2jserver.gameserver.handler.VoicedCommandHandler;
 import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
@@ -212,6 +214,33 @@ public final class RequestBypassToServer extends L2GameClientPacket
 			{
 				Olympiad.bypassChangeArena(_command, activeChar);
 			}
+			else if (_command.startsWith("voice "))
+			{
+				// only voice commands allowed in bypass
+				if (_command.length() > 7
+						&& _command.charAt(6) == '.')
+				{
+					final String vc, vparams;
+					int endOfCommand = _command.indexOf(" ", 7);
+					if (endOfCommand > 0)
+					{
+						vc = _command.substring(7, endOfCommand).trim();
+						vparams = _command.substring(endOfCommand).trim();
+					}
+					else
+					{
+						vc = _command.substring(7).trim();
+						vparams = null;
+					}
+
+					if (vc.length() > 0)
+					{
+						IVoicedCommandHandler vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(vc);
+						if (vch != null)
+							vch.useVoicedCommand(vc, activeChar, vparams);
+					}
+				}
+			}
 		}
 		catch (Exception e)
 		{
@@ -248,7 +277,7 @@ public final class RequestBypassToServer extends L2GameClientPacket
 			itemId = Integer.parseInt(cmd[1]);
 			String filename = "data/html/help/"+cmd[0];
 			NpcHtmlMessage html = new NpcHtmlMessage(1,itemId);
-			html.setFile(filename);
+			html.setFile(activeChar.getHtmlPrefix(), filename);
 			html.disableValidation();
 			activeChar.sendPacket(html);
 		}
@@ -256,7 +285,7 @@ public final class RequestBypassToServer extends L2GameClientPacket
 		{
 			String filename = "data/html/help/"+path;
 			NpcHtmlMessage html = new NpcHtmlMessage(1);
-			html.setFile(filename);
+			html.setFile(activeChar.getHtmlPrefix(), filename);
 			html.disableValidation();
 			activeChar.sendPacket(html);
 		}

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestLinkHtml.java

@@ -55,7 +55,7 @@ public final class RequestLinkHtml extends L2GameClientPacket
 			String filename = "data/html/"+_link;
 			NpcHtmlMessage msg = new NpcHtmlMessage(0);
 			msg.disableValidation();
-			msg.setFile(filename);
+			msg.setFile(actor.getHtmlPrefix(), filename);
 			sendPacket(msg);
 		}
 		catch (Exception e)

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/NpcHtmlMessage.java

@@ -191,9 +191,9 @@ public final class NpcHtmlMessage extends L2GameServerPacket
 		_html = text; // html code must not exceed 8192 bytes
 	}
 
-	public boolean setFile(String path)
+	public boolean setFile(String prefix, String path)
 	{
-        String content = HtmCache.getInstance().getHtm(path);
+        String content = HtmCache.getInstance().getHtm(prefix, path);
 
 		if (content == null)
 		{

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/NpcQuestHtmlMessage.java

@@ -167,7 +167,7 @@ public final class NpcQuestHtmlMessage extends L2GameServerPacket
 
 	public boolean setFile(String path)
 	{
-        String content = HtmCache.getInstance().getHtm(path);
+        String content = HtmCache.getInstance().getHtm(getClient().getActiveChar().getHtmlPrefix(), path);
 
 		if (content == null)
 		{

+ 21 - 0
L2_GameServer/java/config/l2jmods.properties

@@ -334,3 +334,24 @@ AnnouncePvpMsg = $killer has defeated $target
 # Check access_levels.sql and admin_command_access_rights for details.
 # Default: False
 ChatAdmin = False
+
+
+# ---------------------------------------------------------------------------
+# Multilingual support
+# ---------------------------------------------------------------------------
+# Enable or disable multilingual support.
+# Default: False
+MultiLangEnable = False
+
+# List of allowed languages, semicolon separated.
+# Default: en
+MultiLangAllowed = en;ru
+
+# Default language, if not defined.
+# Default: en
+MultiLangDefault = en
+
+# Enable or disable voice command .lang for changing languages on the fly.
+# Default: True
+MultiLangVoiceCommand = True
+