Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Серверная часть (https://forum.zone-game.info/forumdisplay.php?f=148)
-   -   AE 276 (https://forum.zone-game.info/showthread.php?t=11531)

jagr 11.12.2010 04:39

AE 276
 
Кто-нибудь решил проблему вылета клиента при попытке положить итем
на приват склад и с чатом легиона? Если да, то подскажите как или хотя бы
- в какую сторону копать. Со складом понятно, что что-то с защитой, но что и как, и почему вылетает без единой записи и ошибки. С чатом легиона
вообще никакой мысли:ah:

ALeKsIuS 11.12.2010 10:28

Re: AE 276
 
jagr Я так полагаю это та ревизия где они уже перешли на 2.1, так что можете себя не обнадеживать. Там не хватает опкода.

jagr 11.12.2010 12:05

Re: AE 276
 
Т.е хочешь сказать, что эти баги не исправить?

ALeKsIuS 11.12.2010 12:55

Re: AE 276
 
Берешь в руки снифер и идешь на офф сервер ловить пакеты)

jagr 11.12.2010 13:38

Re: AE 276
 
Форум теряет в своей популярности именно вот из-за таких комментариев.
Ну нечего сказать - так не говори.
А патч с новыми опкодами я нашёл в темке у разрабов
http://www.aion-engine.com/t1016/
Читайте, может кому пригодится. Тему можно закрыть.

nic 14.12.2010 10:57

Re: AE 276
 
jagr напиши инструкцию как этот опкод патчит в сервак.

landser 14.12.2010 11:57

Re: AE 276
 
Как вы думаете когда откроется новая команда ?)))
P.S. До чего смайлик ржачный))) :negodue::negodue::negodue:

jagr 14.12.2010 13:46

Re: AE 276
 
Цитата:

Сообщение от nic (Сообщение 100448)
jagr напиши инструкцию как этот опкод патчит в сервак.


Там же готовый патч на скачивание есть.

Den2007 14.12.2010 13:49

Re: AE 276
 
подскажите а кто то решил вопрос с вылетом стигмы с 1 слота после релога.спасибо

xobotyi 14.12.2010 14:14

Re: AE 276
 
Цитата:

Сообщение от jagr (Сообщение 100070)
Форум теряет в своей популярности именно вот из-за таких комментариев.
Ну нечего сказать - так не говори.
А патч с новыми опкодами я нашёл в темке у разрабов
http://www.aion-engine.com/t1016/
Читайте, может кому пригодится. Тему можно закрыть.

он теряет не из-за комментариев, а из-за того что нету опенсорсной команды а следовательно и единых решений...

TieLay 15.12.2010 09:30

Re: AE 276
 
xobotyi, а чем вас Aion Core не угодили?
Судя по их заявлениям в 110 ревизии, наработки AL они уже переварили и сделали частью своего кода...
Кстати и не стоит их за это винить, хоть кто-то делает для всех...

Mozilla 08.01.2011 04:18

Re: AE 276
 
Есть еще проблема с пространственными вратами в гробнице чинаки (Интрига в сердце древа). Портал не работает. Правка файла _2022CrushingtheConspiracy.java не помогает. Если у кого-то есть решение выложите, пожалуйста.

flashman 08.01.2011 19:18

Re: AE 276
 
Действительно косяк с квестом, но накосячили именно в скрипте квеста, косяки были связанны с тем что скрипт обращался к нпс которые небыли заспавнены, а портал в гобнице был типа декорации.
Вот поправил скрипт, теперь портал в гобнице работает, после его использования вы попадёте в другую локацию, где сразу перед порталом должен стоять шаман-оборотень, необходимо поговорить с ним, после чего вам скажут убить нпс, который будет дальше по дорожке, далее завершаем квес прыгая в портал за мобом которого надо убить, далее завершаем квест:
скрипт квеста:
Свернуть ↑Развернуть ↓

Да и сама локация 320030000 (Bregirun) немного захламлена этими обелисками.

Mozilla 09.01.2011 02:49

Re: AE 276
 
flashman, попробовал с твоим скриптом, результат остался тот же, т. е. врата не открываются. Aion Core чтобы исправить квест вносили изменения не в один файл. Aion Java вообще его удалили.

flashman 09.01.2011 15:26

Re: AE 276
 
Интересно, я использую туже 276 реву и с правленым скриптом всё работает.
В таком случае нужно проверить все ли нпс доступны, а именно:
для начала проверь в спавн листе альтгарда 220030000_Altgard.xml , есть ли там такое:
Код:

        <!-- Abyss Gate Altgard To Bregirun -->
        <spawn map="220030000" npcid="700143" pool="1" interval="295">
                <object x="2452.0867" y="2547.304" z="317.40292" h="28"/>
        </spawn>

Если есть, то пройти можно именно через этот объект, после того как ты получишь квест от Суэрона, если использовать приведёный мной скрипт.

Посмотрел скрипт коров, там почти тоже самое что и у ae, но как бы то нибыло, как в моём варианте скрипта так и у коров, пройти необходимо через портал имеющий id=700143 . Так что всё заключается в том , есть ли такой объект в положенном месте или нет.

Добавлено через 56 минут
Подогнал скрипт коров под AE (поскольку он у них реализован лучше, есть кат-сцена :) ), правил только их скрипт, другие файлы не трогал. Итог работает ;) .
Добавил комменты в начале скрипта где идёт перепись участвующих в квесте нпс. Там указаны их id и кто что делает, если всё равно не работает , то проверяйте спавн этих нпс в соответствующих спавн листах.
Переделанный скрипт AionCore квеста 2022:
Свернуть ↑Развернуть ↓

TieLay 09.01.2011 21:18

Re: AE 276
 
flashman, может сделаешь патчик?

flashman 09.01.2011 22:45

Re: AE 276
 
Если есть какой-то специальный для этого метод создания патчей, то скажите просто как это сделать :) , если же всё по старинке "найти файлы , заменить файлы", то завтра выложу.

TieLay 10.01.2011 03:08

Re: AE 276
 
flashman, если используешь черепашку(Tortoise SVN), то .diff-файл делается там в пару кликов...

Mozilla 10.01.2011 13:19

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 базы что приводит к невозможности активации обелиска. При ручной правке базы дальше квест выполняется без осложнений.

flashman 10.01.2011 15:00

Re: AE 276
 
Сделал по старинке , небольшая инструкция внутри. С патчем в черепашке мутить не стал, там слишком много уже изменений внёс, долго редарктировать...
Ссылка на архив
Mozilla, править portal_templates.xml незачем, поскольку в скрипте квеста используется TeleportService , сам квест занимается телепортацией персонажа, для того чтобы скрипт мог тпешить надо чтобы объект на который он ссылается ,имел тип USEITEM (правится в npc_template.xml), а также обязательно все объекты которые участвуют в квесте должны быть объявлены в переменных скрипта квеста.

Mozilla 10.01.2011 23:53

Re: AE 276
 
Порталы правил потому что точки входа и выхода были перепутаны координатами у 700143 и 700551. Перемещение происходило, но на несколько метров (за портал) в одной и той же локации. Пока не исправил не заработало.
flashman, заменил файлы на твои, все работает, спасибо)


Текущее время: 04:24. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot