Квест The Other Side of Truth - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 16.01.2009, 23:58   #1
Пользователь

Автор темы (Топик Стартер) Квест The Other Side of Truth

Короче не нашёл подходящего раздела...Решил спросить тут.Сборка la2base Int

Квест на прохождения к Снежной королеве

Название квеста: The Other Side of Truth
Тип:
Расы: все
Требуемый левел: 53
Где брать квест: Ice Merchant Cabin
Награда: 60,040 Adena

Квест начинается в The Ice Merchant Cabin у квестого нпс Rafforty.

1. Rafforty полагает, что вы достаточно любознательны, чтобы возжелать чистого знания (кстати, правильно полагает - за такие деньги квесты делаются разве что из академического интереса) и предлагает узнать, что же скрывается за ледяной маской истины. В соответствии с канонами жанра, вы соглашаетесь ему помочь.

Rafforty просит вас встретиться с Misa, эксцентричной девушкой, любящей мерзнуть на льду Frost Lake по ночам. Отправляйтесь НОЧЬЮ через NW проход от Ice Merchant Cabin, идите по левой стене до моста, перед мостом поворачивайте направо и по берегу обходите лабиринт, пока не дойдете до Frost Lake, где и увидите нашу мерзнущую красавицу на льдине среди озера. Проход по льдинам начинается чуть левее, смотрите под ноги - спасать себя из-подо льда придется самим, если провалитесь.

2. Поговрите с Misa, она просит вас отнести письмо Rafforty, но ни в коем случае его не читать. Берите письмо и летите в город (время дорого, к этой снегурочке еще раз мотаться придется), оттуда опять к Rafforty.

Вот у меня такая проблема...У меня стоит там Misa, но она не даёт квеста..Искал поиском её и ID и имя-я не нашёл....Есть у кого рабочий квест?Или может самому можно как-то написать?
Вот сам код квеста:
Shaigy вне форума Ответить с цитированием
Непрочитано 17.01.2009, 04:07   #2
Аватар для diahellfire
Пользователь

По умолчанию Ответ: Квест The Other Side of Truth

а) и где код?
б)Скорей всего Id для Misa не указан в квесте.
в)Отсутствует хтмл к Misa по квесту.
С вас код.
diahellfire вне форума Отправить сообщение для diahellfire с помощью ICQ Ответить с цитированием
Непрочитано 17.01.2009, 13:53   #3
Пользователь

Автор темы (Топик Стартер) Ответ: Квест The Other Side of Truth

Код:
package ai.individual;

import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;

import javolution.util.FastList;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.cache.HtmCache;
import net.sf.l2j.gameserver.datatables.DoorTable;
import net.sf.l2j.gameserver.datatables.NpcTable;
import net.sf.l2j.gameserver.datatables.SpawnTable;
import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.L2Spawn;
import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.quest.Quest;
import net.sf.l2j.gameserver.model.zone.type.L2BossZone;
import net.sf.l2j.gameserver.serverpackets.ActionFailed;
import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.templates.L2NpcTemplate;
import ai.group_template.L2AttackableAIScript;

public class IceFairySirra extends L2AttackableAIScript
{
	protected static Logger _log = Logger.getLogger(IceFairySirra.class.getName());
	private static final int STEWARD = 32029;
	private static final int SILVER_HEMOCYTE = 8057;
	private static L2BossZone _freyasZone;
	private static L2PcInstance _player = null;
	protected FastList<L2NpcInstance> _allMobs = new FastList<L2NpcInstance>();
	protected Future<?> _onDeadEventTask = null;

	public IceFairySirra(int id,String name,String descr)
	{
        super(id,name,descr);
        int[] mob = {STEWARD, 22100, 22102, 22104};
        this.registerMobs(mob);
        this.addEventId(STEWARD, Quest.QuestEventType.QUEST_START);
        this.addEventId(STEWARD, Quest.QuestEventType.ON_TALK);
        this.addEventId(STEWARD, Quest.QuestEventType.ON_FIRST_TALK);
        init();
	}

	public void init()
	{
		_freyasZone = GrandBossManager.getInstance().getZone(105546 , -127892 , -2768);
		if (_freyasZone == null)
		{
			_log.warning("IceFairySirraManager: Failed to load zone");
			return;
		}
		_freyasZone.setZoneEnabled(false);
		findTemplate(STEWARD).setBusy(false);
		openGates();
	}

	public void cleanUp()
	{
		init();
		cancelQuestTimer("30MinutesRemaining",null, _player);
		cancelQuestTimer("20MinutesRemaining",null, _player);
		cancelQuestTimer("10MinutesRemaining",null, _player);
		cancelQuestTimer("End",null, _player);
		for (L2NpcInstance mob : _allMobs)
		{
			try
			{
				mob.getSpawn().stopRespawn();
				mob.deleteMe();
			}
			catch (Exception e)
			{
			    _log.log(Level.SEVERE, "IceFairySirraManager: Failed deleting mob.", e);
			}
		}
		_allMobs.clear();
	}

	public L2NpcInstance findTemplate(int npcId)
	{
		L2NpcInstance npc = null;
		for (L2Spawn spawn : SpawnTable.getInstance().getSpawnTable().values())
		{
			if (spawn != null && spawn.getNpcid() == npcId)
			{
				npc = spawn.getLastSpawn();
				break;
			}
		}
		return npc;
	}

	protected void openGates()
	{
		for (int i = 23140001; i < 23140003; i++ )
		{
			try
			{
				L2DoorInstance door = DoorTable.getInstance().getDoor(i);
				if (door != null)
				{
					door.openMe();
				}
				else
				{
					_log.warning("IceFairySirraManager: Attempted to open undefined door. doorId: "+i);
				}
			}
			catch (Exception e)
			{
				_log.log(Level.SEVERE, "IceFairySirraManager: Failed closing door", e);
			}
		}
	}
	protected void closeGates()
	{
		for (int i = 23140001; i < 23140003; i++ )
		{
			try
			{
				L2DoorInstance door = DoorTable.getInstance().getDoor(i);
				if (door != null)
				{
					door.closeMe();
				}
				else
				{
					_log.warning("IceFairySirraManager: Attempted to close undefined door. doorId: "+i);
				}
			}
			catch (Exception e)
			{
				_log.log(Level.SEVERE, "IceFairySirraManager: Failed closing door", e);
			}
		}
	}

	public boolean checkItems (L2PcInstance player)
	{
		if (player.getParty() != null)
		{
			for (L2PcInstance pc : player.getParty().getPartyMembers())
			{
				L2ItemInstance i = pc.getInventory().getItemByItemId(SILVER_HEMOCYTE);
				if 	(i == null || i.getCount() < 10)
				{
					return false;
				}
			}
		}
		else
			return false;
		return true;
	}

	public void destroyItems (L2PcInstance player)
	{
		if (player.getParty() != null)
		{
			for (L2PcInstance pc : player.getParty().getPartyMembers())
			{
				L2ItemInstance i = pc.getInventory().getItemByItemId(SILVER_HEMOCYTE);
				pc.destroyItem("Hemocytes", i.getObjectId(), 10, null, false);
			}
		}
		else
			cleanUp();
	}

	public void teleportInside (L2PcInstance player)
	{
		if (player.getParty() != null)
		{
			for (L2PcInstance pc : player.getParty().getPartyMembers())
			{
				pc.teleToLocation(113533,-126159,-3488,false);
				if (_freyasZone == null)
				{
					_log.warning("IceFairySirraManager: Failed to load zone");
					cleanUp();
					return;
				}
				_freyasZone.allowPlayerEntry(pc,2103);
			}
		}
		else
			cleanUp();
	}
	public void screenMessage(L2PcInstance player, String text)
	{
		if (player.getParty() != null)
		{
			for (L2PcInstance pc : player.getParty().getPartyMembers())
			{
				pc.sendMessage(text);
			}
		}
		else
			cleanUp();
	}	          

	public void doSpawns()
	{
		int[][] mobs = { {29060 , 105546 , -127892 , -2768} ,
                {29056 , 102779 , -125920 , -2840} ,
                {22100 , 111719 , -126646 , -2992} ,
                {22102 , 109509 , -128946 , -3216} ,
                {22104 , 109680 , -125756 , -3136} };
		L2Spawn spawnDat;
		L2NpcTemplate template;
		try
		{
			for (int i = 0; i <5; i++)
			{
				template = NpcTable.getInstance().getTemplate(mobs[i][0]);
				if (template != null)
				{
					spawnDat = new L2Spawn(template);
					spawnDat.setAmount(1);
					spawnDat.setLocx(mobs[i][1]);
					spawnDat.setLocy(mobs[i][2]);
					spawnDat.setLocz(mobs[i][3]);
					spawnDat.setHeading(0);
					spawnDat.setRespawnDelay(60);
					SpawnTable.getInstance().addNewSpawn(spawnDat, false);
					_allMobs.add(spawnDat.doSpawn());
					spawnDat.stopRespawn();
				}
				else
				{
					_log.warning("IceFairySirraManager: Data missing in NPC table for ID: "+mobs[i][0]);
				}
			}
		}
		catch (Exception e)
		{
			_log.warning("IceFairySirraManager: Spawns could not be initialized: "+ e);
		}
	}

	public String getHtmlPath(int val)
	{
		String pom = "";

		pom = "32029-" + val;
		if (val == 0)
			pom = "32029";

        String temp = "data/html/default/" + pom + ".htm";
        
        if (!Config.LAZY_CACHE)
        {
        	// If not running lazy cache the file must be in the cache or it doesnt exist
        	if (HtmCache.getInstance().contains(temp))
        		return temp;
        }
        else
        {
        	if (HtmCache.getInstance().isLoadable(temp))
        		return temp;
        }
        
        // If the file is not found, the standard message "I have nothing to say to you" is returned
        return "data/html/npcdefault.htm";
    }

	public void sendHtml(L2NpcInstance npc, L2PcInstance player, String filename)
	{
		NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
        html.setFile(filename);
        html.replace("%objectId%", String.valueOf(npc.getObjectId()));
        player.sendPacket(html);
        player.sendPacket( new ActionFailed() );
	}

	public String onFirstTalk (L2NpcInstance npc, L2PcInstance player)
Shaigy вне форума Ответить с цитированием
Непрочитано 17.01.2009, 14:04   #4
Пользователь

Автор темы (Топик Стартер) Ответ: Квест The Other Side of Truth

Это его продолжение...
Код:
	{
		if (player.getQuestState("IceFairySirra") == null)
			newQuestState(player);
		player.setLastQuestNpcObject(npc.getObjectId());
		String filename = "";
		if (npc.isBusy())
			filename = getHtmlPath(10);
		else
			filename = getHtmlPath(0);
		sendHtml(npc, player, filename);
		return null;
	}

	public String onAdvEvent (String event, L2NpcInstance npc, L2PcInstance player)
	{
		if (event.equalsIgnoreCase("check_condition"))
        {
			if (npc.isBusy())//should never happen
				return super.onAdvEvent(event, npc, player);
			else
			{
				String filename = "";
				if (player.isInParty() && player.getParty().getPartyLeaderOID() == player.getObjectId())
				{
					if (checkItems(player) == true)
					{
						startQuestTimer("start",100000,null,player);
						_player = player;
						destroyItems(player);
						player.getInventory().addItem("Scroll",8379,3,player,null);
						npc.setBusy(true);
						screenMessage(player,"Steward: Please wait a moment.");
						filename = getHtmlPath(3);
					}
					else
					{
						filename = getHtmlPath(2);
					}
				}
				else
				{
					filename = getHtmlPath(1);
				}
				sendHtml(npc, player, filename);
			}
        }
		else if (event.equalsIgnoreCase("start"))
        {
			if (_freyasZone == null)
			{
				_log.warning("IceFairySirraManager: Failed to load zone");
				cleanUp();
				return super.onAdvEvent(event, npc, player);
			}
			_freyasZone.setZoneEnabled(true);
			closeGates();
			doSpawns();
			startQuestTimer("Party_Port",2000,null,player);
			startQuestTimer("End",1802000,null,player);
        }
		else if (event.equalsIgnoreCase("Party_Port"))
        {
			teleportInside(player);
			screenMessage(player,"Steward: Please restore the Queen's appearance!");
			startQuestTimer("30MinutesRemaining",300000,null,player);
        }
		else if (event.equalsIgnoreCase("30MinutesRemaining"))
        {
			screenMessage(player,"30 minute(s) are remaining.");
			startQuestTimer("20minutesremaining",600000,null,player);
        }
		else if (event.equalsIgnoreCase("20MinutesRemaining"))
        {
			screenMessage(player,"20 minute(s) are remaining.");
			startQuestTimer("10minutesremaining",600000,null,player);
        }
		else if (event.equalsIgnoreCase("10MinutesRemaining"))
        {
			screenMessage(player,"Steward: Waste no time! Please hurry!");
        }
		else if (event.equalsIgnoreCase("End"))
        {
			screenMessage(player,"Steward: Was it indeed too much to ask.");
			cleanUp();
        }
		return super.onAdvEvent(event, npc, player);
	}

    public static void main(String[] args)
    {
    	new IceFairySirra(-1,"IceFairySirra","ai");
    }
}
Ты прав...Html'ок я не обнаружил...
Id миссы тоже не нашёл...Реально дописать?Могу выложить полное описание квеста...Я немного шарю в питоне...Но думаю у меня ничего не выйдет.Т.к. знание начальные...
Спасибо вам за помощь.
Shaigy вне форума Ответить с цитированием
Непрочитано 18.01.2009, 02:45   #5
Аватар для diahellfire
Пользователь

По умолчанию Ответ: Квест The Other Side of Truth

Выкладывай описание будем сравнивать...
diahellfire вне форума Отправить сообщение для diahellfire с помощью ICQ Ответить с цитированием
Непрочитано 18.01.2009, 11:23   #6
Пользователь

Автор темы (Топик Стартер) Ответ: Квест The Other Side of Truth

Квест на прохождения к Снежной королеве

Название квеста: The Other Side of Truth
Тип:
Расы: все
Требуемый левел: 53
Где брать квест: Ice Merchant Cabin
Награда: 60,040 Adena

Квест начинается в The Ice Merchant Cabin у квестого нпс Rafforty.

1. Rafforty полагает, что вы достаточно любознательны, чтобы возжелать чистого знания (кстати, правильно полагает - за такие деньги квесты делаются разве что из академического интереса) и предлагает узнать, что же скрывается за ледяной маской истины. В соответствии с канонами жанра, вы соглашаетесь ему помочь.

Rafforty просит вас встретиться с Misa, эксцентричной девушкой, любящей мерзнуть на льду Frost Lake по ночам. Отправляйтесь НОЧЬЮ через NW проход от Ice Merchant Cabin, идите по левой стене до моста, перед мостом поворачивайте направо и по берегу обходите лабиринт, пока не дойдете до Frost Lake, где и увидите нашу мерзнущую красавицу на льдине среди озера. Проход по льдинам начинается чуть левее, смотрите под ноги - спасать себя из-подо льда придется самим, если провалитесь.

2. Поговрите с Misa, она просит вас отнести письмо Rafforty, но ни в коем случае его не читать. Берите письмо и летите в город (время дорого, к этой снегурочке еще раз мотаться придется), оттуда опять к Rafforty.

3. Поговорите с Rafforty, который с сомнением разглядывает письмо и интересуется, не читали ли вы его - печать-то выглядит сломанной... Оскорблены до глубины души? (Are you doubting me? - иначе придется делать квест с начала!) Ладно, Rafforty просит прощения за свою подозрительность и в объяснение этого рассказывает, что он - один из членов Zinnia Guild. Пока он размяк, расспросите его хорошенько обо всем этом и поинтересуйтесь, чем вы еще можете быть ему полезны. Rafforty попросит вас подождать немного - ему надо дочитать письмо.

4. Еще раз говорите с Rafforty. Он попросит вас отнести письмо для Misa, где излагаются новые сведения, недавно полученные им. Сделайте это.

5. Поговорив с Misa, вы узнаете, что многих членов Zinnia Guild, занимавшихся поиском в лабиринте, королева Freya превратила в ледяные скульптуры. Misa попросит вас отыскать эти скульптуры и посмотреть, не осталось ли чего полезного после глубокого отморожения поисковой партии.

6. Вернитесь в Ice Merchant Cabin, выйдите через NE, идите по левой стене, но НЕ СВОРАЧИВАЙТЕ в пролом в ледяном барьере. Дойдите до моста, возле которого стоит Freya's Steward, если есть желание - поговорите с ним, выскажете всё, что о нем думаете и получите на это шаблонный ответ про "не в одиночку вам туда соваться" и "осмотрительность является лучшей составляющей доблести", разворачивайтесь к мосту (и стюарду) спиной и опять же идите по левой стене, тщательно огибая все углы.

Не так далеко, на некотором возвышении от покинутого нами стюарда, в карту воткнута булавка и стоят 4 ледяных статуи. Осмотрите их все внимательно, там конечно немногое уцелело, будем надеяться, что это вам поможет... Что? Да, действительно, незадача. Ваши поиски заинтересовали королеву Фрейю. Ну что же, придется нам пожить с этим некоторое время. А сейчас - на поиски Kierre, на местоположение которого указывает найденная вами информация.

7. Идите от Ice Merchant Cabin на NW, по левой стене до моста, перейдите мост, за мостом сверните налево и немного пройдите вперед. Переплывите реку обратно на сторону Frozen Labyrinth в месте, где берег со стороны FL превращается в небольшую бухточку с пологим входом в воду. Идите дальше на юг по берегу до места, куда на карте воткнута булавка.

Однако, вы опоздали. Вместо Kierre вас встречает его печальная статуя из холодного льда. Правда, в руке она сжимает какой-то клочек... выглядит как письмо, но на языке, которого вы не знаете. Отнесите этот клочек бумаги Rafforty - может, он сможет его прочесть?

8. Вероятно, сможет... если вы не будете стоять у него над душой в прощессе дешифровки и зайдете попозже.

9. Снова поговорите с Rafforty. Согласно полученным из шифровки указаниям, ему нужны Tablet Fragments для получения информации. Передайте найденный на скульптурах фрагмент Rafforty и получите награду - 60,040 Адена. Так же он вам скажет, что вы теперь можете попасть к Ice Queen, но только раздобыв 10 Silver Hemocytes.

Эти итемы достаются из квеста "An Ice Merchant's Dream", который можно взять у него же.
Shaigy вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 18:34. Часовой пояс GMT +3.

Вверх