Advertisement
tensador125

Clan Stronghold Npc

Apr 11th, 2023 (edited)
1,638
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.39 KB | Gaming | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P Orionwins
  3. diff --git src/Base/ClanStrongold/ClanStrongholdDeviceSpawner.java src/Base/ClanStrongold/ClanStrongholdDeviceSpawner.java
  4. new file mode 100644
  5. index 0000000..e7d149a
  6. --- /dev/null
  7. +++ src/Base/ClanStrongold/ClanStrongholdDeviceSpawner.java
  8. @@ -0,0 +1,187 @@
  9. +package Base.ClanStrongold;
  10. +
  11. +import l2jwins.game.datatables.sql.NpcTable;
  12. +import l2jwins.game.datatables.sql.SpawnTable;
  13. +import l2jwins.game.model.actor.instance.L2NpcInstance;
  14. +import l2jwins.game.model.spawn.L2Spawn;
  15. +import l2jwins.game.templates.L2NpcTemplate;
  16. +
  17. +#Author Terius
  18. +public class ClanStrongholdDeviceSpawner
  19. +{
  20. +  
  21. +   private static final int CLAN_STRONGHOLD_DEVICE = 34156;
  22. +   private static final int[][] _mobLoc =
  23. +   {
  24. +       {
  25. +           CLAN_STRONGHOLD_DEVICE,
  26. +           20861,
  27. +           117304,
  28. +           -12089,
  29. +           243
  30. +       },
  31. +       {
  32. +           CLAN_STRONGHOLD_DEVICE,
  33. +           23739,
  34. +           119992,
  35. +           -12089,
  36. +           243
  37. +       },
  38. +       {
  39. +           CLAN_STRONGHOLD_DEVICE,
  40. +           23741,
  41. +           117379,
  42. +           -12089,
  43. +           243
  44. +       },
  45. +       {
  46. +           CLAN_STRONGHOLD_DEVICE,
  47. +           20636,
  48. +           119935,
  49. +           -12089,
  50. +           243
  51. +       },
  52. +      
  53. +       {
  54. +           CLAN_STRONGHOLD_DEVICE,
  55. +           20875,
  56. +           111002,
  57. +           -12089,
  58. +           243
  59. +       },
  60. +       {
  61. +           CLAN_STRONGHOLD_DEVICE,
  62. +           14566,
  63. +           111071,
  64. +           -12089,
  65. +           243
  66. +       },
  67. +       {
  68. +           CLAN_STRONGHOLD_DEVICE,
  69. +           11739,
  70. +           108219,
  71. +           -12089,
  72. +           243
  73. +       },
  74. +       {
  75. +           CLAN_STRONGHOLD_DEVICE,
  76. +           11535,
  77. +           119947,
  78. +           -12089,
  79. +           243
  80. +       },
  81. +       {
  82. +           CLAN_STRONGHOLD_DEVICE,
  83. +           89382,
  84. +           106388,
  85. +           -3208,
  86. +           243
  87. +       },
  88. +       {
  89. +           CLAN_STRONGHOLD_DEVICE,
  90. +           82701,
  91. +           109007,
  92. +           -3151,
  93. +           243
  94. +       },
  95. +       {
  96. +           CLAN_STRONGHOLD_DEVICE,
  97. +           91746,
  98. +           112823,
  99. +           -2919,
  100. +           243
  101. +       },
  102. +       {
  103. +           CLAN_STRONGHOLD_DEVICE,
  104. +           87909,
  105. +           120040,
  106. +           -3062,
  107. +           243
  108. +       },
  109. +       {
  110. +           CLAN_STRONGHOLD_DEVICE,
  111. +           52484,
  112. +           -79491,
  113. +           -3117,
  114. +           243
  115. +       },
  116. +       {
  117. +           CLAN_STRONGHOLD_DEVICE,
  118. +           20870,
  119. +           108369,
  120. +           -12089,
  121. +           243
  122. +       },
  123. +       {
  124. +           CLAN_STRONGHOLD_DEVICE,
  125. +           23773,
  126. +           108412,
  127. +           -12089,
  128. +           243
  129. +       },
  130. +       {
  131. +           CLAN_STRONGHOLD_DEVICE,
  132. +           113302,
  133. +           109838,
  134. +           -2974,
  135. +           243
  136. +       },
  137. +       {
  138. +           CLAN_STRONGHOLD_DEVICE,
  139. +           14557,
  140. +           117285,
  141. +           -12089,
  142. +           243
  143. +       },
  144. +       {
  145. +           CLAN_STRONGHOLD_DEVICE,
  146. +           101689,
  147. +           111892,
  148. +           -3672,
  149. +           243
  150. +       }
  151. +   };
  152. +  
  153. +   private static ClanStrongholdDeviceSpawner _instance;
  154. +  
  155. +   public static ClanStrongholdDeviceSpawner getInstance()
  156. +   {
  157. +       if (_instance == null)
  158. +       {
  159. +           _instance = new ClanStrongholdDeviceSpawner();
  160. +       }
  161. +       return _instance;
  162. +   }
  163. +  
  164. +   public void spawnNpcsOnServerStart()
  165. +   {
  166. +       for (int[] loc : _mobLoc)
  167. +       {
  168. +           spawnNpc(loc[0], loc[1], loc[2], loc[3], loc[4]);
  169. +       }
  170. +   }
  171. +  
  172. +   private static void spawnNpc(int npcId, int x, int y, int z, int heading)
  173. +   {
  174. +       try
  175. +       {
  176. +           final L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(npcId);
  177. +           L2Spawn spawn = new L2Spawn(tmpl);
  178. +           spawn.setLocx(x);
  179. +           spawn.setLocy(y);
  180. +           spawn.setLocz(z);
  181. +           spawn.setAmount(1);
  182. +           spawn.setRespawnDelay(1);
  183. +           SpawnTable.getInstance().addNewSpawn(spawn, false);
  184. +           spawn.init();
  185. +           L2NpcInstance npc = spawn.getLastSpawn();
  186. +           npc.setIsImobilised(true);
  187. +           npc.setIsInvul(true);
  188. +           npc.decayMe();
  189. +           npc.spawnMe(npc.getX(), npc.getY(), npc.getZ());
  190. +       }
  191. +       catch (Exception e)
  192. +       {
  193. +           e.printStackTrace();
  194. +       }
  195. +   }
  196. +}
  197. diff --git src/l2jwins/Config.java src/l2jwins/Config.java
  198. index cafe738..aaaf892 100644
  199. --- src/l2jwins/Config.java
  200. +++ src/l2jwins/Config.java
  201. @@ -252,6 +252,12 @@
  202.     public static int LIMITE_CARRO_MASTER;
  203.     public static boolean RANK_SYSTEM_ENABLE;
  204.    
  205. +   public static int CLAN_BUFF_ID;
  206. +  
  207. +   public static boolean CLAN_STRONGHOLD_SPAWN_ENABLED;
  208. +  
  209.     // ===================================================================================================================================//
  210.    
  211.     public static void loadExtraSettingsConfig()
  212. @@ -275,6 +281,10 @@
  213.            
  214.             AFK_TIMER = Integer.parseInt(ExtraSettings.getProperty("TimerAFK", "10"));
  215.            
  216. +           CLAN_BUFF_ID = Integer.parseInt(ExtraSettings.getProperty("ClanBuffId", "1388"));
  217. +          
  218.             ITEM_SPAWNID = Integer.parseInt(ExtraSettings.getProperty("ItemIdSpawn", "5072"));
  219.             NPC1_SPAWN_MAGIC_GEM = Integer.parseInt(ExtraSettings.getProperty("NpcIdSpawn1", "31228"));
  220.             NPC2_SPAWN_MAGIC_GEM = Integer.parseInt(ExtraSettings.getProperty("NpcIdSpawn2", "7077"));
  221. @@ -294,6 +304,8 @@
  222.            
  223.             RANK_SYSTEM_ENABLE = Boolean.parseBoolean(ExtraSettings.getProperty("RankSystemEnable", "true"));
  224.            
  225. +           CLAN_STRONGHOLD_SPAWN_ENABLED = Boolean.parseBoolean(ExtraSettings.getProperty("ClanStrongholdSpawnEnable", "true"));
  226. +          
  227.             ALLOW_CUSTOM_CANCEL = Boolean.parseBoolean(ExtraSettings.getProperty("AllowCustomCancelTask", "True"));
  228.             CUSTOM_CANCEL_SECONDS = Integer.parseInt(ExtraSettings.getProperty("CustomCancelSeconds", "10"));
  229.            
  230. diff --git src/l2jwins/game/GameServer.java src/l2jwins/game/GameServer.java
  231. index 57ce5d4..345a80d 100644
  232. --- src/l2jwins/game/GameServer.java
  233. +++ src/l2jwins/game/GameServer.java
  234. @@ -11,8 +11,9 @@
  235.  import java.util.Date;
  236.  import java.util.logging.LogManager;
  237.  
  238. +import Base.ClanStrongold.ClanStrongholdDeviceSpawner;
  239.  import Base.Instance.InstanceManager;
  240.  import Base.XML.XMLDocumentFactory;
  241.  import Base.custom.DailyRewardManager;
  242.  
  243. @@ -532,6 +534,17 @@
  244.             LOG.info("Rank System Desactivado");
  245.         }
  246.        
  247. +       if (Config.CLAN_STRONGHOLD_SPAWN_ENABLED)
  248. +       {
  249. +           Util.printSection("Clan Stronghold");
  250. +           ClanStrongholdDeviceSpawner.getInstance().spawnNpcsOnServerStart();
  251. +           LOG.info("Clan Stronghold Activado");
  252. +       }
  253. +       else
  254. +       {
  255. +           LOG.info("Clan Stronghold Desactivado");
  256. +       }
  257. +      
  258.         HistoriasTable.getInstance();
  259.        
  260.         Util.printSection("Handlers");
  261. diff --git src/l2jwins/game/model/L2Attackable.java src/l2jwins/game/model/L2Attackable.java
  262. index 591d05b..e306b59 100644
  263. --- src/l2jwins/game/model/L2Attackable.java
  264. +++ src/l2jwins/game/model/L2Attackable.java
  265. @@ -643,6 +643,9 @@
  266.                                     exp += calculateOverhitExp(exp);
  267.                                 }
  268.                                
  269. +                               exp = (long) ((exp * attacker.calcStat(Stats.XP_RATE, 100, null, null)) / 100);
  270. +                               sp = (int) ((sp * attacker.calcStat(Stats.SP_RATE, 100, null, null)) / 100);
  271. +                              
  272.                                 if (((L2PcInstance) attacker).getPremiumService() >= 1)
  273.                                 {
  274.                                     exp = (long) (exp * Config.PREMIUM_XPSP_RATE);
  275. @@ -1154,7 +1157,9 @@
  276.                 {
  277.                     dropChance *= Config.PREMIUM_SPOIL_RATE;
  278.                 }
  279. +              
  280.             }
  281. +           dropChance = (int) ((dropChance * lastAttacker.calcStat(Stats.SPOIL_RATE, 100, null, null)) / 100);
  282.         }
  283.         else
  284.         {
  285. @@ -1229,6 +1234,7 @@
  286.             // Prepare for next iteration if dropChance > L2DropData.MAX_CHANCE
  287.             dropChance -= L2DropData.MAX_CHANCE;
  288.         }
  289. +       itemCount = (int) ((itemCount * lastAttacker.calcStat(Stats.DROP_RATE, 100, null, null)) / 100);
  290.        
  291.         if (Config.L2JMOD_CHAMPION_ENABLE && isChampion())
  292.         {
  293. @@ -3038,6 +3044,34 @@
  294.         }
  295.     }
  296.    
  297.  
  298.     public void setSeeded()
  299.     {
  300.         if (_seedType != 0 && _seeder != null)
  301. diff --git src/l2jwins/game/model/L2Character.java src/l2jwins/game/model/L2Character.java
  302. index 9255274..76cc795 100644
  303. --- src/l2jwins/game/model/L2Character.java
  304. +++ src/l2jwins/game/model/L2Character.java
  305. @@ -60,6 +60,7 @@
  306.  import l2jwins.game.managers.TownManager;
  307.  import l2jwins.game.model.L2Skill.SkillTargetType;
  308.  import l2jwins.game.model.L2Skill.SkillType;
  309. +import l2jwins.game.model.actor.instance.L2ClanStrongholdInstance;
  310.  import l2jwins.game.model.actor.instance.L2ControlTowerInstance;
  311.  import l2jwins.game.model.actor.instance.L2DoorInstance;
  312.  import l2jwins.game.model.actor.instance.L2EffectPointInstance;
  313.  
  314. @@ -814,6 +823,7 @@
  315.                         ((L2Summon) this).getOwner().updatePvPStatus();
  316.                     }
  317.                 }
  318. +              
  319.             }
  320.            
  321.             if (Config.GET_PVP_FLAG)
  322. @@ -831,6 +841,21 @@
  323.                 }
  324.             }
  325.            
  326. +           if (Config.GET_PVP_FLAG)
  327. +           {
  328. +               if (target instanceof L2ClanStrongholdInstance)
  329. +               {
  330. +                   if (this instanceof L2PcInstance)
  331. +                   {
  332. +                       ((L2PcInstance) this).updatePvPStatus();
  333. +                   }
  334. +                   else if (this instanceof L2Summon)
  335. +                   {
  336. +                       ((L2Summon) this).getOwner().updatePvPStatus();
  337. +                   }
  338. +               }
  339. +           }
  340. +          
  341.             if (Config.GET_PVP_FLAG_FROM_CHAMP)
  342.             {
  343.                 if (target.isChampion())
  344.  
  345. @@ -8580,4 +8631,13 @@
  346.     {
  347.         return this._IsDungeon;
  348.     }
  349. +  
  350. +   /**
  351. +    * @return
  352. +    */
  353. +   public int getClanId()
  354. +   {
  355. +       // TODO Auto-generated method stub
  356. +       return 0;
  357. +   }
  358.  }
  359. \ No newline at end of file
  360. diff --git src/l2jwins/game/model/actor/instance/L2ClanStrongholdInstance.java src/l2jwins/game/model/actor/instance/L2ClanStrongholdInstance.java
  361. new file mode 100644
  362. index 0000000..63b4b1e
  363. --- /dev/null
  364. +++ src/l2jwins/game/model/actor/instance/L2ClanStrongholdInstance.java
  365. @@ -0,0 +1,343 @@
  366. +package l2jwins.game.model.actor.instance;
  367. +
  368. +import java.util.Map;
  369. +import java.util.concurrent.ConcurrentHashMap;
  370. +import java.util.concurrent.ScheduledFuture;
  371. +
  372. +import l2jwins.Config;
  373. +import l2jwins.game.ai.CtrlIntention;
  374. +import l2jwins.game.datatables.SkillTable;
  375. +import l2jwins.game.model.L2Character;
  376. +import l2jwins.game.model.L2Clan;
  377. +import l2jwins.game.model.L2Effect;
  378. +import l2jwins.game.model.L2Skill;
  379. +import l2jwins.game.model.L2World;
  380. +import l2jwins.game.model.spawn.L2Spawn;
  381. +import l2jwins.game.network.serverpackets.ActionFailed;
  382. +import l2jwins.game.network.serverpackets.CreatureSay;
  383. +import l2jwins.game.network.serverpackets.MagicSkillUser;
  384. +import l2jwins.game.network.serverpackets.MoveToPawn;
  385. +import l2jwins.game.network.serverpackets.MyTargetSelected;
  386. +import l2jwins.game.network.serverpackets.NpcHtmlMessage;
  387. +import l2jwins.game.network.serverpackets.NpcInfo;
  388. +import l2jwins.game.network.serverpackets.NpcSay;
  389. +import l2jwins.game.network.serverpackets.ValidateLocation;
  390. +import l2jwins.game.skills.SkillHolder;
  391. +import l2jwins.game.templates.L2NpcTemplate;
  392. +import l2jwins.game.thread.ThreadPoolManager;
  393. +
  394. +#Author Terius
  395. +public class L2ClanStrongholdInstance extends L2NpcInstance
  396. +{
  397. +   private static final Map<Integer, Integer> CURRENT_CLAN_ID = new ConcurrentHashMap<>(); // Clan id key - NPC object id value (can be taken from npc.getScriptValue)
  398. +   private static final Map<Integer, Long> LAST_ATTACK = new ConcurrentHashMap<>(); // NPC object id key - Time value
  399. +  
  400. +   private String clanName; // Variable para almacenar el nombre del clan del jugador que lo mató
  401. +   int clanId = 0;
  402. +   int crestId = 0;
  403. +   int messagemax = 0;
  404. +   private ScheduledFuture<?> _aiTask;
  405. +  
  406. +   public static L2Spawn _npcSpawn;
  407. +  
  408. +   public L2ClanStrongholdInstance(final int objectId, final L2NpcTemplate template)
  409. +   {
  410. +       super(objectId, template);
  411. +       if (_aiTask != null)
  412. +       {
  413. +           _aiTask.cancel(true);
  414. +       }
  415. +      
  416. +       _aiTask = ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new TeriusAI(this), 3000, 3000);
  417. +      
  418. +   }
  419. +  
  420. +   @Override
  421. +   public void onAction(L2PcInstance player)
  422. +   {
  423. +      
  424. +       if (this != player.getTarget())
  425. +       {
  426. +           player.setTarget(this);
  427. +           player.sendPacket(new MyTargetSelected(getObjectId(), 0));
  428. +           player.sendPacket(new ValidateLocation(this));
  429. +       }
  430. +       else
  431. +       {
  432. +           if (!canInteract(player))
  433. +           {
  434. +               player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
  435. +           }
  436. +           else
  437. +           {
  438. +               // Rotate the player to face the instance
  439. +               player.sendPacket(new MoveToPawn(player, this, L2NpcInstance.INTERACTION_DISTANCE));
  440. +              
  441. +               if (hasRandomAnimation())
  442. +               {
  443. +                   onRandomAnimation();
  444. +               }
  445. +              
  446. +               showMainWindow(player);
  447. +              
  448. +               // Send ActionFailed to the player in order to avoid he stucks
  449. +               player.sendPacket(ActionFailed.STATIC_PACKET);
  450. +           }
  451. +       }
  452. +   }
  453. +  
  454. +   public void showMainWindow(L2PcInstance player)
  455. +   {
  456. +      
  457. +       // Crear el HTML con la información de la historia
  458. +       NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  459. +       html.setFile("data/html/mods/ClanStronghold.htm");
  460. +       html.replace("%objectId%", String.valueOf(getObjectId()));
  461. +       html.replace("%npcname%", getName());
  462. +      
  463. +       player.sendPacket(html);
  464. +   }
  465. +  
  466. +   @Override
  467. +   public void onBypassFeedback(L2PcInstance player, String command)
  468. +   {
  469. +       if (command.startsWith("capturar"))
  470. +       {
  471. +           if (isAlikeDead())
  472. +           {
  473. +               super.onBypassFeedback(player, command);
  474. +               return;
  475. +           }
  476. +           // Obtén el nombre del clan del jugador que lo mató
  477. +           clanName = player.getClan() != null ? player.getClan().getName() : ""; // Esto asume que la clase Player tiene un método para obtener el Clan al que pertenece
  478. +          
  479. +           if ((player.getClanId() == clanId && player.getClan().getCrestId() == crestId))
  480. +           {
  481. +               player.sendMessage("¡Ya has capturado este NPC!");
  482. +               return;
  483. +           }
  484. +          
  485. +           if (clanId > 0 && crestId > 0)
  486. +           {
  487. +               player.sendMessage("Este Npc Le Pertenece a un clan ahora mismo " + "Si Quieres Capturarme Tendras que matarme");
  488. +               return;
  489. +           }
  490. +          
  491. +           L2Clan playerClan = player.getClan();
  492. +           if (playerClan == null)
  493. +           {
  494. +               player.sendMessage("Debes pertenecer a un clan para capturar este NPC.");
  495. +               return;
  496. +           }
  497. +          
  498. +           int playerClanId = playerClan.getClanId();
  499. +           CURRENT_CLAN_ID.put(player.getClanId(), getObjectId());
  500. +           setNpcValue(playerClanId);
  501. +           setTitle("Clan: " + clanName);
  502. +          
  503. +           clanId = playerClan.getClanId();
  504. +           crestId = playerClan.getCrestId();
  505. +           setCrestId(playerClan.getCrestId());
  506. +           setClanId(player.getClanId());
  507. +           playerClan.setHasCrest(true);
  508. +           broadcastTitleInfo();
  509. +           setIsInvul(false);
  510. +           player.sendMessage("¡Has capturado con exito este NPC!" + " Para Tu Clan " + clanName);
  511. +           return;
  512. +       }
  513. +      
  514. +       super.onBypassFeedback(player, command);
  515. +   }
  516. +  
  517. +   /**
  518. +    * Sends a chat to all _knowObjects.
  519. +    * @param chat message to say
  520. +    */
  521. +   public void broadcastChat(final String chat)
  522. +   {
  523. +       final Map<Integer, L2PcInstance> _knownPlayers = getKnownList().getKnownPlayers();
  524. +      
  525. +       if (_knownPlayers == null)
  526. +       {
  527. +           if (Config.DEVELOPER)
  528. +           {
  529. +               LOG.info("broadcastChat _players == null");
  530. +           }
  531. +           return;
  532. +       }
  533. +      
  534. +       // we send message to known players only!
  535. +       if (_knownPlayers.size() > 0 && messagemax <= 2)
  536. +       {
  537. +           CreatureSay cs = new CreatureSay(getObjectId(), 0, getName(), chat);
  538. +          
  539. +           // we interact and list players here
  540. +           for (final L2PcInstance players : _knownPlayers.values())
  541. +           {
  542. +              
  543. +               // finally send packet :D
  544. +               players.sendPacket(cs);
  545. +               messagemax++;
  546. +              
  547. +           }
  548. +       }
  549. +   }
  550. +  
  551. +   @Override
  552. +   public boolean doDie(L2Character killer)
  553. +   {
  554. +       super.doDie(killer);
  555. +       if (killer instanceof L2PcInstance)
  556. +       {
  557. +          
  558. +           L2PcInstance activeChar = ((L2PcInstance) killer);
  559. +          
  560. +           // Obtén el nombre del clan del jugador que lo mató
  561. +           clanName = activeChar.getClan() != null ? activeChar.getClan().getName() : ""; // Esto asume que la clase Player tiene un método para obtener el Clan al que pertenece
  562. +          
  563. +           L2Clan clan = ((L2PcInstance) killer).getClan();
  564. +           if (clan != null)
  565. +           {
  566. +               clanId = 0;
  567. +               crestId = 0;
  568. +               messagemax--;
  569. +              
  570. +           }
  571. +           else
  572. +           {
  573. +              
  574. +               clanId = 0;
  575. +               crestId = 0;
  576. +               messagemax--;
  577. +              
  578. +               ThreadPoolManager.getInstance().scheduleGeneral(() -> doSpawn(), 1000);
  579. +           }
  580. +          
  581. +       }
  582. +       return true;
  583. +   }
  584. +  
  585. +   public void setCrestId(int crestId)
  586. +   {
  587. +       this.crestId = crestId;
  588. +   }
  589. +  
  590. +   public void doSpawn()
  591. +   {
  592. +      
  593. +       spawnMe(getX(), getY(), getZ());
  594. +      
  595. +       onSpawn();
  596. +   }
  597. +  
  598. +   // Método para enviar la información de título del NPC a los jugadores cercanos
  599. +   @Override
  600. +   void broadcastTitleInfo()
  601. +   {
  602. +       for (L2PcInstance player : L2World.getInstance().getAllPlayers().values())
  603. +       {
  604. +           player.sendPacket(new NpcInfo(this, player));
  605. +       }
  606. +   }
  607. +  
  608. +   // Método para enviar la información de título del NPC a los jugadores cercanos
  609. +   void broadcastTitleInfoRadius()
  610. +   {
  611. +       for (L2PcInstance player : getKnownList().getKnownPlayersInRadius(1800))
  612. +       {
  613. +           player.sendPacket(new NpcInfo(this, player));
  614. +       }
  615. +   }
  616. +  
  617. +   private class TeriusAI implements Runnable
  618. +   {
  619. +       private final L2ClanStrongholdInstance _caster;
  620. +      
  621. +       protected TeriusAI(final L2ClanStrongholdInstance caster)
  622. +       {
  623. +           _caster = caster;
  624. +       }
  625. +      
  626. +       private final SkillHolder[] CLAN_BUFFS =
  627. +       {
  628. +           new SkillHolder(Config.CLAN_BUFF_ID, 1),
  629. +       };
  630. +      
  631. +       @Override
  632. +       public void run()
  633. +       {
  634. +           for (final L2PcInstance player : getKnownList().getKnownPlayers().values())
  635. +           {
  636. +              
  637. +               for (SkillHolder skills : CLAN_BUFFS)
  638. +               {
  639. +                   TeriusCast(player, skills.getSkill());
  640. +               }
  641. +              
  642. +           }
  643. +          
  644. +           for (L2PcInstance player : getKnownList().getKnownPlayersInRadius(900))
  645. +           {
  646. +               if (!isInsideRadius(player, 900, false, false) && messagemax >= 1)
  647. +               {
  648. +                   messagemax--;
  649. +                   messagemax = 0;
  650. +                   player.sendMessage("test");
  651. +               }
  652. +           }
  653. +          
  654. +           // for (L2PcInstance player : getKnownList().getKnownPlayersInRadius(900))
  655. +           // {
  656. +           // if (!isInsideRadius(player, 900, false, false) && clanId > 0 && crestId > 0)
  657. +           // {
  658. +           // broadcastTitleInfoRadius();
  659. +           // }
  660. +           // }
  661. +          
  662. +       }
  663. +      
  664. + //in case of using a buff with stats use this
  665. +       private boolean TeriusCastStats(final L2PcInstance player, L2Skill skill)
  666. +        {
  667. +            if (player.isDead() || !player.isVisible() || !isInsideRadius(player, 900, false, false))
  668. +            {
  669. +                return false;
  670. +            }
  671. +            
  672. +
  673. +           if (clanId > 0 && crestId > 0)
  674. +           {
  675. +               broadcastTitleInfoRadius();
  676. +           }
  677. +          
  678. +           L2Clan playerClan = player.getClan();
  679. +           if (playerClan != null && playerClan.getClanId() == clanId){
  680. +            if (player.getFirstEffect(skill) == null)
  681. +           {
  682. +                SkillTable.getInstance().getInfo(skill.getId(), skill.getLevel()).getEffects(player, player);
  683. +                skill.getEffects(_caster, player, false, false, false);
  684. +                broadcastPacket(new MagicSkillUser(_caster, player, skill.getId(), skill.getLevel(), 1000, 0));
  685. +                
  686. +                return true;
  687. +            }
  688. +            }
  689. +            return false;
  690. +        }
  691. +
  692. +
  693. +
  694. +
  695. +
  696. +       private boolean TeriusCast(final L2PcInstance player, L2Skill skill)
  697. +       {
  698. +           if (player.isDead() || !player.isVisible() || !isInsideRadius(player, 900, false, false))
  699. +           {
  700. +               return false;
  701. +           }
  702. +          
  703. +           if (clanId > 0 && crestId > 0)
  704. +           {
  705. +               broadcastTitleInfoRadius();
  706. +           }
  707. +          
  708. +           L2Clan playerClan = player.getClan();
  709. +           if (playerClan != null && playerClan.getClanId() == clanId)
  710. +           {
  711. +               L2Effect firstEffect = player.getFirstEffect(skill);
  712. +               if (firstEffect == null || firstEffect.getTime() < 180)
  713. +               {
  714. +                   // player.stopSkillEffects(skill.getId()); // Detiene el efecto del buff anterior si el tiempo restante es menor a 1 segundo
  715. +                  
  716. +                   SkillTable.getInstance().getInfo(skill.getId(), skill.getLevel()).getEffects(player, player);
  717. +                   skill.getEffects(_caster, player, false, false, false);
  718. +                   broadcastPacket(new MagicSkillUser(_caster, player, skill.getId(), skill.getLevel(), 1000, 0));
  719. +                   return true;
  720. +               }
  721. +           }
  722. +          
  723. +           return false;
  724. +       }
  725. +      
  726. +   }
  727. +  
  728. +}
  729. diff --git src/l2jwins/game/model/actor/stat/CharStat.java src/l2jwins/game/model/actor/stat/CharStat.java
  730. index fa97777..68bc1cb 100644
  731. --- src/l2jwins/game/model/actor/stat/CharStat.java
  732. +++ src/l2jwins/game/model/actor/stat/CharStat.java
  733. @@ -92,6 +92,10 @@
  734.                 case STAT_MEN:
  735.                 case STAT_STR:
  736.                 case STAT_WIT:
  737. +               case XP_RATE:
  738. +               case SP_RATE:
  739. +               case DROP_RATE:
  740. +               case SPOIL_RATE:
  741.                     env.value = 1.0;
  742.             }
  743.         }
  744. diff --git src/l2jwins/game/network/serverpackets/NpcInfo.java src/l2jwins/game/network/serverpackets/NpcInfo.java
  745. index 9af0b29..5c3caea 100644
  746. --- src/l2jwins/game/network/serverpackets/NpcInfo.java
  747. +++ src/l2jwins/game/network/serverpackets/NpcInfo.java
  748. @@ -24,6 +24,7 @@
  749.  import l2jwins.game.model.L2Character;
  750.  import l2jwins.game.model.L2Clan;
  751.  import l2jwins.game.model.L2Summon;
  752. +import l2jwins.game.model.actor.instance.L2ClanStrongholdInstance;
  753.  import l2jwins.game.model.actor.instance.L2MonsterInstance;
  754.  import l2jwins.game.model.actor.instance.L2NpcInstance;
  755.  import l2jwins.game.model.actor.instance.L2PetInstance;
  756. @@ -46,7 +47,6 @@
  757.     private int _collisionHeight, _collisionRadius;
  758.     private String _name = "";
  759.     private String _title = "";
  760. -  
  761.     private int _clanCrest;
  762.     private int _clanId;
  763.     private int _allyCrest;
  764. @@ -122,6 +122,32 @@
  765.         _y = _activeChar.getY();
  766.         _z = _activeChar.getZ();
  767.        
  768. +       if (_activeChar instanceof L2ClanStrongholdInstance)
  769. +       {
  770. +           final L2Clan clan = ClanTable.getInstance().getClan(cha.getClanId());
  771. +           if ((clan != null) && ((cha.getTemplate().getNpcId() == 34156 /* ID Npc Clan Stronghold Device */) || (!cha.isMonster())))
  772. +           {
  773. +               _clanCrest = clan.getCrestId();
  774. +               _clanId = clan.getClanId();
  775. +               _allyCrest = clan.getAllyCrestId();
  776. +               _allyId = clan.getAllyId();
  777. +              
  778. +           }
  779. +       }
  780. +      
  781.         if (Config.SHOW_NPC_CREST)
  782.         {
  783.             if (cha.isInsideZone(ZoneId.ZONE_PEACE) && cha.getCastle().getOwnerId() != 0)
  784. @@ -251,6 +277,7 @@
  785.             writeD(_clanCrest);
  786.             writeD(_allyId);
  787.             writeD(_allyCrest);
  788. +          
  789.         }
  790.         else
  791.         {
  792. diff --git src/l2jwins/game/skills/Stats.java src/l2jwins/game/skills/Stats.java
  793. index b5e2fe1..50aff3b 100644
  794. --- src/l2jwins/game/skills/Stats.java
  795. +++ src/l2jwins/game/skills/Stats.java
  796. @@ -218,6 +218,11 @@
  797.     HP_CONSUME_RATE("HpConsumeRate"),
  798.     MP_CONSUME("MpConsume"),
  799.     SOULSHOT_COUNT("soulShotCount"),
  800. +   // custom
  801. +   XP_RATE("xpGain"),
  802. +   SP_RATE("spGain"),
  803. +   DROP_RATE("dropRate"),
  804. +   SPOIL_RATE("spoilRate"),
  805.    
  806.     // Skill mastery
  807.     SKILL_MASTERY("skillMastery");
  808.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement