Показать сообщение отдельно
Непрочитано 25.08.2013, 15:08   #10
Пользователь

Автор темы (Топик Стартер) Re: Скрипты в Феникс сборках

Победил проблему с классами, компиляцией сборки другой версией java.

Теперь есть проблема с квестом на Фрею. Если кто шарит прошу помочь, ибо сам уже сутки голову ломаю.

2) Квест _10285_MeetingSirra - не работает момент когда Лакей Фреи должен портнуть к Зинии и Кегору на озеро.
Код:
package quests._10285_MeetingSirra;

import java.util.HashMap;
import javolution.util.FastMap;
import l2rt.common.ThreadPoolManager;
import l2rt.gameserver.cache.Msg;
import l2rt.extensions.scripts.ScriptFile;
import l2rt.gameserver.model.L2Player;
import l2rt.gameserver.model.Reflection;
import l2rt.gameserver.model.L2ObjectsStorage;
import l2rt.gameserver.model.instances.L2NpcInstance;
import l2rt.gameserver.model.L2Spawn;
import l2rt.gameserver.model.L2World;
import l2rt.gameserver.instancemanager.InstancedZoneManager;
import l2rt.gameserver.instancemanager.InstancedZoneManager.InstancedZone;
import l2rt.gameserver.serverpackets.SystemMessage;
import l2rt.gameserver.tables.ReflectionTable;
import l2rt.gameserver.model.quest.Quest;
import l2rt.extensions.scripts.Functions;
import l2rt.gameserver.model.quest.QuestState;
import l2rt.gameserver.tables.NpcTable;
import l2rt.gameserver.templates.L2NpcTemplate;
import l2rt.gameserver.serverpackets.ExStartScenePlayer;
import l2rt.gameserver.serverpackets.ExShowScreenMessage;
import l2rt.gameserver.serverpackets.ExShowScreenMessage.ScreenMessageAlign;
import l2rt.util.Location;
import quests._10284_AcquisitionOfDivineSword._10284_AcquisitionOfDivineSword;

/**
 * @author People
 */

public class _10285_MeetingSirra extends Quest implements ScriptFile
{

	private static FastMap<Integer, Long> _instances = new FastMap<Integer, Long>();
	private static FastMap<Integer, Long> _instances2 = new FastMap<Integer, Long>();
	private static final Location TELEPORT_POSITION = new Location(103000, -124360, -2784);
	// NPC
	private static final int Raforti = 32020;
	private static final int Jinia = 32760;
	private static final int Sirra = 32762;
	private static final int Kegor = 32761;
	private static final int Lakey = 32029;
	// MOB
	private static final int FreyaM = 18847;
	
	public _10285_MeetingSirra()
	{
		super(true);
		addStartNpc(Raforti);
		addTalkId(Jinia);
		addTalkId(Sirra);
		addTalkId(Kegor);
		addTalkId(Lakey);
	}

	@Override
	public String onEvent(String event, final QuestState st, L2NpcInstance npc)
	{
		final L2Player player = st.getPlayer();
		String htmltext = event;
		if(event.equalsIgnoreCase("repre_q10285_05.htm"))
		{
			st.setCond(1);
			st.setState(STARTED);
			st.playSound(SOUND_ACCEPT);
		}
		if(event.equalsIgnoreCase("inst"))
		{
			enterInstance(player);
			st.set("cond", "2");
			st.playSound(SOUND_ACCEPT);
			return null;
		}
		if(event.equalsIgnoreCase("jinia_npc_q10285_02.htm"))
		{
			st.set("cond", "3");
			st.playSound(SOUND_ACCEPT);
		}
		if(event.equalsIgnoreCase("kegor_npc_q10285_02.htm"))
		{
			st.set("cond", "4");
			st.playSound(SOUND_ACCEPT);
		}
		if(event.equalsIgnoreCase("jinia_npc_q10285_05.htm"))
		{
			long refId = player.getReflection().getId();
			addSpawnToInstance(Sirra, new Location(-23848, -8744, -5413, 55000), 0, refId);
			L2NpcInstance n1 = L2ObjectsStorage.getByNpcId(Sirra);
			Functions.npcSay(n1, "Вас послушать, получается, что Вы знаете обо всем на свете. Но я больше не могу слушать Ваши мудрствования.");
			st.set("cond", "5");
			st.playSound(SOUND_ACCEPT);
		}
		if(event.equalsIgnoreCase("sirr_npc_q10285_08.htm"))
		{
			L2NpcInstance n = L2ObjectsStorage.getByNpcId(32762);
			n.deleteMe();
			st.set("cond", "6");
			st.playSound(SOUND_ACCEPT);
			
		}
		if(event.equalsIgnoreCase("nazad"))
		{
			st.set("cond", "7");
			returnToAden(player);
			st.playSound(SOUND_ACCEPT);
			return null;
		}
		if(event.equalsIgnoreCase("goTP"))
		{
			st.getPlayer().teleToLocation(TELEPORT_POSITION);
			st.set("cond", "8");
			st.playSound(SOUND_ACCEPT);
			return null;
		}
		if(event.equalsIgnoreCase("gofreya1"))
		{
			enterInstance2(player);
			long refId = player.getReflection().getId();
			addSpawnToInstance(FreyaM, new Location(114700, -115012, -11230, 5000), 0, refId);
			ReflectionTable.getInstance().get(refId).openDoor(23140101);
			st.set("cond", "9");
			st.playSound(SOUND_ACCEPT);
			
			ThreadPoolManager.getInstance().scheduleGeneral(new Runnable(){
        			@Override
        			public void run()
        			{
						player.showQuestMovie(ExStartScenePlayer.SCENE_SC_BOSS_FREYA_FORCED_DEFEAT);
						st.set("cond", "10");
						returnToAden(player);
        			}
        		}, 120000);
			
			
			return null;
		}
		if(event.equalsIgnoreCase("exit"))
		{
			st.giveItems(57, 283425);
			st.addExpAndSp(939075, 83855);
			st.setState(COMPLETED);
			st.playSound(SOUND_FINISH);
			st.unset("cond");
			st.exitCurrentQuest(false);
			return null;
		}
		return htmltext;
	}

	@Override
	public String onTalk(L2NpcInstance npc, QuestState st)
	{
		int npcId = npc.getNpcId();
		int id = st.getState();
		int cond = st.getCond();
		
		if(npcId == Raforti)
		{
			if(id == CREATED)
			{
				QuestState qs = st.getPlayer().getQuestState(_10284_AcquisitionOfDivineSword.class);
				if(qs != null && qs.isCompleted() && st.getPlayer().getLevel() >= 82)
					return "repre_q10285_01.htm";
				else
					return "npc-lvl.htm";			
			}
			if(id == STARTED)
			{
				if(cond == 1)
				return "npc-01.htm";
				if(cond == 2)
				return "npc-zag.htm";
				if(cond == 10)
				return "npc-1.htm";
			}
			if(id == COMPLETED)
			{
				return "npc-fin.htm";
			}
		}
		if (npcId == Jinia)
		{
			if (cond == 2)
				return "jinia_npc_q10285_01.htm";
			if (cond == 4)
				return "jinia_npc_q10285_04.htm";
			if (cond == 6)
				return "jinia_npc_q10285_07.htm";
			if (cond == 8)
				return "npc-gofreya.htm";
		}
		if (npcId == Kegor)
		{
			if (cond == 3)
				return "kegor_npc_q10285_01.htm";
		}
		if (npcId == Sirra)
		{
			if (cond == 5)
				return "sirr_npc_q10285_01.htm";
		}
		if (npcId == Lakey)
		{
			if (cond == 7)
				return "lakey.htm";
		}

		return "noquest";
	}
	
	
	private void enterInstance(L2Player player)
	{
		int instancedZoneId = 703;
		InstancedZoneManager ilm = InstancedZoneManager.getInstance();
		FastMap<Integer, InstancedZone> ils = ilm.getById(instancedZoneId);
		if(ils == null)
		{
			player.sendPacket(Msg.SYSTEM_ERROR);
			return;
		}

		InstancedZone il = ils.get(0);

		assert il != null;

		if(player.isInParty())
		{
			player.sendPacket(Msg.A_PARTY_CANNOT_BE_FORMED_IN_THIS_AREA);
			return;
		}

		if(player.isCursedWeaponEquipped())
		{
			player.sendPacket(new SystemMessage(SystemMessage.C1S_QUEST_REQUIREMENT_IS_NOT_SUFFICIENT_AND_CANNOT_BE_ENTERED).addName(player));
			return;
		}

		Long old = _instances.get(player.getObjectId());
		if(old != null)
		{
			Reflection old_r = ReflectionTable.getInstance().get(old);
			if(old_r != null)
			{
				player.setReflection(old_r);
				player.teleToLocation(il.getTeleportCoords());
				player.setVar("backCoords", old_r.getReturnLoc().toXYZString());
				return;
			}
		}

		Reflection r = new Reflection(il.getName());
		r.setInstancedZoneId(instancedZoneId);
		for(InstancedZone i : ils.values())
		{
			if(r.getReturnLoc() == null)
				r.setReturnLoc(i.getReturnCoords());
			if(r.getTeleportLoc() == null)
				r.setTeleportLoc(i.getTeleportCoords());
			r.FillSpawns(i.getSpawnsInfo());
		}

		int timelimit = il.getTimelimit();

		player.setReflection(r);
		player.teleToLocation(il.getTeleportCoords());
		player.setVar("backCoords", r.getReturnLoc().toXYZString());
		player.sendPacket(new SystemMessage(SystemMessage.THIS_DUNGEON_WILL_EXPIRE_IN_S1_MINUTES).addNumber(timelimit));

		r.setNotCollapseWithoutPlayers(true);
		r.startCollapseTimer(timelimit * 60 * 1000L);

		_instances.put(player.getObjectId(), r.getId());
	}
	
	private void enterInstance2(L2Player player)
	{
		int instancedZoneId = 704;
		InstancedZoneManager ilm = InstancedZoneManager.getInstance();
		FastMap<Integer, InstancedZone> ils = ilm.getById(instancedZoneId);
		if(ils == null)
		{
			player.sendPacket(Msg.SYSTEM_ERROR);
			return;
		}

		InstancedZone il = ils.get(0);

		assert il != null;

		if(player.isInParty())
		{
			player.sendPacket(Msg.A_PARTY_CANNOT_BE_FORMED_IN_THIS_AREA);
			return;
		}

		if(player.isCursedWeaponEquipped())
		{
			player.sendPacket(new SystemMessage(SystemMessage.C1S_QUEST_REQUIREMENT_IS_NOT_SUFFICIENT_AND_CANNOT_BE_ENTERED).addName(player));
			return;
		}

		Long old = _instances.get(player.getObjectId());
		if(old != null)
		{
			Reflection old_r = ReflectionTable.getInstance().get(old);
			if(old_r != null)
			{
				player.setReflection(old_r);
				player.teleToLocation(il.getTeleportCoords());
				player.setVar("backCoords", old_r.getReturnLoc().toXYZString());
				return;
			}
		}

		Reflection r = new Reflection(il.getName());
		r.setInstancedZoneId(instancedZoneId);
		for(InstancedZone i : ils.values())
		{
			if(r.getReturnLoc() == null)
				r.setReturnLoc(i.getReturnCoords());
			if(r.getTeleportLoc() == null)
				r.setTeleportLoc(i.getTeleportCoords());
			r.FillSpawns(i.getSpawnsInfo());
			r.FillDoors(i.getDoors());
		}

		int timelimit = il.getTimelimit();

		player.setReflection(r);
		player.teleToLocation(il.getTeleportCoords());
		player.setVar("backCoords", r.getReturnLoc().toXYZString());
		player.sendPacket(new SystemMessage(SystemMessage.THIS_DUNGEON_WILL_EXPIRE_IN_S1_MINUTES).addNumber(timelimit));

		r.setNotCollapseWithoutPlayers(true);
		r.startCollapseTimer(timelimit * 60 * 1000L);

		_instances.put(player.getObjectId(), r.getId());
	}
	
	
	private void returnToAden(L2Player player)
	{
		Reflection r = player.getReflection();
		if(r.getReturnLoc() != null)
		    player.teleToLocation(r.getReturnLoc(), 0);
		else
		    player.setReflection(0);
		    player.unsetVar("backCoords");
	}
	
	public void onLoad()
	{
	   System.out.println("Loaded Quest: 10285: MeetingSirra");
	}

	public void onReload()
	{}

	public void onShutdown()
	{}

}
красным отметил на каком моменте затык. В базе cound = 7 то есть с состоянием квеста всё в порядке.
Сам NPC Лакей Фреи настоятельно подсовывает диалог из квеста _1004_IceFairySirra.

И ещё При загрузке ГС выдаёт информацию о том что скрипт загружен Loaded Quest: 1004: IceFairySirra, я не мог понять грузит ли сервер квест MeetingSirra и добавил в код строки
Код:
public void onLoad()
	{
	   System.out.println("Loaded Quest: 10285: MeetingSirra");
	}

	public void onReload()
	{}

	public void onShutdown()
	{}
но это не помогло ГС то ли не грузит скрипт, то ли не выводит об этом информацию...
TosyBosy вне форума Ответить с цитированием