Guest User

Untitled

a guest
May 9th, 2020
834
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 60.29 KB | None | 0 0
  1. diff --git a/java/org/l2jmobius/Config.java b/java/org/l2jmobius/Config.java
  2. index d7a5940..18ad358 100644
  3. --- a/java/org/l2jmobius/Config.java
  4. +++ b/java/org/l2jmobius/Config.java
  5. @@ -147,6 +147,8 @@
  6. public static final String VOTE_FILE = "./config/Custom/VoteSystem.ini";
  7. private static final String BATTLE_ZONE_FILE = "./config/Custom/BattlePvP.ini";
  8. public static final String DM_FILE = "./config/Events/DeathMatch.ini";
  9. + private static final String VOTE_SYSTEM_FILE = "./config/Custom/votesystemm.ini";
  10. +
  11.  
  12. // --------------------------------------------------
  13. // Invoke Settings
  14. @@ -201,6 +203,47 @@
  15. public static String DONATION_FAIL_MESSAGE;
  16. public static String DONATION_ERROR_MESSAGE;
  17.  
  18. + //---------------------------------------------------
  19. + // VOTE SYSTEM
  20. + //---------------------------------------------------
  21. + public static boolean ENABLE_VOTE_SYSTEM;
  22. + public static boolean ENABLE_INDIVIDUAL_VOTE;
  23. + public static boolean ENABLE_GLOBAL_VOTE;
  24. + public static int NEXT_TIME_TO_AUTO_UPDATE_TOTAL_VOTE;
  25. + public static int NEXT_TIME_TO_AUTO_UPDATE_INDIVIDUAL_VOTES;
  26. + public static int NEXT_TIME_TO_AUTO_CLEAN_INECESARY_VOTES;
  27. + public static int NEXT_TIME_TO_CHECK_AUTO_GLOBAL_VOTES_REWARD;
  28. + public static int INTERVAL_TO_NEXT_VOTE;
  29. + public static int GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD;
  30. + public static boolean ENABLE_VOTING_COMMAND;
  31. + public static String VOTING_COMMAND;
  32. + public static String VOTE_LINK_TGS;
  33. + public static String TGS_API_KEY;
  34. + public static String VOTE_LINK_TOP_CO;
  35. + public static String TOP_CO_SRV_ID;
  36. + public static String VOTE_LINK_ITOPZ;
  37. + public static String ITOPZ_API_KEY;
  38. + public static String ITOPZ_SRV_ID;
  39. + public static String VOTE_LINK_VTS;
  40. + public static String VTS_API_KEY;
  41. + public static String VTS_SID;
  42. + public static String VOTE_LINK_HZ;
  43. + public static String HZ_API_KEY;
  44. + public static String VOTE_NETWORK_LINK;
  45. + public static String VOTE_NETWORK_USER_NAME;
  46. + public static String VOTE_NETWORK_API_KEY;
  47. + public static String VOTE_LINK_TSS;
  48. + public static String TSS_API_TOKEN;
  49. + public static String BRASIL_VOTE_LINK;
  50. + public static String BRASIL_USER_NAME;
  51. + public static String VOTE_LINK_MMOTOP;
  52. + public static String MMOTOP_API_KEY;
  53. + public static String VOTE_LINK_TZ;
  54. + public static String TZ_API_KEY;
  55. + public static String VOTE_LINK_SERVERS;
  56. + public static String SERVERS_HASH_CODE;
  57. + public static String SERVERS_SRV_ID;
  58. +
  59. /** DM Event */
  60. public static boolean DM_EVENT_ENABLED;
  61. public static boolean DM_EVENT_IN_INSTANCE;
  62. @@ -3225,6 +3268,51 @@
  63. }
  64. }
  65.  
  66. +
  67. + final PropertiesParser votesystem = new PropertiesParser(Config.VOTE_SYSTEM_FILE);
  68. +
  69. + ENABLE_VOTE_SYSTEM = votesystem.getBoolean("EnableVoteSystem", true);
  70. + ENABLE_INDIVIDUAL_VOTE = votesystem.getBoolean("EnableIndividualVote", true);
  71. + ENABLE_GLOBAL_VOTE = votesystem.getBoolean("EnableGlobalVote", true);
  72. + NEXT_TIME_TO_AUTO_UPDATE_TOTAL_VOTE = votesystem.getInt("NextTimeToAutoUpdateTotalVote", 60)*60*1000; // -> minutes
  73. + NEXT_TIME_TO_AUTO_UPDATE_INDIVIDUAL_VOTES = votesystem.getInt("NextTimeToAutoUpdateIndividualVotes", 60)*60*1000; // -> minutes
  74. + NEXT_TIME_TO_AUTO_CLEAN_INECESARY_VOTES = votesystem.getInt("NextTimeToAutoCleanInnecesaryVotes", 30)*60*1000; // -> minutes
  75. + NEXT_TIME_TO_CHECK_AUTO_GLOBAL_VOTES_REWARD = votesystem.getInt("NextTimeToCheckAutoGlobalVotesReward", 5)*60*1000; // -> minutes
  76. + INTERVAL_TO_NEXT_VOTE = votesystem.getInt("IntervalTimeToNextVote", 12)*3600*1000; // -> hours
  77. + GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD = votesystem.getInt("GlobalVotesAmountToNextReward",50);
  78. + //VOTE_REWARD_ITEM = votesystem.getProperty();
  79. + ENABLE_VOTING_COMMAND = votesystem.getBoolean("EnableVotingCommand",true);
  80. + VOTING_COMMAND = votesystem.getString("VotingCommand","getreward");
  81. + VOTE_LINK_TGS = votesystem.getString("VoteLinkTgs","");
  82. + TGS_API_KEY = votesystem.getString("TgsApiKey","");
  83. + VOTE_LINK_TOP_CO = votesystem.getString("VoteLinkTopCo","");
  84. + TOP_CO_SRV_ID = votesystem.getString("TopCoSrvId","");
  85. + VOTE_LINK_ITOPZ = votesystem.getString("VoteLinkItopz","");
  86. + ITOPZ_API_KEY = votesystem.getString("ItopzZpiKey","");
  87. + ITOPZ_SRV_ID = votesystem.getString("ItopzSrvId","");
  88. + VOTE_LINK_VTS = votesystem.getString("VoteLinkVts","");
  89. + VTS_API_KEY = votesystem.getString("VtsApiKey","");
  90. + VTS_SID = votesystem.getString("VtsSid","");
  91. + VOTE_LINK_HZ = votesystem.getString("VoteLinkHz","");
  92. + HZ_API_KEY = votesystem.getString("HzApiKey","");
  93. + VOTE_NETWORK_LINK = votesystem.getString("VoteNetworkLink","");
  94. + VOTE_NETWORK_USER_NAME = votesystem.getString("VoteNetworkUserName","");
  95. + VOTE_NETWORK_API_KEY = votesystem.getString("VoteNetworkApiKey","");
  96. + VOTE_LINK_TSS = votesystem.getString("VoteLinkTss","");
  97. + TSS_API_TOKEN = votesystem.getString("TssApiToken","");
  98. + //VOTE_LINK_TON = votesystem.getString("VoteLinkTon","");
  99. + //TON_SRV_ID = votesystem.getString("TonSrvId","");
  100. + BRASIL_VOTE_LINK = votesystem.getString("BrasilVoteLink","");
  101. + BRASIL_USER_NAME = votesystem.getString("BrasilUserName","");
  102. + VOTE_LINK_MMOTOP = votesystem.getString("VoteLinkMmotop","");
  103. + MMOTOP_API_KEY = votesystem.getString("MmotopApiKey","");
  104. + VOTE_LINK_TZ = votesystem.getString("VoteLinkTz","");
  105. + TZ_API_KEY = votesystem.getString("TzApiKey","");
  106. + VOTE_LINK_SERVERS = votesystem.getString("VoteLinkServers","");
  107. + SERVERS_HASH_CODE = votesystem.getString("ServersHashCode","");
  108. + SERVERS_SRV_ID = votesystem.getString("ServersSrvId","");
  109. +
  110. +
  111. // Load PrivateStoreRange config file (if exists)
  112. final PropertiesParser PrivateStoreRange = new PropertiesParser(CUSTOM_PRIVATE_STORE_RANGE_CONFIG_FILE);
  113.  
  114. diff --git a/java/org/l2jmobius/gameserver/GameServer.java b/java/org/l2jmobius/gameserver/GameServer.java
  115. index 8e8dcfa..17af7d9 100644
  116. --- a/java/org/l2jmobius/gameserver/GameServer.java
  117. +++ b/java/org/l2jmobius/gameserver/GameServer.java
  118. @@ -154,6 +154,8 @@
  119. import org.l2jmobius.gameserver.taskmanager.TaskManager;
  120. import org.l2jmobius.gameserver.ui.Gui;
  121. import org.l2jmobius.gameserver.util.Broadcast;
  122. +import org.l2jmobius.gameserver.votesystem.VoteManager;
  123. +import org.l2jmobius.gameserver.votesystem.VoteSiteXml;
  124.  
  125. public class GameServer
  126. {
  127. @@ -282,6 +284,13 @@
  128. PremiumManager.getInstance();
  129. }
  130.  
  131. + if(Config.ENABLE_VOTE_SYSTEM)
  132. + {
  133. + VoteManager.getInatance();
  134. + LOGGER.info("======================Vote System Enabled=========================");
  135. + VoteSiteXml.getInstance();
  136. + }
  137. +
  138. printSection("Clans");
  139. ClanTable.getInstance();
  140. CHSiegeManager.getInstance();
  141. diff --git a/java/org/l2jmobius/gameserver/Shutdown.java b/java/org/l2jmobius/gameserver/Shutdown.java
  142. index a095ef1..dab3a54 100644
  143. --- a/java/org/l2jmobius/gameserver/Shutdown.java
  144. +++ b/java/org/l2jmobius/gameserver/Shutdown.java
  145. @@ -49,6 +49,7 @@
  146. import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
  147. import org.l2jmobius.gameserver.network.telnet.TelnetServer;
  148. import org.l2jmobius.gameserver.util.Broadcast;
  149. +import org.l2jmobius.gameserver.votesystem.VoteManager;
  150.  
  151. /**
  152. * This class provides the functions for shutting down and restarting the server.<br>
  153. @@ -502,6 +503,10 @@
  154. LOGGER.info("Items On Ground Manager: Cleaned up(" + tc.getEstimatedTimeAndRestartCounter() + "ms).");
  155. }
  156.  
  157. + // Save global and individual votes
  158. + VoteManager.getInatance().Shutdown();
  159. + LOGGER.info("Vote data has been saved");
  160. +
  161. // Save bot reports to database
  162. if (Config.BOTREPORT_ENABLE)
  163. {
  164.  
  165. diff --git a/java/org/l2jmobius/gameserver/votesystem/GlobalVote.java b/java/org/l2jmobius/gameserver/votesystem/GlobalVote.java
  166. new file mode 100644
  167. index 0000000..83334b3
  168. --- /dev/null
  169. +++ b/java/org/l2jmobius/gameserver/votesystem/GlobalVote.java
  170. @@ -0,0 +1,41 @@
  171. +package org.l2jmobius.gameserver.votesystem;
  172. +
  173. +public class GlobalVote
  174. +{
  175. + private int _voteSite;
  176. + private int _votesLastReward;
  177. + private int _currentVotes;
  178. + public GlobalVote() {
  179. +
  180. + }
  181. +
  182. + public GlobalVote(int voteSite, int votesLastReward) {
  183. + _voteSite = voteSite;
  184. + _votesLastReward = votesLastReward;
  185. + }
  186. +
  187. + public void setVoteSite(int voteSite) {
  188. + _voteSite = voteSite;
  189. + }
  190. +
  191. + public void setVotesLastReward(int votesLastReward) {
  192. + _votesLastReward = votesLastReward;
  193. + }
  194. +
  195. + public void setCurrentVotes(int currentVotes) {
  196. + _currentVotes = currentVotes;
  197. + }
  198. +
  199. + public int getVoyeSite() {
  200. + return _voteSite;
  201. + }
  202. +
  203. + public int getVotesLastReward() {
  204. + return _votesLastReward;
  205. + }
  206. +
  207. + public int getCurrentVotes() {
  208. + return _currentVotes;
  209. + }
  210. +
  211. +}
  212. \ No newline at end of file
  213. diff --git a/java/org/l2jmobius/gameserver/votesystem/GlobalVotesDatabase.java b/java/org/l2jmobius/gameserver/votesystem/GlobalVotesDatabase.java
  214. new file mode 100644
  215. index 0000000..f123d26
  216. --- /dev/null
  217. +++ b/java/org/l2jmobius/gameserver/votesystem/GlobalVotesDatabase.java
  218. @@ -0,0 +1,95 @@
  219. +package org.l2jmobius.gameserver.votesystem;
  220. +
  221. +import java.sql.Connection;
  222. +import java.sql.PreparedStatement;
  223. +import java.sql.ResultSet;
  224. +import java.sql.SQLException;
  225. +import java.util.logging.Logger;
  226. +
  227. +import org.l2jmobius.commons.database.DatabaseFactory;
  228. +
  229. +
  230. +public class GlobalVotesDatabase
  231. +{
  232. + public static final Logger LOGGER = Logger.getLogger(GlobalVotesDatabase.class.getName());
  233. + private Connection con;
  234. + private GlobalVote[] _globalVotes;
  235. + private GlobalVotesDatabase() {
  236. + _globalVotes = new GlobalVote[VoteSitesEnum.values().length];
  237. + loadGlobalVotes();
  238. + }
  239. +
  240. + public void loadGlobalVotes() {
  241. + con = DatabaseFactory.getConnection();
  242. + try(PreparedStatement ps = con.prepareStatement("Select voteSite,lastRewardVotes from globalVotes");
  243. + ResultSet rs = ps.executeQuery();){
  244. + if(rs.getRow() == 0){
  245. + for(VoteSitesEnum vs : VoteSitesEnum.values()){
  246. + GlobalVote gv = new GlobalVote();
  247. + gv.setVoteSite(vs.ordinal());
  248. + gv.setVotesLastReward(0);
  249. + _globalVotes[gv.getVoyeSite()] = gv;
  250. + }
  251. + return;
  252. + }
  253. + while(rs.next()) {
  254. + GlobalVote gv = new GlobalVote();
  255. + gv.setVoteSite(rs.getInt("voteSite"));
  256. + gv.setVotesLastReward(rs.getInt("lastRewardVotes"));
  257. + _globalVotes[gv.getVoyeSite()] = gv;
  258. + }
  259. + ps.close();
  260. + con.close();
  261. +
  262. + }catch(SQLException e) {
  263. + e.printStackTrace();
  264. + }
  265. + }
  266. + public void saveGlobalVote(GlobalVote gb) {
  267. + try(Connection con = DatabaseFactory.getConnection();
  268. + PreparedStatement ps = con.prepareStatement("INSERT INTO globalVotes(voteSite,lastRewardVotes) VALUES(?,?)"
  269. + + "ON DUPLICATE KEY UPDATE voteSite = VALUES(voteSite), lastRewardVotes = VALUES(lastRewardVotes)"))
  270. +
  271. + {
  272. + ps.setInt(1, gb.getVoyeSite());
  273. + ps.setInt(2, gb.getVotesLastReward());
  274. + ps.executeUpdate();
  275. + ps.close();
  276. + con.close();
  277. +
  278. + }catch(SQLException e) {
  279. + e.printStackTrace();
  280. + }
  281. + }
  282. +
  283. + public void saveGlobalVotes(GlobalVote[] globalVotes) {
  284. + try(Connection con = DatabaseFactory.getConnection();PreparedStatement ps = con.prepareStatement("INSERT INTO globalVotes(voteSite,lastRewardVotes) VALUES(?,?)"
  285. + + "ON DUPLICATE KEY UPDATE voteSite = VALUES(voteSite), lastRewardVotes = VALUES(lastRewardVotes)"))
  286. +
  287. + {
  288. + for(VoteSitesEnum vs : VoteSitesEnum.values()) {
  289. + GlobalVote gb = globalVotes[vs.ordinal()];
  290. + ps.setInt(1, gb.getVoyeSite());
  291. + ps.setInt(2, gb.getVotesLastReward());
  292. + ps.addBatch();
  293. + }
  294. + ps.executeBatch();
  295. +
  296. + ps.close();
  297. + con.close();
  298. +
  299. + }catch(SQLException e) {
  300. + e.printStackTrace();
  301. + }
  302. + }
  303. +
  304. + public GlobalVote[] getGlobalVotes() {
  305. + return _globalVotes;
  306. + }
  307. + public static final GlobalVotesDatabase getInstance() {
  308. + return SingleHolder.INSTANCE;
  309. + }
  310. + private static final class SingleHolder {
  311. + protected static final GlobalVotesDatabase INSTANCE = new GlobalVotesDatabase();
  312. + }
  313. +}
  314. \ No newline at end of file
  315. diff --git a/java/org/l2jmobius/gameserver/votesystem/IndividualVote.java b/java/org/l2jmobius/gameserver/votesystem/IndividualVote.java
  316. new file mode 100644
  317. index 0000000..032d214
  318. --- /dev/null
  319. +++ b/java/org/l2jmobius/gameserver/votesystem/IndividualVote.java
  320. @@ -0,0 +1,64 @@
  321. +package org.l2jmobius.gameserver.votesystem;
  322. +
  323. +public class IndividualVote
  324. +{
  325. + private String _voterIp;
  326. + private long _serverVotingTime;
  327. + private long _votingTimeSite;
  328. + private int _voteSite;
  329. + private boolean _alreadyRewarded;
  330. +
  331. +
  332. + public IndividualVote(String voterIp, long serverVotingTime, long votingTimeSite, int voteSite, boolean alreadyRewarded){
  333. + _voterIp = voterIp;
  334. + _serverVotingTime = serverVotingTime;
  335. + _votingTimeSite = votingTimeSite;
  336. + _voteSite = voteSite;
  337. + _alreadyRewarded = alreadyRewarded;
  338. + }
  339. +
  340. + public IndividualVote(){
  341. +
  342. + }
  343. +
  344. + public void setVoterIp(String voterIp) {
  345. + _voterIp = voterIp;
  346. + }
  347. +
  348. + public void setServerVotingTime(long serverVotingTime) {
  349. + _serverVotingTime = serverVotingTime;
  350. + }
  351. +
  352. + public void setVotingTimeSite(long votingTimeSite) {
  353. + _votingTimeSite = votingTimeSite;
  354. + }
  355. +
  356. + public void setVoteSite(int voteSite) {
  357. + _voteSite = voteSite;
  358. + }
  359. +
  360. + public void setAlreadyRewarded(boolean alreadyRewarded) {
  361. + _alreadyRewarded = alreadyRewarded;
  362. + }
  363. +
  364. + public String getVoterIp() {
  365. + return _voterIp;
  366. + }
  367. +
  368. + public long getServerVotingTime() {
  369. + return _serverVotingTime;
  370. + }
  371. +
  372. + public long getVotingTimeSite() {
  373. + return _votingTimeSite;
  374. + }
  375. +
  376. + public int getVoteSite() {
  377. + return _voteSite;
  378. + }
  379. +
  380. + public boolean getAlreadyRewarded() {
  381. + return _alreadyRewarded;
  382. + }
  383. +
  384. +}
  385. \ No newline at end of file
  386. diff --git a/java/org/l2jmobius/gameserver/votesystem/IndividualVoteResponse.java b/java/org/l2jmobius/gameserver/votesystem/IndividualVoteResponse.java
  387. new file mode 100644
  388. index 0000000..c8b462d
  389. --- /dev/null
  390. +++ b/java/org/l2jmobius/gameserver/votesystem/IndividualVoteResponse.java
  391. @@ -0,0 +1,32 @@
  392. +package org.l2jmobius.gameserver.votesystem;
  393. +
  394. +public class IndividualVoteResponse
  395. +{
  396. + private boolean _isVoted;
  397. + private long _serverVoteTime;
  398. + private long _voteSiteTime;
  399. +
  400. + public IndividualVoteResponse() {
  401. +
  402. + }
  403. +
  404. + public void setIsVoted(boolean isVoted) {
  405. + _isVoted = isVoted;
  406. + }
  407. + public void setServerVoteTime(long serverVoteTime) {
  408. + _serverVoteTime = serverVoteTime;
  409. + }
  410. + public void setVoteSiteTime(long voteSiteTime) {
  411. + _voteSiteTime = voteSiteTime;
  412. + }
  413. +
  414. + public boolean getIsVoted() {
  415. + return _isVoted;
  416. + }
  417. + public long getServerVoteTime() {
  418. + return _serverVoteTime;
  419. + }
  420. + public long getVoteSiteTime() {
  421. + return _voteSiteTime;
  422. + }
  423. +}
  424. \ No newline at end of file
  425. diff --git a/java/org/l2jmobius/gameserver/votesystem/IndividualVotesDatabase.java b/java/org/l2jmobius/gameserver/votesystem/IndividualVotesDatabase.java
  426. new file mode 100644
  427. index 0000000..12a418b
  428. --- /dev/null
  429. +++ b/java/org/l2jmobius/gameserver/votesystem/IndividualVotesDatabase.java
  430. @@ -0,0 +1,148 @@
  431. +package org.l2jmobius.gameserver.votesystem;
  432. +
  433. +import java.sql.Connection;
  434. +import java.sql.PreparedStatement;
  435. +import java.sql.ResultSet;
  436. +import java.sql.SQLException;
  437. +import java.sql.Statement;
  438. +import java.util.HashSet;
  439. +import java.util.logging.Logger;
  440. +
  441. +import org.l2jmobius.commons.database.DatabaseFactory;
  442. +
  443. +
  444. +/**
  445. + * @author l2.topgameserver.net
  446. + *
  447. + */
  448. +public class IndividualVotesDatabase
  449. +{
  450. + public static final Logger LOGGER = Logger.getLogger(IndividualVotesDatabase.class.getName());
  451. + private HashSet<IndividualVote> _votes;
  452. + private Statement st;
  453. + private Connection con;
  454. +
  455. + private IndividualVotesDatabase() {
  456. + _votes = new HashSet<>();
  457. + loadVotes();
  458. + }
  459. +
  460. + public void loadVotes() {
  461. +
  462. + con = DatabaseFactory.getConnection();
  463. + _votes.clear();
  464. + try(PreparedStatement ps = con.prepareStatement("SELECT voterIp,voteSite,serverVotingTime,votingTimeSite,alreadyRewarded FROM individualVotes");
  465. + ResultSet rs = ps.executeQuery();)
  466. + {
  467. + while(rs.next()) {
  468. + IndividualVote iv = new IndividualVote();
  469. + iv.setVoterIp(rs.getString("voterIp"));
  470. + iv.setVoteSite(rs.getInt("voteSite"));
  471. + iv.setServerVotingTime(rs.getLong("serverVotingTime"));
  472. + iv.setVotingTimeSite(rs.getLong("votingTimeSite"));
  473. + iv.setAlreadyRewarded(rs.getBoolean("alreadyRewarded"));
  474. + _votes.add(iv);
  475. + }
  476. + ps.close();
  477. + con.close();
  478. + }
  479. + catch (SQLException e)
  480. + {
  481. + // TODO Auto-generated catch block
  482. + e.printStackTrace();
  483. + }
  484. +
  485. + }
  486. +
  487. + public void SaveVotes(HashSet<IndividualVote> votes) {
  488. +
  489. + if(votes == null)
  490. + return;
  491. + if(votes.size() == 0) {
  492. + return;
  493. + }
  494. + try(Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO individualVotes(voterIp,voteSite,serverVotingTime,votingTimeSite,alreadyRewarded) VALUES(?,?,?,?,?) ON DUPLICATE KEY UPDATE "
  495. + + "voterIp = VALUES(voterIp), voteSite = VALUES(voteSite), serverVotingTime = VALUES(serverVotingTime), votingTimeSite = VALUES(votingTimeSite),alreadyRewarded = VALUES(alreadyRewarded)");)
  496. + {
  497. +
  498. + for(IndividualVote iv : votes) {
  499. + ps.setString(1, iv.getVoterIp());
  500. + ps.setInt(2, iv.getVoteSite());
  501. + ps.setLong(3, iv.getServerVotingTime());
  502. + ps.setLong(4, iv.getVotingTimeSite());
  503. + ps.setBoolean(5, iv.getAlreadyRewarded());
  504. + ps.addBatch();
  505. + }
  506. + ps.executeBatch();
  507. + ps.close();
  508. + con.close();
  509. + }
  510. + catch (SQLException e)
  511. + {
  512. + // TODO Auto-generated catch block
  513. + e.printStackTrace();
  514. + }
  515. + }
  516. +
  517. +public void SaveVote(IndividualVote vote) {
  518. +
  519. + if(vote == null)
  520. + return;
  521. +
  522. + try(Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO individualVotes(voterIp,voteSite,serverVotingTime,votingTimeSite,alreadyRewarded) VALUES(?,?,?,?,?) ON DUPLICATE KEY UPDATE"
  523. + + "voterIp = VALUES(voterIp), voteSite = VALUES(voteSite), serverVotingTime = VALUES(serverVotingTime), votingTimeSite = VALUES(votingTimeSite), alreadyRewarded = VALUES(alreadyRewarded)");)
  524. + {
  525. + ps.setString(1, vote.getVoterIp());
  526. + ps.setInt(2, vote.getVoteSite());
  527. + ps.setLong(3, vote.getServerVotingTime());
  528. + ps.setLong(4, vote.getVotingTimeSite());
  529. + ps.setBoolean(5, vote.getAlreadyRewarded());
  530. + ps.executeUpdate();
  531. + ps.close();
  532. + con.close();
  533. + }
  534. + catch (SQLException e)
  535. + {
  536. + // TODO Auto-generated catch block
  537. + e.printStackTrace();
  538. + }
  539. + }
  540. +
  541. + public void DeleteVotes(HashSet<IndividualVote> deleteVotes) {
  542. + if(deleteVotes == null) {
  543. + return;
  544. + }
  545. + if(deleteVotes.size() == 0) {
  546. + return;
  547. + }
  548. + try {
  549. + con = DatabaseFactory.getConnection();
  550. + st = con.createStatement();
  551. + for(IndividualVote iv : deleteVotes) {
  552. + String sql = String.format("Delete from individualVotes where voterIp = '%s' AND voteSite = %s", iv.getVoterIp(),iv.getVoteSite());
  553. + st.addBatch(sql);
  554. + }
  555. + int[] result = st.executeBatch();
  556. + st.close();
  557. + con.close();
  558. +
  559. + LOGGER.info("Delete Innecesary votes: "+result.length);
  560. +
  561. + }catch(SQLException e) {
  562. + e.printStackTrace();
  563. + }
  564. + }
  565. +
  566. + public HashSet<IndividualVote> getVotesDB(){
  567. + return _votes;
  568. + }
  569. +
  570. + public static final IndividualVotesDatabase getInstance()
  571. + {
  572. + return SingleHolder.INSTANCE;
  573. + }
  574. +
  575. + private static final class SingleHolder {
  576. + protected static final IndividualVotesDatabase INSTANCE = new IndividualVotesDatabase();
  577. + }
  578. +}
  579. \ No newline at end of file
  580. diff --git a/java/org/l2jmobius/gameserver/votesystem/NpcVoteInstance.java b/java/org/l2jmobius/gameserver/votesystem/NpcVote.java
  581. new file mode 100644
  582. index 0000000..d4fc210
  583. --- /dev/null
  584. +++ b/java/org/l2jmobius/gameserver/votesystem/NpcVoteInstance.java
  585. @@ -0,0 +1,80 @@
  586. +package org.l2jmobius.gameserver.votesystem;
  587. +
  588. +import org.l2jmobius.Config;
  589. +import org.l2jmobius.gameserver.datatables.ItemTable;
  590. +import org.l2jmobius.gameserver.model.actor.Npc;
  591. +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
  592. +import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
  593. +import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
  594. +
  595. +public class NpcVoteInstance extends Npc
  596. +{
  597. +
  598. + /**
  599. + * @param objectId
  600. + * @param template
  601. + */
  602. + public NpcVoteInstance(NpcTemplate template)
  603. + {
  604. + super(template);
  605. + // TODO Auto-generated constructor stub
  606. + }
  607. +
  608. + @Override
  609. + public void onBypassFeedback(PlayerInstance player, String command)
  610. + {
  611. + if(command == null) {
  612. + return;
  613. + }
  614. + int Ordinalsite = Integer.parseInt(command);
  615. + VoteManager.getInatance().getReward(player, Ordinalsite);
  616. + showChatWindow(player,0);
  617. + super.onBypassFeedback(player, command);
  618. + }
  619. +
  620. + @Override
  621. + public void showChatWindow(PlayerInstance player, int val) {
  622. + final NpcHtmlMessage html = new NpcHtmlMessage(0);
  623. + StringBuilder sb = new StringBuilder();
  624. + html.setFile(player, getHtmlPath(getId(), 0));
  625. + for(VoteSitesEnum vs : VoteSitesEnum.values()) {
  626. + sb.append("<table bgcolor=000000 width=280><tr>");
  627. + sb.append("<td width=42><img src=\"icon.etc_treasure_box_i08\" width=32 height=32></td>");
  628. + sb.append("<td width=220><table width=220>");
  629. + sb.append("<tr><td><table width=220><tr><td width=145>On "+String.format("%s",VoteSiteXml.getInstance().getSiteName(vs.ordinal()))+"</td>");
  630. + if(VoteManager.getInatance().checkIndividualAvailableVote(player, vs.ordinal())) {
  631. + sb.append("<td width=75>"+String.format("<button value=\"Get reward\" action=\"bypass -h vote_%s_site %s\" height=17 width=64 back=\"sek.cbui94\" fore=\"sek.cbui92\">",getObjectId(),vs.ordinal())+"</td>");
  632. + }else {
  633. + sb.append(String.format("<td width=75 align=center><font color=C68E00>%s</font></td>", VoteManager.getInatance().getTimeRemainingWithSampleFormat(player, vs.ordinal())));
  634. + }
  635. + sb.append("</tr></table></td></tr>");
  636. + sb.append("<tr><td><table width=220><tr>");
  637. + int i=0;
  638. + for(Reward r : VoteSiteXml.getInstance().getRewards(vs.ordinal())) {
  639. + sb.append(String.format("<td width=110 height=32 align=center><font color=BFAF00>%s x%s</font></td>",ItemTable.getInstance().getTemplate(r.getItemId()).getName(), r.getItemCount()));
  640. + i++;
  641. + if(i%2==0) {
  642. + sb.append("</tr><tr>");
  643. + }
  644. + }
  645. + sb.append("</tr></table></td></tr></table></td></tr></table><br>");
  646. + }
  647. + html.replace("%everyXtime%",Config.INTERVAL_TO_NEXT_VOTE/(3600*1000));
  648. + html.replace("%enablevote%", sb.toString());
  649. + html.replace("%accountName%",player.getName());
  650. + player.sendPacket(html);
  651. + }
  652. +
  653. + @Override
  654. + public String getHtmlPath(int npcId, int val)
  655. + {
  656. + String filename = "";
  657. + if (val == 0)
  658. + filename = "" + npcId;
  659. + else
  660. + filename = npcId + "-" + val;
  661. +
  662. + return "data/html/mods/votesystem/" + filename + ".html";
  663. + }
  664. +
  665. +}
  666. \ No newline at end of file
  667. diff --git a/java/org/l2jmobius/gameserver/votesystem/Reward.java b/java/org/l2jmobius/gameserver/votesystem/Reward.java
  668. new file mode 100644
  669. index 0000000..a9cb65c
  670. --- /dev/null
  671. +++ b/java/org/l2jmobius/gameserver/votesystem/Reward.java
  672. @@ -0,0 +1,28 @@
  673. +package org.l2jmobius.gameserver.votesystem;
  674. +
  675. +import java.util.Map;
  676. +
  677. +public class Reward
  678. +{
  679. + private int _itemId;
  680. + private int _itemCount;
  681. +
  682. + public Reward(Map<String, Object> map)
  683. + {
  684. + _itemId = (int) map.get("itemId");
  685. + _itemCount = (int) map.get("itemCount");
  686. + }
  687. +
  688. + public void setItemId(int itemId) {
  689. + _itemId = itemId;
  690. + }
  691. + public void setItemCount(int itemCount) {
  692. + _itemCount = itemCount;
  693. + }
  694. + public int getItemId() {
  695. + return _itemId;
  696. + }
  697. + public int getItemCount() {
  698. + return _itemCount;
  699. + }
  700. +}
  701. \ No newline at end of file
  702. diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteHandler.java b/java/org/l2jmobius/gameserver/votesystem/VoteHandler.java
  703. new file mode 100644
  704. index 0000000..dac1ab2
  705. --- /dev/null
  706. +++ b/java/org/l2jmobius/gameserver/votesystem/VoteHandler.java
  707. @@ -0,0 +1,485 @@
  708. +package org.l2jmobius.gameserver.votesystem;
  709. +
  710. +import java.io.BufferedReader;
  711. +import java.io.DataOutputStream;
  712. +import java.io.InputStreamReader;
  713. +import java.net.HttpURLConnection;
  714. +import java.net.URL;
  715. +import java.nio.charset.Charset;
  716. +import java.text.ParseException;
  717. +import java.text.SimpleDateFormat;
  718. +import java.util.logging.Logger;
  719. +
  720. +import org.l2jmobius.Config;
  721. +
  722. +public class VoteHandler
  723. +{
  724. + public static final Logger LOGGER = Logger.getLogger(VoteHandler.class.getName());
  725. +
  726. + protected static String getNetWorkResponse(String URL,int ordinal) {
  727. + try {
  728. + String API_URL = Config.VOTE_NETWORK_LINK;
  729. + String detail = URL;
  730. + String postParameters = "";
  731. + postParameters +="apiKey="+VoteUtil.between("apiKey=", detail, "&type=");
  732. + postParameters += "&type="+VoteUtil.between("&type=", detail, "&player");
  733. + String beginIndexPlayer = "&player=";
  734. + String player = detail.substring(detail.indexOf(beginIndexPlayer)+beginIndexPlayer.length());
  735. +
  736. + if (player != null && !player.equals(""))
  737. + postParameters += "&player=" + player;
  738. +
  739. + byte[] postData = postParameters.getBytes(Charset.forName("UTF-8"));
  740. + URL url = new URL(API_URL);
  741. + HttpURLConnection con = (HttpURLConnection)url.openConnection();
  742. + con.setConnectTimeout(5000);
  743. + con.setRequestMethod("POST");
  744. + con.setRequestProperty("Content-Length", Integer.toString(postData.length));
  745. + con.setRequestProperty("User-Agent", "Mozilla/5.0");
  746. + con.setDoOutput(true);
  747. +
  748. + DataOutputStream os = new DataOutputStream(con.getOutputStream());
  749. + os.write(postData);
  750. + os.flush();
  751. + os.close();
  752. +
  753. + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
  754. + String inputLine;
  755. + StringBuffer response = new StringBuffer();
  756. +
  757. + while ((inputLine = in.readLine()) != null) {
  758. + response.append(inputLine);
  759. + }
  760. + in.close();
  761. + return response.toString();
  762. +
  763. + } catch (Exception e) {
  764. + LOGGER.warning(VoteUtil.Sites[ordinal]+ " Say: An error ocurred ");
  765. + return "";
  766. + }
  767. + }
  768. +
  769. + protected static String getResponse(String Url, int ordinal)
  770. + {
  771. +
  772. + try
  773. + {
  774. + int responseCode = 0;
  775. + URL objUrl = new URL(Url);
  776. + HttpURLConnection con = (HttpURLConnection) objUrl.openConnection();
  777. + con.setRequestMethod("GET");
  778. + con.setRequestProperty("User-Agent", "Mozilla/5.0");
  779. + con.setConnectTimeout(5000);
  780. + responseCode = con.getResponseCode();
  781. + if (responseCode == HttpURLConnection.HTTP_OK) {
  782. + String inputLine;
  783. + StringBuffer response = new StringBuffer();
  784. + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
  785. + while ((inputLine = in.readLine()) != null) {
  786. + response.append(inputLine);
  787. + }
  788. + in.close();
  789. + return response.toString();
  790. + }
  791. +
  792. + }
  793. + catch (Exception e)
  794. + {
  795. + LOGGER.warning(VoteUtil.Sites[ordinal]+ " Say: An error ocurred ");
  796. + return "";
  797. + }
  798. +
  799. + return "";
  800. + }
  801. +
  802. +
  803. + public static IndividualVoteResponse getIndividualVoteResponse(int ordinal,String ip, String AccountName)
  804. + {
  805. + String response = "";
  806. + boolean isVoted = false;
  807. + long voteSiteTime = 0L, serverVoteTime = 0L;
  808. + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  809. + IndividualVoteResponse ivr = new IndividualVoteResponse();
  810. +
  811. + switch(ordinal)
  812. + {
  813. + case 0:
  814. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  815. + isVoted = Boolean.parseBoolean(VoteUtil.between("\"already_voted\":", response, ",\"vote_time\""));
  816. + if(isVoted) {
  817. + try
  818. + {
  819. + voteSiteTime = format.parse(VoteUtil.between("\"vote_time\":\"", response, "\",\"server_time\"")).getTime();
  820. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  821. + }
  822. + catch (ParseException e)
  823. + {
  824. + e.printStackTrace();
  825. + }
  826. + }
  827. + break;
  828. +
  829. + case 1:
  830. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  831. + isVoted = Boolean.parseBoolean(response);
  832. + if(isVoted) {
  833. + voteSiteTime = VoteUtil.getTimeVotingSite(ordinal);
  834. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  835. + }
  836. + break;
  837. +
  838. + case 2:
  839. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  840. + isVoted = Boolean.parseBoolean(response);
  841. + if(isVoted) {
  842. + voteSiteTime = VoteUtil.getTimeVotingSite(ordinal);
  843. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  844. + }
  845. + break;
  846. +
  847. + case 3:
  848. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  849. + isVoted = Integer.parseInt(VoteUtil.between("\"status\":\"", response, "\",\"date\"")) == 1 ? true : false;
  850. + if(isVoted) {
  851. + String dateString = VoteUtil.between("\"date\":\"", response, "\"}]");
  852. + try
  853. + {
  854. + voteSiteTime = format.parse(String.format("%s-%s-%s %s:%s:%s", dateString.substring(0, 4),dateString.substring(4, 6),dateString.substring(6, 8),dateString.substring(8, 10),dateString.substring(10, 12),dateString.substring(12, 14))).getTime();
  855. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  856. + }
  857. + catch (ParseException e)
  858. + {
  859. + e.printStackTrace();
  860. + }
  861. +
  862. + }
  863. + break;
  864. +
  865. + case 4:
  866. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  867. + isVoted = Boolean.parseBoolean(VoteUtil.between("\"voted\":", response, ",\"voteTime\""));
  868. + if(isVoted) {
  869. + try
  870. + {
  871. + voteSiteTime = format.parse(VoteUtil.between("\"voteTime\":\"", response, "\",\"hopzoneServerTime\"")).getTime();
  872. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  873. + }
  874. + catch (ParseException e)
  875. + {
  876. + e.printStackTrace();
  877. + }
  878. + }
  879. + break;
  880. +
  881. + case 5:
  882. + //first method with date response
  883. + /*response = getNetWorkResponse(getIndividualUrl(ordinal,ip,AccountName),ordinal);
  884. + voteSiteTime = Long.parseLong(response)*1000;
  885. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  886. + if(Config.INTERVAL_TO_NEXT_VOTE - (serverVoteTime - voteSiteTime) > 0) {
  887. + isVoted = true;
  888. + }else {
  889. + try
  890. + {
  891. + //https://l2network.eu/index.php?a=in&u=TOPLIST_USERNAME&id=VOTER_USERNAME_OR_ID
  892. + URL url = new URL(String.format("https://l2network.eu/index.php?a=in&u=%s&id=%s",Config.VOTE_NETWORK_USER_NAME,AccountName));
  893. + try
  894. + {
  895. + Desktop.getDesktop().browse(url.toURI());
  896. + }
  897. + catch (IOException | URISyntaxException e)
  898. + {
  899. + e.printStackTrace();
  900. + }
  901. + }
  902. + catch (MalformedURLException e)
  903. + {
  904. + e.printStackTrace();
  905. + }
  906. + }*/
  907. + //second method without date response
  908. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  909. + isVoted = (Integer.parseInt(response) == 1) ? true : false;
  910. + voteSiteTime = serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  911. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  912. + break;
  913. +
  914. + case 6:
  915. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  916. + isVoted = Boolean.parseBoolean(VoteUtil.between("\"voted\":", response, ",\"voteTime\""));
  917. + if(isVoted) {
  918. + try
  919. + {
  920. + voteSiteTime = format.parse(VoteUtil.between("\"voteTime\":\"", response, "\",\"l2topserversServerTime\"")).getTime();
  921. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  922. + }
  923. + catch (ParseException e)
  924. + {
  925. + e.printStackTrace();
  926. + }
  927. +
  928. + }
  929. + break;
  930. +
  931. + case 7:
  932. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  933. + isVoted = Integer.parseInt(VoteUtil.between("\"status\":\"", response, "\",\"server_time\"")) == 1 ? true : false;
  934. + if(isVoted) {
  935. + try
  936. + {
  937. + voteSiteTime = format.parse(VoteUtil.between("\"date\":\"", response, "\",\"status\"")).getTime();
  938. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  939. + }
  940. + catch (ParseException e)
  941. + {
  942. + e.printStackTrace();
  943. + }
  944. + }
  945. + break;
  946. +
  947. + case 8:
  948. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  949. + isVoted = Boolean.parseBoolean(VoteUtil.between("\"is_voted\":", response, ",\"vote_time\""));
  950. + if(isVoted) {
  951. + try
  952. + {
  953. + voteSiteTime = (Long.parseLong(VoteUtil.between("\"vote_time\":", response, ",\"server_time\"")))*1000;
  954. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  955. + }
  956. + catch (Exception e)
  957. + {
  958. + // TODO Auto-generated catch block
  959. + e.printStackTrace();
  960. + }
  961. + }
  962. + break;
  963. +
  964. + case 9:
  965. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  966. + isVoted = Boolean.parseBoolean(VoteUtil.between("\"isVoted\": ", response, ",\"voteTime\""));
  967. + if(isVoted) {
  968. + voteSiteTime = Long.parseLong(VoteUtil.between("\"voteTime\": \"", response, "\",\"serverTime\""));
  969. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  970. + }
  971. + break;
  972. +
  973. + case 10:
  974. + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
  975. + isVoted = Boolean.parseBoolean(response);
  976. + if(isVoted) {
  977. + voteSiteTime = VoteUtil.getTimeVotingSite(ordinal);
  978. + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
  979. + }
  980. + break;
  981. +
  982. + }
  983. +
  984. + ivr.setIsVoted(isVoted);
  985. + ivr.setServerVoteTime(serverVoteTime);
  986. + ivr.setVoteSiteTime(voteSiteTime);
  987. + return ivr;
  988. + }
  989. +
  990. + public int getGlobalVotesResponse(int ordinal)
  991. + {
  992. + String response = "";
  993. + int totalVotes = 0;
  994. +
  995. + switch(ordinal)
  996. + {
  997. + case 0:
  998. + response = getResponse(getGlobalUrl(ordinal), ordinal);
  999. + response = VoteUtil.between("\"getVotes\":",response,"}");
  1000. + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
  1001. + break;
  1002. +
  1003. + case 1:
  1004. + response = getResponse(getGlobalUrl(ordinal), ordinal);
  1005. + response = VoteUtil.between("[server_votes]=>",response.replace(" ", ""),"[server_rank]");
  1006. + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
  1007. + break;
  1008. +
  1009. + case 2:
  1010. + response = getResponse(getGlobalUrl(ordinal), ordinal);
  1011. + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
  1012. + break;
  1013. +
  1014. + case 3:
  1015. + response = VoteUtil.getResponse(getGlobalUrl(ordinal), ordinal);
  1016. + response = VoteUtil.between("Votes:</th><th><a class='votes'>", response, "</a></th></tr><tr><th>Clicks:");
  1017. + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
  1018. + break;
  1019. +
  1020. + case 4:
  1021. + response = getResponse(getGlobalUrl(ordinal), ordinal);
  1022. + response = VoteUtil.between("\"totalvotes\":",response,",\"status_code\"");
  1023. + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
  1024. + break;
  1025. +
  1026. + case 5:
  1027. + String responseNetwork = getNetWorkResponse(getGlobalUrl(ordinal),ordinal);
  1028. + totalVotes = (!"".equals(response)) ? Integer.parseInt(responseNetwork) : -1;
  1029. + break;
  1030. +
  1031. + /*case 6:
  1032. +
  1033. + break;*/
  1034. +
  1035. + case 7:
  1036. + response = VoteUtil.getResponse(getGlobalUrl(ordinal), ordinal);
  1037. + response = VoteUtil.between("nicas:</b> ", response, "<br /><br />");
  1038. + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
  1039. + break;
  1040. +
  1041. + case 8:
  1042. + response = getResponse(getGlobalUrl(ordinal), ordinal);
  1043. + response = VoteUtil.between("\"monthly_votes\":",response,"}}");
  1044. + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
  1045. + break;
  1046. +
  1047. + case 9:
  1048. + response = getResponse(getGlobalUrl(ordinal), ordinal);
  1049. + response = VoteUtil.between("\"totalVotes\":\"", response, "\",\"serverRank\"");
  1050. + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
  1051. + break;
  1052. +
  1053. + case 10:
  1054. + response = getResponse(getGlobalUrl(ordinal), ordinal);
  1055. + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
  1056. + break;
  1057. + }
  1058. +
  1059. +
  1060. + return totalVotes;
  1061. + }
  1062. +
  1063. + public static String getIndividualUrl(int ordinal,String ip,String AccountName)
  1064. + {
  1065. + String url = "";
  1066. + switch(ordinal) {
  1067. + case 0:
  1068. + //l2.topgameserver.net
  1069. + url = String.format("%sAPI_KEY=%s/getData/%s", Config.VOTE_LINK_TGS, Config.TGS_API_KEY,ip);
  1070. + break;
  1071. +
  1072. + case 1:
  1073. + //itopz.com
  1074. + url = String.format("%s%s/%s/%s", Config.VOTE_LINK_ITOPZ,Config.ITOPZ_API_KEY,Config.ITOPZ_SRV_ID,ip);
  1075. + break;
  1076. +
  1077. + case 2:
  1078. + //l2top.co
  1079. + url = String.format("%sVoteCheck.php?id=%s&ip=%s", Config.VOTE_LINK_TOP_CO,Config.TOP_CO_SRV_ID,ip);
  1080. + break;
  1081. +
  1082. + case 3:
  1083. + //l2votes.com
  1084. + url = String.format("%sapi.php?apiKey=%s&ip=%s", Config.VOTE_LINK_VTS,Config.VTS_API_KEY,ip);
  1085. + break;
  1086. +
  1087. + case 4:
  1088. + //hopzone.net
  1089. + url = String.format("%svote?token=%s&ip_address=%s",Config.VOTE_LINK_HZ,Config.HZ_API_KEY,ip);
  1090. + break;
  1091. +
  1092. + case 5:
  1093. + //l2network.eu
  1094. + //first Method
  1095. + //url = String.format("apiKey=%s&type=%s&player=%s",Config.VOTE_NETWORK_API_KEY,2,AccountName);
  1096. + //second method
  1097. + url = String.format("https://l2network.eu/index.php?a=in&u=%s&ipc=%s", Config.VOTE_NETWORK_USER_NAME,ip);
  1098. + break;
  1099. +
  1100. + case 6:
  1101. + //l2topservers.com
  1102. + url = String.format("%stoken=%s&ip=%s", Config.VOTE_LINK_TSS,Config.TSS_API_TOKEN,ip);
  1103. + break;
  1104. +
  1105. + case 7:
  1106. + //top.l2jbrasil.com
  1107. + url = String.format("%susername=%s&ip=%s&type=json",Config.BRASIL_VOTE_LINK,Config.BRASIL_USER_NAME,ip);
  1108. + break;
  1109. +
  1110. + case 8:
  1111. + //mmotop
  1112. + url = String.format("%s%s/%s", Config.VOTE_LINK_MMOTOP,Config.MMOTOP_API_KEY,ip);
  1113. + break;
  1114. +
  1115. + case 9:
  1116. + //topzone.com
  1117. + url = String.format("%svote?token=%s&ip=%s", Config.VOTE_LINK_TZ,Config.TZ_API_KEY,ip);
  1118. + break;
  1119. +
  1120. + case 10:
  1121. + //l2servers.com
  1122. + url = String.format("%scheckip.php?hash=%s&server_id=%s&ip=%s", Config.VOTE_LINK_SERVERS,Config.SERVERS_HASH_CODE,Config.SERVERS_SRV_ID,ip);
  1123. + break;
  1124. + }
  1125. +
  1126. + return url;
  1127. + }
  1128. +
  1129. + public String getGlobalUrl(int ordinal)
  1130. + {
  1131. + String url = "";
  1132. +
  1133. + switch(ordinal) {
  1134. + case 0:
  1135. + //l2.topgameserver.net
  1136. + url = String.format("%sAPI_KEY=%s/getData", Config.VOTE_LINK_TGS,Config.TGS_API_KEY);
  1137. + break;
  1138. +
  1139. + case 1:
  1140. + //itopz.com
  1141. + url = String.format("%s%s/%s", Config.VOTE_LINK_ITOPZ,Config.ITOPZ_API_KEY,Config.ITOPZ_SRV_ID);
  1142. + break;
  1143. +
  1144. + case 2:
  1145. + //l2top.co
  1146. + url = String.format("%sVoteCheck_Total.php?id=%s", Config.VOTE_LINK_TOP_CO,Config.TOP_CO_SRV_ID);
  1147. + break;
  1148. +
  1149. + case 3:
  1150. + //l2votes.com
  1151. + url = String.format("%sserverPage.php?sid=%s",Config.VOTE_LINK_VTS,Config.VTS_SID);
  1152. + break;
  1153. +
  1154. + case 4:
  1155. + //hopzone.net
  1156. + url = String.format("%svotes?token=%s", Config.VOTE_LINK_HZ,Config.HZ_API_KEY);
  1157. + break;
  1158. +
  1159. + case 5:
  1160. + //l2network.eu
  1161. + url = String.format("apiKey=%s&type=%s&player=",Config.VOTE_NETWORK_API_KEY,1);
  1162. + break;
  1163. +
  1164. + /*case 6:
  1165. + //l2topservers
  1166. + return String.format("%sAPI_KEY=%s/getData", Config.VOTE_LINK_TGS,Config.TGS_API_KEY);
  1167. + break;*/
  1168. +
  1169. + case 7:
  1170. + //top.l2jbrasil.com
  1171. + url = String.format("https://top.l2jbrasil.com/index.php?a=stats&u=%s",Config.BRASIL_USER_NAME);
  1172. + break;
  1173. +
  1174. + case 8:
  1175. + //mmotop.eu/l2/
  1176. + url = String.format("%s%s/info/", Config.VOTE_LINK_MMOTOP,Config.MMOTOP_API_KEY);
  1177. + break;
  1178. +
  1179. + case 9:
  1180. + //l2topzone.com
  1181. + url = String.format("%sserver_%s/getServerData", Config.VOTE_LINK_TZ,Config.TZ_API_KEY);
  1182. + break;
  1183. +
  1184. + case 10:
  1185. + //l2servers.com
  1186. + url = String.format("%syearlyvotes.php?server_id=%s", Config.VOTE_LINK_SERVERS,Config.SERVERS_SRV_ID);
  1187. + break;
  1188. + }
  1189. +
  1190. + return url;
  1191. + }
  1192. +}
  1193. \ No newline at end of file
  1194. diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteManager.java b/java/org/l2jmobius/gameserver/votesystem/VoteManager.java
  1195. new file mode 100644
  1196. index 0000000..fd6ece8
  1197. --- /dev/null
  1198. +++ b/java/org/l2jmobius/gameserver/votesystem/VoteManager.java
  1199. @@ -0,0 +1,361 @@
  1200. +package org.l2jmobius.gameserver.votesystem;
  1201. +
  1202. +import java.util.HashSet;
  1203. +import java.util.Iterator;
  1204. +import java.util.Map;
  1205. +import java.util.Optional;
  1206. +import java.util.Set;
  1207. +import java.util.concurrent.ConcurrentHashMap;
  1208. +import java.util.concurrent.ScheduledFuture;
  1209. +import java.util.stream.Collectors;
  1210. +
  1211. +import org.l2jmobius.Config;
  1212. +import org.l2jmobius.commons.concurrent.ThreadPool;
  1213. +import org.l2jmobius.gameserver.model.World;
  1214. +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
  1215. +import org.l2jmobius.gameserver.network.GameClient;
  1216. +import org.l2jmobius.gameserver.network.SystemMessageId;
  1217. +import org.l2jmobius.gameserver.network.serverpackets.ItemList;
  1218. +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
  1219. +import org.l2jmobius.gameserver.util.Broadcast;
  1220. +
  1221. +public class VoteManager extends VoteHandler
  1222. +{
  1223. + private ScheduledFuture<?> _saveGlobalVotes;
  1224. + private ScheduledFuture<?> _updateIndividualVotes;
  1225. + private ScheduledFuture<?> _cleanInnecesaryIndividualVotes;
  1226. + private ScheduledFuture<?> _autoGlobalVotesReward;
  1227. +
  1228. + private HashSet<IndividualVote> _votes;
  1229. + private Map<String,IndividualVote[]> _foundVoters;
  1230. + private GlobalVote[] _globalVotes = new GlobalVote[VoteSitesEnum.values().length];
  1231. +
  1232. + public VoteManager() {
  1233. + loadVotes();
  1234. + loadGlobalVotes();
  1235. + _foundVoters = new ConcurrentHashMap<>();
  1236. + checkAllResponseGlobalVotes();
  1237. + stopAutoTasks();
  1238. +
  1239. + if(Config.ENABLE_INDIVIDUAL_VOTE && Config.ENABLE_VOTE_SYSTEM) {
  1240. + _cleanInnecesaryIndividualVotes = ThreadPool.scheduleAtFixedRate(new AutoCleanInnecesaryIndividualVotesTask(), 30000, Config.NEXT_TIME_TO_AUTO_CLEAN_INECESARY_VOTES);
  1241. + _updateIndividualVotes = ThreadPool.scheduleAtFixedRate(new AutoUpdateIndividualVotesTask(), 30000, Config.NEXT_TIME_TO_AUTO_UPDATE_INDIVIDUAL_VOTES);
  1242. + }
  1243. + if(Config.ENABLE_GLOBAL_VOTE && Config.ENABLE_VOTE_SYSTEM) {
  1244. + _autoGlobalVotesReward = ThreadPool.scheduleAtFixedRate(new AutoGlobalVoteRewardTask(), 10000, Config.NEXT_TIME_TO_CHECK_AUTO_GLOBAL_VOTES_REWARD);
  1245. + _saveGlobalVotes = ThreadPool.scheduleAtFixedRate(new AutoSaveGlobalVotesTask(), 30000, Config.NEXT_TIME_TO_AUTO_UPDATE_TOTAL_VOTE);
  1246. + }
  1247. + }
  1248. +
  1249. + private void stopAutoTasks() {
  1250. + if(_saveGlobalVotes != null) {
  1251. + _saveGlobalVotes.cancel(true);
  1252. + _saveGlobalVotes = null;
  1253. + }
  1254. + if(_updateIndividualVotes != null) {
  1255. + _updateIndividualVotes.cancel(true);
  1256. + _updateIndividualVotes = null;
  1257. + }
  1258. + if(_cleanInnecesaryIndividualVotes != null) {
  1259. + _cleanInnecesaryIndividualVotes.cancel(true);
  1260. + _cleanInnecesaryIndividualVotes = null;
  1261. + }
  1262. + if(_autoGlobalVotesReward != null) {
  1263. + _autoGlobalVotesReward.cancel(true);
  1264. + _autoGlobalVotesReward = null;
  1265. + }
  1266. + }
  1267. +
  1268. + public void getReward(PlayerInstance player, int ordinalSite) {
  1269. + String ip = existIp(player);
  1270. + if(ip == null) {
  1271. + return;
  1272. + }
  1273. + IndividualVoteResponse ivr = getIndividualVoteResponse(ordinalSite,ip,player.getAccountName());
  1274. + if(!ivr.getIsVoted()) {
  1275. + player.sendMessage(String.format("You haven't vote on %s yet!", VoteSiteXml.getInstance().getSiteName(ordinalSite)));
  1276. + return;
  1277. + }
  1278. + IndividualVote iv = new IndividualVote(ip,ivr.getServerVoteTime(),ivr.getVoteSiteTime(),ordinalSite,true);
  1279. + if(!checkIndividualAvailableVote(player,ordinalSite)) {
  1280. + player.sendMessage(String.format("You can get the reward again on %s at %s", VoteSiteXml.getInstance().getSiteName(ordinalSite),getTimeRemainingWithSampleFormat(player,ordinalSite)));
  1281. + return;
  1282. + }
  1283. + _votes.add(iv);
  1284. + IndividualVote[] aiv;
  1285. + if(!_foundVoters.containsKey(ip)) {
  1286. + Set<IndividualVote> ivts = _votes.stream().filter(st -> st.getVoterIp().equalsIgnoreCase(iv.getVoterIp())).collect(Collectors.toSet());
  1287. + aiv = new IndividualVote[VoteSitesEnum.values().length];
  1288. + if(ivts.size()>1) {
  1289. + ivts.forEach(x -> {
  1290. + aiv[x.getVoteSite()] = x;
  1291. + });
  1292. + _foundVoters.put(ip, aiv);
  1293. + }else {
  1294. + aiv[ordinalSite] = iv;
  1295. + _foundVoters.put(ip, aiv);
  1296. + }
  1297. + }else {
  1298. + aiv = _foundVoters.get(ip);
  1299. + aiv[ordinalSite] = iv;
  1300. + _foundVoters.replace(ip, aiv);
  1301. + }
  1302. + for(Reward reward : VoteSiteXml.getInstance().getRewards(ordinalSite)) {
  1303. + player.getInventory().addItem("VoteSystem", reward.getItemId(), reward.getItemCount(), player, null);
  1304. + player.sendPacket(new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S).addItemName(reward.getItemId()).addInt(reward.getItemCount()));
  1305. + }
  1306. + player.sendMessage(String.format("%s: Thank you for voting for our server, your reward has been delivered.", VoteSiteXml.getInstance().getSiteName(ordinalSite)));
  1307. + player.sendPacket(new ItemList(player, true));
  1308. +
  1309. + }
  1310. +
  1311. + public boolean checkIndividualAvailableVote(PlayerInstance player, int ordinalSite) {
  1312. + String ip = existIp(player);
  1313. + //If player has registered almost 1 vote
  1314. + if(_foundVoters.containsKey(ip)) {
  1315. + IndividualVote[] ivs=_foundVoters.get(ip);
  1316. + if(ivs[ordinalSite] == null)
  1317. + return true;
  1318. + if(ivs[ordinalSite] != null) {
  1319. + IndividualVote iv = ivs[ordinalSite];
  1320. + if(getTimeRemaining(iv)<0 || !iv.getAlreadyRewarded()) {
  1321. + return true;
  1322. + }
  1323. + }
  1324. + }
  1325. +
  1326. + //if the player hasn't registered a vote or after the initial charge
  1327. + Optional<IndividualVote> iv = _votes.stream().filter(s -> s.getVoterIp().equalsIgnoreCase(ip)).filter(y -> y.getVoteSite() == ordinalSite).findFirst();
  1328. + if(iv.isEmpty()) {
  1329. + return true;
  1330. + }
  1331. + if(getTimeRemaining(iv.get()) <0 || !iv.get().getAlreadyRewarded()) {
  1332. + return true;
  1333. + }
  1334. + return false;
  1335. +
  1336. + }
  1337. +
  1338. + public long getTimeRemaining(IndividualVote iv) {
  1339. + long timeRemaining = 0L;
  1340. + timeRemaining = iv.getVotingTimeSite() + Config.INTERVAL_TO_NEXT_VOTE - (System.currentTimeMillis() - (System.currentTimeMillis() - VoteUtil.getTimeVotingSite(iv.getVoteSite())));
  1341. + return timeRemaining;
  1342. + }
  1343. +
  1344. + public String getTimeRemainingWithSampleFormat(PlayerInstance player, int ordinalSite) {
  1345. + String ip = existIp(player);
  1346. + String timeRemainingWithSampleFormat ="";
  1347. + if(_foundVoters.containsKey(ip)) {
  1348. + IndividualVote[] ivs=_foundVoters.get(ip);
  1349. + if(ivs[ordinalSite] != null) {
  1350. + IndividualVote iv = ivs[ordinalSite];
  1351. + long timeRemaining = getTimeRemaining(iv);
  1352. + if(timeRemaining>0 && iv.getAlreadyRewarded()) {
  1353. + timeRemainingWithSampleFormat = CalculateTimeRemainingWithSampleDateFormat(timeRemaining);
  1354. + return timeRemainingWithSampleFormat;
  1355. + }
  1356. + }
  1357. + }
  1358. + Optional<IndividualVote> iv = _votes.stream().filter(s -> s.getVoterIp().equalsIgnoreCase(ip)).filter(y -> y.getVoteSite() == ordinalSite).findFirst();
  1359. + if(!iv.isEmpty()) {
  1360. + if(getTimeRemaining(iv.get()) > 0 && iv.get().getAlreadyRewarded()) {
  1361. + long timeRemaining = getTimeRemaining(iv.get());
  1362. + timeRemainingWithSampleFormat = CalculateTimeRemainingWithSampleDateFormat(timeRemaining);
  1363. + return timeRemainingWithSampleFormat;
  1364. + }
  1365. + }
  1366. +
  1367. + return timeRemainingWithSampleFormat;
  1368. + }
  1369. +
  1370. + public String CalculateTimeRemainingWithSampleDateFormat(long timeRemaining) {
  1371. + long t = timeRemaining/1000;
  1372. + int hours = Math.round((t/3600%24));
  1373. + int minutes = Math.round((t/60)%60);
  1374. + int seconds = Math.round(t%60);
  1375. + return String.format("%sH:%sm:%ss", hours,minutes,seconds);
  1376. + }
  1377. +
  1378. + public String existIp(PlayerInstance p) {
  1379. +
  1380. + GameClient client = p.getClient();
  1381. + if(client.getConnectionAddress() != null && client.getPlayer() != null && !client.isDetached()) {
  1382. + try
  1383. + {
  1384. + return client.getConnectionAddress().getHostAddress();
  1385. + }
  1386. + catch (Exception e)
  1387. + {
  1388. + e.printStackTrace();
  1389. + }
  1390. + }
  1391. + return null;
  1392. +
  1393. + }
  1394. +
  1395. + public final void loadVotes() {
  1396. + _votes = IndividualVotesDatabase.getInstance().getVotesDB();//.getInstance().getVotesDB();
  1397. + }
  1398. + protected void loadGlobalVotes(){
  1399. + _globalVotes = GlobalVotesDatabase.getInstance().getGlobalVotes();
  1400. + }
  1401. + protected void saveVotes() {
  1402. + IndividualVotesDatabase.getInstance().SaveVotes(_votes);
  1403. + }
  1404. +
  1405. + protected void AutoGlobalVoteReward() {
  1406. + HashSet<String> ipList = new HashSet<>();
  1407. + for(VoteSitesEnum vs : VoteSitesEnum.values()) {
  1408. + new Thread(() -> {
  1409. + checkNewUpdate(vs.ordinal());
  1410. + if(_globalVotes[vs.ordinal()].getCurrentVotes() >= _globalVotes[vs.ordinal()].getVotesLastReward() + Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD) {
  1411. + _globalVotes[vs.ordinal()].setVotesLastReward(_globalVotes[vs.ordinal()].getVotesLastReward() + Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD);
  1412. + for(PlayerInstance player : World.getInstance().getPlayers()) {
  1413. + String ip = existIp(player);
  1414. + if(ip == null) {
  1415. + continue;
  1416. + }
  1417. + if(ipList.contains(ip)) {
  1418. + continue;
  1419. + }
  1420. + for(Reward reward : VoteSiteXml.getInstance().getRewards(11)) {
  1421. + player.getInventory().addItem("VoteSystem: ", reward.getItemId(), reward.getItemCount(), player, null);
  1422. + player.sendPacket(new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S).addItemName(reward.getItemId()).addInt(reward.getItemCount()));
  1423. + }
  1424. + ipList.add(ip);
  1425. + player.sendPacket(new ItemList(player, true));
  1426. + }
  1427. + Broadcast.toAllOnlinePlayers(VoteUtil.Sites[vs.ordinal()]+": All players has been rewarded, please check your inventory", true);
  1428. + }else {
  1429. + String encourage ="";
  1430. + int nextReward = _globalVotes[vs.ordinal()].getVotesLastReward() + Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD;
  1431. + encourage = String.format("Vote for %s current Votes: %s, next quantity of votes to reward : %s, need votes to next reward: %s", VoteUtil.Sites[vs.ordinal()], _globalVotes[vs.ordinal()].getCurrentVotes(),nextReward, nextReward-_globalVotes[vs.ordinal()].getCurrentVotes() );
  1432. + Broadcast.toAllOnlinePlayers(encourage, true);
  1433. + }
  1434. + }).start();
  1435. +
  1436. + }
  1437. + }
  1438. +
  1439. + protected void AutoSaveGlobalVotes() {
  1440. + GlobalVotesDatabase.getInstance().saveGlobalVotes(_globalVotes);
  1441. + }
  1442. +
  1443. + protected synchronized void AutoUpdateIndividualVotes() {
  1444. + IndividualVotesDatabase.getInstance().SaveVotes(_votes);
  1445. + }
  1446. +
  1447. + protected synchronized void AutoCleanInnecesaryIndividualVotes() {
  1448. + HashSet<IndividualVote> removeVotes= new HashSet<>();
  1449. + Iterator<IndividualVote> iv = _votes.iterator();
  1450. + while(iv.hasNext()){
  1451. + IndividualVote individualvote = iv.next();
  1452. + if(getTimeRemaining(individualvote) < 0) {
  1453. + removeVotes.add(individualvote);
  1454. + iv.remove();
  1455. + if(_foundVoters.containsKey(individualvote.getVoterIp())) {
  1456. + if(_foundVoters.get(individualvote.getVoterIp())[individualvote.getVoteSite()] != null) {
  1457. + _foundVoters.get(individualvote.getVoterIp())[individualvote.getVoteSite()] = null;
  1458. + }
  1459. + }
  1460. + }
  1461. + }
  1462. + IndividualVotesDatabase.getInstance().DeleteVotes(removeVotes);
  1463. + }
  1464. +
  1465. + public void checkAllResponseGlobalVotes() {
  1466. + for(VoteSitesEnum vs : VoteSitesEnum.values()) {
  1467. + new Thread(()-> {
  1468. + checkNewUpdate(vs.ordinal());
  1469. + });
  1470. + }
  1471. + }
  1472. +
  1473. + public void checkNewUpdate(int ordinalSite) {
  1474. + int globalVotesResponse = getGlobalVotesResponse(ordinalSite);
  1475. + if(globalVotesResponse == -1) {
  1476. + return;
  1477. + }
  1478. + _globalVotes[ordinalSite].setCurrentVotes(globalVotesResponse);
  1479. + int last = globalVotesResponse - Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD;
  1480. + if(last <0 ) {
  1481. + _globalVotes[ordinalSite].setVotesLastReward(0);
  1482. + return;
  1483. + }
  1484. + if((_globalVotes[ordinalSite].getVotesLastReward() + Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD) < globalVotesResponse) {
  1485. + _globalVotes[ordinalSite].setVotesLastReward(globalVotesResponse);
  1486. + return;
  1487. + }
  1488. + }
  1489. +
  1490. + public void Shutdown() {
  1491. + AutoSaveGlobalVotes();
  1492. + AutoCleanInnecesaryIndividualVotes();
  1493. + AutoUpdateIndividualVotes();
  1494. + }
  1495. +
  1496. + protected class AutoGlobalVoteRewardTask implements Runnable {
  1497. +
  1498. + /* (non-Javadoc)
  1499. + * @see java.lang.Runnable#run()
  1500. + */
  1501. + @Override
  1502. + public void run()
  1503. + {
  1504. + AutoGlobalVoteReward();
  1505. +
  1506. + }
  1507. +
  1508. + }
  1509. +
  1510. + protected class AutoSaveGlobalVotesTask implements Runnable {
  1511. +
  1512. + /* (non-Javadoc)
  1513. + * @see java.lang.Runnable#run()
  1514. + */
  1515. + @Override
  1516. + public void run()
  1517. + {
  1518. + AutoSaveGlobalVotes();
  1519. +
  1520. + }
  1521. +
  1522. + }
  1523. +
  1524. + protected class AutoUpdateIndividualVotesTask implements Runnable {
  1525. +
  1526. + /* (non-Javadoc)
  1527. + * @see java.lang.Runnable#run()
  1528. + */
  1529. + @Override
  1530. + public void run()
  1531. + {
  1532. + AutoUpdateIndividualVotes();
  1533. +
  1534. + }
  1535. +
  1536. + }
  1537. +
  1538. + protected class AutoCleanInnecesaryIndividualVotesTask implements Runnable {
  1539. +
  1540. + /* (non-Javadoc)
  1541. + * @see java.lang.Runnable#run()
  1542. + */
  1543. + @Override
  1544. + public void run()
  1545. + {
  1546. + AutoCleanInnecesaryIndividualVotes();
  1547. +
  1548. + }
  1549. +
  1550. + }
  1551. +
  1552. + public static VoteManager getInatance() {
  1553. + return SingleHolder.INSTANCE;
  1554. + }
  1555. +
  1556. + private static class SingleHolder {
  1557. + protected static final VoteManager INSTANCE = new VoteManager();
  1558. + }
  1559. +
  1560. +}
  1561. \ No newline at end of file
  1562. diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteSite.java b/java/org/l2jmobius/gameserver/votesystem/VoteSite.java
  1563. new file mode 100644
  1564. index 0000000..3eebfce
  1565. --- /dev/null
  1566. +++ b/java/org/l2jmobius/gameserver/votesystem/VoteSite.java
  1567. @@ -0,0 +1,35 @@
  1568. +package org.l2jmobius.gameserver.votesystem;
  1569. +
  1570. +
  1571. +import java.util.ArrayList;
  1572. +import java.util.List;
  1573. +
  1574. +public class VoteSite
  1575. +{
  1576. + private int _siteOrdinal;
  1577. + private String _siteName;
  1578. + private List<Reward> _rewards = new ArrayList<>();
  1579. + public VoteSite() {
  1580. +
  1581. + }
  1582. + public void setSiteOrdinal(int siteOrdinal) {
  1583. + _siteOrdinal = siteOrdinal;
  1584. + }
  1585. + public void setSiteName(String siteName) {
  1586. + _siteName = siteName;
  1587. + }
  1588. + public void setRewardList(List<Reward> rewards) {
  1589. + for(Reward r : rewards)
  1590. + _rewards.add(r);
  1591. + }
  1592. + public int getSiteOrdinal() {
  1593. + return _siteOrdinal;
  1594. + }
  1595. + public String getSiteName() {
  1596. + return _siteName;
  1597. + }
  1598. + public List<Reward> getRewardList(){
  1599. + return _rewards;
  1600. + }
  1601. +
  1602. +}
  1603. \ No newline at end of file
  1604. diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.java b/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.java
  1605. new file mode 100644
  1606. index 0000000..8f12b3a
  1607. --- /dev/null
  1608. +++ b/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.java
  1609. @@ -0,0 +1,66 @@
  1610. +package org.l2jmobius.gameserver.votesystem;
  1611. +
  1612. +import java.io.File;
  1613. +import java.util.Collection;
  1614. +import java.util.HashMap;
  1615. +import java.util.Map;
  1616. +
  1617. +import org.l2jmobius.commons.util.IXmlReader;
  1618. +import org.w3c.dom.Document;
  1619. +import org.w3c.dom.NamedNodeMap;
  1620. +
  1621. +/**
  1622. + * @author l2.topgameserver.net
  1623. + *
  1624. + */
  1625. +public class VoteSiteXml implements IXmlReader
  1626. +{
  1627. +
  1628. + private final Map<Integer,VoteSite> _voteSites = new HashMap<>();
  1629. +
  1630. + protected VoteSiteXml() {
  1631. + load();
  1632. + }
  1633. +
  1634. + @Override
  1635. + public void load()
  1636. + {
  1637. + parseDatapackFile("data/votesystem.xml");
  1638. + LOGGER.info("Loaded {} reward sites");
  1639. + }
  1640. +
  1641. +
  1642. + @Override
  1643. + public void parseDocument(Document doc, File path)
  1644. + {
  1645. + forEach(doc, "list", listNode -> {
  1646. + forEach(listNode, "votesite", votesiteNode -> {
  1647. + final VoteSite votesite = new VoteSite();
  1648. + final NamedNodeMap attrs = votesiteNode.getAttributes();
  1649. + votesite.setSiteOrdinal(parseInteger(attrs,"ordinal"));
  1650. + votesite.setSiteName(parseString(attrs,"name"));
  1651. + forEach(votesiteNode,"items", itemsNode -> forEach(itemsNode,"item",itemNode -> votesite.getRewardList().add(new Reward(parseAttributes(itemNode)))));
  1652. + _voteSites.put(votesite.getSiteOrdinal(),votesite);
  1653. + });
  1654. + });
  1655. + }
  1656. +
  1657. + public String getSiteName(int ordinal) {
  1658. + return _voteSites.get(ordinal).getSiteName();
  1659. + }
  1660. +
  1661. + public Collection<Reward> getRewards(int ordinal){
  1662. + return _voteSites.get(ordinal).getRewardList();
  1663. + }
  1664. +
  1665. + public static final VoteSiteXml getInstance()
  1666. + {
  1667. + return SingletonHolder.INSTANCE;
  1668. + }
  1669. +
  1670. + private static final class SingletonHolder
  1671. + {
  1672. + protected static final VoteSiteXml INSTANCE = new VoteSiteXml();
  1673. + }
  1674. +
  1675. +}
  1676. \ No newline at end of file
  1677. diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.javs b/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.javs
  1678. new file mode 100644
  1679. index 0000000..e69de29
  1680. --- /dev/null
  1681. +++ b/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.javs
  1682. diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteSitesEnum.java b/java/org/l2jmobius/gameserver/votesystem/VoteSitesEnum.java
  1683. new file mode 100644
  1684. index 0000000..0c46d29
  1685. --- /dev/null
  1686. +++ b/java/org/l2jmobius/gameserver/votesystem/VoteSitesEnum.java
  1687. @@ -0,0 +1,16 @@
  1688. +package org.l2jmobius.gameserver.votesystem;
  1689. +
  1690. +public enum VoteSitesEnum
  1691. +{
  1692. + L2TOPGAMESERVER,
  1693. + ITOPZ,
  1694. + L2TOPCO,
  1695. + L2VOTES,
  1696. + HOPZONE,
  1697. + L2NETWORK,
  1698. + L2TOPSERVERS,
  1699. + TOPL2JBRASIL,
  1700. + MMOTOP,
  1701. + TOPZONE,
  1702. + L2SERVERS,
  1703. +}
  1704. \ No newline at end of file
  1705. diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteUtil.java b/java/org/l2jmobius/gameserver/votesystem/VoteUtil.java
  1706. new file mode 100644
  1707. index 0000000..4bd79fe
  1708. --- /dev/null
  1709. +++ b/java/org/l2jmobius/gameserver/votesystem/VoteUtil.java
  1710. @@ -0,0 +1,112 @@
  1711. +package org.l2jmobius.gameserver.votesystem;
  1712. +
  1713. +import java.io.BufferedReader;
  1714. +import java.io.InputStreamReader;
  1715. +import java.net.HttpURLConnection;
  1716. +import java.net.URL;
  1717. +import java.time.LocalDateTime;
  1718. +import java.time.ZoneId;
  1719. +import java.time.ZonedDateTime;
  1720. +import java.util.logging.Logger;
  1721. +
  1722. +
  1723. +/**
  1724. + * @author l2.topgameserver.net
  1725. + *
  1726. + */
  1727. +public final class VoteUtil
  1728. +{
  1729. + public static final Logger LOGGER = Logger.getLogger(VoteUtil.class.getName());
  1730. +
  1731. + private static String voteTimeZones[] = {
  1732. + "topgameserver.net=Europe/Berlin",
  1733. + "itopz.com=America/New_York",
  1734. + "l2top.co=Europe/London",
  1735. + "l2votes.com=GMT",
  1736. + "hopzone.net=Europe/Athens",
  1737. + "l2network.eu=America/Chicago",
  1738. + "l2topservers.com=Europe/Athens",
  1739. + "top.l2jbrasil.com=America/Sao_Paulo",
  1740. + "mmotop.eu=America/Chicago",
  1741. + "l2topzone.com=America/Chicago",
  1742. + "l2servers.com=America/Chicago",
  1743. + };
  1744. +
  1745. + public static final long getTimeVotingSite(int ordinalSite) {
  1746. + LocalDateTime ldt = LocalDateTime.now(ZoneId.of(voteTimeZones[ordinalSite].split("=")[1]));
  1747. + ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
  1748. + long millis = zdt.toInstant().toEpochMilli();
  1749. + return millis;
  1750. + }
  1751. +
  1752. + public static final String Sites[] =
  1753. + {
  1754. + "L2.TopGameServer.net",
  1755. + "ITopZ.com",
  1756. + "L2Top.co",
  1757. + "L2Votes.com",
  1758. + "L2.Hopzone.net",
  1759. + "L2Network.eu",
  1760. + "L2TopServers.com",
  1761. + "top.l2jbrasil.com",
  1762. + "MMOTOP.eu",
  1763. + "L2Topzone.com",
  1764. + "L2Servers.com"
  1765. + };
  1766. +
  1767. + public static final String getResponse(String Url, int ordinal)
  1768. + {
  1769. +
  1770. + try
  1771. + {
  1772. + int responseCode = 0;
  1773. + URL objUrl = new URL(Url);
  1774. + HttpURLConnection con = (HttpURLConnection) objUrl.openConnection();
  1775. + con.setRequestMethod("GET");
  1776. + con.setRequestProperty("User-Agent", "Mozilla/5.0");
  1777. + con.setConnectTimeout(5000);
  1778. + responseCode = con.getResponseCode();
  1779. + if (responseCode == HttpURLConnection.HTTP_OK) {
  1780. +
  1781. + String inputLine;
  1782. + StringBuffer response = new StringBuffer();
  1783. + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
  1784. + while ((inputLine = in.readLine()) != null) {
  1785. + if(ordinal == 3) {
  1786. + if(inputLine.contains("Votes:")) {
  1787. + response.append(inputLine);
  1788. + break;
  1789. + }
  1790. + }
  1791. + if(ordinal == 7){
  1792. + if(inputLine.contains("<b>Entradas ")) {
  1793. + response.append(inputLine);
  1794. + break;
  1795. + }
  1796. + }
  1797. + }
  1798. + in.close();
  1799. + return response.toString();
  1800. + }
  1801. +
  1802. + }
  1803. + catch (Exception e)
  1804. + {
  1805. + LOGGER.info(VoteUtil.Sites[ordinal]+ " Say: An error ocurred ");
  1806. + return "";
  1807. + }
  1808. +
  1809. + return "";
  1810. + }
  1811. +
  1812. + public static final String between(String p1, String str, String p2){
  1813. + String returnValue = "";
  1814. + int i1 = str.indexOf(p1);
  1815. + int i2 = str.indexOf(p2);
  1816. + if(i1 != -1 && i2 != -1){
  1817. + i1 = i1+p1.length();
  1818. + returnValue = str.substring(i1,i2);
  1819. + }
  1820. + return returnValue;
  1821. + }
  1822. +}
  1823. \ No newline at end of file
Add Comment
Please, Sign In to add comment