|
Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
22.12.2011, 22:04 | #1 |
Администратор
|
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, прописанного в шаблоне. 1. Правильно ли я понимаю реализацию работы го тип 6, прописанных в шаблонах других го? 2. Какие есть более простые варианты? |
23.12.2011, 00:38 | #2 |
Администратор
|
В режиме теста:
1. Сделал загрузку го типа 6 в точку основного го с теми же параметрами (координаты, фаза, маска и т.д.) по всем шаблонам го, гуид брал по счетчику = максимальный неиспользуемый гуид + порядковый номер в цикле загрузки го. 2. Удалил из базы все го тип 6, которые встречаются в заселении, загрузил сервер и проверил на примере http://ru.wowhead.com/object=195344 - го тип 6, указанный в шаблоне данного го, заспавнен. Далее надо заставить оба го отрабатывать вместе. Возможно, в структуру основного го надо добавить гуид заспавненного го тип 6, чтобы не выполнять поиск второго при использовании первого. Есть ли вообще смысл в такой реализации? |
23.12.2011, 14:41 | #3 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
можно попробовать сделать для объектов нечто вроде недавно заимлеменченной фичи creature_linking_template. будет куда логичнее, да и пригодится не только здесь.
|
23.12.2011, 19:13 | #4 |
Администратор
|
Тогда в таблицу придется заносить записи, которые уже хранятся в шаблоне объекта, а это, на мой взгляд, нелогично.
|
23.12.2011, 20:12 | #5 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
GO type 6 вроде еще и независимо могут быть на карте - ловят касты и т.д.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
23.12.2011, 20:39 | #6 |
Администратор
|
Так я же написал, что подобный прием надо применять к го тип 6, указанных в шаблонах других го в качестве визуального оформления, т.е. это просто антураж.
Если го идет отдельно, то точки спавна прописываются в базе, а для указанного мной случая "заселение" и обработку надо производить параллельно с основным го. Если в объекте основного го хранить гуид привязанного к нему го, то можно без проблем обрабатывать последний в зависимости от действий с первым. При таком раскладе го тип 6 должен правильно обрабатываться при взаимодействии с основным го, в эвентах и пуллах. Это избавит от лишних данных в таблице `gameobject` для антуража, которые дублируют данные основного го, за исключением двух полей. Кроме того, не будет косяков, когда основной го антураж и антураж оказались в разных точках, имеют разные параметры видимости или чего-то просто нет в мире. |
23.12.2011, 21:23 | #7 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Давайте я вам открою страшную тайну:
https://github.com/mangos/mangos/blo...bject.cpp#L819 Не знаю что там в YTDB но в UDB уже давно не должно быть слинкованных GO type 6.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
23.12.2011, 21:57 | #8 |
Администратор
|
Страшная тайна - это хорошо, только не пашет.
1. По коду SummonLinkedTrapIfAny() вызывается только в эффектах спеллов, которых при добавлении го в мир нет. 2. Скомпилил чистое ядро без сд2, удалил из базы все го тип 6, прописанные в шаблонах других го, вошел в игру - пустота, нет го тип 6, как и раньше. В моем варианте на той же базе го-антураж были в точках основных го. Возможно, вызов SummonLinkedTrapIfAny() должен быть при добавлении основного го. Проверял на го 195344, у которого антураж 195346. Что я сделал не так, что у меня "рабочий код" чистого ядра не сработал? |
24.12.2011, 00:56 | #9 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Теперь понял проблему, возможно вы правы. Я явно подзабыл детали. Там единствеено могут быть проблемы с тем что основной ГО не полностью добавлен в мир.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
24.12.2011, 19:20 | #10 |
Администратор
|
В момент заполнения mGameObjectDataMap в методе ObjectMgr::LoadGameObjects() добавляем в mGameObjectDataMap го тип 6, если он указан в шаблоне основного го.
Спавн го-антуража идет после основного го с учетом эвентов и пуллов. В чем именно может быть проблема, в каких случаях основной го может быть неполностью добавлен в мир? |
24.12.2011, 22:23 | #11 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Я имел ввиду если делать в ::Create
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
24.12.2011, 22:59 | #12 |
Администратор
|
В чем минусы того, что предложил я?
|
26.12.2011, 00:16 | #13 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Я просто пояснил для какого места (_если_ его использовать) была бы возможно проблема. Я не предлагаю использовать там и т.д.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
04.01.2012, 10:46 | #14 |
Администратор
|
Для добавления го-антуража в mGameObjectDataMap пришлось создать функцию
Код:
uint32 ObjectMgr::LoadGameObject(Field *fields, std::map<uint32,uint32> spawnMasks, uint32 guid, uint32 entry, uint32 count) Код:
void ObjectMgr::LoadGameObjects() Каким образом лучше сделать заполнение mGameObjectDataMap? |
14.01.2012, 13:31 | #15 |
Администратор
|
Во вложении тестовый патч на суммон го-антуража для основных го.
Получилось как-то громоздко и сомнительно, должно быть более простое и правильное решение. Нужны советы по данному вопросу. |
31.05.2014, 19:46 | #16 |
Администратор
|
Возвращаемся к старой теме.
В ObjectMgr.cpp есть метод void ObjectMgr::AddGameobjectToGrid(uint32 guid, GameObjectData const* data), который вызывается при загрузке го из таблицы `gameobject`, при старте эвента и в пулл-системе, но туда надо передавать реальный гуид объекта. Если происходит каст спелла с суммоном го, то там вызывается свой метод добавления ловушки: void GameObject::SummonLinkedTrapIfAny(). При спавне, использовании и деспавне оба го (основной и ловушка) должны отрабатывать вместе. 1. Надо ли сразу загружать го-ловушки или добавлять при появлении основного го в мире (эвент, пулл, каст и т.д.)? 2. Может, в структуре основного го должен храниться гуид ловушки и наоборот, чтобы можно было правильно определить связь между ними? 3. Где лучше всего разместить обработчик хотя бы для спавна, чтобы учесть все случаи появления го в мире? |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[10860] Handle GAMEOBJECT_TYPE_TRAP in Use, as done for other GO types. | newsbot | CMaNGOS Commits | 0 | 11.12.2010 22:40 |