extr3me Posted May 5, 2011 Share Posted May 5, 2011 Hy all MXC Users this is an hopzone and topzone vote reward for freya with sql to save all vote count on server restart ;) HF with it Index: java/com/l2jserver/Config.java =================================================================== --- java/com/l2jserver/Config.java (revision 4422) +++ java/com/l2jserver/Config.java (working copy) @@ -620,6 +625,8 @@ //-------------------------------------------------- // L2JMods Settings //-------------------------------------------------- + public static boolean L2JMOD_VOTE_ENGINE_ENABLE; + public static boolean L2JMOD_VOTE_ENGINE_SAVE; public static boolean L2JMOD_CHAMPION_ENABLE; public static boolean L2JMOD_CHAMPION_PASSIVE; public static int L2JMOD_CHAMPION_FREQUENCY; @@ -2162,6 +2174,8 @@ is = new FileInputStream(new File(L2JMOD_CONFIG_FILE)); L2JModSettings.load(is); + L2JMOD_VOTE_ENGINE_ENABLE = Boolean.parseBoolean(L2JModSettings.getProperty("EnableAutoVoteEngine", "false")); + L2JMOD_VOTE_ENGINE_SAVE = Boolean.parseBoolean(L2JModSettings.getProperty("AutoVoteEngineSaveLoad", "false")); L2JMOD_CHAMPION_ENABLE = Boolean.parseBoolean(L2JModSettings.getProperty("ChampionEnable", "false")); L2JMOD_CHAMPION_PASSIVE = Boolean.parseBoolean(L2JModSettings.getProperty("ChampionPassive", "false")); L2JMOD_CHAMPION_FREQUENCY = Integer.parseInt(L2JModSettings.getProperty("ChampionFrequency", "0")); @@ -3071,8 +3085,11 @@ else if (pName.equalsIgnoreCase("AltSubclassEverywhere")) ALT_GAME_SUBCLASS_EVERYWHERE = Boolean.parseBoolean(pValue); else if (pName.equalsIgnoreCase("AltMembersCanWithdrawFromClanWH")) ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH = Boolean.parseBoolean(pValue); else if (pName.equalsIgnoreCase("DwarfRecipeLimit")) DWARF_RECIPE_LIMIT = Integer.parseInt(pValue); - else if (pName.equalsIgnoreCase("CommonRecipeLimit")) COMMON_RECIPE_LIMIT = Integer.parseInt(pValue); + else if (pName.equalsIgnoreCase("CommonRecipeLimit")) COMMON_RECIPE_LIMIT = Integer.parseInt(pValue); + else if (pName.equalsIgnoreCase("EnableAutoVoteEngine")) L2JMOD_VOTE_ENGINE_ENABLE = Boolean.parseBoolean(pValue); + else if (pName.equalsIgnoreCase("AutoVoteEngineSaveLoad")) L2JMOD_VOTE_ENGINE_SAVE = Boolean.parseBoolean(pValue); + else if (pName.equalsIgnoreCase("ChampionEnable")) L2JMOD_CHAMPION_ENABLE = Boolean.parseBoolean(pValue); else if (pName.equalsIgnoreCase("ChampionFrequency")) L2JMOD_CHAMPION_FREQUENCY = Integer.parseInt(pValue); else if (pName.equalsIgnoreCase("ChampionMinLevel")) L2JMOD_CHAMP_MIN_LVL = Integer.parseInt(pValue); Index: java/com/l2jserver/gameserver/GameServer.java =================================================================== --- java/com/l2jserver/gameserver/GameServer.java (revision 4422) +++ java/com/l2jserver/gameserver/GameServer.java (working copy) @@ -87,6 +89,7 @@ import com.l2jserver.gameserver.instancemanager.AirShipManager; import com.l2jserver.gameserver.instancemanager.AntiFeedManager; import com.l2jserver.gameserver.instancemanager.AuctionManager; +import com.l2jserver.gameserver.instancemanager.AutoVoteRewardManager; import com.l2jserver.gameserver.instancemanager.BoatManager; import com.l2jserver.gameserver.instancemanager.CastleManager; import com.l2jserver.gameserver.instancemanager.CastleManorManager; @@ -478,6 +488,9 @@ _log.info("Server Loaded in " + ((serverLoadEnd - serverLoadStart) / 1000) + " seconds"); AutoAnnounceTaskManager.getInstance(); + + if (Config.L2JMOD_VOTE_ENGINE_ENABLE) + AutoVoteRewardManager.getInstance(); } Index: java/com/l2jserver/gameserver/Shutdown.java =================================================================== --- java/com/l2jserver/gameserver/Shutdown.java (revision 4422) +++ java/com/l2jserver/gameserver/Shutdown.java (working copy) @@ -20,8 +20,10 @@ import com.l2jserver.Config; import com.l2jserver.L2DatabaseFactory; import com.l2jserver.gameserver.datatables.ClanTable; import com.l2jserver.gameserver.datatables.OfflineTradersTable; +import com.l2jserver.gameserver.instancemanager.AutoVoteRewardManager; import com.l2jserver.gameserver.instancemanager.CastleManorManager; import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager; import com.l2jserver.gameserver.instancemanager.GrandBossManager; @@ -538,12 +540,19 @@ ClanTable.getInstance().storeClanScore(); _log.info("Clan System: Data saved!!"); + if (Config.L2JMOD_VOTE_ENGINE_SAVE && Config.L2JMOD_VOTE_ENGINE_ENABLE) + AutoVoteRewardManager.getInstance().save(); + Index: java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardManager.java =================================================================== --- java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardManager.java (revision 0) +++ java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardManager.java (revision 0) @@ -0,0 +1,220 @@ +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.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; + +public class AutoVoteRewardManager +{ + private static Logger _log = Logger.getLogger(AutoVoteRewardManager.class.getName()); + + private static final String http = "http://l2.hopzone.net/lineage2/moreinfo/L2WorldPvP/74078.html"; + private static final int initialCheck = 1 * 1000; + private static final int delayForCheck = 1800 * 1000; + private static final int[] itemId = { 20034, 57 }; + private static final int[] itemCount = { 2, 1000 }; + private static final int votesRequiredForReward = 8; + + private static List<String> _ips = new ArrayList<String>(); + private static int lastVoteCount = 0; + + private AutoVoteRewardManager() + { + _log.info("AutoVoteRewardManager: Vote reward system initiated."); + if (Config.L2JMOD_VOTE_ENGINE_SAVE) + load(); + ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), initialCheck, delayForCheck); + } + + private class AutoReward implements Runnable + { + public void run() + { + int votes = getVotes(); + _log.info("AutoVoteRewardManager: We now have " + votes + "/"+(getLastVoteCount()+votesRequiredForReward)+" vote(s). Next check in "+(delayForCheck/1000)+" sec."); + Announcements.getInstance().announceToAll("Vote on http://L2TopZone.com"); + + 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())) + { + for (int i = 0; i < itemId.length; i++) + { + onlinePlayer.addItem("vote_reward", itemId[i], itemCount[i], onlinePlayer, true); + } + + _ips.add(onlinePlayer.getClient().getConnection().getInetAddress().getHostAddress()); + } + } + } + _log.info("AutoVoteRewardManager: Reward for votes now!"); + Announcements.getInstance().announceToAll("Reward for players! Thanks for Vote."); + setLastVoteCount(getLastVoteCount() + votesRequiredForReward); + } + + if (getLastVoteCount() == 0) + { + setLastVoteCount(votes); + } + else if ((getLastVoteCount() + votesRequiredForReward) - votes > votesRequiredForReward || votes > (getLastVoteCount() + votesRequiredForReward)) + { + setLastVoteCount(votes); + } + + Announcements.getInstance().announceToAll("We have " + votes + " vote(s). Next reward on " + (getLastVoteCount()+votesRequiredForReward) + " vote."); + _ips.clear(); + } + } + + private int getVotes() + { + URL url = null; + InputStreamReader isr = null; + BufferedReader in = null; + try + { + url = new URL(http); + isr = new InputStreamReader(url.openStream()); + 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", "")); + //} + + //for hopzone + if (inputLine.contains("moreinfo_total_rank_text")) + return Integer.valueOf(inputLine.split(">")[2].replace("</div", "")); + } + } + 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 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 AutoVoteRewardManager getInstance() + { + return SingletonHolder._instance; + } + + @SuppressWarnings("synthetic-access") + private static class SingletonHolder + { + protected static final AutoVoteRewardManager _instance = new AutoVoteRewardManager(); + } +} \ No newline at end of file Index: java/config/l2jmods.properties =================================================================== --- java/config/l2jmods.properties (revision 4422) +++ java/config/l2jmods.properties (working copy) @@ -418,3 +417,14 @@ will be 1+2=3. Use 0 or negative value for unlimited number of connections. Default: 127.0.0.1,0 (no limits from localhost) DualboxCheckWhitelist = 127.0.0.1,0 + +--------------------------------------------------------------------------- +Auto Vote Event Manager +--------------------------------------------------------------------------- +Enable +Default: False +EnableAutoVoteEngine = False + +Save and Load votes count on start/shutdown to database +Default: False +AutoVoteEngineSaveLoad = False And The Sql to save votes count on restart server becouse all vote reward reset votes on server restart -- ---------------------------- -- Table structure for `votes` -- ---------------------------- DROP TABLE IF EXISTS `votes`; CREATE TABLE `votes` ( `id` int(6) NOT NULL, `vote` int(6) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of votes -- ---------------------------- INSERT INTO votes VALUES ('1', '0'); Quote Link to comment Share on other sites More sharing options...
RandomDude Posted May 17, 2011 Share Posted May 17, 2011 Have you tested it? :o Quote Link to comment Share on other sites More sharing options...
extr3me Posted May 17, 2011 Author Share Posted May 17, 2011 lol yes work FINE ;) all work on it Quote Link to comment Share on other sites More sharing options...
RandomDude Posted May 18, 2011 Share Posted May 18, 2011 lol yes work FINE ;) all work on it Ok, perfect! Very good job then!.. This might be the vote system for my server xD Quote Link to comment Share on other sites More sharing options...
pipiou21 Posted May 18, 2011 Share Posted May 18, 2011 lol yes work FINE ;) all work on it Coz im bored to check, is it for the whole server or "per-character" reward? :))) Thanks for the share!!!! Edit: Its for the whole server reward :)! Not per characters votes. Quote Link to comment Share on other sites More sharing options...
RandomDude Posted May 18, 2011 Share Posted May 18, 2011 I love when whole server gets reward! but there is something i dont really understand? Index: java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardManager.java =================================================================== --- java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardManager.java (revision 0) +++ java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardManager.java (revision 0) @@ -0,0 +1,220 @@ + + private static final int initialCheck = 1 * 1000; + private static final int delayForCheck = 1800 * 1000; Can anyone explain be what the different between those is? and what they do? Quote Link to comment Share on other sites More sharing options...
extr3me Posted May 18, 2011 Author Share Posted May 18, 2011 private static final int initialCheck is the first check of votes on hopzone/topzone private static final int delayForCheck this is deley between every check of votes Quote Link to comment Share on other sites More sharing options...
RandomDude Posted May 18, 2011 Share Posted May 18, 2011 Ok, great! So.. 1800 * 1000 = ? (how much minutes?) :P Quote Link to comment Share on other sites More sharing options...
allanalcantara Posted May 19, 2011 Share Posted May 19, 2011 thx man Quote Link to comment Share on other sites More sharing options...
extr3me Posted May 21, 2011 Author Share Posted May 21, 2011 thx man your welcome Quote Link to comment Share on other sites More sharing options...
disorder25 Posted May 22, 2011 Share Posted May 22, 2011 for hopzone this is not working. Quote Link to comment Share on other sites More sharing options...
extr3me Posted May 22, 2011 Author Share Posted May 22, 2011 it's work i tested him lol :| Quote Link to comment Share on other sites More sharing options...
mfausb Posted May 22, 2011 Share Posted May 22, 2011 Why not: Scanner scan = new Scanner(new InputStreamReader(new URL(_url).openStream())); ? Quote Link to comment Share on other sites More sharing options...
JoeDaFlow Posted June 7, 2011 Share Posted June 7, 2011 Coped from the 4rd page of the Vote reward system on L2J. I love when whole server gets reward! but there is something i dont really understand? Index: java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardManager.java =================================================================== --- java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardManager.java (revision 0) +++ java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardManager.java (revision 0) @@ -0,0 +1,220 @@ + [color=blue]+ private static final int initialCheck = 1 * 1000;[/color] [color=orange]+ private static final int delayForCheck = 1800 * 1000;[/color] Can anyone explain be what the different between those is? and what they do? First one Is the first check after servers launches. Second one Is how often the check occurs. Quote Link to comment Share on other sites More sharing options...
RandomDude Posted June 7, 2011 Share Posted June 7, 2011 Ok, ty ;) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.