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

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

Ответ
Опции темы
Непрочитано 08.07.2011, 03:04   #1
Аватар для Mifesto
Пользователь

Автор темы (Топик Стартер) Квест: "Секретное задание"

Я в Яве новичок, решил сделать квест "Секретное задание", вот код
Код:
package quests._10288_SecretMission;

import l2open.extensions.scripts.ScriptFile;
import l2open.gameserver.model.instances.L2NpcInstance;
import l2open.gameserver.model.quest.Quest;
import l2open.gameserver.model.quest.QuestState;

public class _10288_SecretMission extends Quest implements ScriptFile
{
	// NPC's
	private static final int _dominic  = 31350;
	private static final int _aquilani = 32780;
	private static final int _greymore = 32757;
	// Item's
	private static final int _letter = 15529;

	public _10288_SecretMission()
	{
		super(false);
		
		addStartNpc(_dominic,_aquilani);
		addTalkId(_dominic,_greymore,_aquilani);
		addFirstTalkId(_aquilani);
	}

	public String onEvent(String event, QuestState st, L2NpcInstance npc)
	{
		String htmltext = event;
		
		int npcId = npc.getNpcId();
		int id = st.getState();
		int cond = st.getInt("cond");
		
		if (npcId == _dominic)
		{
			if (event.equalsIgnoreCase("31350-05.htm"))
			{
				st.setState(STARTED);
				st.set("cond", "1");
				st.giveItems(_letter, 1);
				st.playSound(SOUND_ACCEPT);
			}
		}
		else if ((npcId == _greymore) && (event.equalsIgnoreCase("32757-03.htm")))
		{
			st.unset("cond");
			st.setState(COMPLETED);
			st.takeItems(_letter, -1);
			st.giveItems(57, 106583);
			st.addExpAndSp(417788, 46320);
			st.playSound(SOUND_FINISH);
			st.exitCurrentQuest(false);
		}
		else if (npcId == _aquilani)
		{
			if (id == STARTED)
			{
				if (event.equalsIgnoreCase("32780-05.htm"))
				{
					st.set("cond", "2");
					st.playSound("ItemSound.quest_middle");
				}
			}
			else if ((id == COMPLETED) && (event.equalsIgnoreCase("teleport")))
			{
				st.getPlayer().teleToLocation(118833, -80589, -2688);
				return null;
			}
		}
		return htmltext;
	}

	public String onTalk(L2NpcInstance npc, QuestState st)
	{
		String htmltext = "noquest";
		
		int npcId = npc.getNpcId();
		int cond = st.getInt("cond");
		int id = st.getState();
		
		if (npcId == _dominic)
			switch (id)
			{
				case 1:
					if (st.getPlayer().getLevel() >= 82)
						htmltext = "31350-01.htm";
					else
						htmltext = "31350-00.htm";
				case 2:
					if (cond == 1)
						htmltext = "31350-06.htm";
					else
					{
						if (cond != 2)
							break;
						htmltext = "31350-07.htm";
					}
				case 3:
						htmltext = "31350-08.htm";
			}
		else if (npcId == _aquilani)
			switch(cond)
			{
				case 1:
					htmltext = "32780-03.htm";
				case 2:
					htmltext = "32780-06.htm";
			}
		else if ((npcId == _greymore) && (cond == 2))
			return "32757-01.htm";
			
		return htmltext;
	}

	public String onFirstTalk(L2NpcInstance npc, QuestState st)
	{
		QuestState qs = st.getPlayer().getQuestState("_10288_SecretMission");
		if (npc.getNpcId() == _aquilani)
		{
			if (qs.getState() == COMPLETED)
				return "32780-01.htm";
			return "32780-00.htm";
		}
		return null;
	}

	public void onLoad() { }
	public void onReload() { }
	public void onShutdown() { }
}
Квест берется у Доминика а когда подхожу к Аквилани и гoворю с ним то не выводится окно диалога,если ставлю через админку себе cond = 2 то квест спокойно здается Гремори, подскажите пожалуйст почему не выводится диалог с Аквилани. В ГСе ошибок нет. Заранее спасибо

Последний раз редактировалось Mifesto; 08.07.2011 в 21:48.
Mifesto вне форума Отправить сообщение для Mifesto с помощью ICQ Ответить с цитированием
Непрочитано 09.07.2011, 15:09   #2
Аватар для Mifesto
Пользователь

Автор темы (Топик Стартер) Re: Квест: "Секретное задание"

UP................
Mifesto вне форума Отправить сообщение для Mifesto с помощью ICQ Ответить с цитированием
Непрочитано 09.07.2011, 23:33   #3
Аватар для Archiel
Пользователь

По умолчанию Re: Квест: "Секретное задание"

Постараюсь помочь, сам хочу в квестах разобраться. Ну как бы понятно, что если без установки cond через админку диалог не выводится, то где-то накосячил в месте установки этого параметра.

Код:
		else if (npcId == _aquilani)
		{
			if (id == STARTED)
			{
				if (event.equalsIgnoreCase("32780-05.htm"))
				{
					st.set("cond", "2");
					st.playSound("ItemSound.quest_middle");
				}
			}
			else if ((id == COMPLETED) && (event.equalsIgnoreCase("teleport")))
			{
				st.getPlayer().teleToLocation(118833, -80589, -2688);
				return null;
			}
		}
Что вот это значит?
Код:
event.equalsIgnoreCase("32780-05.htm")
Может стоит написать вот так:
Код:
		else if (npcId == _aquilani)
		{
			if (id == STARTED) && (cond == 1) //после разговора с Домиником у нас же именно такие параметры, правильно? Логично, что они такими и останутся при правильном порядке прохождения квеста.
			{
				htmltext = "32780-05.htm";
				st.set("cond", "2"); //ну и соответственно тут установили cond == 2
				st.playSound("ItemSound.quest_middle");
			}
			else if ((id == COMPLETED) && (event.equalsIgnoreCase("teleport")))
			{
наверное тут тоже надо добавить какой-то html, а то получается, что при диалоге игрока тупо без объяснения причин тпшит куда-то?
				st.getPlayer().teleToLocation(118833, -80589, -2688);
				return null;
			}
Вот как-то так.
Archiel вне форума Отправить сообщение для Archiel с помощью ICQ Ответить с цитированием
Непрочитано 09.07.2011, 23:53   #4
Аватар для Mifesto
Пользователь

Автор темы (Топик Стартер) Re: Квест: "Секретное задание"

Цитата:
Что вот это значит?
Код:
event.equalsIgnoreCase("32780-05.htm")
я смотрел на квесты которые уже находятся в сборка как я понял это "Если выбран диалог 32780-05.htm" то выполнять действие.

Цитата:
Код:
else if ((id == COMPLETED) && (event.equalsIgnoreCase("teleport")))
			{
наверное тут тоже надо добавить какой-то html, а то получается, что при диалоге игрока тупо без объяснения причин тпшит куда-то?
				st.getPlayer().teleToLocation(118833, -80589, -2688);
				return null;
			}
это я сматрел в l2jserver и понимаю как "если квест закончен и выбрана команда (teleport) то выполнять телепортирование"

А диалог не выводится даже если квест не взят у Доминика, но у доминика квест берется и если ставить конд 2 то он сдается гремори а у аквилани не 1н диалог не открывается.
Mifesto вне форума Отправить сообщение для Mifesto с помощью ICQ Ответить с цитированием
Непрочитано 10.07.2011, 00:03   #5
Аватар для Archiel
Пользователь

По умолчанию Re: Квест: "Секретное задание"

Мне кажется ты слишком много копируешь и слишком мало анализируешь. Я, конечно, могу ошибаться с вероятностью 50%, ибо сам квесты ни разу не писал, но вот что я думаю:
Всё равно что там и где выводилось или выводится, у нас стоит задача:
1) Поговорить с Домиником и взять квест.
2) Подойти к Аквелани и продолжить квест.
3) Подойти к Гремори и закончить квест.

if (answer == yes)
{
Код:
		else if (npcId == _aquilani)
		{
			if (id == STARTED) && (cond == 1)
			{
				htmltext = "текст по квесту.htm";
				st.set("cond", "2");
				st.playSound("ItemSound.quest_middle");
			}
			else if ((id == COMPLETED)
                                          {
				htmltext = "иди нахер, ты выполнил этот квест.htm";
                                          }
		}
Вроде всё логично.
Archiel вне форума Отправить сообщение для Archiel с помощью ICQ Ответить с цитированием
Непрочитано 10.07.2011, 02:26   #6
Аватар для Mifesto
Пользователь

Автор темы (Топик Стартер) Re: Квест: "Секретное задание"

Цитата:
Сообщение от Archiel Посмотреть сообщение
Мне кажется ты слишком много копируешь и слишком мало анализируешь. Я, конечно, могу ошибаться с вероятностью 50%, ибо сам квесты ни разу не писал, но вот что я думаю:
Всё равно что там и где выводилось или выводится, у нас стоит задача:
1) Поговорить с Домиником и взять квест.
2) Подойти к Аквелани и продолжить квест.
3) Подойти к Гремори и закончить квест.

if (answer == yes)
{
Код:

else if (npcId == _aquilani)
{
if (id == STARTED) && (cond == 1)
{
htmltext = "текст по квесту.htm";
st.set("cond", "2");
st.playSound("ItemSound.quest_middle");
}
else if ((id == COMPLETED)
{
htmltext = "иди нахер, ты выполнил этот квест.htm";
}
}

Вроде всё логично.
а по мне вы сейчас разбираете часть где не происходит вывод диалогов а происходить только присвоение "cond", а вывод диалогов происходит в функции
Код:
public String onTalk(L2NpcInstance npc, QuestState st)
Mifesto вне форума Отправить сообщение для Mifesto с помощью ICQ Ответить с цитированием
Непрочитано 10.07.2011, 03:06   #7
Пользователь

По умолчанию Re: Квест: "Секретное задание"

квест бред
__________________
PaInKiLlEr вне форума Отправить сообщение для PaInKiLlEr с помощью ICQ Ответить с цитированием
Непрочитано 10.07.2011, 10:04   #8
Аватар для Azagthtot
Эксперт

По умолчанию Re: Квест: "Секретное задание"

Цитата:
Сообщение от kasik Посмотреть сообщение
я смотрел на квесты которые уже находятся в сборка как я понял это "Если выбран диалог 32780-05.htm" то выполнять действие.
Вот в том-то и причина "нерабочести" что вы не правильно поняли.
И так, методы onEvent/onAdvEvent вызываются в следующих случаях:
- у игрока есть QuestState для этого квеста (был вызван диалог onTalk/onFirstTalk)
- игрок жамкнул на ссылку вида bypass Quest имя_квеста имя_события
Т.е. в вашем случае, что бы отработала ветка
if (event.equalsIgnoreCase("31350-05.htm"))
у npc Dominic должен быть диалог, в котором прописано
bypass -h Quest _10288_SecretMission 31350-05.htm
и игрок должен в нее тыкнуться
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Непрочитано 10.07.2011, 20:40   #9
Аватар для Mifesto
Пользователь

Автор темы (Топик Стартер) Re: Квест: "Секретное задание"

вот как раз этот диалог и работает, а у аквилани не 1н из
Код:
else if (npcId == _aquilani)
			switch(cond)
			{
				case 1:
					htmltext = "32780-03.htm";
				case 2:
					htmltext = "32780-06.htm";
			}
не открываеться хоть и cond стоит 1

Добавлено через 13 часов 11 минут
мб есть у кого данный скрипт и будет добр.... выложит его на общее обозрения=) я посмотрю на свои ошибки=) желательно к l2open

Последний раз редактировалось Mifesto; 11.07.2011 в 09:52. Причина: Добавлено сообщение
Mifesto вне форума Отправить сообщение для Mifesto с помощью ICQ Ответить с цитированием
Непрочитано 11.07.2011, 09:55   #10
Аватар для ANZO
Разработчик BDO Emu

По умолчанию Re: Квест: "Секретное задание"

Ололо, где ваши break; ?
Код:
switch(cond)
			{
				case 1:
					htmltext = "32780-03.htm";
					break;
				case 2:
					htmltext = "32780-06.htm";
					break;
			}

Последний раз редактировалось ANZO; 11.07.2011 в 15:00.
ANZO вне форума Отправить сообщение для ANZO с помощью ICQ Отправить сообщение для ANZO с помощью Skype™ Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Error "time synchronization poorness caused to block connection" Aleser Сервер 15 17.12.2010 17:23
Запуск сервера. Ошибка "failed to create empty document" Dmivlagus Rising Force Online 0 23.02.2010 19:22
"Одноразовые персы" или "Дисконнект с сервера" =( eXeSS Сервер 1 01.08.2009 16:09
НПС дающий "Саб" и "Нубла" AID Работа со скриптами 3 24.12.2008 20:06


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

Вверх