• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Форум » Корзина форума » Корзина » Помогите исправить скрипт (а то крашит что-то)
Помогите исправить скрипт
Anbush
Скаут
В общем , написал кастом патч. И у меня в OnGossipSelect к каждому экшену прикреплены void-ы. Войды эти все одинаковые , цифры только разные. В общем из-за них , при выборе в госсип меню крашится сервер. Какая-то ошибка видимо в нем, вот вам один из войдов: void , прошу найти ошибку в нем, что же в нем вызывает краш сервера? P.S. Компилил в дебаге , в отладке ничего хорошего не нашел.
Сообщение # 1 отредактировано Anbush - Вторник, 02.04.2013, 19:19
Прадмур
~
Предоставляешь полный код, вместе с запросами на создание таблиц используемых в скрипте, и тогда отдебажим, проверим.
Сообщение # 2 написано 02.04.2013 в 20:15
Vicher
Admin
Ну, что могу сказать. Код ужасен.
Краш, видимо, из за того, что используется не инициализированная переменная. Переменные инициализируются только если в базе данных есть данные. Если данных нет - переменные содержат мусор. В этом случае поведение программы не определено.
Вторая возможная причина краша: если игрок с нужным 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();
Сообщение # 3 отредактировано Vicher - Вторник, 02.04.2013, 20:19
vitalya07
Скаут
Vicher, по поводу последнего, это я исправил уже , номера фиелдов. Таблица у меня есть , там все нормально там хранятся гуиды игроков и т.п. и все таки не пойму , из-за чего краш
Сообщение # 4 написано 02.04.2013 в 20:29
Vicher
Admin
Я ведь написал возможные причины краша. Проверяй и исправляй.
Сообщение # 5 написано 02.04.2013 в 20:32
vitalya07
Скаут
Цитата (Прадмур)
Предоставляешь полный код, вместе с запросами на создание таблиц используемых в скрипте, и тогда отдебажим, проверим.

я не могу так сразу на паблик весь код выложить , разве что в лс

Добавлено (02.04.2013, 20:37)
---------------------------------------------

Цитата (Vicher)
Проверяй и исправляй.

я знаю , что так можо, но я пробовал , а иначе бы не создавал данную тему
Сообщение # 6 написано 02.04.2013 в 20:37
Прадмур
~
Цитата (vitalya07)
я не могу так сразу на паблик весь код выложить , разве что в лс

Обращение по таким вопросам в лс - платное.

Бесплатный вариант - выложить код тут, и тогда в gdb посмотрю почему падает.
С условием, что код компилируется на последней ревизии оф ветки тринити и предоставлены все данные для его запуска, включая sql запросы на новые таблицы и дополнительные данные (мобы, параметры и т.п).

Иначе можешь сделать это сам )
Сообщение # 7 отредактировано Прадмур - Вторник, 02.04.2013, 21:02
vitalya07
Скаут
Прадмур, благодарю за отзыв, в модификации денег не нуждаюсь))).
тема ап
Сообщение # 8 написано 02.04.2013 в 21:14
Vicher
Admin
http://paste2.org/9NVOf45a

П.С. использование %u для uint64 в некоторых случаях преобразуется в хрень.
Сообщение # 9 отредактировано Vicher - Вторник, 02.04.2013, 21:15
vitalya07
Скаут
Vicher, благодарю , щас попробуемс)

Добавлено (02.04.2013, 22:04)
---------------------------------------------

Цитата (vitalya07)
П.С. использование %u для uint64 в некоторых случаях преобразуется в хрень.

а почему бы не использовать uint32 в таком случае , для гуида должно хватить вроде , или я ошибаюсь?

Добавлено (02.04.2013, 22:09)
---------------------------------------------
И зачем было кстати вместо if везде использовать else if , ведь результат будет тем же) Я вот понимаю , если бы в концу простой else использовался, то да , надо else if , но в этом случае зачем?)

Сообщение # 10 написано 02.04.2013 в 22:09
Vicher
Admin
Цитата (vitalya07)
а почему бы не использовать uint32 в таком случае , для гуида должно хватить вроде

Ну, зависит от того, насколько активно создаются новые персонажи.

Лучше использовать GuidLow в данном случае.
Сообщение # 11 написано 02.04.2013 в 22:17
vitalya07
Скаут
Хех , так вот в чем причина краша была, оказывается если игрок в оффлайне, то ему не дается голда и не пишет ареаТриггерМессэйдж))) Я сам уж проверку на онлайн сделаю) А если уж игрок в оффлайне, то можно спокойной использовать запрос в characters на модификацию голды)))) Проблема решена! Спасибо! спасибо что засунул в патче i
Код
f(!player1 || !player2)

  {

   ChatHandler(player->GetSession()).PSendSysMessage("Player not found.");

   return;

  }
Сообщение # 12 написано 02.04.2013 в 22:19
Dimitro
Praise the sun!
Данная тема была перемещена из раздела [TrinityCore] Help.
Причина перемещения: Ответы даны.

Переместил: Dimitro.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 13 отредактировано Dimitro - Пятница, 12.04.2013, 02:28
Форум » Корзина форума » Корзина » Помогите исправить скрипт (а то крашит что-то)
  • Страница 1 из 1
  • 1
Поиск: