As l2topzone.com updated it's source and hopzone's vote reward does not work for topzone too here is a vote reward,
package net.sf.l2j.gameserver.model;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Collection;
import javolution.util.FastList;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.Announcements;
import net.sf.l2j.gameserver.GmListTable;
import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.serverpackets.ExShowScreenMessage;
import net.sf.l2j.gameserver.serverpackets.ExShowScreenMessage.SMPOS;
public class TopzoneVoteRewardHandler
{
private int lastVoteCount = 0;
private int initialCheck = 60 * 1000;
private int delayForCheck = 300 * 1000;
private int votesForReward = 5;
private int maxRewardStack = 500;
@SuppressWarnings("synthetic-access")
private TopzoneVoteRewardHandler()
{
System.out.println("Topzone Vote Reward System activated.");
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), initialCheck, delayForCheck);
}
private class AutoReward implements Runnable
{
public void run()
{
System.out.println("Topzone Vote Count Check.");
if (Config.TOPZONE_VOTE_REWARD1_ID == 0 || Config.TOPZONE_VOTE_REWARD1_COUNT == 0)
{
GmListTable.broadcastMessageToGMs("The rewards aren't Identified. Please take a look.");
return;
}
int newVoteCount = getVotes(Config.TOPZONE_VOTE_HTML_PATCH);
System.out.println("newVoteCount:"+newVoteCount);
System.out.println("getLastVoteCount:"+getLastVoteCount());
if (newVoteCount != 0 && getLastVoteCount() != 0 && newVoteCount >= getLastVoteCount() + votesForReward)
{
FastList<InetAddress> ip = new FastList<InetAddress>();
Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
for (L2PcInstance player : pls)
{
if (player != null)
{
L2ItemInstance item1 = player.getInventory().getItemByItemId(Config.TOPZONE_VOTE_REWARD1_ID);
if (item1 == null || item1.getCount() < maxRewardStack)
{
InetAddress ipc = player.getClient().getConnection().getSocketChannel().socket().getInetAddress();
if(ip.contains(ipc))
continue;
ip.add(ipc);
player.addItem("reward", Config.TOPZONE_VOTE_REWARD1_ID, Config.TOPZONE_VOTE_REWARD1_COUNT, player, true);
player.sendMessage("Keep Voting For Us.Rewards given.");
}
}
}
setLastVoteCount(getLastVoteCount()+ votesForReward);
}
Announcements.getInstance().announceToAll("L2Godrich TopZone : " + newVoteCount + " Votes.");
Announcements.getInstance().announceToAll("Next reward will be on : " + (getLastVoteCount()+ votesForReward) + " Votes.");
Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
if (getLastVoteCount() == 0)
{
setLastVoteCount(newVoteCount);
}
}
}
static int getVotes(String urlString)
{
String htmlText = "";
boolean startAdd = false;
int voteCount = 0;
boolean ok = false;
try
{
URL pageToDisplay;
pageToDisplay = new URL(urlString);
URLConnection conn = pageToDisplay.openConnection();
conn.connect();
InputStream in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
htmlText = "";
while(!ok)
{
String newLine = br.readLine();
if (newLine == null)
{
ok = true;
}
else
{
if (htmlText.length() < 110000)
{
if (!startAdd && newLine.indexOf(">Votes<") > 0)
startAdd = true;
if (startAdd && newLine.indexOf(">Uptime<") > 0)
startAdd = false;
if (startAdd)
htmlText = htmlText+newLine;
if (htmlText.length() > 10 && !startAdd)
ok = true;
}
}
}
br.close();
}
catch (MalformedURLException mfe)
{
}
catch (IOException e)
{
}
htmlText = htmlText.substring(htmlText.indexOf("font-size")+ 31);
htmlText = htmlText.substring(0,htmlText.indexOf("</font>"));
try
{
voteCount = Integer.parseInt(htmlText);
}
catch (NumberFormatException a)
{
voteCount = 0;
}
return voteCount;
}
private void setLastVoteCount(int voteCount)
{
lastVoteCount = voteCount;
}
private int getLastVoteCount()
{
return lastVoteCount;
}
public static TopzoneVoteRewardHandler getInstance()
{
return SingletonHolder._instance;
}
@SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final TopzoneVoteRewardHandler _instance = new TopzoneVoteRewardHandler();
}
}
Config.java
public static boolean TOPZONE_VOTE_ENABLE;
public static String TOPZONE_VOTE_HTML_PATCH;
public static int TOPZONE_VOTE_REWARD1_ID;
public static int TOPZONE_VOTE_REWARD2_ID;
public static int TOPZONE_VOTE_REWARD1_COUNT;
public static int TOPZONE_VOTE_REWARD2_COUNT;
TOPZONE_VOTE_ENABLE = Boolean.parseBoolean(Customs.getProperty("TopzoneVoteEnable", "False"));
PROTECTED_GAMESERVER = Boolean.parseBoolean(Customs.getProperty("ProtectGameServerWithPassword", "False"));
TOPZONE_VOTE_HTML_PATCH = Customs.getProperty("TopzoneVoteHtmlPatch", "Null");
TOPZONE_VOTE_REWARD1_COUNT = Integer.parseInt(Customs.getProperty("TopzoneVoteReward1Count", "1000"));
TOPZONE_VOTE_REWARD2_COUNT = Integer.parseInt(Customs.getProperty("TopzoneVoteReward2Count", "1000"));
TOPZONE_VOTE_REWARD1_ID = Integer.parseInt(Customs.getProperty("TopzoneVoteReward1Id", "57"));
TOPZONE_VOTE_REWARD2_ID = Integer.parseInt(Customs.getProperty("TopzoneVoteReward2Id", "57"));
Do not forget to register this on gameserver.
Credits: me
PS: it's tested.