Advertisement
tobaJK

Santa Claus

Nov 28th, 2017
1,214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.37 KB | None | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P aCis_gameserver
  3. Index: java/net/sf/l2j/commons/random/Rnd.java
  4. ===================================================================
  5. --- java/net/sf/l2j/commons/random/Rnd.java (revision 3)
  6. +++ java/net/sf/l2j/commons/random/Rnd.java (working copy)
  7. @@ -24,6 +24,11 @@
  8.         return ThreadLocalRandom.current().nextInt();
  9.     }
  10.    
  11. +   public static double get(double n)
  12. +   {
  13. +       return ThreadLocalRandom.current().nextDouble(0, n);
  14. +   }
  15. +  
  16.     public static int get(int n)
  17.     {
  18.         return nextInt(n);
  19. Index: java/custom/ChristmasEvent.java
  20. ===================================================================
  21. --- java/custom/ChristmasEvent.java (nonexistent)
  22. +++ java/custom/ChristmasEvent.java (working copy)
  23. @@ -0,0 +1,181 @@
  24. +package custom;
  25. +
  26. +import java.io.File;
  27. +import java.util.ArrayList;
  28. +import java.util.List;
  29. +import java.util.concurrent.TimeUnit;
  30. +
  31. +import net.sf.l2j.commons.data.xml.XMLDocument;
  32. +import net.sf.l2j.commons.random.Rnd;
  33. +
  34. +import net.sf.l2j.gameserver.data.NpcTable;
  35. +import net.sf.l2j.gameserver.data.SpawnTable;
  36. +import net.sf.l2j.gameserver.model.L2Spawn;
  37. +import net.sf.l2j.gameserver.model.actor.Creature;
  38. +import net.sf.l2j.gameserver.model.actor.Npc;
  39. +import net.sf.l2j.gameserver.model.actor.instance.Player;
  40. +import net.sf.l2j.gameserver.model.actor.instance.SantaClaus;
  41. +import net.sf.l2j.gameserver.model.holder.IntIntHolder;
  42. +import net.sf.l2j.gameserver.model.holder.IntStringHolder;
  43. +
  44. +import org.w3c.dom.Document;
  45. +import org.w3c.dom.NamedNodeMap;
  46. +import org.w3c.dom.Node;
  47. +
  48. +/**
  49. + * @author Melron
  50. + */
  51. +public class ChristmasEvent extends XMLDocument
  52. +{
  53. +   private static final List<SantasReward> Rewards = new ArrayList<>();
  54. +   private boolean enabled;
  55. +   private int minLvl;
  56. +   private int maxLvl;
  57. +   private int despawnTime;
  58. +   private int[] templates;
  59. +   private double spawnChance;
  60. +  
  61. +   public ChristmasEvent()
  62. +   {
  63. +       load();
  64. +   }
  65. +  
  66. +   @Override
  67. +   protected void load()
  68. +   {
  69. +       loadDocument("./data/xml/SantaClaus.xml");
  70. +   }
  71. +  
  72. +   @Override
  73. +   protected void parseDocument(Document doc, File f)
  74. +   {
  75. +       try
  76. +       {
  77. +           final Node list = doc.getFirstChild();
  78. +           for (Node cas = list.getFirstChild(); cas != null; cas = cas.getNextSibling())
  79. +           {
  80. +               if ("settings".equalsIgnoreCase(cas.getNodeName()))
  81. +               {
  82. +                   final NamedNodeMap attrs = cas.getAttributes();
  83. +                   enabled = attrs.getNamedItem("enable").getNodeValue().equalsIgnoreCase("true");
  84. +                   minLvl = Integer.parseInt(attrs.getNamedItem("mobMinLvL").getNodeValue());
  85. +                   maxLvl = Integer.parseInt(attrs.getNamedItem("mobMaxLvL").getNodeValue());
  86. +                   despawnTime = Integer.parseInt(attrs.getNamedItem("despawnSeconds").getNodeValue());
  87. +                   templates = new int[]
  88. +                   {
  89. +                       Integer.parseInt(attrs.getNamedItem("NpcTempates").getNodeValue().split(",")[0]),
  90. +                       Integer.parseInt(attrs.getNamedItem("NpcTempates").getNodeValue().split(",")[1])
  91. +                   };
  92. +                   spawnChance = Double.parseDouble(attrs.getNamedItem("spawnChance").getNodeValue());
  93. +               }
  94. +               else if ("reward".equalsIgnoreCase(cas.getNodeName()))
  95. +               {
  96. +                  
  97. +                   IntStringHolder exp = new IntStringHolder(-1, "");
  98. +                   IntStringHolder sp = new IntStringHolder(-1, "");
  99. +                   IntStringHolder rec = new IntStringHolder(-1, "");
  100. +                  
  101. +                   final List<IntIntHolder> rewards = new ArrayList<>();
  102. +                  
  103. +                   for (Node cat = cas.getFirstChild(); cat != null; cat = cat.getNextSibling())
  104. +                   {
  105. +                       final NamedNodeMap catAttrs = cat.getAttributes();
  106. +                      
  107. +                       if ("exp".equalsIgnoreCase(cat.getNodeName()))
  108. +                           exp = new IntStringHolder(Integer.parseInt(catAttrs.getNamedItem("val").getNodeValue()), catAttrs.getNamedItem("messageOnReward").getNodeValue());
  109. +                      
  110. +                       else if ("sp".equalsIgnoreCase(cat.getNodeName()))
  111. +                           sp = new IntStringHolder(Integer.parseInt(catAttrs.getNamedItem("val").getNodeValue()), catAttrs.getNamedItem("messageOnReward").getNodeValue());
  112. +                      
  113. +                       else if ("rec".equalsIgnoreCase(cat.getNodeName()))
  114. +                           rec = new IntStringHolder(Integer.parseInt(catAttrs.getNamedItem("val").getNodeValue()), catAttrs.getNamedItem("messageOnReward").getNodeValue());
  115. +                      
  116. +                       else if ("items".equalsIgnoreCase(cat.getNodeName()))
  117. +                       {
  118. +                           for (Node cats = cat.getFirstChild(); cats != null; cats = cats.getNextSibling())
  119. +                           {
  120. +                               final NamedNodeMap rewAttrs = cats.getAttributes();
  121. +                               if (!"item".equalsIgnoreCase(cats.getNodeName()))
  122. +                                   continue;
  123. +                              
  124. +                               rewards.add(new IntIntHolder(Integer.parseInt(rewAttrs.getNamedItem("id").getNodeValue()), Integer.parseInt(rewAttrs.getNamedItem("quantity").getNodeValue())));
  125. +                           }
  126. +                       }
  127. +                   }
  128. +                   Rewards.add(new SantasReward(exp, sp, rec, rewards));
  129. +               }
  130. +           }
  131. +       }
  132. +       catch (Exception e)
  133. +       {
  134. +           e.printStackTrace();
  135. +           System.out.println("Error while loading SantaClaus.xml");
  136. +       }
  137. +   }
  138. +  
  139. +   public int rewardsSize()
  140. +   {
  141. +       return Rewards.size();
  142. +   }
  143. +  
  144. +   public SantasReward getRandomReward()
  145. +   {
  146. +       return Rnd.get(Rewards);
  147. +   }
  148. +  
  149. +   public boolean isEnabled()
  150. +   {
  151. +       return enabled;
  152. +   }
  153. +  
  154. +   public void luckySpawn(Creature monster, Player selective)
  155. +   {
  156. +       if (selective == null || monster.getLevel() < minLvl || monster.getLevel() > maxLvl || Rnd.get(100.0) > spawnChance)
  157. +           return;
  158. +       try
  159. +       {
  160. +           L2Spawn spawn = new L2Spawn(NpcTable.getInstance().getTemplate(templates[Rnd.get(templates.length)]));
  161. +           spawn.setLoc(monster.getX(), monster.getY(), monster.getZ(), monster.getHeading());
  162. +           spawn.setRespawnDelay(0);
  163. +          
  164. +           SpawnTable.getInstance().addNewSpawn(spawn, false);
  165. +           SantaClaus santa = (SantaClaus) spawn.doSpawn(false);
  166. +           spawn.setRespawnState(false);
  167. +           santa.setSelective(selective);
  168. +          
  169. +           final int despawnTime = getDespawnTime();
  170. +           ((Npc) santa).scheduleDespawn(TimeUnit.SECONDS.toMillis(despawnTime));
  171. +           santa.broadcastNpcSay("Ho Ho Ho! What we got here? I'm smelling some rewards for you " + selective.getName() + "! I will stay for " + despawnTime + " seconds! Hurry Up!");
  172. +          
  173. +       }
  174. +       catch (Exception e)
  175. +       {
  176. +           e.printStackTrace();
  177. +       }
  178. +   }
  179. +  
  180. +   public int getDespawnTime()
  181. +   {
  182. +       return despawnTime;
  183. +   }
  184. +  
  185. +   public int getMinLvl()
  186. +   {
  187. +       return minLvl;
  188. +   }
  189. +  
  190. +   public int getMaxLvl()
  191. +   {
  192. +       return maxLvl;
  193. +   }
  194. +  
  195. +   public static ChristmasEvent getInstance()
  196. +   {
  197. +       return SingletonHolder._instance;
  198. +   }
  199. +  
  200. +   private static class SingletonHolder
  201. +   {
  202. +       protected static final ChristmasEvent _instance = new ChristmasEvent();
  203. +   }
  204. +}
  205. Index: java/net/sf/l2j/gameserver/model/holder/IntStringHolder.java
  206. ===================================================================
  207. --- java/net/sf/l2j/gameserver/model/holder/IntStringHolder.java    (nonexistent)
  208. +++ java/net/sf/l2j/gameserver/model/holder/IntStringHolder.java    (working copy)
  209. @@ -0,0 +1,42 @@
  210. +package net.sf.l2j.gameserver.model.holder;
  211. +
  212. +/**
  213. + * A generic int/string container.
  214. + */
  215. +public class IntStringHolder
  216. +{
  217. +   private int _value;
  218. +   private String _string;
  219. +  
  220. +   public IntStringHolder(int value, String string)
  221. +   {
  222. +       _value = value;
  223. +       _string = string;
  224. +   }
  225. +  
  226. +   public int getValue()
  227. +   {
  228. +       return _value;
  229. +   }
  230. +  
  231. +   public String getString()
  232. +   {
  233. +       return _string;
  234. +   }
  235. +  
  236. +   public void setValue(int value)
  237. +   {
  238. +       _value = value;
  239. +   }
  240. +  
  241. +   public void setString(String value)
  242. +   {
  243. +       _string = value;
  244. +   }
  245. +  
  246. +   @Override
  247. +   public String toString()
  248. +   {
  249. +       return getClass().getSimpleName() + ": Value: " + _value + ", String: " + _string;
  250. +   }
  251. +}
  252. \ No newline at end of file
  253. Index: java/net/sf/l2j/gameserver/GameServer.java
  254. ===================================================================
  255. --- java/net/sf/l2j/gameserver/GameServer.java  (revision 4)
  256. +++ java/net/sf/l2j/gameserver/GameServer.java  (working copy)
  257. @@ -107,6 +107,8 @@
  258.  import net.sf.l2j.util.DeadLockDetector;
  259.  import net.sf.l2j.util.IPv4Filter;
  260.  
  261. +import custom.ChristmasEvent;
  262. +
  263.  public class GameServer
  264.  {
  265.     private static final Logger _log = Logger.getLogger(GameServer.class.getName());
  266. @@ -231,6 +233,9 @@
  267.         StringUtil.printSection("Manor Manager");
  268.         CastleManorManager.getInstance();
  269.        
  270. +       StringUtil.printSection("Christmas Event");
  271. +       _log.config("Loaded " + ChristmasEvent.getInstance().rewardsSize() + " Rewards!");
  272. +      
  273.         StringUtil.printSection("NPCs");
  274.         BufferManager.getInstance();
  275.         HerbDropData.getInstance();
  276. Index: java/net/sf/l2j/gameserver/model/actor/instance/Monster.java
  277. ===================================================================
  278. --- java/net/sf/l2j/gameserver/model/actor/instance/Monster.java    (revision 3)
  279. +++ java/net/sf/l2j/gameserver/model/actor/instance/Monster.java    (working copy)
  280. @@ -5,6 +5,8 @@
  281.  import net.sf.l2j.gameserver.model.actor.Creature;
  282.  import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
  283.  
  284. +import custom.ChristmasEvent;
  285. +
  286.  /**
  287.   * This class manages monsters.
  288.   * <ul>
  289. @@ -98,6 +100,9 @@
  290.         if (_master != null)
  291.             _master.getMinionList().onMinionDie(this, _master.getSpawn().getRespawnDelay() * 1000 / 2);
  292.        
  293. +       if (ChristmasEvent.getInstance().isEnabled() && killer instanceof Player)
  294. +           ChristmasEvent.getInstance().luckySpawn(this, ((Player) killer));
  295. +      
  296.         return true;
  297.     }
  298.    
  299. Index: java/custom/SantasReward.java
  300. ===================================================================
  301. --- java/custom/SantasReward.java   (nonexistent)
  302. +++ java/custom/SantasReward.java   (working copy)
  303. @@ -0,0 +1,87 @@
  304. +package custom;
  305. +
  306. +import java.util.List;
  307. +
  308. +import net.sf.l2j.commons.lang.StringUtil;
  309. +
  310. +import net.sf.l2j.gameserver.model.actor.instance.Player;
  311. +import net.sf.l2j.gameserver.model.holder.IntIntHolder;
  312. +import net.sf.l2j.gameserver.model.holder.IntStringHolder;
  313. +
  314. +/**
  315. + * @author Melron
  316. + */
  317. +public class SantasReward
  318. +{
  319. +   private IntStringHolder _exp;
  320. +   private IntStringHolder _sp;
  321. +   private IntStringHolder _rec;
  322. +   private List<IntIntHolder> rewardItems;
  323. +  
  324. +   public SantasReward(IntStringHolder exp, IntStringHolder sp, IntStringHolder rec, List<IntIntHolder> rewards)
  325. +   {
  326. +       _exp = exp;
  327. +       _sp = sp;
  328. +       _rec = rec;
  329. +       rewardItems = rewards;
  330. +   }
  331. +  
  332. +   public boolean applyTo(Player player)
  333. +   {
  334. +       if (player == null)
  335. +           return false;
  336. +      
  337. +       if (hasExpReward())
  338. +       {
  339. +           player.getStat().addExp(_exp.getValue());
  340. +           player.sendMessage(_exp.getString().replaceAll("\\$player", player.getName()).replaceAll("\\$val", String.valueOf(_exp.getValue())));
  341. +       }
  342. +      
  343. +       if (hasSpReward())
  344. +       {
  345. +           player.getStat().addSp(_sp.getValue());
  346. +           player.sendMessage(_sp.getString().replaceAll("\\$player", player.getName()).replaceAll("\\$val", String.valueOf(_sp.getValue())));
  347. +       }
  348. +      
  349. +       if (hasRecReward())
  350. +       {
  351. +           player.setRecomHave(_rec.getValue());
  352. +           player.sendMessage(_rec.getString().replaceAll("\\$player", player.getName()).replaceAll("\\$val", String.valueOf(_rec.getValue())));
  353. +       }
  354. +      
  355. +       if (hasRewardItems())
  356. +           rewardItems.forEach(reward -> player.addItem("SantasReward", reward.getId(), reward.getValue(), null, true));
  357. +      
  358. +       return true;
  359. +   }
  360. +  
  361. +   public boolean hasExpReward()
  362. +   {
  363. +       return _exp != null && _exp.getValue() > 0;
  364. +   }
  365. +  
  366. +   public boolean hasSpReward()
  367. +   {
  368. +       return _sp != null && _sp.getValue() > 0;
  369. +   }
  370. +  
  371. +   public boolean hasRecReward()
  372. +   {
  373. +       return _rec != null && _rec.getValue() > 0;
  374. +   }
  375. +  
  376. +   public boolean hasRewardItems()
  377. +   {
  378. +       return rewardItems != null && rewardItems.size() > 0;
  379. +   }
  380. +  
  381. +   @Override
  382. +   public String toString()
  383. +   {
  384. +       final StringBuilder sb = new StringBuilder();
  385. +      
  386. +       StringUtil.append(sb, "\n==================", "\nExp : " + _exp.getValue(), ",\"" + _exp.getString() + "\"", "\nSp : " + _sp.getValue(), ",\"" + _sp.getString() + "\"", "\nRec : " + _rec.getValue(), ",\"" + _rec.getString() + "\"", "\nRewardItems : ");
  387. +       rewardItems.forEach(holder -> StringUtil.append(sb, "\nId: ", holder.getId(), " Quantity: ", holder.getValue()));
  388. +       return sb.toString();
  389. +   }
  390. +}
  391.  
  392. Index: java/net/sf/l2j/gameserver/model/actor/instance/SantaClaus.java
  393. ===================================================================
  394. --- java/net/sf/l2j/gameserver/model/actor/instance/SantaClaus.java (nonexistent)
  395. +++ java/net/sf/l2j/gameserver/model/actor/instance/SantaClaus.java (working copy)
  396. @@ -0,0 +1,51 @@
  397. +package net.sf.l2j.gameserver.model.actor.instance;
  398. +
  399. +import java.util.StringTokenizer;
  400. +import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
  401. +import custom.ChristmasEvent;
  402. +
  403. +public class SantaClaus extends Folk
  404. +{
  405. +   private Player selective = null;
  406. +   private boolean rewarded = false;
  407. +  
  408. +   public SantaClaus(int objectId, NpcTemplate template)
  409. +   {
  410. +       super(objectId, template);
  411. +   }
  412. +  
  413. +   @Override
  414. +   public void onBypassFeedback(Player player, String command)
  415. +   {
  416. +       StringTokenizer st = new StringTokenizer(command, " ");
  417. +       String currentCommand = st.nextToken();
  418. +      
  419. +       if (currentCommand.startsWith("claim"))
  420. +       {
  421. +           if (player == null || selective == null)
  422. +               return;
  423. +          
  424. +           if (selective == player && !rewarded)
  425. +           {
  426. +               rewarded = ChristmasEvent.getInstance().getRandomReward().applyTo(player);
  427. +               if (rewarded)
  428. +               {
  429. +                   broadcastNpcSay("Bye!");
  430. +                   deleteMe();
  431. +               }
  432. +              
  433. +           }
  434. +       }
  435. +   }
  436. +  
  437. +   @Override
  438. +   public String getHtmlPath(int npcId, int val)
  439. +   {
  440. +       return "data/html/mods/santa/" + (this.getNpcId() == 50010 ? "1" : "2") + ".htm";
  441. +   }
  442. +  
  443. +   public void setSelective(Player player)
  444. +   {
  445. +       selective = player;
  446. +   }
  447. +}
  448. \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement