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.


×
×
  • Create New...