Показать сообщение отдельно
Старый 21.05.2010, 00:40   #1
Hantet
Ученый
 
Аватар для Hantet
 
Регистрация: 07.03.2010
Адрес: Санкт-Петербург
Сообщений: 163
Сказал(а) спасибо: 124
Поблагодарили 111 раз(а) в 52 сообщениях
Hantet Скоро придёт к известностиHantet Скоро придёт к известности
Отправить сообщение для Hantet с помощью ICQ
Сообщение [9950][Crash] Turned Objects



Сегодня ненароком уронил свой сервер, пользуясь командой .gobject turn #guid.
Функция отработала (объект пропал и появился в нужном месте), но после чего всё зависло. По идее, в чат должно было написать что-то вроде "Game Object #id turned", однако вместо этого сервер упал.

Благо, на машине (вместе с MaNGOS) у меня стоит MSVC++.
Вылетела ошибка и windows предложил мне отладку программы. В ходе расследования определил, что падение происходит из-за финального PSendSysMessage() (что и требовалось доказать). Далее отладчик сообщил мне первый аргумент этой функции (HEX: 0x00...114 = DEC: 276).

Решил проверить, что же у меня там в базе лежит. Полез в mangos_string, нашёл id 276. АГА, вот оно! Истинная структура: "Game Object |cffffffff|Hgameobject:%d|h[%s]|h|r (GUID: %u) turned". Из этого я понял, что в эту структуру подставляется 3 значения.

Полез в ядро (level2.cpp: bool ChatHandler::HandleGameObjectTurnCommand(const char* args)), и очумел.
Код:
PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, obj->GetGUIDLow(), obj->GetGOInfo()->name, obj->GetGUIDLow(), o);
В функцию передавалось не 3, а целых 4 параметра (не считая id mangos_string). Не долго думая, убрал с конца переменную ориентации (зачем ей там быть, это ведь только чат?). Собираю...

Собрал. Теперь команда работает без падения.
Баг? Кривизна моих рук/головы?

Фикс в аттаче (подогнан под 9948).

P.s. Странно только то, что эта ошибка замечена мною даже в ветке 0.12, а никто ничего не отпостил (хотя, может быть потому, что недо-админы не суются к нам, а чОткие пацаны просто не используют эту команду ).
Вложения
Тип файла: patch fix_gobject_turn.patch (518 байт, 18 просмотров)
__________________
Галя: Вот почему когда я пуск делаю и по ярлыку две то запускается, а если вот мне к примеру надо не из пуска её то ничего и в красном показывает, а надо ведь чтобы квадратик жёлтенький открывал и там 3 кнопки должно быть?
admin: О Боже!
admin: Кто-нибудь, пришлите ко мне уборщицу, пусть мой мозг со стен и потолка отмоет

Последний раз редактировалось Hantet; 21.05.2010 в 15:20.
Hantet вне форума  
2 пользователя(ей) сказали cпасибо:
Lightunit (21.05.2010), Vladimir (22.05.2010)