DevWilliams

Merchant Say

Apr 23rd, 2021 (edited)
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.40 KB | None | 0 0
  1. diff --git a/aCis/java/net/sf/l2j/gameserver/model/actor/instance/Merchant.java b/aCis/java/net/sf/l2j/gameserver/model/actor/instance/Merchant.java
  2. index 7a627a1..be5333b 100644
  3. --- a/aCis/java/net/sf/l2j/gameserver/model/actor/instance/Merchant.java
  4. +++ b/aCis/java/net/sf/l2j/gameserver/model/actor/instance/Merchant.java
  5. @@ -6,12 +6,17 @@
  6. import net.sf.l2j.Config;
  7. import net.sf.l2j.gameserver.data.cache.HtmCache;
  8. import net.sf.l2j.gameserver.data.manager.BuyListManager;
  9. +import net.sf.l2j.gameserver.data.xml.MerchantSayData;
  10. import net.sf.l2j.gameserver.data.xml.MultisellData;
  11. +import net.sf.l2j.gameserver.enums.FloodProtector;
  12. +import net.sf.l2j.gameserver.model.MerchantSay;
  13. import net.sf.l2j.gameserver.model.actor.Player;
  14. import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
  15. import net.sf.l2j.gameserver.model.buylist.NpcBuyList;
  16. import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  17. import net.sf.l2j.gameserver.network.serverpackets.BuyList;
  18. +import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
  19. +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
  20. import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
  21. import net.sf.l2j.gameserver.network.serverpackets.SellList;
  22. import net.sf.l2j.gameserver.network.serverpackets.ShopPreviewList;
  23. @@ -32,6 +37,15 @@
  24. @Override
  25. public String getHtmlPath(int npcId, int val)
  26. {
  27. + final MerchantSay says = MerchantSayData.getInstance().getNpc(getNpcId());
  28. + if (says == null)
  29. + return "";
  30. +
  31. + broadcastPacket(new CreatureSay(getObjectId(), says.getType(), getName(), says.getText()));
  32. +
  33. + if (says.isEffects())
  34. + broadcastPacket(new MagicSkillUse(this, this, 2024, 1, 5, 0));
  35. +
  36. String filename = "";
  37.  
  38. if (val == 0)
  39. @@ -148,6 +162,9 @@
  40. @Override
  41. public void showChatWindow(Player player, int val)
  42. {
  43. + if (!player.getClient().performAction(FloodProtector.SOCIAL))
  44. + return;
  45. +
  46. // Generic PK check. Send back the HTM if found and cancel current action.
  47. if (!Config.KARMA_PLAYER_CAN_SHOP && player.getKarma() > 0 && showPkDenyChatWindow(player, "merchant"))
  48. return;
  49. diff --git a/aCis/java/net/sf/l2j/gameserver/data/xml/MerchantSayData.java b/aCis/java/net/sf/l2j/gameserver/data/xml/MerchantSayData.java
  50. new file mode 100644
  51. index 0000000..8d089c8
  52. --- /dev/null
  53. +++ b/aCis/java/net/sf/l2j/gameserver/data/xml/MerchantSayData.java
  54. @@ -0,0 +1,70 @@
  55. +package net.sf.l2j.gameserver.data.xml;
  56. +
  57. +import java.nio.file.Path;
  58. +import java.util.HashMap;
  59. +import java.util.Map;
  60. +
  61. +import net.sf.l2j.commons.data.xml.IXmlReader;
  62. +
  63. +import net.sf.l2j.gameserver.enums.SayType;
  64. +import net.sf.l2j.gameserver.model.MerchantSay;
  65. +import org.w3c.dom.Document;
  66. +import org.w3c.dom.NamedNodeMap;
  67. +
  68. +/**
  69. + * @author willi
  70. + *
  71. + */
  72. +public class MerchantSayData implements IXmlReader
  73. +{
  74. + private final Map<Integer, MerchantSay> _says = new HashMap<>();
  75. +
  76. + public MerchantSayData()
  77. + {
  78. + load();
  79. + }
  80. +
  81. + public void reload()
  82. + {
  83. + _says.clear();
  84. + load();
  85. + }
  86. +
  87. + @Override
  88. + public void load()
  89. + {
  90. + parseFile("./data/xml/merchantSays.xml");
  91. + LOGGER.info("Loaded {} merchants says.", _says.size());
  92. + }
  93. +
  94. + @Override
  95. + public void parseDocument(Document doc, Path path)
  96. + {
  97. + forEach(doc, "list", listNode -> forEach(listNode, "settings", enchantNode ->
  98. + {
  99. + NamedNodeMap attrs = enchantNode.getAttributes();
  100. +
  101. + final int npcId = Integer.valueOf(attrs.getNamedItem("npcId").getNodeValue());
  102. + final String text = attrs.getNamedItem("text").getNodeValue();
  103. + final SayType say = Enum.valueOf(SayType.class, attrs.getNamedItem("sayType").getNodeValue());
  104. + final boolean effect = Boolean.valueOf(attrs.getNamedItem("effect").getNodeValue());
  105. +
  106. + _says.put(npcId, new MerchantSay(npcId, text, say, effect));
  107. + }));
  108. + }
  109. +
  110. + public MerchantSay getNpc(int npcId)
  111. + {
  112. + return _says.get(npcId);
  113. + }
  114. +
  115. + public static MerchantSayData getInstance()
  116. + {
  117. + return SingletonHolder.INSTANCE;
  118. + }
  119. +
  120. + private static class SingletonHolder
  121. + {
  122. + protected static final MerchantSayData INSTANCE = new MerchantSayData();
  123. + }
  124. +}
  125. \ No newline at end of file
  126. diff --git a/aCis/java/net/sf/l2j/gameserver/model/MerchantSay.java b/aCis/java/net/sf/l2j/gameserver/model/MerchantSay.java
  127. new file mode 100644
  128. index 0000000..256d7af
  129. --- /dev/null
  130. +++ b/aCis/java/net/sf/l2j/gameserver/model/MerchantSay.java
  131. @@ -0,0 +1,43 @@
  132. +package net.sf.l2j.gameserver.model;
  133. +
  134. +import net.sf.l2j.gameserver.enums.SayType;
  135. +
  136. +/**
  137. + * @author willi
  138. + *
  139. + */
  140. +public class MerchantSay
  141. +{
  142. + private final int _npcId;
  143. + private final String _text;
  144. + private final SayType _type;
  145. + private final boolean _effect;
  146. +
  147. + public MerchantSay(int npcId, String text, SayType type, boolean effect)
  148. + {
  149. + _npcId = npcId;
  150. + _text = text;
  151. + _type = type;
  152. + _effect = effect;
  153. + }
  154. +
  155. + public int getNpcId()
  156. + {
  157. + return _npcId;
  158. + }
  159. +
  160. + public String getText()
  161. + {
  162. + return _text;
  163. + }
  164. +
  165. + public SayType getType()
  166. + {
  167. + return _type;
  168. + }
  169. +
  170. + public boolean isEffects()
  171. + {
  172. + return _effect;
  173. + }
  174. +}
  175. \ No newline at end of file
  176. diff --git a/aCis/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java b/aCis/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java
  177. index 2dc7f5c..4234d11 100644
  178. --- a/aCis/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java
  179. +++ b/aCis/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java
  180. @@ -17,6 +17,7 @@
  181. import net.sf.l2j.gameserver.data.xml.EnchantData;
  182. import net.sf.l2j.gameserver.data.xml.InstantTeleportData;
  183. import net.sf.l2j.gameserver.data.xml.ItemData;
  184. +import net.sf.l2j.gameserver.data.xml.MerchantSayData;
  185. import net.sf.l2j.gameserver.data.xml.MultisellData;
  186. import net.sf.l2j.gameserver.data.xml.NpcData;
  187. import net.sf.l2j.gameserver.data.xml.PolymorphData;
  188. @@ -105,6 +106,11 @@
  189. ItemData.getInstance().reload();
  190. player.sendMessage("Items' templates have been reloaded.");
  191. }
  192. + else if (type.equals("merchantsay"))
  193. + {
  194. + MerchantSayData.getInstance().reload();
  195. + player.sendMessage("The merchant say has been reloaded.");
  196. + }
  197. else if (type.equals("multisell"))
  198. {
  199. MultisellData.getInstance().reload();
  200. @@ -166,7 +172,7 @@
  201. public void sendUsage(Player player)
  202. {
  203. player.sendMessage("Usage : //reload <admin|announcement|buylist|config>");
  204. - player.sendMessage("Usage : //reload <crest|cw|drop|door|dress|enchant|htm|item|multisell|npc>");
  205. + player.sendMessage("Usage : //reload <crest|cw|drop|door|dress|enchant|htm|item|merchantsay|multisell|npc>");
  206. player.sendMessage("Usage : //reload <npcwalker|poly|script|skill|spree|teleport|zone>");
  207. }
  208. diff --git a/aCis/java/net/sf/l2j/gameserver/GameServer.java b/aCis/java/net/sf/l2j/gameserver/GameServer.java
  209. index 80ff747..3d7df81 100644
  210. --- a/aCis/java/net/sf/l2j/gameserver/GameServer.java
  211. +++ b/aCis/java/net/sf/l2j/gameserver/GameServer.java
  212. @@ -61,12 +61,14 @@
  213. import net.sf.l2j.gameserver.data.xml.DoorData;
  214. import net.sf.l2j.gameserver.data.xml.DressMeData;
  215. import net.sf.l2j.gameserver.data.xml.DropTypeData;
  216. import net.sf.l2j.gameserver.data.xml.FishData;
  217. import net.sf.l2j.gameserver.data.xml.HennaData;
  218. import net.sf.l2j.gameserver.data.xml.HerbDropData;
  219. import net.sf.l2j.gameserver.data.xml.InstantTeleportData;
  220. import net.sf.l2j.gameserver.data.xml.ItemData;
  221. import net.sf.l2j.gameserver.data.xml.MapRegionData;
  222. +import net.sf.l2j.gameserver.data.xml.MerchantSayData;
  223. import net.sf.l2j.gameserver.data.xml.MultisellData;
  224. import net.sf.l2j.gameserver.data.xml.NewbieBuffData;
  225. import net.sf.l2j.gameserver.data.xml.NpcData;
  226. @@ -255,6 +258,7 @@
  227. TeleportData.getInstance();
  228. RaidBossInfoManager.getInstance();
  229. PolymorphData.getInstance();
  230. + MerchantSayData.getInstance();
  231.  
  232. if (Config.FIND_COOL_NPCS_EASY)
  233. {
  234. diff --git a/aCis/data/xml/merchantSays.xml b/aCis/data/xml/merchantSays.xml
  235. new file mode 100644
  236. index 0000000..73f515e
  237. --- /dev/null
  238. +++ b/aCis/data/xml/merchantSays.xml
  239. @@ -0,0 +1,26 @@
  240. +<?xml version="1.0" encoding="UTF-8"?>
  241. +<list>
  242. +<!-- SayType
  243. +
  244. + ALL,
  245. + SHOUT, // !
  246. + TELL, // "
  247. + PARTY, // #
  248. + CLAN, // @
  249. + GM,
  250. + PETITION_PLAYER,
  251. + PETITION_GM,
  252. + TRADE, // +
  253. + ALLIANCE, // $
  254. + ANNOUNCEMENT,
  255. + BOAT,
  256. + L2FRIEND,
  257. + MSNCHAT,
  258. + PARTYMATCH_ROOM,
  259. + PARTYROOM_COMMANDER, // (Yellow)
  260. + PARTYROOM_ALL, // (Red)
  261. + HERO_VOICE,
  262. + CRITICAL_ANNOUNCE;
  263. + -->
  264. + <settings npcId="30001" text="Hello what do you want ?" sayType="SHOUT" effect="true" />
  265. +</list>
  266. \ No newline at end of file
  267. diff --git a/aCis/data/html/admin/server_menu.htm b/aCis/data/html/admin/server_menu.htm
  268. index 03c1fa2..e54b9b5 100644
  269. --- a/aCis/data/html/admin/server_menu.htm
  270. +++ b/aCis/data/html/admin/server_menu.htm
  271. @@ -18,7 +18,7 @@
  272. Reload
  273. <table width=240>
  274. <tr>
  275. - <td><combobox width=160 height=21 var="cb" list=admin;announcement;buylist;config;crest;cw;door;dress;drop;enchant;htm;item;multisell;npc;npcwalker;poly;script;skill;spree;teleport;zone;></td>
  276. + <td><combobox width=160 height=21 var="cb" list=admin;announcement;buylist;config;crest;cw;door;dress;drop;enchant;htm;item;merchantsay;multisell;npc;npcwalker;poly;script;skill;spree;teleport;zone;></td>
  277. <td><button value="Reload" action="bypass -h admin_reload $cb" width=65 height=19 back="L2UI_ch3.smallbutton2_over" fore="L2UI_ch3.smallbutton2"></td>
  278. </tr>
  279. </table><br>
Add Comment
Please, Sign In to add comment