Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Individual Vote Manager

Iniciado por Swarlog, Ago 19, 2022, 01:00 AM

Tema anterior - Siguiente tema

Swarlog

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 Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

/
 * 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();

CitarDebes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

+VoteManager.load();
CitarDebes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

        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.