package com.l2jserver.gameserver.instancemanager;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
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/L2-NeXtGeN/92153.html";
private static final int initialCheck = 1 * 1000;
private static final int delayForCheck = 400 * 400;
private static final int[] itemId = { 33340, 33399 };
private static final int[] itemCount = { 2, 5 };
private static final int votesRequiredForReward = 10;
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("Visit [url=http://www.l2nextgen.com]www.l2nextgen.com[/url] and vote server on HopZone for Reward");
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();
}
}
public static int getVotes()
{
URL url = null;
InputStreamReader isr = null;
BufferedReader in = null;
try
{
url = new URL(http);
URLConnection con = url.openConnection();
con.addRequestProperty("User-Agent", "Mozilla/4.76");
isr = new InputStreamReader(con.getInputStream());
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)
{
e.printStackTrace();
}
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();
}
}
And:
AutoVoteRewardHandler.java
/* 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 2, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jserver.gameserver.model;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import com.l2jserver.Config;
import com.l2jserver.gameserver.Announcements;
import com.l2jserver.gameserver.GmListTable;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.L2ItemInstance;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
/**
*
* @author GoldenBoy
*
*/
public class AutoVoteRewardHandler
{
private int lastVoteCount = 0;
private int initialCheck = 60 * 1000;
private int delayForCheck = Config.DELAY_FOR_NEXT_REWARD * 1000;
private AutoVoteRewardHandler()
{
if (Config.VOTE_REWARD_ENABLE)
{
System.out.println("========= "+Config.SERVER_NAME_FOR_VOTES+" =========");
System.out.println("Vote Reward System activated");
System.out.println("========= "+Config.SERVER_NAME_FOR_VOTES+" =========");
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), initialCheck, delayForCheck);
}
}
private class AutoReward implements Runnable
{
public void run()
{
if (Config.VOTE_REWARD_ENABLE)
{
System.out.println("");
System.out.println("==================");
System.out.println("Vote Count Check.");
if (Config.VOTE_REWARD1_ID == 0 || Config.VOTE_REWARD1_COUNT == 0 || Config.VOTE_REWARD2_ID == 0 || Config.VOTE_REWARD2_COUNT == 0)
{
GmListTable.broadcastMessageToGMs("The rewards aren't Identified. Please take a look.");
return;
}
int newVoteCount = getVotes(Config.VOTE_HTML_PATCH);
System.out.println("getLastVoteCount:"+getLastVoteCount());
System.out.println("newVoteCount:"+newVoteCount);
System.out.println("==================");
System.out.println("");
if (newVoteCount != 0 && getLastVoteCount() != 0 && newVoteCount >= getLastVoteCount() + Config.VOTES_FOR_REWARD)
{
for (L2PcInstance player : L2World.getInstance().getAllPlayers().values())
{
if (player != null)
{
L2ItemInstance item1 = player.getInventory().getItemByItemId(Config.VOTE_REWARD1_ID);
if (item1 == null || item1.getCount() < Config.MAX_REWARD_COUNT_FOR_STACK_ITEM1)
{
if (player.getAppearance().getNameColor() != Config.OFFLINE_NAME_COLOR)
{
player.addItem("reward", Config.VOTE_REWARD1_ID, Config.VOTE_REWARD1_COUNT, player, true);
}
}
else
{
player.sendMessage("[" + Config.SERVER_NAME_FOR_VOTES+"]" + "You have reached our limit for vote reward items!!");
}
L2ItemInstance item2 = player.getInventory().getItemByItemId(Config.VOTE_REWARD2_ID);
if (item2 == null || item2.getCount() < Config.MAX_REWARD_COUNT_FOR_STACK_ITEM2)
{
if (player.getAppearance().getNameColor() != Config.OFFLINE_NAME_COLOR)
{
player.addItem("reward", Config.VOTE_REWARD2_ID, Config.VOTE_REWARD2_COUNT, player, true);
}
}
else
{
player.sendMessage("[" + Config.SERVER_NAME_FOR_VOTES+"]" + "You have reached our limit for vote reward items!!");
}
}
}
setLastVoteCount(newVoteCount);
}
Announcements.getInstance().announceToAll("[" + Config.SERVER_NAME_FOR_VOTES+"]" + "Our Current vote count is: " + newVoteCount);
Announcements.getInstance().announceToAll("[" + Config.SERVER_NAME_FOR_VOTES+"]" + "The next reward will be given at " + (getLastVoteCount()+ Config.VOTES_FOR_REWARD) + " Votes.");
if (getLastVoteCount() == 0)
{
setLastVoteCount(newVoteCount);
}
}
}
}
private int getVotes(String urlString)
{
InputStreamReader isr = null;
BufferedReader in = null;
try
{
URL url = new URL(urlString);
URLConnection con = (URLConnection) url.openConnection();
con.addRequestProperty("User-Agent", "Mozilla/4.76");
isr = new InputStreamReader(con.getInputStream());
//isr = new InputStreamReader(url.openStream());
in = new BufferedReader(isr);
String inputLine;
int voteCount = 0;
while ((inputLine = in.readLine()) != null)
{
if (inputLine.contains("moreinfo_total_rank_text"))
{
int Sub = 12;
switch (inputLine.length())
{
case 116:
Sub = 13;
break;
case 117:
Sub = 14;
break;
case 118:
Sub = 15;
break;
case 119:
Sub = 16;
break;
}
voteCount = Integer.parseInt(inputLine.substring(inputLine.length() - Sub, inputLine.length() - 11));
break;
}
}
return voteCount;
}
catch (IOException e)
{
e.printStackTrace();
return 0;
}
finally
{
try
{
in.close();
}
catch (IOException e)
{
}
try
{
isr.close();
}
catch (IOException e)
{
}
}
}
/**
* @return
*/
private void setLastVoteCount(int voteCount)
{
lastVoteCount = voteCount;
}
private int getLastVoteCount()
{
return lastVoteCount;
}
public static AutoVoteRewardHandler getInstance()
{
return SingletonHolder._instance;
}
@SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final AutoVoteRewardHandler _instance = new AutoVoteRewardHandler();
}
}
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.
looking for someone who could do something similiar, with my own additions to it
pack: l2jeternity (h5)
if someone is interested add me on dc and tell me your price.
dc: eXPllo#8222
Our website: https://l2evo.net is ready!
Beta is on till 20.01.2025. (Every day from 10 am till 10pm the server will be online). You can join the server to review it.
You can find the Starlight Shop in the main town to get free Items! For any questions feel free to ask in discord!
I would like to know about the Acis base of the data pack I use. The server source and server file could not find that information. I respectfully ask for the help of masters.🥲
Question
cutitarii
Hello... i have a new java code:
AutoVoteRewardManager.java
And:
AutoVoteRewardHandler.java
Problem with check
Please help me with corect code :|
9 answers to this question
Recommended Posts
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.