Advertisement
Sarada-L2

Gk Vip Acis 398 Yo:Sarada

Apr 20th, 2021
653
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.46 KB | None | 0 0
  1. diff --git a/java/net/sf/l2j/commons/data/xml/XMLDocument.java b/java/net/sf/l2j/commons/data/xml/XMLDocument.java
  2. new file mode 100644
  3. index 0000000..c1b16f8
  4. --- /dev/null
  5. +++ b/java/net/sf/l2j/commons/data/xml/XMLDocument.java
  6. @@ -0,0 +1,82 @@
  7. +package net.sf.l2j.commons.data.xml;
  8. +
  9. +import java.io.File;
  10. +import java.util.logging.Level;
  11. +import java.util.logging.Logger;
  12. +
  13. +import javax.xml.parsers.DocumentBuilderFactory;
  14. +
  15. +import net.sf.l2j.commons.data.StatSet;
  16. +
  17. +import org.w3c.dom.Document;
  18. +import org.w3c.dom.NamedNodeMap;
  19. +import org.w3c.dom.Node;
  20. +
  21. +/**
  22. + * An XML document, relying on a static and single DocumentBuilderFactory.
  23. + */
  24. +public abstract class XMLDocument
  25. +{
  26. + protected static final Logger LOG = Logger.getLogger(XMLDocument.class.getName());
  27. +
  28. + private static final DocumentBuilderFactory BUILDER;
  29. + static
  30. + {
  31. + BUILDER = DocumentBuilderFactory.newInstance();
  32. + BUILDER.setValidating(false);
  33. + BUILDER.setIgnoringComments(true);
  34. + }
  35. +
  36. + abstract protected void load();
  37. +
  38. + abstract protected void parseDocument(Document doc, File f);
  39. +
  40. + public void loadDocument(String filePath)
  41. + {
  42. + loadDocument(new File(filePath));
  43. + }
  44. +
  45. + /**
  46. + * Parse an entire directory or file if found.
  47. + * @param file
  48. + */
  49. + public void loadDocument(File file)
  50. + {
  51. + if (!file.exists())
  52. + {
  53. + LOG.severe("The following file or directory doesn't exist: " + file.getName());
  54. + return;
  55. + }
  56. +
  57. + if (file.isDirectory())
  58. + {
  59. + for (File f : file.listFiles())
  60. + loadDocument(f);
  61. + }
  62. + else if (file.isFile())
  63. + {
  64. + try
  65. + {
  66. + parseDocument(BUILDER.newDocumentBuilder().parse(file), file);
  67. + }
  68. + catch (Exception e)
  69. + {
  70. + LOG.log(Level.SEVERE, "Error loading XML file " + file.getName(), e);
  71. + }
  72. + }
  73. + }
  74. +
  75. + /**
  76. + * This method parses the content of a NamedNodeMap and feed the given StatsSet.
  77. + * @param attrs : The NamedNodeMap to parse.
  78. + * @param set : The StatsSet to feed.
  79. + */
  80. + public static void parseAndFeed(NamedNodeMap attrs, StatSet set)
  81. + {
  82. + for (int i = 0; i < attrs.getLength(); i++)
  83. + {
  84. + final Node attr = attrs.item(i);
  85. + set.set(attr.getNodeName(), attr.getNodeValue());
  86. + }
  87. + }
  88. +}
  89. \ No newline at end of file
  90. diff --git a/java/net/sf/l2j/gameserver/GameServer.java b/java/net/sf/l2j/gameserver/GameServer.java
  91. index e682cc6..6c1638e 100644
  92. --- a/java/net/sf/l2j/gameserver/GameServer.java
  93. +++ b/java/net/sf/l2j/gameserver/GameServer.java
  94. @@ -72,6 +72,7 @@
  95. import net.sf.l2j.gameserver.data.xml.StaticObjectData;
  96. import net.sf.l2j.gameserver.data.xml.SummonItemData;
  97. import net.sf.l2j.gameserver.data.xml.TeleportData;
  98. +import net.sf.l2j.gameserver.data.xml.TeleportLocationData;
  99. import net.sf.l2j.gameserver.data.xml.WalkerRouteData;
  100. import net.sf.l2j.gameserver.geoengine.GeoEngine;
  101. import net.sf.l2j.gameserver.handler.AdminCommandHandler;
  102. @@ -232,6 +233,7 @@
  103. DimensionalRiftManager.getInstance();
  104. NewbieBuffData.getInstance();
  105. InstantTeleportData.getInstance();
  106. + TeleportLocationData.getInstance();
  107. TeleportData.getInstance();
  108.  
  109. StringUtil.printSection("Olympiads & Heroes");
  110. diff --git a/java/net/sf/l2j/gameserver/data/xml/TeleportLocationData.java b/java/net/sf/l2j/gameserver/data/xml/TeleportLocationData.java
  111. new file mode 100644
  112. index 0000000..a19af62
  113. --- /dev/null
  114. +++ b/java/net/sf/l2j/gameserver/data/xml/TeleportLocationData.java
  115. @@ -0,0 +1,77 @@
  116. +package net.sf.l2j.gameserver.data.xml;
  117. +
  118. +import java.io.File;
  119. +import java.util.HashMap;
  120. +import java.util.Map;
  121. +
  122. +import net.sf.l2j.commons.data.StatSet;
  123. +import net.sf.l2j.commons.data.xml.XMLDocument;
  124. +
  125. +import net.sf.l2j.gameserver.model.location.TeleportLocation;
  126. +
  127. +import org.w3c.dom.Document;
  128. +import org.w3c.dom.Node;
  129. +
  130. +public class TeleportLocationData extends XMLDocument
  131. +{
  132. + private final Map<Integer, TeleportLocation> _teleports = new HashMap<>();
  133. +
  134. + protected TeleportLocationData()
  135. + {
  136. + load();
  137. + }
  138. +
  139. + @Override
  140. + protected void load()
  141. + {
  142. + loadDocument("./data/xml/teleportVip.xml");
  143. + LOG.info("Loaded " + _teleports.size() + " teleport locations.");
  144. + }
  145. +
  146. + @Override
  147. + protected void parseDocument(Document doc, File file)
  148. + {
  149. + // StatsSet used to feed informations. Cleaned on every entry.
  150. + final StatSet set = new StatSet();
  151. +
  152. + // First element is never read.
  153. + final Node n = doc.getFirstChild();
  154. +
  155. + for (Node o = n.getFirstChild(); o != null; o = o.getNextSibling())
  156. + {
  157. + if (!"teleport".equalsIgnoreCase(o.getNodeName()))
  158. + continue;
  159. +
  160. + // Parse and feed content.
  161. + parseAndFeed(o.getAttributes(), set);
  162. +
  163. + // Feed the map with new data.
  164. + _teleports.put(set.getInteger("id"), new TeleportLocation(set));
  165. +
  166. + // Clear the StatsSet.
  167. + set.clear();
  168. + }
  169. + }
  170. +
  171. + public void reload()
  172. + {
  173. + _teleports.clear();
  174. +
  175. + load();
  176. + }
  177. +
  178. + public TeleportLocation getTeleportLocation(int id)
  179. + {
  180. + return _teleports.get(id);
  181. + }
  182. +
  183. + public static TeleportLocationData getInstance()
  184. + {
  185. + return SingletonHolder.INSTANCE;
  186. + }
  187. +
  188. + private static class SingletonHolder
  189. + {
  190. + protected static final TeleportLocationData INSTANCE = new TeleportLocationData();
  191. + }
  192. +}
  193. \ No newline at end of file
  194. diff --git a/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java b/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java
  195. index 5f11f94..e5aaeba 100644
  196. --- a/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java
  197. +++ b/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java
  198. @@ -18,6 +18,7 @@
  199. import net.sf.l2j.gameserver.data.xml.NpcData;
  200. import net.sf.l2j.gameserver.data.xml.ScriptData;
  201. import net.sf.l2j.gameserver.data.xml.TeleportData;
  202. +import net.sf.l2j.gameserver.data.xml.TeleportLocationData;
  203. import net.sf.l2j.gameserver.data.xml.WalkerRouteData;
  204. import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
  205. import net.sf.l2j.gameserver.model.actor.Player;
  206. @@ -115,6 +116,7 @@
  207. {
  208. InstantTeleportData.getInstance().reload();
  209. TeleportData.getInstance().reload();
  210. + TeleportLocationData.getInstance().reload();
  211. player.sendMessage("Teleport locations have been reloaded.");
  212. }
  213. else if (type.startsWith("zone"))
  214. diff --git a/java/net/sf/l2j/gameserver/model/actor/instance/GatekeeperVip.java b/java/net/sf/l2j/gameserver/model/actor/instance/GatekeeperVip.java
  215. new file mode 100644
  216. index 0000000..aebe277
  217. --- /dev/null
  218. +++ b/java/net/sf/l2j/gameserver/model/actor/instance/GatekeeperVip.java
  219. @@ -0,0 +1,110 @@
  220. +package net.sf.l2j.gameserver.model.actor.instance;
  221. +
  222. +import java.util.Calendar;
  223. +import java.util.StringTokenizer;
  224. +
  225. +import net.sf.l2j.gameserver.data.xml.TeleportLocationData;
  226. +import net.sf.l2j.gameserver.model.actor.Player;
  227. +import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
  228. +import net.sf.l2j.gameserver.model.location.TeleportLocation;
  229. +import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
  230. +
  231. +
  232. +public final class GatekeeperVip extends Folk
  233. +{
  234. + private static final int COND_BUSY_BECAUSE_OF_SIEGE = 1;
  235. + private static final int COND_OWNER = 2;
  236. + private static final int COND_REGULAR = 3;
  237. +
  238. + public GatekeeperVip(int objectId, NpcTemplate template)
  239. + {
  240. + super(objectId, template);
  241. + }
  242. +
  243. + @Override
  244. + public void onBypassFeedback(Player player, String command)
  245. + {
  246. + player.sendPacket(ActionFailed.STATIC_PACKET);
  247. + if (!player.isVip())
  248. + {
  249. + player.sendMessage("You must be vip to get this npc.");
  250. + showChatWindow(player);
  251. + return;
  252. + }
  253. + if (command.startsWith("goto"))
  254. + {
  255. + final StringTokenizer st = new StringTokenizer(command, " ");
  256. + st.nextToken();
  257. +
  258. + if (st.countTokens() <= 0)
  259. + return;
  260. +
  261. + final int condition = validateCondition(player);
  262. + if (condition == COND_REGULAR || condition == COND_OWNER)
  263. + {
  264. + if (player.isAlikeDead())
  265. + return;
  266. +
  267. + final TeleportLocation list = TeleportLocationData.getInstance().getTeleportLocation(Integer.parseInt(st.nextToken()));
  268. + if (list == null)
  269. + return;
  270. +
  271. + int price = list.getPrice();
  272. +
  273. + if (player.destroyItemByItemId("Teleport ", (list.isNoble()) ? 6651 : 57, price, this, true))
  274. + player.teleToLocation(list);
  275. +
  276. + player.sendPacket(ActionFailed.STATIC_PACKET);
  277. + }
  278. + }
  279. + else if (command.startsWith("Chat"))
  280. + {
  281. + Calendar cal = Calendar.getInstance();
  282. + int val = 0;
  283. + try
  284. + {
  285. + val = Integer.parseInt(command.substring(5));
  286. + }
  287. + catch (IndexOutOfBoundsException ioobe)
  288. + {
  289. + }
  290. + catch (NumberFormatException nfe)
  291. + {
  292. + }
  293. +
  294. + if (val == 1 && cal.get(Calendar.HOUR_OF_DAY) >= 20 && cal.get(Calendar.HOUR_OF_DAY) <= 23 && (cal.get(Calendar.DAY_OF_WEEK) == 1 || cal.get(Calendar.DAY_OF_WEEK) == 7))
  295. + {
  296. + return;
  297. + }
  298. + showChatWindow(player, val);
  299. + }
  300. + else
  301. + super.onBypassFeedback(player, command);
  302. + }
  303. +
  304. + @Override
  305. + public String getHtmlPath(int npcId, int val)
  306. + {
  307. + String filename = "";
  308. + if (val == 0)
  309. + filename = "" + npcId;
  310. + else
  311. + filename = npcId + "-" + val;
  312. +
  313. + return "data/html/teleporterVip/" + filename + ".htm";
  314. + }
  315. +
  316. + private int validateCondition(Player player)
  317. + {
  318. + if (getCastle() != null)
  319. + {
  320. + if (getCastle().getSiege().isInProgress())
  321. + return COND_BUSY_BECAUSE_OF_SIEGE;
  322. +
  323. + if (player.getClan() != null && getCastle().getOwnerId() == player.getClanId())
  324. + return COND_OWNER;
  325. + }
  326. +
  327. + return COND_REGULAR;
  328. + }
  329. +}
  330. \ No newline at end of file
  331. diff --git a/java/net/sf/l2j/gameserver/model/location/TeleportLocation.java b/java/net/sf/l2j/gameserver/model/location/TeleportLocation.java
  332. new file mode 100644
  333. index 0000000..bfab7f6
  334. --- /dev/null
  335. +++ b/java/net/sf/l2j/gameserver/model/location/TeleportLocation.java
  336. @@ -0,0 +1,30 @@
  337. +package net.sf.l2j.gameserver.model.location;
  338. +
  339. +import net.sf.l2j.commons.data.StatSet;
  340. +
  341. +/**
  342. + * A datatype extending {@link Location}, used to retain a single Gatekeeper teleport location.
  343. + */
  344. +public class TeleportLocation extends Location
  345. +{
  346. + public TeleportLocation(StatSet set)
  347. + {
  348. + super(set.getInteger("x"), set.getInteger("y"), set.getInteger("z"));
  349. +
  350. + _price = set.getInteger("price");
  351. + _isNoble = set.getBool("isNoble");
  352. + }
  353. +
  354. + private final int _price;
  355. + private final boolean _isNoble;
  356. +
  357. + public int getPrice()
  358. + {
  359. + return _price;
  360. + }
  361. +
  362. + public boolean isNoble()
  363. + {
  364. + return _isNoble;
  365. + }
  366. +}
  367. \ No newline at end of file
  368.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement