• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
Проблема с трансмогрификатором
leriks123
Скаут
Здравствуйте, пользователи этого форума. Вообщем проблема такая, накатил патч на трансмогрификатора, вроде всё нормально подогнал под свою реву, но в игре у нпс не отображается госсип меню, просто пустой нпс. Поможет кто? И отвечу сразу в script_loader добавил, скрипт нейм мобу присвоил, и флаг госсипа мобу поставил. Вот сам скрипт на трансмогрификатора
Сообщение # 1 написано 29.03.2018 в 18:22
Ranege
Чемпион
Допустим, флаг госсипа ты поставил, скрипт присвоил(еще бы раз проверил имя скрипта). Также, допустим, ты в скрипт лоудере чёто-то там добавил, что стоило бы указать, что именно ты там сделал, т.к от этого всё зависит.

А именно, указал ли ты прототип(предполагаю что это и сделал).
Вызвал ли данную функцию(которую должен в скрипте иметь).
Выделил ли память под новый объект(самого трансера), в самой этой функции, чей прототип указал и должен вызвать в скрипт лоудере.

От этого и зависит решение твоей проблемы, в остальном вроде всё верно. То что ты указал в скрипт нейме скрипт, он просто не находит в ядре, потому что, предполагаю, ты не всё сделал, что я написал выше.
Сообщение # 2 отредактировано Ranege - Пятница, 30.03.2018, 01:11
leriks123
Скаут
Ranege, в скрипт лоудере я указал содержимое в конце скрипта, к тому же в патче было тоже самое, то что я добавил. void AddSC_Transmogrification() и 
AddSC_Transmogrification(), вот что я указал, к тому же не 1ый раз ставлю скрипты.

Добавлено (31.03.2018, 10:36)
---------------------------------------------
Ну, ребят. Выручайте.

Сообщение # 3 отредактировано leriks123 - Пятница, 30.03.2018, 10:13
Ranege
Чемпион
Все вроде как верно. В cmake добавлен же файлик скрипта?(иначе оно бы и не работало в принципе и не знаю как на новой версии)

Мобу указал CS_Transmogrification такой скрипт нейм?

У тебя просто все правильно по идее, предлагаю допустим этому мобу указать другой скрипт, заработает ли. Потом попробовать перетащить скрипт в другой файлик, поменять содержимое, посовмещать, сделать по аналогии с другими скрипами и даже в другом месте, чтоб заработало, а потом уже начинать искать проблему. Методом различных тестов можно самому добиться результата. Ведь не с 0 пишешь, уже много готового есть, так подставь, перестрой, перемести и ищи проблему. Потому что, например, я больше ничего подсказать не могу(а вникать более детальней, это уже сам)
Сообщение # 4 отредактировано Ranege - Суббота, 31.03.2018, 16:24
p620
Маршал
Ну добавьте стучалку какую-нибудь в 'OnGossipHello', например, чтобы проверить, подцепили ли вы вообще сценарий корректно. Если стучалка отработает - сообщите, посмотрю код.
Сообщение # 5 написано 31.03.2018 в 16:30
leriks123
Скаут
Цитата p620 ()
Ну добавьте стучалку какую-нибудь в 'OnGossipHello', например, чтобы проверить, подцепили ли вы вообще сценарий корректно. Если стучалка отработает - сообщите, посмотрю код.
А вы не могли бы пояснить, что значит стучалка?
Сообщение # 6 написано 31.03.2018 в 16:56
p620
Маршал
Цитата leriks123 ()
А вы не могли бы пояснить, что значит стучалка?

Программный код, вызывающий некое легко отслеживаемое событие, по времени или факту возникновения которого можно произвести примитивную отладку контекста, в который таковой код встраивается.
Самый простой вариант - написать что-нибудь в консоль (в многопоточном приложении, правда, это несколько неточный вариант, но в данном случае сойдет, поскольку нас интересует не время, а факт).
Т.е. в данном случае требуется добавить безусловный вывод какой-нибудь строки в консоль из 'OnGossipHello', что позволит нам узнать, производился ли вызов этого метода, что, в свою очередь, покажет, корректно ли был подключен сценарий, частью которого данный метод является.
Сообщение # 7 написано 31.03.2018 в 17:22
Ranege
Чемпион
Если в релизе собираешь, то сделай assert(false) там и если сервер упал, значит код отработал, это если не понял как лог сделать. На старых версиях это было sLog->outError("message");
Сообщение # 8 написано 31.03.2018 в 20:42
p620
Маршал
Цитата Ranege ()
Если в релизе собираешь, то сделай assert(false) там и если сервер упал, значит код отработал, это если не понял как лог сделать. На старых версиях это было sLog->outError("message");

В релизе этот макрос ни во что существенное разворачиваться не должен. Уронить сервер он не сможет в любом случае, это делается другим способом.
Сообщение # 9 написано 31.03.2018 в 21:07
Ranege
Чемпион
Сглупил, перепутал с дебагом, также можно в relwithdebinfo данное зюзать, но думаю речь про релиз идет, тогда да, логи.
Сообщение # 10 написано 31.03.2018 в 21:44
leriks123
Скаут
p620,  Я добавил мобу сообщение вы в бою, т.е. если ты в бою, то при открытии нпс будет писать сообщение "Вы в бою", но к сожелению ничего не пишет. Похоже и в правду скрипт криво поставил. Но проверил несколько раз скрипт нейм у нпс, всё верно. Так же проверил script_loader, там тоже всё верно. Создал даже 2 нпс с разными скрипт неймами и всё бестолку.
Сообщение # 11 написано 01.04.2018 в 19:38
p620
Маршал
Покажите правку, которую Вы внесли в ядро для проверки, а также дамп записи существа из `world.creature_template`.
Сообщение # 12 написано 01.04.2018 в 21:20
leriks123
Скаут
p620, ну на сообщение о бое вот это:

На нпс у меня 2 варианта, но с разными скрипт неймами


А так же script_loader
Сообщение # 13 отредактировано leriks123 - Воскресенье, 01.04.2018, 21:30
p620
Маршал
Покажите, куда Вы вставили "отладочный" код.
По поводу записи в БД - во втором варианте Вы совершенно некорректный `script_name` используете. Попробуете в первый добавить какое-нибудь реальное диалоговое окно с любым текстом (позаимствуйте у существующего НИПа, например) и отпишитесь о результатах.
В загрузчике все в порядке, там ошибиться негде, в принципе.
Сообщение # 14 отредактировано p620 - Воскресенье, 01.04.2018, 23:05
leriks123
Скаут
Сообщение о бое я добавил вот сюда 

Диалог я создал путём нового госсип меню и просвоил это госсип меню нпс, диалог успешно отобразился в нпс. Но насколько я знаю не должен был же, если бы мобу был присвоен скрипт. И кстати диалог мне нужно было в скрипте прописать или как я сделал в через новое госсип меню?
Сообщение # 15 написано 01.04.2018 в 23:36
p620
Маршал
Перво-наперво надлежит окончательно разобраться с корректностью подключения сценария. В определение 'CS_Transmogrification::TransmogAI' добавьте:

Код
void JustDied(Unit* killer) override
{
    if(Player* const player = killer->ToPlayer())
        player->GetSession()->SendNotification("_");
}

Убедитесь, что проверяете корректного НИПа. Убейте его и сообщите, было ли получено оповещение.
Сообщение # 16 написано 02.04.2018 в 01:17
leriks123
Скаут
p620, скрипт к нпс корректно привязан, оповещение выдало.
Сообщение # 17 написано 02.04.2018 в 01:58
p620
Маршал
Пришлось залезть в репозиторий, чтобы убедиться, что Ваш трансмогрификатор нерабочий. Зато он превосходно иллюстрирует причину, по которой в языке появилось ключевое слово 'override'.
Подсказка: Если добавить это слово к определениям (переопределениям, предположительно) 'OnGossipHello' и 'OnGossipSelect', возникнет ошибка компиляции.
Сообщение # 18 написано 02.04.2018 в 04:29
leriks123
Скаут
p620, Спасибо, понял.
Сообщение # 19 написано 02.04.2018 в 14:44
p620
Маршал
Очень хорошо, однако.
Сообщение # 20 написано 02.04.2018 в 15:52
  • Страница 1 из 1
  • 1
Поиск: