Advertisement
Guest User

Untitled

a guest
Dec 21st, 2010
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.23 KB | None | 0 0
  1. /*
  2.  * This program is free software: you can redistribute it and/or modify it under
  3.  * the terms of the GNU General Public License as published by the Free Software
  4.  * Foundation, either version 3 of the License, or (at your option) any later
  5.  * version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful, but WITHOUT
  8.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9.  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10.  * details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License along with
  13.  * this program. If not, see <http://www.gnu.org/licenses/>.
  14.  */
  15.  
  16. package custom.BossRespawn;
  17.  
  18. import java.sql.Connection;
  19. import java.sql.PreparedStatement;
  20. import java.sql.ResultSet;
  21. import java.text.SimpleDateFormat;
  22. import java.util.Date;
  23. import java.util.List;
  24. import java.util.logging.Level;
  25.  
  26. import javolution.text.TextBuilder;
  27.  
  28. import com.l2jserver.L2DatabaseFactory;
  29. import com.l2jserver.gameserver.ThreadPoolManager;
  30. import com.l2jserver.gameserver.instancemanager.GrandBossManager;
  31. import com.l2jserver.gameserver.model.actor.L2Npc;
  32. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  33. import com.l2jserver.gameserver.model.quest.Quest;
  34. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  35. import com.l2jserver.gameserver.templates.StatsSet;
  36. import com.l2jserver.util.L2FastList;
  37.  
  38. /**
  39.  *
  40.  * @author UnAfraid
  41.  *
  42.  */
  43. public class BossRespawn extends Quest
  44. {
  45.     private static final int NPC_ID = 93000;
  46.     private static final boolean GM_ONLY = true;
  47.     private static final boolean DEBUG = false;
  48.     private static List<Grandboss> GRAND_BOSSES = new L2FastList<Grandboss>();
  49.     private static List<Raidboss> RAID_BOSSES = new L2FastList<Raidboss>();
  50.     private static final long refreshTime = 5 * 60 * 1000;
  51.     private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
  52.    
  53.     public BossRespawn(int questid, String name, String descr)
  54.     {
  55.         super(questid, name, descr);
  56.         addFirstTalkId(NPC_ID);
  57.         addTalkId(NPC_ID);
  58.         addStartNpc(NPC_ID);
  59.        
  60.         ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new reloadBosses(), 1000, refreshTime);
  61.     }
  62.    
  63.     @Override
  64.     public String onFirstTalk(L2Npc npc, L2PcInstance player)
  65.     {
  66.         return "home.htm";
  67.     }
  68.    
  69.     @Override
  70.     public String onTalk(L2Npc npc, L2PcInstance player)
  71.     {  
  72.         return "main.htm";
  73.     }
  74.    
  75.     @Override
  76.     public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  77.     {
  78.         if (event.equalsIgnoreCase("grandbosses"))
  79.             sendGrandBosses(player);
  80.         else if (event.equalsIgnoreCase("raidbosses"))
  81.             return "raidbosses.htm";
  82.         else if (event.startsWith("raidboss_"))
  83.         {
  84.             try
  85.             {
  86.                 int level = Integer.parseInt(event.substring(9));
  87.                 sendRaidBosses(player, level);
  88.             }
  89.             catch (NumberFormatException nfe) {}
  90.         }
  91.        
  92.         return null;
  93.     }
  94.    
  95.     private void sendRaidBosses(L2PcInstance player, int bosslevel)
  96.     {
  97.         TextBuilder tb = new TextBuilder();
  98.         tb.append("<html><title>Grand Boss Info</title><body><br><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><table width=260>");
  99.        
  100.         for (Raidboss rb : RAID_BOSSES)
  101.         {
  102.             String name = rb.getName();
  103.             int level = rb.getLevel();
  104.             int min = bosslevel;
  105.             int max = min + 10;
  106.             if (level >= min && level <= max)
  107.             {
  108.                 long delay = rb.getRespawn();
  109.                 long currentTime = System.currentTimeMillis();
  110.                
  111.                 if (delay <= currentTime)
  112.                     tb.append("<tr><td><font color=\"00C3FF\">" + name + " (" + level + ")</color>:</td><td><font color=\"32C332\">Is Alive</color></td></tr>");
  113.                
  114.                 else
  115.                     tb.append("<tr><td><font color=\"00C3FF\">" + name + " (" + level + ")</color>:</td><td><font color=\"9CC300\">" + (player.isGM() && GM_ONLY ? sdf.format(new Date(delay)) : "Dead") + "</color></td></tr>");
  116.             }
  117.         }
  118.        
  119.         tb.append("</table><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br></center></body></html>");
  120.        
  121.         NpcHtmlMessage msg = new NpcHtmlMessage(NPC_ID);
  122.         msg.setHtml(tb.toString());
  123.         player.sendPacket(msg);
  124.     }
  125.    
  126.     private void sendGrandBosses(L2PcInstance player)
  127.     {
  128.         TextBuilder tb = new TextBuilder();
  129.         tb.append("<html><title>Grand Boss Info</title><body><br><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><table width=260>");
  130.        
  131.         for (Grandboss boss : GRAND_BOSSES)
  132.         {
  133.             String name = boss.getName();
  134.             StatsSet stats = GrandBossManager.getInstance().getStatsSet(boss.getId());
  135.             if (stats == null)
  136.             {
  137.                 player.sendMessage("Stats for GrandBoss " + boss.getId() + " not found!");
  138.                 continue;
  139.             }
  140.            
  141.             long delay = stats.getLong("respawn_time");
  142.             long currentTime = System.currentTimeMillis();
  143.            
  144.             if (delay <= currentTime)
  145.                 tb.append("<tr><td><font color=\"00C3FF\">" + name + "</color>:</td><td><font color=\"32C332\">Is Alive</color></td></tr>");
  146.            
  147.             else
  148.                 tb.append("<tr><td><font color=\"00C3FF\">" + name + "</color>:</td><td><font color=\"9CC300\">" + (player.isGM() && GM_ONLY ? sdf.format(new Date(delay)) : "Dead") + "</color></td></tr>");
  149.         }
  150.        
  151.         tb.append("</table><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br></center></body></html>");
  152.        
  153.         NpcHtmlMessage msg = new NpcHtmlMessage(NPC_ID);
  154.         msg.setHtml(tb.toString());
  155.         player.sendPacket(msg);
  156.     }
  157.    
  158.     private class reloadBosses implements Runnable
  159.     {
  160.         public void run()
  161.         {
  162.            
  163.             RAID_BOSSES.clear();
  164.             GRAND_BOSSES.clear();
  165.            
  166.             Connection con = null;
  167.            
  168.             try
  169.             {
  170.                 con = L2DatabaseFactory.getInstance().getConnection();
  171.                 PreparedStatement statement = con.prepareStatement("SELECT `n`.`name`, `g`.`boss_id` FROM `npc` as `n` CROSS JOIN `grandboss_data` AS `g` ON `n`.`id` = `g`.`boss_id` GROUP BY `n`.`name` ORDER BY `g`.`respawn_time` DESC");
  172.                
  173.                 ResultSet rset = statement.executeQuery();
  174.                 while (rset.next())
  175.                 {
  176.                     Grandboss boss = new Grandboss();
  177.                     boss.setGrandboss(rset.getInt("boss_id"), rset.getString("name"));
  178.                     GRAND_BOSSES.add(boss);                
  179.                 }
  180.                
  181.                 rset.close();
  182.                 statement.close();
  183.             }
  184.             catch (Exception e)
  185.             {
  186.                 _log.log(Level.WARNING, "Could not restore grand bosses: " + e.getMessage(), e);
  187.             }
  188.             finally
  189.             {
  190.                 L2DatabaseFactory.close(con);
  191.             }
  192.            
  193.             try
  194.             {
  195.                 con = L2DatabaseFactory.getInstance().getConnection();
  196.                 PreparedStatement statement = con.prepareStatement("SELECT `n`.`level`, `n`.`name`, `r`.`respawn_time` FROM `npc` as `n` CROSS JOIN `raidboss_spawnlist` AS `r` ON `n`.`id` = `r`.`boss_id` ORDER BY `n`.`level`");
  197.                
  198.                 ResultSet rset = statement.executeQuery();
  199.                
  200.                 while (rset.next())
  201.                 {
  202.                     Raidboss rb = new Raidboss();
  203.                     rb.setRaidboss(rset.getString("name"), rset.getInt("level") , rset.getLong("respawn_time"));
  204.                     RAID_BOSSES.add(rb);
  205.                 }
  206.                
  207.                 rset.close();
  208.                 statement.close();
  209.             }
  210.             catch (Exception e)
  211.             {
  212.                 _log.log(Level.WARNING, "Could not restore raid bosses: " + e.getMessage(), e);
  213.             }
  214.             finally
  215.             {
  216.                 L2DatabaseFactory.close(con);
  217.             }
  218.             if (DEBUG)
  219.             {
  220.                 _log.info("Boss Respawn last update: " + sdf.format(new Date(System.currentTimeMillis())));
  221.                 _log.info("Boss Respawn Loaded: " + GRAND_BOSSES.size() + " Grand Bosses");
  222.                 _log.info("Boss Respawn Loaded: " + RAID_BOSSES.size() + " Raid Bosses");
  223.                 _log.info("Boss Respawn next update: " + sdf.format(new Date(System.currentTimeMillis() + refreshTime)));
  224.             }
  225.         }
  226.     }
  227.    
  228.     private class Raidboss
  229.     {
  230.         private String bossName = null;
  231.         private long bossRespawn = 0;
  232.         private int bossLevel = 0;
  233.         private void setRaidboss(String name, int level, long respawn)
  234.         {
  235.             bossName = name;
  236.             bossLevel = level;
  237.             bossRespawn = respawn;
  238.         }
  239.        
  240.         private String getName()
  241.         {
  242.             return bossName;
  243.         }
  244.        
  245.         private int getLevel()
  246.         {
  247.             return bossLevel;
  248.         }
  249.        
  250.         private long getRespawn()
  251.         {
  252.             return bossRespawn;
  253.         }
  254.     }
  255.    
  256.     private class Grandboss
  257.     {
  258.         private int bossId = 0;
  259.         private String bossName = null;
  260.        
  261.         private void setGrandboss(int id, String name)
  262.         {
  263.             bossId = id;
  264.             bossName = name;
  265.         }
  266.        
  267.         private int getId()
  268.         {
  269.             return bossId;
  270.         }
  271.        
  272.         private String getName()
  273.         {
  274.             return bossName;
  275.         }
  276.     }
  277.    
  278.     public static void main(String[] args)
  279.     {
  280.         new BossRespawn(-1, "BossRespawn", "custom");
  281.     }
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement