|
Архив - только для чтения |
Модератор форума: andycrowz |
Форум » Корзина форума » Корзина » Помогите исправить скрипт (а то крашит что-то) |
Помогите исправить скрипт |
В общем , написал кастом патч. И у меня в OnGossipSelect к каждому экшену прикреплены void-ы. Войды эти все одинаковые , цифры только разные. В общем из-за них , при выборе в госсип меню крашится сервер. Какая-то ошибка видимо в нем, вот вам один из войдов: void , прошу найти ошибку в нем, что же в нем вызывает краш сервера? P.S. Компилил в дебаге , в отладке ничего хорошего не нашел.
|
Ну, что могу сказать. Код ужасен.
Краш, видимо, из за того, что используется не инициализированная переменная. Переменные инициализируются только если в базе данных есть данные. Если данных нет - переменные содержат мусор. В этом случае поведение программы не определено. Вторая возможная причина краша: если игрок с нужным GUID не найден - то функция все равно вызывается. Соответственно, будет краш. По коду: Нафига 10005000 раз вызывать GetPlayer()? Можно сделать указатель и вызвать эту функцию два раза(по одному разу для guid1 и guid2). Нафига запрашивать те данные(из бд), которые уже известны? Цитата result3 = CharacterDatabase.PQuery("SELECT `game`, `guid1`, `guid2`, `knb1`, `knb2`, `cost1` FROM `player_knb` WHERE game = 1"); У тебя в переменные вносится только первый СТОЛБЕЦ. Т.е. все переменные будут содержать одни и те же данные. Цитата game = fields[0].GetUInt32(); guid1 = fields[0].GetUInt32(); guid2 = fields[0].GetUInt32(); knb1 = fields[0].GetUInt32(); knb2 = fields[0].GetUInt32(); cost1 = fields[0].GetUInt32(); |
Цитата (Прадмур) Предоставляешь полный код, вместе с запросами на создание таблиц используемых в скрипте, и тогда отдебажим, проверим. я не могу так сразу на паблик весь код выложить , разве что в лс Добавлено (02.04.2013, 20:37) Цитата (Vicher) Проверяй и исправляй. я знаю , что так можо, но я пробовал , а иначе бы не создавал данную тему
Сообщение # 6 написано 02.04.2013 в 20:37
|
Цитата (vitalya07) я не могу так сразу на паблик весь код выложить , разве что в лс Обращение по таким вопросам в лс - платное. Бесплатный вариант - выложить код тут, и тогда в gdb посмотрю почему падает. С условием, что код компилируется на последней ревизии оф ветки тринити и предоставлены все данные для его запуска, включая sql запросы на новые таблицы и дополнительные данные (мобы, параметры и т.п). Иначе можешь сделать это сам ) |
http://paste2.org/9NVOf45a
П.С. использование %u для uint64 в некоторых случаях преобразуется в хрень. |
Vicher, благодарю , щас попробуемс)
Добавлено (02.04.2013, 22:04) Цитата (vitalya07) П.С. использование %u для uint64 в некоторых случаях преобразуется в хрень. а почему бы не использовать uint32 в таком случае , для гуида должно хватить вроде , или я ошибаюсь? Добавлено (02.04.2013, 22:09)
Сообщение # 10 написано 02.04.2013 в 22:09
|
Хех , так вот в чем причина краша была, оказывается если игрок в оффлайне, то ему не дается голда и не пишет ареаТриггерМессэйдж))) Я сам уж проверку на онлайн сделаю) А если уж игрок в оффлайне, то можно спокойной использовать запрос в characters на модификацию голды)))) Проблема решена! Спасибо! спасибо что засунул в патче i
Код f(!player1 || !player2) { ChatHandler(player->GetSession()).PSendSysMessage("Player not found."); return; }
Сообщение # 12 написано 02.04.2013 в 22:19
|
Данная тема была перемещена из раздела [TrinityCore] Help.
Причина перемещения: Ответы даны. Переместил: Dimitro.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку. |
| |||
| |||