Jump to content
  • 0

Vote Rewards


Question

Posted

Kalispera paidia An Mpori kai 3eri kapoios na me voithisei pws tha kanw o kathe enas p kani vote na perni atomika to rewar...An mporite na me voithisete...Episeis an iparxi kai npc p na mporis na kanis vote eki mesa k na perni mono aytos p kani vote to reward...Eyxaristw poly

13 answers to this question

Recommended Posts

  • 0
Posted

Kalispera paidia An Mpori kai 3eri kapoios na me voithisei pws tha kanw o kathe enas p kani vote na perni atomika to rewar...An mporite na me voithisete...Episeis an iparxi kai npc p na mporis na kanis vote eki mesa k na perni mono aytos p kani vote to reward...Eyxaristw poly

Δύσκολα θα πάρεις τέτοιον κώδικα δωρεάν.

  • 0
Posted

Auto Reward Code:

### Eclipse Workspace Patch 1.0
#P L2jFrozen_GameServer
Index: head-src/com/l2jfrozen/gameserver/managers/AutoRewardManager.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/managers/AutoRewardManager.java   (revision 0)
+++ head-src/com/l2jfrozen/gameserver/managers/AutoRewardManager.java   (revision 0)
@@ -0,0 +1,76 @@
+/*
+ * Copyright © 2013 AdminsProL2
+ * 
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.l2jfrozen.gameserver.managers;
+
+import java.util.Collection;
+import java.util.Set;
+
+import com.l2jfrozen.Config;
+import com.l2jfrozen.gameserver.model.L2World;
+import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jfrozen.gameserver.network.serverpackets.ExShowScreenMessage;
+import com.l2jfrozen.gameserver.powerpak.PowerPakConfig;
+import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
+
+
+/**
+ *@author fissban && CaFi
+ */
+public class AutoRewardManager
+{
+   static final int initialCheck = Config.AUTO_REWARD_DELAY * 60000;
+   static final int delayForCheck = Config.AUTO_REWARD_DELAY * 60000;
+   
+   AutoRewardManager()
+   {
+      if (Config.ALLOW_AUTO_REWARDER)
+      {
+         ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), initialCheck, delayForCheck);   
+      }
+   }
+   
+   protected class AutoReward implements Runnable
+   {
+      @Override
+      public void run()
+      {
+         Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
+         
+         for (L2PcInstance player : pls)
+         {
+            player.sendPacket(new ExShowScreenMessage("Felicitaciones has sido premiado, proximo Reward en: " + delayForCheck, 6000));
+            
+            Set<Integer> items = PowerPakConfig.VOTES_REWARDS_LIST.keySet();
+            for (Integer i : items)
+            {
+               player.addItem("AutoReward", i, Config.AUTO_REWARDS_LIST.get(i), player, true);
+            }
+         }
+      }
+   }
+   
+   public static AutoRewardManager getInstance()
+   {
+      return SingletonHolder._instance;
+   }
+   
+   static class SingletonHolder
+   {
+      protected static final AutoRewardManager _instance = new AutoRewardManager();
+   }
+}
Index: head-src/com/l2jfrozen/FService.java
===================================================================
--- head-src/com/l2jfrozen/FService.java   (revision 1004)
+++ head-src/com/l2jfrozen/FService.java   (working copy)
@@ -53,6 +53,7 @@
    public static final String CRAFTING = "./config/functions/crafting.properties";
    public static final String DEVELOPER = "./config/functions/developer.properties";
    public static final String L2JFROZEN_CONFIG_FILE = "./config/functions/l2jfrozen.properties";
+   public static final String ADMINSPROL2_CONFIG_FILE = "./config/functions/AdminsProL2.properties";
    public static final String PHYSICS_CONFIGURATION_FILE = "./config/functions/physics.properties";
    public static final String PVP_CONFIG_FILE = "./config/functions/pvp.properties";
    public static final String POWERPAK_FILE = "./config/powerpak/powerpak.properties";
Index: head-src/com/l2jfrozen/Config.java
===================================================================
--- head-src/com/l2jfrozen/Config.java   (revision 1004)
+++ head-src/com/l2jfrozen/Config.java   (working copy)
@@ -2525,7 +2525,37 @@
       }
    }
 
+    //============================================================
+    public static boolean ALLOW_AUTO_REWARDER;
+    public static int AUTO_REWARD_DELAY;
+    public static FastMap<Integer, Integer> AUTO_REWARDS_LIST;
+    public static String AUTO_REWARDS;
+       
    //============================================================
+   public static void loadAdminsProL2Config()
+   {
+      final String ADMINSPROL2 = FService.ADMINSPROL2_CONFIG_FILE;
+   
+      try
+      {
+         Properties AdminsProL2Settings = new Properties();
+         InputStream is = new FileInputStream(new File(ADMINSPROL2));
+         AdminsProL2Settings.load(is);
+         is.close();
+            
+          ALLOW_AUTO_REWARDER = Boolean.parseBoolean(AdminsProL2Settings.getProperty("AllowAutoRewarder", "True"));
+          AUTO_REWARD_DELAY = Integer.parseInt(AdminsProL2Settings.getProperty("AutoRewardDelay", "1200"));
+          AUTO_REWARDS = AdminsProL2Settings.getProperty("VotesRewards", "");
+          AUTO_REWARDS_LIST = new FastMap<Integer, Integer>();
+      }
+      catch(Exception e)
+      {
+         e.printStackTrace();
+         throw new Error("Failed to Load " + ADMINSPROL2 + " File.");
+      }
+   }
+   
+   //============================================================
    public static int KARMA_MIN_KARMA;
    public static int KARMA_MAX_KARMA;
    public static int KARMA_XP_DIVIDER;
Index: head-src/com/l2jfrozen/gameserver/GameServer.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/GameServer.java   (revision 1004)
+++ head-src/com/l2jfrozen/gameserver/GameServer.java   (working copy)
@@ -87,6 +87,7 @@
 import com.l2jfrozen.gameserver.handler.VoicedCommandHandler;
 import com.l2jfrozen.gameserver.idfactory.IdFactory;
 import com.l2jfrozen.gameserver.managers.AuctionManager;
+import com.l2jfrozen.gameserver.managers.AutoRewardManager;
 import com.l2jfrozen.gameserver.managers.AutoSaveManager;
 import com.l2jfrozen.gameserver.managers.AwayManager;
 import com.l2jfrozen.gameserver.managers.BoatManager;
@@ -565,6 +566,9 @@
       if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
          OfflineTradeTable.restoreOfflineTraders();
       
+      Util.printSection("L2jAdmins");
+      AutoRewardManager.getInstance();
+      
       Util.printSection("Info");
       _log.info("Operating System: " + Util.getOSName() + " " + Util.getOSVersion() + " " + Util.getOSArch());
       _log.info("Available CPUs: " + Util.getAvailableProcessors());
Index: config/functions/Adminsprol2.properties
===================================================================
--- config/functions/Adminsprol2.properties   (revision 0)
+++ config/functions/Adminsprol2.properties   (revision 0)
@@ -0,0 +1,10 @@
+#============================================================#
+#                        Server Config                      #
+#============================================================#
+
+# Auto rewarder.
+AllowAutoRewarder = True
+# Delay for reward. (in seconds)
+AutoRewardDelay = 1200
+# ID of item reward.
+AutoRewards= 6392,20;
 
Code Vote RewardTopzone/Hopzone:
 
### Eclipse Workspace Patch 1.0
#P L2jFrozen_GameServer
Index: head-src/com/l2jfrozen/Config.java
===================================================================
--- head-src/com/l2jfrozen/Config.java (revision 938)
+++ head-src/com/l2jfrozen/Config.java (working copy)
@@ -878,6 +878,89 @@
  throw new Error("Failed to Load " + OTHER + " File.");
  }
  }
+
+ public static boolean ALLOW_HOPZONE_VOTE_REWARD;
+    public static String HOPZONE_SERVER_LINK;
+    public static String HOPZONE_FIRST_PAGE_LINK;
+    public static int HOPZONE_VOTES_DIFFERENCE;
+    public static int HOPZONE_FIRST_PAGE_RANK_NEEDED;
+    public static int HOPZONE_REWARD_CHECK_TIME;
+ public static Map<Integer, Integer> HOPZONE_SMALL_REWARD = new FastMap<Integer, Integer>();
+ public static Map<Integer, Integer> HOPZONE_BIG_REWARD = new FastMap<Integer, Integer>();
+ public static int HOPZONE_DUALBOXES_ALLOWED;
+    public static boolean ALLOW_HOPZONE_GAME_SERVER_REPORT;
+    public static boolean ALLOW_TOPZONE_VOTE_REWARD;
+    public static String TOPZONE_SERVER_LINK;
+    public static String TOPZONE_FIRST_PAGE_LINK;
+    public static int TOPZONE_VOTES_DIFFERENCE;
+    public static int TOPZONE_FIRST_PAGE_RANK_NEEDED;
+    public static int TOPZONE_REWARD_CHECK_TIME;
+ public static Map<Integer, Integer> TOPZONE_SMALL_REWARD = new FastMap<Integer, Integer>();
+ public static Map<Integer, Integer> TOPZONE_BIG_REWARD = new FastMap<Integer, Integer>();
+ public static int TOPZONE_DUALBOXES_ALLOWED;
+    public static boolean ALLOW_TOPZONE_GAME_SERVER_REPORT;
+    
+ public static void loadVoteConfig()
+ {
+ final String VOTE = FService.VOTE_FILE;
+ try
+ {
+ Properties elcardia = new Properties();
+ InputStream is = new FileInputStream(new File(VOTE));
+ elcardia.load(is);
+ is.close();
+
+ ALLOW_HOPZONE_VOTE_REWARD = Boolean.parseBoolean(elcardia.getProperty("AllowHopzoneVoteReward", "false"));
+ HOPZONE_SERVER_LINK = elcardia.getProperty("HopzoneServerLink", "http://l2.hopzone.net/lineage2/details/74078/L2World-Servers/");
+ HOPZONE_FIRST_PAGE_LINK = elcardia.getProperty("HopzoneFirstPageLink", "http://l2.hopzone.net/lineage2/");
+ HOPZONE_VOTES_DIFFERENCE = Integer.parseInt(elcardia.getProperty("HopzoneVotesDifference", "5"));
+ HOPZONE_FIRST_PAGE_RANK_NEEDED = Integer.parseInt(elcardia.getProperty("HopzoneFirstPageRankNeeded", "15"));
+ HOPZONE_REWARD_CHECK_TIME = Integer.parseInt(elcardia.getProperty("HopzoneRewardCheckTime", "5"));
+ String HOPZONE_SMALL_REWARD_VALUE = elcardia.getProperty("HopzoneSmallReward", "57,100000000;");
+ String[] hopzone_small_reward_splitted_1 = HOPZONE_SMALL_REWARD_VALUE.split(";");
+ for (String i : hopzone_small_reward_splitted_1)
+ {
+ String[] hopzone_small_reward_splitted_2 = i.split(",");
+ HOPZONE_SMALL_REWARD.put(Integer.parseInt(hopzone_small_reward_splitted_2[0]), Integer.parseInt(hopzone_small_reward_splitted_2[1]));
+ }
+ String HOPZONE_BIG_REWARD_VALUE = elcardia.getProperty("HopzoneBigReward", "3470,1;");
+ String[] hopzone_big_reward_splitted_1 = HOPZONE_BIG_REWARD_VALUE.split(";");
+ for (String i : hopzone_big_reward_splitted_1)
+ {
+ String[] hopzone_big_reward_splitted_2 = i.split(",");
+ HOPZONE_BIG_REWARD.put(Integer.parseInt(hopzone_big_reward_splitted_2[0]), Integer.parseInt(hopzone_big_reward_splitted_2[1]));
+ }
+ HOPZONE_DUALBOXES_ALLOWED = Integer.parseInt(elcardia.getProperty("HopzoneDualboxesAllowed", "1"));
+ ALLOW_HOPZONE_GAME_SERVER_REPORT = Boolean.parseBoolean(elcardia.getProperty("AllowHopzoneGameServerReport", "false"));
+ ALLOW_TOPZONE_VOTE_REWARD = Boolean.parseBoolean(elcardia.getProperty("AllowTopzoneVoteReward", "false"));
+ TOPZONE_SERVER_LINK = elcardia.getProperty("TopzoneServerLink", "http://l2.topzone.net/lineage2/details/74078/L2World-Servers/");
+ TOPZONE_FIRST_PAGE_LINK = elcardia.getProperty("TopzoneFirstPageLink", "http://l2.topzone.net/lineage2/");
+ TOPZONE_VOTES_DIFFERENCE = Integer.parseInt(elcardia.getProperty("TopzoneVotesDifference", "5"));
+ TOPZONE_FIRST_PAGE_RANK_NEEDED = Integer.parseInt(elcardia.getProperty("TopzoneFirstPageRankNeeded", "15"));
+ TOPZONE_REWARD_CHECK_TIME = Integer.parseInt(elcardia.getProperty("TopzoneRewardCheckTime", "5"));
+ String TOPZONE_SMALL_REWARD_VALUE = elcardia.getProperty("TopzoneSmallReward", "57,100000000;");
+ String[] topzone_small_reward_splitted_1 = TOPZONE_SMALL_REWARD_VALUE.split(";");
+ for (String i : topzone_small_reward_splitted_1)
+ {
+ String[] topzone_small_reward_splitted_2 = i.split(",");
+ TOPZONE_SMALL_REWARD.put(Integer.parseInt(topzone_small_reward_splitted_2[0]), Integer.parseInt(topzone_small_reward_splitted_2[1]));
+ }
+ String TOPZONE_BIG_REWARD_VALUE = elcardia.getProperty("TopzoneBigReward", "3470,1;");
+ String[] topzone_big_reward_splitted_1 = TOPZONE_BIG_REWARD_VALUE.split(";");
+ for (String i : topzone_big_reward_splitted_1)
+ {
+ String[] topzone_big_reward_splitted_2 = i.split(",");
+ TOPZONE_BIG_REWARD.put(Integer.parseInt(topzone_big_reward_splitted_2[0]), Integer.parseInt(topzone_big_reward_splitted_2[1]));
+ }
+ TOPZONE_DUALBOXES_ALLOWED = Integer.parseInt(elcardia.getProperty("TopzoneDualboxesAllowed", "1"));
+ ALLOW_TOPZONE_GAME_SERVER_REPORT = Boolean.parseBoolean(elcardia.getProperty("AllowTopzoneGameServerReport", "false"));
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ throw new Error("Failed to Load " + VOTE + " File.");
+ }
+ }
 
  //============================================================
  public static float RATE_XP;
Index: head-src/com/l2jfrozen/gameserver/GameServer.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/GameServer.java (revision 938)
+++ head-src/com/l2jfrozen/gameserver/GameServer.java (working copy)
@@ -118,6 +118,8 @@
 import com.l2jfrozen.gameserver.model.entity.Announcements;
 import com.l2jfrozen.gameserver.model.entity.Hero;
 import com.l2jfrozen.gameserver.model.entity.MonsterRace;
+import com.l2jfrozen.gameserver.model.entity.VoteRewardHopzone;
+import com.l2jfrozen.gameserver.model.entity.VoteRewardTopzone;
 import com.l2jfrozen.gameserver.model.entity.event.manager.EventManager;
 import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad;
 import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSigns;
@@ -514,6 +516,11 @@
 
  Util.printSection("Custom Mods");
 
+ if (Config.ALLOW_HOPZONE_VOTE_REWARD)
+ VoteRewardHopzone.getInstance();
+ if (Config.ALLOW_TOPZONE_VOTE_REWARD)
+ VoteRewardTopzone.getInstance();
+
  if(Config.L2JMOD_ALLOW_WEDDING || Config.ALLOW_AWAY_STATUS || Config.PCB_ENABLE || Config.POWERPAK_ENABLED)
  {
  if(Config.L2JMOD_ALLOW_WEDDING)
Index: head-src/com/l2jfrozen/FService.java
===================================================================
--- head-src/com/l2jfrozen/FService.java (revision 938)
+++ head-src/com/l2jfrozen/FService.java (working copy)
@@ -48,6 +48,7 @@
  public static final String SIEGE_CONFIGURATION_FILE = "./config/head/siege.properties";
  public static final String ELIT_CLANHALL_CONFIG_FILE = "./config/head/elitclanhall.properties";
  public static final String BOSS_CONFIG_FILE = "./config/head/boss.properties";
+ public static final String VOTE_FILE = "./config/head/vote.properties";
 
  //functions
  public static final String ACCESS_CONFIGURATION_FILE = "./config/functions/access.properties";
Index: head-src/com/l2jfrozen/gameserver/model/entity/VoteRewardTopzone.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/model/entity/VoteRewardTopzone.java (revision 0)
+++ head-src/com/l2jfrozen/gameserver/model/entity/VoteRewardTopzone.java (revision 0)
@@ -0,0 +1,330 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jfrozen.gameserver.model.entity;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Collection;
+
+import javolution.util.FastMap;
+
+import com.l2jfrozen.Config;
+import com.l2jfrozen.gameserver.model.entity.Announcements;
+import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
+import com.l2jfrozen.gameserver.model.L2World;
+import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
+/**
+ * @author Anarchy
+ *
+ */
+public class VoteRewardTopzone
+{
+ // Configurations.
+ private static String topzoneUrl = Config.TOPZONE_SERVER_LINK;
+ private static String page1Url = Config.TOPZONE_FIRST_PAGE_LINK;
+ private static int voteRewardVotesDifference = Config.TOPZONE_VOTES_DIFFERENCE;
+ private static int firstPageRankNeeded = Config.TOPZONE_FIRST_PAGE_RANK_NEEDED;
+ private static int checkTime = 60*1000*Config.TOPZONE_REWARD_CHECK_TIME;
+
+ // Don't-touch variables.
+ private static int lastVotes = 0;
+ private static FastMap<String, Integer> playerIps = new FastMap<String, Integer>();
+
+ public static void updateConfigurations()
+ {
+ topzoneUrl = Config.TOPZONE_SERVER_LINK;
+ page1Url = Config.TOPZONE_FIRST_PAGE_LINK;
+ voteRewardVotesDifference = Config.TOPZONE_VOTES_DIFFERENCE;
+ firstPageRankNeeded = Config.TOPZONE_FIRST_PAGE_RANK_NEEDED;
+ checkTime = 60*1000*Config.TOPZONE_REWARD_CHECK_TIME;
+ }
+
+ public static void getInstance()
+ {
+ System.out.println("Vote reward system initialized.");
+ ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ if (Config.ALLOW_TOPZONE_VOTE_REWARD)
+ {
+ reward();
+ }
+ else
+ {
+ return;
+ }
+ }
+ }, checkTime/2, checkTime);
+ }
+
+ private static void reward()
+ {
+ int firstPageVotes = getFirstPageRankVotes();
+ int currentVotes = getVotes();
+
+ if (firstPageVotes == -1 || currentVotes == -1)
+ {
+ if (firstPageVotes == -1)
+ {
+ System.out.println("There was a problem on getting votes from server with rank "+firstPageRankNeeded+".");
+ }
+ if (currentVotes == -1)
+ {
+ System.out.println("There was a problem on getting server votes.");
+ }
+
+ return;
+ }
+
+ if (lastVotes == 0)
+ {
+ lastVotes = currentVotes;
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+((lastVotes+voteRewardVotesDifference)-currentVotes)+" vote(s) for reward.");
+ if (Config.ALLOW_TOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on topzone: "+currentVotes);
+ System.out.println("Votes needed for reward: "+((lastVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ if (firstPageVotes-lastVotes <= 0)
+ {
+ Announcements.getInstance().announceToAll("Vote reward: We are in the first page of topzone, so the reward will be big.");
+ if (Config.ALLOW_TOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server is on the first page of topzone.");
+ }
+ }
+ else
+ {
+ Announcements.getInstance().announceToAll("Vote reward: We need "+(firstPageVotes-lastVotes)+" vote(s) to get to the first page of topzone for big reward.");
+ if (Config.ALLOW_TOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes needed for first page: "+(firstPageVotes-lastVotes));
+ }
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ return;
+ }
+
+ if (currentVotes >= lastVotes+voteRewardVotesDifference)
+ {
+ Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
+ if (firstPageVotes-currentVotes <= 0)
+ {
+ if (Config.ALLOW_TOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on topzone: "+currentVotes);
+ System.out.println("Server is on the first page of topzone.");
+ System.out.println("Votes needed for next reward: "+((currentVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Everyone has been rewarded with big reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ for (L2PcInstance p : pls)
+ {
+ boolean canReward = false;
+ String pIp = p.getClient().getConnection().getInetAddress().getHostAddress();
+ if (playerIps.containsKey(pIp))
+ {
+ int count = playerIps.get(pIp);
+ if (count < Config.TOPZONE_DUALBOXES_ALLOWED)
+ {
+ playerIps.remove(pIp);
+ playerIps.put(pIp, count+1);
+ canReward = true;
+ }
+ }
+ else
+ {
+ canReward = true;
+ playerIps.put(pIp, 1);
+ }
+ if (canReward)
+ {
+ for (int i : Config.TOPZONE_BIG_REWARD.keySet())
+ {
+ p.addItem("Vote reward.", i, Config.TOPZONE_BIG_REWARD.get(i), p, true);
+ }
+ }
+ else
+ {
+ p.sendMessage("Already "+Config.TOPZONE_DUALBOXES_ALLOWED+" character(s) of your ip have been rewarded, so this character won't be rewarded.");
+ }
+ }
+ playerIps.clear();
+ }
+ else
+ {
+ if (Config.ALLOW_TOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on topzone: "+currentVotes);
+ System.out.println("Server votes needed for first page: "+(firstPageVotes-lastVotes));
+ System.out.println("Votes needed for next reward: "+((currentVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Everyone has been rewarded with small reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+(firstPageVotes-currentVotes)+" vote(s) to get to the first page of topzone for big reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ for (L2PcInstance p : pls)
+ {
+ boolean canReward = false;
+ String pIp = p.getClient().getConnection().getInetAddress().getHostAddress();
+ if (playerIps.containsKey(pIp))
+ {
+ int count = playerIps.get(pIp);
+ if (count < Config.TOPZONE_DUALBOXES_ALLOWED)
+ {
+ playerIps.remove(pIp);
+ playerIps.put(pIp, count+1);
+ canReward = true;
+ }
+ }
+ else
+ {
+ canReward = true;
+ playerIps.put(pIp, 1);
+ }
+ if (canReward)
+ {
+ for (int i : Config.TOPZONE_SMALL_REWARD.keySet())
+ {
+ p.addItem("Vote reward.", i, Config.TOPZONE_SMALL_REWARD.get(i), p, true);
+ }
+ }
+ else
+ {
+ p.sendMessage("Already "+Config.TOPZONE_DUALBOXES_ALLOWED+" character(s) of your ip have been rewarded, so this character won't be rewarded.");
+ }
+ }
+ playerIps.clear();
+ }
+
+ lastVotes = currentVotes;
+ }
+ else
+ {
+ if (firstPageVotes-currentVotes <= 0)
+ {
+ if (Config.ALLOW_TOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on topzone: "+currentVotes);
+ System.out.println("Server is on the first page of topzone.");
+ System.out.println("Votes needed for next reward: "+((lastVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+((lastVotes+voteRewardVotesDifference)-currentVotes)+" vote(s) for big reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ }
+ else
+ {
+ if (Config.ALLOW_TOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on topzone: "+currentVotes);
+ System.out.println("Server votes needed for first page: "+(firstPageVotes-lastVotes));
+ System.out.println("Votes needed for next reward: "+((lastVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+((lastVotes+voteRewardVotesDifference)-currentVotes)+" vote(s) for small reward.");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+(firstPageVotes-currentVotes)+" vote(s) to get to the first page of topzone for big reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ }
+ }
+ }
+
+ private static int getFirstPageRankVotes()
+ {
+ InputStreamReader isr = null;
+ BufferedReader br = null;
+
+ try
+ {
+ URLConnection con = new URL(page1Url).openConnection();
+ con.addRequestProperty("User-Agent", "Mozilla/4.76");
+ isr = new InputStreamReader(con.getInputStream());
+ br = new BufferedReader(isr);
+
+ String line;
+ int i = 0;
+ while ((line = br.readLine()) != null)
+ {
+ if (line.contains("<td><div align=\"center\">"+firstPageRankNeeded+"</div></td>"))
+ {
+ i++;
+ }
+ if (line.contains("<td><div align=\"center\">") && i == 1)
+ {
+ i++;
+ }
+ if (line.contains("<td><div align=\"center\">") && i == 2)
+ {
+ i = 0;
+ int votes = Integer.valueOf(line.split(">")[2].replace("</div", ""));
+ return votes;
+ }
+ }
+
+ br.close();
+ isr.close();
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ System.out.println("Error while getting server vote count.");
+ }
+
+ return -1;
+ }
+
+ private static int getVotes()
+ {
+ InputStreamReader isr = null;
+ BufferedReader br = null;
+
+ try
+ {
+ URLConnection con = new URL(topzoneUrl).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("<tr><td><div align=\"center\"><b><font style=\"font-size:14px;color:#018BC1;\"") && !got)
+ {
+ got = true;
+ int votes = Integer.valueOf(line.split("=\"font-size:14px;color:#018BC1;\">")[1].replace("</font></b></div></td></tr>", ""));
+ return votes;
+ }
+ }
+
+ br.close();
+ isr.close();
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ System.out.println("Error while getting server vote count.");
+ }
+
+ return -1;
+ }
+}
\ No newline at end of file
Index: config/head/vote.properties
===================================================================
--- config/head/vote.properties (revision 0)
+++ config/head/vote.properties (revision 0)
@@ -0,0 +1,49 @@
+# Vote reward for Hopzone.
+AllowHopzoneVoteReward = True
+# Vote reward server link.
+# First page of servers list link.
+HopzoneFirstPageLink = http://l2.hopzone.net/lineage2/
+# Votes for next reward needed.
+HopzoneVotesDifference = 5
+# Rank needed for server to be on first page.
+HopzoneFirstPageRankNeeded = 15
+# Minutes between rewards.
+# Eg. You put 5 it checks every 5 minutes for reward.
+HopzoneRewardCheckTime = 5
+# Small reward(s).
+HopzoneSmallReward = 57,100000000;
+# Big reward(s).
+HopzoneBigReward = 3470,1;
+# Hopzone reward max dual boxes reward.
+# For example if you put 2 and someone has 3 boxes open 2 will be rewarded.
+HopzoneDuaboxesAllowed = 1
+# Game server console report.
+# If set to true, game server console will get a report of
+# current vote count, votes needed for next reward and votes needed for first page.
+AllowHopzoneGameServerReport = True
+
+# Vote reward for Topzone.
+AllowTopzoneVoteReward = True
+# Vote reward server link.
+# First page of servers list link.
+# Votes for next reward needed.
+TopzoneVotesDifference = 5
+# Rank needed for server to be on first page.
+TopzoneFirstPageRankNeeded = 15
+# Minutes between rewards.
+# Eg. You put 5 it checks every 5 minutes for reward.
+TopzoneRewardCheckTime = 5
+# Small reward(s).
+TopzoneSmallReward = 57,100000000;
+# Big reward(s).
+TopzoneBigReward = 3470,1;
+# Hopzone reward max dual boxes reward.
+# For example if you put 2 and someone has 3 boxes open 2 will be rewarded.
+TopzoneDuaboxesAllowed = 1
+# Game server console report.
+# If set to true, game server console will get a report of
+# current vote count, votes needed for next reward and votes needed for first page.
+AllowTopzoneGameServerReport = True
\ No newline at end of file
Index: head-src/com/l2jfrozen/gameserver/model/entity/VoteRewardHopzone.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/model/entity/VoteRewardHopzone.java (revision 0)
+++ head-src/com/l2jfrozen/gameserver/model/entity/VoteRewardHopzone.java (revision 0)
@@ -0,0 +1,323 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jfrozen.gameserver.model.entity;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Collection;
+
+import javolution.util.FastMap;
+
+import com.l2jfrozen.Config;
+import com.l2jfrozen.gameserver.model.entity.Announcements;
+import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
+import com.l2jfrozen.gameserver.model.L2World;
+import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
+/**
+ * @author Anarchy
+ *
+ */
+public class VoteRewardHopzone
+{
+ // Configurations.
+ private static String hopzoneUrl = Config.HOPZONE_SERVER_LINK;
+ private static String page1Url = Config.HOPZONE_FIRST_PAGE_LINK;
+ private static int voteRewardVotesDifference = Config.HOPZONE_VOTES_DIFFERENCE;
+ private static int firstPageRankNeeded = Config.HOPZONE_FIRST_PAGE_RANK_NEEDED;
+ private static int checkTime = 60*1000*Config.HOPZONE_REWARD_CHECK_TIME;
+
+ // Don't-touch variables.
+ private static int lastVotes = 0;
+ private static FastMap<String, Integer> playerIps = new FastMap<String, Integer>();
+
+ public static void updateConfigurations()
+ {
+ hopzoneUrl = Config.HOPZONE_SERVER_LINK;
+ page1Url = Config.HOPZONE_FIRST_PAGE_LINK;
+ voteRewardVotesDifference = Config.HOPZONE_VOTES_DIFFERENCE;
+ firstPageRankNeeded = Config.HOPZONE_FIRST_PAGE_RANK_NEEDED;
+ checkTime = 60*1000*Config.HOPZONE_REWARD_CHECK_TIME;
+ }
+
+ public static void getInstance()
+ {
+ System.out.println("Vote reward system initialized.");
+ ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ if (Config.ALLOW_HOPZONE_VOTE_REWARD)
+ {
+ reward();
+ }
+ else
+ {
+ return;
+ }
+ }
+ }, checkTime/2, checkTime);
+ }
+
+ private static void reward()
+ {
+ int firstPageVotes = getFirstPageRankVotes();
+ int currentVotes = getVotes();
+
+ if (firstPageVotes == -1 || currentVotes == -1)
+ {
+ if (firstPageVotes == -1)
+ {
+ System.out.println("There was a problem on getting votes from server with rank "+firstPageRankNeeded+".");
+ }
+ if (currentVotes == -1)
+ {
+ System.out.println("There was a problem on getting server votes.");
+ }
+
+ return;
+ }
+
+ if (lastVotes == 0)
+ {
+ lastVotes = currentVotes;
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+((lastVotes+voteRewardVotesDifference)-currentVotes)+" vote(s) for reward.");
+ if (Config.ALLOW_HOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on hopzone: "+currentVotes);
+ System.out.println("Votes needed for reward: "+((lastVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ if (firstPageVotes-lastVotes <= 0)
+ {
+ Announcements.getInstance().announceToAll("Vote reward: We are in the first page of Hopzone, so the reward will be big.");
+ if (Config.ALLOW_HOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server is on the first page of hopzone.");
+ }
+ }
+ else
+ {
+ Announcements.getInstance().announceToAll("Vote reward: We need "+(firstPageVotes-lastVotes)+" vote(s) to get to the first page of Hopzone for big reward.");
+ if (Config.ALLOW_HOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes needed for first page: "+(firstPageVotes-lastVotes));
+ }
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ return;
+ }
+
+ if (currentVotes >= lastVotes+voteRewardVotesDifference)
+ {
+ Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
+ if (firstPageVotes-currentVotes <= 0)
+ {
+ if (Config.ALLOW_HOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on hopzone: "+currentVotes);
+ System.out.println("Server is on the first page of hopzone.");
+ System.out.println("Votes needed for next reward: "+((currentVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Everyone has been rewarded with big reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ for (L2PcInstance p : pls)
+ {
+ boolean canReward = false;
+ String pIp = p.getClient().getConnection().getInetAddress().getHostAddress();
+ if (playerIps.containsKey(pIp))
+ {
+ int count = playerIps.get(pIp);
+ if (count < Config.HOPZONE_DUALBOXES_ALLOWED)
+ {
+ playerIps.remove(pIp);
+ playerIps.put(pIp, count+1);
+ canReward = true;
+ }
+ }
+ else
+ {
+ canReward = true;
+ playerIps.put(pIp, 1);
+ }
+ if (canReward)
+ {
+ for (int i : Config.HOPZONE_BIG_REWARD.keySet())
+ {
+ p.addItem("Vote reward.", i, Config.HOPZONE_BIG_REWARD.get(i), p, true);
+ }
+ }
+ else
+ {
+ p.sendMessage("Already "+Config.HOPZONE_DUALBOXES_ALLOWED+" character(s) of your ip have been rewarded, so this character won't be rewarded.");
+ }
+ }
+ playerIps.clear();
+ }
+ else
+ {
+ if (Config.ALLOW_HOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on hopzone: "+currentVotes);
+ System.out.println("Server votes needed for first page: "+(firstPageVotes-lastVotes));
+ System.out.println("Votes needed for next reward: "+((currentVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Everyone has been rewarded with small reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+(firstPageVotes-currentVotes)+" vote(s) to get to the first page of Hopzone for big reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ for (L2PcInstance p : pls)
+ {
+ boolean canReward = false;
+ String pIp = p.getClient().getConnection().getInetAddress().getHostAddress();
+ if (playerIps.containsKey(pIp))
+ {
+ int count = playerIps.get(pIp);
+ if (count < Config.HOPZONE_DUALBOXES_ALLOWED)
+ {
+ playerIps.remove(pIp);
+ playerIps.put(pIp, count+1);
+ canReward = true;
+ }
+ }
+ else
+ {
+ canReward = true;
+ playerIps.put(pIp, 1);
+ }
+ if (canReward)
+ {
+ for (int i : Config.HOPZONE_SMALL_REWARD.keySet())
+ {
+ p.addItem("Vote reward.", i, Config.HOPZONE_SMALL_REWARD.get(i), p, true);
+ }
+ }
+ else
+ {
+ p.sendMessage("Already "+Config.HOPZONE_DUALBOXES_ALLOWED+" character(s) of your ip have been rewarded, so this character won't be rewarded.");
+ }
+ }
+ playerIps.clear();
+ }
+
+ lastVotes = currentVotes;
+ }
+ else
+ {
+ if (firstPageVotes-currentVotes <= 0)
+ {
+ if (Config.ALLOW_HOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on hopzone: "+currentVotes);
+ System.out.println("Server is on the first page of hopzone.");
+ System.out.println("Votes needed for next reward: "+((lastVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+((lastVotes+voteRewardVotesDifference)-currentVotes)+" vote(s) for big reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ }
+ else
+ {
+ if (Config.ALLOW_HOPZONE_GAME_SERVER_REPORT)
+ {
+ System.out.println("Server votes on hopzone: "+currentVotes);
+ System.out.println("Server votes needed for first page: "+(firstPageVotes-lastVotes));
+ System.out.println("Votes needed for next reward: "+((lastVotes+voteRewardVotesDifference)-currentVotes));
+ }
+ Announcements.getInstance().announceToAll("Vote reward: Current vote count is "+currentVotes+".");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+((lastVotes+voteRewardVotesDifference)-currentVotes)+" vote(s) for small reward.");
+ Announcements.getInstance().announceToAll("Vote reward: We need "+(firstPageVotes-currentVotes)+" vote(s) to get to the first page of Hopzone for big reward.");
+ Announcements.getInstance().announceToAll("Vote reward: Type .menu to see what the big and what the small reward is.");
+ }
+ }
+ }
+
+ private static int getFirstPageRankVotes()
+ {
+ InputStreamReader isr = null;
+ BufferedReader br = null;
+
+ try
+ {
+ URLConnection con = new URL(page1Url).openConnection();
+ con.addRequestProperty("User-Agent", "Mozilla/4.76");
+ isr = new InputStreamReader(con.getInputStream());
+ br = new BufferedReader(isr);
+
+ String line;
+ int i = 0;
+ while ((line = br.readLine()) != null)
+ {
+ if (line.contains("<span class=\"no\">"+firstPageRankNeeded+"</span>"))
+ {
+ i++;
+ }
+ if (line.contains("Anonymous Votes") && i == 1)
+ {
+ i = 0;
+ int votes = Integer.valueOf(line.split(">")[1].replace("</span", ""));
+ return votes;
+ }
+ }
+
+ br.close();
+ isr.close();
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ System.out.println("Error while getting server vote count.");
+ }
+
+ return -1;
+ }
+
+ private static int getVotes()
+ {
+ InputStreamReader isr = null;
+ BufferedReader br = null;
+
+ try
+ {
+ URLConnection con = new URL(hopzoneUrl).openConnection();
+ con.addRequestProperty("User-Agent", "Mozilla/4.76");
+ isr = new InputStreamReader(con.getInputStream());
+ br = new BufferedReader(isr);
+
+ String line;
+ while ((line = br.readLine()) != null)
+ {
+ if (line.contains("Anonymous User Votes"))
+ {
+ int votes = Integer.valueOf(line.split(">")[2].replace("</span", ""));
+ return votes;
+ }
+ }
+
+ br.close();
+ isr.close();
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ System.out.println("Error while getting server vote count.");
+ }
+
+ return -1;
+ }
+}
\ No newline at end of file
 
  • 0
Posted (edited)

http://www.maxcheaters.com/topic/134612-vortex-vote-reward-engine-ingame-personal-system-100-secure/

 

to exw gia H5 ama thes sto deinw.

pantos ean exeis upomoni perase to L2JHellas.

to exei perasmeno mpwreis na to pareis mesa apo to source 

Edited by ExCaLiBuR®
  • 0
Posted

File mou to thema m ine oti doulevw se frozen project...Kai epidi ton exw vali twra se eteria mou ipan oti prepei na ton parw sto pc m na tou valw code mesw eclipse k 3ana anevasma swsta???

  • 0
Posted

File mou to thema m ine oti doulevw se frozen project...Kai epidi ton exw vali twra se eteria mou ipan oti prepei na ton parw sto pc m na tou valw code mesw eclipse k 3ana anevasma swsta???

oxi. ektos kai ean ekanes malakia kai esvises to source apo to pc sou.

apla ean thes na peraseis kapoion kwdika to pairnas sto pc sou kaneis compile

pairneis to .JAR kai sto stelneis sto dedicated

  • 0
Posted

den exw svisi file tpt ta source iparxoun sto workspace alla poio .jar pernis egw thimame ekana apla extract ta files se ena fakelo server kai eftiaxna ta config

  • 0
Posted

Epidi einai se alo pc to source tha sto stilw ayrio eyxaristw poly ek ton proterwn..An thelis mporis na me kani k skype(lampros.xiroudakis)pou exis mia alfa gnwsi apo oti vlepw

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • ## [1.5.5] - 2026-02-02   ### ✨ New Features - **Discord Login**: You can now sign in with your Discord account. Admins enable and configure Discord login in **cpadmin → Users** (Discord auth settings: Client ID, Client Secret, Redirect URI). If you already have an account with the same email (e.g. forum, Google, or legacy), signing in with Discord links to that account so you keep one profile. Discord login is available on Add Server, My Servers, Vote page, and Premium Ads booking. - **Setup Links**: In **cpadmin → Users**, both Google and Discord login settings now include direct links to their official developer portals (Google Cloud Console and Discord Developer Portal) for easier OAuth app setup.   ### 🔒 Security - **Email Required for Registration**: New user registration via OAuth (Forum, Google, Discord) now requires a valid email address. If the OAuth provider doesn't provide an email (e.g. unverified Discord email), registration is rejected with a clear message. This prevents anonymous accounts and ensures all users can receive important notifications.   ### 🔄 Improvements - **User Auth Badges**: In **cpadmin → Users**, the Registered Members table now shows auth method badges: **Forum**, **Google**, **Discord**, or **Legacy**. Users can have multiple badges if they've linked multiple login methods. - **Server Info Labels**: Translated server info labels (Owner Name, Language, Server Location) are now properly localized in all 5 languages (English, Spanish, Portuguese, Greek, Russian).   ---   ## [1.5.4] - 2026-02-01   ### ✨ New Features - **Google Login**: You can now sign in with your Google account. Admins enable and configure Google login in **cpadmin → Users** (Google auth settings: Client ID, Client Secret, Redirect URI). If you already have an account with the same email (e.g. forum or legacy), signing in with Google links to that account so you keep one profile. The login menu (navbar and login prompts) offers **Login with Forum Account**, **Login with Google** (when enabled), and **Create Forum Account**. Google login is available on Add Server, My Servers, Profile Settings, Vote page, and Premium Ads booking. - **Ban/Unban Members**: In **cpadmin → Users**, admins can ban or unban registered members. Banned users see a full-page message: "Sorry, you are banned from using this site." When a user is banned, all their servers are set to inactive. - **Moderator Activity Log**: **cpadmin → Moderators** now records when a moderator or admin enters the CPAdmin panel (e.g. "Moderator X entered CPAdmin panel at &lt;time&gt;") and when they change any cpadmin settings (only write actions are logged; read-only use is not). - **Clear Moderator Logs**: Admins can clear all moderator activity log entries via a **Clear logs** button with confirmation. Logs are shown at 100 per page with pagination. - **Filter by Moderator**: In the Moderator Activity Log, a **Filter by moderator** dropdown lets you view activity for a specific moderator or "All moderators." - **cpadmin → Users Tab**: New **Users** tab in the admin panel with Registered Members list (paginated), Google auth settings card, and per-user Ban/Unban and server links.   ### 🔄 Improvements - **cpadmin → Servers**: Each server name in the servers table is now clickable and opens that server’s info page. - **cpadmin → Users – Servers column**: The servers count/list is clickable and opens a small modal listing that user’s servers; each server name in the modal links to the server info page. - **cpadmin → Users – Search**: A search bar above the Registered Members table lets you search by **username**, **email**, or **server name**. Results are filtered on the server (paginated); clearing the search resets the list. - **Moderator Activity Log**: Pagination shows "Showing X–Y of Z" and "Page N of M" with Previous/Next when there are more than 100 entries. - **Login UI**: Login options (Forum, Google, Create account) are shown in a consistent dropdown and in modals (Add Server, My Servers, Vote, Premium Ads) for a clearer sign-in experience. - **Vote Page – Unauthenticated**: When you must log in to vote, the page now shows "Vote for [Server Name]" as the main heading and presents login options in a compact section.   ---   ## [1.5.3] - 2026-01-30   ### ✨ New Features - **File Logs in Admin Panel**: Admins can now view CodeIgniter PHP logs (api/writable/logs) directly in **cpadmin → Logs**. Select a date to view the log file, refresh to reload, or delete all log files to free up space.   ### 🔄 Improvements - **Cache System**: Full cache audit and improvements — when you clear cache in cpadmin, both backend and frontend caches are cleared. Server listings, My Servers, pricing, ad config, and chronicles all refresh with fresh data. New paid servers now appear in listings and My Servers immediately. - **Admin Panel – Server Rates**: Server rates in the admin servers table now display in compact format (e.g. x10000 → x10k, x100000 → x100k, x1000000 → x1m) for easier scanning. Hover to see the full value.
    • WTB High Five source running on Salvation/Fafurion client
    • MoMoProxy has updated more static residential proxies for USA location, anyone interested in can view: https://momoproxy.com/static-residential-proxies
    • Hello, i am selling a project that was going to open but at the end i have not the time to do it Its a c4 server ( scripts) with all the c5 changes played from Interlude Client    the server is 1:1 copy of the legendary 2007 L2Revenge server with some bits like events and some more sync stuff There is a lot of retail fixes included  , extender is vanganth and has a lot of mods but mostly fixes on the retail stuff.   Test server is available through discord , i offer client/patch/server/sources The price is 300 Euro and for testing the server you have to pm me at discord banshee1019 , dont really wanna let anybody log because some people are "bad"   Once you buy you also have free support for 1 year , that doesnt mean i will code all your ideas but support you if something comes up , and guide you to do simple edits
  • 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..