Jump to content
  • 0

Vote Reward System Problem


Question

Posted (edited)
I have problem with AutoVoteSystem !

 

With topzone i get server votes : 0

and with hopzone i get this error :

 

image.jpg

 

My properties file :

 



# ---------------------------------------------------------------------------
# Vote Reward System
# ---------------------------------------------------------------------------
# Set it "True" if you want to Enable Vote Reward System.
EnableVoteReward = True
 
# If you enable Vote Reward System you must fill your Html Patch.
# e.g. VoteHtmlPatch = http://l2.hopzone.net / http://l2topzone.net
# Html Patch for Your Vote Site
# Works with TopZone & HopZone
 
ServerNameForVotes = ServerName 
VoteHtmlPatch = http://l2.hopzone.net/.... <- Here what? my main hopzone site url?
VoteReward1Count = 5
VoteReward2Count = 2
VoteReward1Id = 9627
VoteReward2Id = 3470
VotesForReward = 10
 
# Max a-beep-t of reward items that you want to stop reward 
# the player that have more than "MaxRewardCountForStack".
MaxRewardCountForStackItem1 = 500
MaxRewardCountForStackItem2 = 500
 
# DelayForNextReward in seconds
DelayForNextReward = 300
 
# Enable TopZone Vote Reward
# Default = False
EnableTopzoneReward = False
 
# Enable HopZone Vote Reward
# Default = False
EnableHopzoneReward = True


 

My AutoVoteRewardHanlder.java :

 



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 java.util.logging.Level;
import java.util.logging.Logger;
 
import com.l2jserver.Config;
import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.network.clientpackets.Say2;
import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
import com.l2jserver.gameserver.util.Broadcast;
 
public class AutoVoteRewardHandler
{
    private static Logger _log = Logger.getLogger(AutoVoteRewardHandler.class.getName());
    
    private static final int initialCheck = 1 * 1000;
    private static final int delayForCheck = Config.DELAY_FOR_NEXT_REWARD * 1000;
    
    private static int lastVoteCount = 0;
    
    private AutoVoteRewardHandler()
    {
        _log.info("Vote Reward System: Vote reward system initiated.");
        if (Config.VOTE_REWARD_ENABLE)
        {
            load();
        }
        ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), initialCheck, delayForCheck);
    }
    
    private class AutoReward implements Runnable
    {
        @Override
        public void run()
        {
            int votes = getVotes(Config.VOTE_HTML_PATCH);
            System.out.println("Server Votes: " + votes);
            if ((votes != 0) && (getLastVoteCount() != 0) && (votes >= (getLastVoteCount() + Config.VOTES_FOR_REWARD)))
            {
                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;
                    L2ItemInstance item2 = null;
                    while (rset.next())
                    {
                        player = L2World.getInstance().getPlayer(rset.getInt("charId"));
                        if ((player != null) && !player.getClient().isDetached())
                        {
                            item = player.getInventory().getItemByItemId(Config.VOTE_REWARD1_ID);
                            if ((item == null) || (item.getCount() < Config.MAX_REWARD_COUNT_FOR_STACK_ITEM1))
                            {
                                player.addItem("reward", Config.VOTE_REWARD1_ID, Config.VOTE_REWARD1_COUNT, player, true);
                            }
                            item2 = player.getInventory().getItemByItemId(Config.VOTE_REWARD1_ID);
                            
                            if ((item2 == null) || (item2.getCount() < Config.MAX_REWARD_COUNT_FOR_STACK_ITEM1))
                            {
                                player.addItem("reward", Config.VOTE_REWARD2_ID, Config.VOTE_REWARD2_COUNT, player, true);
                            }
                        }
                    }
                    setLastVoteCount(getLastVoteCount() + Config.VOTES_FOR_REWARD);
                    statement.close();
                    _log.info("Vote Reward System: Reward for votes now!");
                    Broadcast.toAllOnlinePlayers(new CreatureSay(1, Say2.CRITICAL_ANNOUNCE, "", "Vote Manager: Reward for players! Thanks for Vote."));
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
                finally
                {
                    L2DatabaseFactory.close(con);
                }
                
                setLastVoteCount(getLastVoteCount() + Config.VOTES_FOR_REWARD);
            }
            Broadcast.toAllOnlinePlayers(new CreatureSay(1, Say2.CRITICAL_ANNOUNCE, "", "Vote Manager: Server votes: " + votes + " | Next Reward on " + (getLastVoteCount() + Config.VOTES_FOR_REWARD) + " Votes."));
            if (getLastVoteCount() == 0)
            {
                setLastVoteCount(votes);
            }
        }
    }
    
    private int getVotes(String urlString)
    {
        URL url = null;
        InputStreamReader isr = null;
        BufferedReader in = null;
        try
        {
            url = new URL(urlString);
            isr = new InputStreamReader(url.openStream());
            in = new BufferedReader(isr);
            String inputLine;
            while ((inputLine = in.readLine()) != null)
            {
                if (Config.VOTE_REWARD_TOPZONE_ENABLE)
                {
                    // for TopZone
                    if (inputLine.contains("<tr><td><div align=\"center\"><b><font style=\"font-size:14px;color:#018BC1;\""))
                    {
                        return Integer.valueOf(inputLine.split(">")[3].replace("</div", ""));
                        
                    }
                }
                if (Config.VOTE_REWARD_HOPZONE_ENABLE)
                {
                    // for HopZone
                    if (inputLine.contains("rank anonymous tooltip"))
                    {
                        @SuppressWarnings("unused")
                        int Sub = 12;
                        switch (inputLine.length())
                        {
                            case 116:
                                Sub = 13;
                                break;
                            case 117:
                                Sub = 14;
                                break;
                            case 118:
                                Sub = 15;
                                break;
                            case 119:
                                Sub = 16;
                                break;
                        }
                        return Integer.valueOf(inputLine.split(">")[2].replace("</span", ""));
                    }
                }
            }
        }
        catch (IOException e)
        {
            _log.warning("Vote Reward System: " + e);
        }
        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;
    }
    
    private void load()
    {
        int votes = 0;
        Connection con = null;
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            PreparedStatement statement = con.prepareStatement("SELECT vote FROM votes LIMIT 1");
            ResultSet rset = statement.executeQuery();
            
            while (rset.next())
            {
                votes = rset.getInt("vote");
            }
            rset.close();
            statement.close();
        }
        catch (Exception e)
        {
            _log.log(Level.WARNING, "data error on vote: ", e);
        }
        finally
        {
            L2DatabaseFactory.close(con);
        }
        
        setLastVoteCount(votes);
    }
    
    public void save()
    {
        Connection con = null;
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            PreparedStatement statement = con.prepareStatement("UPDATE votes SET vote = ? WHERE id=1");
            statement.setInt(1, getLastVoteCount());
            statement.execute();
            statement.close();
        }
        catch (Exception e)
        {
            _log.log(Level.WARNING, "data error on vote: ", e);
        }
        finally
        {
            L2DatabaseFactory.close(con);
        }
    }
    
    public static AutoVoteRewardHandler getInstance()
    {
        return SingletonHolder._instance;
    }
    
    @SuppressWarnings("synthetic-access")
    private static class SingletonHolder
    {
        protected static final AutoVoteRewardHandler _instance = new AutoVoteRewardHandler();
    }
}


 

I dont know where the problem is !

 

Edit:

I edit this line :

 



if (inputLine.contains("<tr><td><div align=\"center\"><b><font style=\"font-size:14px;color:#018BC1;\""))


 

to:

 



if (inputLine.contains("Votes:"))


 

And work !

 

Any ideas for hopzone?

Edited by drgn

7 answers to this question

Recommended Posts

  • 0
Posted

use code tags next time, and i replied to you on l2jserver.com forums with a possible solution. ;)

 

I try but.. 

im thinking somthing else but i cant find a sulotion :/

 

any ideas?

 

Im new in java :/

 

Thanks !

  • 0
Posted

Change this code (it's in the getVotes function) to the code I'll give you and it will work, I tested it myself with your hopzone link. (the Aerogaming one)

 

So change this:

            url = new URL(urlString);
            isr = new InputStreamReader(url.openStream());
            in = new BufferedReader(isr);
            String inputLine;

To this:

            url = new URL(urlString);
            URLConnection connection = url.openConnection();
            connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2");
            connection.connect();
            InputStream response = connection.getInputStream();
            isr = new InputStreamReader(response);
            in = new BufferedReader(isr);
            String inputLine; 
  • 0
Posted

 

Change this code (it's in the getVotes function) to the code I'll give you and it will work, I tested it myself with your hopzone link. (the Aerogaming one)

 

So change this:

            url = new URL(urlString);
            isr = new InputStreamReader(url.openStream());
            in = new BufferedReader(isr);
            String inputLine;

To this:

            url = new URL(urlString);
            URLConnection connection = url.openConnection();
            connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2");
            connection.connect();
            InputStream response = connection.getInputStream();
            isr = new InputStreamReader(response);
            in = new BufferedReader(isr);
            String inputLine; 

Thanks for help ! heh thats not my server :$ i use this one just for test ! :)

i get errors for URLConnection and InputStream.

 

:/

  • 0
Posted

Thanks for help ! heh thats not my server :$ i use this one just for test ! :)

i get errors for URLConnection and InputStream.

 

:/

Yeah, I didn't say that it's your server. (I just said it was your link, meaning that you used it)

 

You most probably get errors because you need to import URLConnection and InputStream!

  • 0
Posted

Yeah, I didn't say that it's your server. (I just said it was your link, meaning that you used it)

 

You most probably get errors because you need to import URLConnection and InputStream!

 

You are the best ! work ! i just import wrong thinks at first time ! now working !

 

Thanks again !

Guest
This topic is now closed to further replies.


  • Posts

    • Same glitch or "technique" was working on Interlude L2Pride aswell.. only few knew about it!
    • 🌟 Need fast setup and guaranteed warranty? All products are fully tested and delivered instantly 24/7.
    • 7 DAYS TO CLOSED BETA!   WARFRONT Closed Beta begins in just 7 days!    If you're planning to participate and haven't registered yet, please make sure you [b]register now[/b]. If you're coming with friends or your clan, please make sure they register too — registration only takes a few seconds.   https://l2warfront.com/   Over the next couple of days I will begin sending emails to registered players containing: Account registration/access link WARFRONT Game Client WARFRONT Launcher Final Closed Beta instructions Important: Special Closed Beta participant rewards will also be distributed using the email address you registered with, so please make sure you've registered with a valid email you can access.   Closed Beta: 3 October 2026 — 19:00 GMT+0 We're almost there. 7 days. Angels vs Demons. See you on the battlefield.
    • No problem — it will decrypt AA (any chronicles). Text telegram
    • As the title says, we are an International group of players that currently play on Exiliumworld for arround 5 years now and we plan to keep on playing here long term now on. Exiliumworld its a server created on Fafurion client, with new skills added for each class and a completely different gameplay. All classes are good and do great damage, there are new exciting features and party compositions that are incredibly great to be played.   While most of us are Romanians, we also have people from different countrys so English is the main language we use on PvP/TW/Sieges or whenever objective pops on. Our  community runs on Discord, we try to keep it very simple in terms of rules : We dont flame each other, we try to respect each member of this group and overall we mentain a good atmosphere inside the group by always laughing, being positive in any situation and helping each other out with whatever it's needed.   If you also wish to be a part  of our community and play on a server that is opened for over a decade and continues running smooth, always gets updates and fixes, contact me in private on Discord because i won't be active in here. About what classes you can play, we will discuss more details like that when we get in contact. Have a great day, guys and remember : Having a good, stable server and a group of players that respect you and help you whenever you are in need might be the perfect environment for you to grow as a player and also as human being!    CONTACT  DISCORD : pqtestpq_97112 (Me) ash3s8354 (Leader) xmariusx (Subleader)   Whoever you choose to talk to, you will meet a friendly person ready to answer your all questions about our group, server features or explain you all the insights of the server.  P.S. : Don't hesitate to contact us. We also recruit CPs or group of players, not only single players. Have a nice day!   #SABOTAGEclan  
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..