Не отображается название квеста в чате.

kabanpwnz

Заблокирован
Заблокирован
Победитель в номинации 2019
Сообщения
258
Розыгрыши
0
Репутация
338
Реакции
39
Баллы
0
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Собственно вопрос в названии темы, как исправить данную проблему? Поменял уже три клиента.
 

Вложения

  • 1.webp
    1.webp
    88 КБ · Просмотры: 282
поработаю оракулом - речь идет 100% о квесте 146 - The Zero Hour
у него в клиенте, в NpcString неправильные ид с названиями и посему в сервере формирование названий квестов по ид из нпсстринг спотыкается - ссылаясь на несуществующие строки в NpcString и клиент показывает пустую строку для этого квеста.

решение простое - воткнуть в getDescr класса Quest костыль именно для этого квеста, или же мыслить более широко и добавить возможность задавать произвольное смещение id в NpcString для конкретного квеста.

конкретно для 146 квеста
в самом квесте:
Код:
    // У этого квеста некорректное id в NpcString клиента, из-за чего при обычном формировании нужных id
    // его название не отображается и необходимо выставлять нужное начальное id из NpcString вручную
    @Override
    public int getNameNpcString()
    {
        return 64000;
    }
в Quest:
Код:
    public int getNameNpcString()
    {
        return 0;
    }

    public String getDescr(Player player, boolean isStartNpc)
    {
        if (!isVisible(player))
            return null;

        int state = getDescrState(player, isStartNpc);
        String font = FONT_QUEST_AVAILABLE; // state 1, 2

        switch (state)
        {
            case 3:
                QuestState qs = player.getQuests().getState(_id);

                if (qs != null && !qs.isNowAvailableByTime())
                    font = FONT_QUEST_NOT_AVAILABLE_BY_TIME;
                else
                    font = FONT_QUEST_DONE;
                break;

            case 4:
                font = FONT_QUEST_NOT_AVAILABLE;
                break;
        }

        int fStringId = getId();

        // XXX: не у всех квестов есть строка для state = 4, так что берем в этом случае строку для state = 1 - они вроде для всех квестов одинаковы
        if (state == 4)
            state = 1;

        int npcString = getNameNpcString();

        if (npcString == 0)
        {
            if (fStringId >= 10000)
                fStringId -= 5000;

            fStringId = fStringId * 100 + state;
        }
        else
            fStringId = npcString + state;

        return font.concat(HtmlUtils.htmlNpcString(fStringId)).concat("</font>");
    }
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
img

В NpcString-*.dat нужно прописать 3 стадии квеста. ID указывать по принципу ID01, ID02, ID03. Если ID квеста больше, чем 10000, то от ID необходимо отнять 5000. Для примера, ID кастомного квеста 10601. Значит в NpcString-*.dat прописываем:
Код:
560101    a,CustomQuestName\0
560102    a,CustomQuestName (In Progress)\0
560103    a,CustomQuestName (Done)\0
 
Ну я выше все это и написал, просто более развернуто.
и клиент моддить стоит в последнуюю очередь, если уж вобще никак не сделать на стороне серва.
 
  • Мне нравится
Реакции: kick

    kabanpwnz

    Баллов: 12
    За ответ
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Ну я выше все это и написал, просто более развернуто.
и клиент моддить стоит в последнуюю очередь, если уж вобще никак не сделать на стороне серва.
Спасибо помогло.:Run:
 
Назад
Сверху Снизу