Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Моды (http://mangos.ytdb.ru/forumdisplay.php?f=8)
-   -   [mod] NPC on Transport (http://mangos.ytdb.ru/showthread.php?t=1026)

lovepsone 11.05.2010 14:30

[mod] NPC on Transport
 
люди подскажите как прибить npc к обьекту, но при этом что бы обьект двигался !

KiriX 11.05.2010 14:32

Это что за бред вообще???
Опишите, что вы вообще хотите получить в результате. Объект двигаться не может.
Или вы о НПС на транспорте???

lovepsone 11.05.2010 16:08

меня интересует то что в ледяной короне дережабли летают без нпс !а нпс стоят в воздухе .

YuruY 11.05.2010 16:16

Прибить никак.

RomanRom2 11.05.2010 17:04

ну почему же никак. сесть на лавочку или стул мы же можем...

или вот например в катаклизме когда ты начинаешь играть воргеном, то ты начинаешь игру в фигурке воргена и в кандалах. кандалы - вообще говоря не ГО, а видимо м2. их там несколько стоит в стартовой воргенов, если обращали внимание.

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

http://www.youtube.com/watch?v=uV168oMfPgg

так что стоит задуматься об этом.

KiriX 11.05.2010 17:15

Цитата:

Сообщение от RomanRom2 (Сообщение 6179)
ну почему же никак. сесть на лавочку или стул мы же можем...

или вот например в катаклизме когда ты начинаешь играть воргеном, то ты начинаешь игру в фигурке воргена и в кандалах. кандалы - вообще говоря не ГО, а видимо м2. их там несколько стоит в стартовой воргенов, если обращали внимание.

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

http://www.youtube.com/watch?v=uV168oMfPgg

так что стоит задуматься об этом.

Это больше похоже на скрипт с отбором у игрока управления и зависом перса в опред позе в опред точке с опрделённой ориентацией в пространстве. При чём тут привязка НПС к ГО?

RomanRom2 11.05.2010 17:20

не причем. это лирическое отступление.
про ГО я вроде сказал, на лавку сесть можем, в лифте или метро проехаться тоже, на кораблях/дирижаблях тоже. и нцп это делают вроде тоже. по крайней мере в метро я с ними катался. только тут проблема:
транспортный ГО ездит в клиенте, а не на сервере. поезд с нпц то уехал, только координаты этого нпц остались на месте. и как только пошевелить этим нпц, то он тут же телепортнется обратно...

lovepsone 11.05.2010 17:23

я так понял что нада писать скрипт на сд2?

Mayss 11.05.2010 19:38

Цитата:

Сообщение от RomanRom2 (Сообщение 6183)
не причем. это лирическое отступление.
про ГО я вроде сказал, на лавку сесть можем, в лифте или метро проехаться тоже, на кораблях/дирижаблях тоже. и нцп это делают вроде тоже. по крайней мере в метро я с ними катался. только тут проблема:
транспортный ГО ездит в клиенте, а не на сервере. поезд с нпц то уехал, только координаты этого нпц остались на месте. и как только пошевелить этим нпц, то он тут же телепортнется обратно...

Тоесть нужно реализовывать скрипт транспорта который будет обрабатываться на стороне сервера?.

YuruY 11.05.2010 20:00

RomanRom2
Я и говорю, пока вариант один: прибиваем ГО (неподвижное (для антуража), на стул-то мы сесть можем=)), на него прибиваем неписей.

KiriX 11.05.2010 20:10

Цитата:

Сообщение от lovepsone (Сообщение 6184)
я так понял что нада писать скрипт на сд2?

Цитата:

Сообщение от Mayss (Сообщение 6193)
Тоесть нужно реализовывать скрипт транспорта который будет обрабатываться на стороне сервера?.

Обоим незачёт. Про SD2 сказал я - к транспорту отношения не имеет.
Цитата:

Сообщение от YuruY (Сообщение 6195)
RomanRom2
Я и говорю, пока вариант один: прибиваем ГО (неподвижное (для антуража), на стул-то мы сесть можем=)), на него прибиваем неписей.

Не прибьёшь так. Стул в воздухе висеть останется, как транспорт двинется. И НПС, и ГО привязываются к карте, а транспорт - это не карта... Вывод ясен?

RomanRom2 11.05.2010 20:11

Цитата:

Сообщение от Mayss (Сообщение 6193)
Тоесть нужно реализовывать скрипт транспорта который будет обрабатываться на стороне сервера?.

обязательно. только я не уверен что это должен быть скрипт. это скорее должен быть серверный код.

Цитата:

Сообщение от YuruY (Сообщение 6195)
RomanRom2
Я и говорю, пока вариант один: прибиваем ГО (неподвижное (для антуража), на стул-то мы сесть можем=)), на него прибиваем неписей.

вопрос в том, как слинковать (прибить) юнит к го. мне такой метод неизвестен (это не означает что его нет :)).

timmit 11.05.2010 20:23

Самый прикол, что у близов транспорт - похоже это карта, но как то она хитро обрабатывается. И возможно все нпс и Го находятся как раз на этой карте и тоже как то хитро обрабатываются, но это предположение. Данные по ним в дбц в картах есть.

Burned 11.05.2010 20:34

А тем временем... два месяца назад появился патч:
http://getmangos.com/community/showt...ight=transport
Правильные мысли в этом направлении писал Neo2003 под постом #3.

KiriX 12.05.2010 00:38

Цитата:

Сообщение от timmit (Сообщение 6199)
Самый прикол, что у близов транспорт - похоже это карта, но как то она хитро обрабатывается. И возможно все нпс и Го находятся как раз на этой карте и тоже как то хитро обрабатываются, но это предположение. Данные по ним в дбц в картах есть.

Именно так - это уже даже обсуждалось.

SilverIce 12.05.2010 01:14

возможно у близзов любая карта - платформа, и любой объект имеет свойства платформы для перемещения в себе других объектов
(но конечно используется это только для transport и vehicle)
Транспорт у нас - изначальный хак, не часть карты, сложно что-то менять не тронув его.
Цитата:

Сообщение от timmit (Сообщение 6199)
И возможно все нпс и Го находятся как раз на этой карте и тоже как то хитро обрабатываются, но это предположение. Данные по ним в дбц в картах есть.

Но всеравно не понимаю смысла выделять запись в dbc под транспорт..

[added]
Где-то слышал что транспорт на самом деле между континентами не перемещается, просто на каждой карте есть его копия, коппи отличаются по гуидам. Если так, то нпс на транспорте тоже должны быть копиями

KiriX 12.05.2010 01:28

Цитата:

Сообщение от SilverIce (Сообщение 6211)
[added]
Где-то слышал что транспорт на самом деле между континентами не перемещается, просто на каждой карте есть его копия, коппи отличаются по гуидам. Если так, то нпс на транспорте тоже должны быть копиями

Несомненно, именно так - копия транспорта, копия НПС. Транспорт - это отдельная карта - поэтому имеет отдельную запись в ДБЦ.

tempura 12.05.2010 04:18

Тут еще показателен транспорт, работающий по одной зоне - те же летающие корабли в Ледяной Короне. На нем тоже никто не задерживается, кроме PC - ни мобы, ни петы.

Лично мне вообще непонятна сама эта идея "карта в карте", как сейчас работает транспорт. Заходя на транспорт жму gps - карта не меняется, однако я уже оказался на новой карте (движущемся транспорте) - как это?

Насколько я помню, под каждый корабль ставится свой GO с определенными entry и guid и в определенной точке. Если он там не стоит - никакого транспорта не появляется. Если стоит в другой точке - сбиваются периоды. (кстати, периоды под транспорт на Нордскол до сих пор неверные стоят на всех базах)

KiriX 12.05.2010 11:41

Цитата:

Сообщение от tempura (Сообщение 6218)
Тут еще показателен транспорт, работающий по одной зоне - те же летающие корабли в Ледяной Короне.
1) На нем тоже никто не задерживается, кроме PC - ни мобы, ни петы.

2) Лично мне вообще непонятна сама эта идея "карта в карте", как сейчас работает транспорт. Заходя на транспорт жму gps - карта не меняется, однако я уже оказался на новой карте (движущемся транспорте) - как это?

3) Насколько я помню, под каждый корабль ставится свой GO с определенными entry и guid и в определенной точке. Если он там не стоит - никакого транспорта не появляется. Если стоит в другой точке - сбиваются периоды. (кстати, периоды под транспорт на Нордскол до сих пор неверные стоят на всех базах)

1) Как я уже говорил - НПС и ГО привязываются к КАРТЕ, а не к транспорту, который сейчас у нас обрабатывается как ГО.
2) Карты не меняется потому что сервер не обрабатывает транспорт как отдельную карту и берёт данные о глобальной карте. Нет обработчика такого типа карт
3) Ага, именно так. А как привязывается это ГО? Не в базе же по координатам ставится =) Есть зачатки обработки подобных карт. И вот в особом месте привязывается ГО-транспорт к этой самой, для мангоса пока, гипотетической карте. Карта движется (хз как...), а так как трнспорт находится именно на ней, создаётся впечатление, что движется ГО.

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

tempura 16.05.2010 12:05

Вложений: 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]
НПС, установленые на транспорт, тоже остаются стоять на месте. Правда таблица созданная для патча (creature_transport) у меня пустая, и я вообще-то не понимаю - ее наполнять как-то чем-то надо? Там поля entry и npc_entry, и никаких комментов автора об их использовании.
Еще TransOffsetX, TransOffsetY, TransOffsetZ,TransOffsetO - позиция и ориентация относительно корабля? А как и откуда ее брать вообще? Если только сервер сам заполняет...
Типа они должны сами заполняться когда НПС ставишь на корабль? Не заполняются.
Туда петы прописываются, с которыми на корабль поднимаешься? Хрен знает.
Я сейчас попробую туда что-то от балды вкатать (номер корабля и НПС которые на нем стоят), не знаю что получится. Хотя я даже от балды не знаю что туда лить - в entry номер корабля, в npc_entry - guid моба? А в позицию - вообще хрен знает.


PS
Оопс, мобов на дне нет... Ну, обычно когда корабль уплывает - мобы остаются висеть в воздухе, или падают на дно. В воздухе не висели, на дне я их не нашел. Корабль приплыл, я вынырнул - они на корабле. Корабль уплыл - они остались в воздухе висеть.


PS
Почитал лог, много думал...



Глянул по базе:


То есть, судя по логу, патч работает только с 12 транспортами, из 29 имеющихся? Я тестил на:
190536 - Stormwind Harbor and Valiance Keep, Borean Tundra ("The Kraken")
На нем не фурычит. То есть мне идти смотреть те, которые в логе упомянуты?

Короче - моск плавиццо. У меня пока есть другие дела, так что наверное я тестирование продолжу в другое время...


PS
Причем, замечу - данные-то из таблицы запрашиваются, однако сама таблица пустая.

MaxXx2021 17.05.2010 04:55

Насколько мне известно у близарда двухмерная сетка в игре те Х и Y на каждом каждом транспорте она имеется своя те при движении корабля координаты не меняются. И моб стоит на месте я так думаю :)

RomanRom2 17.05.2010 10:35

все так, но проблема вот в чем:

транспорт имеет координаты x1,y1,z1. транспорт НЕ ПЕРЕМЕЩАЕТСЯ в мире - это всего лишь закольцованный видеоролик с бегунком прокрутки (таймстампом), который прокручивается автоматически клиентом - но это отдельный разговор.

когда юнит заходит на корабль, этому юниту выставляется флаг (ON_TRASPORT) и в create и update пакетах начинают рассылаться дополнительные координаты ОТНОСИТЕЛЬНО корабля, x2, y2, z2.

благодаря выставленному флагу мы видим уплывающего юнита вместе с кораблем, если флаг не выставить - корабль уплывет, юнит будет стоят на месте и когда "земля уплывет из под ног", юнит плюхнется на землю или в воду.

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

собственно решение проблемы: нельзя изменять основные координаты юнита, пока он на корабле и у юнита выставлен флаг, нужно изменять только относительные координаты.

т.е. что имеем: фактически - да, получается что юнит продолжает быть на месте корабля, стоящего на пристани. на сервере. и когда к этой пристани подбегает другой юнит, ему креатится корабль (с правильным таймстампом) и наш уплывший юнит тоже. только кретить его нужно правильно - с высталенным флагом и переданным гуидом корабля. тогда клиент отрисует отсутсвующий/подплывающий/уплывающий корабль и нашего юнита на нем. без всяких проблем.

основная проблема - правильный таймстамп в create пакете корабля. вторая проблема - правильный create для находящихся на этом корабле юнитов. ну, вторая проблема - не проблема вообще, а с первой так до сих пор никто и не разобрался еще. ну и еще существует третья проблема - как отслеживать момент захода плеера на транспортный ГО и момент когда юнит уходит с корабля (может это и не проблема тоже, но лично мне пока неизвестно).

нет никакой карты в карте. нужно все правильно реализовывать.

TOM_RUS 17.05.2010 11:35

Какой-то странный патч. В команде добавления GO почему-то идет запись в таблицу creature_transport...
Код:

@@ -726,6 +727,13 @@ bool ChatHandler::HandleGameObjectAddCommand(const char* args)
    float o = float(chr->GetOrientation());
    Map *map = chr->GetMap();
 
+        if(chr->GetTransport())
+        {
+                chr->GetTransport()->AddNpcPassager(id, chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO());
+                WorldDatabase.PQuery("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());
+                return true;
+        }
+

В аналогичной команде для добавления creature этот код вообще отсутствует.
Видимо надо перенести в bool ChatHandler::HandleNpcAddCommand(const char* args)...

Так же не понятно зачем были добавлены
Код:

+                // Transport info
+                uint64 m_transportGUID;
+                float m_transportPosition[4];
+

Это уже есть в классе MovementInfo...

Код:

        // transport
        ObjectGuid t_guid;
        Position t_pos;
        uint32  t_time;
        int8    t_seat;
        uint32  t_time2;

        void SetTransportData(ObjectGuid guid, float x, float y, float z, float o, uint32 time, int8 seat)
        {
            t_guid = guid;
            t_pos.x = x;
            t_pos.y = y;
            t_pos.z = z;
            t_pos.o = o;
            t_time = time;
            t_seat = seat;
        }

А так для работы патча естественно надо таблицу заполнить, тогда NPC не будут никуда проваливаться :)

tempura 17.05.2010 14:27

Да, ты почти слово в слово в оригинальной теме это писал. Но так как я не знаю как именно это править - я и не стал кривыми руками лезть, побоялся. :(

А вот насчет заполнения таблицы возникает болезненный вопрос - а как? Координаты же по .gps берутся относительно основной карты, а не относительно транспорта? То есть - наощупь как-то их брать?

LordJZ 17.05.2010 14:43

Цитата:

Сообщение от tempura (Сообщение 6665)
Да, ты почти слово в слово в оригинальной теме это писал. Но так как я не знаю как именно это править - я и не стал кривыми руками лезть, побоялся. :(

А вот насчет заполнения таблицы возникает болезненный вопрос - а как? Координаты же по .gps берутся относительно основной карты, а не относительно транспорта? То есть - наощупь как-то их брать?

В .gps добавить информацию об координатах на транспорте...

tempura 17.05.2010 15:02

Цитата:

Сообщение от LordJZ (Сообщение 6669)
В .gps добавить информацию об координатах на транспорте...

Так их же вроде не существует? Нет координат на транспорте, потому что транспорт как-то не так обрабатывается.

Deamon 17.05.2010 15:10

Цитата:

Сообщение от tempura (Сообщение 6673)
Так их же вроде не существует? Нет координат на транспорте, потому что транспорт как-то не так обрабатывается.

Относительное смещение игрока относительно транспорта есть часть мувмент пакета.

Кроме того всегда можно транспорту сказать "СТОП". И транспорт будет стоять на месте не двигаясь

RomanRom2 17.05.2010 16:34

координаты эти существуют. их присылает клиент.

TOM_RUS 17.05.2010 19:14

Цитата:

Сообщение от tempura (Сообщение 6665)
А вот насчет заполнения таблицы возникает болезненный вопрос - а как? Координаты же по .gps берутся относительно основной карты, а не относительно транспорта? То есть - наощупь как-то их брать?

Пофиксите команду добавления npc как я писал выше и не будет проблем с заполнением таблицы.

tempura 18.05.2010 04:13

Вложений: 1
ступил.


Поправил в соответствии с постом TOM_RUS (убрал лишний кусочек, перекинул другой кусочек). Кто проверять будет? :) :) :) Я себе в этом не доверяю вообще. :)

Ну и остается вопрос с заполнением таблицы. Фраза "не будет проблем с заполнением таблицы" мне непонятна. Как процесс-то выглядеть должен? В игре перемещать НПС на корабль, и оно само в таблицу пропишется? Вставать на корабль и с .gps получать координаты, которые потом в таблицу вбивать?

Фразы "Относительное смещение игрока относительно транспорта есть часть мувмент пакета" и "координаты эти существуют. их присылает клиент" вызывают у меня суеверный ужас. :) :)


Ессно теперь даже не компилится, куча ошибок "undeclared identifier", "is not a member of"... Как-то буду разбираться. :)

Как я понимаю, мне теперь просто вместо m_transportGUID и m_transportPosition[i], надо писать MovementInfo(t_guid) и ... что? MovementInfo(t_pos.[i])... как? :(

TOM_RUS 18.05.2010 07:17

Цитата:

Сообщение от tempura (Сообщение 6715)
В игре перемещать НПС на корабль, и оно само в таблицу пропишется?

This.

Код:

+                                m_transportGUID = owner->GetTransport()->GetGUID();
+                                m_transportPosition[0] = owner->GetTransOffsetX();
+                                m_transportPosition[1] = owner->GetTransOffsetY();
+                                m_transportPosition[2] = owner->GetTransOffsetZ();
+                                m_transportPosition[3] = owner->GetTransOffsetO();

заменяется на что-то типа
Код:

movementInfo.SetTransportData(owner->GetTransport()->GetGUID(), owner->GetTransOffsetX(), owner->GetTransOffsetX(), owner->GetTransOffsetX(), owner->GetTransOffsetO(), 0, -1)
и т.д. С этим не должно возникнуть проблем.

Rage Hunter 18.05.2010 07:30

Вложений: 2
Не стал пока удалять m_transportPosition[0] и т.д. решил просто посмотреть, кому интересно во вложении + sql с парой строчек! корабль стоит искать в Грозовой Гряде Ордынский!

Вообще если честно - это беспонтовый мод! От него толку 0!
По сути да визуально мы видим npc (мобы, пушки и т.д.) как они "плывут" на коробле, но например у нпс не возможно взять кв, даже убить его через .die *грубо* не выходит!

Deamon 18.05.2010 08:54

Цитата:

Сообщение от Rage Hunter (Сообщение 6721)
Не стал пока удалять m_transportPosition[0] и т.д. решил просто посмотреть, кому интересно во вложении + sql с парой строчек! корабль стоит искать в Грозовой Гряде Ордынский!

Вообще если честно - это беспонтовый мод! От него толку 0!
По сути да визуально мы видим npc (мобы, пушки и т.д.) как они "плывут" на коробле, но например у нпс не возможно взять кв, даже убить его через .die *грубо* не выходит!

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

kampeador 21.05.2010 20:36

Тестировал я этот патч. Мобы действительно зависают. Но мной был замечен еще один странный баг. Бывает, что NPC еще агрятся на корабле т.е двигатся не могут, но игрок входит в бой. Но это бывает не всегда, а только если подойти к NPC с определенного ракурса. Остальное, так "полная визуализация".

Ну а если вот определенный транспорт асоциируется со своей картой, которая по видимому движется вместе с ним... или нет... Хорошо, допустим реализация такая есть... Но как узнать координаты местонахождения моба на корабле с той карты, к которой клиенту нет доступа? (ошибка 132).
Что-то там так все накручено... Наверное это просто маскировка, чтобы ввести нас в заблужнение.
Дело в том, что при входе на корабль на официальном сервере мы просто перемещаемся игроком в другую карту (реакция клиента при перемещении из зоны в зону меняется музыка и др), как портал в инст.

tempura 15.06.2010 01:39

Цитата:

Сообщение от Rage Hunter (Сообщение 6721)
Не стал пока удалять m_transportPosition[0] и т.д. решил просто посмотреть, кому интересно во вложении + sql с парой строчек! корабль стоит искать в Грозовой Гряде Ордынский!

Можно узнать метод, которым брались (задавались?)
Код:

TransOffsetX  TransOffsetY  TransOffsetZ  TransOffsetO
Висящие в воздухе уже достали. :(

KiriX 15.06.2010 02:27

Цитата:

Сообщение от tempura (Сообщение 8667)
Можно узнать метод, которым брались (задавались?)
Код:

TransOffsetX  TransOffsetY  TransOffsetZ  TransOffsetO
Висящие в воздухе уже достали. :(

После перемещения куска кода, который подсказал ТОМ, данные в базу о НПС при из добавлении и нахождении перса на корабле должны сами записываться с правильными координатами в нужную таблицу...
По поводу торговли, кв и прочего - надо смотреть обработчик доступности НПС, т.к. НПС для сервера, как я понял, вообще нет, то нужно писать отдельный обработчик, который будет сверяться с доступностью НПС на корабле в том случае, если сам игрок тоже находится на корабле... Также как и с др координатами, но только брать уже координаты на корабле из таблицы. Ну, логику, думаю, вы поняли...

tempura 15.06.2010 04:08

Цитата:

Сообщение от KiriX (Сообщение 8671)
После перемещения куска кода, который подсказал ТОМ, данные в базу о НПС при из добавлении и нахождении перса на корабле должны сами записываться с правильными координатами в нужную таблицу...

эмм....
А у меня сейчас этот кусок перемещен? О_о (да-да-да, я сто раз повторял, что я ТУПОЙ!!!) Гляну - отпишусьбл.... ничего не понимаю, может и правда тупой? В том смысле, что может у меня все это уже сделано, а я просто свой же моск люблю напрасно. :(


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:
Попробовал - не прокатило.
Что бы еще попробовать?

KiriX 15.06.2010 10:24

Цитата:

Сообщение от tempura (Сообщение 8678)
эмм....
А у меня сейчас этот кусок перемещен? О_о (да-да-да, я сто раз повторял, что я ТУПОЙ!!!) Гляну - отпишусьбл.... ничего не понимаю, может и правда тупой? В том смысле, что может у меня все это уже сделано, а я просто свой же моск люблю напрасно. :(


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:
Попробовал - не прокатило.
Что бы еще попробовать?

Вывод ошибок на полную катушку. Смотри пост 31 - ТОМ предложил заменить, но по сути это один и тот же код, просто вариант ТОМа компактнее.
В куске:
Код:

@@ -726,6 +727,13 @@ bool ChatHandler::HandleGameObjectAddCommand(const char* args)
    float o = float(chr->GetOrientation());
    Map *map = chr->GetMap();
 
+        if(chr->GetTransport())
+        {
+                chr->GetTransport()->AddNpcPassager(id, chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO());
+                WorldDatabase.PQuery("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());
+                return true;
+        }
+

Сразу после WorldDatabase.PQuery добавить вывод ошибки со следующим за командой содержанием ради проверки, правильные ли данные передаются в таблицу.
Сам пока что-то не желаю заморачиваться ради неизвестно, пашушего или нет патча =) Хотя... Может стоит, ради спортивного интереса =)

tempura 15.06.2010 14:14

Вложений: 1
Цитата:

Сообщение от KiriX (Сообщение 8707)
Вывод ошибок на полную катушку.

да понятно бы... :( если бы... не имею технической возможности. но я посоветую.

Цитата:

Сообщение от KiriX (Сообщение 8707)
Смотри пост 31 - ТОМ предложил заменить, но по сути это один и тот же код, просто вариант ТОМа компактнее.

Это для меня нерусская грамота. :(

Цитата:

Сообщение от KiriX (Сообщение 8707)
Сразу после WorldDatabase.PQuery добавить вывод ошибки со следующим за командой содержанием ради проверки, правильные ли данные передаются в таблицу.

Не умею. :(

Цитата:

Сообщение от KiriX (Сообщение 8707)
Сам пока что-то не желаю заморачиваться ради неизвестно, пашушего или нет патча =) Хотя... Может стоит, ради спортивного интереса =)

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



add1:
А так, не к месту...
Там чуть ниже, под pCreature->Relocate(x,y,z,o); есть кусок
Код:

    if(!pCreature->IsPositionValid())
    {
        sLog.outError("Creature (guidlow %d, entry %d) not created. Suggested coordinates isn't valid (X: %f Y: %f)",pCreature->GetGUIDLow(),pCreature->GetEntry(),pCreature->GetPositionX(),pCreature->GetPositionY());
        delete pCreature;
        return false;
    }

и как бы это вообще твой же код для вывода ошибок и есть?


Короче, мне сильно не нравится снова и снова чувствовать себя идиотом. :)

Я сейчас в аттач присобачу свою
bool ChatHandler::HandleNpcAddCommand(const char* args)
Если у кого-то хватит совести помочь и наставить на путь истинный (то бишь сделать все за меня и ткнуть носом "ну тупо-о-ой!") - я буду счастлив.
А если еще и не просто напишет, но и объяснит - что там почему и зачем - благодарность моя не будет знать границ (в пределах разумного!) :)

KiriX 15.06.2010 14:31

А такая ошибка, которую ты привёл в коде ниже у тебя не выскакивает?
Код:

Creature (guidlow %d, entry %d) not created. бла-бла-бла...
Вполне может. И это будет обозначать, что кричер не добавлен, хотя, по логике вещей, запись в таблицу creature_transport всё-равно должна проходить, т.к. проверка на валидность координат стоит выше...

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 выводит данные в файл SQLLog:
Код:

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());
Если скуль-лог будет пустой, то мы просто даже не попадаем в нужный нам if: if(chr->GetTransport())


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

ru-mangos.ru - Русское сообщество MaNGOS