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

Well if you actually want help, provide more info.

 

Where's the problem? What isn't working while it did before? Is there any error? Giving the code and saying it doesn't work won't really do much, what do you expect people to debug the code for you?

  • 0
Posted

Then probably the instance is never initialized at GameServer.java, so your code is never executed.

Bro , i have intiliazed the code. When server checks gs shows me this http://prntscr.com/d8krao so this messages stops without any reason and checks too after some hours.

  • 0
Posted

This code is so bad, that my eyes are bleeding and the fact that you use no sorting at all makes them bleed even harder.

 

I will take a look, when you make my life easier, use pastebin or something, use proper sorting! This is not programming, just retardism.

  • 0
Posted (edited)

Any error cause by the catch()  

Also consider of timeout for the remote site is small, not even exist for get 3 votes from dif websites... maybe increase 

Edited by AccessDenied
  • 0
Posted (edited)

I don't see any issues with the system, even if it's terribly coded. 

 

Only things i noticed:

Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);

which you should remove (probably, you know your source), and

 

Try increasing the connectTimeOut on all 3 getVotes() methods,

con.setConnectTimeout(5000);

change that to 10000.

 

 

Also show us your configs if possible.

Edited by Versus
  • 0
Posted

 

Configs :

 

# Automatic Vote Reward System
VoteRewardSystem= True
VotesRequiredForReward = 10
VotesSystemInitialDelay= 37900
VotesSystemStepDelay= 38800
VotesRewards= 1163,5

 

Timeout is not even exist, i don't consider 5000 ms as a timeout for 3 websites.. only 1 website sometimes takes 3 seconds to get votes so your timeout not even exist.. increase it to 12000

Unexisted timeout.. with so many sites

  • 0
Posted

Timeout is not even exist, i don't consider 5000 ms as a timeout for 3 websites.. only 1 website sometimes takes 3 seconds to get votes so your timeout not even exist.. increase it to 12000

Unexisted timeout.. with so many sites

You mean 5000 changed to 12000?

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...