Тема: AE 276
Показать сообщение отдельно
Непрочитано 10.01.2011, 13:19   #19
Аватар для Mozilla
Пользователь

По умолчанию Re: AE 276

Проблему с порталами решил правкой трех файлов:
_2022CrushingtheConspiracy.java
Код:
package quest.altgard;

import com.aionengine.gameserver.model.EmotionType;
import com.aionengine.gameserver.model.gameobjects.Npc;
import com.aionengine.gameserver.model.gameobjects.player.Player;
import com.aionengine.gameserver.network.aion.serverpackets.SM_DIALOG_WINDOW;
import com.aionengine.gameserver.network.aion.serverpackets.SM_EMOTION;
import com.aionengine.gameserver.network.aion.serverpackets.SM_PLAY_MOVIE;
import com.aionengine.gameserver.network.aion.serverpackets.SM_USE_OBJECT;
import com.aionengine.gameserver.questEngine.handlers.QuestHandler;
import com.aionengine.gameserver.questEngine.model.QuestCookie;
import com.aionengine.gameserver.questEngine.model.QuestState;
import com.aionengine.gameserver.questEngine.model.QuestStatus;
import com.aionengine.gameserver.services.InstanceService;
import com.aionengine.gameserver.services.QuestService;
import com.aionengine.gameserver.services.TeleportService;
import com.aionengine.gameserver.utils.PacketSendUtility;
import com.aionengine.gameserver.utils.ThreadPoolManager;
import com.aionengine.gameserver.world.WorldMapInstance;

/**
 * @author HGabor85
 *
 */
public class _2022CrushingtheConspiracy extends QuestHandler
{
	private final static int	questId	= 2022;

	public _2022CrushingtheConspiracy()
	{
		super(questId);
	}

	@Override
	public void register()
	{
		qe.addQuestLvlUp(questId);
		qe.setNpcQuestData(203557).addOnTalkEvent(questId); // Начальный npc=Суэрон
		qe.setNpcQuestData(700143).addOnTalkEvent(questId); // Врата ведущие в абусс для миссии
		qe.setNpcQuestData(700142).addOnTalkEvent(questId); // Обелиск в абуссе, его необходимо активировать(поговорить)
		qe.setNpcQuestData(210753).addOnKillEvent(questId); // Моб для убийства
		qe.setNpcQuestData(700551).addOnTalkEvent(questId); // Ворота стоящие в конце уровня через них надо уйти
	}
	
	@Override
	public boolean onDialogEvent(QuestCookie env)
	{
		final Player player = env.getPlayer();
		int targetId = 0;
		if(env.getVisibleObject() instanceof Npc)
			targetId = ((Npc) env.getVisibleObject()).getNpcId();
		QuestState qs = player.getQuestStateList().getQuestState(questId);
		if(qs == null)
		{
			if(targetId == 203557)
			{
				if(env.getDialogId() == 25)
					return sendQuestDialog(env, 1011);
				else
					return defaultQuestStartDialog(env);
			}
		}
		else if (qs.getStatus() == QuestStatus.START)
		{
			switch(targetId)
			{
				case 203557:
				{
					if (qs.getQuestVarById(0) == 0)
					{
						if(env.getDialogId() == 25)
						{
							PacketSendUtility.sendPacket(player, new SM_PLAY_MOVIE(0, 66));
							return sendQuestDialog(env, 1011);
						}
						else if (env.getDialogId() == 10000)
						{
							qs.setQuestVarById(0, qs.getQuestVarById(0) + 1);
							updateQuestStatus(env);
							PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
							
							return true;
						}
					}
				}
				break;
				case 700143:
				{
					if (qs.getQuestVarById(0) == 1)
					{
						qs.setQuestVarById(0, qs.getQuestVarById(0) + 1);
						updateQuestStatus(env);
						TeleportService.teleportTo(player, 320030000, 275.68f, 164.03f, 205.19f, 34);
						PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
						return true;
					}
					else if (qs.getQuestVarById(0) >= 1)
					{
						qs.setQuestVarById(0, qs.getQuestVarById(0) + 0);
						updateQuestStatus(env);
						TeleportService.teleportTo(player, 320030000, 275.68f, 164.03f, 205.19f, 34);
						PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
						return true;
					}
				}
				break;
				case 700142:
				{
					if (qs.getQuestVarById(0) == 2)
					{
						qs.setQuestVarById(0, qs.getQuestVarById(0) + 1);
						updateQuestStatus(env);
						PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 0));
						ThreadPoolManager.getInstance().schedule(new Runnable(){
							@Override
							public void run()
							{
								PacketSendUtility.sendPacket(player, new SM_USE_OBJECT(player.getObjectId(), 700142, 3000, 0));
								PacketSendUtility.broadcastPacket(player, new SM_EMOTION(player, EmotionType.NEUTRALMODE2, 0, 700142), true);
								QuestService.addNewSpawn(320030000, 1, 210753, (float) 260.12, (float) 234.93, (float) 216.00, (byte) 90, true);
							}
						}, 3000);						
						return true;
					}

				}
				break;
				case 700551:
				{
					if (qs.getQuestVarById(0) == 4)
					{
						TeleportService.teleportTo(player, 220030000, 2453.0f, 2553.2f, 316.3f, 26);
						qs.setStatus(QuestStatus.REWARD);
						updateQuestStatus(env);
						PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
						PacketSendUtility.sendPacket(player, new SM_PLAY_MOVIE(0, 154));
						return true;
					}			
				}
			}
		}
		else if (qs.getStatus() == QuestStatus.REWARD)
		{
			if(targetId == 203557)
			{
				if (env.getDialogId() == -1)
					return sendQuestDialog(env, 1352);
				else
					return defaultQuestEndDialog(env);
			}
		}
		return false;
	}
	
	@Override
	public boolean onKillEvent(QuestCookie env)
	{
		Player player = env.getPlayer();
		QuestState qs = player.getQuestStateList().getQuestState(questId);
		if(qs == null)
			return false;

		int var = qs.getQuestVarById(0);
		int targetId = 0;
		if(env.getVisibleObject() instanceof Npc)
			targetId = ((Npc) env.getVisibleObject()).getNpcId();

		if(qs.getStatus() != QuestStatus.START)
			return false;
		switch(targetId)
		{
			case 210753:
				if(var >= 3 && var < 4)
				{
					qs.setQuestVarById(0, qs.getQuestVarById(0) + 1);
					updateQuestStatus(env);
					return true;
				}
		}
		return false;
	}

	@Override
        public boolean onLvlUpEvent(QuestCookie env)
        {
                Player player = env.getPlayer();
                QuestState qs = player.getQuestStateList().getQuestState(questId);
                if(qs == null || qs.getStatus() != QuestStatus.LOCKED)
                        return false;
                int[] quests = {2200, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021};
                for (int id : quests)
                {
                        QuestState qs2 = player.getQuestStateList().getQuestState(id);
                        if (qs2 == null || qs2.getStatus() != QuestStatus.COMPLETE)
                                return false;
                }

                qs.setStatus(QuestStatus.START);
                updateQuestStatus(env);
                return true;
        }
}
320030000_Bregirun.xml
Код:
    <!-- Abyss Gate (Object Normal lvl:1) -->
    <spawn map="320030000" npcid="700551" pool="1" interval="295">
        <object x="276.05295" y="162.95338" z="205.29982" h="94"/>
portal_templates.xml
Код:
 	<!-- Abyss Gate Bregirun To Altgard [Sealing The Abyss Gate Quest] Asmodians -->
	<portal npcid="700551" instance="true" minlevel="15" maxlevel="55" group="false">
 		<entrypoint mapid="320030000" x="273.08926" y="174.22618" z="204.34718"/>
		<exitpoint mapid="220030000" x="2452.0867" y="2547.304" z="317.40292"/>
 	</portal>
	<!-- Abyss Gate [Sealing the Abyss Gate] Elyos -->
	<portal npcid="700141" instance="true" group="true" race="ELYOS">
		<entrypoint mapid="210030000" x="2684.308" y="1068.7382" z="199.375" race="ELYOS"/>
		<exitpoint mapid="310030000" x="270.5" y="174.3" z="204.3"/>
	</portal>
 	<!-- Abyss Gate Altgard To Bregirun [Sealing The Abyss Gate Quest] Asmodians -->
	<portal npcid="700143" minlevel="10" maxlevel="55" group="false">
 		<entrypoint mapid="220030000" x="2452.0867" y="2547.304" z="317.40292"/>
		<exitpoint mapid="320030000" x="273.08926" y="174.22618" z="204.34718"/>
Осталась одна проблемка: При выходе из портала ID700143 не увеличивается значение quest_vars в таблице player_quests базы что приводит к невозможности активации обелиска. При ручной правке базы дальше квест выполняется без осложнений.
Mozilla вне форума Ответить с цитированием
Сказали спасибо: