ČυяŞŀŅğ Posted November 28, 2013 Posted November 28, 2013 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 ? :)
0 ČυяŞŀŅğ Posted December 3, 2013 Author Posted December 3, 2013 (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 December 3, 2013 by ČυяŞŀŅğ
0 Devlin Posted November 28, 2013 Posted November 28, 2013 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 November 28, 2013 Author Posted November 28, 2013 could you give me all the code maybe ? i get errors about tzvotes cannot be resolved to variable or change mine code posted above for me ? :) btw thank you for your reply
0 Versus Posted December 3, 2013 Posted December 3, 2013 (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 December 3, 2013 by Versus
0 Versus Posted December 10, 2013 Posted December 10, 2013 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.
Question
ČυяŞŀŅğ
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