Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.12.2011, 22:04   #1
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию GAMEOBJECT_TYPE_TRAP = 6 (заселение)

Если верить вики, то го тип 6 встречается у го:
GAMEOBJECT_TYPE_BUTTON = 1: data3: linkedTrap
GAMEOBJECT_TYPE_CHEST = 3: data7: linkedTrapId
GAMEOBJECT_TYPE_SPELLFOCUS = 8: data2: linkedTrapId
GAMEOBJECT_TYPE_GOOBER = 10: data12: linkedTrapId

При этом го тип 6 должен находиться в точке основного го и обрабатываться вместе с ним.
Сейчас его тупо прописывают в базе в точках спавна основных го, при деспавне которых остается го тип 6.

В теории можно не хранить в базе "заселение" таких го, а загружать их в мир сразу с основным го в те же координаты, с теми же фазами и масками, но:
Код:
GameObjectData& data = mGameObjectDataMap[guid];
Как я понимаю, данные о го в мире получаются по гуиду, значит, надо как-то загрузить го тип 6 для основного го с каким-то гуидом, чтобы не было повторений.
Также обработка основного го (смена видимости, фаз, масок и т.д.) должна вызывать обработку го тип 6, прописанного в шаблоне.

1. Правильно ли я понимаю реализацию работы го тип 6, прописанных в шаблонах других го?
2. Какие есть более простые варианты?
virusav вне форума   Ответить с цитированием
Старый 23.12.2011, 00:38   #2
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

В режиме теста:
1. Сделал загрузку го типа 6 в точку основного го с теми же параметрами (координаты, фаза, маска и т.д.) по всем шаблонам го, гуид брал по счетчику = максимальный неиспользуемый гуид + порядковый номер в цикле загрузки го.
2. Удалил из базы все го тип 6, которые встречаются в заселении, загрузил сервер и проверил на примере http://ru.wowhead.com/object=195344 - го тип 6, указанный в шаблоне данного го, заспавнен.

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

Есть ли вообще смысл в такой реализации?
virusav вне форума   Ответить с цитированием
Старый 23.12.2011, 14:41   #3
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

можно попробовать сделать для объектов нечто вроде недавно заимлеменченной фичи creature_linking_template. будет куда логичнее, да и пригодится не только здесь.
rsa вне форума   Ответить с цитированием
Старый 23.12.2011, 19:13   #4
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Тогда в таблицу придется заносить записи, которые уже хранятся в шаблоне объекта, а это, на мой взгляд, нелогично.
virusav вне форума   Ответить с цитированием
Старый 23.12.2011, 20:12   #5
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

GO type 6 вроде еще и независимо могут быть на карте - ловят касты и т.д.
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 23.12.2011, 20:39   #6
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Так я же написал, что подобный прием надо применять к го тип 6, указанных в шаблонах других го в качестве визуального оформления, т.е. это просто антураж.

Если го идет отдельно, то точки спавна прописываются в базе, а для указанного мной случая "заселение" и обработку надо производить параллельно с основным го.

Если в объекте основного го хранить гуид привязанного к нему го, то можно без проблем обрабатывать последний в зависимости от действий с первым.
При таком раскладе го тип 6 должен правильно обрабатываться при взаимодействии с основным го, в эвентах и пуллах.

Это избавит от лишних данных в таблице `gameobject` для антуража, которые дублируют данные основного го, за исключением двух полей.
Кроме того, не будет косяков, когда основной го антураж и антураж оказались в разных точках, имеют разные параметры видимости или чего-то просто нет в мире.
virusav вне форума   Ответить с цитированием
Старый 23.12.2011, 21:23   #7
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Давайте я вам открою страшную тайну:
https://github.com/mangos/mangos/blo...bject.cpp#L819

Не знаю что там в YTDB но в UDB уже давно не должно быть слинкованных GO type 6.
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 23.12.2011, 21:57   #8
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Страшная тайна - это хорошо, только не пашет.

1. По коду SummonLinkedTrapIfAny() вызывается только в эффектах спеллов, которых при добавлении го в мир нет.
2. Скомпилил чистое ядро без сд2, удалил из базы все го тип 6, прописанные в шаблонах других го, вошел в игру - пустота, нет го тип 6, как и раньше.
В моем варианте на той же базе го-антураж были в точках основных го.

Возможно, вызов SummonLinkedTrapIfAny() должен быть при добавлении основного го.

Проверял на го 195344, у которого антураж 195346.

Что я сделал не так, что у меня "рабочий код" чистого ядра не сработал?
virusav вне форума   Ответить с цитированием
Старый 24.12.2011, 00:56   #9
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Теперь понял проблему, возможно вы правы. Я явно подзабыл детали. Там единствеено могут быть проблемы с тем что основной ГО не полностью добавлен в мир.
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 24.12.2011, 19:20   #10
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

В момент заполнения mGameObjectDataMap в методе ObjectMgr::LoadGameObjects() добавляем в mGameObjectDataMap го тип 6, если он указан в шаблоне основного го.
Спавн го-антуража идет после основного го с учетом эвентов и пуллов.

В чем именно может быть проблема, в каких случаях основной го может быть неполностью добавлен в мир?
virusav вне форума   Ответить с цитированием
Старый 24.12.2011, 22:23   #11
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Я имел ввиду если делать в ::Create
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 24.12.2011, 22:59   #12
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

В чем минусы того, что предложил я?
virusav вне форума   Ответить с цитированием
Старый 26.12.2011, 00:16   #13
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Я просто пояснил для какого места (_если_ его использовать) была бы возможно проблема. Я не предлагаю использовать там и т.д.
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 04.01.2012, 10:46   #14
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Для добавления го-антуража в mGameObjectDataMap пришлось создать функцию
Код:
uint32 ObjectMgr::LoadGameObject(Field *fields, std::map<uint32,uint32> spawnMasks, uint32 guid, uint32 entry, uint32 count)
Функцию писал для теста спавна го, но мне не нравится, что приходится тягать параметры из
Код:
void ObjectMgr::LoadGameObjects()
, да и возможен более правильный вариант.

Каким образом лучше сделать заполнение mGameObjectDataMap?
virusav вне форума   Ответить с цитированием
Старый 14.01.2012, 13:31   #15
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Во вложении тестовый патч на суммон го-антуража для основных го.
Получилось как-то громоздко и сомнительно, должно быть более простое и правильное решение.

Нужны советы по данному вопросу.
Вложения
Тип файла: diff GAMEOBJECT_TYPE_TRAP.diff (12.6 Кб, 516 просмотров)
virusav вне форума   Ответить с цитированием
Старый 31.05.2014, 19:46   #16
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Возвращаемся к старой теме.

В ObjectMgr.cpp есть метод void ObjectMgr::AddGameobjectToGrid(uint32 guid, GameObjectData const* data), который вызывается при загрузке го из таблицы `gameobject`, при старте эвента и в пулл-системе, но туда надо передавать реальный гуид объекта.
Если происходит каст спелла с суммоном го, то там вызывается свой метод добавления ловушки: void GameObject::SummonLinkedTrapIfAny().

При спавне, использовании и деспавне оба го (основной и ловушка) должны отрабатывать вместе.

1. Надо ли сразу загружать го-ловушки или добавлять при появлении основного го в мире (эвент, пулл, каст и т.д.)?
2. Может, в структуре основного го должен храниться гуид ловушки и наоборот, чтобы можно было правильно определить связь между ними?
3. Где лучше всего разместить обработчик хотя бы для спавна, чтобы учесть все случаи появления го в мире?
virusav вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[10860] Handle GAMEOBJECT_TYPE_TRAP in Use, as done for other GO types. newsbot CMaNGOS Commits 0 11.12.2010 22:40


Текущее время: 04:36. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot