• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

JTS 2018 2018-05-26

Нет прав для скачивания
Возможно кто сталкивался с ошибкой?
Код:
2019-11-19 08:01:20,997 Shutdown ERROR Ignoring log event after Log4j has been shut down.
2019-11-19 08:01:21,009 Shutdown ERROR Ignoring log event after Log4j has been shut down.
2019-11-19 08:01:21,017 Shutdown ERROR Ignoring log event after Log4j has been shut down.
 

Возможно кто сталкивался с ошибкой?
Код:
2019-11-19 08:01:20,997 Shutdown ERROR Ignoring log event after Log4j has been shut down.
2019-11-19 08:01:21,009 Shutdown ERROR Ignoring log event after Log4j has been shut down.
2019-11-19 08:01:21,017 Shutdown ERROR Ignoring log event after Log4j has been shut down.
Баг логгера. Во время рестарта / выключения Shutdown hook закрывает логгер, но евенты для логгирования с разных потоков ещё продолжают поступать. Считай это уведомлением или обнови логгер с зависимостями
 
Вопрос по синхронизации...
Код:
            if (activeChar.isFlying() || activeChar.isInWater())
                activeChar.teleToLocation(_lastServerPosition);
            else
                activeChar.validateLocation(1);
Интересует вопрос, что делает activeChar.teleToLocation(_lastServerPosition);
Т.к с этим участком персонажа то и дело, что бесконечно кидает вверх и вниз (когда спрыгиваешь с виверны с высоты). Каковы будут последствия, если удалить данную строку?
Кстати на Brawery такая же ситуация - сегодня тестил на тест сервере.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Вопрос по синхронизации...
Код:
            if (activeChar.isFlying() || activeChar.isInWater())
                activeChar.teleToLocation(_lastServerPosition);
            else
                activeChar.validateLocation(1);
Интересует вопрос, что делает activeChar.teleToLocation(_lastServerPosition);
Т.к с этим участком персонажа то и дело, что бесконечно кидает вверх и вниз (когда спрыгиваешь с виверны с высоты). Каковы будут последствия, если удалить данную строку?
Кстати на Brawery такая же ситуация - сегодня тестил на тест сервере.
в гео нужно внести фикс, так как движок не полностью обрабатывает некоторые ситуации, также в каты прыжок выносит персонажа на верх и он в тектурах.
 
Я конечно все понимаю, пущай это будет оффтопом, но даже меня (слабо шарящего человека в java) знатно подпалило начало этого треда.
 
несколько фиксов

fix for DarkCloudMansion
добавить в файл спавн недостающих мобов
Код:
        <!--First room-->
        <spawn group="first_room_group" count="1" respawn="0" respawn_random="0" period_of_day="none">
                <point x="147842" y="179837" z="-6117" h="0"/>
                <npc id="22264"/>
                <!--Black Stone Monolith-->
        </spawn>
        <!--First room-->
        <spawn group="first_room_group" count="1" respawn="0" respawn_random="0" period_of_day="none">
                <point x="147711" y="179708" z="-6117" h="0"/>
                <npc id="22264"/>
                <!--Black Stone Monolith-->
        </spawn>
        <!--First room-->
        <spawn group="first_room_group" count="1" respawn="0" respawn_random="0" period_of_day="none">
                <point x="147842" y="179552" z="-6117" h="0"/>
                <npc id="22264"/>
                <!--Black Stone Monolith-->
        </spawn>
        <!--First room-->
        <spawn group="first_room_group" count="1" respawn="0" respawn_random="0" period_of_day="none">
                <point x="147964" y="179708" z="-6117" h="0"/>
                <npc id="22264"/>
                <!--Black Stone Monolith-->
        </spawn>

fix for Four Goblets
Код:
заменить правую часть, на ту как здесь.
    public static Map<Integer, NpcLocation> _shadowSpawns = new HashMap<Integer, NpcLocation>();
    public static Map<Integer, NpcLocation> _mysteriousBoxSpawns = new HashMap<Integer, NpcLocation>();
    public static Map<Integer, List<NpcLocation>> _dukeFinalMobs = new HashMap<Integer, List<NpcLocation>>();
    public static Map<Integer, List<NpcLocation>> _emperorsGraveNpcs = new HashMap<Integer, List<NpcLocation>>();
    public static Map<Integer, List<NpcLocation>> _magicalMonsters = new HashMap<Integer, List<NpcLocation>>();
    public static Map<Integer, List<NpcLocation>> _physicalMonsters = new HashMap<Integer, List<NpcLocation>>();
    public static Map<Integer, Location> _startHallSpawns = new HashMap<Integer, Location>();
    public static Map<Integer, Boolean> _hallInUse = new HashMap<Integer, Boolean>();
    public static List<GateKeeper> _GateKeepers = new ArrayList<GateKeeper>();
    public static Map<Integer, Integer> _keyBoxNpc = new HashMap<Integer, Integer>();
    public static Map<Integer, Integer> _victim = new HashMap<Integer, Integer>();
    public static Map<Integer, Boolean> _archonSpawned = new HashMap<Integer, Boolean>();


в этой функции переместить объявление переменной locations ниже без final

    private static int loadSpawn(Map<Integer, List<NpcLocation>> table, int type) {
        int count = 0;
        try {
/*            final List<NpcLocation> locations = new ArrayList<NpcLocation>();
*/
            final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setValidating(false);
            factory.setIgnoringComments(true);

            final File file = new File(ServerConfig.DATAPACK_ROOT, "data/xmlscript/static/four_sepulchers_spawnlist.xml");

            final Document document = factory.newDocumentBuilder().parse(file);
            for (Node firstNode = document.getFirstChild(); firstNode != null; firstNode = firstNode.getNextSibling()) {
                if ("list".equalsIgnoreCase(firstNode.getNodeName())) {
                    for (Node secondNode = firstNode.getFirstChild(); secondNode != null; secondNode = secondNode.getNextSibling()) {
                        if ("npc".equalsIgnoreCase(secondNode.getNodeName())) {
                            /*locations.clear();
*/
                            List<NpcLocation> locations = new ArrayList<NpcLocation>();
                            final NamedNodeMap attrs = secondNode.getAttributes();
                            final int npcKeyId = Integer.parseInt(attrs.getNamedItem("keyId").getNodeValue());
                            final int spawnType = Integer.parseInt(attrs.getNamedItem("spawnType").getNodeValue());
                            if (spawnType == type) {
                                for (Node thirdNode = secondNode.getFirstChild(); thirdNode != null; thirdNode = thirdNode.getNextSibling()) {
                                    if ("data".equalsIgnoreCase(thirdNode.getNodeName())) {
                                        final NamedNodeMap attrs1 = thirdNode.getAttributes();
                                        final int templateId = Integer.parseInt(attrs1.getNamedItem("templateId").getNodeValue());
                                        final String[] spawnLocationData = attrs1.getNamedItem("location").getNodeValue().split(",");
                                        final int heading = Integer.parseInt(attrs1.getNamedItem("heading").getNodeValue());
                                        final int x = Integer.parseInt(spawnLocationData[0]);
                                        final int y = Integer.parseInt(spawnLocationData[1]);
                                        final int z = Integer.parseInt(spawnLocationData[2]);
                                        locations.add(new NpcLocation(x, y, z, heading, templateId));
                                        count++;
                                    }
                                }
                                table.put(npcKeyId, locations);
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            _log.error("Error loading four_sepulchers_spawnlist.xml {}", e.getLocalizedMessage());
        }
        return count;
    }

поменять тип у итма <etcitem id="17265" name="Certificate of Dawn"> на name="type" value="OTHER"

опция конфига на количество дополнительных сабов не работает

в этом файле нужно в проверку добавить опцию из конфика
Код:
     public boolean addSubClass(final int classId, final boolean storeOld, final int certification) {
        if (classList.size() >= 4 + AllSettingsConfig.ALT_GAME_SUB_ADD) {
             return false;
         }

квест _288_HandleWithCare
в этом файле нужно добавить изменение состояния квеста в методе onEvtDead
Код:
    @Override
    protected void onEvtDead(Creature killer) {
        final NpcInstance actor = getActor();

        if (_task != null) {
            _task.cancel(false);
            _task = null;
        }

        NpcUtils.spawnSingle(Batracos, Location.findPointToStay(actor, 250, 300), actor.getReflection());
        actor.getReflection().startCollapseTimer(180000L);

        if (killer.isPlayable()) {
            final QuestState qs = killer.getPlayer().getQuestState(288);
            if (qs != null && qs.getCond() == 1) {
                if (abyss) {
                    qs.giveItems(15497, 1);
                    qs.setMemoState("take_care_please", String.valueOf(2), true);/* <------------*/
                    qs.setCond(3);
                } else {
                    qs.giveItems(15498, 1);
                    qs.setMemoState("take_care_please", String.valueOf(2), true);/* <------------*/
                    qs.setCond(2);
                }
            }
        }
        super.onEvtDead(killer);
    }

квест _215_TrialOfPilgrim
Код:
 в 76 строку добавить 
st.giveItems(voucher_of_trial, 1);


квест _254_LegendaryTales
Код:
привести метод onKill к такому виду

    @Override
    public String onKill(NpcInstance npc, QuestState st) {
        int GetMemoState = st.getInt("the_legendary_heroes");
        int GetMemoStateEx = st.getInt("the_legendary_heroes_ex");
        int npcId = npc.getNpcId();
                if(GetMemoState == 1)
                {
                        int mask = 1;
                        for (int i = 0; i < raids.length; i++)
                        {
                                if (raids[i] == npcId)
                                        break;
                                mask = mask << 1;
                        }

                        npcId = st.getInt("RaidsKilled");
                        if ((npcId & mask) == 0) // этого босса еще не убивали
                        {
                                npcId |= mask;
                                st.setMemoState("RaidsKilled", String.valueOf(npcId), true);
                                st.giveItems(great_dragon_bone, 1);
                        }
                }
                return null;
    }

квест _289_NoMoreSoupForYou
Код:
в методе onKill все st.takeItems заменить на st.giveItems
 
Давно уже не трогал эту сборку, но вот увидел сообщение и вспомнил один момент. Касательно некрополей. При периоде регистрации все норм, если по итогу ничья в некрополях пропадают мобы. Кто нибудь с этим разбирался?
 
Тут имеется еще такой момент, скил у дагеров - Escape Shackle / Разорвать Оковы , кастуется, но не снимает рут с персонажа(дагера который находится в состоянии рута), может я чего то не понимаю в хрониках хф, на ит снимает многновенно рут. Сравнивал с другими сборками статы примерно одинаковы, где то в сурсах проблема
 
Тут имеется еще такой момент, скил у дагеров - Escape Shackle / Разорвать Оковы , кастуется, но не снимает рут с персонажа(дагера который находится в состоянии рута), может я чего то не понимаю в хрониках хф, на ит снимает многновенно рут. Сравнивал с другими сборками статы примерно одинаковы, где то в сурсах проблема
Снимает только физический рут (арест) и вроде ловушку арбы
 
Квест 35+ Trial of the Scholar - не выдается Mirien’s 2nd Sigil id 2676 диетер не берет письмо.
Testimony of Life - много косяков было, точно не упомню.
Testimony of Summoner - таже беда.

Остальные правленые квесты не помню, по этим записи просто остались в таблице. Обычно в ватсап все кидали. Запхнул в архив исправленные.
 

Вложения

  • quest.zip
    13,5 КБ · Просмотры: 26
Всем привет!
На грации, после изучения трансформации и скила для сбора кристаллов,
при переходе в трансформацию скил сбора кристаллов не добавляется, он есть только без трансформации
пытался найти какой параметр отвечает за добавление скила, но так ничего не нашел
может кто нибудь подскажет где искать что копать)
работает, спасибо!
Короче все хрень, это можно использовать только как временное решение, пока ищешь нормальный фикс. Так как если выставить этот скил в скриптах, появляется вне зависимости от того, изучен он или нет у персонажа, так же уровень скилла будет зависеть от того, какой мы указали в скриптах.
Может Rozhek уже знает метод решения)
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Буду дома закину пофикшенные кв
 
Короче все хрень, это можно использовать только как временное решение, пока ищешь нормальный фикс. Так как если выставить этот скил в скриптах, появляется вне зависимости от того, изучен он или нет у персонажа, так же уровень скилла будет зависеть от того, какой мы указали в скриптах.
Может Rozhek уже знает метод решения)
Rozhek знает, он работает над сборкой и оперативно делает фиксы
 
Что то до меня как до жирафа. При обычных перемещениях все нормально. Проблемы при атаке мобов, когда используется followToCharacter. Если кидать по своим координатам монетку, то получается что атака происходит на нормально расстоянии от моба (по серверу), по клиенту атакуем воздух. Сам моб вроде как стоит где нужно, даже удивляется что кто то его атакует "клинком воздушной ярости". Я уже подзапутался в коде, но вроде расчет передвижений для обычного перемещения и фоллов одинаков, где же собака зарыта?
 
Многие хвалят овер геодвиг, в данной сборке он явно не доработан
 
Что то до меня как до жирафа. При обычных перемещениях все нормально. Проблемы при атаке мобов, когда используется followToCharacter. Если кидать по своим координатам монетку, то получается что атака происходит на нормально расстоянии от моба (по серверу), по клиенту атакуем воздух. Сам моб вроде как стоит где нужно, даже удивляется что кто то его атакует "клинком воздушной ярости". Я уже подзапутался в коде, но вроде расчет передвижений для обычного перемещения и фоллов одинаков, где же собака зарыта?
Основная разница в том что при атаке или каком то действии сервер шлет stopmove packet. Это принудительная остановка для клиента. При обычном передвижении не шлет и ты сам добегаешь до точки.
Ещё этот пакет обязательно слать если вместо MoveToLocation используем MoveToPawn(правильный пакет для фоллоу, с поворотом головы и привязкой к объекту). Но это уже оффтоп.
Так вот что при обычном перемещении, что при атаке координаты считаются неправильно и есть постоянный рассинхрон. В момент получения пакета StopMove на сервере ты уже находишься около цели, в клиенте ещё бежишь.
В ацисе, например, считается точно, но абсолютно неправильно - Там можно бежать внутри запрещённого геоблока и при попытке поменять направление в этот момент - застрять
 
Последнее редактирование:
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
1 строчка и фикс
 
Назад
Сверху Снизу