1.- Crear directorio "Extensions.Vote" y añadir los siguientes 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 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 Extensions.Vote;
public class VoteConfig
{
public VoteConfig()
{
}
}
/*
* 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 Extensions.Vote;
import java.io.BufferedReader;
import java.io.InputStream;
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.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import Extensions.Vote.Tasks.MonthlyResetTask;
import Extensions.Vote.Tasks.TriesResetTask;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
import com.l2jfrozen.gameserver.model.L2World;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.util.database.L2DatabaseFactory;
public class VoteManager
{
protected static final Logger _log = Logger.getLogger(VoteManager.class.getName());
private static boolean hasVotedHop;
private static boolean hasVotedTop;
public VoteManager()
{
}
public static void load()
{
_log.log(Level.INFO, "VoteManager: initialized.");
TriesResetTask.getInstance();
MonthlyResetTask.getInstance();
}
protected static int getHopZoneVotes()
{
int votes = -1;
String Hopzonelink = Config.VOTE_LINK_HOPZONE;
InputStreamReader isr = null;
BufferedReader br = null;
try
{
URLConnection con = new URL(Hopzonelink).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("rank anonymous tooltip"))
{
votes = Integer.valueOf(line.split(">")[2].replace("</span", ""));
break;
}
}
br.close();
isr.close();
}
catch (Exception e)
{
if (Config.DEVELOPER)
{
e.printStackTrace();
}
}
return votes;
}
protected static int getTopZoneVotes()
{
int votes = -1;
URL url = null;
URLConnection con = null;
InputStream is = null;
InputStreamReader isr = null;
BufferedReader in = null;
try
{
url = new URL(Config.VOTE_LINK_TOPZONE);
con = url.openConnection();
con.addRequestProperty("User-Agent", "L2TopZone");
is = con.getInputStream();
isr = new InputStreamReader(is);
in = new BufferedReader(isr);
String inputLine;
while ((inputLine = in.readLine()) != null)
{
if (inputLine.contains("Votes"))
{
String votesLine = inputLine;
votes = Integer.valueOf(votesLine.split(">")[3].replace("</div", ""));
break;
}
}
}
catch (Exception e)
{
if (Config.DEVELOPER)
{
e.printStackTrace();
}
}
return votes;
}
public static String hopCd(L2PcInstance player)
{
long hopCdMs = 0;
long voteDelay = 43200000L;
PreparedStatement statement = null;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT lastVoteHopzone FROM characters WHERE obj_Id=?");
statement.setInt(1, player.getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
hopCdMs = rset.getLong("lastVoteHopzone");
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");
Date resultdate = new Date(hopCdMs + voteDelay);
return sdf.format(resultdate);
}
public static String topCd(L2PcInstance player)
{
long topCdMs = 0;
long voteDelay = 43200000L;
PreparedStatement statement = null;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT lastVoteTopzone FROM characters WHERE obj_Id=?");
statement.setInt(1, player.getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
topCdMs = rset.getLong("lastVoteTopzone");
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");
Date resultdate = new Date(topCdMs + voteDelay);
return sdf.format(resultdate);
}
public static String whosVoting()
{
for (L2PcInstance voter : L2World.getInstance().getAllPlayers())
{
if (voter.isVoting())
{
return voter.getName();
}
}
return "None";
}
public static void hopvote(final L2PcInstance player)
{
long lastVoteHopzone = 0L;
long voteDelay = 43200000L;
final int firstvoteshop;
firstvoteshop = getHopZoneVotes();
class hopvotetask implements Runnable
{
private final L2PcInstance p;
public hopvotetask(L2PcInstance player)
{
p = player;
}
@Override
public void run()
{
if (firstvoteshop < getHopZoneVotes())
{
p.setIsVoting(false);
p.setIsImobilised(false);
VoteManager.setHasVotedHop(player);
p.sendMessage("Thank you for voting for us!");
VoteManager.updateLastVoteHopzone(p);
VoteManager.updateVotes(p);
}
else
{
p.setIsVoting(false);
p.setIsImobilised(false);
p.sendMessage("You did not vote.Please try again.");
VoteManager.setTries(player, VoteManager.getTries(p) - 1);
}
}
}
PreparedStatement statement = null;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT lastVoteHopzone FROM characters WHERE obj_Id=?");
statement.setInt(1, player.getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
lastVoteHopzone = rset.getLong("lastVoteHopzone");
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
if (getTries(player) <= 0)
{
player.sendMessage("Due to your multiple failures in voting you lost your chance to vote today");
}
else if (((lastVoteHopzone + voteDelay) < System.currentTimeMillis()) && (getTries(player) > 0))
{
for (L2PcInstance j : L2World.getInstance().getAllPlayers())
{
if (j.isVoting())
{
player.sendMessage("Someone is already voting.Wait for your turn please!");
return;
}
}
player.setIsVoting(true);
player.setIsImobilised(true);
player.sendMessage("Go fast on the site and vote on the hopzone banner!");
player.sendMessage("You have " + Config.SECS_TO_VOTE + " seconds.Hurry!");
ThreadPoolManager.getInstance().scheduleGeneral(new hopvotetask(player), Config.SECS_TO_VOTE * 1000);
}
else if ((getTries(player) <= 0) && ((lastVoteHopzone + voteDelay) < System.currentTimeMillis()))
{
for (L2PcInstance j : L2World.getInstance().getAllPlayers())
{
if (j.isVoting())
{
player.sendMessage("Someone is already voting.Wait for your turn please!");
return;
}
}
player.setIsVoting(true);
player.setIsImobilised(true);
player.sendMessage("Go fast on the site and vote on the hopzone banner!");
player.sendMessage("You have " + Config.SECS_TO_VOTE + " seconds.Hurry!");
ThreadPoolManager.getInstance().scheduleGeneral(new hopvotetask(player), Config.SECS_TO_VOTE * 1000);
}
else
{
player.sendMessage("12 hours have to pass till you are able to vote again.");
}
}
public static void topvote(final L2PcInstance player)
{
long lastVoteTopzone = 0L;
long voteDelay = 43200000L;
final int firstvotestop;
firstvotestop = getTopZoneVotes();
class topvotetask implements Runnable
{
private final L2PcInstance p;
public topvotetask(L2PcInstance player)
{
p = player;
}
@Override
public void run()
{
if (firstvotestop < getTopZoneVotes())
{
p.setIsVoting(false);
p.setIsImobilised(false);
VoteManager.setHasVotedTop(p);
p.sendMessage("Thank you for voting for us!");
VoteManager.updateLastVoteTopzone(p);
VoteManager.updateVotes(p);
}
else
{
p.setIsImobilised(false);
p.sendMessage("You did not vote.Please try again.");
VoteManager.setTries(p, VoteManager.getTries(p) - 1);
}
}
}
PreparedStatement statement = null;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT lastVoteTopzone FROM characters WHERE obj_Id=?");
statement.setInt(1, player.getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
lastVoteTopzone = rset.getLong("lastVoteTopzone");
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
if (getTries(player) <= 0)
{
player.sendMessage("Due to your multiple failures in voting you lost your chance to vote today");
}
else if ((getTries(player) <= 0) && ((lastVoteTopzone + voteDelay) < System.currentTimeMillis()))
{
for (L2PcInstance j : L2World.getInstance().getAllPlayers())
{
if (j.isVoting())
{
player.sendMessage("Someone is already voting.Wait for your turn please!");
return;
}
}
player.setIsVoting(true);
player.setIsImobilised(true);
player.sendMessage("Go fast on the site and vote on the topzone banner!");
player.sendMessage((new StringBuilder()).append("You have ").append(Config.SECS_TO_VOTE).append(" seconds.Hurry!").toString());
ThreadPoolManager.getInstance().scheduleGeneral(new topvotetask(player), Config.SECS_TO_VOTE * 1000);
}
else if (((lastVoteTopzone + voteDelay) < System.currentTimeMillis()) && (getTries(player) > 0))
{
for (L2PcInstance j : L2World.getInstance().getAllPlayers())
{
if (j.isVoting())
{
player.sendMessage("Someone is already voting.Wait for your turn please!");
return;
}
}
player.setIsVoting(true);
player.setIsImobilised(true);
player.sendMessage("Go fast on the site and vote on the topzone banner!");
player.sendMessage((new StringBuilder()).append("You have ").append(Config.SECS_TO_VOTE).append(" seconds.Hurry!").toString());
ThreadPoolManager.getInstance().scheduleGeneral(new topvotetask(player), Config.SECS_TO_VOTE * 1000);
}
else
{
player.sendMessage("12 hours have to pass till you are able to vote again.");
}
}
public static void hasVotedHop(L2PcInstance player)
{
int hasVotedHop = -1;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT hasVotedHop FROM characters WHERE obj_Id=?");
statement.setInt(1, player.getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
hasVotedHop = rset.getInt("hasVotedHop");
}
if (hasVotedHop == 1)
{
setHasVotedHop(true);
}
else if (hasVotedHop == 0)
{
setHasVotedHop(false);
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
public static void hasVotedTop(L2PcInstance player)
{
int hasVotedTop = -1;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT hasVotedTop FROM characters WHERE obj_Id=?");
statement.setInt(1, player.getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
hasVotedTop = rset.getInt("hasVotedTop");
}
if (hasVotedTop == 1)
{
setHasVotedTop(true);
}
else if (hasVotedTop == 0)
{
setHasVotedTop(false);
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
public static void updateVotes(L2PcInstance activeChar)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET monthVotes=?, totalVotes=? WHERE obj_Id=?");
statement.setInt(1, getMonthVotes(activeChar) + 1);
statement.setInt(2, getTotalVotes(activeChar) + 1);
statement.setInt(3, activeChar.getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
public static void setHasVotedHop(L2PcInstance activeChar)
{
activeChar.setHop(true);
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET hasVotedHop=? WHERE obj_Id=?");
statement.setInt(1, 1);
statement.setInt(2, activeChar.getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
public static void setHasVotedTop(L2PcInstance activeChar)
{
activeChar.setTop(true);
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET hasVotedTop=? WHERE obj_Id=?");
statement.setInt(1, 1);
statement.setInt(2, activeChar.getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
public static void setHasNotVotedHop(L2PcInstance activeChar)
{
activeChar.setHop(false);
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET hasVotedHop=? WHERE obj_Id=?");
statement.setInt(1, 0);
statement.setInt(2, activeChar.getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
public static void setHasNotVotedTop(L2PcInstance activeChar)
{
activeChar.setTop(false);
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET hasVotedTop=? WHERE obj_Id=?");
statement.setInt(1, 0);
statement.setInt(2, activeChar.getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
public static int getTries(L2PcInstance player)
{
int tries = -1;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT tries FROM characters WHERE obj_Id=?");
statement.setInt(1, player.getObjectId());
for (ResultSet rset = statement.executeQuery(); rset.next()
{
tries = rset.getInt("tries");
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
return tries;
}
public static void setTries(L2PcInstance player, int tries)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET tries=? WHERE obj_Id=?");
statement.setInt(1, tries);
statement.setInt(2, player.getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
public static int getMonthVotes(L2PcInstance player)
{
int monthVotes = -1;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT monthVotes FROM characters WHERE obj_Id=?");
statement.setInt(1, player.getObjectId());
for (ResultSet rset = statement.executeQuery(); rset.next()
{
monthVotes = rset.getInt("monthVotes");
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
return monthVotes;
}
public static int getTotalVotes(L2PcInstance player)
{
int totalVotes = -1;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT totalVotes FROM characters WHERE obj_Id=?");
statement.setInt(1, player.getObjectId());
for (ResultSet rset = statement.executeQuery(); rset.next()
{
totalVotes = rset.getInt("totalVotes");
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
return totalVotes;
}
public static int getBigTotalVotes(L2PcInstance player)
{
int bigTotalVotes = -1;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT SUM(totalVotes) FROM characters");
for (ResultSet rset = statement.executeQuery(); rset.next()
{
bigTotalVotes = rset.getInt("SUM(totalVotes)");
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
return bigTotalVotes;
}
public static int getBigMonthVotes(L2PcInstance player)
{
int bigMonthVotes = -1;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT SUM(monthVotes) FROM characters");
for (ResultSet rset = statement.executeQuery(); rset.next()
{
bigMonthVotes = rset.getInt("SUM(monthVotes)");
}
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
return bigMonthVotes;
}
public static void updateLastVoteHopzone(L2PcInstance player)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET lastVoteHopzone=? WHERE obj_Id=?");
statement.setLong(1, System.currentTimeMillis());
statement.setInt(2, player.getObjectId());
statement.execute();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
public static void updateLastVoteTopzone(L2PcInstance player)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET lastVoteTopzone=? WHERE obj_Id=?");
statement.setLong(1, System.currentTimeMillis());
statement.setInt(2, player.getObjectId());
statement.execute();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
// Getters and Setters
public static boolean hasVotedHop()
{
return hasVotedHop;
}
public static void setHasVotedHop(boolean hasVotedHop)
{
VoteManager.hasVotedHop = hasVotedHop;
}
public static boolean hasVotedTop()
{
return hasVotedTop;
}
public static void setHasVotedTop(boolean hasVotedTop)
{
VoteManager.hasVotedTop = hasVotedTop;
}
}
2.- Crear directorio "Extensions.Vote.Tasks" y añadir los siguientes 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 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 Extensions.Vote.Tasks;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
import com.l2jfrozen.util.database.L2DatabaseFactory;
public class MonthlyResetTask
{
protected static final Logger _log = Logger.getLogger(MonthlyResetTask.class.getName());
public MonthlyResetTask()
{
}
public static void getInstance()
{
ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
{
@Override
public void run()
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET monthVotes=?");
statement.setInt(1, 0);
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
}, getValidationTime());
}
private static long getValidationTime()
{
Calendar cld = Calendar.getInstance();
cld.set(5, 1);
long time = cld.getTimeInMillis();
if ((System.currentTimeMillis() - time) <= 0L)
{
long delay = cld.getTimeInMillis() - System.currentTimeMillis();
return delay;
}
return 0L;
}
}
/*
* 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 Extensions.Vote.Tasks;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
import com.l2jfrozen.util.database.L2DatabaseFactory;
public class TriesResetTask
{
protected static final Logger _log = Logger.getLogger(TriesResetTask.class.getName());
public TriesResetTask()
{
}
public static void getInstance()
{
ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
{
@Override
public void run()
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET tries=?");
statement.setInt(1, 3);
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warning(" ");
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}
}
}
}, getValidationTime());
}
private static long getValidationTime()
{
Calendar cld = Calendar.getInstance();
cld.set(11, 12);
cld.set(12, 1);
long time = cld.getTimeInMillis();
if ((System.currentTimeMillis() - time) <= 0L)
{
long delay = cld.getTimeInMillis() - System.currentTimeMillis();
return delay;
}
return 0L;
}
}
3.- Dentro de "instance ", crear este script llamado L2VoteManagerInstance.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 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.actor.instance;
import java.io.File;
import javolution.text.TextBuilder;
import Extensions.Vote.VoteManager;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.ItemList;
import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected;
import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jfrozen.gameserver.network.serverpackets.PledgeCrest;
import com.l2jfrozen.gameserver.network.serverpackets.ValidateLocation;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
public class L2VoteManagerInstance extends L2NpcInstance
{
public L2VoteManagerInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
}
@Override
public void onBypassFeedback(final L2PcInstance player, String command)
{
if (player == null)
return;
if (command.startsWith("votehopzone"))
VoteManager.hopvote(player);
if (command.startsWith("votetopzone"))
VoteManager.topvote(player);
if (command.startsWith("rewards") && player.hasVotedBoth())
showRewardsHtml(player);
if (command.startsWith("reward1") && player.hasVotedBoth())
{
VoteManager.setHasNotVotedHop(player);
VoteManager.setHasNotVotedTop(player);
player.getInventory().addItem("reward", Config.VOTE_REWARD_ID1, Config.VOTE_REWARD_AMOUNT1, player, null);
player.sendPacket(new ItemList(player, true));
player.getInventory().updateDatabase(); // update database
player.sendMessage("Good choice!");
VoteManager.setTries(player, VoteManager.getTries(player) + 1);
}
if (command.startsWith("reward2") && player.hasVotedBoth())
{
VoteManager.setHasNotVotedHop(player);
VoteManager.setHasNotVotedTop(player);
player.getInventory().addItem("reward", Config.VOTE_REWARD_ID2, Config.VOTE_REWARD_AMOUNT2, player, null);
player.sendPacket(new ItemList(player, true));
player.getInventory().updateDatabase(); // update database
player.sendMessage("Good choice!");
VoteManager.setTries(player, VoteManager.getTries(player) + 1);
}
if (command.startsWith("reward3") && player.hasVotedBoth())
{
VoteManager.setHasNotVotedHop(player);
VoteManager.setHasNotVotedTop(player);
player.getInventory().addItem("reward", Config.VOTE_REWARD_ID3, Config.VOTE_REWARD_AMOUNT3, player, null);
player.sendPacket(new ItemList(player, true));
player.getInventory().updateDatabase(); // update database
player.sendMessage("Good choice!");
VoteManager.setTries(player, VoteManager.getTries(player) + 1);
}
if (command.startsWith("reward4") && player.hasVotedBoth())
{
VoteManager.setHasNotVotedHop(player);
VoteManager.setHasNotVotedTop(player);
player.getInventory().addItem("reward", Config.VOTE_REWARD_ID4, Config.VOTE_REWARD_AMOUNT4, player, null);
player.sendPacket(new ItemList(player, true));
player.getInventory().updateDatabase(); // update database
player.sendMessage("Good choice!");
VoteManager.setTries(player, VoteManager.getTries(player) + 1);
}
}
@Override
public void onAction(L2PcInstance player)
{
if (this != player.getTarget())
{
player.setTarget(this);
player.sendPacket(new MyTargetSelected(getObjectId(), 0));
player.sendPacket(new ValidateLocation(this));
}
else if (!canInteract(player))
{
player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
}
else
{
showHtmlWindow(player);
}
}
public void showHtmlWindow(L2PcInstance activeChar)
{
VoteManager.hasVotedHop(activeChar);
VoteManager.hasVotedTop(activeChar);
NpcHtmlMessage nhm = new NpcHtmlMessage(5);
TextBuilder tb = new TextBuilder("");
tb.append("<html><head><title>Lineage II PsD - Vote Manager</title></head><body>");
tb.append("<center><img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
tb.append("<table bgcolor=000000 width=300 height=40>");
tb.append("<tr>");
tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Welcome " + activeChar.getName() +" in Lineage II</font><font color=\"FF9900\"> -PsD-</font><font color=\"666666\"> Server</font></td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
tb.append("<br>");
tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
tb.append("</center>");
tb.append("<center>");
tb.append("<table bgcolor=000000 width=300 height=12>");
tb.append("<tr>");
tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Who's voting now:</font><font color=\"FF5555\"> " + VoteManager.whosVoting() +"</font></td>");
tb.append("</tr>");
tb.append("<tr>");
tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Tries left:</font><font color=\"FF5555\"> " + VoteManager.getTries(activeChar) + "</font></td>");
tb.append("</tr>");
tb.append("<tr>");
tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Your votes:</font><font color=\"FF5555\"> " + VoteManager.getTotalVotes(activeChar) +"</font></td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
tb.append("</center>");
if (!VoteManager.hasVotedHop() || !VoteManager.hasVotedTop())
{
tb.append("<center>");
tb.append("<table width=\"250\" cellpadding=\"5\">");
tb.append("<tr>");
tb.append("<td width=\"45\" valign=\"top\" align=\"center\"><button action=\"bypass -h npc_" + getObjectId() + "_votehopzone\" width=256 height=64 back=\"VoteNpc.hopzone2\" fore=\"VoteNpc.hopzone\"></td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("<table width=\"250\" cellpadding=\"5\">");
tb.append("<tr>");
tb.append("<td width=\"45\" valign=\"top\" align=\"center\"><button action=\"bypass -h npc_" + getObjectId() + "_votetopzone\" width=256 height=64 back=\"VoteNpc.topzone2\" fore=\"VoteNpc.topzone\"></td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("</center>");
}
if (VoteManager.hasVotedHop() && VoteManager.hasVotedTop())
{
tb.append("<br>");
tb.append("<center>");
tb.append("<img src=\"L2UI.SquareGray\" width=200 height=1>");
tb.append("<table border=0 bgcolor=000000 width=200 height=10>");
tb.append("<tr><td width=\"200\" align=\"center\"><font color=\"FF0000\"><a action=\"bypass -h npc_" + getObjectId() + "_reward1\">"+ Config.VOTE_REWARD_AMOUNT1 +" "+ ItemTable.getInstance().getTemplate(Config.VOTE_REWARD_ID1).getName() +"</font></a></td></tr>");
tb.append("<tr><td width=\"200\" align=\"center\"><font color=\"FF0000\"><a action=\"bypass -h npc_" + getObjectId() + "_reward2\">"+ Config.VOTE_REWARD_AMOUNT2 +" "+ ItemTable.getInstance().getTemplate(Config.VOTE_REWARD_ID2).getName() +"</font></a></td></tr>");
tb.append("<tr><td width=\"200\" align=\"center\"><font color=\"FF0000\"><a action=\"bypass -h npc_" + getObjectId() + "_reward3\">"+ Config.VOTE_REWARD_AMOUNT3 +" "+ ItemTable.getInstance().getTemplate(Config.VOTE_REWARD_ID3).getName() +"</font></a></td></tr>");
if (VoteManager.getTotalVotes(activeChar) >= Config.EXTRA_REW_VOTE_AM)
{
activeChar.sendMessage("Due to your votes you now have a 4th choise!");
tb.append("<tr><td width=\"200\" align=\"center\"><font color=\"FF0000\"><a action=\"bypass -h npc_" + getObjectId() + "_reward4\">"+ Config.VOTE_REWARD_AMOUNT4 +" "+ ItemTable.getInstance().getTemplate(Config.VOTE_REWARD_ID4).getName() +"</font></a></td></tr>");
}
tb.append("</table>");
tb.append("<img src=\"L2UI.SquareGray\" width=200 height=1>");
tb.append("</center>");
tb.append("<br>");
}
tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
tb.append("<table border=0 bgcolor=000000 width=300 height=10>");
if (!VoteManager.hasVotedHop())
{
tb.append("<tr>");
tb.append("<td width=\"300\" align=\"center\"><font color=\"FF9900\">Hopzone:</font><font color=\"FF0000\"> Not Voted</font></td>");
}
if (VoteManager.hasVotedHop())
{
tb.append("<tr>");
tb.append("<td width=\"300\" align=\"center\"><font color=\"FF9900\">Hopzone:</font><font color=\"5EA82E\"> Voted</font></td>");
}
if (!VoteManager.hasVotedTop())
{
tb.append("<td width=\"1\" align=\"center\"><font color=\"505050\">|</font></td>");
tb.append("<td width=\"300\" align=\"center\"><font color=\"FF9900\">Topzone:</font><font color=\"FF0000\"> Not Voted</font></td>");
tb.append("</tr>");
}
if (VoteManager.hasVotedTop())
{
tb.append("<td width=\"1\" align=\"center\"><font color=\"505050\">|</font></td>");
tb.append("<td width=\"300\" align=\"center\"><font color=\"FF9900\">Topzone:</font><font color=\"5EA82E\"> Voted</font></td>");
tb.append("</tr>");
}
tb.append("</table>");
tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
tb.append("</center>");
tb.append("<br>");
tb.append("<center>");
tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
tb.append("<table border=0 bgcolor=000000 width=300 height=20>");
tb.append("<tr>");
tb.append("<td align=\"center\" width=\"300\"><font color=\"666666\">Vote for us :</font><font color=\"FF5555\"> www.L2PsD.com</font></td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
tb.append("</center>");
tb.append("</body></html>");
nhm.setHtml(tb.toString());
activeChar.sendPacket(nhm);
activeChar.sendPacket(ActionFailed.STATIC_PACKET);
}
public void showRewardsHtml(L2PcInstance player)
{
TextBuilder tb = new TextBuilder();
NpcHtmlMessage html = new NpcHtmlMessage(1);
tb.append("<html><head><title>Vote Reward Manager</title></head><body>");
tb.append("<center>");
tb.append("<table width=\"250\" cellpadding=\"5\" bgcolor=\"000000\">");
tb.append("<tr>");
tb.append("<td width=\"45\" valign=\"top\" align=\"center\"><img src=\"L2ui_ch3.menubutton4\" width=\"38\" height=\"38\"></td>");
tb.append("<td valign=\"top\"><font color=\"FF6600\">Vote Manager</font>");
tb.append("<br1><font color=\"00FF00\">" + player.getName() + "</font>, get your reward here.</td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("</center>");
tb.append("<center>");
tb.append("<td valign=\"top\"><font color=\"FF6600\">Choose your reward " + player.getName() + ".</font>");
tb.append("<button value=\"Item:" + ItemTable.getInstance().getTemplate(Config.VOTE_REWARD_ID1).getName() + " Amount:" + Config.VOTE_REWARD_AMOUNT1 + "\" action=\"bypass -h npc_" + getObjectId() + "_reward1\" width=204 height=20>");
tb.append("<button value=\"Item:" + ItemTable.getInstance().getTemplate(Config.VOTE_REWARD_ID2).getName() + " Amount:" + Config.VOTE_REWARD_AMOUNT2 + "\" action=\"bypass -h npc_" + getObjectId() + "_reward2\" width=204 height=20>");
tb.append("<button value=\"Item:" + ItemTable.getInstance().getTemplate(Config.VOTE_REWARD_ID3).getName() + " Amount:" + Config.VOTE_REWARD_AMOUNT3 + "\" action=\"bypass -h npc_" + getObjectId() + "_reward3\" width=204 height=20>");
if (VoteManager.getTotalVotes(player) >= Config.EXTRA_REW_VOTE_AM)
{
tb.append("<font color=\"FF6600\">Due to your votes you now have a 4th choice!</font><br><button value=\"Item:" + ItemTable.getInstance().getTemplate(Config.VOTE_REWARD_ID4).getName() + " Amount:" + Config.VOTE_REWARD_AMOUNT4 + "\" action=\"bypass -h npc_" + getObjectId() + "_reward4\" width=204 height=20>");
}
tb.append("</center>");
tb.append("</body></html>");
html.setHtml(tb.toString());
player.sendPacket(html);
player.sendPacket(ActionFailed.STATIC_PACKET);
}
}
4.- Dentro de "L2PcInstance.java" editar lo siguiente:Buscar:
private static final String RESTORE_CHARACTER =
Añadirle despues de "aio,aio_end," lo siguiente:
lastVoteHopzone, lastVoteTopzone, hasVotedHop, hasVotedTop, monthVotes, totalVotes, tries
Buscar:
private long _lastTeleportAction = 0;
Añadir despues:
private boolean _isVoting = false;
public final boolean isVoting()
{
return _isVoting;
}
public final void setIsVoting(boolean value)
{
_isVoting = value;
}
private boolean hasVotedTop,hasVotedHop;
public boolean hasVotedBoth()
{
return hasVotedHop && hasVotedTop;
}
public void setHop(boolean target)
{
hasVotedHop=target;
}
public void setTop(boolean target)
{
hasVotedTop=target;
}
private void loadVotes()
{
int flag=0;
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement statement = con.prepareStatement("SELECT hasVotedTop FROM characters WHERE obj_Id=?");
statement.setInt(1, getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
flag = rset.getInt("hasVotedTop");
}
if (flag == 1)
{
setTop(true);
}
else
{
setTop(false);
}
}
catch (Exception e)
{
_log.log(Level.WARNING, "VoteManager: could not select hasVotedHop from characters " + e);
if (Config.DEVELOPER)
{
e.printStackTrace();
}
}
flag=0;
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement statement = con.prepareStatement("SELECT hasVotedHop FROM characters WHERE obj_Id=?");
statement.setInt(1, getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
flag = rset.getInt("hasVotedHop");
}
if (flag == 1)
{
setHop(true);
}
else
{
setHop(false);
}
}
catch (Exception e)
{
_log.log(Level.WARNING, "VoteManager: could not select hasVotedHop from characters " + e);
if (Config.DEVELOPER)
{
e.printStackTrace();
}
}
}
Buscar y añadir lo siguiente:
public void onPlayerEnter()
{
startWarnUserTakeBreak();
+ loadVotes();
CitarGameServer.java
+VoteManager.load();
CitarConfigs.java
public static int HERO_CUSTOM_DAY;
+ public static String VOTE_LINK_HOPZONE;
+ public static String VOTE_LINK_TOPZONE;
+ public static int VOTE_REWARD_ID1;
+ public static int VOTE_REWARD_ID2;
+ public static int VOTE_REWARD_ID3;
+ public static int VOTE_REWARD_ID4;
+ public static int VOTE_REWARD_AMOUNT1;
+ public static int VOTE_REWARD_AMOUNT2;
+ public static int VOTE_REWARD_AMOUNT3;
+ public static int VOTE_REWARD_AMOUNT4;
+ public static int SECS_TO_VOTE;
+ public static int EXTRA_REW_VOTE_AM;
HERO_CUSTOM_DAY = Integer.parseInt(L2JFrozenSettings.getProperty("HeroCustomDay", "0"));
+VOTE_LINK_HOPZONE = L2JFrozenSettings.getProperty("HopzoneUrl", "null");
+VOTE_LINK_TOPZONE = L2JFrozenSettings.getProperty("TopzoneUrl", "null");
+VOTE_REWARD_ID1 = Integer.parseInt(L2JFrozenSettings.getProperty("VoteRewardId1", "300"));
+VOTE_REWARD_ID2 = Integer.parseInt(L2JFrozenSettings.getProperty("VoteRewardId2", "300"));
+VOTE_REWARD_ID3 = Integer.parseInt(L2JFrozenSettings.getProperty("VoteRewardId3", "300"));
+VOTE_REWARD_ID4 = Integer.parseInt(L2JFrozenSettings.getProperty("VoteRewardId4", "300"));
+VOTE_REWARD_AMOUNT1 = Integer.parseInt(L2JFrozenSettings.getProperty("VoteRewardAmount1", "300"));
+VOTE_REWARD_AMOUNT2 = Integer.parseInt(L2JFrozenSettings.getProperty("VoteRewardAmount2", "300"));
+VOTE_REWARD_AMOUNT3 = Integer.parseInt(L2JFrozenSettings.getProperty("VoteRewardAmount3", "300"));
+VOTE_REWARD_AMOUNT4 = Integer.parseInt(L2JFrozenSettings.getProperty("VoteRewardAmount4", "300"));
+SECS_TO_VOTE = Integer.parseInt(L2JFrozenSettings.getProperty("SecondsToVote", "20"));
+EXTRA_REW_VOTE_AM = Integer.parseInt(L2JFrozenSettings.getProperty("ExtraRewVoteAm", "20"));
CitarProperties:
# ------------------------------
# Vote System Ingame -
# ------------------------------
HopzoneUrl =
TopzoneUrl =
# The characters will have a choice between 3 rewards.Set id for them
VoteRewardId1 = 6392
VoteRewardId2 = 6393
VoteRewardId3 = 4357
# Set the amount of each reward.
VoteRewardAmount1 = 1
VoteRewardAmount2 = 1
VoteRewardAmount3 = 30
# Set the seconds that the character has
# until he votes in the site's banners
SecondsToVote = 45
# Amount of votes a character must collect
# in order to get the 4th vote reward
ExtraRewVoteAm = 20
# Info of the extra reward item
VoteRewardId4 = 6673
VoteRewardAmount4 = 1
CitarSQL:
Buscar la tabla "Characters" y asignarle (left click)
lastVoteHopzone bigint 20 0 -1 0 -1 0 0 0 0 0
lastVoteTopzone bigint 20 0 -1 0 -1 0 0 0 0 0
hasVotedHop int 10 0 -1 0 -1 0 0 0 0 0 0
hasVotedTop int 10 0 -1 0 -1 0 0 0 0 0 0
monthVotes int 10 0 -1 0 -1 0 0 0 0 0 0
totalVotes int 10 0 -1 0 -1 0 0 0 0 0 0
tries int 10 0 -1 0 -1 0 0 3 0 0 0
Por último creamos un NPC con tipo "L2VoteManager" y ya esta!
No olvideis añadirle las texturas.