Jump to content

Freya HoP/ToP Zone Vote Reward


Recommended Posts

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');

 

 

Link to comment
Share on other sites

  • 2 weeks later...

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.

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

  • 3 weeks later...

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.

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock