Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

NPC Super Mobs

Iniciado por Swarlog, Jul 24, 2025, 11:30 PM

Tema anterior - Siguiente tema

Swarlog

Con este script, al matar al mob indicado obtienes recompensas; heroe, nobleza, skills, items, etc.. Totalmente configurable.

package l2s.gameserver.scripts.custom;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.concurrent.TimeUnit;

import l2s.commons.db.DatabaseFactory;
import l2s.gameserver.Announcements;
import l2s.gameserver.datatables.SkillTable;
import l2s.gameserver.model.L2Skill;
import l2s.gameserver.model.actor.L2Npc;
import l2s.gameserver.model.actor.instance.L2PcInstance;
import l2s.gameserver.model.quest.Quest;

/**
 * @author SoFace
 */
public class SuperMonster extends Quest
{
	// Monsters's ID.
	private static final int MONSTERS[] =
	{
		12564
	};
	
	private static final boolean REWARD_PARTY = false; // Reward party ?
	
	private final static boolean REWARD_NOBLE = true; // Give Noblesse  ?
	
	private final static boolean REWARD_HERO = false; // Give Hero ?
	private final static int REWARD_HERO_DAYS = -1; // How many days to give the status of Hero ?
													// 0 - Until relogin. -1 - Forever.
	
	private final static boolean REWARD_SKILL = true; // Give Skill ?
	private final static int REWARD_SKILL_ID = 0; // Skill's ID.
	private final static int REWARD_SKILL_LVL = 0; // Skill's LvL.
	
	private final static boolean REWARD_ITEMS = true; // Give Items ?
	private final static int REWARD_ITEM_ID = 4037; // Item's ID.
	private final static int REWARD_ITEM_COUNT = 5; // Count.
	
	public SuperMonster()
	{
		super(-1, "SuperMonster", "custom");
		
		for (int mobs : MONSTERS)
			addKillId(mobs);
	}
	
	@Override
	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
	{
		L2Skill skill = SkillTable.getInstance().getInfo(REWARD_SKILL_ID, REWARD_SKILL_LVL);
		
		Announcements.announceToAll("SuperMonster was killed.");
		
		if (REWARD_PARTY)
		{
			if (player.getParty() != null)
			{
				for (L2PcInstance members : player.getParty().getPartyMembers())
				{
					members.sendMessage("Congratulations ! You killed The SuperMonster !");
					
					if (REWARD_ITEMS)
						members.addItem("Add", REWARD_ITEM_ID, REWARD_ITEM_COUNT, members, true);
					if (REWARD_SKILL)
						members.addSkill(skill, true);
					if (REWARD_HERO)
					{
						if (!player.isHero())
							addHero(player, REWARD_HERO_DAYS);
						else
							player.sendMessage("You already Hero.");
					}
					if (REWARD_NOBLE)
					{
						if (!members.isNoble())
							members.setNoble(true, true);
						else
							members.sendMessage("You already Noblesse.");
					}
					
					members.broadcastUserInfo();
				}
			}
			else
			{
				player.sendMessage("Congratulations ! You killed The SuperMonster !");
				
				if (REWARD_ITEMS)
					player.addItem("Add", REWARD_ITEM_ID, REWARD_ITEM_COUNT, player, true);
				if (REWARD_SKILL)
					player.addSkill(skill, true);
				if (REWARD_HERO)
				{
					if (!player.isHero())
						addHero(player, REWARD_HERO_DAYS);
					else
						player.sendMessage("You already Hero.");
				}
				if (REWARD_NOBLE)
				{
					if (!player.isNoble())
						player.setNoble(true, true);
					else
						player.sendMessage("You already Noblesse.");
				}
				
				player.broadcastUserInfo();
			}
		}
		else
		{
			player.sendMessage("Congratulations ! You killed The SuperMonster !");
			
			if (REWARD_ITEMS)
				player.addItem("Add", REWARD_ITEM_ID, REWARD_ITEM_COUNT, player, true);
			if (REWARD_SKILL)
				player.addSkill(skill, true);
			if (REWARD_HERO)
			{
				if (!player.isHero())
					addHero(player, REWARD_HERO_DAYS);
				else
					player.sendMessage("You already Hero.");
			}
			if (REWARD_NOBLE)
			{
				if (!player.isNoble())
					player.setNoble(true, true);
				else
					player.sendMessage("You already Noblesse.");
			}
			
			player.broadcastUserInfo();
		}
		
		return null;
	}
	
	private void addHero(L2PcInstance player, int days)
	{
		long _heroExpire = 0L;
		
		player.setHero(true);
		player.broadcastUserInfo();
		
		if (days == 0)
		{
			_heroExpire = 3L;
			return;
		}
		_heroExpire = (days == -1 ? 1L : System.currentTimeMillis() + TimeUnit.DAYS.toMillis(days));
		
		try (Connection con = DatabaseFactory.getConnection();
			PreparedStatement stm = con.prepareStatement("UPDATE `characters` SET `hero`=? WHERE `obj_Id`=?"))
		{
			stm.setLong(1, _heroExpire);
			stm.setInt(2, player.getObjectId());
			stm.execute();
		}
		catch (SQLException e)
		{
			_log.warn("[SuperMonster] addHero(days) error: ", e);
		}
	}
	
	public static void main(String args[])
	{
		new SuperMonster();
	}
}