U3Games

Games | Desarrollo & Soporte => L2 | Implementaciones => L2 | Sección de Servidores => Lineage => L2 | Npc´s => Mensaje iniciado por: Swarlog en Jul 24, 2025, 11:25 PM

Título: NPC Top PvP/PK
Publicado por: Swarlog en Jul 24, 2025, 11:25 PM
Up by No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

/*
 * Copyright (C) 2004-2016 L2J DataPack
 *
 * This file is part of L2J DataPack.
 *
 * L2J DataPack 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.
 *
 * L2J DataPack 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 custom.TopPvpPk;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;

import com.l2jserver.commons.database.pool.impl.ConnectionFactory;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;

/**
 * NPC Top PvP & PK AI.<br>
 * @author UnAfraid
 * @patched Sacrifice
 */
public final class TopPvpPk extends Quest
{
private static final int NPC_ID = 60;
private static final boolean DEBUG = false;
static final List<TopPVP> TOP_PVP = new ArrayList<>();
static final List<TopPK> TOP_PK = new ArrayList<>();
private static final long REFRESH_TIME = 300000; // 5 minutes

private TopPvpPk()
{
super(-1, TopPvpPk.class.getSimpleName(), "custom");
addFirstTalkId(NPC_ID);
addTalkId(NPC_ID);
addStartNpc(NPC_ID);

ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new reloadTop(), 1000, REFRESH_TIME);
}

@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return "main.htm";
}

@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
return "main.htm";
}

@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.equalsIgnoreCase("toppvp"))
{
sendTopPVP(player);
}
else if (event.equalsIgnoreCase("toppk"))
{
sendTopPK(player);
}
return null;
}

private static final void sendTopPVP(L2PcInstance player)
{
StringBuilder sb = new StringBuilder();
sb.append("<html><title>TOP 25 PVP</title><body><br><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><table width=260>");

for (TopPVP pvp : TOP_PVP)
{
String name = pvp.getName();
int pvp1 = pvp.getpvp();
sb.append("<tr><td><font color=\"00C3FF\">" + name + "</color>:</td><td><font color=\"32C332\">" + pvp1 + "</color></td></tr>");
}
sb.append("</table><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br></center></body></html>");
NpcHtmlMessage msg = new NpcHtmlMessage(NPC_ID);
msg.setHtml(sb.toString());
player.sendPacket(msg);
}

private static final void sendTopPK(L2PcInstance player)
{
StringBuilder sb = new StringBuilder();
sb.append("<html><title>TOP 25 PK</title><body><br><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><table width=260>");

for (TopPK pk : TOP_PK)
{
String name = pk.getName();
int pk1 = pk.getpk();
sb.append("<tr><td><font color=\"00C3FF\">" + name + "</color>:</td><td><font color=\"32C332\">" + pk1 + "</color></td></tr>");
}
sb.append("</table><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br></center></body></html>");
NpcHtmlMessage msg = new NpcHtmlMessage(NPC_ID);
msg.setHtml(sb.toString());
player.sendPacket(msg);
}

public final class reloadTop implements Runnable
{
@Override
public void run()
{
TOP_PK.clear();
TOP_PVP.clear();

try (Connection con = ConnectionFactory.getInstance().getConnection();
PreparedStatement ps = con.prepareStatement("SELECT char_name,pvpkills FROM characters WHERE pvpkills>0 and accesslevel=0 order by pvpkills desc limit 25"))
{
try (ResultSet rset = ps.executeQuery())
{
while (rset.next())
{
TopPVP pvp = new TopPVP();
pvp.setTopPvp(rset.getString("char_name"), rset.getInt("pvpkills"));
TOP_PVP.add(pvp);
}
rset.close();
ps.close();
}
}
catch (Exception e)
{
_log.log(Level.WARNING, "Could not restore top pvp: " + e.getMessage(), e);
}
// finally
// {
// ConnectionFactory.getInstance().close();
// }

try (Connection con = ConnectionFactory.getInstance().getConnection();
PreparedStatement ps = con.prepareStatement("SELECT char_name,pkkills FROM characters WHERE pkkills>0 and accesslevel=0 order by pkkills desc limit 25"))
{
try (ResultSet rset = ps.executeQuery())
{
while (rset.next())
{
TopPK pk = new TopPK();
pk.setTopPk(rset.getString("char_name"), rset.getInt("pkkills"));
TOP_PK.add(pk);
}
rset.close();
ps.close();
}
}
catch (Exception e)
{
_log.log(Level.WARNING, "Could not restore top pk: " + e.getMessage(), e);
}
// finally
// {
// ConnectionFactory.getInstance().close();
// }
if (DEBUG)
{
_log.info("Top Pvp/Pk Loaded: " + TOP_PVP.size() + " Pvps");
_log.info("Top Pvp/Pk Loaded: " + TOP_PK.size() + " Pks");
}
}
}

public final class TopPVP
{
private String getCharName = null;
private int getTopPvp = 0;

public String getName()
{
return getCharName;
}

public int getpvp()
{
return getTopPvp;
}

public void setTopPvp(String char_name, int pvpkills)
{
getCharName = char_name;
getTopPvp = pvpkills;
}
}

public final class TopPK
{
private String getcharName = null;
private int gettopPk = 0;

public String getName()
{
return getcharName;
}

public int getpk()
{
return gettopPk;
}

public void setTopPk(String char_name, int pkkills)
{
getcharName = char_name;
gettopPk = pkkills;
}
}

public static void main(String[] args)
{
new TopPvpPk();
}
}