Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.97 KB | None | 0 0
  1. package net.sf.l2j.gameserver.event.others;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.sql.Connection;
  6. import java.sql.PreparedStatement;
  7. import java.sql.ResultSet;
  8. import java.sql.SQLException;
  9. import java.util.logging.Logger;
  10.  
  11. import net.sf.l2j.commons.config.ExProperties;
  12.  
  13. import net.sf.l2j.L2DatabaseFactory;
  14. import net.sf.l2j.gameserver.idfactory.IdFactory;
  15. import net.sf.l2j.gameserver.model.World;
  16. import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  17. import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  18. import net.sf.l2j.gameserver.model.memo.PlayerMemo;
  19. import net.sf.l2j.gameserver.network.SystemMessageId;
  20. import net.sf.l2j.gameserver.network.serverpackets.ItemList;
  21. import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
  22. import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  23. import net.sf.l2j.gameserver.util.Broadcast;
  24. import net.sf.l2j.gameserver.util.Mysql;
  25. import net.sf.l2j.log.Log;
  26.  
  27. /**
  28. * @author Katara*
  29. */
  30. public class TopDailyLord implements EventTask
  31. {
  32. protected static final Logger _log = Logger.getLogger(TopDailyLord.class.getName());
  33. private static int winner_id;
  34. private static String winner_name;
  35. private static int winner_kills;
  36. // private TopPvpStartTask _task;
  37.  
  38. public static final String CONFIGS_FILE = "./config/events/others/topdailylord.properties";
  39. public static int TOP_DAILY_LORD_LIST_LENGTH;
  40.  
  41. public static boolean TOP_DAILY_LORD_ADD_REWARD;
  42. public static int TOP_DAILY_LORD_REWARD_ID;
  43. public static int TOP_DAILY_LORD_REWARD_AMOUNT;
  44. public static boolean TOP_DAILY_LORD_TAKE_REWARD_FROM_PREVIOUS;
  45. public static boolean TOP_DAILY_LORD_ADD_SKILL;
  46. public static int TOP_DAILY_LORD_SKILL_ID;
  47. public static int TOP_DAILY_LORD_SKILL_LEVEL;
  48. public static boolean TOP_DAILY_LORD_TAKE_SKILL_FROM_PREVIOUS;
  49. private String startEventTime;
  50.  
  51. public static void LoadConfig()
  52. {
  53. ExProperties configs = load(CONFIGS_FILE);
  54.  
  55. TOP_DAILY_LORD_LIST_LENGTH = configs.getProperty("TopDailyLordListLength", 10);
  56.  
  57. TOP_DAILY_LORD_ADD_REWARD = configs.getProperty("TopDailyLordAddReward", false);
  58. TOP_DAILY_LORD_REWARD_ID = configs.getProperty("TopDailyLordRewardId", 10);
  59. TOP_DAILY_LORD_REWARD_AMOUNT = configs.getProperty("TopDailyLordRewardAmount", 10);
  60. TOP_DAILY_LORD_TAKE_REWARD_FROM_PREVIOUS = configs.getProperty("TopDailyLordTakePreviousReward", false);
  61.  
  62. TOP_DAILY_LORD_ADD_SKILL = configs.getProperty("TopDailyLordAddSkill", false);
  63. TOP_DAILY_LORD_SKILL_ID = configs.getProperty("TopDailyLordSkillId", 10);
  64. TOP_DAILY_LORD_SKILL_LEVEL = configs.getProperty("TopDailyLordSkillLevel", 10);
  65. TOP_DAILY_LORD_TAKE_SKILL_FROM_PREVIOUS = configs.getProperty("TopDailyLordTakePreviousSkill", false);
  66. }
  67.  
  68. public static ExProperties load(String filename)
  69. {
  70. return load(new File(filename));
  71. }
  72.  
  73. public static ExProperties load(File file)
  74. {
  75. ExProperties result = new ExProperties();
  76. try
  77. {
  78. result.load(file);
  79. }
  80. catch (IOException e)
  81. {
  82. _log.warning("Error loading config : " + file.getName() + "!");
  83. }
  84.  
  85. return result;
  86. }
  87.  
  88. public void setEventStartTime(String newTime)
  89. {
  90. startEventTime = newTime;
  91. }
  92.  
  93. public static TopDailyLord getNewInstance()
  94. {
  95. return new TopDailyLord();
  96. }
  97.  
  98. public static String get_eventName()
  99. {
  100. return "TopDailyPLord";
  101. }
  102.  
  103. private TopDailyLord()
  104. {
  105. // scheduleEventStart();
  106. }
  107.  
  108. @Override
  109. public void run()
  110. {
  111. waiter(10 * 60 * 1000); // Minutes start counting
  112.  
  113. boolean rewarded = false;
  114.  
  115. String list = "";
  116.  
  117. Connection con = null;
  118. PreparedStatement statement = null;
  119. ResultSet rset = null;
  120.  
  121. try
  122. {
  123. con = L2DatabaseFactory.getInstance().getConnection();
  124.  
  125. statement = con.prepareStatement("SELECT obj_Id,char_name,pvpkills,dailykills FROM characters WHERE dailykills>0 AND accesslevel=0 order by dailykills desc, pvpkills desc limit " + Integer.toString(TOP_DAILY_LORD_LIST_LENGTH));
  126. rset = statement.executeQuery();
  127.  
  128. if (rset.next())
  129. {
  130. int count = 1;
  131.  
  132. winner_id = rset.getInt("obj_Id");
  133. winner_name = rset.getString("char_name");
  134. winner_kills = rset.getInt("dailykills");
  135. String color_text = "<font color =\"LEVEL\">";
  136.  
  137. list = list + "<tr><td><center>" + color_text + count + "</font></center></td><td><center>" + color_text + winner_name + "</font></center></td><td><center>" + color_text + winner_kills + "</font></center></td><td><center>" + color_text + rset.getInt("pvpkills") + "</font></center></td></tr>";
  138. list = list + "<tr><td></td><td></td><td></td></tr>";
  139. while (rset.next())
  140. {
  141. count++;
  142. color_text = "<font color =\"FFFFFF\">";
  143. list = list + "<tr><td><center>" + color_text + count + "</font></center></td><td><center>" + color_text + rset.getString("char_name") + "</font></center></td><td><center>" + color_text + rset.getInt("dailykills") + "</font></center></td><td><center>" + color_text + rset.getInt("pvpkills") + "</font></center></td></tr>";
  144. }
  145. }
  146. else
  147. list = "<tr><td><center>-</center></td><td><center>-</center></td><td><center>-</center></td></tr>";
  148.  
  149. // FIXME: It's noob way :D
  150. if (TOP_DAILY_LORD_ADD_REWARD && TOP_DAILY_LORD_TAKE_REWARD_FROM_PREVIOUS)
  151. {
  152. for (L2PcInstance onlinePlayer : World.getInstance().getPlayers())
  153. {
  154. if (onlinePlayer.getInventory().getInventoryItemCount(TOP_DAILY_LORD_REWARD_ID, 0) >= TOP_DAILY_LORD_REWARD_AMOUNT)
  155. {
  156. onlinePlayer.getInventory().destroyItemByItemId("Lord PvP", TOP_DAILY_LORD_REWARD_ID, TOP_DAILY_LORD_REWARD_AMOUNT, onlinePlayer, null);
  157. onlinePlayer.sendPacket(new ItemList(onlinePlayer, false));
  158. }
  159. }
  160.  
  161. statement = con.prepareStatement("DELETE FROM items WHERE item_id=?");
  162. statement.setInt(1, TOP_DAILY_LORD_REWARD_ID);
  163. statement.execute();
  164. }
  165.  
  166. if (TOP_DAILY_LORD_ADD_SKILL)
  167. {
  168. for (L2PcInstance onlinePlayer : World.getInstance().getPlayers())
  169. onlinePlayer.removeSkill(TOP_DAILY_LORD_SKILL_ID);
  170. }
  171.  
  172. for (L2PcInstance onlinePlayer : World.getInstance().getPlayers())
  173. {
  174. if (onlinePlayer.isOnline() == true)
  175. {
  176. onlinePlayer.setDailyKills(0);
  177. if (onlinePlayer.getObjectId() == winner_id)
  178. {
  179. if (TOP_DAILY_LORD_ADD_REWARD)
  180. {
  181. onlinePlayer.addItem("TopPvP Reward", TOP_DAILY_LORD_REWARD_ID, TOP_DAILY_LORD_REWARD_AMOUNT, onlinePlayer, false);
  182. onlinePlayer.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S).addItemName(TOP_DAILY_LORD_REWARD_ID).addNumber(TOP_DAILY_LORD_REWARD_AMOUNT));
  183. }
  184.  
  185. long expire = ((long) 60 * 1000 * 59 * 29);
  186. PlayerMemo.setVar(onlinePlayer, "topdailylord", "true", System.currentTimeMillis() + expire);
  187.  
  188. if (TOP_DAILY_LORD_ADD_SKILL)
  189. onlinePlayer.rewardSkills();
  190.  
  191. rewarded = true;
  192. }
  193. NpcHtmlMessage notice = new NpcHtmlMessage(1);
  194. notice.setFile("data/html/java/event/TopPvp.htm");
  195. notice.replace("%name%", onlinePlayer.getName());
  196. notice.replace("%n%", Integer.toString(TOP_DAILY_LORD_LIST_LENGTH));
  197. notice.replace("%list%", list);
  198. onlinePlayer.sendPacket(notice);
  199. }
  200. }
  201.  
  202. if (rewarded == false)
  203. {
  204. int count = 0;
  205.  
  206. statement = con.prepareStatement("SELECT owner_id, item_id, count FROM items WHERE owner_id = '" + winner_id + "' AND item_id='" + TOP_DAILY_LORD_REWARD_ID + "'");
  207. rset = statement.executeQuery();
  208. while (rset.next())
  209. {
  210. count = rset.getInt("count");
  211. }
  212.  
  213. ItemInstance item = new ItemInstance(IdFactory.getInstance().getNextId(), TOP_DAILY_LORD_REWARD_ID);
  214. try
  215. {
  216. statement = con.prepareStatement("INSERT INTO items VALUES (?, ?, " + TOP_DAILY_LORD_REWARD_ID + ", " + (count + TOP_DAILY_LORD_REWARD_AMOUNT) + ", 0, 'INVENTORY', 0, 0, 0, 0, -1, 0)");
  217. statement.setInt(1, winner_id);
  218. statement.setInt(2, item.getObjectId());
  219. statement.execute();
  220. }
  221. catch (SQLException e)
  222. {
  223. e.printStackTrace();
  224. }
  225. finally
  226. {
  227. Mysql.closeQuietly(statement);
  228. }
  229. }
  230. statement = con.prepareStatement("UPDATE characters SET dailykills = 0");
  231. statement.execute();
  232. }
  233. catch (Exception e)
  234. {
  235. e.printStackTrace();
  236. }
  237. finally
  238. {
  239. Mysql.closeQuietly(con, statement, rset);
  240. }
  241.  
  242. String topPvP_text = "Top PvP Event: Rewards done successfully";
  243. Log.add(topPvP_text, "events");
  244. }
  245.  
  246. @Override
  247. public String getEventIdentifier()
  248. {
  249. return "TopDailyLord";
  250. }
  251.  
  252. @Override
  253. public String getEventStartTime()
  254. {
  255. return startEventTime;
  256. }
  257.  
  258. private static void waiter(long interval)
  259. {
  260. long startWaiterTime = System.currentTimeMillis();
  261. int seconds = (int) (interval / 1000);
  262. seconds++; // Because we lose 1 second on the while
  263. while (startWaiterTime + interval > System.currentTimeMillis())
  264. {
  265. seconds--; // Here because we don't want to see two time announce at the same time
  266. switch (seconds)
  267. {
  268. case 600: // 10 minutes left
  269. case 300: // 5 minutes left
  270. case 240: // 4 minutes left
  271. case 180: // 3 minutes left
  272. case 120: // 2 minutes left
  273. case 60: // 1 minute left
  274. Broadcast.announceToOnlinePlayers(seconds / 60 + " minute(s) till Daily Lord come out!", false);
  275. break;
  276.  
  277. case 30: // 30 seconds left
  278. case 10: // 10 seconds left
  279. Broadcast.announceToOnlinePlayers(seconds + " second(s) till Daily Lord come out!", false);
  280. break;
  281.  
  282. /*
  283. * case 5: // 3 seconds left case 4: // 3 seconds left
  284. */
  285. case 3: // 3 seconds left
  286. case 2: // 2 seconds left
  287. case 1: // 1 seconds left
  288.  
  289. Broadcast.announceToOnlinePlayers(seconds + " second(s) till Daily Lord COME OUT!!!", false);
  290. break;
  291. }
  292.  
  293. long startOneSecondWaiterStartTime = System.currentTimeMillis();
  294. while (startOneSecondWaiterStartTime + 1000 > System.currentTimeMillis())
  295. {
  296. try
  297. {
  298. Thread.sleep(1);
  299. }
  300. catch (InterruptedException ie)
  301. {
  302. ie.printStackTrace();
  303. }
  304. }
  305. }
  306. }
  307. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement