Advertisement
VANPER

Raid System Event Farm

Jan 15th, 2024
1,485
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.15 KB | None | 0 0
  1. Index: java/net/sf/l2j/gameserver/dev/systemFarm/SystemFarmManager.java
  2. ===================================================================
  3. --- java/net/sf/l2j/gameserver/dev/systemFarm/SystemFarmManager.java    (BAN - L2JDEV www.l2jdev.com.br)
  4. +++ java/net/sf/l2j/gameserver/dev/systemFarm/SystemFarmManager.java   
  5.  
  6.  
  7. +   package net.sf.l2j.gameserver.dev.systemFarm;
  8. +  
  9. +   import java.io.File;
  10. +   import java.io.IOException;
  11. +   import java.text.SimpleDateFormat;
  12. +   import java.util.ArrayList;
  13. +   import java.util.Calendar;
  14. +  
  15. +   import net.sf.l2j.commons.concurrent.ThreadPool;
  16. +   import net.sf.l2j.commons.config.ExProperties;
  17. +   import net.sf.l2j.commons.logging.CLogger;
  18. +  
  19. +   import net.sf.l2j.Config;
  20. +   import net.sf.l2j.gameserver.data.xml.NpcData;
  21. +   import net.sf.l2j.gameserver.model.World;
  22. +   import net.sf.l2j.gameserver.model.actor.Npc;
  23. +   import net.sf.l2j.gameserver.model.actor.Player;
  24. +   import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
  25. +   import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  26. +   import net.sf.l2j.gameserver.model.spawn.Spawn;
  27. +   import net.sf.l2j.gameserver.network.SystemMessageId;
  28. +   import net.sf.l2j.gameserver.network.serverpackets.ItemList;
  29. +   import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  30. +  
  31. +   /**
  32. +    * @author BAN - L2JDEV
  33. +    */
  34. +   public class SystemFarmManager
  35. +   {
  36. +       private static final CLogger LOGGER = new CLogger(SystemFarmManager.class.getName());
  37. +       private Calendar NextEvent;
  38. +      
  39. +       public static boolean SYSTEMFARM_EVENT_ENABLE;
  40. +       public static String[] SYSTEMFARM_EVENT_BY_TIME_OF_DAY;
  41. +       public int SYSTEMFARM_TIME;
  42. +       public int SYSTEMFARM_NPC_ID_TYPE_ONE;
  43. +       public int SYSTEMFARM_NPC_ID_TYPE_TWO;
  44. +       public int itemId;
  45. +       public int count;
  46. +      
  47. +       public static int[] SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES = new int[3];
  48. +      
  49. +       public static int[] SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES = new int[3];
  50. +      
  51. +       public static final String SYSTEM_FARM_FILE = "config/SystemFarmManager.properties";
  52. +      
  53. +       public ArrayList<Spawn> MonsterEvent = new ArrayList<>();
  54. +      
  55. +       public boolean _starting;
  56. +       public boolean _aborted;
  57. +      
  58. +       public SystemFarmManager()
  59. +       {
  60. +           try
  61. +           {
  62. +               ExProperties l2jdev = load(SYSTEM_FARM_FILE);
  63. +               SYSTEMFARM_EVENT_ENABLE = l2jdev.getProperty("SystemFarmEventEnable", false);
  64. +              
  65. +               SYSTEMFARM_EVENT_BY_TIME_OF_DAY = l2jdev.getProperty("EventTimeOfDay", "20:00").split(",");
  66. +               SYSTEMFARM_TIME = l2jdev.getProperty("EventTime", 60);
  67. +              
  68. +               itemId = l2jdev.getProperty("itemId", 57);
  69. +               count = l2jdev.getProperty("count", 100);
  70. +              
  71. +               SYSTEMFARM_NPC_ID_TYPE_ONE = l2jdev.getProperty("RaidSpawnNpcIdTypeOne", 300);
  72. +               SYSTEMFARM_NPC_ID_TYPE_ONE = l2jdev.getProperty("RaidSpawnNpcIdTypeOne", 300);
  73. +              
  74. +               String[] propertySplit = l2jdev.getProperty("RaidNpcCoordinatesOne", "0,0,0").split(",");
  75. +               if (propertySplit.length < 3)
  76. +               {
  77. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[0] = 83456;
  78. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[1] = 148611;
  79. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[2] = -3408;
  80. +               }
  81. +               else
  82. +               {
  83. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[0] = Integer.parseInt(propertySplit[0]);
  84. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[1] = Integer.parseInt(propertySplit[1]);
  85. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[2] = Integer.parseInt(propertySplit[2]);
  86. +                  
  87. +               }
  88. +              
  89. +               String[] tlk = l2jdev.getProperty("RaidNpcCoordinatesTwo", "0,0,0").split(",");
  90. +               if (tlk.length < 3)
  91. +               {
  92. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[0] = 83456;
  93. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[1] = 148611;
  94. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[2] = -3408;
  95. +               }
  96. +               else
  97. +               {
  98. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[0] = Integer.parseInt(tlk[0]);
  99. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[1] = Integer.parseInt(tlk[1]);
  100. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[2] = Integer.parseInt(tlk[2]);
  101. +                  
  102. +               }
  103. +           }
  104. +           catch (Exception e)
  105. +           {
  106. +               e.printStackTrace();
  107. +           }
  108. +          
  109. +       }
  110. +      
  111. +       public void StartingCheck()
  112. +       {
  113. +           _starting = true;
  114. +           _aborted = false;
  115. +          
  116. +           World.announceToOnlinePlayers("Announce: " + "System Farm Event Duration: " + SYSTEMFARM_TIME + " Hour(s)!", true);
  117. +           waiter(SYSTEMFARM_TIME * 60 * 1000);
  118. +           if (!_aborted)
  119. +               finishEvent();
  120. +          
  121. +           int[] coorone = SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES;
  122. +           spawnNPC(coorone[0], coorone[1], coorone[2], SYSTEMFARM_NPC_ID_TYPE_ONE);
  123. +          
  124. +           int[] coorTwo = SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES;
  125. +           spawnNPC(coorTwo[0], coorTwo[1], coorTwo[2], SYSTEMFARM_NPC_ID_TYPE_TWO);
  126. +       }
  127. +      
  128. +       public void finishEvent()
  129. +       {
  130. +           startCalculationOfNextEventTime();
  131. +          
  132. +           _starting = false;
  133. +           _aborted = true;
  134. +           World.announceToOnlinePlayers("Announce:" + " Next System Farm Event: " + getNextTime(), true);
  135. +          
  136. +           cleanNpc();
  137. +          
  138. +       }
  139. +      
  140. +       public void cleanNpc()
  141. +       {
  142. +           if (!MonsterEvent.isEmpty())
  143. +           {
  144. +               for (Spawn npc : MonsterEvent)
  145. +               {
  146. +                   npc.getNpc().deleteMe();
  147. +               }
  148. +               MonsterEvent.clear();
  149. +           }
  150. +       }
  151. +      
  152. +       protected void waiter(long interval)
  153. +       {
  154. +           long startWaiterTime = System.currentTimeMillis();
  155. +           int seconds = (int) (interval / 1000L);
  156. +           while (((startWaiterTime) + interval > System.currentTimeMillis()) && !_aborted)
  157. +           {
  158. +               seconds--;
  159. +               switch (seconds)
  160. +               {
  161. +                   case 10800:
  162. +                       if (_starting)
  163. +                           World.announceToOnlinePlayers("Announce: System Farm Event " + seconds / 60 / 60 + " hour(s) till event finish!", true);
  164. +                       break;
  165. +                  
  166. +                   case 7200:
  167. +                       if (_starting)
  168. +                           World.announceToOnlinePlayers("Announce: System Farm Event " + seconds / 60 / 60 + " hour(s) till event finish!", true);
  169. +                       break;
  170. +                  
  171. +                   case 3600:
  172. +                       if (_starting)
  173. +                           World.announceToOnlinePlayers("Announce: System Farm Event " + seconds / 60 / 60 + " hour(s) till event finish!", true);
  174. +                       break;
  175. +                   case 60:
  176. +                   case 120:
  177. +                   case 180:
  178. +                   case 240:
  179. +                   case 300:
  180. +                   case 600:
  181. +                   case 900:
  182. +                   case 1800:
  183. +                       if (_starting)
  184. +                           World.announceToOnlinePlayers("Announce: System Farm Event " + seconds / 60 + " minute(s) till event finish!", true);
  185. +                       break;
  186. +                   case 1:
  187. +                   case 2:
  188. +                   case 3:
  189. +                   case 10:
  190. +                   case 15:
  191. +                   case 30:
  192. +                       if (_starting)
  193. +                           World.announceToOnlinePlayers("Announce: System Farm Event " + seconds + " second(s) till event finish!", true);
  194. +                       break;
  195. +               }
  196. +               long startOneSecondWaiterStartTime = System.currentTimeMillis();
  197. +               while (startOneSecondWaiterStartTime + 1000L > System.currentTimeMillis())
  198. +                   try
  199. +                   {
  200. +                       Thread.sleep(1L);
  201. +                   }
  202. +                   catch (InterruptedException ie)
  203. +                   {
  204. +                       ie.printStackTrace();
  205. +                       LOGGER.info("Error Clock waiter System Farm Event.");
  206. +                   }
  207. +           }
  208. +       }
  209. +      
  210. +       public static ExProperties load(String filename)
  211. +       {
  212. +           return load(new File(filename));
  213. +       }
  214. +      
  215. +       public static ExProperties load(File file)
  216. +       {
  217. +           ExProperties result = new ExProperties();
  218. +          
  219. +           try
  220. +           {
  221. +               result.load(file);
  222. +           }
  223. +           catch (IOException e)
  224. +           {
  225. +               LOGGER.error("Error loading config : " + file.getName() + "!", e);
  226. +           }
  227. +          
  228. +           return result;
  229. +       }
  230. +      
  231. +       public String getNextTime()
  232. +       {
  233. +           if (NextEvent.getTime() != null)
  234. +           {
  235. +               SimpleDateFormat formatWithAmPm = new SimpleDateFormat("hh:mm a");
  236. +               return formatWithAmPm.format(NextEvent.getTime());
  237. +           }
  238. +           return "Error";
  239. +       }
  240. +      
  241. +       public void startCalculationOfNextEventTime()
  242. +       {
  243. +           try
  244. +           {
  245. +               Calendar currentTime = Calendar.getInstance();
  246. +               Calendar testStartTime = null;
  247. +               long flush2 = 0L;
  248. +               long timeL = 0L;
  249. +               int count = 0;
  250. +               for (String timeOfDay : SYSTEMFARM_EVENT_BY_TIME_OF_DAY)
  251. +               {
  252. +                   testStartTime = Calendar.getInstance();
  253. +                   testStartTime.setLenient(true);
  254. +                   String[] splitTimeOfDay = timeOfDay.split(":");
  255. +                   testStartTime.set(11, Integer.parseInt(splitTimeOfDay[0]));
  256. +                   testStartTime.set(12, Integer.parseInt(splitTimeOfDay[1]));
  257. +                   testStartTime.set(13, 0);
  258. +                   if (testStartTime.getTimeInMillis() < currentTime.getTimeInMillis())
  259. +                       testStartTime.add(5, 1);
  260. +                   timeL = testStartTime.getTimeInMillis() - currentTime.getTimeInMillis();
  261. +                   if (count == 0)
  262. +                   {
  263. +                       flush2 = timeL;
  264. +                       NextEvent = testStartTime;
  265. +                   }
  266. +                   if (timeL < flush2)
  267. +                   {
  268. +                       flush2 = timeL;
  269. +                       NextEvent = testStartTime;
  270. +                   }
  271. +                   count++;
  272. +               }
  273. +               LOGGER.info("System Farm Event: Next Event [" + NextEvent.getTime().toString() + "]");
  274. +               ThreadPool.schedule(new StartEventTask(), flush2);
  275. +           }
  276. +           catch (Exception e)
  277. +           {
  278. +               System.out.println("[System Farm Event]: " + e);
  279. +           }
  280. +       }
  281. +      
  282. +       private class StartEventTask implements Runnable
  283. +       {
  284. +           StartEventTask()
  285. +           {
  286. +           }
  287. +          
  288. +           @Override
  289. +           public void run()
  290. +           {
  291. +               StartingCheck();
  292. +           }
  293. +       }
  294. +      
  295. +       public void reload()
  296. +      
  297. +       {
  298. +           try
  299. +           {
  300. +               ExProperties l2jdev = load(SYSTEM_FARM_FILE);
  301. +               SYSTEMFARM_EVENT_ENABLE = l2jdev.getProperty("SystemFarmEventEnable", false);
  302. +              
  303. +               SYSTEMFARM_EVENT_BY_TIME_OF_DAY = l2jdev.getProperty("EventTimeOfDay", "20:00").split(",");
  304. +               SYSTEMFARM_TIME = l2jdev.getProperty("EventTime", 60);
  305. +              
  306. +               SYSTEMFARM_NPC_ID_TYPE_ONE = l2jdev.getProperty("RaidSpawnNpcIdTypeOne", 300);
  307. +               SYSTEMFARM_NPC_ID_TYPE_TWO = l2jdev.getProperty("RaidSpawnNpcIdTypeTwo", 300);
  308. +              
  309. +               itemId = l2jdev.getProperty("itemId", 57);
  310. +               count = l2jdev.getProperty("count", 100);
  311. +              
  312. +               String[] propertySplit = l2jdev.getProperty("RaidNpcCoordinatesOne", "0,0,0").split(",");
  313. +               if (propertySplit.length < 3)
  314. +               {
  315. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[0] = 83456;
  316. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[1] = 148611;
  317. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[2] = -3408;
  318. +               }
  319. +               else
  320. +               {
  321. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[0] = Integer.parseInt(propertySplit[0]);
  322. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[1] = Integer.parseInt(propertySplit[1]);
  323. +                   SYSTEM_EVENT_NPCID_TYPE_ONE_COORDINATES[2] = Integer.parseInt(propertySplit[2]);
  324. +                  
  325. +               }
  326. +              
  327. +               String[] tlk = l2jdev.getProperty("RaidNpcCoordinatesTwo", "0,0,0").split(",");
  328. +               if (tlk.length < 3)
  329. +               {
  330. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[0] = 83456;
  331. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[1] = 148611;
  332. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[2] = -3408;
  333. +               }
  334. +               else
  335. +               {
  336. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[0] = Integer.parseInt(tlk[0]);
  337. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[1] = Integer.parseInt(tlk[1]);
  338. +                   SYSTEM_EVENT_NPCID_TYPE_TWO_COORDINATES[2] = Integer.parseInt(tlk[2]);
  339. +                  
  340. +               }
  341. +           }
  342. +           catch (Exception e)
  343. +           {
  344. +               e.printStackTrace();
  345. +           }
  346. +       }
  347. +      
  348. +       protected Spawn spawnNPC(int xPos, int yPos, int zPos, int npcId)
  349. +       {
  350. +           final NpcTemplate template = NpcData.getInstance().getTemplate(npcId);
  351. +          
  352. +           try
  353. +           {
  354. +               final Spawn spawn = new Spawn(template);
  355. +               spawn.setLoc(xPos, yPos, zPos, 0);
  356. +               spawn.setRespawnDelay(1);
  357. +               spawn.doSpawn(false);
  358. +               MonsterEvent.add(spawn);
  359. +               return spawn;
  360. +           }
  361. +           catch (Exception e)
  362. +           {
  363. +               return null;
  364. +           }
  365. +       }
  366. +      
  367. +       public void onDeath(Player player, Npc monster)
  368. +       {
  369. +           if (_starting)
  370. +           {
  371. +               ItemInstance item = ItemInstance.create(itemId, count, player, monster);
  372. +              
  373. +               if (monster.getNpcId() == SYSTEMFARM_NPC_ID_TYPE_ONE && monster.getNpcId() == SYSTEMFARM_NPC_ID_TYPE_TWO)
  374. +               {
  375. +                   if (Config.AUTO_LOOT && player.getInventory().validateCapacity(item))
  376. +                   {
  377. +                       if (player.isVip())
  378. +                       {
  379. +                           player.getInventory().addItem("Cube Reward", item.getItemId(), item.getCount() * 2, player, monster);
  380. +                          
  381. +                           if (item.getCount() > 1)
  382. +                               player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S).addItemName(item.getItemId()).addItemNumber(item.getCount() * 2));
  383. +                           else
  384. +                               player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1).addItemName(item.getItemId()));
  385. +                       }
  386. +                       else
  387. +                       {
  388. +                           player.getInventory().addItem("Cube Reward", item.getItemId(), item.getCount(), player, player);
  389. +                          
  390. +                           if (item.getCount() > 1)
  391. +                               player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S).addItemName(item.getItemId()).addItemNumber(item.getCount()));
  392. +                           else
  393. +                               player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1).addItemName(item.getItemId()));
  394. +  
  395. +                       }
  396. +                       player.sendPacket(new ItemList(player, false));
  397. +                   }
  398. +                   else
  399. +                   {
  400. +                       item.dropMe(monster, monster.getX(), monster.getY() + 30, monster.getZ());
  401. +                   }
  402. +                  
  403. +               }
  404. +           }
  405. +       }
  406. +      
  407. +       public static SystemFarmManager getInstance()
  408. +       {
  409. +           return SingletonHolder.INSTANCE;
  410. +       }
  411. +      
  412. +       private static class SingletonHolder
  413. +       {
  414. +           protected static final SystemFarmManager INSTANCE = new SystemFarmManager();
  415. +       }
  416. +      
  417. +   }
  418.  
  419.  
  420. Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java
  421. ===================================================================
  422. --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (BAN - L2JDEV www.l2jdev.com.br)
  423. +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java
  424.  
  425.  
  426. +   import net.sf.l2j.gameserver.dev.systemFarm.SystemFarmManager;
  427. import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
  428.  
  429.  
  430.     else if (type.startsWith("config"))
  431.     {
  432.         Config.loadGameServer();
  433. +       SystemFarmManager.getInstance().reload();
  434.         activeChar.sendMessage("Configs files have been reloaded.");
  435.     }
  436.  
  437.  
  438. Index: java/net/sf/l2j/gameserver/model/actor/Attackable.java
  439. ===================================================================
  440. --- java/net/sf/l2j/gameserver/model/actor/Attackable.java  (BAN - L2JDEV www.l2jdev.com.br)
  441. +++ java/net/sf/l2j/gameserver/model/actor/Attackable.java 
  442.  
  443. import net.sf.l2j.Config;
  444. +import net.sf.l2j.gameserver.dev.systemFarm.SystemFarmManager;
  445.  
  446. @Override
  447. public boolean doDie(Creature killer)
  448. {
  449.     if (!super.doDie(killer))1
  450.         return false;
  451.  
  452. +   if (this instanceof Monster)
  453. +       {
  454. +           final Monster monster = (Monster) this;
  455. +          
  456. +           SystemFarmManager.getInstance().onDeath((Player) killer, monster);
  457. +       }
  458.  
  459. _attackedBy.clear();
  460. }
  461.  
  462.  
  463. Index: java/net/sf/l2j/gameserver/gameserver.java
  464. ===================================================================
  465. --- java/net/sf/l2j/gameserver/gameserver.java  (BAN - L2JDEV www.l2jdev.com.br)
  466. +++ java/net/sf/l2j/gameserver/gameserver.java 
  467.  
  468.     StringUtil.printSection("Olympiads & Heroes");
  469.     OlympiadGameManager.getInstance();
  470.     Olympiad.getInstance();
  471.     HeroManager.getInstance();
  472.  
  473. +   StringUtil.printSection("System Farm Manager");
  474. +   SystemFarmManager.getInstance();
  475. +   if (SystemFarmManager.SYSTEMFARM_EVENT_ENABLE)
  476. +           SystemFarmManager.getInstance().startCalculationOfNextEventTime();
  477.  
  478.     StringUtil.printSection("Four Sepulchers");
  479.    
  480.    
  481. Index: config/SystemFarmManager.properties
  482. ===================================================================
  483. --- config/SystemFarmManager.properties (BAN - L2JDEV www.l2jdev.com.br)
  484. +++ config/SystemFarmManager.properties
  485.  
  486. +   #============================================================#
  487. +   #            New System Farm Manager                         #
  488. +   #        JDev Project - WWWW.L2JDEV.COM.BR                   #
  489. +   #============================================================#
  490. +  
  491. +   # Enable Event Manager
  492. +   SystemFarmEventEnable = True
  493. +  
  494. +   # Setting the System Farm start time
  495. +   # The BattleStatingTime variable defines the System Farm start times.
  496. +   # It is a list of times in the format HH:mm,HH:mm,HH:mm
  497. +   EventTimeOfDay = 06:00,06:10,19:16,19:26
  498. +  
  499. +   # Configuring System Farm Duration Event interval
  500. +   # The BattleInvervalDuration variable defines the duration, in minute, of the running period
  501. +   EventTime = 60
  502. +  
  503. +   # Configuring System Farm Npc RegisterId
  504. +   RaidSpawnNpcIdTypeOne = 102
  505. +   RaidSpawnNpcIdTypeOne = 103
  506. +  
  507. +   # Configuring System Farm Npc Location
  508. +   RaidNpcCoordinatesOne = 83456,148611,-3408
  509. +   RaidNpcCoordinatesTwo = 83456,148611,-3408
  510. +  
  511. +   itemId = 57
  512. +   count = 100
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement