Jump to content
  • 0

Auto Vote Reward System Problem:


Question

Posted

After some hours auto vote reward stop checking about votes any reason?

 

Here is the code:

 

 

package com.l2jfrozen.gameserver.handler;

 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
 
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
 
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.model.L2World;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.entity.Announcements;
import com.l2jfrozen.gameserver.powerpak.PowerPakConfig;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
 
/**
 * @author L2jFrozen <br>
 * <br>
 *         Network working with L2jFrozen AutoVoteReward: <br>
 *         Hopzone -> http://l2.hopzone.net/ <br>
 *         Topzone -> http://l2topzone.com/ <br>
 *         L2network -> http://l2network.eu/ <br>
 */
 
public class AutoVoteRewardHandler
{
protected static final Logger LOGGER = Logger.getLogger(AutoVoteRewardHandler.class);
 
protected List<String> already_rewarded;
 
private int _l2networkVotesCount = 0;
private int _hopzoneVotesCount = 0;
private int _topzoneVotesCount = 0;
protected List<String> _already_rewarded;
 
protected static boolean _l2network = false;
protected static boolean _topzone = false;
protected static boolean _hopzone = false;
 
private AutoVoteRewardHandler()
{
LOGGER.info("Vote Reward System Initiated.");
 
if (_hopzone)
{
int hopzone_votes = getHopZoneVotes();
 
if (hopzone_votes == -1)
{
hopzone_votes = 0;
}
 
setHopZoneVoteCount(hopzone_votes);
}
 
if (_l2network)
{
int l2network_votes = getL2NetworkVotes();
 
if (l2network_votes == -1)
{
l2network_votes = 0;
}
 
setL2NetworkVoteCount(l2network_votes);
}
 
if (_topzone)
{
int topzone_votes = getTopZoneVotes();
 
if (topzone_votes == -1)
{
topzone_votes = 0;
}
 
setTopZoneVoteCount(topzone_votes);
}
 
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), PowerPakConfig.VOTES_SYSYEM_INITIAL_DELAY, PowerPakConfig.VOTES_SYSYEM_STEP_DELAY);
}
 
protected class AutoReward implements Runnable
{
@SuppressWarnings("unused")
@Override
public void run()
{
final int minutes = (PowerPakConfig.VOTES_SYSYEM_STEP_DELAY / 1000) / 60;
 
if (_hopzone)
{
final int hopzone_votes = getHopZoneVotes();
 
if (hopzone_votes != -1)
{
LOGGER.info("Server votes on HopZone: " + hopzone_votes);
LOGGER.info("Votes needed for reward: " + (getHopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD) + "");
Announcements.getInstance().PartyAnnounce("Hopzone: Vote count is " + hopzone_votes + ".");
 
if (hopzone_votes != 0 && hopzone_votes >= getHopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD)
{
_already_rewarded = new ArrayList<>();
 
final Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
 
LOGGER.info("HopZone: All players got their reward ");
Announcements.getInstance().PartyAnnounce("Hopzone: All players got their reward.");
 
// L2ItemInstance item;
for (final L2PcInstance player : pls)
{
if (player != null && !player.isInOfflineMode() && player.isOnline() == 1)
{
if (player._active_boxes <= 1 || (player._active_boxes > 1 && checkSingleBox(player)))
{
 
final Set<Integer> items = PowerPakConfig.VOTES_REWARDS_LIST.keySet();
for (final Integer i : items)
{
// item = player.getInventory().getItemByItemId(i);
 
// TODO: check on maxstack for item
player.addItem("reward", i, PowerPakConfig.VOTES_REWARDS_LIST.get(i), player, true);
player.sendMessage("You have been rewarded for your votes, Thanks!");
 
}
 
}
}
}
setHopZoneVoteCount(hopzone_votes);
}
Announcements.getInstance().PartyAnnounce("Hopzone: We need " + (getHopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD) + " Votes to get rewards.");
// site web
Announcements.getInstance().PartyAnnounce("Server Site: " + PowerPakConfig.SERVER_WEB_SITE);
 
 
}
 
}
 
if (_topzone && _hopzone && PowerPakConfig.VOTES_SYSYEM_STEP_DELAY > 0)
{
try
{
Thread.sleep(PowerPakConfig.VOTES_SYSYEM_STEP_DELAY / 2);
}
catch (final InterruptedException e)
{
if (Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();
}
}
 
if (_topzone)
{
final int topzone_votes = getTopZoneVotes();
 
if (topzone_votes != -1)
{
LOGGER.info("Server votes on TopZone: " + topzone_votes);
LOGGER.info("Votes needed for Reward: " + (getTopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD) + "");
Announcements.getInstance().PartyAnnounce("Topzone: Votes count is " + topzone_votes + ".");
 
if (topzone_votes != 0 && topzone_votes >= getTopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD)
{
_already_rewarded = new ArrayList<>();
 
final Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
 
LOGGER.info("Topzone: All players got their reward ");
Announcements.getInstance().PartyAnnounce("Topzone: All players got their reward.");
 
// L2ItemInstance item;
for (final L2PcInstance player : pls)
{
if (player != null && !player.isInOfflineMode() && player.isOnline() == 1)
{
if (player._active_boxes <= 1 || (player._active_boxes > 1 && checkSingleBox(player)))
{
final Set<Integer> items = PowerPakConfig.VOTES_REWARDS_LIST.keySet();
for (final Integer i : items)
{
// item = player.getInventory().getItemByItemId(i);
 
// TODO: check on maxstack for item
player.addItem("reward", i, PowerPakConfig.VOTES_REWARDS_LIST.get(i), player, true);
player.sendMessage("You have been rewarded for your votes, Thanks!");
}
}
}
}
setTopZoneVoteCount(topzone_votes);
}
 
Announcements.getInstance().PartyAnnounce("Topzone: We need " + (getTopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD) + " Votes to get rewards.");
// site web
Announcements.getInstance().PartyAnnounce("Server Site: " + PowerPakConfig.SERVER_WEB_SITE);
}
}
 
if (_topzone && _hopzone && _l2network && PowerPakConfig.VOTES_SYSYEM_STEP_DELAY > 0)
{
try
{
Thread.sleep(PowerPakConfig.VOTES_SYSYEM_STEP_DELAY / 2);
}
catch (final InterruptedException e)
{
if (Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();
}
}
 
if (_l2network)
{
final int l2network_votes = getL2NetworkVotes();
 
if (l2network_votes != -1)
{
LOGGER.info("Server votes L2Network Votes: " + l2network_votes);
Announcements.getInstance().PartyAnnounce("L2Network: Votes count is " + l2network_votes + ".");
 
if (l2network_votes != 0 && l2network_votes >= getL2NetworkVoteCount() + PowerPakConfig.VOTES_FOR_REWARD)
{
already_rewarded = new ArrayList<>();
 
final Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
 
Announcements.getInstance().PartyAnnounce("L2Netowrk: All players got their reward.");
 
// L2ItemInstance item;
for (final L2PcInstance player : pls)
{
if (player != null && !player.isInOfflineMode() && player.isOnline() == 1)
{
if (player._active_boxes <= 1 || (player._active_boxes > 1 && checkSingleBox(player)))
{
final Set<Integer> items = PowerPakConfig.VOTES_REWARDS_LIST.keySet();
for (final Integer i : items)
{
// item = player.getInventory().getItemByItemId(i);
 
// TODO: check on maxstack for item
player.addItem("reward", i, PowerPakConfig.VOTES_REWARDS_LIST.get(i), player, true);
player.sendMessage("You have been rewarded for your votes, Thanks!");
}
}
}
}
setL2NetworkVoteCount(l2network_votes);
}
Announcements.getInstance().PartyAnnounce("L2Network: We need " + (getL2NetworkVoteCount() + PowerPakConfig.VOTES_FOR_REWARD) + " Votes to get rewards.");
// site web
Announcements.getInstance().PartyAnnounce("Server Site: " + PowerPakConfig.SERVER_WEB_SITE);
}
}
}
}
 
// Check boxes
protected boolean checkSingleBox(final L2PcInstance player)
{
 if (player == null)
           return false;
 
if (player.getClient() != null && player.getClient().getConnection() != null && !player.getClient().getConnection().isClosed() && player.isOnline() == 1 && !player.isInOfflineMode())
{
 
final String playerip = player.getClient().getConnection().getInetAddress().getHostAddress();
 
if (_already_rewarded.contains(playerip))
return false;
_already_rewarded.add(playerip);
return true;
}
 
// if no connection (maybe offline shop) dnt reward
return false;
}
 
public static int getHopZoneVotes()
{
 
int votes = -1;
try
{
final URL obj = new URL(PowerPakConfig.VOTES_SITE_HOPZONE_URL);
final HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.addRequestProperty("User-Agent", "L2Hopzone");
            con.setConnectTimeout(5000);
 
final int responseCode = con.getResponseCode();
if (responseCode == 200)
{
try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())))
{
String line;
           while ((line = in.readLine()) != null)
           {
               if (line.contains("Total Votes"))
               {
                   String inputLine = line.split(">")[2].replace("</span", "");
                   votes = Integer.parseInt(inputLine);
                   break;
}
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("HOPZONE is offline. We will check reward as it will be online again.");
}
return votes;
}
 
public static int getTopZoneVotes()
{
int votes = -1;
try
{
final URL obj = new URL(PowerPakConfig.VOTES_SITE_TOPZONE_URL);
final HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.addRequestProperty("User-Agent", "L2TopZone");
con.setConnectTimeout(5000);
 
final int responseCode = con.getResponseCode();
if (responseCode == 200)
{
try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())))
{
String inputLine;
while ((inputLine = in.readLine()) != null)
{
votes = Integer.valueOf(inputLine);
break;
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("TOPZONE is offline. We will check reward as it will be online again.");
}
 
return votes;
}
 
public static int getL2NetworkVotes()
{
int votes = -1;
try
{
final URL obj = new URL(PowerPakConfig.VOTES_SITE_L2NETWORK_URL);
final HttpURLConnection con = (HttpURLConnection) obj.openConnection();
 
con.addRequestProperty("User-Agent", "L2Network");
con.setConnectTimeout(5000);
 
final int responseCode = con.getResponseCode();
if (responseCode == 200)
{
try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())))
{
String inputLine;
while ((inputLine = in.readLine()) != null)
{
if (inputLine.contains("color:#e7ebf2"))
{
votes = Integer.valueOf(inputLine.split(">")[2].replace("</b", ""));
break;
}
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("NetWork is offline. We will check reward as it will be online again.");
}
return votes;
}
 
protected void setHopZoneVoteCount(final int voteCount)
{
_hopzoneVotesCount = voteCount;
}
 
protected int getHopZoneVoteCount()
{
return _hopzoneVotesCount;
}
 
protected void setTopZoneVoteCount(final int voteCount)
{
_topzoneVotesCount = voteCount;
}
 
protected int getTopZoneVoteCount()
{
return _topzoneVotesCount;
}
 
protected void setL2NetworkVoteCount(final int voteCount)
{
_l2networkVotesCount = voteCount;
}
 
protected int getL2NetworkVoteCount()
{
return _l2networkVotesCount;
}
 
public static AutoVoteRewardHandler getInstance()
{
Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
 
if (PowerPakConfig.VOTES_SITE_HOPZONE_URL != null && !PowerPakConfig.VOTES_SITE_HOPZONE_URL.equals(""))
_hopzone = true;
 
if (PowerPakConfig.VOTES_SITE_TOPZONE_URL != null && !PowerPakConfig.VOTES_SITE_TOPZONE_URL.equals(""))
_topzone = true;
 
if (PowerPakConfig.VOTES_SITE_L2NETWORK_URL != null && !PowerPakConfig.VOTES_SITE_L2NETWORK_URL.equals(""))
_l2network = true;
 
if (_topzone || _hopzone || _l2network)
return SingletonHolder._instance;
 
return null;
}
 
@SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final AutoVoteRewardHandler _instance = new AutoVoteRewardHandler();
}
}

 

Recommended Posts

  • 0
Posted

Man, seriously, it's not even worth your time to debug it, i'm starting to think a drunk person coded it.

  • 0
Posted

Configs :

 

# Automatic Vote Reward System

VoteRewardSystem= True

VotesRequiredForReward = 10

VotesSystemInitialDelay= 37900

VotesSystemStepDelay= 38800

VotesRewards= 1163,5

Also stepdelay must be more make it 600000

It will check every 10minutes

  • 0
Posted

I'm starting to think that you're a bit silly and u don't know what you write cause a threadpool can't randomly stop get some the votes.. its impossible it won't even stop if it give errors.

So im starting to think that u don't know what u say :P 

  • 0
Posted

Why the hell are you telling him to increase the timeout? There should be no short term timeout. Leave the default of 30 or 60 seconds and just add retry policy based on the failure. Sites can act weird and as he is not reading a restful api but the page source it should take its time.

  • 0
Posted (edited)

Why the hell are you telling him to increase the timeout? There should be no short term timeout. Leave the default of 30 or 60 seconds and just add retry policy based on the failure. Sites can act weird and as he is not reading a restful api but the page source it should take its time.

Indeed that is true, except if the same system is being used by an individual vote system (which seems to be the case, getVotes() methods are public), in which case it makes sense to keep a short timeout, so the user won't be frozen for the entire connect timeout duration in case the host takes too long to respond.

Edited by Versus
  • 0
Posted

better remove thread.sleep and add threadpool...i have do it like this every site checks the time i want every x minutes

and works very good

  • 0
Posted (edited)

Indeed that is true, except if the same system is being used by an individual vote system (which seems to be the case, getVotes() methods are public), in which case it makes sense to keep a short timeout, so the user won't be frozen for the entire connect timeout duration in case the host takes too long to respond.

Synchronous web calls should run on a separate thread or they should be asynchronous in the first place so no one will freeze.

Edited by .Elfocrash

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




×
×
  • Create New...