Noticias:

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

Menú Principal

Noblesse Instance

Iniciado por Swarlog, Jun 25, 2025, 09:56 PM

Tema anterior - Siguiente tema

Swarlog

package events.NoblesseInstance;

import javolution.util.FastMap;
import com.l2jserver.gameserver.ai.CtrlIntention;
import com.l2jserver.gameserver.instancemanager.InstanceManager;
import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
import com.l2jserver.gameserver.model.L2Effect;
import com.l2jserver.gameserver.model.L2Party;
import com.l2jserver.gameserver.model.L2Skill;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.L2Summon;
import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.entity.Instance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
import com.l2jserver.gameserver.network.serverpackets.Earthquake;
import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.util.Util;
import com.l2jserver.util.Rnd;

public class NoblesseInstance extends Quest
{
	
	private static final String qn = "NoblesseInstance";
	
	private static final int INSTANCEID = 555555;
	
	//NPCs
	private static final int MANAGER = 999991;
	
	private static int counter = 0;
		   
	private FastMap<Integer, Integer> _mobs;
	
	private class teleCoord
	{
		int instanceId;
		int x;
		int y;
		int z;
	}
	private class BSPWorld extends InstanceWorld
	{
		public long[] storeTime = { 0, 0 };
		
		public BSPWorld()
		{
		}
	}
	
	/**
	 * @param questId
	 * @param name
	 * @param descr
	 */
	public NoblesseInstance(int questId, String name, String descr)
	{
		super(questId, name, descr);
		addStartNpc(MANAGER);
		addTalkId(MANAGER);
		
		_mobs = new FastMap<Integer, Integer>();
		
	}
	
	private static final void removeBuffs(L2Character ch)
	{
		for (final L2Effect e : ch.getAllEffects())
		{
			if (e == null)
				continue;
			final L2Skill skill = e.getSkill();
			if (skill.isDebuff() || skill.isStayAfterDeath())
				continue;
			e.exit();
		}
		if (ch.getPet() != null)
			for (final L2Effect e : ch.getPet().getAllEffects())
			{
				if (e == null)
					continue;
				final L2Skill skill = e.getSkill();
				if (skill.isDebuff() || skill.isStayAfterDeath())
					continue;
				e.exit();
			}
	}
	
	private boolean checkConditions(L2PcInstance player)
	{
		final L2Party party = player.getParty();
		if (party == null)
		{
			NpcHtmlMessage msg = new NpcHtmlMessage(0);
			msg.setFile(player.getHtmlPrefix(), "data/scripts/events/NoblesseInstance/999991-01.htm");
			player.sendPacket(msg);
			player.sendPacket(new ExShowScreenMessage("You are not in party!", 3000));
			return false;
		}
		if (party.getLeader() != player)
		{
			NpcHtmlMessage msg = new NpcHtmlMessage(0);
			msg.setFile(player.getHtmlPrefix(), "data/scripts/events/NoblesseInstance/999991-02.htm");
			player.sendPacket(msg);
			player.sendPacket(new ExShowScreenMessage("You are not leading your party!", 3000));
			return false;
		}
		if (party.getMemberCount() < 2)
		{
			NpcHtmlMessage msg = new NpcHtmlMessage(0);
			msg.setFile(player.getHtmlPrefix(), "data/scripts/events/NoblesseInstance/999991-03.htm");
			player.sendPacket(msg);
			player.sendPacket(new ExShowScreenMessage("Your party must have at least 4 members!", 3000));
			return false;
		}
		if (player.isNoble())
		{
			NpcHtmlMessage msg = new NpcHtmlMessage(0);
			msg.setFile(player.getHtmlPrefix(), "data/scripts/events/NoblesseInstance/999991-04.htm");
			player.sendPacket(msg);
			player.sendPacket(new ExShowScreenMessage("You are already noblesse!", 3000));
			return false;
		}
		if (player.getLevel() < 78)
		{
			NpcHtmlMessage msg = new NpcHtmlMessage(0);
			msg.setFile(player.getHtmlPrefix(), "data/scripts/events/NoblesseInstance/999991-08.htm");
			player.sendPacket(msg);
			player.sendPacket(new ExShowScreenMessage("Your level is too low!", 3000));
			return false;
		}
		for (final L2PcInstance partyMember : party.getPartyMembers())
		{
			if (partyMember.isNoble())
			{
				NpcHtmlMessage msg = new NpcHtmlMessage(0);
				msg.setFile(player.getHtmlPrefix(), "data/scripts/events/NoblesseInstance/999991-05.htm");
				player.sendPacket(msg);
				player.sendPacket(new ExShowScreenMessage(partyMember.getName() + " is already noblesse. Your party cannot enter!", 3000));
				return false;
			}
			if (partyMember.getLevel() < 78)
			{
				NpcHtmlMessage msg = new NpcHtmlMessage(0);
				msg.setFile(player.getHtmlPrefix(), "data/scripts/events/NoblesseInstance/999991-06.htm");
				player.sendPacket(msg);
				player.sendPacket(new ExShowScreenMessage(partyMember.getName() + "'s level is too low. Your party cannot enter!", 3000));
				return false;
			}
			if (!Util.checkIfInRange(1000, player, partyMember, true))
			{
				NpcHtmlMessage msg = new NpcHtmlMessage(0);
				msg.setFile(player.getHtmlPrefix(), "data/scripts/events/NoblesseInstance/999991-07.htm");
				player.sendPacket(msg);
				player.sendPacket(new ExShowScreenMessage(partyMember.getName() + " is too far away. Your party cannot enter!", 3000));
				return false;
			}
			final Long reentertime = InstanceManager.getInstance().getInstanceTime(partyMember.getObjectId(), INSTANCEID);
			if (System.currentTimeMillis() < reentertime)
			{
				player.sendPacket(new ExShowScreenMessage("Test Me!", 3000));
				return false;
			}
		}
		return true;
	}
	
	private void teleportplayer(L2PcInstance player, teleCoord teleto)
	{
		player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
		player.setInstanceId(teleto.instanceId);
		player.teleToLocation(teleto.x, teleto.y, teleto.z);
		return;
	}
	
	protected int enterInstance(L2PcInstance player, String template, teleCoord teleto)
	{
		int instanceId = 0;
		//check for existing instances for this player
		InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
		//existing instance
		if (world != null)
		{
			if (!(world instanceof BSPWorld))
			{
				player.sendPacket(new ExShowScreenMessage("Before joining to this leave previous instance!", 3000));
				return 0;
			}
			teleto.instanceId = world.instanceId;
			teleportplayer(player, teleto);
			return instanceId;
		}
		//New instance
		else
		{
			if (!checkConditions(player))
				return 0;
			final L2Party party = player.getParty();
			instanceId = InstanceManager.getInstance().createDynamicInstance(template);
			world = new BSPWorld();
			world.instanceId = instanceId;
			world.templateId = INSTANCEID;
			world.status = 0;
			((BSPWorld) world).storeTime[0] = System.currentTimeMillis();
			InstanceManager.getInstance().addWorld(world);
			_log.info("Noblesse Instance " + template + " Instance: " + instanceId + " created by player: " + player.getName());
			//runTumors((BSPWorld) world);
			// teleport players
			teleto.instanceId = instanceId;
			
			if (player.getParty() == null)
			{
				teleportplayer(player, teleto);
				removeBuffs(player);
				world.allowed.add(player.getObjectId());
			}
			else
				for (final L2PcInstance partyMember : party.getPartyMembers())
				{
					teleportplayer(partyMember, teleto);
					removeBuffs(partyMember);
					world.allowed.add(partyMember.getObjectId());
				}
			return instanceId;
		}
	}
	
	protected void exitInstance(L2PcInstance player, teleCoord tele, int tId)
	{
		player.setInstanceId(0);
		if (tId > 0)
		InstanceManager.getInstance().setInstanceTime(player.getObjectId(), tId, System.currentTimeMillis() * 60000 * 60 * 24);
		player.teleToLocation(tele.x, tele.y, tele.z);
		final L2Summon pet = player.getPet();
		if (pet != null)
		{
			pet.setInstanceId(0);
			pet.teleToLocation(tele.x, tele.y, tele.z);
		}
	}
	
	
	public static void main(String[] args)
	{
		new NoblesseInstance(-1, qn, "NoblesseInstance");
	}
	
}