Index: java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardHandler.java
===================================================================
--- java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardHandler.java (revision 0)
+++ java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardHandler.java (revision 0)
@@ -0,0 +1,162 @@
+package com.l2jserver.gameserver.instancemanager;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.Announcements;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.L2ItemInstance;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+
+public class AutoVoteRewardHandler
+{
+ private final String MAXVOTES = "http://maxvotes.com/sinfo/XXX.html";
+ // 60 * 1000(1000milliseconds = 1 second) = 60seconds
+ private final int initialCheck = 60 * 1000;
+ // 1800 * 1000(1000milliseconds = 1 second) = 1800seconds = 30minutes
+ private final int delayForCheck = 1800 * 1000;
+ private final int[] itemId = { 3500, 5000, 6500 };
+ private final int[] itemCount = { 1, 5, 4 };
+ private final int[] maxStack = { 1, 1, 1 };
+ private final int votesRequiredForReward = 10;
+ // do not change
+ private int lastVoteCount = 0;
+
+ private AutoVoteRewardHandler()
+ {
+ System.out.println("Vote Reward System Initiated.");
+ ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), initialCheck, delayForCheck);
+ }
+
+ private class AutoReward implements Runnable
+ {
+ public void run()
+ {
+ int votes = getVotes();
+ System.out.println("Server Votes: " + votes);
+ if (votes != 0 && getLastVoteCount() != 0 && votes >= getLastVoteCount() + votesRequiredForReward)
+ {
+ Connection con = null;
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("" +
+ "SELECT" +
+ " c.charId," +
+ " c.char_name" +
+ "FROM" +
+ " characters AS c" +
+ "LEFT JOIN" +
+ " accounts AS a" +
+ "ON" +
+ " c.account_name = a.login" +
+ "WHERE" +
+ " c.online > 0" +
+ "GROUP BY" +
+ " a.lastIP" +
+ "ORDER BY" +
+ " c.level" +
+ "DESC");
+ ResultSet rset = statement.executeQuery();
+ L2PcInstance player = null;
+ L2ItemInstance item = null;
+ while (rset.next())
+ {
+ player = L2World.getInstance().getPlayer(rset.getInt("charId"));
+ if (player != null && !player.getClient().isDetached())
+ {
+ for (int i = 0; i < itemId.length; i++)
+ {
+ item = player.getInventory().getItemByItemId(itemId[i]);
+ if (item == null || item.getCount() < maxStack[i])
+ player.addItem("reward", itemId[i], itemCount[i], player, true);
+ }
+ }
+ }
+ statement.close();
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ L2DatabaseFactory.close(con);
+ }
+
+ setLastVoteCount(getLastVoteCount() + votesRequiredForReward);
+ }
+ Announcements.getInstance().announceToAll("Server Votes: " + votes + " | Next Reward on " + (getLastVoteCount() + votesRequiredForReward) + " Votes.");
+ if (getLastVoteCount() == 0)
+ setLastVoteCount(votes);
+ }
+ }
+
+ private int getVotes()
+ {
+ URL url = null;
+ InputStreamReader isr = null;
+ BufferedReader in = null;
+ try
+ {
+ url = new URL(MAXVOTE);
+ isr = new InputStreamReader(url.openStream());
+ in = new BufferedReader(isr);
+ String inputLine;
+ while ((inputLine = in.readLine()) != null)
+ {
+ if (inputLine.contains("moreinfo_total_rank_text"))
+ return Integer.valueOf(inputLine.split(">")[2].replace("</div", ""));
+ }
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ try
+ {
+ in.close();
+ }
+ catch (IOException e)
+ {}
+ try
+ {
+ isr.close();
+ }
+ catch (IOException e)
+ {}
+ }
+ return 0;
+ }
+
+ private void setLastVoteCount(int voteCount)
+ {
+ lastVoteCount = voteCount;
+ }
+
+ private int getLastVoteCount()
+ {
+ return lastVoteCount;
+ }
+
+ public static AutoVoteRewardHandler getInstance()
+ {
+ return SingletonHolder._instance;
+ }
+
+ @SuppressWarnings("synthetic-access")
+ private static class SingletonHolder
+ {
+ protected static final AutoVoteRewardHandler _instance = new AutoVoteRewardHandler();
+ }
+}
Index: java/com/l2jserver/gameserver/GameServer.java
===================================================================
--- java/com/l2jserver/gameserver/GameServer.java (revision 4407)
+++ java/com/l2jserver/gameserver/GameServer.java (working copy)
@@ -83,6 +83,7 @@
import com.l2jserver.gameserver.idfactory.IdFactory;
import com.l2jserver.gameserver.instancemanager.AirShipManager;
import com.l2jserver.gameserver.instancemanager.AuctionManager;
+import com.l2jserver.gameserver.instancemanager.AutoVoteRewardHandler;
import com.l2jserver.gameserver.instancemanager.BoatManager;
import com.l2jserver.gameserver.instancemanager.CastleManager;
import com.l2jserver.gameserver.instancemanager.CastleManorManager;
@@ -406,6 +407,8 @@
if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
OfflineTradersTable.restoreOfflineTraders();
+ AutoVoteRewardHandler.getInstance();
+
if (Config.DEADLOCK_DETECTOR)
{
_deadDetectThread = new DeadLockDetector();
work with sites like MaxVotes
credits: Death, Codex
code source: l2jserver forum