Jump to content

Recommended Posts

Posted

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

 

 

  • 2 weeks later...
Posted

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.

Posted

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?

Posted

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

  • 3 weeks later...
Posted

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.

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.




  • Posts

    • ➡ Discount for your purchase: APRIL (10% discount) ➡ Our Online Shop: https://socnet.store ✅ ➡ Our SMM-Boosting Panel: https://socnet.pro ✅ ➡ Telegram Shop Bot: https://socnet.shop ✅ ➡ Telegram Support: https://t.me/solomon_bog ✅ ➡ Telegram Channel: https://t.me/accsforyou_shop ✅ ➡ Discord Support: @AllSocialNetworksShop ✅ ➡ Discord Server: https://discord.gg/y9AStFFsrh ✅ ➡ WhatsApp Support: https://wa.me/79051904467✅ ➡ WhatsApp Channel: https://whatsapp.com/channel/0029Vau0CMX002TGkD4uHa2n ✅ ➡ Email Support: solomonbog@socnet.store ✅
    • ➡ Discount for your purchase: APRIL (10% discount) ➡ Our Online Shop: https://socnet.store ✅ ➡ Our SMM-Boosting Panel: https://socnet.pro ✅ ➡ Telegram Shop Bot: https://socnet.shop ✅ ➡ Telegram Support: https://t.me/solomon_bog ✅ ➡ Telegram Channel: https://t.me/accsforyou_shop ✅ ➡ Discord Support: @AllSocialNetworksShop ✅ ➡ Discord Server: https://discord.gg/y9AStFFsrh ✅ ➡ WhatsApp Support: https://wa.me/79051904467✅ ➡ WhatsApp Channel: https://whatsapp.com/channel/0029Vau0CMX002TGkD4uHa2n ✅ ➡ Email Support: solomonbog@socnet.store ✅
    • Hey. I've been looking all over the internet about this but not being able to find anything about it. I have edited systemmsg using MSG editor changing colors etc. But now I want to change and add some of the sounds as well. But I need the sound IDs for each audiofile and I dont know how to find them. Ive found all the audio files but I cant use the filename as someone said in a thread here, it only seem to take numbers. I have looked into every guide about systemmsg on this website and no one mention anything about the sound, just that its possible to add sound but nothing more. So, do anyone know how to find these sound IDs? Preferably together with the soundname of the audio file that it plays so I know which ID to use for each soundfile. Thanks in advance!
    • We are certainly not an ambulance, but we will definitely cure you of blacklists and empty pockets. Live freely with SX! Each of you will receive a trial version of SX to familiarize yourself with the product, all you have to do is post in this thread
  • Topics

×
×
  • Create New...