Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/java/org/l2jmobius/Config.java b/java/org/l2jmobius/Config.java
- index d7a5940..18ad358 100644
- --- a/java/org/l2jmobius/Config.java
- +++ b/java/org/l2jmobius/Config.java
- @@ -147,6 +147,8 @@
- public static final String VOTE_FILE = "./config/Custom/VoteSystem.ini";
- private static final String BATTLE_ZONE_FILE = "./config/Custom/BattlePvP.ini";
- public static final String DM_FILE = "./config/Events/DeathMatch.ini";
- + private static final String VOTE_SYSTEM_FILE = "./config/Custom/votesystemm.ini";
- +
- // --------------------------------------------------
- // Invoke Settings
- @@ -201,6 +203,47 @@
- public static String DONATION_FAIL_MESSAGE;
- public static String DONATION_ERROR_MESSAGE;
- + //---------------------------------------------------
- + // VOTE SYSTEM
- + //---------------------------------------------------
- + public static boolean ENABLE_VOTE_SYSTEM;
- + public static boolean ENABLE_INDIVIDUAL_VOTE;
- + public static boolean ENABLE_GLOBAL_VOTE;
- + public static int NEXT_TIME_TO_AUTO_UPDATE_TOTAL_VOTE;
- + public static int NEXT_TIME_TO_AUTO_UPDATE_INDIVIDUAL_VOTES;
- + public static int NEXT_TIME_TO_AUTO_CLEAN_INECESARY_VOTES;
- + public static int NEXT_TIME_TO_CHECK_AUTO_GLOBAL_VOTES_REWARD;
- + public static int INTERVAL_TO_NEXT_VOTE;
- + public static int GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD;
- + public static boolean ENABLE_VOTING_COMMAND;
- + public static String VOTING_COMMAND;
- + public static String VOTE_LINK_TGS;
- + public static String TGS_API_KEY;
- + public static String VOTE_LINK_TOP_CO;
- + public static String TOP_CO_SRV_ID;
- + public static String VOTE_LINK_ITOPZ;
- + public static String ITOPZ_API_KEY;
- + public static String ITOPZ_SRV_ID;
- + public static String VOTE_LINK_VTS;
- + public static String VTS_API_KEY;
- + public static String VTS_SID;
- + public static String VOTE_LINK_HZ;
- + public static String HZ_API_KEY;
- + public static String VOTE_NETWORK_LINK;
- + public static String VOTE_NETWORK_USER_NAME;
- + public static String VOTE_NETWORK_API_KEY;
- + public static String VOTE_LINK_TSS;
- + public static String TSS_API_TOKEN;
- + public static String BRASIL_VOTE_LINK;
- + public static String BRASIL_USER_NAME;
- + public static String VOTE_LINK_MMOTOP;
- + public static String MMOTOP_API_KEY;
- + public static String VOTE_LINK_TZ;
- + public static String TZ_API_KEY;
- + public static String VOTE_LINK_SERVERS;
- + public static String SERVERS_HASH_CODE;
- + public static String SERVERS_SRV_ID;
- +
- /** DM Event */
- public static boolean DM_EVENT_ENABLED;
- public static boolean DM_EVENT_IN_INSTANCE;
- @@ -3225,6 +3268,51 @@
- }
- }
- +
- + final PropertiesParser votesystem = new PropertiesParser(Config.VOTE_SYSTEM_FILE);
- +
- + ENABLE_VOTE_SYSTEM = votesystem.getBoolean("EnableVoteSystem", true);
- + ENABLE_INDIVIDUAL_VOTE = votesystem.getBoolean("EnableIndividualVote", true);
- + ENABLE_GLOBAL_VOTE = votesystem.getBoolean("EnableGlobalVote", true);
- + NEXT_TIME_TO_AUTO_UPDATE_TOTAL_VOTE = votesystem.getInt("NextTimeToAutoUpdateTotalVote", 60)*60*1000; // -> minutes
- + NEXT_TIME_TO_AUTO_UPDATE_INDIVIDUAL_VOTES = votesystem.getInt("NextTimeToAutoUpdateIndividualVotes", 60)*60*1000; // -> minutes
- + NEXT_TIME_TO_AUTO_CLEAN_INECESARY_VOTES = votesystem.getInt("NextTimeToAutoCleanInnecesaryVotes", 30)*60*1000; // -> minutes
- + NEXT_TIME_TO_CHECK_AUTO_GLOBAL_VOTES_REWARD = votesystem.getInt("NextTimeToCheckAutoGlobalVotesReward", 5)*60*1000; // -> minutes
- + INTERVAL_TO_NEXT_VOTE = votesystem.getInt("IntervalTimeToNextVote", 12)*3600*1000; // -> hours
- + GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD = votesystem.getInt("GlobalVotesAmountToNextReward",50);
- + //VOTE_REWARD_ITEM = votesystem.getProperty();
- + ENABLE_VOTING_COMMAND = votesystem.getBoolean("EnableVotingCommand",true);
- + VOTING_COMMAND = votesystem.getString("VotingCommand","getreward");
- + VOTE_LINK_TGS = votesystem.getString("VoteLinkTgs","");
- + TGS_API_KEY = votesystem.getString("TgsApiKey","");
- + VOTE_LINK_TOP_CO = votesystem.getString("VoteLinkTopCo","");
- + TOP_CO_SRV_ID = votesystem.getString("TopCoSrvId","");
- + VOTE_LINK_ITOPZ = votesystem.getString("VoteLinkItopz","");
- + ITOPZ_API_KEY = votesystem.getString("ItopzZpiKey","");
- + ITOPZ_SRV_ID = votesystem.getString("ItopzSrvId","");
- + VOTE_LINK_VTS = votesystem.getString("VoteLinkVts","");
- + VTS_API_KEY = votesystem.getString("VtsApiKey","");
- + VTS_SID = votesystem.getString("VtsSid","");
- + VOTE_LINK_HZ = votesystem.getString("VoteLinkHz","");
- + HZ_API_KEY = votesystem.getString("HzApiKey","");
- + VOTE_NETWORK_LINK = votesystem.getString("VoteNetworkLink","");
- + VOTE_NETWORK_USER_NAME = votesystem.getString("VoteNetworkUserName","");
- + VOTE_NETWORK_API_KEY = votesystem.getString("VoteNetworkApiKey","");
- + VOTE_LINK_TSS = votesystem.getString("VoteLinkTss","");
- + TSS_API_TOKEN = votesystem.getString("TssApiToken","");
- + //VOTE_LINK_TON = votesystem.getString("VoteLinkTon","");
- + //TON_SRV_ID = votesystem.getString("TonSrvId","");
- + BRASIL_VOTE_LINK = votesystem.getString("BrasilVoteLink","");
- + BRASIL_USER_NAME = votesystem.getString("BrasilUserName","");
- + VOTE_LINK_MMOTOP = votesystem.getString("VoteLinkMmotop","");
- + MMOTOP_API_KEY = votesystem.getString("MmotopApiKey","");
- + VOTE_LINK_TZ = votesystem.getString("VoteLinkTz","");
- + TZ_API_KEY = votesystem.getString("TzApiKey","");
- + VOTE_LINK_SERVERS = votesystem.getString("VoteLinkServers","");
- + SERVERS_HASH_CODE = votesystem.getString("ServersHashCode","");
- + SERVERS_SRV_ID = votesystem.getString("ServersSrvId","");
- +
- +
- // Load PrivateStoreRange config file (if exists)
- final PropertiesParser PrivateStoreRange = new PropertiesParser(CUSTOM_PRIVATE_STORE_RANGE_CONFIG_FILE);
- diff --git a/java/org/l2jmobius/gameserver/GameServer.java b/java/org/l2jmobius/gameserver/GameServer.java
- index 8e8dcfa..17af7d9 100644
- --- a/java/org/l2jmobius/gameserver/GameServer.java
- +++ b/java/org/l2jmobius/gameserver/GameServer.java
- @@ -154,6 +154,8 @@
- import org.l2jmobius.gameserver.taskmanager.TaskManager;
- import org.l2jmobius.gameserver.ui.Gui;
- import org.l2jmobius.gameserver.util.Broadcast;
- +import org.l2jmobius.gameserver.votesystem.VoteManager;
- +import org.l2jmobius.gameserver.votesystem.VoteSiteXml;
- public class GameServer
- {
- @@ -282,6 +284,13 @@
- PremiumManager.getInstance();
- }
- + if(Config.ENABLE_VOTE_SYSTEM)
- + {
- + VoteManager.getInatance();
- + LOGGER.info("======================Vote System Enabled=========================");
- + VoteSiteXml.getInstance();
- + }
- +
- printSection("Clans");
- ClanTable.getInstance();
- CHSiegeManager.getInstance();
- diff --git a/java/org/l2jmobius/gameserver/Shutdown.java b/java/org/l2jmobius/gameserver/Shutdown.java
- index a095ef1..dab3a54 100644
- --- a/java/org/l2jmobius/gameserver/Shutdown.java
- +++ b/java/org/l2jmobius/gameserver/Shutdown.java
- @@ -49,6 +49,7 @@
- import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
- import org.l2jmobius.gameserver.network.telnet.TelnetServer;
- import org.l2jmobius.gameserver.util.Broadcast;
- +import org.l2jmobius.gameserver.votesystem.VoteManager;
- /**
- * This class provides the functions for shutting down and restarting the server.<br>
- @@ -502,6 +503,10 @@
- LOGGER.info("Items On Ground Manager: Cleaned up(" + tc.getEstimatedTimeAndRestartCounter() + "ms).");
- }
- + // Save global and individual votes
- + VoteManager.getInatance().Shutdown();
- + LOGGER.info("Vote data has been saved");
- +
- // Save bot reports to database
- if (Config.BOTREPORT_ENABLE)
- {
- diff --git a/java/org/l2jmobius/gameserver/votesystem/GlobalVote.java b/java/org/l2jmobius/gameserver/votesystem/GlobalVote.java
- new file mode 100644
- index 0000000..83334b3
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/GlobalVote.java
- @@ -0,0 +1,41 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +public class GlobalVote
- +{
- + private int _voteSite;
- + private int _votesLastReward;
- + private int _currentVotes;
- + public GlobalVote() {
- +
- + }
- +
- + public GlobalVote(int voteSite, int votesLastReward) {
- + _voteSite = voteSite;
- + _votesLastReward = votesLastReward;
- + }
- +
- + public void setVoteSite(int voteSite) {
- + _voteSite = voteSite;
- + }
- +
- + public void setVotesLastReward(int votesLastReward) {
- + _votesLastReward = votesLastReward;
- + }
- +
- + public void setCurrentVotes(int currentVotes) {
- + _currentVotes = currentVotes;
- + }
- +
- + public int getVoyeSite() {
- + return _voteSite;
- + }
- +
- + public int getVotesLastReward() {
- + return _votesLastReward;
- + }
- +
- + public int getCurrentVotes() {
- + return _currentVotes;
- + }
- +
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/GlobalVotesDatabase.java b/java/org/l2jmobius/gameserver/votesystem/GlobalVotesDatabase.java
- new file mode 100644
- index 0000000..f123d26
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/GlobalVotesDatabase.java
- @@ -0,0 +1,95 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +import java.sql.Connection;
- +import java.sql.PreparedStatement;
- +import java.sql.ResultSet;
- +import java.sql.SQLException;
- +import java.util.logging.Logger;
- +
- +import org.l2jmobius.commons.database.DatabaseFactory;
- +
- +
- +public class GlobalVotesDatabase
- +{
- + public static final Logger LOGGER = Logger.getLogger(GlobalVotesDatabase.class.getName());
- + private Connection con;
- + private GlobalVote[] _globalVotes;
- + private GlobalVotesDatabase() {
- + _globalVotes = new GlobalVote[VoteSitesEnum.values().length];
- + loadGlobalVotes();
- + }
- +
- + public void loadGlobalVotes() {
- + con = DatabaseFactory.getConnection();
- + try(PreparedStatement ps = con.prepareStatement("Select voteSite,lastRewardVotes from globalVotes");
- + ResultSet rs = ps.executeQuery();){
- + if(rs.getRow() == 0){
- + for(VoteSitesEnum vs : VoteSitesEnum.values()){
- + GlobalVote gv = new GlobalVote();
- + gv.setVoteSite(vs.ordinal());
- + gv.setVotesLastReward(0);
- + _globalVotes[gv.getVoyeSite()] = gv;
- + }
- + return;
- + }
- + while(rs.next()) {
- + GlobalVote gv = new GlobalVote();
- + gv.setVoteSite(rs.getInt("voteSite"));
- + gv.setVotesLastReward(rs.getInt("lastRewardVotes"));
- + _globalVotes[gv.getVoyeSite()] = gv;
- + }
- + ps.close();
- + con.close();
- +
- + }catch(SQLException e) {
- + e.printStackTrace();
- + }
- + }
- + public void saveGlobalVote(GlobalVote gb) {
- + try(Connection con = DatabaseFactory.getConnection();
- + PreparedStatement ps = con.prepareStatement("INSERT INTO globalVotes(voteSite,lastRewardVotes) VALUES(?,?)"
- + + "ON DUPLICATE KEY UPDATE voteSite = VALUES(voteSite), lastRewardVotes = VALUES(lastRewardVotes)"))
- +
- + {
- + ps.setInt(1, gb.getVoyeSite());
- + ps.setInt(2, gb.getVotesLastReward());
- + ps.executeUpdate();
- + ps.close();
- + con.close();
- +
- + }catch(SQLException e) {
- + e.printStackTrace();
- + }
- + }
- +
- + public void saveGlobalVotes(GlobalVote[] globalVotes) {
- + try(Connection con = DatabaseFactory.getConnection();PreparedStatement ps = con.prepareStatement("INSERT INTO globalVotes(voteSite,lastRewardVotes) VALUES(?,?)"
- + + "ON DUPLICATE KEY UPDATE voteSite = VALUES(voteSite), lastRewardVotes = VALUES(lastRewardVotes)"))
- +
- + {
- + for(VoteSitesEnum vs : VoteSitesEnum.values()) {
- + GlobalVote gb = globalVotes[vs.ordinal()];
- + ps.setInt(1, gb.getVoyeSite());
- + ps.setInt(2, gb.getVotesLastReward());
- + ps.addBatch();
- + }
- + ps.executeBatch();
- +
- + ps.close();
- + con.close();
- +
- + }catch(SQLException e) {
- + e.printStackTrace();
- + }
- + }
- +
- + public GlobalVote[] getGlobalVotes() {
- + return _globalVotes;
- + }
- + public static final GlobalVotesDatabase getInstance() {
- + return SingleHolder.INSTANCE;
- + }
- + private static final class SingleHolder {
- + protected static final GlobalVotesDatabase INSTANCE = new GlobalVotesDatabase();
- + }
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/IndividualVote.java b/java/org/l2jmobius/gameserver/votesystem/IndividualVote.java
- new file mode 100644
- index 0000000..032d214
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/IndividualVote.java
- @@ -0,0 +1,64 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +public class IndividualVote
- +{
- + private String _voterIp;
- + private long _serverVotingTime;
- + private long _votingTimeSite;
- + private int _voteSite;
- + private boolean _alreadyRewarded;
- +
- +
- + public IndividualVote(String voterIp, long serverVotingTime, long votingTimeSite, int voteSite, boolean alreadyRewarded){
- + _voterIp = voterIp;
- + _serverVotingTime = serverVotingTime;
- + _votingTimeSite = votingTimeSite;
- + _voteSite = voteSite;
- + _alreadyRewarded = alreadyRewarded;
- + }
- +
- + public IndividualVote(){
- +
- + }
- +
- + public void setVoterIp(String voterIp) {
- + _voterIp = voterIp;
- + }
- +
- + public void setServerVotingTime(long serverVotingTime) {
- + _serverVotingTime = serverVotingTime;
- + }
- +
- + public void setVotingTimeSite(long votingTimeSite) {
- + _votingTimeSite = votingTimeSite;
- + }
- +
- + public void setVoteSite(int voteSite) {
- + _voteSite = voteSite;
- + }
- +
- + public void setAlreadyRewarded(boolean alreadyRewarded) {
- + _alreadyRewarded = alreadyRewarded;
- + }
- +
- + public String getVoterIp() {
- + return _voterIp;
- + }
- +
- + public long getServerVotingTime() {
- + return _serverVotingTime;
- + }
- +
- + public long getVotingTimeSite() {
- + return _votingTimeSite;
- + }
- +
- + public int getVoteSite() {
- + return _voteSite;
- + }
- +
- + public boolean getAlreadyRewarded() {
- + return _alreadyRewarded;
- + }
- +
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/IndividualVoteResponse.java b/java/org/l2jmobius/gameserver/votesystem/IndividualVoteResponse.java
- new file mode 100644
- index 0000000..c8b462d
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/IndividualVoteResponse.java
- @@ -0,0 +1,32 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +public class IndividualVoteResponse
- +{
- + private boolean _isVoted;
- + private long _serverVoteTime;
- + private long _voteSiteTime;
- +
- + public IndividualVoteResponse() {
- +
- + }
- +
- + public void setIsVoted(boolean isVoted) {
- + _isVoted = isVoted;
- + }
- + public void setServerVoteTime(long serverVoteTime) {
- + _serverVoteTime = serverVoteTime;
- + }
- + public void setVoteSiteTime(long voteSiteTime) {
- + _voteSiteTime = voteSiteTime;
- + }
- +
- + public boolean getIsVoted() {
- + return _isVoted;
- + }
- + public long getServerVoteTime() {
- + return _serverVoteTime;
- + }
- + public long getVoteSiteTime() {
- + return _voteSiteTime;
- + }
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/IndividualVotesDatabase.java b/java/org/l2jmobius/gameserver/votesystem/IndividualVotesDatabase.java
- new file mode 100644
- index 0000000..12a418b
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/IndividualVotesDatabase.java
- @@ -0,0 +1,148 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +import java.sql.Connection;
- +import java.sql.PreparedStatement;
- +import java.sql.ResultSet;
- +import java.sql.SQLException;
- +import java.sql.Statement;
- +import java.util.HashSet;
- +import java.util.logging.Logger;
- +
- +import org.l2jmobius.commons.database.DatabaseFactory;
- +
- +
- +/**
- + * @author l2.topgameserver.net
- + *
- + */
- +public class IndividualVotesDatabase
- +{
- + public static final Logger LOGGER = Logger.getLogger(IndividualVotesDatabase.class.getName());
- + private HashSet<IndividualVote> _votes;
- + private Statement st;
- + private Connection con;
- +
- + private IndividualVotesDatabase() {
- + _votes = new HashSet<>();
- + loadVotes();
- + }
- +
- + public void loadVotes() {
- +
- + con = DatabaseFactory.getConnection();
- + _votes.clear();
- + try(PreparedStatement ps = con.prepareStatement("SELECT voterIp,voteSite,serverVotingTime,votingTimeSite,alreadyRewarded FROM individualVotes");
- + ResultSet rs = ps.executeQuery();)
- + {
- + while(rs.next()) {
- + IndividualVote iv = new IndividualVote();
- + iv.setVoterIp(rs.getString("voterIp"));
- + iv.setVoteSite(rs.getInt("voteSite"));
- + iv.setServerVotingTime(rs.getLong("serverVotingTime"));
- + iv.setVotingTimeSite(rs.getLong("votingTimeSite"));
- + iv.setAlreadyRewarded(rs.getBoolean("alreadyRewarded"));
- + _votes.add(iv);
- + }
- + ps.close();
- + con.close();
- + }
- + catch (SQLException e)
- + {
- + // TODO Auto-generated catch block
- + e.printStackTrace();
- + }
- +
- + }
- +
- + public void SaveVotes(HashSet<IndividualVote> votes) {
- +
- + if(votes == null)
- + return;
- + if(votes.size() == 0) {
- + return;
- + }
- + try(Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO individualVotes(voterIp,voteSite,serverVotingTime,votingTimeSite,alreadyRewarded) VALUES(?,?,?,?,?) ON DUPLICATE KEY UPDATE "
- + + "voterIp = VALUES(voterIp), voteSite = VALUES(voteSite), serverVotingTime = VALUES(serverVotingTime), votingTimeSite = VALUES(votingTimeSite),alreadyRewarded = VALUES(alreadyRewarded)");)
- + {
- +
- + for(IndividualVote iv : votes) {
- + ps.setString(1, iv.getVoterIp());
- + ps.setInt(2, iv.getVoteSite());
- + ps.setLong(3, iv.getServerVotingTime());
- + ps.setLong(4, iv.getVotingTimeSite());
- + ps.setBoolean(5, iv.getAlreadyRewarded());
- + ps.addBatch();
- + }
- + ps.executeBatch();
- + ps.close();
- + con.close();
- + }
- + catch (SQLException e)
- + {
- + // TODO Auto-generated catch block
- + e.printStackTrace();
- + }
- + }
- +
- +public void SaveVote(IndividualVote vote) {
- +
- + if(vote == null)
- + return;
- +
- + try(Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO individualVotes(voterIp,voteSite,serverVotingTime,votingTimeSite,alreadyRewarded) VALUES(?,?,?,?,?) ON DUPLICATE KEY UPDATE"
- + + "voterIp = VALUES(voterIp), voteSite = VALUES(voteSite), serverVotingTime = VALUES(serverVotingTime), votingTimeSite = VALUES(votingTimeSite), alreadyRewarded = VALUES(alreadyRewarded)");)
- + {
- + ps.setString(1, vote.getVoterIp());
- + ps.setInt(2, vote.getVoteSite());
- + ps.setLong(3, vote.getServerVotingTime());
- + ps.setLong(4, vote.getVotingTimeSite());
- + ps.setBoolean(5, vote.getAlreadyRewarded());
- + ps.executeUpdate();
- + ps.close();
- + con.close();
- + }
- + catch (SQLException e)
- + {
- + // TODO Auto-generated catch block
- + e.printStackTrace();
- + }
- + }
- +
- + public void DeleteVotes(HashSet<IndividualVote> deleteVotes) {
- + if(deleteVotes == null) {
- + return;
- + }
- + if(deleteVotes.size() == 0) {
- + return;
- + }
- + try {
- + con = DatabaseFactory.getConnection();
- + st = con.createStatement();
- + for(IndividualVote iv : deleteVotes) {
- + String sql = String.format("Delete from individualVotes where voterIp = '%s' AND voteSite = %s", iv.getVoterIp(),iv.getVoteSite());
- + st.addBatch(sql);
- + }
- + int[] result = st.executeBatch();
- + st.close();
- + con.close();
- +
- + LOGGER.info("Delete Innecesary votes: "+result.length);
- +
- + }catch(SQLException e) {
- + e.printStackTrace();
- + }
- + }
- +
- + public HashSet<IndividualVote> getVotesDB(){
- + return _votes;
- + }
- +
- + public static final IndividualVotesDatabase getInstance()
- + {
- + return SingleHolder.INSTANCE;
- + }
- +
- + private static final class SingleHolder {
- + protected static final IndividualVotesDatabase INSTANCE = new IndividualVotesDatabase();
- + }
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/NpcVoteInstance.java b/java/org/l2jmobius/gameserver/votesystem/NpcVote.java
- new file mode 100644
- index 0000000..d4fc210
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/NpcVoteInstance.java
- @@ -0,0 +1,80 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +import org.l2jmobius.Config;
- +import org.l2jmobius.gameserver.datatables.ItemTable;
- +import org.l2jmobius.gameserver.model.actor.Npc;
- +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
- +import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
- +import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +public class NpcVoteInstance extends Npc
- +{
- +
- + /**
- + * @param objectId
- + * @param template
- + */
- + public NpcVoteInstance(NpcTemplate template)
- + {
- + super(template);
- + // TODO Auto-generated constructor stub
- + }
- +
- + @Override
- + public void onBypassFeedback(PlayerInstance player, String command)
- + {
- + if(command == null) {
- + return;
- + }
- + int Ordinalsite = Integer.parseInt(command);
- + VoteManager.getInatance().getReward(player, Ordinalsite);
- + showChatWindow(player,0);
- + super.onBypassFeedback(player, command);
- + }
- +
- + @Override
- + public void showChatWindow(PlayerInstance player, int val) {
- + final NpcHtmlMessage html = new NpcHtmlMessage(0);
- + StringBuilder sb = new StringBuilder();
- + html.setFile(player, getHtmlPath(getId(), 0));
- + for(VoteSitesEnum vs : VoteSitesEnum.values()) {
- + sb.append("<table bgcolor=000000 width=280><tr>");
- + sb.append("<td width=42><img src=\"icon.etc_treasure_box_i08\" width=32 height=32></td>");
- + sb.append("<td width=220><table width=220>");
- + sb.append("<tr><td><table width=220><tr><td width=145>On "+String.format("%s",VoteSiteXml.getInstance().getSiteName(vs.ordinal()))+"</td>");
- + if(VoteManager.getInatance().checkIndividualAvailableVote(player, vs.ordinal())) {
- + 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>");
- + }else {
- + sb.append(String.format("<td width=75 align=center><font color=C68E00>%s</font></td>", VoteManager.getInatance().getTimeRemainingWithSampleFormat(player, vs.ordinal())));
- + }
- + sb.append("</tr></table></td></tr>");
- + sb.append("<tr><td><table width=220><tr>");
- + int i=0;
- + for(Reward r : VoteSiteXml.getInstance().getRewards(vs.ordinal())) {
- + 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()));
- + i++;
- + if(i%2==0) {
- + sb.append("</tr><tr>");
- + }
- + }
- + sb.append("</tr></table></td></tr></table></td></tr></table><br>");
- + }
- + html.replace("%everyXtime%",Config.INTERVAL_TO_NEXT_VOTE/(3600*1000));
- + html.replace("%enablevote%", sb.toString());
- + html.replace("%accountName%",player.getName());
- + player.sendPacket(html);
- + }
- +
- + @Override
- + public String getHtmlPath(int npcId, int val)
- + {
- + String filename = "";
- + if (val == 0)
- + filename = "" + npcId;
- + else
- + filename = npcId + "-" + val;
- +
- + return "data/html/mods/votesystem/" + filename + ".html";
- + }
- +
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/Reward.java b/java/org/l2jmobius/gameserver/votesystem/Reward.java
- new file mode 100644
- index 0000000..a9cb65c
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/Reward.java
- @@ -0,0 +1,28 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +import java.util.Map;
- +
- +public class Reward
- +{
- + private int _itemId;
- + private int _itemCount;
- +
- + public Reward(Map<String, Object> map)
- + {
- + _itemId = (int) map.get("itemId");
- + _itemCount = (int) map.get("itemCount");
- + }
- +
- + public void setItemId(int itemId) {
- + _itemId = itemId;
- + }
- + public void setItemCount(int itemCount) {
- + _itemCount = itemCount;
- + }
- + public int getItemId() {
- + return _itemId;
- + }
- + public int getItemCount() {
- + return _itemCount;
- + }
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteHandler.java b/java/org/l2jmobius/gameserver/votesystem/VoteHandler.java
- new file mode 100644
- index 0000000..dac1ab2
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/VoteHandler.java
- @@ -0,0 +1,485 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +import java.io.BufferedReader;
- +import java.io.DataOutputStream;
- +import java.io.InputStreamReader;
- +import java.net.HttpURLConnection;
- +import java.net.URL;
- +import java.nio.charset.Charset;
- +import java.text.ParseException;
- +import java.text.SimpleDateFormat;
- +import java.util.logging.Logger;
- +
- +import org.l2jmobius.Config;
- +
- +public class VoteHandler
- +{
- + public static final Logger LOGGER = Logger.getLogger(VoteHandler.class.getName());
- +
- + protected static String getNetWorkResponse(String URL,int ordinal) {
- + try {
- + String API_URL = Config.VOTE_NETWORK_LINK;
- + String detail = URL;
- + String postParameters = "";
- + postParameters +="apiKey="+VoteUtil.between("apiKey=", detail, "&type=");
- + postParameters += "&type="+VoteUtil.between("&type=", detail, "&player");
- + String beginIndexPlayer = "&player=";
- + String player = detail.substring(detail.indexOf(beginIndexPlayer)+beginIndexPlayer.length());
- +
- + if (player != null && !player.equals(""))
- + postParameters += "&player=" + player;
- +
- + byte[] postData = postParameters.getBytes(Charset.forName("UTF-8"));
- + URL url = new URL(API_URL);
- + HttpURLConnection con = (HttpURLConnection)url.openConnection();
- + con.setConnectTimeout(5000);
- + con.setRequestMethod("POST");
- + con.setRequestProperty("Content-Length", Integer.toString(postData.length));
- + con.setRequestProperty("User-Agent", "Mozilla/5.0");
- + con.setDoOutput(true);
- +
- + DataOutputStream os = new DataOutputStream(con.getOutputStream());
- + os.write(postData);
- + os.flush();
- + os.close();
- +
- + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
- + String inputLine;
- + StringBuffer response = new StringBuffer();
- +
- + while ((inputLine = in.readLine()) != null) {
- + response.append(inputLine);
- + }
- + in.close();
- + return response.toString();
- +
- + } catch (Exception e) {
- + LOGGER.warning(VoteUtil.Sites[ordinal]+ " Say: An error ocurred ");
- + return "";
- + }
- + }
- +
- + protected static String getResponse(String Url, int ordinal)
- + {
- +
- + try
- + {
- + int responseCode = 0;
- + URL objUrl = new URL(Url);
- + HttpURLConnection con = (HttpURLConnection) objUrl.openConnection();
- + con.setRequestMethod("GET");
- + con.setRequestProperty("User-Agent", "Mozilla/5.0");
- + con.setConnectTimeout(5000);
- + responseCode = con.getResponseCode();
- + if (responseCode == HttpURLConnection.HTTP_OK) {
- + String inputLine;
- + StringBuffer response = new StringBuffer();
- + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
- + while ((inputLine = in.readLine()) != null) {
- + response.append(inputLine);
- + }
- + in.close();
- + return response.toString();
- + }
- +
- + }
- + catch (Exception e)
- + {
- + LOGGER.warning(VoteUtil.Sites[ordinal]+ " Say: An error ocurred ");
- + return "";
- + }
- +
- + return "";
- + }
- +
- +
- + public static IndividualVoteResponse getIndividualVoteResponse(int ordinal,String ip, String AccountName)
- + {
- + String response = "";
- + boolean isVoted = false;
- + long voteSiteTime = 0L, serverVoteTime = 0L;
- + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- + IndividualVoteResponse ivr = new IndividualVoteResponse();
- +
- + switch(ordinal)
- + {
- + case 0:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Boolean.parseBoolean(VoteUtil.between("\"already_voted\":", response, ",\"vote_time\""));
- + if(isVoted) {
- + try
- + {
- + voteSiteTime = format.parse(VoteUtil.between("\"vote_time\":\"", response, "\",\"server_time\"")).getTime();
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + catch (ParseException e)
- + {
- + e.printStackTrace();
- + }
- + }
- + break;
- +
- + case 1:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Boolean.parseBoolean(response);
- + if(isVoted) {
- + voteSiteTime = VoteUtil.getTimeVotingSite(ordinal);
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + break;
- +
- + case 2:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Boolean.parseBoolean(response);
- + if(isVoted) {
- + voteSiteTime = VoteUtil.getTimeVotingSite(ordinal);
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + break;
- +
- + case 3:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Integer.parseInt(VoteUtil.between("\"status\":\"", response, "\",\"date\"")) == 1 ? true : false;
- + if(isVoted) {
- + String dateString = VoteUtil.between("\"date\":\"", response, "\"}]");
- + try
- + {
- + 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();
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + catch (ParseException e)
- + {
- + e.printStackTrace();
- + }
- +
- + }
- + break;
- +
- + case 4:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Boolean.parseBoolean(VoteUtil.between("\"voted\":", response, ",\"voteTime\""));
- + if(isVoted) {
- + try
- + {
- + voteSiteTime = format.parse(VoteUtil.between("\"voteTime\":\"", response, "\",\"hopzoneServerTime\"")).getTime();
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + catch (ParseException e)
- + {
- + e.printStackTrace();
- + }
- + }
- + break;
- +
- + case 5:
- + //first method with date response
- + /*response = getNetWorkResponse(getIndividualUrl(ordinal,ip,AccountName),ordinal);
- + voteSiteTime = Long.parseLong(response)*1000;
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + if(Config.INTERVAL_TO_NEXT_VOTE - (serverVoteTime - voteSiteTime) > 0) {
- + isVoted = true;
- + }else {
- + try
- + {
- + //https://l2network.eu/index.php?a=in&u=TOPLIST_USERNAME&id=VOTER_USERNAME_OR_ID
- + URL url = new URL(String.format("https://l2network.eu/index.php?a=in&u=%s&id=%s",Config.VOTE_NETWORK_USER_NAME,AccountName));
- + try
- + {
- + Desktop.getDesktop().browse(url.toURI());
- + }
- + catch (IOException | URISyntaxException e)
- + {
- + e.printStackTrace();
- + }
- + }
- + catch (MalformedURLException e)
- + {
- + e.printStackTrace();
- + }
- + }*/
- + //second method without date response
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = (Integer.parseInt(response) == 1) ? true : false;
- + voteSiteTime = serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + break;
- +
- + case 6:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Boolean.parseBoolean(VoteUtil.between("\"voted\":", response, ",\"voteTime\""));
- + if(isVoted) {
- + try
- + {
- + voteSiteTime = format.parse(VoteUtil.between("\"voteTime\":\"", response, "\",\"l2topserversServerTime\"")).getTime();
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + catch (ParseException e)
- + {
- + e.printStackTrace();
- + }
- +
- + }
- + break;
- +
- + case 7:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Integer.parseInt(VoteUtil.between("\"status\":\"", response, "\",\"server_time\"")) == 1 ? true : false;
- + if(isVoted) {
- + try
- + {
- + voteSiteTime = format.parse(VoteUtil.between("\"date\":\"", response, "\",\"status\"")).getTime();
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + catch (ParseException e)
- + {
- + e.printStackTrace();
- + }
- + }
- + break;
- +
- + case 8:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Boolean.parseBoolean(VoteUtil.between("\"is_voted\":", response, ",\"vote_time\""));
- + if(isVoted) {
- + try
- + {
- + voteSiteTime = (Long.parseLong(VoteUtil.between("\"vote_time\":", response, ",\"server_time\"")))*1000;
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + catch (Exception e)
- + {
- + // TODO Auto-generated catch block
- + e.printStackTrace();
- + }
- + }
- + break;
- +
- + case 9:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Boolean.parseBoolean(VoteUtil.between("\"isVoted\": ", response, ",\"voteTime\""));
- + if(isVoted) {
- + voteSiteTime = Long.parseLong(VoteUtil.between("\"voteTime\": \"", response, "\",\"serverTime\""));
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + break;
- +
- + case 10:
- + response = getResponse(getIndividualUrl(ordinal,ip,null),ordinal);
- + isVoted = Boolean.parseBoolean(response);
- + if(isVoted) {
- + voteSiteTime = VoteUtil.getTimeVotingSite(ordinal);
- + serverVoteTime = VoteUtil.getTimeVotingSite(ordinal);
- + }
- + break;
- +
- + }
- +
- + ivr.setIsVoted(isVoted);
- + ivr.setServerVoteTime(serverVoteTime);
- + ivr.setVoteSiteTime(voteSiteTime);
- + return ivr;
- + }
- +
- + public int getGlobalVotesResponse(int ordinal)
- + {
- + String response = "";
- + int totalVotes = 0;
- +
- + switch(ordinal)
- + {
- + case 0:
- + response = getResponse(getGlobalUrl(ordinal), ordinal);
- + response = VoteUtil.between("\"getVotes\":",response,"}");
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
- + break;
- +
- + case 1:
- + response = getResponse(getGlobalUrl(ordinal), ordinal);
- + response = VoteUtil.between("[server_votes]=>",response.replace(" ", ""),"[server_rank]");
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
- + break;
- +
- + case 2:
- + response = getResponse(getGlobalUrl(ordinal), ordinal);
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
- + break;
- +
- + case 3:
- + response = VoteUtil.getResponse(getGlobalUrl(ordinal), ordinal);
- + response = VoteUtil.between("Votes:</th><th><a class='votes'>", response, "</a></th></tr><tr><th>Clicks:");
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
- + break;
- +
- + case 4:
- + response = getResponse(getGlobalUrl(ordinal), ordinal);
- + response = VoteUtil.between("\"totalvotes\":",response,",\"status_code\"");
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
- + break;
- +
- + case 5:
- + String responseNetwork = getNetWorkResponse(getGlobalUrl(ordinal),ordinal);
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(responseNetwork) : -1;
- + break;
- +
- + /*case 6:
- +
- + break;*/
- +
- + case 7:
- + response = VoteUtil.getResponse(getGlobalUrl(ordinal), ordinal);
- + response = VoteUtil.between("nicas:</b> ", response, "<br /><br />");
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
- + break;
- +
- + case 8:
- + response = getResponse(getGlobalUrl(ordinal), ordinal);
- + response = VoteUtil.between("\"monthly_votes\":",response,"}}");
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
- + break;
- +
- + case 9:
- + response = getResponse(getGlobalUrl(ordinal), ordinal);
- + response = VoteUtil.between("\"totalVotes\":\"", response, "\",\"serverRank\"");
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
- + break;
- +
- + case 10:
- + response = getResponse(getGlobalUrl(ordinal), ordinal);
- + totalVotes = (!"".equals(response)) ? Integer.parseInt(response) : -1;
- + break;
- + }
- +
- +
- + return totalVotes;
- + }
- +
- + public static String getIndividualUrl(int ordinal,String ip,String AccountName)
- + {
- + String url = "";
- + switch(ordinal) {
- + case 0:
- + //l2.topgameserver.net
- + url = String.format("%sAPI_KEY=%s/getData/%s", Config.VOTE_LINK_TGS, Config.TGS_API_KEY,ip);
- + break;
- +
- + case 1:
- + //itopz.com
- + url = String.format("%s%s/%s/%s", Config.VOTE_LINK_ITOPZ,Config.ITOPZ_API_KEY,Config.ITOPZ_SRV_ID,ip);
- + break;
- +
- + case 2:
- + //l2top.co
- + url = String.format("%sVoteCheck.php?id=%s&ip=%s", Config.VOTE_LINK_TOP_CO,Config.TOP_CO_SRV_ID,ip);
- + break;
- +
- + case 3:
- + //l2votes.com
- + url = String.format("%sapi.php?apiKey=%s&ip=%s", Config.VOTE_LINK_VTS,Config.VTS_API_KEY,ip);
- + break;
- +
- + case 4:
- + //hopzone.net
- + url = String.format("%svote?token=%s&ip_address=%s",Config.VOTE_LINK_HZ,Config.HZ_API_KEY,ip);
- + break;
- +
- + case 5:
- + //l2network.eu
- + //first Method
- + //url = String.format("apiKey=%s&type=%s&player=%s",Config.VOTE_NETWORK_API_KEY,2,AccountName);
- + //second method
- + url = String.format("https://l2network.eu/index.php?a=in&u=%s&ipc=%s", Config.VOTE_NETWORK_USER_NAME,ip);
- + break;
- +
- + case 6:
- + //l2topservers.com
- + url = String.format("%stoken=%s&ip=%s", Config.VOTE_LINK_TSS,Config.TSS_API_TOKEN,ip);
- + break;
- +
- + case 7:
- + //top.l2jbrasil.com
- + url = String.format("%susername=%s&ip=%s&type=json",Config.BRASIL_VOTE_LINK,Config.BRASIL_USER_NAME,ip);
- + break;
- +
- + case 8:
- + //mmotop
- + url = String.format("%s%s/%s", Config.VOTE_LINK_MMOTOP,Config.MMOTOP_API_KEY,ip);
- + break;
- +
- + case 9:
- + //topzone.com
- + url = String.format("%svote?token=%s&ip=%s", Config.VOTE_LINK_TZ,Config.TZ_API_KEY,ip);
- + break;
- +
- + case 10:
- + //l2servers.com
- + 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);
- + break;
- + }
- +
- + return url;
- + }
- +
- + public String getGlobalUrl(int ordinal)
- + {
- + String url = "";
- +
- + switch(ordinal) {
- + case 0:
- + //l2.topgameserver.net
- + url = String.format("%sAPI_KEY=%s/getData", Config.VOTE_LINK_TGS,Config.TGS_API_KEY);
- + break;
- +
- + case 1:
- + //itopz.com
- + url = String.format("%s%s/%s", Config.VOTE_LINK_ITOPZ,Config.ITOPZ_API_KEY,Config.ITOPZ_SRV_ID);
- + break;
- +
- + case 2:
- + //l2top.co
- + url = String.format("%sVoteCheck_Total.php?id=%s", Config.VOTE_LINK_TOP_CO,Config.TOP_CO_SRV_ID);
- + break;
- +
- + case 3:
- + //l2votes.com
- + url = String.format("%sserverPage.php?sid=%s",Config.VOTE_LINK_VTS,Config.VTS_SID);
- + break;
- +
- + case 4:
- + //hopzone.net
- + url = String.format("%svotes?token=%s", Config.VOTE_LINK_HZ,Config.HZ_API_KEY);
- + break;
- +
- + case 5:
- + //l2network.eu
- + url = String.format("apiKey=%s&type=%s&player=",Config.VOTE_NETWORK_API_KEY,1);
- + break;
- +
- + /*case 6:
- + //l2topservers
- + return String.format("%sAPI_KEY=%s/getData", Config.VOTE_LINK_TGS,Config.TGS_API_KEY);
- + break;*/
- +
- + case 7:
- + //top.l2jbrasil.com
- + url = String.format("https://top.l2jbrasil.com/index.php?a=stats&u=%s",Config.BRASIL_USER_NAME);
- + break;
- +
- + case 8:
- + //mmotop.eu/l2/
- + url = String.format("%s%s/info/", Config.VOTE_LINK_MMOTOP,Config.MMOTOP_API_KEY);
- + break;
- +
- + case 9:
- + //l2topzone.com
- + url = String.format("%sserver_%s/getServerData", Config.VOTE_LINK_TZ,Config.TZ_API_KEY);
- + break;
- +
- + case 10:
- + //l2servers.com
- + url = String.format("%syearlyvotes.php?server_id=%s", Config.VOTE_LINK_SERVERS,Config.SERVERS_SRV_ID);
- + break;
- + }
- +
- + return url;
- + }
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteManager.java b/java/org/l2jmobius/gameserver/votesystem/VoteManager.java
- new file mode 100644
- index 0000000..fd6ece8
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/VoteManager.java
- @@ -0,0 +1,361 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +import java.util.HashSet;
- +import java.util.Iterator;
- +import java.util.Map;
- +import java.util.Optional;
- +import java.util.Set;
- +import java.util.concurrent.ConcurrentHashMap;
- +import java.util.concurrent.ScheduledFuture;
- +import java.util.stream.Collectors;
- +
- +import org.l2jmobius.Config;
- +import org.l2jmobius.commons.concurrent.ThreadPool;
- +import org.l2jmobius.gameserver.model.World;
- +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
- +import org.l2jmobius.gameserver.network.GameClient;
- +import org.l2jmobius.gameserver.network.SystemMessageId;
- +import org.l2jmobius.gameserver.network.serverpackets.ItemList;
- +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
- +import org.l2jmobius.gameserver.util.Broadcast;
- +
- +public class VoteManager extends VoteHandler
- +{
- + private ScheduledFuture<?> _saveGlobalVotes;
- + private ScheduledFuture<?> _updateIndividualVotes;
- + private ScheduledFuture<?> _cleanInnecesaryIndividualVotes;
- + private ScheduledFuture<?> _autoGlobalVotesReward;
- +
- + private HashSet<IndividualVote> _votes;
- + private Map<String,IndividualVote[]> _foundVoters;
- + private GlobalVote[] _globalVotes = new GlobalVote[VoteSitesEnum.values().length];
- +
- + public VoteManager() {
- + loadVotes();
- + loadGlobalVotes();
- + _foundVoters = new ConcurrentHashMap<>();
- + checkAllResponseGlobalVotes();
- + stopAutoTasks();
- +
- + if(Config.ENABLE_INDIVIDUAL_VOTE && Config.ENABLE_VOTE_SYSTEM) {
- + _cleanInnecesaryIndividualVotes = ThreadPool.scheduleAtFixedRate(new AutoCleanInnecesaryIndividualVotesTask(), 30000, Config.NEXT_TIME_TO_AUTO_CLEAN_INECESARY_VOTES);
- + _updateIndividualVotes = ThreadPool.scheduleAtFixedRate(new AutoUpdateIndividualVotesTask(), 30000, Config.NEXT_TIME_TO_AUTO_UPDATE_INDIVIDUAL_VOTES);
- + }
- + if(Config.ENABLE_GLOBAL_VOTE && Config.ENABLE_VOTE_SYSTEM) {
- + _autoGlobalVotesReward = ThreadPool.scheduleAtFixedRate(new AutoGlobalVoteRewardTask(), 10000, Config.NEXT_TIME_TO_CHECK_AUTO_GLOBAL_VOTES_REWARD);
- + _saveGlobalVotes = ThreadPool.scheduleAtFixedRate(new AutoSaveGlobalVotesTask(), 30000, Config.NEXT_TIME_TO_AUTO_UPDATE_TOTAL_VOTE);
- + }
- + }
- +
- + private void stopAutoTasks() {
- + if(_saveGlobalVotes != null) {
- + _saveGlobalVotes.cancel(true);
- + _saveGlobalVotes = null;
- + }
- + if(_updateIndividualVotes != null) {
- + _updateIndividualVotes.cancel(true);
- + _updateIndividualVotes = null;
- + }
- + if(_cleanInnecesaryIndividualVotes != null) {
- + _cleanInnecesaryIndividualVotes.cancel(true);
- + _cleanInnecesaryIndividualVotes = null;
- + }
- + if(_autoGlobalVotesReward != null) {
- + _autoGlobalVotesReward.cancel(true);
- + _autoGlobalVotesReward = null;
- + }
- + }
- +
- + public void getReward(PlayerInstance player, int ordinalSite) {
- + String ip = existIp(player);
- + if(ip == null) {
- + return;
- + }
- + IndividualVoteResponse ivr = getIndividualVoteResponse(ordinalSite,ip,player.getAccountName());
- + if(!ivr.getIsVoted()) {
- + player.sendMessage(String.format("You haven't vote on %s yet!", VoteSiteXml.getInstance().getSiteName(ordinalSite)));
- + return;
- + }
- + IndividualVote iv = new IndividualVote(ip,ivr.getServerVoteTime(),ivr.getVoteSiteTime(),ordinalSite,true);
- + if(!checkIndividualAvailableVote(player,ordinalSite)) {
- + player.sendMessage(String.format("You can get the reward again on %s at %s", VoteSiteXml.getInstance().getSiteName(ordinalSite),getTimeRemainingWithSampleFormat(player,ordinalSite)));
- + return;
- + }
- + _votes.add(iv);
- + IndividualVote[] aiv;
- + if(!_foundVoters.containsKey(ip)) {
- + Set<IndividualVote> ivts = _votes.stream().filter(st -> st.getVoterIp().equalsIgnoreCase(iv.getVoterIp())).collect(Collectors.toSet());
- + aiv = new IndividualVote[VoteSitesEnum.values().length];
- + if(ivts.size()>1) {
- + ivts.forEach(x -> {
- + aiv[x.getVoteSite()] = x;
- + });
- + _foundVoters.put(ip, aiv);
- + }else {
- + aiv[ordinalSite] = iv;
- + _foundVoters.put(ip, aiv);
- + }
- + }else {
- + aiv = _foundVoters.get(ip);
- + aiv[ordinalSite] = iv;
- + _foundVoters.replace(ip, aiv);
- + }
- + for(Reward reward : VoteSiteXml.getInstance().getRewards(ordinalSite)) {
- + player.getInventory().addItem("VoteSystem", reward.getItemId(), reward.getItemCount(), player, null);
- + player.sendPacket(new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S).addItemName(reward.getItemId()).addInt(reward.getItemCount()));
- + }
- + player.sendMessage(String.format("%s: Thank you for voting for our server, your reward has been delivered.", VoteSiteXml.getInstance().getSiteName(ordinalSite)));
- + player.sendPacket(new ItemList(player, true));
- +
- + }
- +
- + public boolean checkIndividualAvailableVote(PlayerInstance player, int ordinalSite) {
- + String ip = existIp(player);
- + //If player has registered almost 1 vote
- + if(_foundVoters.containsKey(ip)) {
- + IndividualVote[] ivs=_foundVoters.get(ip);
- + if(ivs[ordinalSite] == null)
- + return true;
- + if(ivs[ordinalSite] != null) {
- + IndividualVote iv = ivs[ordinalSite];
- + if(getTimeRemaining(iv)<0 || !iv.getAlreadyRewarded()) {
- + return true;
- + }
- + }
- + }
- +
- + //if the player hasn't registered a vote or after the initial charge
- + Optional<IndividualVote> iv = _votes.stream().filter(s -> s.getVoterIp().equalsIgnoreCase(ip)).filter(y -> y.getVoteSite() == ordinalSite).findFirst();
- + if(iv.isEmpty()) {
- + return true;
- + }
- + if(getTimeRemaining(iv.get()) <0 || !iv.get().getAlreadyRewarded()) {
- + return true;
- + }
- + return false;
- +
- + }
- +
- + public long getTimeRemaining(IndividualVote iv) {
- + long timeRemaining = 0L;
- + timeRemaining = iv.getVotingTimeSite() + Config.INTERVAL_TO_NEXT_VOTE - (System.currentTimeMillis() - (System.currentTimeMillis() - VoteUtil.getTimeVotingSite(iv.getVoteSite())));
- + return timeRemaining;
- + }
- +
- + public String getTimeRemainingWithSampleFormat(PlayerInstance player, int ordinalSite) {
- + String ip = existIp(player);
- + String timeRemainingWithSampleFormat ="";
- + if(_foundVoters.containsKey(ip)) {
- + IndividualVote[] ivs=_foundVoters.get(ip);
- + if(ivs[ordinalSite] != null) {
- + IndividualVote iv = ivs[ordinalSite];
- + long timeRemaining = getTimeRemaining(iv);
- + if(timeRemaining>0 && iv.getAlreadyRewarded()) {
- + timeRemainingWithSampleFormat = CalculateTimeRemainingWithSampleDateFormat(timeRemaining);
- + return timeRemainingWithSampleFormat;
- + }
- + }
- + }
- + Optional<IndividualVote> iv = _votes.stream().filter(s -> s.getVoterIp().equalsIgnoreCase(ip)).filter(y -> y.getVoteSite() == ordinalSite).findFirst();
- + if(!iv.isEmpty()) {
- + if(getTimeRemaining(iv.get()) > 0 && iv.get().getAlreadyRewarded()) {
- + long timeRemaining = getTimeRemaining(iv.get());
- + timeRemainingWithSampleFormat = CalculateTimeRemainingWithSampleDateFormat(timeRemaining);
- + return timeRemainingWithSampleFormat;
- + }
- + }
- +
- + return timeRemainingWithSampleFormat;
- + }
- +
- + public String CalculateTimeRemainingWithSampleDateFormat(long timeRemaining) {
- + long t = timeRemaining/1000;
- + int hours = Math.round((t/3600%24));
- + int minutes = Math.round((t/60)%60);
- + int seconds = Math.round(t%60);
- + return String.format("%sH:%sm:%ss", hours,minutes,seconds);
- + }
- +
- + public String existIp(PlayerInstance p) {
- +
- + GameClient client = p.getClient();
- + if(client.getConnectionAddress() != null && client.getPlayer() != null && !client.isDetached()) {
- + try
- + {
- + return client.getConnectionAddress().getHostAddress();
- + }
- + catch (Exception e)
- + {
- + e.printStackTrace();
- + }
- + }
- + return null;
- +
- + }
- +
- + public final void loadVotes() {
- + _votes = IndividualVotesDatabase.getInstance().getVotesDB();//.getInstance().getVotesDB();
- + }
- + protected void loadGlobalVotes(){
- + _globalVotes = GlobalVotesDatabase.getInstance().getGlobalVotes();
- + }
- + protected void saveVotes() {
- + IndividualVotesDatabase.getInstance().SaveVotes(_votes);
- + }
- +
- + protected void AutoGlobalVoteReward() {
- + HashSet<String> ipList = new HashSet<>();
- + for(VoteSitesEnum vs : VoteSitesEnum.values()) {
- + new Thread(() -> {
- + checkNewUpdate(vs.ordinal());
- + if(_globalVotes[vs.ordinal()].getCurrentVotes() >= _globalVotes[vs.ordinal()].getVotesLastReward() + Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD) {
- + _globalVotes[vs.ordinal()].setVotesLastReward(_globalVotes[vs.ordinal()].getVotesLastReward() + Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD);
- + for(PlayerInstance player : World.getInstance().getPlayers()) {
- + String ip = existIp(player);
- + if(ip == null) {
- + continue;
- + }
- + if(ipList.contains(ip)) {
- + continue;
- + }
- + for(Reward reward : VoteSiteXml.getInstance().getRewards(11)) {
- + player.getInventory().addItem("VoteSystem: ", reward.getItemId(), reward.getItemCount(), player, null);
- + player.sendPacket(new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S).addItemName(reward.getItemId()).addInt(reward.getItemCount()));
- + }
- + ipList.add(ip);
- + player.sendPacket(new ItemList(player, true));
- + }
- + Broadcast.toAllOnlinePlayers(VoteUtil.Sites[vs.ordinal()]+": All players has been rewarded, please check your inventory", true);
- + }else {
- + String encourage ="";
- + int nextReward = _globalVotes[vs.ordinal()].getVotesLastReward() + Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD;
- + 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() );
- + Broadcast.toAllOnlinePlayers(encourage, true);
- + }
- + }).start();
- +
- + }
- + }
- +
- + protected void AutoSaveGlobalVotes() {
- + GlobalVotesDatabase.getInstance().saveGlobalVotes(_globalVotes);
- + }
- +
- + protected synchronized void AutoUpdateIndividualVotes() {
- + IndividualVotesDatabase.getInstance().SaveVotes(_votes);
- + }
- +
- + protected synchronized void AutoCleanInnecesaryIndividualVotes() {
- + HashSet<IndividualVote> removeVotes= new HashSet<>();
- + Iterator<IndividualVote> iv = _votes.iterator();
- + while(iv.hasNext()){
- + IndividualVote individualvote = iv.next();
- + if(getTimeRemaining(individualvote) < 0) {
- + removeVotes.add(individualvote);
- + iv.remove();
- + if(_foundVoters.containsKey(individualvote.getVoterIp())) {
- + if(_foundVoters.get(individualvote.getVoterIp())[individualvote.getVoteSite()] != null) {
- + _foundVoters.get(individualvote.getVoterIp())[individualvote.getVoteSite()] = null;
- + }
- + }
- + }
- + }
- + IndividualVotesDatabase.getInstance().DeleteVotes(removeVotes);
- + }
- +
- + public void checkAllResponseGlobalVotes() {
- + for(VoteSitesEnum vs : VoteSitesEnum.values()) {
- + new Thread(()-> {
- + checkNewUpdate(vs.ordinal());
- + });
- + }
- + }
- +
- + public void checkNewUpdate(int ordinalSite) {
- + int globalVotesResponse = getGlobalVotesResponse(ordinalSite);
- + if(globalVotesResponse == -1) {
- + return;
- + }
- + _globalVotes[ordinalSite].setCurrentVotes(globalVotesResponse);
- + int last = globalVotesResponse - Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD;
- + if(last <0 ) {
- + _globalVotes[ordinalSite].setVotesLastReward(0);
- + return;
- + }
- + if((_globalVotes[ordinalSite].getVotesLastReward() + Config.GLOBAL_VOTES_AMOUNT_TO_NEXT_REWARD) < globalVotesResponse) {
- + _globalVotes[ordinalSite].setVotesLastReward(globalVotesResponse);
- + return;
- + }
- + }
- +
- + public void Shutdown() {
- + AutoSaveGlobalVotes();
- + AutoCleanInnecesaryIndividualVotes();
- + AutoUpdateIndividualVotes();
- + }
- +
- + protected class AutoGlobalVoteRewardTask implements Runnable {
- +
- + /* (non-Javadoc)
- + * @see java.lang.Runnable#run()
- + */
- + @Override
- + public void run()
- + {
- + AutoGlobalVoteReward();
- +
- + }
- +
- + }
- +
- + protected class AutoSaveGlobalVotesTask implements Runnable {
- +
- + /* (non-Javadoc)
- + * @see java.lang.Runnable#run()
- + */
- + @Override
- + public void run()
- + {
- + AutoSaveGlobalVotes();
- +
- + }
- +
- + }
- +
- + protected class AutoUpdateIndividualVotesTask implements Runnable {
- +
- + /* (non-Javadoc)
- + * @see java.lang.Runnable#run()
- + */
- + @Override
- + public void run()
- + {
- + AutoUpdateIndividualVotes();
- +
- + }
- +
- + }
- +
- + protected class AutoCleanInnecesaryIndividualVotesTask implements Runnable {
- +
- + /* (non-Javadoc)
- + * @see java.lang.Runnable#run()
- + */
- + @Override
- + public void run()
- + {
- + AutoCleanInnecesaryIndividualVotes();
- +
- + }
- +
- + }
- +
- + public static VoteManager getInatance() {
- + return SingleHolder.INSTANCE;
- + }
- +
- + private static class SingleHolder {
- + protected static final VoteManager INSTANCE = new VoteManager();
- + }
- +
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteSite.java b/java/org/l2jmobius/gameserver/votesystem/VoteSite.java
- new file mode 100644
- index 0000000..3eebfce
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/VoteSite.java
- @@ -0,0 +1,35 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +
- +import java.util.ArrayList;
- +import java.util.List;
- +
- +public class VoteSite
- +{
- + private int _siteOrdinal;
- + private String _siteName;
- + private List<Reward> _rewards = new ArrayList<>();
- + public VoteSite() {
- +
- + }
- + public void setSiteOrdinal(int siteOrdinal) {
- + _siteOrdinal = siteOrdinal;
- + }
- + public void setSiteName(String siteName) {
- + _siteName = siteName;
- + }
- + public void setRewardList(List<Reward> rewards) {
- + for(Reward r : rewards)
- + _rewards.add(r);
- + }
- + public int getSiteOrdinal() {
- + return _siteOrdinal;
- + }
- + public String getSiteName() {
- + return _siteName;
- + }
- + public List<Reward> getRewardList(){
- + return _rewards;
- + }
- +
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.java b/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.java
- new file mode 100644
- index 0000000..8f12b3a
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.java
- @@ -0,0 +1,66 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +import java.io.File;
- +import java.util.Collection;
- +import java.util.HashMap;
- +import java.util.Map;
- +
- +import org.l2jmobius.commons.util.IXmlReader;
- +import org.w3c.dom.Document;
- +import org.w3c.dom.NamedNodeMap;
- +
- +/**
- + * @author l2.topgameserver.net
- + *
- + */
- +public class VoteSiteXml implements IXmlReader
- +{
- +
- + private final Map<Integer,VoteSite> _voteSites = new HashMap<>();
- +
- + protected VoteSiteXml() {
- + load();
- + }
- +
- + @Override
- + public void load()
- + {
- + parseDatapackFile("data/votesystem.xml");
- + LOGGER.info("Loaded {} reward sites");
- + }
- +
- +
- + @Override
- + public void parseDocument(Document doc, File path)
- + {
- + forEach(doc, "list", listNode -> {
- + forEach(listNode, "votesite", votesiteNode -> {
- + final VoteSite votesite = new VoteSite();
- + final NamedNodeMap attrs = votesiteNode.getAttributes();
- + votesite.setSiteOrdinal(parseInteger(attrs,"ordinal"));
- + votesite.setSiteName(parseString(attrs,"name"));
- + forEach(votesiteNode,"items", itemsNode -> forEach(itemsNode,"item",itemNode -> votesite.getRewardList().add(new Reward(parseAttributes(itemNode)))));
- + _voteSites.put(votesite.getSiteOrdinal(),votesite);
- + });
- + });
- + }
- +
- + public String getSiteName(int ordinal) {
- + return _voteSites.get(ordinal).getSiteName();
- + }
- +
- + public Collection<Reward> getRewards(int ordinal){
- + return _voteSites.get(ordinal).getRewardList();
- + }
- +
- + public static final VoteSiteXml getInstance()
- + {
- + return SingletonHolder.INSTANCE;
- + }
- +
- + private static final class SingletonHolder
- + {
- + protected static final VoteSiteXml INSTANCE = new VoteSiteXml();
- + }
- +
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.javs b/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.javs
- new file mode 100644
- index 0000000..e69de29
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/VoteSiteXml.javs
- diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteSitesEnum.java b/java/org/l2jmobius/gameserver/votesystem/VoteSitesEnum.java
- new file mode 100644
- index 0000000..0c46d29
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/VoteSitesEnum.java
- @@ -0,0 +1,16 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +public enum VoteSitesEnum
- +{
- + L2TOPGAMESERVER,
- + ITOPZ,
- + L2TOPCO,
- + L2VOTES,
- + HOPZONE,
- + L2NETWORK,
- + L2TOPSERVERS,
- + TOPL2JBRASIL,
- + MMOTOP,
- + TOPZONE,
- + L2SERVERS,
- +}
- \ No newline at end of file
- diff --git a/java/org/l2jmobius/gameserver/votesystem/VoteUtil.java b/java/org/l2jmobius/gameserver/votesystem/VoteUtil.java
- new file mode 100644
- index 0000000..4bd79fe
- --- /dev/null
- +++ b/java/org/l2jmobius/gameserver/votesystem/VoteUtil.java
- @@ -0,0 +1,112 @@
- +package org.l2jmobius.gameserver.votesystem;
- +
- +import java.io.BufferedReader;
- +import java.io.InputStreamReader;
- +import java.net.HttpURLConnection;
- +import java.net.URL;
- +import java.time.LocalDateTime;
- +import java.time.ZoneId;
- +import java.time.ZonedDateTime;
- +import java.util.logging.Logger;
- +
- +
- +/**
- + * @author l2.topgameserver.net
- + *
- + */
- +public final class VoteUtil
- +{
- + public static final Logger LOGGER = Logger.getLogger(VoteUtil.class.getName());
- +
- + private static String voteTimeZones[] = {
- + "topgameserver.net=Europe/Berlin",
- + "itopz.com=America/New_York",
- + "l2top.co=Europe/London",
- + "l2votes.com=GMT",
- + "hopzone.net=Europe/Athens",
- + "l2network.eu=America/Chicago",
- + "l2topservers.com=Europe/Athens",
- + "top.l2jbrasil.com=America/Sao_Paulo",
- + "mmotop.eu=America/Chicago",
- + "l2topzone.com=America/Chicago",
- + "l2servers.com=America/Chicago",
- + };
- +
- + public static final long getTimeVotingSite(int ordinalSite) {
- + LocalDateTime ldt = LocalDateTime.now(ZoneId.of(voteTimeZones[ordinalSite].split("=")[1]));
- + ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
- + long millis = zdt.toInstant().toEpochMilli();
- + return millis;
- + }
- +
- + public static final String Sites[] =
- + {
- + "L2.TopGameServer.net",
- + "ITopZ.com",
- + "L2Top.co",
- + "L2Votes.com",
- + "L2.Hopzone.net",
- + "L2Network.eu",
- + "L2TopServers.com",
- + "top.l2jbrasil.com",
- + "MMOTOP.eu",
- + "L2Topzone.com",
- + "L2Servers.com"
- + };
- +
- + public static final String getResponse(String Url, int ordinal)
- + {
- +
- + try
- + {
- + int responseCode = 0;
- + URL objUrl = new URL(Url);
- + HttpURLConnection con = (HttpURLConnection) objUrl.openConnection();
- + con.setRequestMethod("GET");
- + con.setRequestProperty("User-Agent", "Mozilla/5.0");
- + con.setConnectTimeout(5000);
- + responseCode = con.getResponseCode();
- + if (responseCode == HttpURLConnection.HTTP_OK) {
- +
- + String inputLine;
- + StringBuffer response = new StringBuffer();
- + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
- + while ((inputLine = in.readLine()) != null) {
- + if(ordinal == 3) {
- + if(inputLine.contains("Votes:")) {
- + response.append(inputLine);
- + break;
- + }
- + }
- + if(ordinal == 7){
- + if(inputLine.contains("<b>Entradas ")) {
- + response.append(inputLine);
- + break;
- + }
- + }
- + }
- + in.close();
- + return response.toString();
- + }
- +
- + }
- + catch (Exception e)
- + {
- + LOGGER.info(VoteUtil.Sites[ordinal]+ " Say: An error ocurred ");
- + return "";
- + }
- +
- + return "";
- + }
- +
- + public static final String between(String p1, String str, String p2){
- + String returnValue = "";
- + int i1 = str.indexOf(p1);
- + int i2 = str.indexOf(p2);
- + if(i1 != -1 && i2 != -1){
- + i1 = i1+p1.length();
- + returnValue = str.substring(i1,i2);
- + }
- + return returnValue;
- + }
- +}
- \ No newline at end of file
Add Comment
Please, Sign In to add comment