↑ ↓

Как решать ошибки "load fail" в квестах

Тема в разделе "Помощь", создана пользователем Lostlevi, 14 июл 2016.

  1. TopicStarter Overlay
    Offline

    Lostlevi

    3
    0
    1
    Кредиты:
    $185,00
    Репутация:
    0
    Дано:
    Cборка - AionGer rev.353
    Квест - 18737
    Клиент - 4.9 с торрентов

    Проблема в выдаче ошибки "Load fail!" при попытке взять квест.
    Не первый раз встречаю подобные ошибки, в скриптованых квестах решаются просто. Но как решать такую проблему в квесте типа "Сходить поболтать" ?
     
  2. Offline

    LuckySong Рядовой

    17
    0
    27
    Кредиты:
    $142,00
    Репутация:
    0
    смотри диалоги НПС и айди НПС .
     
  3. Offline

    LuckySong Рядовой

    17
    0
    27
    Кредиты:
    $142,00
    Репутация:
    0
    но там много недоделанного
     
  4. Offline

    LuckySong Рядовой

    17
    0
    27
    Кредиты:
    $142,00
    Репутация:
    0
    особенно миссии бездны
     
  5. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    есть определенная структура HTML кусков в "QUEST_Qxxxxxx.html", где xxxxxx - номер квеста.
    Например первый html должен иметь
    Код:
    <HtmlPage name="select1">
    (id 1011) - эту страницу AION и не находит и выдает ошибку, т.к. в QUEST_Q18737.html первая страница
    имеет
    Код:
    <HtmlPage name="select_none" accept="true">
    (id 4762)

    Я поборолся с этим написав java файл
    ... \AL-Game\data\scripts\system\handlers\quest\raksang_ruins\_18737RumoursAboutTheBeritraArmy.java
    Код:
    /**
    * This file is part of Aion-Lightning <aion-lightning.org>.
    *
    *  Aion-Lightning is free software: you can redistribute it and/or modify
    *  it under the terms of the GNU General Public License as published by
    *  the Free Software Foundation, either version 3 of the License, or
    *  (at your option) any later version.
    *
    *  Aion-Lightning is distributed in the hope that it will be useful,
    *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    *  GNU General Public License for more details. *
    *  You should have received a copy of the GNU General Public License
    *  along with Aion-Lightning.
    *  If not, see <http://www.gnu.org/licenses/>.
    */
    package quest.raksang_ruins;
    
    import com.aionemu.gameserver.model.gameobjects.player.Player;
    import com.aionemu.gameserver.questEngine.handlers.QuestHandler;
    import com.aionemu.gameserver.model.DialogAction;
    import com.aionemu.gameserver.questEngine.model.QuestEnv;
    import com.aionemu.gameserver.questEngine.model.QuestState;
    import com.aionemu.gameserver.questEngine.model.QuestStatus;
    import com.aionemu.gameserver.utils.PacketSendUtility;
    
    /**
    * @author pandim
    */
    public class _18737RumoursAboutTheBeritraArmy extends QuestHandler {
    
    	public static final int questId = 18737;
    
    	public _18737RumoursAboutTheBeritraArmy() {
    		super(questId);
    	}
    
    	@Override
    	public void register() {
    		qe.registerQuestNpc(804707).addOnQuestStart(questId);
    		qe.registerQuestNpc(804707).addOnTalkEvent(questId);
    		qe.registerQuestNpc(206378).addOnTalkEvent(questId);
    		qe.registerQuestNpc(206379).addOnTalkEvent(questId);
    		qe.registerQuestNpc(206380).addOnTalkEvent(questId);
    	}
    
       
    	@Override
    	public boolean onDialogEvent(QuestEnv env) {
    		Player player = env.getPlayer();
    		QuestState qs = player.getQuestStateList().getQuestState(questId);
    		DialogAction dialog = env.getDialog();
    		int targetId = env.getTargetId();
    
    		if (qs == null || qs.getStatus() == QuestStatus.NONE) {
    			if (targetId == 804707) {
    				if (dialog == DialogAction.QUEST_SELECT) {
    					return sendQuestDialog(env, 4762);
    				} else {
    					return sendQuestStartDialog(env);
    				}
    			}
    		} else if (qs.getStatus() == QuestStatus.START) {
    			if (targetId == 206378 || targetId == 206379 || targetId == 206380) {
    				if (dialog == DialogAction.QUEST_SELECT) {
    					return sendQuestDialog(env, 10002);
    				} else if (dialog == DialogAction.SELECT_QUEST_REWARD) {
    					qs.setStatus(QuestStatus.REWARD);
    					return sendQuestDialog(env, 5);
    					}
    				return false;
    			}
    		} else if (qs.getStatus() == QuestStatus.REWARD) {
    			if (targetId == 206378 || targetId == 206379 || targetId == 206380) {
    				return sendQuestEndDialog(env);
    			}
    		}
    		return false;
    
    
    	}
    }
    
    и закомментировал в ... \AL-Game\data\static_data\quest_script_data\raksang_ruins.xml
    Код:
    	<!-- REPORTING QUESTS -->
    	<!--<report_to id="18737" start_npc_ids="804707" end_npc_ids="804716"/>-->
    
    Всё работает - принимаю критику! ;)
     
    klubheads нравится это.
  6. Offline

    klubheads Сержант Команда форума Модератор

    2.011
    356
    189
    Кредиты:
    $2.140,45
    Репутация:
    54
    Дмитрий , а что критиковать ?) .

    Единственное , java скрипт квеста это конечно хорошо и почти всегда это правильный подход , но иногда достаточно просто поправить в quest_script_data и quest_data .

     
  7. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    вот я и жду, чтоб кто-нибудь ткнул носом, сам не смог

    хоть и написал и работает, но есть ощущение, что коряво написал (особенно с sendQuestEndDialog())! ;)
    Первый мой написанный квест для AION!
     
  8. Offline

    romanz Ефрейтор Модератор

    743
    165
    76
    Кредиты:
    $26.070,43
    Репутация:
    23
    вариант попроще ))
     
  9. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    Подкорректированный вариант:
    Код:
    	<report_to_many id="18737" start_npc_ids="804707" start_dialog_id="4762"  end_npc_ids="206378 206379 206380" end_dialog_id="5">
    		<npc_infos npc_id="206378" var="0" quest_dialog="10002" close_dialog="1009"/>
    		<npc_infos npc_id="206379" var="0" quest_dialog="10002" close_dialog="1009"/>
    		<npc_infos npc_id="206380" var="0" quest_dialog="10002" close_dialog="1009"/>
    	</report_to_many>
    
    Вставил "end_dialog_id" и трёх NPC, завершающих квест.
    (Там 3 ветки прохождения инста, выбираемых случайно и в каждой версии свой NPC-телепорт со своим id.)
     
  10. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    И для тёмных:
    Код:
    	<report_to_many id="28737" start_npc_ids="804732" start_dialog_id="4762"  end_npc_ids="206395 206396 206397" end_dialog_id="5">
    		<npc_infos npc_id="206395" var="0" quest_dialog="10002" close_dialog="1009"/>
    		<npc_infos npc_id="206396" var="0" quest_dialog="10002" close_dialog="1009"/>
    		<npc_infos npc_id="206397" var="0" quest_dialog="10002" close_dialog="1009"/>
    	</report_to_many>
    
     
  11. Offline

    romanz Ефрейтор Модератор

    743
    165
    76
    Кредиты:
    $26.070,43
    Репутация:
    23
    Дим а зачем ты добавляешь 3 нпс , если в данже только 1 стоит) , вроде ))
     
  12. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    При генерации квеста есть случайно выбираемые три фазы:
    Код:
    	@Override
    	public void onInstanceCreate(WorldMapInstance instance) {
    		doors = instance.getDoors();
    		stageNum = Rnd.get(1, 3);
    		super.onInstanceCreate(instance);
    		spawnRings();
    	}
    
    а потом ставится ОДИН ИЗ ТРЁХ NPC
    Код:
    	@Override
    
    	public void onEnterInstance(Player player) {
    		// Elyos Npc's
    		// 206378 lvl1
    		// 206379 lvl2
    		// 206380 lvl3
    		// Asmo Npc's
    		// 206395 lvl1
    		// 206396 lvl2
    		// 206397 lvl3
    		switch (player.getRace()){
    			case ASMODIANS:
    				switch (stageNum){
    					case 1:
    						spawn(206395, 818.103f, 931.0215f, 1207.4312f, (byte) 13);
    						break;
    					case 2:
    						spawn(206396, 818.103f, 931.0215f, 1207.4312f, (byte) 13);
    						break;
    					case 3:
    						spawn(206397, 818.103f, 931.0215f, 1207.4312f, (byte) 13);
    						break;
    				}
    				break;
    			case ELYOS:
    				switch (stageNum){
    					case 1:
    						spawn(206378, 818.103f, 931.0215f, 1207.4312f, (byte) 13);
    						break;
    					case 2:
    						spawn(206379, 818.103f, 931.0215f, 1207.4312f, (byte) 13);
    						break;
    					case 3:
    						spawn(206380, 818.103f, 931.0215f, 1207.4312f, (byte) 13);
    						break;
    				}
    				break;
    		default:
    			break;
    		}
    	}
    
    Которые портируют в 3 разных части инста! :)

    А теперь, вопрос! Кто копался: инст для одного перса, похоже, создаётся при первом входе, а вот когда он удаляется? При выходе или по времени?
     
  13. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    Не квеста, а инста - пардон;)
     
  14. Offline

    klubheads Сержант Команда форума Модератор

    2.011
    356
    189
    Кредиты:
    $2.140,45
    Репутация:
    54
    Что там в ai этого инста ?
     
  15. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    Please login or register to view links
    я фрагменты из него, отвечающие за спавн NPC, выше давал.
     
  16. Offline

    romanz Ефрейтор Модератор

    743
    165
    76
    Кредиты:
    $26.070,43
    Репутация:
    23
    плюшник какой то делал инстант ) у меня 1 стоит и рандомно портует в 3 разных места)
     
  17. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    Ну вот смотришь разные сборки и хренеешь: вроде база одна, а потом каждый по своему, а потом своровали и опять каждый по своему, своровали и опять каждый о своем! И в каждой сборке куча мелких ошибок (или фич? ) и попробуй разобраться.
    Я вот не понимаю: геры и коры делают одно и то-же на одной базе и стремятся к идеалу (OFF) и подворовывают друг у друга(хотя-бы идеи). Ну вот объединились-бы и работа пошла в двое быстрее!
    Но нет!
    Кстати, ни те, ни другие не пользуются в 4.9 обфускатором! И за это спасибо!

    А конкретно по этому подземелью: если судить по базам данных, то так и задумывалось:
    три пути - три нпс, плюс есть ещё один с такимже именем и местоположением и вот он зачем
    вообще неясно!
     
  18. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    А как сделано? Вроде телепорт делается на конкретное место?
    Как я понимаю, два варианта: или делать AI этого НПС или заплатку на телепорты для данного НПС.
    Romanz: подскажешь?
     
  19. Offline

    romanz Ефрейтор Модератор

    743
    165
    76
    Кредиты:
    $26.070,43
    Репутация:
    23
    аи делаешь для непися , с рандомными точками телепорта
     
  20. Offline

    Дмитрий Ефрейтор

    337
    48
    61
    Кредиты:
    $15.270,06
    Репутация:
    5
    Ну показал бы чтоль! Провел мастер-класс! ;)