[mod] NPC on Transport
люди подскажите как прибить npc к обьекту, но при этом что бы обьект двигался !
|
Это что за бред вообще???
Опишите, что вы вообще хотите получить в результате. Объект двигаться не может. Или вы о НПС на транспорте??? |
меня интересует то что в ледяной короне дережабли летают без нпс !а нпс стоят в воздухе .
|
Прибить никак.
|
ну почему же никак. сесть на лавочку или стул мы же можем...
или вот например в катаклизме когда ты начинаешь играть воргеном, то ты начинаешь игру в фигурке воргена и в кандалах. кандалы - вообще говоря не ГО, а видимо м2. их там несколько стоит в стартовой воргенов, если обращали внимание. но ты стоишь в определенной позе и двигаться не можешь. к тебе подходят (подчеркиваю - подходят) всякие нпц и просят тебя ... (далее фантазия) что ты обязуешься там что нибудь... грубо говоря ты выполняешь квест (соглашаешься с уловиями освобождения) и тебя "отпускают", превратя в человека. http://www.youtube.com/watch?v=uV168oMfPgg так что стоит задуматься об этом. |
Цитата:
|
не причем. это лирическое отступление.
про ГО я вроде сказал, на лавку сесть можем, в лифте или метро проехаться тоже, на кораблях/дирижаблях тоже. и нцп это делают вроде тоже. по крайней мере в метро я с ними катался. только тут проблема: транспортный ГО ездит в клиенте, а не на сервере. поезд с нпц то уехал, только координаты этого нпц остались на месте. и как только пошевелить этим нпц, то он тут же телепортнется обратно... |
я так понял что нада писать скрипт на сд2?
|
Цитата:
|
RomanRom2
Я и говорю, пока вариант один: прибиваем ГО (неподвижное (для антуража), на стул-то мы сесть можем=)), на него прибиваем неписей. |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Самый прикол, что у близов транспорт - похоже это карта, но как то она хитро обрабатывается. И возможно все нпс и Го находятся как раз на этой карте и тоже как то хитро обрабатываются, но это предположение. Данные по ним в дбц в картах есть.
|
А тем временем... два месяца назад появился патч:
http://getmangos.com/community/showt...ight=transport Правильные мысли в этом направлении писал Neo2003 под постом #3. |
Цитата:
|
возможно у близзов любая карта - платформа, и любой объект имеет свойства платформы для перемещения в себе других объектов
(но конечно используется это только для transport и vehicle) Транспорт у нас - изначальный хак, не часть карты, сложно что-то менять не тронув его. Цитата:
[added] Где-то слышал что транспорт на самом деле между континентами не перемещается, просто на каждой карте есть его копия, коппи отличаются по гуидам. Если так, то нпс на транспорте тоже должны быть копиями |
Цитата:
|
Тут еще показателен транспорт, работающий по одной зоне - те же летающие корабли в Ледяной Короне. На нем тоже никто не задерживается, кроме PC - ни мобы, ни петы.
Лично мне вообще непонятна сама эта идея "карта в карте", как сейчас работает транспорт. Заходя на транспорт жму gps - карта не меняется, однако я уже оказался на новой карте (движущемся транспорте) - как это? Насколько я помню, под каждый корабль ставится свой GO с определенными entry и guid и в определенной точке. Если он там не стоит - никакого транспорта не появляется. Если стоит в другой точке - сбиваются периоды. (кстати, периоды под транспорт на Нордскол до сих пор неверные стоят на всех базах) |
Цитата:
2) Карты не меняется потому что сервер не обрабатывает транспорт как отдельную карту и берёт данные о глобальной карте. Нет обработчика такого типа карт 3) Ага, именно так. А как привязывается это ГО? Не в базе же по координатам ставится =) Есть зачатки обработки подобных карт. И вот в особом месте привязывается ГО-транспорт к этой самой, для мангоса пока, гипотетической карте. Карта движется (хз как...), а так как трнспорт находится именно на ней, создаётся впечатление, что движется ГО. Всё вышеизложенное - мои логические выводы и память о прошлой теме. |
Вложений: 2
Ветка на гетмангос
[Patch] Support for npc on transport Данный патч не принят, и никогда не будет принят в ядро по причине неверной реализации работы. Однако попробовать, проверить и т.д. нам никто ведь не запрещает? В аттаче - подведенный (лично мной) под 9913 ревизию патч из вышеупомянутой ветки, однако вообще не проверенный - может и не скомпилится даже. Все в ваших силах - смотрите, пробуйте, проверяйте. Под какую ревизию тут sql файл - вообще представления не имею, даже не открывал его. Сам сейчас буду пробовать компилить и смотреть в работе, так что может комменты еще последуют. PS Компилится без ошибок. PS Запускается без ошибок. Входя на транспорт с петом (небоевым) - когда корабль поплыл, пет уезжает назад. Но если двинуться немного - он прибегает. В итоге он все-таки пропадает... В консоли идут ошибки: Код:
ERROR:Creature (GUIDLow: 1) X: 2135.954346 Y: 5155.607910 (original) in grid[36,41]cell[1,4] instead grid[36,41]cell[0,5] Еще TransOffsetX, TransOffsetY, TransOffsetZ,TransOffsetO - позиция и ориентация относительно корабля? А как и откуда ее брать вообще? Если только сервер сам заполняет... Типа они должны сами заполняться когда НПС ставишь на корабль? Не заполняются. Туда петы прописываются, с которыми на корабль поднимаешься? Хрен знает. Я сейчас попробую туда что-то от балды вкатать (номер корабля и НПС которые на нем стоят), не знаю что получится. Хотя я даже от балды не знаю что туда лить - в entry номер корабля, в npc_entry - guid моба? А в позицию - вообще хрен знает. PS Оопс, мобов на дне нет... Ну, обычно когда корабль уплывает - мобы остаются висеть в воздухе, или падают на дно. В воздухе не висели, на дне я их не нашел. Корабль приплыл, я вынырнул - они на корабле. Корабль уплыл - они остались в воздухе висеть. PS Почитал лог, много думал... Глянул по базе: То есть, судя по логу, патч работает только с 12 транспортами, из 29 имеющихся? Я тестил на: 190536 - Stormwind Harbor and Valiance Keep, Borean Tundra ("The Kraken") На нем не фурычит. То есть мне идти смотреть те, которые в логе упомянуты? Короче - моск плавиццо. У меня пока есть другие дела, так что наверное я тестирование продолжу в другое время... PS Причем, замечу - данные-то из таблицы запрашиваются, однако сама таблица пустая. |
Насколько мне известно у близарда двухмерная сетка в игре те Х и Y на каждом каждом транспорте она имеется своя те при движении корабля координаты не меняются. И моб стоит на месте я так думаю :)
|
все так, но проблема вот в чем:
транспорт имеет координаты x1,y1,z1. транспорт НЕ ПЕРЕМЕЩАЕТСЯ в мире - это всего лишь закольцованный видеоролик с бегунком прокрутки (таймстампом), который прокручивается автоматически клиентом - но это отдельный разговор. когда юнит заходит на корабль, этому юниту выставляется флаг (ON_TRASPORT) и в create и update пакетах начинают рассылаться дополнительные координаты ОТНОСИТЕЛЬНО корабля, x2, y2, z2. благодаря выставленному флагу мы видим уплывающего юнита вместе с кораблем, если флаг не выставить - корабль уплывет, юнит будет стоят на месте и когда "земля уплывет из под ног", юнит плюхнется на землю или в воду. так вот проблема: в момент захода на корабль координаты юнита становятся равны координатам корабля и не меняются в течении всего времени пребывания на корабле. любое движение юнита вроде как влечет за собой изменение его координат и если их сменить (напомню, они остались равны координатам корабля, который стоит на пристани), то юнит мгновенно телепортирует с уплывшего корабля на пристань, где визуально (подчеркиваю - визуально. фактически он там так и стоит, никуда не делся) корабля уже нет. собственно решение проблемы: нельзя изменять основные координаты юнита, пока он на корабле и у юнита выставлен флаг, нужно изменять только относительные координаты. т.е. что имеем: фактически - да, получается что юнит продолжает быть на месте корабля, стоящего на пристани. на сервере. и когда к этой пристани подбегает другой юнит, ему креатится корабль (с правильным таймстампом) и наш уплывший юнит тоже. только кретить его нужно правильно - с высталенным флагом и переданным гуидом корабля. тогда клиент отрисует отсутсвующий/подплывающий/уплывающий корабль и нашего юнита на нем. без всяких проблем. основная проблема - правильный таймстамп в create пакете корабля. вторая проблема - правильный create для находящихся на этом корабле юнитов. ну, вторая проблема - не проблема вообще, а с первой так до сих пор никто и не разобрался еще. ну и еще существует третья проблема - как отслеживать момент захода плеера на транспортный ГО и момент когда юнит уходит с корабля (может это и не проблема тоже, но лично мне пока неизвестно). нет никакой карты в карте. нужно все правильно реализовывать. |
Какой-то странный патч. В команде добавления GO почему-то идет запись в таблицу creature_transport...
Код:
@@ -726,6 +727,13 @@ bool ChatHandler::HandleGameObjectAddCommand(const char* args) Видимо надо перенести в bool ChatHandler::HandleNpcAddCommand(const char* args)... Так же не понятно зачем были добавлены Код:
+ // Transport info Код:
// transport |
Да, ты почти слово в слово в оригинальной теме это писал. Но так как я не знаю как именно это править - я и не стал кривыми руками лезть, побоялся. :(
А вот насчет заполнения таблицы возникает болезненный вопрос - а как? Координаты же по .gps берутся относительно основной карты, а не относительно транспорта? То есть - наощупь как-то их брать? |
Цитата:
|
Цитата:
|
Цитата:
Кроме того всегда можно транспорту сказать "СТОП". И транспорт будет стоять на месте не двигаясь |
координаты эти существуют. их присылает клиент.
|
Цитата:
|
Вложений: 1
ступил.
Поправил в соответствии с постом TOM_RUS (убрал лишний кусочек, перекинул другой кусочек). Кто проверять будет? :) :) :) Я себе в этом не доверяю вообще. :) Ну и остается вопрос с заполнением таблицы. Фраза "не будет проблем с заполнением таблицы" мне непонятна. Как процесс-то выглядеть должен? В игре перемещать НПС на корабль, и оно само в таблицу пропишется? Вставать на корабль и с .gps получать координаты, которые потом в таблицу вбивать? Фразы "Относительное смещение игрока относительно транспорта есть часть мувмент пакета" и "координаты эти существуют. их присылает клиент" вызывают у меня суеверный ужас. :) :) Ессно теперь даже не компилится, куча ошибок "undeclared identifier", "is not a member of"... Как-то буду разбираться. :) Как я понимаю, мне теперь просто вместо m_transportGUID и m_transportPosition[i], надо писать MovementInfo(t_guid) и ... что? MovementInfo(t_pos.[i])... как? :( |
Цитата:
Код:
+ m_transportGUID = owner->GetTransport()->GetGUID(); Код:
movementInfo.SetTransportData(owner->GetTransport()->GetGUID(), owner->GetTransOffsetX(), owner->GetTransOffsetX(), owner->GetTransOffsetX(), owner->GetTransOffsetO(), 0, -1) |
Вложений: 2
Не стал пока удалять m_transportPosition[0] и т.д. решил просто посмотреть, кому интересно во вложении + sql с парой строчек! корабль стоит искать в Грозовой Гряде Ордынский!
Вообще если честно - это беспонтовый мод! От него толку 0! По сути да визуально мы видим npc (мобы, пушки и т.д.) как они "плывут" на коробле, но например у нпс не возможно взять кв, даже убить его через .die *грубо* не выходит! |
Цитата:
|
Тестировал я этот патч. Мобы действительно зависают. Но мной был замечен еще один странный баг. Бывает, что NPC еще агрятся на корабле т.е двигатся не могут, но игрок входит в бой. Но это бывает не всегда, а только если подойти к NPC с определенного ракурса. Остальное, так "полная визуализация".
Ну а если вот определенный транспорт асоциируется со своей картой, которая по видимому движется вместе с ним... или нет... Хорошо, допустим реализация такая есть... Но как узнать координаты местонахождения моба на корабле с той карты, к которой клиенту нет доступа? (ошибка 132). Что-то там так все накручено... Наверное это просто маскировка, чтобы ввести нас в заблужнение. Дело в том, что при входе на корабль на официальном сервере мы просто перемещаемся игроком в другую карту (реакция клиента при перемещении из зоны в зону меняется музыка и др), как портал в инст. |
Цитата:
Код:
TransOffsetX TransOffsetY TransOffsetZ TransOffsetO |
Цитата:
По поводу торговли, кв и прочего - надо смотреть обработчик доступности НПС, т.к. НПС для сервера, как я понял, вообще нет, то нужно писать отдельный обработчик, который будет сверяться с доступностью НПС на корабле в том случае, если сам игрок тоже находится на корабле... Также как и с др координатами, но только брать уже координаты на корабле из таблицы. Ну, логику, думаю, вы поняли... |
Цитата:
А у меня сейчас этот кусок перемещен? О_о (да-да-да, я сто раз повторял, что я ТУПОЙ!!!) Гляну - отпишусьбл.... ничего не понимаю, может и правда тупой? В том смысле, что может у меня все это уже сделано, а я просто свой же моск люблю напрасно. :( add1: Ага, в патче от Rage Hunter вроде бы есть строка Код:
unit->m_movementInfo.SetTransportData(unit->m_transportGUID, unit->m_transportPosition[0], unit->m_transportPosition[1], unit->m_transportPosition[2], unit->m_transportPosition[3], 0, 0); У меня она тоже есть - так что я сейчас попробую ставить неписей на корабль, и смотреть что из этого выйдет. Точнее - войдет в таблицу. add2: Попробовал - не прокатило. Что бы еще попробовать? |
Цитата:
В куске: Код:
@@ -726,6 +727,13 @@ bool ChatHandler::HandleGameObjectAddCommand(const char* args) Сам пока что-то не желаю заморачиваться ради неизвестно, пашушего или нет патча =) Хотя... Может стоит, ради спортивного интереса =) |
Вложений: 1
Цитата:
Цитата:
Цитата:
Цитата:
add1: А так, не к месту... Там чуть ниже, под pCreature->Relocate(x,y,z,o); есть кусок Код:
if(!pCreature->IsPositionValid()) Короче, мне сильно не нравится снова и снова чувствовать себя идиотом. :) Я сейчас в аттач присобачу свою bool ChatHandler::HandleNpcAddCommand(const char* args) Если у кого-то хватит совести помочь и наставить на путь истинный (то бишь сделать все за меня и ткнуть носом "ну тупо-о-ой!") - я буду счастлив. А если еще и не просто напишет, но и объяснит - что там почему и зачем - благодарность моя не будет знать границ (в пределах разумного!) :) |
А такая ошибка, которую ты привёл в коде ниже у тебя не выскакивает?
Код:
Creature (guidlow %d, entry %d) not created. бла-бла-бла... P.S: sLog.outErrorDb - выводит данные об в лог DBError. Пример: Код:
sLog.outErrorDb("CreatureEventAI: Event %u Action %u uses non-existent SpellID %u.", i, j+1, action.cast.spellId); Код:
WorldDatabase.PExecuteLog("DELETE FROM `creature_ai_scripts` WHERE `id`=%u", i); Код:
WorldDatabase.PExecuteLog("INSERT INTO creature_transport (entry, npc_entry, TransOffsetX, TransOffsetY, TransOffsetZ, TransOffsetO) values (%u, %u, %f, %f, %f, %f)", chr->GetTransport()->GetEntry(), id, chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO()); |
Текущее время: 18:33. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS