Vote reward system.
Author: Anarchy Source: http://www.maxcheaters.com/topic/197374-hopzonetopzonenetwork-vote-reward-re-share/
This commit is contained in:
		
							
								
								
									
										56
									
								
								L2J_Mobius_Helios/dist/game/config/Custom/VoteReward.ini
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								L2J_Mobius_Helios/dist/game/config/Custom/VoteReward.ini
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| # Vote reward for Network. | ||||
| AllowNetworkVoteReward = False | ||||
| # Vote reward server link. (IMPORTANT!!!! Always add .html at the end of the link) | ||||
| NetworkServerLink = | ||||
| # Votes for next reward needed. | ||||
| NetworkVotesDifference = 4 | ||||
| # Minutes between rewards. | ||||
| # Eg. You put 5 it checks every 5 minutes for reward. | ||||
| NetworkRewardCheckTime = 5 | ||||
| # Reward(s). | ||||
| NetworkReward = 3481,5; | ||||
| # Network reward max dual boxes reward. | ||||
| # For example if you put 2 and someone has 3 boxes open 2 will be rewarded. | ||||
| NetworkDuaboxesAllowed = 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. | ||||
| AllowNetworkGameServerReport = False | ||||
|  | ||||
| # Vote reward for Topzone. | ||||
| AllowTopzoneVoteReward = False | ||||
| # Vote reward server link. (IMPORTANT!!!! Always add .html at the end of the link) | ||||
| TopzoneServerLink = | ||||
| # Votes for next reward needed. | ||||
| TopzoneVotesDifference = 4 | ||||
| # Minutes between rewards. | ||||
| # Eg. You put 5 it checks every 5 minutes for reward. | ||||
| TopzoneRewardCheckTime = 5 | ||||
| # Reward(s). | ||||
| TopzoneReward = 3481,5; | ||||
| # Topzone 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 = False | ||||
|  | ||||
| # Vote reward for Hopzone. | ||||
| AllowHopzoneVoteReward = False | ||||
| # Vote reward server link. (IMPORTANT!!!! Always add .html at the end of the link) | ||||
| HopzoneServerLink = | ||||
| # Votes for next reward needed. | ||||
| HopzoneVotesDifference = 4 | ||||
| # Minutes between rewards. | ||||
| # Eg. You put 5 it checks every 5 minutes for reward. | ||||
| HopzoneRewardCheckTime = 5 | ||||
| # Reward(s). | ||||
| HopzoneReward = 3481,5; | ||||
| # Topzone 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 = False | ||||
| @@ -80,6 +80,7 @@ public final class Config | ||||
| 	// -------------------------------------------------- | ||||
| 	public static final String EOL = System.lineSeparator(); | ||||
| 	 | ||||
| 	// -------------------------------------------------- | ||||
| 	// Config File Definitions | ||||
| 	// -------------------------------------------------- | ||||
| 	public static final String CHARACTER_CONFIG_FILE = "./config/Character.ini"; | ||||
| @@ -105,7 +106,10 @@ public final class Config | ||||
| 	public static final String EMAIL_CONFIG_FILE = "./config/Email.ini"; | ||||
| 	public static final String CH_SIEGE_FILE = "./config/ConquerableHallSiege.ini"; | ||||
| 	public static final String GEODATA_FILE = "./config/GeoData.ini"; | ||||
| 	 | ||||
| 	// -------------------------------------------------- | ||||
| 	// Custom Config File Definitions | ||||
| 	// -------------------------------------------------- | ||||
| 	public static final String CUSTOM_ALLOWED_PLAYER_RACES_CONFIG_FILE = "./config/Custom/AllowedPlayerRaces.ini"; | ||||
| 	public static final String CUSTOM_BANKING_CONFIG_FILE = "./config/Custom/Banking.ini"; | ||||
| 	public static final String CUSTOM_CHAMPION_MONSTERS_CONFIG_FILE = "./config/Custom/ChampionMonsters.ini"; | ||||
| @@ -129,7 +133,9 @@ public final class Config | ||||
| 	public static final String CUSTOM_SELL_BUFFS_CONFIG_FILE = "./config/Custom/SellBuffs.ini"; | ||||
| 	public static final String CUSTOM_SERVER_TIME_CONFIG_FILE = "./config/Custom/ServerTime.ini"; | ||||
| 	public static final String CUSTOM_STARTING_LOCATION_CONFIG_FILE = "./config/Custom/StartingLocation.ini"; | ||||
| 	public static final String CUSTOM_VOTE_REWARD_CONFIG_FILE = "./config/Custom/VoteReward.ini"; | ||||
| 	public static final String CUSTOM_WALKER_BOT_PROTECTION_CONFIG_FILE = "./config/Custom/WalkerBotProtection.ini"; | ||||
| 	 | ||||
| 	// -------------------------------------------------- | ||||
| 	// Variable Definitions | ||||
| 	// -------------------------------------------------- | ||||
| @@ -1110,6 +1116,27 @@ public final class Config | ||||
| 	public static long SELLBUFF_MIN_PRICE; | ||||
| 	public static long SELLBUFF_MAX_PRICE; | ||||
| 	public static int SELLBUFF_MAX_BUFFS; | ||||
| 	public static boolean ALLOW_NETWORK_VOTE_REWARD; | ||||
| 	public static String NETWORK_SERVER_LINK; | ||||
| 	public static int NETWORK_VOTES_DIFFERENCE; | ||||
| 	public static int NETWORK_REWARD_CHECK_TIME; | ||||
| 	public static Map<Integer, Integer> NETWORK_REWARD = new HashMap<>(); | ||||
| 	public static int NETWORK_DUALBOXES_ALLOWED; | ||||
| 	public static boolean ALLOW_NETWORK_GAME_SERVER_REPORT; | ||||
| 	public static boolean ALLOW_TOPZONE_VOTE_REWARD; | ||||
| 	public static String TOPZONE_SERVER_LINK; | ||||
| 	public static int TOPZONE_VOTES_DIFFERENCE; | ||||
| 	public static int TOPZONE_REWARD_CHECK_TIME; | ||||
| 	public static Map<Integer, Integer> TOPZONE_REWARD = new HashMap<>(); | ||||
| 	public static int TOPZONE_DUALBOXES_ALLOWED; | ||||
| 	public static boolean ALLOW_TOPZONE_GAME_SERVER_REPORT; | ||||
| 	public static boolean ALLOW_HOPZONE_VOTE_REWARD; | ||||
| 	public static String HOPZONE_SERVER_LINK; | ||||
| 	public static int HOPZONE_VOTES_DIFFERENCE; | ||||
| 	public static int HOPZONE_REWARD_CHECK_TIME; | ||||
| 	public static Map<Integer, Integer> HOPZONE_REWARD = new HashMap<>(); | ||||
| 	public static int HOPZONE_DUALBOXES_ALLOWED; | ||||
| 	public static boolean ALLOW_HOPZONE_GAME_SERVER_REPORT; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * This class initializes all global variables for configuration.<br> | ||||
| @@ -2636,6 +2663,49 @@ public final class Config | ||||
| 			CUSTOM_STARTING_LOC_Y = StartingLocation.getInt("CustomStartingLocY", 186527); | ||||
| 			CUSTOM_STARTING_LOC_Z = StartingLocation.getInt("CustomStartingLocZ", -3625); | ||||
| 			 | ||||
| 			// Load VoteReward config file (if exists) | ||||
| 			final PropertiesParser VoteReward = new PropertiesParser(CUSTOM_VOTE_REWARD_CONFIG_FILE); | ||||
| 			 | ||||
| 			ALLOW_NETWORK_VOTE_REWARD = VoteReward.getBoolean("AllowNetworkVoteReward", false); | ||||
| 			NETWORK_SERVER_LINK = VoteReward.getString("NetworkServerLink", ""); | ||||
| 			NETWORK_VOTES_DIFFERENCE = VoteReward.getInt("NetworkVotesDifference", 5); | ||||
| 			NETWORK_REWARD_CHECK_TIME = VoteReward.getInt("NetworkRewardCheckTime", 5); | ||||
| 			String NETWORK_SMALL_REWARD_VALUE = VoteReward.getString("NetworkReward", "57,100000000;"); | ||||
| 			String[] NETWORK_small_reward_splitted_1 = NETWORK_SMALL_REWARD_VALUE.split(";"); | ||||
| 			for (String i : NETWORK_small_reward_splitted_1) | ||||
| 			{ | ||||
| 				String[] NETWORK_small_reward_splitted_2 = i.split(","); | ||||
| 				NETWORK_REWARD.put(Integer.parseInt(NETWORK_small_reward_splitted_2[0]), Integer.parseInt(NETWORK_small_reward_splitted_2[1])); | ||||
| 			} | ||||
| 			NETWORK_DUALBOXES_ALLOWED = VoteReward.getInt("NetworkDualboxesAllowed", 1); | ||||
| 			ALLOW_NETWORK_GAME_SERVER_REPORT = VoteReward.getBoolean("AllowNetworkGameServerReport", false); | ||||
| 			ALLOW_TOPZONE_VOTE_REWARD = VoteReward.getBoolean("AllowTopzoneVoteReward", false); | ||||
| 			TOPZONE_SERVER_LINK = VoteReward.getString("TopzoneServerLink", ""); | ||||
| 			TOPZONE_VOTES_DIFFERENCE = VoteReward.getInt("TopzoneVotesDifference", 5); | ||||
| 			TOPZONE_REWARD_CHECK_TIME = VoteReward.getInt("TopzoneRewardCheckTime", 5); | ||||
| 			String TOPZONE_SMALL_REWARD_VALUE = VoteReward.getString("TopzoneReward", "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_REWARD.put(Integer.parseInt(topzone_small_reward_splitted_2[0]), Integer.parseInt(topzone_small_reward_splitted_2[1])); | ||||
| 			} | ||||
| 			TOPZONE_DUALBOXES_ALLOWED = VoteReward.getInt("TopzoneDualboxesAllowed", 1); | ||||
| 			ALLOW_TOPZONE_GAME_SERVER_REPORT = VoteReward.getBoolean("AllowTopzoneGameServerReport", false); | ||||
| 			ALLOW_HOPZONE_VOTE_REWARD = VoteReward.getBoolean("AllowHopzoneVoteReward", false); | ||||
| 			HOPZONE_SERVER_LINK = VoteReward.getString("HopzoneServerLink", ""); | ||||
| 			HOPZONE_VOTES_DIFFERENCE = VoteReward.getInt("HopzoneVotesDifference", 5); | ||||
| 			HOPZONE_REWARD_CHECK_TIME = VoteReward.getInt("HopzoneRewardCheckTime", 5); | ||||
| 			String HOPZONE_SMALL_REWARD_VALUE = VoteReward.getString("HopzoneReward", "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_REWARD.put(Integer.parseInt(hopzone_small_reward_splitted_2[0]), Integer.parseInt(hopzone_small_reward_splitted_2[1])); | ||||
| 			} | ||||
| 			HOPZONE_DUALBOXES_ALLOWED = VoteReward.getInt("HopzoneDualboxesAllowed", 1); | ||||
| 			ALLOW_HOPZONE_GAME_SERVER_REPORT = VoteReward.getBoolean("AllowHopzoneGameServerReport", false); | ||||
| 			 | ||||
| 			// Load WalkerBotProtection config file (if exists) | ||||
| 			final PropertiesParser WalkerBotProtection = new PropertiesParser(CUSTOM_WALKER_BOT_PROTECTION_CONFIG_FILE); | ||||
| 			 | ||||
|   | ||||
| @@ -141,6 +141,7 @@ import com.l2jmobius.gameserver.model.L2World; | ||||
| import com.l2jmobius.gameserver.model.entity.Hero; | ||||
| import com.l2jmobius.gameserver.model.events.EventDispatcher; | ||||
| import com.l2jmobius.gameserver.model.olympiad.Olympiad; | ||||
| import com.l2jmobius.gameserver.model.votereward.VoteSystem; | ||||
| import com.l2jmobius.gameserver.network.ClientNetworkManager; | ||||
| import com.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager; | ||||
| import com.l2jmobius.gameserver.network.telnet.TelnetServer; | ||||
| @@ -376,6 +377,7 @@ public class GameServer | ||||
| 		} | ||||
| 		 | ||||
| 		MonsterRace.getInstance(); | ||||
| 		VoteSystem.initialize(); | ||||
| 		TaskManager.getInstance(); | ||||
| 		 | ||||
| 		AntiFeedManager.getInstance().registerEvent(AntiFeedManager.GAME_ID); | ||||
|   | ||||
| @@ -0,0 +1,83 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * 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.l2jmobius.gameserver.model.votereward; | ||||
|  | ||||
| import java.io.BufferedReader; | ||||
| import java.io.InputStreamReader; | ||||
| import java.net.URL; | ||||
| import java.net.URLConnection; | ||||
| import java.util.Map; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
|  | ||||
| /** | ||||
|  * @author Anarchy | ||||
|  */ | ||||
| public class Hopzone extends VoteSystem | ||||
| { | ||||
| 	public Hopzone(int votesDiff, boolean allowReport, int boxes, Map<Integer, Integer> rewards, int checkMins) | ||||
| 	{ | ||||
| 		super(votesDiff, allowReport, boxes, rewards, checkMins); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void run() | ||||
| 	{ | ||||
| 		reward(); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getVotes() | ||||
| 	{ | ||||
| 		InputStreamReader isr = null; | ||||
| 		BufferedReader br = null; | ||||
| 		 | ||||
| 		try | ||||
| 		{ | ||||
| 			URLConnection con = new URL(Config.HOPZONE_SERVER_LINK).openConnection(); | ||||
| 			con.addRequestProperty("User-Agent", "Mozilla/5.0"); | ||||
| 			isr = new InputStreamReader(con.getInputStream()); | ||||
| 			br = new BufferedReader(isr); | ||||
| 			 | ||||
| 			String line; | ||||
| 			while ((line = br.readLine()) != null) | ||||
| 			{ | ||||
| 				if (line.contains("<li><span class=\"rank anonymous tooltip\" title")) | ||||
| 				{ | ||||
| 					int votes = Integer.valueOf(line.split(">")[2].replace("</span", "")); | ||||
| 					return votes; | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			br.close(); | ||||
| 			isr.close(); | ||||
| 		} | ||||
| 		catch (Exception e) | ||||
| 		{ | ||||
| 			e.printStackTrace(); | ||||
| 			System.out.println("Error while getting server vote count from " + getSiteName() + "."); | ||||
| 		} | ||||
| 		 | ||||
| 		return -1; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getSiteName() | ||||
| 	{ | ||||
| 		return "Hopzone"; | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,83 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * 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.l2jmobius.gameserver.model.votereward; | ||||
|  | ||||
| import java.io.BufferedReader; | ||||
| import java.io.InputStreamReader; | ||||
| import java.net.URL; | ||||
| import java.net.URLConnection; | ||||
| import java.util.Map; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
|  | ||||
| /** | ||||
|  * @author Anarchy | ||||
|  */ | ||||
| public class Network extends VoteSystem | ||||
| { | ||||
| 	public Network(int votesDiff, boolean allowReport, int boxes, Map<Integer, Integer> rewards, int checkMins) | ||||
| 	{ | ||||
| 		super(votesDiff, allowReport, boxes, rewards, checkMins); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void run() | ||||
| 	{ | ||||
| 		reward(); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getVotes() | ||||
| 	{ | ||||
| 		InputStreamReader isr = null; | ||||
| 		BufferedReader br = null; | ||||
| 		 | ||||
| 		try | ||||
| 		{ | ||||
| 			URLConnection con = new URL(Config.NETWORK_SERVER_LINK).openConnection(); | ||||
| 			con.addRequestProperty("User-Agent", "Mozilla/5.0"); | ||||
| 			isr = new InputStreamReader(con.getInputStream()); | ||||
| 			br = new BufferedReader(isr); | ||||
| 			 | ||||
| 			String line; | ||||
| 			while ((line = br.readLine()) != null) | ||||
| 			{ | ||||
| 				if (line.contains("<div class=\"tls-in-sts\"><b style")) | ||||
| 				{ | ||||
| 					int votes = Integer.valueOf(line.split(">")[2].replace("</b", "")); | ||||
| 					return votes; | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			br.close(); | ||||
| 			isr.close(); | ||||
| 		} | ||||
| 		catch (Exception e) | ||||
| 		{ | ||||
| 			e.printStackTrace(); | ||||
| 			System.out.println("Error while getting server vote count from " + getSiteName() + "."); | ||||
| 		} | ||||
| 		 | ||||
| 		return -1; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getSiteName() | ||||
| 	{ | ||||
| 		return "Network"; | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,80 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * 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.l2jmobius.gameserver.model.votereward; | ||||
|  | ||||
| import java.io.BufferedReader; | ||||
| import java.io.InputStreamReader; | ||||
| import java.net.URL; | ||||
| import java.net.URLConnection; | ||||
| import java.util.Map; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
|  | ||||
| /** | ||||
|  * @author Anarchy | ||||
|  */ | ||||
| public class Topzone extends VoteSystem | ||||
| { | ||||
| 	public Topzone(int votesDiff, boolean allowReport, int boxes, Map<Integer, Integer> rewards, int checkMins) | ||||
| 	{ | ||||
| 		super(votesDiff, allowReport, boxes, rewards, checkMins); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void run() | ||||
| 	{ | ||||
| 		reward(); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getVotes() | ||||
| 	{ | ||||
| 		InputStreamReader isr = null; | ||||
| 		BufferedReader br = null; | ||||
| 		 | ||||
| 		try | ||||
| 		{ | ||||
| 			URLConnection con = new URL(Config.TOPZONE_SERVER_LINK).openConnection(); | ||||
| 			con.addRequestProperty("User-Agent", "L2TopZone"); | ||||
| 			isr = new InputStreamReader(con.getInputStream()); | ||||
| 			br = new BufferedReader(isr); | ||||
| 			 | ||||
| 			String line; | ||||
| 			while ((line = br.readLine()) != null) | ||||
| 			{ | ||||
| 				int votes = Integer.valueOf(line); | ||||
| 				return votes; | ||||
| 			} | ||||
| 			 | ||||
| 			br.close(); | ||||
| 			isr.close(); | ||||
| 		} | ||||
| 		catch (Exception e) | ||||
| 		{ | ||||
| 			e.printStackTrace(); | ||||
| 			System.out.println("Error while getting server vote count from " + getSiteName() + "."); | ||||
| 		} | ||||
| 		 | ||||
| 		return -1; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getSiteName() | ||||
| 	{ | ||||
| 		return "Topzone"; | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,184 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * 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.l2jmobius.gameserver.model.votereward; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
| import com.l2jmobius.gameserver.ThreadPoolManager; | ||||
| import com.l2jmobius.gameserver.enums.ChatType; | ||||
| import com.l2jmobius.gameserver.model.L2World; | ||||
| import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; | ||||
| import com.l2jmobius.gameserver.network.serverpackets.CreatureSay; | ||||
| import com.l2jmobius.gameserver.util.Broadcast; | ||||
|  | ||||
| /** | ||||
|  * @author Anarchy | ||||
|  */ | ||||
| public abstract class VoteSystem implements Runnable | ||||
| { | ||||
| 	private static List<VoteSystem> voteSystems = new ArrayList<>(); | ||||
| 	 | ||||
| 	protected int votesDiff; | ||||
| 	protected boolean allowReport; | ||||
| 	protected int boxes; | ||||
| 	protected Map<Integer, Integer> rewards; | ||||
| 	protected int checkMins; | ||||
| 	protected int lastVotes = 0; | ||||
| 	private final Map<String, Integer> playerIps = new HashMap<>(); | ||||
| 	 | ||||
| 	public static void initialize() | ||||
| 	{ | ||||
| 		System.out.println("Vote reward system initialized."); | ||||
| 		if (Config.ALLOW_NETWORK_VOTE_REWARD) | ||||
| 		{ | ||||
| 			voteSystems.add(new Network(Config.NETWORK_VOTES_DIFFERENCE, Config.ALLOW_NETWORK_GAME_SERVER_REPORT, Config.NETWORK_DUALBOXES_ALLOWED, Config.NETWORK_REWARD, Config.NETWORK_REWARD_CHECK_TIME)); | ||||
| 		} | ||||
| 		if (Config.ALLOW_TOPZONE_VOTE_REWARD) | ||||
| 		{ | ||||
| 			voteSystems.add(new Topzone(Config.TOPZONE_VOTES_DIFFERENCE, Config.ALLOW_TOPZONE_GAME_SERVER_REPORT, Config.TOPZONE_DUALBOXES_ALLOWED, Config.TOPZONE_REWARD, Config.TOPZONE_REWARD_CHECK_TIME)); | ||||
| 		} | ||||
| 		if (Config.ALLOW_HOPZONE_VOTE_REWARD) | ||||
| 		{ | ||||
| 			voteSystems.add(new Hopzone(Config.HOPZONE_VOTES_DIFFERENCE, Config.ALLOW_HOPZONE_GAME_SERVER_REPORT, Config.HOPZONE_DUALBOXES_ALLOWED, Config.HOPZONE_REWARD, Config.HOPZONE_REWARD_CHECK_TIME)); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public static VoteSystem getVoteSystem(String name) | ||||
| 	{ | ||||
| 		for (VoteSystem vs : voteSystems) | ||||
| 		{ | ||||
| 			if (vs.getSiteName().equals(name)) | ||||
| 			{ | ||||
| 				return vs; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return null; | ||||
| 	} | ||||
| 	 | ||||
| 	public VoteSystem(int votesDiff, boolean allowReport, int boxes, Map<Integer, Integer> rewards, int checkMins) | ||||
| 	{ | ||||
| 		this.votesDiff = votesDiff; | ||||
| 		this.allowReport = allowReport; | ||||
| 		this.boxes = boxes; | ||||
| 		this.rewards = rewards; | ||||
| 		this.checkMins = checkMins; | ||||
| 		 | ||||
| 		ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(this, checkMins * 1000 * 60, checkMins * 1000 * 60); | ||||
| 	} | ||||
| 	 | ||||
| 	protected void reward() | ||||
| 	{ | ||||
| 		int currentVotes = getVotes(); | ||||
| 		 | ||||
| 		if (currentVotes == -1) | ||||
| 		{ | ||||
| 			System.out.println("There was a problem on getting server votes."); | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		if (lastVotes == 0) | ||||
| 		{ | ||||
| 			lastVotes = currentVotes; | ||||
| 			announce(getSiteName() + ": Current vote count is " + currentVotes + "."); | ||||
| 			announce(getSiteName() + ": We need " + ((lastVotes + votesDiff) - currentVotes) + " vote(s) for reward."); | ||||
| 			if (allowReport) | ||||
| 			{ | ||||
| 				System.out.println("Server votes on " + getSiteName() + ": " + currentVotes); | ||||
| 				System.out.println("Votes needed for reward: " + ((lastVotes + votesDiff) - currentVotes)); | ||||
| 			} | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		if (currentVotes >= (lastVotes + votesDiff)) | ||||
| 		{ | ||||
| 			Collection<L2PcInstance> pls = L2World.getInstance().getPlayers(); | ||||
| 			if (allowReport) | ||||
| 			{ | ||||
| 				System.out.println("Server votes on " + getSiteName() + ": " + currentVotes); | ||||
| 				System.out.println("Votes needed for next reward: " + ((currentVotes + votesDiff) - currentVotes)); | ||||
| 			} | ||||
| 			announce(getSiteName() + ": Everyone has been rewarded."); | ||||
| 			announce(getSiteName() + ": Current vote count is " + currentVotes + "."); | ||||
| 			announce(getSiteName() + ": We need " + votesDiff + " vote(s) for next reward."); | ||||
| 			for (L2PcInstance p : pls) | ||||
| 			{ | ||||
| 				if ((p.getClient() == null) || p.getClient().isDetached()) | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
| 				 | ||||
| 				boolean canReward = false; | ||||
| 				String pIp = p.getClient().getConnectionAddress().getHostAddress(); | ||||
| 				if (playerIps.containsKey(pIp)) | ||||
| 				{ | ||||
| 					int count = playerIps.get(pIp); | ||||
| 					if (count < boxes) | ||||
| 					{ | ||||
| 						playerIps.remove(pIp); | ||||
| 						playerIps.put(pIp, count + 1); | ||||
| 						canReward = true; | ||||
| 					} | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					canReward = true; | ||||
| 					playerIps.put(pIp, 1); | ||||
| 				} | ||||
| 				if (canReward) | ||||
| 				{ | ||||
| 					for (int i : rewards.keySet()) | ||||
| 					{ | ||||
| 						p.addItem("Vote reward.", i, rewards.get(i), p, true); | ||||
| 					} | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					p.sendMessage("Already " + boxes + " character(s) of your ip have been rewarded, so this character won't be rewarded."); | ||||
| 				} | ||||
| 			} | ||||
| 			playerIps.clear(); | ||||
| 			 | ||||
| 			lastVotes = currentVotes; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			if (allowReport) | ||||
| 			{ | ||||
| 				System.out.println("Server votes on " + getSiteName() + ": " + currentVotes); | ||||
| 				System.out.println("Votes needed for next reward: " + ((lastVotes + votesDiff) - currentVotes)); | ||||
| 			} | ||||
| 			announce(getSiteName() + ": Current vote count is " + currentVotes + "."); | ||||
| 			announce(getSiteName() + ": We need " + ((lastVotes + votesDiff) - currentVotes) + " vote(s) for reward."); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private static void announce(String msg) | ||||
| 	{ | ||||
| 		CreatureSay cs = new CreatureSay(0, ChatType.CRITICAL_ANNOUNCE, "", msg); | ||||
| 		Broadcast.toAllOnlinePlayers(cs); | ||||
| 	} | ||||
| 	 | ||||
| 	public abstract int getVotes(); | ||||
| 	 | ||||
| 	public abstract String getSiteName(); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDev
					MobiusDev