You are not logged in.
@Den_spb - отлично, мне в управлении даже ничего менять не пришлось, работает и так.
вот код для клео 3 - http://pastebin.com/h2Cz0YeH
Я как понимаю, баг, когда корона просвечивает через машину
зависит от короны и его не исправить?
Offline
+ Теперь поворотники продолжают мигать, если игрок вышел из машины - но до тех пор, пока он не сядет в другую машину.
Ура!
Offline
Мб надо поиграть с параметрами процедуры? Или проверять на obstacles между игроком и короной и убирать ее самому?
Offline
Мб надо поиграть с параметрами процедуры?
Скорей всего, дело не в параметрах. Короны фар машин не просвечивают благодаря тому, что их радиус меняется от нуля до максимального значения - в зависимости от текущего расположения камеры относительно машины.
Или проверять на obstacles между игроком и короной
Да, можно попробовать и такой вариант в случае чего.
Last edited by Den_spb (13-01-2011 00:15)
Offline
эм...а нафига размер то менять?
Я имею ввиду отображение игрой корон фар машины (поступать аналогично с поворотниками не предлагаю).
сделай, как стопари и свет в игре - просто корона, мб две-три на одном месте(для яркости) и всё
Так и сделано на данный момент. Просто корона, по 2 штуки в каждой точке. Возможно, всё так и оставлю - ведь корона просвечивает не через всю машину, а только через поверхность, с которой пересекается.
Last edited by Den_spb (14-01-2011 03:45)
Offline
Обновите пожалуста cleo3-совместимый код до версии 1.1, а то у меня библиотека CLEO4 не работает.
Offline
@Ford - выше посты то читай, http://pastebin.com/h2Cz0YeH
Offline
Sergey81 я не знаю как ты, но вот это http://pastebin.com/h2Cz0YeH и версия 1.1 для cleo4 различаюся как день и ночь, и мягко говоря вот это http://pastebin.com/h2Cz0YeH - бред, у меня стажа скоро будет 9 лет за рулем, в том числе и профессионально, и на скольких авто я ездил, что Российских что иномарках, я ни в одном авто такого не видел, чтобы указатели поворотов или аварийка включались поворотом колес, как в этом скрипте, в том числе и на моей личной иномарке такого нет.
А вот версия 1.1 для cleo4 более всего соответствует реальности.
Надеюсь я нормально объяснил в чем разница.
Потому и прошу сделать cleo3-совместимый код для версии 1.1, если бы сам мог - то не просил-бы.
Offline
@Ford -
и мягко говоря вот это http://pastebin.com/h2Cz0YeH - бред, у меня стажа скоро будет 9 лет за рулем, в том числе и профессионально, и на скольких авто я ездил, что Российских что иномарках, я ни в одном авто такого не видел, чтобы указатели поворотов или аварийка включались поворотом колес, как в этом скрипте, в том числе и на моей личной иномарке такого нет.
я сразу сказал, что в моей адаптации кода управление поворотниками как в игре мафия, если знаешь такую. Ты не забыл что скрипт для GTA SA, а не для твоей иномарки?
Собственно код управления хорошо выделяется на фоне остального, строки 143-202 замени кодом из оригинала и всё.
Offline
Собственно код управления хорошо выделяется на фоне остального, строки 143-202 замени кодом из оригинала и всё.
Не получается, у меня SB выдает неизвестная команда ehd и then.
Offline
@Ford - ну как то так: http://pastebin.com/q4qrXXKk
Offline
Sergey81 СПАСИБО
Offline
У меня вопрос есть, как реализовано цепляние короны без шлейфа, можно поподробнее, как это организуется, объясните, и можно ли пользоваться таким способом в своих скриптах, это скорее к автору все.
I know everything and nothing...
Offline
Для создания короны вызывается процедура CCoronas__addCorona (0x6FC580). Одним из передаваемых параметров является указатель на структуру транспорта, благодаря чему корона прицепляется к данному транспорту, а не создаётся "отдельно". Простой пример: прицепим 2 синих короны к машине - с оффсетами 1.0 2.0 3.0 и 4.0 5.0 6.0:
while true wait 0 if 056E: car 0@ defined then 0A97: 1@ = car 0@ struct 0A9F: 2@ = current_thread_pointer 3@ = 1.0 4@ = 2.0 5@ = 3.0 0AC7: 6@ = var 3@ offset 0AA5: 0x6FC580 21 21 1 0 0x41700000 0 0x3FC00000 0 0 0 0 0 attach_corona_flare 0 type 0 0x43160000 radius 0.3 with_offsets 6@ intensity 255 blue 255 green 0 red 0 to_vehicle_struct 1@ unical_number 2@ 3@ = 4.0 4@ = 5.0 5@ = 6.0 2@ += 1 0AA5: 0x6FC580 21 21 1 0 0x41700000 0 0x3FC00000 0 0 0 0 0 attach_corona_flare 0 type 0 0x43160000 radius 0.3 with_offsets 6@ intensity 255 blue 255 green 0 red 0 to_vehicle_struct 1@ unical_number 2@ end end
Назначение параметров flare, type, radius, intensity, RGB - то же, что и в стандартных опкодах создания корон.
Параметр offsets - указатель на вектор, показывающий положение короны в системе координат машины. Можно записать оффсеты в три последовательные переменные, тогда указателем на вектор будет указатель на первую переменную.
Параметр struct - структура транспорта.
Параметр unical_number - уникальный номер. Как я уже говорил, у всех корон, создаваемых в игре, должны быть разные уникальные номера. Если 2 короны имеют одинаковые номера, то та корона, которая была создана раньше, будет удалена. Я в качестве номера использую адрес потока, к которому прибавляется 1 для каждой последующей короны.
Offline
Версия 2.0 - теперь поворотниками могут пользоваться все водители Сан-Андреаса, а не только главный герой.
Архив прикреплён к первому сообщению темы.
Last edited by Den_spb (05-01-2012 02:54)
Offline
А что за точки пути? Ты разобрал алгоритм передвижения авто в пространстве игры?
Offline
Я нашёл способ вычисления координат точки пути машины по известному ID-номеру точки.
В структурах автомобилей и байков есть такие смещения:
0A8E: 0_NextPathPointID = 0_VehicleStruct + 0x3A6 // int НОМЕР СЛЕДУЮЩЕЙ ТОЧКИ ПУТИ (word) 0A8E: 0_CurrPathPointID = 0_VehicleStruct + 0x3A4 // int НОМЕР ТЕКУЩЕЙ ТОЧКИ ПУТИ (word) 0A8E: 0_PrewPathPointID = 0_VehicleStruct + 0x3A8 // int НОМЕР ПРЕДЫДУЩЕЙ ТОЧКИ ПУТИ (word)
Если известен ID-номер точки пути, то её координаты можно вычислить так:
if 2@ <> 0xFFFF // значение 0xFFFF - транспорт не движется по пути или прицеплен к другому транспорту then 0085: 28@ = 2@ // (int) 0B15: 2@ = 2@ SHR 0xA 2@ *= 4 2@ += 0x96F854 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 if 2@ <> 0 then 0085: 2@ = 28@ // (int) 0B10: 28@ = 28@ AND 0x3FF 28@ *= 0xE 0B15: 2@ = 2@ SHR 0xA 2@ *= 4 2@ += 0x96F974 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 005A: 28@ += 2@ // (int) Получили адрес структуры точки 0A8E: 23@ = 28@ + 0 // int смещение для X 0A8E: 24@ = 28@ + 2 // int смещение для Y 0A8E: 25@ = 28@ + 4 // int смещение для Z for 26@ = 0 to 2 // переводим word * 8 в float 0A8D: 23@(26@,3i) = read_memory 23@(26@,3i) size 2 virtual_protect 0 if 23@(26@,3i) >= 0x8000 // negative word then 23@(26@,3i) += 0xFFFF0000 // convert to negative dword end 0093: 23@(26@,3i) = integer 23@(26@,3i) to_float 23@(26@,3f) /= 8.0 end end end
Алгоритм работы с точками путей применяется, например, в этой процедуре:
.text:0049D610 CTrafficLights_ShouldCarStopForTrafficLight proc near
Что касается скрипта поворотников, то он сначала вычисляет координаты следующей, текущей и предыдущей точек пути по описанному методу, а затем вычисляет угол между отрезками "следующая-текущая" и "текущая-предыдущая". Если угол не равен нулю, то можно сделать вывод, что машина поворачивает. На перекрёстках повороты, как правило, более крутые (обычно более 30 градусов) - это позволяет отличить поворот на перекрёстке от простого движения по кривой.
Offline
вычисления выглядят монструозно, молодец))
Offline
Офигеть, и зачем я только в армию пошёл. В следующем июле задолбаюсь новые моды искать и качать, не говоря уж про анонс GTA V, о котором я только сегодня узнал. Надеюсь, вторая версия клео3-совместима, а то придется адаптировать с клео4, или какое там клео щас у вас последнее
Offline
Есть возможность включать поворотники машинам педов, перестраивающихся на шоссе?
И как насчёт дополнительных оффсетов для мотоциклов? Например, задние поворотники в 99% случаев сливаются посередине.
Also known as HemiG
It's cool to Hate. It's cool to be a bloody guitarist.
Offline
Да, самая главная функция поворотников - показывать, куда тачка перестраивается. И желательно вообще свести перестроение к минимуму. Дико бесит.
Offline