U3Games
Lineage II | Desarrollo & Soporte => Desarrollo de Servidores => Implementaciones => Mensaje iniciado por: Swarlog en Ago 19, 2022, 01:18 AM
CitarCORE:
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
CitarSQL:
-- ----------------------------
-- 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');