Jump to content
  • 0

Get Votes For Topzone , Any Fix?


Question

Posted
package com.l2jserver.gameserver.instancemanager;
    
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.l2jserver.Config;
import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.Announcements;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.clientpackets.Say2;
import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
import com.l2jserver.gameserver.util.Broadcast;
    
public class TzVoteRewardManager
{
   private static Logger _log = Logger.getLogger(TzVoteRewardManager.class.getName());
       
   private static final String http = Config.TOPZONE_URL;
   private static final int initialCheck  = 1 * 1000;
   private static final int delayForCheck = 10 * 60000;
   private static final int itemId    = Config.TOPZONE_REWARD_ID ;
   private static final int itemCount = Config.TOPZONE_REWARD_COUNT ;
   private static final int votesRequiredForReward = 10;

   private static List<String> _ips = new ArrayList<String>();
   private static int lastVoteCount = 0;
      
   private TzVoteRewardManager()
   {
	   if(!Config.ENABLE_TOPZONE)
		   return;
       _log.info("AutoVoteRewardManager: Vote reward system For TZ initiated.");
           load();
       ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), initialCheck, delayForCheck);
   }
      
   private class AutoReward implements Runnable
   {
       public void run()
       {
           int votes = getVotes();
           _log.info("AutoVoteRewardManager For TZ : We now have " + votes + "/"+(getLastVoteCount()+votesRequiredForReward)+" vote(s). Next check in "+(delayForCheck/1000)+" sec.");

           if (votes >= getLastVoteCount() + votesRequiredForReward)
           {
               Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
               {
                   for (L2PcInstance onlinePlayer : pls)
                   {
                       if (onlinePlayer.isOnline() && !onlinePlayer.getClient().isDetached() && !_ips.contains(onlinePlayer.getClient().getConnection().getInetAddress().getHostAddress()))
                       {
                              _log.warning("Hello Moto!Giving reward to character "+onlinePlayer.getName());
                               onlinePlayer.addItem("vote_reward", itemId, itemCount, onlinePlayer, true);
                  
                           _ips.add(onlinePlayer.getClient().getConnection().getInetAddress().getHostAddress());
                       }
                   }
               }
               _log.info("AutoVoteRewardManager: Reward for votes now!");
               Broadcast.toAllOnlinePlayers(new CreatureSay(1, Say2.CRITICAL_ANNOUNCE, "SYSTEM", "Topzone SYSTEM:" + " Thanks For Vote You Have Been Rewarded!"));
               setLastVoteCount(getLastVoteCount() + votesRequiredForReward);
           }
                
           if (getLastVoteCount() == 0)
           {
               setLastVoteCount(votes);
           }
           else if ((getLastVoteCount() + votesRequiredForReward) - votes > votesRequiredForReward || votes > (getLastVoteCount() + votesRequiredForReward))
           {
               setLastVoteCount(votes);
           }
              
           Broadcast.toAllOnlinePlayers(new CreatureSay(1, Say2.CRITICAL_ANNOUNCE, "SYSTEM", "Topzone SYSTEM:" + " We have " + votes + " Vote(s). || Next Reward On " + (getLastVoteCount()+votesRequiredForReward) + " Votes."));
           _ips.clear();
       }
   }
      
   private int getVotes()
   {
       URL url = null;
       InputStreamReader isr = null;
       BufferedReader in = null;
       try
       {
           url = new URL(http);
           URLConnection con = url.openConnection();
           con.addRequestProperty("User-Agent", "Mozilla/4.76"); 
           isr = new InputStreamReader(con.getInputStream());
           in = new BufferedReader(isr);
           String inputLine;
           while ((inputLine = in.readLine()) != null)
           {
               // for top-zone
               if (inputLine.contains("<tr><td><div align=\"center\"><b><font style=\"font-size:14px;color:#018BC1;\""))
               {
               return Integer.valueOf(inputLine.split(">")[5].replace("</font", ""));
               }

           }
       }
       catch (IOException e)
       {
           _log.warning("AutoVoteRewardHandler: "+e);
       }
       finally
       {
           try
           {
               in.close();
           }
           catch (IOException e)
           {}
           try
           {
               isr.close();
           }
           catch (IOException e)
           {}
       }
       return 0;
   }
      
   private void setLastVoteCount(int voteCount)
   {
       lastVoteCount = voteCount;
   }
      
   private static 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_TZ 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 static void save()
   {
       Connection con = null;
       try
       {
           con = L2DatabaseFactory.getInstance().getConnection();
           PreparedStatement statement = con.prepareStatement("UPDATE votes_TZ 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 TzVoteRewardManager getInstance()
   {
       return SingletonHolder._instance;
   }
      
   @SuppressWarnings("synthetic-access")
   private static class SingletonHolder
   {
       protected static final TzVoteRewardManager _instance = new TzVoteRewardManager();
   }
}

Any of the shared fix didnt worked.. Seems the code is Old .. thats why :/ Its for freya l2j. help ? :)

7 answers to this question

Recommended Posts

  • 0
Posted (edited)
   private int getVotes()
   {
       URL url = null;
       InputStreamReader isr = null;
       BufferedReader in = null;
       try
       {
           url = new URL(http);
           URLConnection con = url.openConnection();
           con.addRequestProperty("User-Agent", "Mozilla/4.76"); 
           isr = new InputStreamReader(con.getInputStream());
           in = new BufferedReader(isr);
           String inputLine;
           while ((inputLine = in.readLine()) != null)
           {
               // for top-zone
        	   if (inputLine.contains("Votes:"))
        	   {
        	    	  return  Integer.parseInt(inputLine.split(">")[3].replace("</div", ""));
        	      }
           }
       }

worked , thank you :)

 

may i ask you something else? How i can make one item , to change the acces lvl of a player , i need this to give auto acces on the VIP  buffer. or how can i make vip buffer , check for items on players invetory and after give acces? :)

Edited by ČυяŞŀŅğ
  • 0
Posted

Take mine, tested & working.

 

 

   private void getVotesTz()
    {
        InputStreamReader isr = null;
        BufferedReader br = null;
 
        try
        {
            URLConnection con = new URL(Config.VOTE_REWARD_ENGINE_TOPZONE_LINK).openConnection();
            con.addRequestProperty("User-Agent", "Mozilla/4.76");
            isr = new InputStreamReader(con.getInputStream());
            br = new BufferedReader(isr);
 
            boolean got = false;
 
            String line;
            while ((line = br.readLine()) != null)
            {
             if (line.contains("<div class=\"rank\"><div class=\"votes2\">Votes:<br>") && !got)
                {
                    got = true;
                    int votes = Integer.valueOf(line.split("<div class=\"rank\"><div class=\"votes2\">Votes:<br>")[1].replace("</div></div>", ""));
                    tzVotes = votes;
                }
            }
            br.close();
            isr.close();
        }
        catch (Exception e)
        {
            System.out.println(e);
            System.out.println("Error while getting server vote count.");
        }
    }
  • 0
Posted (edited)

I've provided the solution before. Simply, go top getVotes() method and replace the code below //for top-zone with mine.

 

Note: remove try {} and replace 'votes' with 'return'.

Edited by Versus
  • 0
Posted
   private int getVotes()
   {
       URL url = null;
       InputStreamReader isr = null;
       BufferedReader in = null;
       try
       {
           url = new URL(http);
           URLConnection con = url.openConnection();
           con.addRequestProperty("User-Agent", "Mozilla/4.76"); 
           isr = new InputStreamReader(con.getInputStream());
           in = new BufferedReader(isr);
           String inputLine;
           while ((inputLine = in.readLine()) != null)
           {
               // for top-zone
        	   if (inputLine.contains("Votes:"))
        	   {
        	    	  return  Integer.parseInt(inputLine.split(">")[3].replace("</div", ""));
        	      }
           }
       }

worked , thank you :)

 

may i ask you something else? How i can make one item , to change the acces lvl of a player , i need this to give auto acces on the VIP  buffer. or how can i make vip buffer , check for items on players invetory and after give acces? :)

 

No problem.

 

Didn't notice you asked something else till today, the answer is rather simple, i can't access source right now, so i'll post an example:

if (player.getInventory().getItemById(1234) != null)
    player.setAccessLvl(1);

PS: This is merely an example, without checking source, methods should exist, at least, almost like that, don't forget you also need to check count and delete the item from player's inventory (not sure if you need this).

 

If you need more help let me know.

Guest
This topic is now closed to further replies.


  • Posts

    • I don't know this guy and I don't care about him or the server. What I want to say I already do it. And yes, it does seem like he has some mental problems to make up these stories. 
    • L2JForge Version Update  Update: 15 June – 1 July 2026  Fixes & Improvements Fixed PawnShop pagination and inactive Community Board actions. Added thread-safe caching to the PawnShop system. Fixed MMOTopVote vote tracking. Fixed PvP Event participant cleanup. Restored the missing PvP Ranking broadcast. Improved CTF flag handling and zone validation. Added Try Skin / Hat Preview handlers to the Community Board. Improved character skin appearance refreshes without requiring a restart. Improved NPC positioning to reduce train and collision abuse. Fixed Seal of Ruler casting from invalid artifact positions. Added stricter castle artifact, range and height validation. Fixed character restoration stability during Enter World. Reworked Community Board Home, Shop, Bosses and Events sections. Added live Raid/Epic Boss status and respawn information. Added upcoming PvP and GvG event schedules. Integrated character services, settings and statistics into the Community Board. Moved Vote Rewards from a voiced command into the Character Menu in Community Board. Removed the obsolete Achievements / .rewards system.  Removed unused multilingual resources and simplified datapack loading. Improved datapack startup and HTML cache stability. Added automatic build revision and build-date metadata. Reorganized runtime libraries and standardized generated server jars. Refined the Player, Creature, GameClient, Clan and Frintezza systems. Performed extensive source cleanup and reliability improvements. Updated build configuration and repository exclusions.  Work in Progress Development continues with additional gameplay fixes, performance improvements, system cleanup and more upgrades already in progress..
    • this is how i feel about a 1 post acc clearly a friend of the scammers trying to defend it LOL anyways... i wish this wasnt real. i cant make this up.  
    • 𝐈𝐌𝐏𝐑𝐎𝐕𝐄𝐃 𝐂𝐋𝐀𝐒𝐒𝐈𝐂 𝟐.𝟓 - 𝐋𝐈𝐍𝐄𝐀𝐆𝐄 𝐈𝐈 𝐄𝐈𝐍𝐇𝐎𝐕𝐀𝐍𝐓 - Opening Date: 10th July 2026 - Time: 20:00 GMT+3 - Mid Rate x3 - Adena x3 - 100% Drop Rate - Quest Reward Adena x3 - Vitality System - Classic Zaken 2.5 Based - Improved Classic Gameplay - Improved Buff System - No Dual Box - No Pay to Win - 7 Members Party System - Dynamic Stages Progression - Reworked Support Classes - Reworked Skills & New Skills - New Skill Visual Effects - Improved Quests & Better Rewards - Daily Missions & Daily Quests - Weekly Solo Instances - In-Game Wiki with .wiki Command - Olympiad Rework - Castle Siege Improvements - Grand Boss & Raid Boss Progression ⚔ Designed to deliver a competitive, rewarding, and long-term Classic experience without destroying the original Lineage II feeling.   Don't forget to check the in-game wiki and discover all the unique features and gameplay improvements we prepared for you! Website: https://l2einhovant.net/en Discord: https://discord.gg/VfNngPrzaf Instagram: https://www.instagram.com/l2einhovant_classic/ Youtube: https://www.youtube.com/@L2Einhovant TikTok: https://www.tiktok.com/@vedi2300
  • 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..